diff --git a/host-bmc/host_pdr_handler.cpp b/host-bmc/host_pdr_handler.cpp
index f23407b..f4c86e6 100644
--- a/host-bmc/host_pdr_handler.cpp
+++ b/host-bmc/host_pdr_handler.cpp
@@ -27,6 +27,25 @@
 const Json emptyJson{};
 const std::vector<Json> emptyJsonList{};
 
+template <typename T>
+uint16_t extractTerminusHandle(std::vector<uint8_t>& pdr)
+{
+    T* var = nullptr;
+    if (std::is_same<T, pldm_pdr_fru_record_set>::value)
+    {
+        var = (T*)(pdr.data() + sizeof(pldm_pdr_hdr));
+    }
+    else
+    {
+        var = (T*)(pdr.data());
+    }
+    if (var != nullptr)
+    {
+        return var->terminus_handle;
+    }
+    return TERMINUS_HANDLE;
+}
+
 HostPDRHandler::HostPDRHandler(
     int mctp_fd, uint8_t mctp_eid, sdeventplus::Event& event, pldm_pdr* repo,
     const std::string& eventsJsonsDir, pldm_entity_association_tree* entityTree,
@@ -226,8 +245,8 @@
         }
         else
         {
-            pldm_entity_association_pdr_add_from_node(node, repo, &entities,
-                                                      numEntities, true);
+            pldm_entity_association_pdr_add_from_node(
+                node, repo, &entities, numEntities, true, TERMINUS_HANDLE);
         }
     }
     free(entities);
@@ -370,6 +389,7 @@
     bool tlValid = true;
     uint32_t rh = 0;
     uint16_t terminusHandle = 0;
+    uint16_t pdrTerminusHandle = 0;
     uint8_t tid = 0;
 
     uint8_t completionCode{};
@@ -439,6 +459,8 @@
             {
                 if (pdrHdr->type == PLDM_TERMINUS_LOCATOR_PDR)
                 {
+                    pdrTerminusHandle =
+                        extractTerminusHandle<pldm_terminus_locator_pdr>(pdr);
                     auto tlpdr =
                         reinterpret_cast<const pldm_terminus_locator_pdr*>(
                             pdr.data());
@@ -464,9 +486,26 @@
                 }
                 else if (pdrHdr->type == PLDM_STATE_SENSOR_PDR)
                 {
+                    pdrTerminusHandle =
+                        extractTerminusHandle<pldm_state_sensor_pdr>(pdr);
                     stateSensorPDRs.emplace_back(pdr);
                 }
-
+                else if (pdrHdr->type == PLDM_PDR_FRU_RECORD_SET)
+                {
+                    pdrTerminusHandle =
+                        extractTerminusHandle<pldm_pdr_fru_record_set>(pdr);
+                }
+                else if (pdrHdr->type == PLDM_STATE_EFFECTER_PDR)
+                {
+                    pdrTerminusHandle =
+                        extractTerminusHandle<pldm_state_effecter_pdr>(pdr);
+                }
+                else if (pdrHdr->type == PLDM_NUMERIC_EFFECTER_PDR)
+                {
+                    pdrTerminusHandle =
+                        extractTerminusHandle<pldm_numeric_effecter_value_pdr>(
+                            pdr);
+                }
                 // if the TLPDR is invalid update the repo accordingly
                 if (!tlValid)
                 {
@@ -475,7 +514,8 @@
                 }
                 else
                 {
-                    pldm_pdr_add(repo, pdr.data(), respCount, rh, true);
+                    pldm_pdr_add(repo, pdr.data(), respCount, rh, true,
+                                 pdrTerminusHandle);
                 }
             }
         }
