diff --git a/Makefile.am b/Makefile.am
index 35e5353..ad42d8d 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -46,7 +46,9 @@
 	sol/sol_manager.hpp \
 	sd_event_loop.cpp \
 	sol/sol_manager.cpp \
-	sol/sol_context.cpp
+	sol/sol_context.cpp \
+	command/sol_cmds.hpp \
+	command/sol_cmds.cpp
 
 netipmid_CPPFLAGS = -DNET_IPMID_LIB_PATH=\"/usr/lib/net-ipmid/\"
 netipmid_LDFLAGS = $(SYSTEMD_LIBS) $(CRYPTO_LIBS) $(libmapper_LIBS) $(PHOSPHOR_LOGGING_LIBS) $(LIBADD_DLOPEN) -export-dynamic
diff --git a/command/sol_cmds.cpp b/command/sol_cmds.cpp
new file mode 100644
index 0000000..8f5b0c6
--- /dev/null
+++ b/command/sol_cmds.cpp
@@ -0,0 +1,52 @@
+#include <phosphor-logging/log.hpp>
+#include "main.hpp"
+#include "sol/sol_context.hpp"
+#include "sol/sol_manager.hpp"
+#include "sol_cmds.hpp"
+
+namespace sol
+{
+
+namespace command
+{
+
+using namespace phosphor::logging;
+
+std::vector<uint8_t> payloadHandler(std::vector<uint8_t>& inPayload,
+                                    const message::Handler& handler)
+{
+    auto request = reinterpret_cast<Payload*>(inPayload.data());
+
+    auto solDataSize = inPayload.size() - sizeof(Payload);
+
+    Buffer charData(solDataSize);
+    if( solDataSize > 0)
+    {
+        std::copy_n(inPayload.data() + sizeof(Payload),
+                    solDataSize,
+                    charData.begin());
+    }
+
+    try
+    {
+        auto& context = std::get<sol::Manager&>(singletonPool).
+                getContext(handler.sessionID);
+
+        context.processInboundPayload(request->packetSeqNum,
+                                      request->packetAckSeqNum,
+                                      request->acceptedCharCount,
+                                      request->inOperation.ack,
+                                      charData);
+    }
+    catch (std::exception& e)
+    {
+        log<level::ERR>(e.what());
+        return std::vector<uint8_t>();
+    }
+
+    return std::vector<uint8_t>();
+}
+
+} // namespace command
+
+} // namespace sol
diff --git a/command/sol_cmds.hpp b/command/sol_cmds.hpp
new file mode 100644
index 0000000..3c3e23d
--- /dev/null
+++ b/command/sol_cmds.hpp
@@ -0,0 +1,27 @@
+#pragma once
+
+#include <vector>
+#include "message_handler.hpp"
+
+namespace sol
+{
+
+namespace command
+{
+
+/** @brief SOL Payload Handler
+ *
+ *  This command is used for activating and deactivating a payload type under a
+ *  given IPMI session. The UDP Port number for SOL is the same as the port that
+ *  was used to establish the IPMI session.
+ *
+ *  @param[in] inPayload - Request data for the command.
+ *  @param[in] handler - Reference to the message handler.
+ *
+ *  @return Response data for the command.
+ */
+std::vector<uint8_t> payloadHandler(std::vector<uint8_t>& inPayload,
+                                    const message::Handler& handler);
+} // namespace command
+
+} // namespace sol
