diff --git a/configure.ac b/configure.ac
index 0538815..0809f0b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -80,17 +80,6 @@
     AC_DEFINE(FILE_TABLE_JSON, "/etc/default/obmc/pldm/fileTable.json", [JSON file containing file info for File I/O])
 ])
 
-# Setup verbose option
-AC_ARG_ENABLE([verbose], AS_HELP_STRING([
-	--enable-verbose
-	], [
-	Enable verbosity for PLDM Daemon.
-]))
-AS_IF([test "x$enable_verbose" == "xyes"], [
-    AX_APPEND_COMPILE_FLAGS([-DVERBOSE], [CXXFLAGS])
-    AX_APPEND_COMPILE_FLAGS([-DVERBOSE], [CFLAGS])
-])
-
 AC_DEFINE(BIOS_JSONS_DIR, "/etc/default/obmc/pldm/bios", [Directory housing the json files for BIOS tables])
 AC_DEFINE(BIOS_TABLES_DIR, "/var/lib/pldm/bios", [Directory housing actual BIOS tables])
 
diff --git a/pldmd.cpp b/pldmd.cpp
index e02bb57..7072312 100644
--- a/pldmd.cpp
+++ b/pldmd.cpp
@@ -4,6 +4,7 @@
 #include "registration.hpp"
 
 #include <err.h>
+#include <getopt.h>
 #include <poll.h>
 #include <stdlib.h>
 #include <sys/socket.h>
@@ -14,9 +15,11 @@
 #include <cstdio>
 #include <cstring>
 #include <iomanip>
+#include <iostream>
 #include <iterator>
 #include <phosphor-logging/log.hpp>
 #include <sstream>
+#include <string>
 #include <vector>
 
 #include "libpldm/base.h"
@@ -89,9 +92,44 @@
     log<level::INFO>(tempStream.str().c_str());
 }
 
+void optionUsage(void)
+{
+    std::cerr << "Usage: pldmd [options]\n";
+    std::cerr << "Options:\n";
+    std::cerr
+        << "  --verbose=<0/1>  0 - Disable verbosity, 1 - Enable verbosity\n";
+    std::cerr << "Defaulted settings:  --verbose=0 \n";
+}
+
 int main(int argc, char** argv)
 {
 
+    bool verbose = false;
+    static struct option long_options[] = {
+        {"verbose", required_argument, 0, 'v'}, {0, 0, 0, 0}};
+
+    auto argflag = getopt_long(argc, argv, "v:", long_options, nullptr);
+    switch (argflag)
+    {
+        case 'v':
+            switch (std::stoi(optarg))
+            {
+                case 0:
+                    verbose = false;
+                    break;
+                case 1:
+                    verbose = true;
+                    break;
+                default:
+                    optionUsage();
+                    break;
+            }
+            break;
+        default:
+            optionUsage();
+            break;
+    }
+
     pldm::responder::base::registerHandlers();
     pldm::responder::bios::registerHandlers();
 
@@ -160,13 +198,14 @@
                 sockfd, static_cast<void*>(requestMsg.data()), peekedLength, 0);
             if (recvDataLength == peekedLength)
             {
-#ifdef VERBOSE
-                log<level::INFO>("Received Msg ",
-                                 entry("LENGTH=%zu", recvDataLength),
-                                 entry("EID=0x%02x", requestMsg[0]),
-                                 entry("TYPE=0x%02x", requestMsg[1]));
-                printBuffer(requestMsg);
-#endif
+                if (verbose)
+                {
+                    log<level::INFO>("Received Msg ",
+                                     entry("LENGTH=%zu", recvDataLength),
+                                     entry("EID=0x%02x", requestMsg[0]),
+                                     entry("TYPE=0x%02x", requestMsg[1]));
+                    printBuffer(requestMsg);
+                }
                 if (MCTP_MSG_TYPE_PLDM != requestMsg[1])
                 {
                     // Skip this message and continue.
@@ -179,10 +218,11 @@
                     auto response = processRxMsg(requestMsg);
                     if (!response.empty())
                     {
-#ifdef VERBOSE
-                        log<level::INFO>("Sending Msg ");
-                        printBuffer(response);
-#endif
+                        if (verbose)
+                        {
+                            log<level::INFO>("Sending Msg ");
+                            printBuffer(response);
+                        }
                         result = sendto(socketFd(), response.data(),
                                         response.size(), 0, nullptr, 0);
                         if (-1 == result)
