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
