diff --git a/command/channel_auth.cpp b/command/channel_auth.cpp
index e9a91e6..c6e68be 100644
--- a/command/channel_auth.cpp
+++ b/command/channel_auth.cpp
@@ -7,8 +7,8 @@
 namespace command
 {
 
-std::vector<uint8_t> GetChannelCapabilities(std::vector<uint8_t>& inPayload,
-                                            const message::Handler& handler)
+std::vector<uint8_t> GetChannelCapabilities(
+        const std::vector<uint8_t>& inPayload, const message::Handler& handler)
 {
     std::cout << ">> GetChannelCapabilities\n";
 
diff --git a/command/channel_auth.hpp b/command/channel_auth.hpp
index 1d1d5c4..7b922c2 100644
--- a/command/channel_auth.hpp
+++ b/command/channel_auth.hpp
@@ -118,7 +118,7 @@
  *
  * @return Response data for the command
  */
-std::vector<uint8_t> GetChannelCapabilities(std::vector<uint8_t>& inPayload,
-                                            const message::Handler& handler);
+std::vector<uint8_t> GetChannelCapabilities(
+        const std::vector<uint8_t>& inPayload, const message::Handler& handler);
 
 } // namespace command
diff --git a/command/open_session.cpp b/command/open_session.cpp
index 96507f6..d29cbf1 100644
--- a/command/open_session.cpp
+++ b/command/open_session.cpp
@@ -9,13 +9,13 @@
 namespace command
 {
 
-std::vector<uint8_t> openSession(std::vector<uint8_t>& inPayload,
+std::vector<uint8_t> openSession(const std::vector<uint8_t>& inPayload,
                                  const message::Handler& handler)
 {
     std::cout << ">> openSession\n";
 
     std::vector<uint8_t> outPayload(sizeof(OpenSessionResponse));
-    auto request = reinterpret_cast<OpenSessionRequest*>(inPayload.data());
+    auto request = reinterpret_cast<const OpenSessionRequest*>(inPayload.data());
     auto response = reinterpret_cast<OpenSessionResponse*>(outPayload.data());
 
     // Check for valid Authentication Algorithms
diff --git a/command/open_session.hpp b/command/open_session.hpp
index f5111d2..717b99b 100644
--- a/command/open_session.hpp
+++ b/command/open_session.hpp
@@ -174,7 +174,7 @@
  *
  * @return Response data for the command
  */
-std::vector<uint8_t> openSession(std::vector<uint8_t>& inPayload,
+std::vector<uint8_t> openSession(const std::vector<uint8_t>& inPayload,
                                  const message::Handler& handler);
 
 } // namespace command
diff --git a/command/payload_cmds.cpp b/command/payload_cmds.cpp
index 9602c54..1b69a33 100644
--- a/command/payload_cmds.cpp
+++ b/command/payload_cmds.cpp
@@ -13,11 +13,12 @@
 
 using namespace phosphor::logging;
 
-std::vector<uint8_t> activatePayload(std::vector<uint8_t>& inPayload,
+std::vector<uint8_t> activatePayload(const std::vector<uint8_t>& inPayload,
                                      const message::Handler& handler)
 {
     std::vector<uint8_t> outPayload(sizeof(ActivatePayloadResponse));
-    auto request = reinterpret_cast<ActivatePayloadRequest*>(inPayload.data());
+    auto request = reinterpret_cast<const ActivatePayloadRequest*>
+                   (inPayload.data());
     auto response = reinterpret_cast<ActivatePayloadResponse*>
                     (outPayload.data());
 
@@ -81,11 +82,11 @@
     return outPayload;
 }
 
-std::vector<uint8_t> deactivatePayload(std::vector<uint8_t>& inPayload,
+std::vector<uint8_t> deactivatePayload(const std::vector<uint8_t>& inPayload,
                                        const message::Handler& handler)
 {
     std::vector<uint8_t> outPayload(sizeof(DeactivatePayloadResponse));
-    auto request = reinterpret_cast<DeactivatePayloadRequest*>
+    auto request = reinterpret_cast<const DeactivatePayloadRequest*>
             (inPayload.data());
     auto response = reinterpret_cast<DeactivatePayloadResponse*>
             (outPayload.data());
@@ -141,11 +142,12 @@
     return outPayload;
 }
 
-std::vector<uint8_t> getPayloadStatus(std::vector<uint8_t>& inPayload,
+std::vector<uint8_t> getPayloadStatus(const std::vector<uint8_t>& inPayload,
                                       const message::Handler& handler)
 {
     std::vector<uint8_t> outPayload(sizeof(GetPayloadStatusResponse));
-    auto request = reinterpret_cast<GetPayloadStatusRequest*>(inPayload.data());
+    auto request = reinterpret_cast<const GetPayloadStatusRequest*>
+                   (inPayload.data());
     auto response = reinterpret_cast<GetPayloadStatusResponse*>
                     (outPayload.data());
 
diff --git a/command/payload_cmds.hpp b/command/payload_cmds.hpp
index 54b3f10..6901256 100644
--- a/command/payload_cmds.hpp
+++ b/command/payload_cmds.hpp
@@ -108,7 +108,7 @@
  *
  *  @return Response data for the command
  */
-std::vector<uint8_t> activatePayload(std::vector<uint8_t>& inPayload,
+std::vector<uint8_t> activatePayload(const std::vector<uint8_t>& inPayload,
                                      const message::Handler& handler);
 
 constexpr uint8_t IPMI_CC_PAYLOAD_DEACTIVATED = 0x80;
@@ -170,7 +170,7 @@
  *
  * @return Response data for the command.
  */
-std::vector<uint8_t> deactivatePayload(std::vector<uint8_t>& inPayload,
+std::vector<uint8_t> deactivatePayload(const std::vector<uint8_t>& inPayload,
                                        const message::Handler& handler);
 
 /** @struct GetPayloadStatusRequest
@@ -248,7 +248,7 @@
  *
  *  @return Response data for the command
  */
-std::vector<uint8_t> getPayloadStatus(std::vector<uint8_t>& inPayload,
+std::vector<uint8_t> getPayloadStatus(const std::vector<uint8_t>& inPayload,
                                       const message::Handler& handler);
 
 } // namespace command
diff --git a/command/rakp12.cpp b/command/rakp12.cpp
index 1249d80..19dc160 100644
--- a/command/rakp12.cpp
+++ b/command/rakp12.cpp
@@ -14,13 +14,13 @@
 namespace command
 {
 
-std::vector<uint8_t> RAKP12(std::vector<uint8_t>& inPayload,
+std::vector<uint8_t> RAKP12(const std::vector<uint8_t>& inPayload,
                             const message::Handler& handler)
 {
     std::cout << ">> RAKP12\n";
 
     std::vector<uint8_t> outPayload(sizeof(RAKP2response));
-    auto request = reinterpret_cast<RAKP1request*>(inPayload.data());
+    auto request = reinterpret_cast<const RAKP1request*>(inPayload.data());
     auto response = reinterpret_cast<RAKP2response*>(outPayload.data());
 
     // Session ID zero is reserved for Session Setup
@@ -88,7 +88,7 @@
 
     // Copy the Remote Console Random Number from the RAKP1 request to the
     // Authentication Algorithm
-    std::copy_n(reinterpret_cast<uint8_t*>
+    std::copy_n(reinterpret_cast<const uint8_t*>
                 (request->remote_console_random_number),
                 cipher::rakp_auth::REMOTE_CONSOLE_RANDOM_NUMBER_LEN,
                 authAlgo->rcRandomNum.begin());
diff --git a/command/rakp12.hpp b/command/rakp12.hpp
index f68ec47..2d86bdb 100644
--- a/command/rakp12.hpp
+++ b/command/rakp12.hpp
@@ -65,7 +65,7 @@
  *
  * @return Response data for the command
  */
-std::vector<uint8_t> RAKP12(std::vector<uint8_t>& inPayload,
+std::vector<uint8_t> RAKP12(const std::vector<uint8_t>& inPayload,
                             const message::Handler& handler);
 
 } // namespace command
diff --git a/command/rakp34.cpp b/command/rakp34.cpp
index cd455cd..95b8af7 100644
--- a/command/rakp34.cpp
+++ b/command/rakp34.cpp
@@ -53,13 +53,13 @@
     }
 }
 
-std::vector<uint8_t> RAKP34(std::vector<uint8_t>& inPayload,
+std::vector<uint8_t> RAKP34(const std::vector<uint8_t>& inPayload,
                             const message::Handler& handler)
 {
     std::cout << ">> RAKP34\n";
 
     std::vector<uint8_t> outPayload(sizeof(RAKP4response));
-    auto request = reinterpret_cast<RAKP3request*>(inPayload.data());
+    auto request = reinterpret_cast<const RAKP3request*>(inPayload.data());
     auto response = reinterpret_cast<RAKP4response*>(outPayload.data());
 
     // Check if the RAKP3 Payload Length is as expected
diff --git a/command/rakp34.hpp b/command/rakp34.hpp
index e3d82ff..a110a24 100644
--- a/command/rakp34.hpp
+++ b/command/rakp34.hpp
@@ -50,7 +50,7 @@
  *
  * @return Response data for the command
  */
-std::vector<uint8_t> RAKP34(std::vector<uint8_t>& inPayload,
+std::vector<uint8_t> RAKP34(const std::vector<uint8_t>& inPayload,
                             const message::Handler& handler);
 
 } // namespace command
diff --git a/command/session_cmds.cpp b/command/session_cmds.cpp
index f30ef78..706cfcd 100644
--- a/command/session_cmds.cpp
+++ b/command/session_cmds.cpp
@@ -9,13 +9,14 @@
 namespace command
 {
 
-std::vector<uint8_t> setSessionPrivilegeLevel(std::vector<uint8_t>& inPayload,
-                                              const message::Handler& handler)
+std::vector<uint8_t> setSessionPrivilegeLevel(
+        const std::vector<uint8_t>& inPayload, const message::Handler& handler)
 {
     std::cout << ">> setSessionPrivilegeLevel\n";
 
     std::vector<uint8_t> outPayload(sizeof(SetSessionPrivLevelResp));
-    auto request = reinterpret_cast<SetSessionPrivLevelReq*>(inPayload.data());
+    auto request = reinterpret_cast<const SetSessionPrivLevelReq*>
+                   (inPayload.data());
     auto response = reinterpret_cast<SetSessionPrivLevelResp*>
                     (outPayload.data());
     response->completionCode = IPMI_CC_OK;
@@ -44,13 +45,14 @@
     return outPayload;
 }
 
-std::vector<uint8_t> closeSession(std::vector<uint8_t>& inPayload,
+std::vector<uint8_t> closeSession(const std::vector<uint8_t>& inPayload,
                                   const message::Handler& handler)
 {
     std::cout << ">> closeSession\n";
 
     std::vector<uint8_t> outPayload(sizeof(CloseSessionResponse));
-    auto request = reinterpret_cast<CloseSessionRequest*>(inPayload.data());
+    auto request = reinterpret_cast<const CloseSessionRequest*>
+                   (inPayload.data());
     auto response = reinterpret_cast<CloseSessionResponse*>(outPayload.data());
     response->completionCode = IPMI_CC_OK ;
 
diff --git a/command/session_cmds.hpp b/command/session_cmds.hpp
index 00dbfc4..95e3464 100644
--- a/command/session_cmds.hpp
+++ b/command/session_cmds.hpp
@@ -71,8 +71,8 @@
  *
  * @return Response data for the command
  */
-std::vector<uint8_t> setSessionPrivilegeLevel(std::vector<uint8_t>& inPayload,
-                                              const message::Handler& handler);
+std::vector<uint8_t> setSessionPrivilegeLevel(
+        const std::vector<uint8_t>& inPayload, const message::Handler& handler);
 
 constexpr uint8_t IPMI_CC_INVALID_SESSIONID = 0x87;
 
@@ -112,7 +112,7 @@
  *
  * @return Response data for the command
  */
-std::vector<uint8_t> closeSession(std::vector<uint8_t>& inPayload,
+std::vector<uint8_t> closeSession(const std::vector<uint8_t>& inPayload,
                                   const message::Handler& handler);
 
 } // namespace command
diff --git a/command/sol_cmds.cpp b/command/sol_cmds.cpp
index 3096d2e..344b6d8 100644
--- a/command/sol_cmds.cpp
+++ b/command/sol_cmds.cpp
@@ -12,11 +12,10 @@
 
 using namespace phosphor::logging;
 
-std::vector<uint8_t> payloadHandler(std::vector<uint8_t>& inPayload,
+std::vector<uint8_t> payloadHandler(const std::vector<uint8_t>& inPayload,
                                     const message::Handler& handler)
 {
-    auto request = reinterpret_cast<Payload*>(inPayload.data());
-
+    auto request = reinterpret_cast<const Payload*>(inPayload.data());
     auto solDataSize = inPayload.size() - sizeof(Payload);
 
     Buffer charData(solDataSize);
diff --git a/command/sol_cmds.hpp b/command/sol_cmds.hpp
index 010a245..2b0a55a 100644
--- a/command/sol_cmds.hpp
+++ b/command/sol_cmds.hpp
@@ -20,7 +20,7 @@
  *
  *  @return Response data for the command.
  */
-std::vector<uint8_t> payloadHandler(std::vector<uint8_t>& inPayload,
+std::vector<uint8_t> payloadHandler(const std::vector<uint8_t>& inPayload,
                                     const message::Handler& handler);
 
 constexpr uint8_t netfnTransport = 0x0C;
diff --git a/command_table.hpp b/command_table.hpp
index 7a6ee81..85d7c3e 100644
--- a/command_table.hpp
+++ b/command_table.hpp
@@ -34,7 +34,7 @@
  * command is returned as a vector.
  */
 using CommandFunctor = std::function<std::vector<uint8_t>(
-                           std::vector<uint8_t>&, const message::Handler&)>;
+        const std::vector<uint8_t>&, const message::Handler&)>;
 
 /*
  * @struct CmdDetails
