diff --git a/sensorhandler.cpp b/sensorhandler.cpp
index f649ce7..d67e7f5 100644
--- a/sensorhandler.cpp
+++ b/sensorhandler.cpp
@@ -76,6 +76,11 @@
     uint8_t indication[2];
 } __attribute__((packed));
 
+const ipmi::sensor::EntityInfoMap& getIpmiEntityRecords()
+{
+    return entities;
+}
+
 int get_bus_for_path(const char* path, char** busname)
 {
     return mapper_get_service(bus, path, busname);
@@ -573,7 +578,8 @@
     if (count.value_or(0) == getSdrCount)
     {
         // Get SDR count. This returns the total number of SDRs in the device.
-        sdrCount = sensors.size() + frus.size() + entities.size();
+        const auto& entityRecords = getIpmiEntityRecords();
+        sdrCount = sensors.size() + frus.size() + entityRecords.size();
     }
     else if (count.value_or(0) == getSensorCount)
     {
@@ -740,9 +746,11 @@
     {
         // we have reached till end of fru, so assign the next record id to
         // 512(Max fru ID = 511) + Entity Record ID(may start with 0).
+        const auto& entityRecords = getIpmiEntityRecords();
         auto next_record_id =
-            (entities.size()) ? entities.begin()->first + ENTITY_RECORD_ID_START
-                              : END_OF_RECORD;
+            (entityRecords.size())
+                ? entityRecords.begin()->first + ENTITY_RECORD_ID_START
+                : END_OF_RECORD;
         get_sdr::response::set_next_record_id(next_record_id, resp);
     }
     else
@@ -777,13 +785,14 @@
     get_sdr::SensorDataEntityRecord record{};
     auto dataLength = 0;
 
-    auto entity = entities.begin();
+    const auto& entityRecords = getIpmiEntityRecords();
+    auto entity = entityRecords.begin();
     uint8_t entityRecordID;
     auto recordID = get_sdr::request::get_record_id(req);
 
     entityRecordID = recordID - ENTITY_RECORD_ID_START;
-    entity = entities.find(entityRecordID);
-    if (entity == entities.end())
+    entity = entityRecords.find(entityRecordID);
+    if (entity == entityRecords.end())
     {
         return IPMI_CC_SENSOR_INVALID;
     }
@@ -810,7 +819,7 @@
     record.body.entityId4 = entity->second.containedEntities[3].first;
     record.body.entityInstance4 = entity->second.containedEntities[3].second;
 
-    if (++entity == entities.end())
+    if (++entity == entityRecords.end())
     {
         get_sdr::response::set_next_record_id(END_OF_RECORD,
                                               resp); // last record
