diff --git a/redfish-core/lib/log_services.hpp b/redfish-core/lib/log_services.hpp
index ab5a374..95c74ee 100644
--- a/redfish-core/lib/log_services.hpp
+++ b/redfish-core/lib/log_services.hpp
@@ -1433,21 +1433,9 @@
     return LogParseError::success;
 }
 
-inline bool fillEventLogLogEntryFromPropertyMap(
-    const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-    const dbus::utility::DBusPropertiesMap& resp,
-    nlohmann::json& objectToFillOut)
+inline void fillEventLogLogEntryFromDbusLogEntry(
+    const DbusEventLogEntry& entry, nlohmann::json& objectToFillOut)
 {
-    std::optional<DbusEventLogEntry> optEntry =
-        fillDbusEventLogEntryFromPropertyMap(resp);
-
-    if (!optEntry.has_value())
-    {
-        messages::internalError(asyncResp->res);
-        return false;
-    }
-    DbusEventLogEntry entry = optEntry.value();
-
     objectToFillOut["@odata.type"] = "#LogEntry.v1_9_0.LogEntry";
     objectToFillOut["@odata.id"] = boost::urls::format(
         "/redfish/v1/Systems/{}/LogServices/EventLog/Entries/{}",
@@ -1479,7 +1467,6 @@
             "/redfish/v1/Systems/{}/LogServices/EventLog/Entries/{}/attachment",
             BMCWEB_REDFISH_SYSTEM_URI_NAME, std::to_string(entry.Id));
     }
-    return true;
 }
 
 inline void afterLogEntriesGetManagedObjects(
@@ -1507,6 +1494,7 @@
         {
             continue;
         }
+
         for (const auto& interfaceMap : objectPath.second)
         {
             for (const auto& propertyMap : interfaceMap.second)
@@ -1515,12 +1503,16 @@
                                             propertyMap.second);
             }
         }
-        bool success = fillEventLogLogEntryFromPropertyMap(
-            asyncResp, propsFlattened, entriesArray.emplace_back());
-        if (!success)
+        std::optional<DbusEventLogEntry> optEntry =
+            fillDbusEventLogEntryFromPropertyMap(propsFlattened);
+
+        if (!optEntry.has_value())
         {
+            messages::internalError(asyncResp->res);
             return;
         }
+        fillEventLogLogEntryFromDbusLogEntry(*optEntry,
+                                             entriesArray.emplace_back());
     }
 
     redfish::json_util::sortJsonArrayByKey(entriesArray, "Id");
@@ -1795,8 +1787,16 @@
         return;
     }
 
-    fillEventLogLogEntryFromPropertyMap(asyncResp, resp,
-                                        asyncResp->res.jsonValue);
+    std::optional<DbusEventLogEntry> optEntry =
+        fillDbusEventLogEntryFromPropertyMap(resp);
+
+    if (!optEntry.has_value())
+    {
+        messages::internalError(asyncResp->res);
+        return;
+    }
+
+    fillEventLogLogEntryFromDbusLogEntry(*optEntry, asyncResp->res.jsonValue);
 }
 
 inline void dBusEventLogEntryGet(
