diff --git a/libpldmresponder/event_parser.cpp b/libpldmresponder/event_parser.cpp
index 611c7ec..b006d56 100644
--- a/libpldmresponder/event_parser.cpp
+++ b/libpldmresponder/event_parser.cpp
@@ -49,7 +49,7 @@
         {
             StateSensorEntry stateSensorEntry{};
             stateSensorEntry.containerId =
-                static_cast<uint16_t>(entry.value("containerID", 0));
+                static_cast<uint16_t>(entry.value("containerID", 0xFFFF));
             stateSensorEntry.entityType =
                 static_cast<uint16_t>(entry.value("entityType", 0));
             stateSensorEntry.entityInstance =
@@ -59,6 +59,10 @@
             stateSensorEntry.stateSetid =
                 static_cast<uint16_t>(entry.value("stateSetId", 0));
 
+            // container id is not found in the json
+            stateSensorEntry.skipContainerId =
+                (stateSensorEntry.containerId == 0xFFFF) ? true : false;
+
             pldm::utils::DBusMapping dbusInfo{};
 
             auto dbus = entry.value("dbus", emptyJson);
diff --git a/libpldmresponder/event_parser.hpp b/libpldmresponder/event_parser.hpp
index 7498c4c..471c151 100644
--- a/libpldmresponder/event_parser.hpp
+++ b/libpldmresponder/event_parser.hpp
@@ -28,28 +28,43 @@
     pdr::EntityInstance entityInstance;
     pdr::SensorOffset sensorOffset;
     pdr::StateSetId stateSetid;
+    bool skipContainerId;
 
     bool operator==(const StateSensorEntry& e) const
     {
-        return (
-            (containerId == e.containerId) && (entityType == e.entityType) &&
-            (entityInstance == e.entityInstance) &&
-            (sensorOffset == e.sensorOffset) && (stateSetid == e.stateSetid));
+        if (!skipContainerId)
+        {
+            return ((containerId == e.containerId) &&
+                    (entityType == e.entityType) &&
+                    (entityInstance == e.entityInstance) &&
+                    (sensorOffset == e.sensorOffset) &&
+                    (stateSetid == e.stateSetid));
+        }
+        else
+        {
+            return ((entityType == e.entityType) &&
+                    (entityInstance == e.entityInstance) &&
+                    (sensorOffset == e.sensorOffset) &&
+                    (stateSetid == e.stateSetid));
+        }
     }
 
     bool operator<(const StateSensorEntry& e) const
     {
-        return (
-            (containerId < e.containerId) ||
-            ((containerId == e.containerId) && (entityType < e.entityType)) ||
-            ((containerId == e.containerId) && (entityType == e.entityType) &&
-             (entityInstance < e.entityInstance)) ||
-            ((containerId == e.containerId) && (entityType == e.entityType) &&
-             (entityInstance == e.entityInstance) &&
-             (sensorOffset < e.sensorOffset)) ||
-            ((containerId == e.containerId) && (entityType == e.entityType) &&
-             (entityInstance == e.entityInstance) &&
-             (sensorOffset == e.sensorOffset) && (stateSetid < e.stateSetid)));
+        if (!skipContainerId)
+        {
+            return std::tie(entityType, entityInstance, containerId,
+                            sensorOffset, stateSetid) <
+                   std::tie(e.entityType, e.entityInstance, e.containerId,
+                            e.sensorOffset, e.stateSetid);
+        }
+        else
+        {
+            return std::tie(entityType, entityInstance, sensorOffset,
+                            stateSetid) <
+                   std::tie(e.entityType, e.entityInstance, e.sensorOffset,
+                            e.stateSetid);
+        }
     }
 };
 
diff --git a/libpldmresponder/platform.cpp b/libpldmresponder/platform.cpp
index be554dd..42bfc83 100644
--- a/libpldmresponder/platform.cpp
+++ b/libpldmresponder/platform.cpp
@@ -499,9 +499,12 @@
         }
 
         const auto& [containerId, entityType, entityInstance] = entityInfo;
-        events::StateSensorEntry stateSensorEntry{containerId, entityType,
-                                                  entityInstance, sensorOffset,
-                                                  stateSetIds[sensorOffset]};
+        events::StateSensorEntry stateSensorEntry{containerId,
+                                                  entityType,
+                                                  entityInstance,
+                                                  sensorOffset,
+                                                  stateSetIds[sensorOffset],
+                                                  false};
         return hostPDRHandler->handleStateSensorEvent(stateSensorEntry,
                                                       eventState);
     }
diff --git a/libpldmresponder/test/event_jsons/good/event_state_sensor.json b/libpldmresponder/test/event_jsons/good/event_state_sensor.json
index b966076..9974b72 100644
--- a/libpldmresponder/test/event_jsons/good/event_state_sensor.json
+++ b/libpldmresponder/test/event_jsons/good/event_state_sensor.json
@@ -63,6 +63,50 @@
                 "property_type": "string",
                 "property_values": ["Enabled", "Disabled", "Auto"]
             }
+        },
+        {
+            "entityType": 120,
+            "entityInstance": 2,
+            "sensorOffset": 0,
+            "stateSetId": 2,
+            "event_states": [0, 1, 2],
+            "dbus": {
+                "object_path": "/xyz/abc/mno",
+                "interface": "xyz.openbmc_project.example5.value",
+                "property_name": "value5",
+                "property_type": "string",
+                "property_values": ["Enabled", "Disabled", "Auto"]
+            }
+        },
+        {
+            "entityType": 120,
+            "containerID": 10,
+            "entityInstance": 2,
+            "sensorOffset": 0,
+            "stateSetId": 2,
+            "event_states": [0, 1, 2],
+            "dbus": {
+                "object_path": "/xyz/abc/opk",
+                "interface": "xyz.openbmc_project.example6.value",
+                "property_name": "value6",
+                "property_type": "string",
+                "property_values": ["Enabled", "Disabled", "Auto"]
+            }
+        },
+        {
+            "entityType": 120,
+            "containerID": 10,
+            "entityInstance": 2,
+            "sensorOffset": 0,
+            "stateSetId": 2,
+            "event_states": [0, 1, 2],
+            "dbus": {
+                "object_path": "/xyz/abc/ijl",
+                "interface": "xyz.openbmc_project.example7.value",
+                "property_name": "value7",
+                "property_type": "string",
+                "property_values": ["Enabled", "Disabled", "Auto"]
+            }
         }
     ]
 }
diff --git a/libpldmresponder/test/libpldmresponder_platform_test.cpp b/libpldmresponder/test/libpldmresponder_platform_test.cpp
index 9dbe0af..35da05a 100644
--- a/libpldmresponder/test/libpldmresponder_platform_test.cpp
+++ b/libpldmresponder/test/libpldmresponder_platform_test.cpp
@@ -602,7 +602,7 @@
 
     // Event Entry 1
     {
-        StateSensorEntry entry{1, 64, 1, 0, 1};
+        StateSensorEntry entry{1, 64, 1, 0, 1, false};
         const auto& [dbusMapping, eventStateMap] = handler.getEventInfo(entry);
         DBusMapping mapping{"/xyz/abc/def",
                             "xyz.openbmc_project.example1.value", "value1",
@@ -625,7 +625,7 @@
 
     // Event Entry 2
     {
-        StateSensorEntry entry{1, 64, 1, 1, 1};
+        StateSensorEntry entry{1, 64, 1, 1, 1, false};
         const auto& [dbusMapping, eventStateMap] = handler.getEventInfo(entry);
         DBusMapping mapping{"/xyz/abc/def",
                             "xyz.openbmc_project.example2.value", "value2",
@@ -642,7 +642,7 @@
 
     // Event Entry 3
     {
-        StateSensorEntry entry{2, 67, 2, 0, 1};
+        StateSensorEntry entry{2, 67, 2, 0, 1, false};
         const auto& [dbusMapping, eventStateMap] = handler.getEventInfo(entry);
         DBusMapping mapping{"/xyz/abc/ghi",
                             "xyz.openbmc_project.example3.value", "value3",
@@ -659,7 +659,7 @@
 
     // Event Entry 4
     {
-        StateSensorEntry entry{2, 67, 2, 0, 2};
+        StateSensorEntry entry{2, 67, 2, 0, 2, false};
         const auto& [dbusMapping, eventStateMap] = handler.getEventInfo(entry);
         DBusMapping mapping{"/xyz/abc/jkl",
                             "xyz.openbmc_project.example4.value", "value4",
@@ -677,9 +677,67 @@
         ASSERT_EQ(value2 == propValue2, true);
     }
 
+    // Event Entry 5
+    {
+        StateSensorEntry entry{0xFFFF, 120, 2, 0, 2, true};
+        const auto& [dbusMapping, eventStateMap] = handler.getEventInfo(entry);
+        DBusMapping mapping{"/xyz/abc/mno",
+                            "xyz.openbmc_project.example5.value", "value5",
+                            "string"};
+        ASSERT_EQ(mapping == dbusMapping, true);
+
+        const auto& propValue0 = eventStateMap.at(eventState0);
+        const auto& propValue1 = eventStateMap.at(eventState1);
+        const auto& propValue2 = eventStateMap.at(eventState2);
+        PropertyValue value0{std::in_place_type<std::string>, "Enabled"};
+        PropertyValue value1{std::in_place_type<std::string>, "Disabled"};
+        PropertyValue value2{std::in_place_type<std::string>, "Auto"};
+        ASSERT_EQ(value0 == propValue0, true);
+        ASSERT_EQ(value1 == propValue1, true);
+        ASSERT_EQ(value2 == propValue2, true);
+    }
+    // Event Entry 6
+    {
+        StateSensorEntry entry{10, 120, 2, 0, 2, true};
+        const auto& [dbusMapping, eventStateMap] = handler.getEventInfo(entry);
+        DBusMapping mapping{"/xyz/abc/opk",
+                            "xyz.openbmc_project.example6.value", "value6",
+                            "string"};
+        ASSERT_EQ(mapping == dbusMapping, true);
+
+        const auto& propValue0 = eventStateMap.at(eventState0);
+        const auto& propValue1 = eventStateMap.at(eventState1);
+        const auto& propValue2 = eventStateMap.at(eventState2);
+        PropertyValue value0{std::in_place_type<std::string>, "Enabled"};
+        PropertyValue value1{std::in_place_type<std::string>, "Disabled"};
+        PropertyValue value2{std::in_place_type<std::string>, "Auto"};
+        ASSERT_EQ(value0 == propValue0, true);
+        ASSERT_EQ(value1 == propValue1, true);
+        ASSERT_EQ(value2 == propValue2, true);
+    }
+    // Event Entry 7
+    {
+        StateSensorEntry entry{10, 120, 2, 0, 2, false};
+        const auto& [dbusMapping, eventStateMap] = handler.getEventInfo(entry);
+        DBusMapping mapping{"/xyz/abc/opk",
+                            "xyz.openbmc_project.example6.value", "value6",
+                            "string"};
+        ASSERT_EQ(mapping == dbusMapping, true);
+
+        const auto& propValue0 = eventStateMap.at(eventState0);
+        const auto& propValue1 = eventStateMap.at(eventState1);
+        const auto& propValue2 = eventStateMap.at(eventState2);
+        PropertyValue value0{std::in_place_type<std::string>, "Enabled"};
+        PropertyValue value1{std::in_place_type<std::string>, "Disabled"};
+        PropertyValue value2{std::in_place_type<std::string>, "Auto"};
+        ASSERT_EQ(value0 == propValue0, true);
+        ASSERT_EQ(value1 == propValue1, true);
+        ASSERT_EQ(value2 == propValue2, true);
+    }
+
     // Invalid Entry
     {
-        StateSensorEntry entry{0, 0, 0, 0, 1};
+        StateSensorEntry entry{0, 0, 0, 0, 1, false};
         ASSERT_THROW(handler.getEventInfo(entry), std::out_of_range);
     }
 }
