diff --git a/libpldmresponder/base.hpp b/libpldmresponder/base.hpp
index 1bd88f8..544e913 100644
--- a/libpldmresponder/base.hpp
+++ b/libpldmresponder/base.hpp
@@ -30,20 +30,24 @@
         instanceIdDb(instanceIdDb), event(event),
         oemPlatformHandler(oemPlatformHandler), handler(handler)
     {
-        handlers.emplace(PLDM_GET_PLDM_TYPES,
-                         [this](const pldm_msg* request, size_t payloadLength) {
+        handlers.emplace(
+            PLDM_GET_PLDM_TYPES,
+            [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
             return this->getPLDMTypes(request, payloadLength);
         });
-        handlers.emplace(PLDM_GET_PLDM_COMMANDS,
-                         [this](const pldm_msg* request, size_t payloadLength) {
+        handlers.emplace(
+            PLDM_GET_PLDM_COMMANDS,
+            [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
             return this->getPLDMCommands(request, payloadLength);
         });
-        handlers.emplace(PLDM_GET_PLDM_VERSION,
-                         [this](const pldm_msg* request, size_t payloadLength) {
+        handlers.emplace(
+            PLDM_GET_PLDM_VERSION,
+            [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
             return this->getPLDMVersion(request, payloadLength);
         });
-        handlers.emplace(PLDM_GET_TID,
-                         [this](const pldm_msg* request, size_t payloadLength) {
+        handlers.emplace(
+            PLDM_GET_TID,
+            [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
             return this->getTID(request, payloadLength);
         });
     }
diff --git a/libpldmresponder/bios.cpp b/libpldmresponder/bios.cpp
index 986e74a..6687901 100644
--- a/libpldmresponder/bios.cpp
+++ b/libpldmresponder/bios.cpp
@@ -78,29 +78,35 @@
     biosConfig.removeTables();
     biosConfig.buildTables();
 
-    handlers.emplace(PLDM_SET_DATE_TIME,
-                     [this](const pldm_msg* request, size_t payloadLength) {
+    handlers.emplace(
+        PLDM_SET_DATE_TIME,
+        [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
         return this->setDateTime(request, payloadLength);
     });
-    handlers.emplace(PLDM_GET_DATE_TIME,
-                     [this](const pldm_msg* request, size_t payloadLength) {
+    handlers.emplace(
+        PLDM_GET_DATE_TIME,
+        [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
         return this->getDateTime(request, payloadLength);
     });
-    handlers.emplace(PLDM_GET_BIOS_TABLE,
-                     [this](const pldm_msg* request, size_t payloadLength) {
+    handlers.emplace(
+        PLDM_GET_BIOS_TABLE,
+        [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
         return this->getBIOSTable(request, payloadLength);
     });
-    handlers.emplace(PLDM_SET_BIOS_TABLE,
-                     [this](const pldm_msg* request, size_t payloadLength) {
+    handlers.emplace(
+        PLDM_SET_BIOS_TABLE,
+        [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
         return this->setBIOSTable(request, payloadLength);
     });
-    handlers.emplace(PLDM_GET_BIOS_ATTRIBUTE_CURRENT_VALUE_BY_HANDLE,
-                     [this](const pldm_msg* request, size_t payloadLength) {
+    handlers.emplace(
+        PLDM_GET_BIOS_ATTRIBUTE_CURRENT_VALUE_BY_HANDLE,
+        [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
         return this->getBIOSAttributeCurrentValueByHandle(request,
                                                           payloadLength);
     });
-    handlers.emplace(PLDM_SET_BIOS_ATTRIBUTE_CURRENT_VALUE,
-                     [this](const pldm_msg* request, size_t payloadLength) {
+    handlers.emplace(
+        PLDM_SET_BIOS_ATTRIBUTE_CURRENT_VALUE,
+        [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
         return this->setBIOSAttributeCurrentValue(request, payloadLength);
     });
 }
diff --git a/libpldmresponder/fru.hpp b/libpldmresponder/fru.hpp
index b986836..78a1a3e 100644
--- a/libpldmresponder/fru.hpp
+++ b/libpldmresponder/fru.hpp
@@ -232,17 +232,19 @@
             pldm_entity_association_tree* bmcEntityTree) :
         impl(configPath, fruMasterJsonPath, pdrRepo, entityTree, bmcEntityTree)
     {
-        handlers.emplace(PLDM_GET_FRU_RECORD_TABLE_METADATA,
-                         [this](const pldm_msg* request, size_t payloadLength) {
+        handlers.emplace(
+            PLDM_GET_FRU_RECORD_TABLE_METADATA,
+            [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
             return this->getFRURecordTableMetadata(request, payloadLength);
         });
-
-        handlers.emplace(PLDM_GET_FRU_RECORD_TABLE,
-                         [this](const pldm_msg* request, size_t payloadLength) {
+        handlers.emplace(
+            PLDM_GET_FRU_RECORD_TABLE,
+            [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
             return this->getFRURecordTable(request, payloadLength);
         });
-        handlers.emplace(PLDM_GET_FRU_RECORD_BY_OPTION,
-                         [this](const pldm_msg* request, size_t payloadLength) {
+        handlers.emplace(
+            PLDM_GET_FRU_RECORD_BY_OPTION,
+            [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
             return this->getFRURecordByOption(request, payloadLength);
         });
     }
diff --git a/libpldmresponder/platform.hpp b/libpldmresponder/platform.hpp
index 8df9625..eb01e5f 100644
--- a/libpldmresponder/platform.hpp
+++ b/libpldmresponder/platform.hpp
@@ -69,28 +69,34 @@
             pdrCreated = true;
         }
 
-        handlers.emplace(PLDM_GET_PDR,
-                         [this](const pldm_msg* request, size_t payloadLength) {
+        handlers.emplace(
+            PLDM_GET_PDR,
+            [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
             return this->getPDR(request, payloadLength);
         });
-        handlers.emplace(PLDM_SET_NUMERIC_EFFECTER_VALUE,
-                         [this](const pldm_msg* request, size_t payloadLength) {
+        handlers.emplace(
+            PLDM_SET_NUMERIC_EFFECTER_VALUE,
+            [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
             return this->setNumericEffecterValue(request, payloadLength);
         });
-        handlers.emplace(PLDM_GET_NUMERIC_EFFECTER_VALUE,
-                         [this](const pldm_msg* request, size_t payloadLength) {
+        handlers.emplace(
+            PLDM_GET_NUMERIC_EFFECTER_VALUE,
+            [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
             return this->getNumericEffecterValue(request, payloadLength);
         });
-        handlers.emplace(PLDM_SET_STATE_EFFECTER_STATES,
-                         [this](const pldm_msg* request, size_t payloadLength) {
+        handlers.emplace(
+            PLDM_SET_STATE_EFFECTER_STATES,
+            [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
             return this->setStateEffecterStates(request, payloadLength);
         });
-        handlers.emplace(PLDM_PLATFORM_EVENT_MESSAGE,
-                         [this](const pldm_msg* request, size_t payloadLength) {
+        handlers.emplace(
+            PLDM_PLATFORM_EVENT_MESSAGE,
+            [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
             return this->platformEventMessage(request, payloadLength);
         });
-        handlers.emplace(PLDM_GET_STATE_SENSOR_READINGS,
-                         [this](const pldm_msg* request, size_t payloadLength) {
+        handlers.emplace(
+            PLDM_GET_STATE_SENSOR_READINGS,
+            [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
             return this->getStateSensorReadings(request, payloadLength);
         });
 
diff --git a/oem/ibm/libpldmresponder/file_io.hpp b/oem/ibm/libpldmresponder/file_io.hpp
index 67742af..87ef3a9 100644
--- a/oem/ibm/libpldmresponder/file_io.hpp
+++ b/oem/ibm/libpldmresponder/file_io.hpp
@@ -174,52 +174,64 @@
         hostSockFd(hostSockFd), hostEid(hostEid), instanceIdDb(instanceIdDb),
         handler(handler)
     {
-        handlers.emplace(PLDM_READ_FILE_INTO_MEMORY,
-                         [this](const pldm_msg* request, size_t payloadLength) {
+        handlers.emplace(
+            PLDM_READ_FILE_INTO_MEMORY,
+            [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
             return this->readFileIntoMemory(request, payloadLength);
         });
-        handlers.emplace(PLDM_WRITE_FILE_FROM_MEMORY,
-                         [this](const pldm_msg* request, size_t payloadLength) {
+        handlers.emplace(
+            PLDM_WRITE_FILE_FROM_MEMORY,
+            [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
             return this->writeFileFromMemory(request, payloadLength);
         });
-        handlers.emplace(PLDM_WRITE_FILE_BY_TYPE_FROM_MEMORY,
-                         [this](const pldm_msg* request, size_t payloadLength) {
+        handlers.emplace(
+            PLDM_WRITE_FILE_BY_TYPE_FROM_MEMORY,
+            [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
             return this->writeFileByTypeFromMemory(request, payloadLength);
         });
-        handlers.emplace(PLDM_READ_FILE_BY_TYPE_INTO_MEMORY,
-                         [this](const pldm_msg* request, size_t payloadLength) {
+        handlers.emplace(
+            PLDM_READ_FILE_BY_TYPE_INTO_MEMORY,
+            [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
             return this->readFileByTypeIntoMemory(request, payloadLength);
         });
-        handlers.emplace(PLDM_READ_FILE_BY_TYPE,
-                         [this](const pldm_msg* request, size_t payloadLength) {
+        handlers.emplace(
+            PLDM_READ_FILE_BY_TYPE,
+            [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
             return this->readFileByType(request, payloadLength);
         });
-        handlers.emplace(PLDM_WRITE_FILE_BY_TYPE,
-                         [this](const pldm_msg* request, size_t payloadLength) {
+        handlers.emplace(
+            PLDM_WRITE_FILE_BY_TYPE,
+            [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
             return this->writeFileByType(request, payloadLength);
         });
-        handlers.emplace(PLDM_GET_FILE_TABLE,
-                         [this](const pldm_msg* request, size_t payloadLength) {
+        handlers.emplace(
+            PLDM_GET_FILE_TABLE,
+            [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
             return this->getFileTable(request, payloadLength);
         });
-        handlers.emplace(PLDM_READ_FILE,
-                         [this](const pldm_msg* request, size_t payloadLength) {
+        handlers.emplace(
+            PLDM_READ_FILE,
+            [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
             return this->readFile(request, payloadLength);
         });
-        handlers.emplace(PLDM_WRITE_FILE,
-                         [this](const pldm_msg* request, size_t payloadLength) {
+        handlers.emplace(
+            PLDM_WRITE_FILE,
+            [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
             return this->writeFile(request, payloadLength);
         });
-        handlers.emplace(PLDM_FILE_ACK,
-                         [this](const pldm_msg* request, size_t payloadLength) {
+        handlers.emplace(
+            PLDM_FILE_ACK,
+            [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
             return this->fileAck(request, payloadLength);
         });
-        handlers.emplace(PLDM_HOST_GET_ALERT_STATUS,
-                         [this](const pldm_msg* request, size_t payloadLength) {
+        handlers.emplace(
+            PLDM_HOST_GET_ALERT_STATUS,
+            [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
             return this->getAlertStatus(request, payloadLength);
         });
-        handlers.emplace(PLDM_NEW_FILE_AVAILABLE,
-                         [this](const pldm_msg* request, size_t payloadLength) {
+        handlers.emplace(
+            PLDM_NEW_FILE_AVAILABLE,
+            [this](pldm_tid_t, const pldm_msg* request, size_t payloadLength) {
             return this->newFileAvailable(request, payloadLength);
         });
 
diff --git a/pldmd/handler.hpp b/pldmd/handler.hpp
index cfa95eb..b742519 100644
--- a/pldmd/handler.hpp
+++ b/pldmd/handler.hpp
@@ -17,8 +17,8 @@
 
 using Response = std::vector<uint8_t>;
 class CmdHandler;
-using HandlerFunc =
-    std::function<Response(const pldm_msg* request, size_t reqMsgLen)>;
+using HandlerFunc = std::function<Response(
+    pldm_tid_t tid, const pldm_msg* request, size_t reqMsgLen)>;
 
 class CmdHandler
 {
@@ -27,15 +27,16 @@
 
     /** @brief Invoke a PLDM command handler
      *
+     *  @param[in] tid - PLDM request TID
      *  @param[in] pldmCommand - PLDM command code
      *  @param[in] request - PLDM request message
      *  @param[in] reqMsgLen - PLDM request message size
      *  @return PLDM response message
      */
-    Response handle(Command pldmCommand, const pldm_msg* request,
-                    size_t reqMsgLen)
+    Response handle(pldm_tid_t tid, Command pldmCommand,
+                    const pldm_msg* request, size_t reqMsgLen)
     {
-        return handlers.at(pldmCommand)(request, reqMsgLen);
+        return handlers.at(pldmCommand)(tid, request, reqMsgLen);
     }
 
     /** @brief Create a response message containing only cc
diff --git a/pldmd/invoker.hpp b/pldmd/invoker.hpp
index 9903e7f..ddfb99d 100644
--- a/pldmd/invoker.hpp
+++ b/pldmd/invoker.hpp
@@ -30,16 +30,18 @@
 
     /** @brief Invoke a PLDM command handler
      *
+     *  @param[in] tid - PLDM request TID
      *  @param[in] pldmType - PLDM type code
      *  @param[in] pldmCommand - PLDM command code
      *  @param[in] request - PLDM request message
      *  @param[in] reqMsgLen - PLDM request message size
      *  @return PLDM response message
      */
-    Response handle(Type pldmType, Command pldmCommand, const pldm_msg* request,
-                    size_t reqMsgLen)
+    Response handle(pldm_tid_t tid, Type pldmType, Command pldmCommand,
+                    const pldm_msg* request, size_t reqMsgLen)
     {
-        return handlers.at(pldmType)->handle(pldmCommand, request, reqMsgLen);
+        return handlers.at(pldmType)->handle(tid, pldmCommand, request,
+                                             reqMsgLen);
     }
 
   private:
diff --git a/pldmd/pldmd.cpp b/pldmd/pldmd.cpp
index a85157f..c1ba345 100644
--- a/pldmd/pldmd.cpp
+++ b/pldmd/pldmd.cpp
@@ -107,7 +107,7 @@
         {
             if (hdrFields.pldm_type != PLDM_FWUP)
             {
-                response = invoker.handle(hdrFields.pldm_type,
+                response = invoker.handle(tid, hdrFields.pldm_type,
                                           hdrFields.command, request,
                                           requestLen);
             }
diff --git a/test/pldmd_registration_test.cpp b/test/pldmd_registration_test.cpp
index 4f50ae0..4293357 100644
--- a/test/pldmd_registration_test.cpp
+++ b/test/pldmd_registration_test.cpp
@@ -10,19 +10,21 @@
 using namespace pldm::responder;
 constexpr Command testCmd = 0xFF;
 constexpr Type testType = 0xFF;
+constexpr pldm_tid_t tid = 0;
 
 class TestHandler : public CmdHandler
 {
   public:
     TestHandler()
     {
-        handlers.emplace(testCmd,
-                         [this](const pldm_msg* request, size_t payloadLength) {
-            return this->handle(request, payloadLength);
+        handlers.emplace(testCmd, [this](uint8_t tid, const pldm_msg* request,
+                                         size_t payloadLength) {
+            return this->handle(tid, request, payloadLength);
         });
     }
 
-    Response handle(const pldm_msg* /*request*/, size_t /*payloadLength*/)
+    Response handle(uint8_t /*tid*/, const pldm_msg* /*request*/,
+                    size_t /*payloadLength*/)
     {
         return {100, 200};
     }
@@ -43,7 +45,7 @@
 {
     Invoker invoker{};
     invoker.registerHandler(testType, std::make_unique<TestHandler>());
-    auto result = invoker.handle(testType, testCmd, nullptr, 0);
+    auto result = invoker.handle(tid, testType, testCmd, nullptr, 0);
     ASSERT_EQ(result[0], 100);
     ASSERT_EQ(result[1], 200);
 }
@@ -51,10 +53,10 @@
 TEST(Registration, testFailure)
 {
     Invoker invoker{};
-    ASSERT_THROW(invoker.handle(testType, testCmd, nullptr, 0),
+    ASSERT_THROW(invoker.handle(tid, testType, testCmd, nullptr, 0),
                  std::out_of_range);
     invoker.registerHandler(testType, std::make_unique<TestHandler>());
     uint8_t badCmd = 0xFE;
-    ASSERT_THROW(invoker.handle(testType, badCmd, nullptr, 0),
+    ASSERT_THROW(invoker.handle(tid, testType, badCmd, nullptr, 0),
                  std::out_of_range);
 }
