diff --git a/host-bmc/host_pdr_handler.cpp b/host-bmc/host_pdr_handler.cpp
index f8594d6..31065a4 100644
--- a/host-bmc/host_pdr_handler.cpp
+++ b/host-bmc/host_pdr_handler.cpp
@@ -106,6 +106,8 @@
                                     PLDM_GET_PDR_REQ_BYTES);
     auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
     bool merged = false;
+    PDRList stateSensorPDRs{};
+    TLPDRMap tlpdrInfo{};
 
     uint32_t nextRecordHandle{};
     uint32_t recordHandle{};
@@ -189,16 +191,19 @@
                 }
                 else
                 {
-                    if (pdrHdr->type == PLDM_STATE_SENSOR_PDR)
+                    if (pdrHdr->type == PLDM_TERMINUS_LOCATOR_PDR)
                     {
-                        const auto& [terminusHandle, sensorID, sensorInfo] =
-                            responder::pdr_utils::parseStateSensorPDR(pdr);
-                        SensorEntry sensorEntry{};
-                        // TODO: Lookup Terminus ID from the Terminus Locator
-                        // PDR with terminusHandle
-                        sensorEntry.terminusID = 0;
-                        sensorEntry.sensorID = sensorID;
-                        sensorMap.emplace(sensorEntry, std::move(sensorInfo));
+                        auto tlpdr =
+                            reinterpret_cast<const pldm_terminus_locator_pdr*>(
+                                pdr.data());
+                        tlpdrInfo.emplace(
+                            static_cast<pdr::TerminusHandle>(
+                                tlpdr->terminus_handle),
+                            static_cast<pdr::TerminusID>(tlpdr->tid));
+                    }
+                    else if (pdrHdr->type == PLDM_STATE_SENSOR_PDR)
+                    {
+                        stateSensorPDRs.emplace_back(pdr);
                     }
                     pldm_pdr_add(repo, pdr.data(), respCount, 0, true);
                 }
@@ -217,6 +222,8 @@
         }
     } while (recordHandle);
 
+    parseStateSensorPDRs(stateSensorPDRs, tlpdrInfo);
+
     if (merged)
     {
         // We have merged host's entity association PDRs with our own. Send an
@@ -371,4 +378,27 @@
     }
 }
 
+void HostPDRHandler::parseStateSensorPDRs(const PDRList& stateSensorPDRs,
+                                          const TLPDRMap& tlpdrInfo)
+{
+    for (const auto& pdr : stateSensorPDRs)
+    {
+        SensorEntry sensorEntry{};
+        const auto& [terminusHandle, sensorID, sensorInfo] =
+            responder::pdr_utils::parseStateSensorPDR(pdr);
+        sensorEntry.sensorID = sensorID;
+        try
+        {
+            sensorEntry.terminusID = tlpdrInfo.at(terminusHandle);
+        }
+        // If there is no mapping for terminusHandle assign the reserved TID
+        // value of 0xFF to indicate that.
+        catch (const std::out_of_range& e)
+        {
+            sensorEntry.terminusID = PLDM_TID_RESERVED;
+        }
+        sensorMap.emplace(sensorEntry, std::move(sensorInfo));
+    }
+}
+
 } // namespace pldm
diff --git a/host-bmc/host_pdr_handler.hpp b/host-bmc/host_pdr_handler.hpp
index fbb206c..9377cb6 100644
--- a/host-bmc/host_pdr_handler.hpp
+++ b/host-bmc/host_pdr_handler.hpp
@@ -51,6 +51,7 @@
 };
 
 using HostStateSensorMap = std::map<SensorEntry, pdr::SensorInfo>;
+using PDRList = std::vector<std::vector<uint8_t>>;
 
 /** @class HostPDRHandler
  *  @brief This class can fetch and process PDRs from host firmware
@@ -71,6 +72,8 @@
     HostPDRHandler& operator=(HostPDRHandler&&) = delete;
     ~HostPDRHandler() = default;
 
+    using TLPDRMap = std::map<pdr::TerminusHandle, pdr::TerminusID>;
+
     /** @brief Constructor
      *  @param[in] mctp_fd - fd of MCTP communications socket
      *  @param[in] mctp_eid - MCTP EID of host firmware
@@ -112,6 +115,16 @@
         return sensorMap.at(entry);
     }
 
+    /** @brief Parse state sensor PDRs and populate the sensorMap lookup data
+     *         structure
+     *
+     *  @param[in] stateSensorPDRs - host state sensor PDRs
+     *  @param[in] tlpdrInfo - terminus locator PDRs info
+     *
+     */
+    void parseStateSensorPDRs(const PDRList& stateSensorPDRs,
+                              const TLPDRMap& tlpdrInfo);
+
   private:
     /** @brief fetchPDR schedules work on the event loop, this method does the
      *  actual work. This is so that the PDR exchg with the host is async.
