diff --git a/host-bmc/host_pdr_handler.cpp b/host-bmc/host_pdr_handler.cpp
index 8317cf0..7dbd4e5 100644
--- a/host-bmc/host_pdr_handler.cpp
+++ b/host-bmc/host_pdr_handler.cpp
@@ -17,6 +17,7 @@
 #include <sdeventplus/source/time.hpp>
 
 #include <fstream>
+#include <type_traits>
 
 PHOSPHOR_LOG2_USING;
 
@@ -51,6 +52,38 @@
     return TERMINUS_HANDLE;
 }
 
+template <typename T>
+void updateContainerId(pldm_entity_association_tree* entityTree,
+                       std::vector<uint8_t>& pdr)
+{
+    T* t = nullptr;
+    if (entityTree == nullptr)
+    {
+        return;
+    }
+    if (std::is_same<T, pldm_pdr_fru_record_set>::value)
+    {
+        t = (T*)(pdr.data() + sizeof(pldm_pdr_hdr));
+    }
+    else
+    {
+        t = (T*)(pdr.data());
+    }
+    if (t == nullptr)
+    {
+        return;
+    }
+
+    pldm_entity entity{t->entity_type, t->entity_instance, t->container_id};
+    auto node = pldm_entity_association_tree_find_with_locality(entityTree,
+                                                                &entity, true);
+    if (node)
+    {
+        pldm_entity e = pldm_entity_extract(node);
+        t->container_id = e.entity_container_id;
+    }
+}
+
 HostPDRHandler::HostPDRHandler(
     int mctp_fd, uint8_t mctp_eid, sdeventplus::Event& event, pldm_pdr* repo,
     const std::string& eventsJsonsDir, pldm_entity_association_tree* entityTree,
@@ -523,24 +556,29 @@
                 {
                     pdrTerminusHandle =
                         extractTerminusHandle<pldm_state_sensor_pdr>(pdr);
+                    updateContainerId<pldm_state_sensor_pdr>(entityTree, pdr);
                     stateSensorPDRs.emplace_back(pdr);
                 }
                 else if (pdrHdr->type == PLDM_PDR_FRU_RECORD_SET)
                 {
                     pdrTerminusHandle =
                         extractTerminusHandle<pldm_pdr_fru_record_set>(pdr);
+                    updateContainerId<pldm_pdr_fru_record_set>(entityTree, pdr);
                     fruRecordSetPDRs.emplace_back(pdr);
                 }
                 else if (pdrHdr->type == PLDM_STATE_EFFECTER_PDR)
                 {
                     pdrTerminusHandle =
                         extractTerminusHandle<pldm_state_effecter_pdr>(pdr);
+                    updateContainerId<pldm_state_effecter_pdr>(entityTree, pdr);
                 }
                 else if (pdrHdr->type == PLDM_NUMERIC_EFFECTER_PDR)
                 {
                     pdrTerminusHandle =
                         extractTerminusHandle<pldm_numeric_effecter_value_pdr>(
                             pdr);
+                    updateContainerId<pldm_numeric_effecter_value_pdr>(
+                        entityTree, pdr);
                 }
                 // if the TLPDR is invalid update the repo accordingly
                 if (!tlValid)
