diff --git a/redfish-core/include/redfish.hpp b/redfish-core/include/redfish.hpp
index 8cb9e01..718b082 100644
--- a/redfish-core/include/redfish.hpp
+++ b/redfish-core/include/redfish.hpp
@@ -82,8 +82,9 @@
         nodes.emplace_back(std::make_unique<SystemLogServiceCollection>(app));
         nodes.emplace_back(std::make_unique<EventLogService>(app));
         nodes.emplace_back(std::make_unique<EventLogClear>(app));
+#ifndef BMCWEB_ENABLE_REDFISH_DBUS_LOG_ENTRIES
         nodes.emplace_back(std::make_unique<EventLogEntryCollection>(app));
-        nodes.emplace_back(std::make_unique<EventLogEntry>(app));
+#endif
 
         nodes.emplace_back(std::make_unique<BMCLogServiceCollection>(app));
 #ifdef BMCWEB_ENABLE_REDFISH_BMC_JOURNAL
@@ -112,6 +113,8 @@
         nodes.emplace_back(std::make_unique<SystemActionsReset>(app));
 #ifdef BMCWEB_ENABLE_REDFISH_DBUS_LOG_ENTRIES
         nodes.emplace_back(std::make_unique<DBusLogServiceActionsClear>(app));
+        nodes.emplace_back(std::make_unique<DBusEventLogEntryCollection>(app));
+        nodes.emplace_back(std::make_unique<DBusEventLogEntry>(app));
 #endif
 
         nodes.emplace_back(
diff --git a/redfish-core/lib/log_services.hpp b/redfish-core/lib/log_services.hpp
index 9e3b2f0..063a34c 100644
--- a/redfish-core/lib/log_services.hpp
+++ b/redfish-core/lib/log_services.hpp
@@ -453,8 +453,8 @@
             {{"@odata.id", "/redfish/v1/Systems/system/LogServices/EventLog"}});
 #ifdef BMCWEB_ENABLE_REDFISH_CPU_LOG
         logServiceArray.push_back(
-            {{ "@odata.id",
-               "/redfish/v1/Systems/system/LogServices/Crashdump" }});
+            {{"@odata.id",
+              "/redfish/v1/Systems/system/LogServices/Crashdump"}});
 #endif
         asyncResp->res.jsonValue["Members@odata.count"] =
             logServiceArray.size();
@@ -695,7 +695,6 @@
         asyncResp->res.jsonValue["Description"] =
             "Collection of System Event Log Entries";
 
-#ifndef BMCWEB_ENABLE_REDFISH_DBUS_LOG_ENTRIES
         nlohmann::json &logEntryArray = asyncResp->res.jsonValue["Members"];
         logEntryArray = nlohmann::json::array();
         // Go through the log files and create a unique ID for each entry
@@ -747,7 +746,43 @@
                 "Entries?$skip=" +
                 std::to_string(skip + top);
         }
-#else
+    }
+};
+
+class DBusEventLogEntryCollection : public Node
+{
+  public:
+    template <typename CrowApp>
+    DBusEventLogEntryCollection(CrowApp &app) :
+        Node(app, "/redfish/v1/Systems/system/LogServices/EventLog/Entries/")
+    {
+        entityPrivileges = {
+            {boost::beast::http::verb::get, {{"Login"}}},
+            {boost::beast::http::verb::head, {{"Login"}}},
+            {boost::beast::http::verb::patch, {{"ConfigureManager"}}},
+            {boost::beast::http::verb::put, {{"ConfigureManager"}}},
+            {boost::beast::http::verb::delete_, {{"ConfigureManager"}}},
+            {boost::beast::http::verb::post, {{"ConfigureManager"}}}};
+    }
+
+  private:
+    void doGet(crow::Response &res, const crow::Request &req,
+               const std::vector<std::string> &params) override
+    {
+        std::shared_ptr<AsyncResp> asyncResp = std::make_shared<AsyncResp>(res);
+
+        // Collections don't include the static data added by SubRoute because
+        // it has a duplicate entry for members
+        asyncResp->res.jsonValue["@odata.type"] =
+            "#LogEntryCollection.LogEntryCollection";
+        asyncResp->res.jsonValue["@odata.context"] =
+            "/redfish/v1/$metadata#LogEntryCollection.LogEntryCollection";
+        asyncResp->res.jsonValue["@odata.id"] =
+            "/redfish/v1/Systems/system/LogServices/EventLog/Entries";
+        asyncResp->res.jsonValue["Name"] = "System Event Log Entries";
+        asyncResp->res.jsonValue["Description"] =
+            "Collection of System Event Log Entries";
+
         // DBus implementation of EventLog/Entries
         // Make call to Logging Service to find all log entry objects
         crow::connections::systemBus->async_method_call(
@@ -860,14 +895,13 @@
             },
             "xyz.openbmc_project.Logging", "/xyz/openbmc_project/logging",
             "org.freedesktop.DBus.ObjectManager", "GetManagedObjects");
-#endif
     }
 };
 
-class EventLogEntry : public Node
+class DBusEventLogEntry : public Node
 {
   public:
-    EventLogEntry(CrowApp &app) :
+    DBusEventLogEntry(CrowApp &app) :
         Node(app,
              "/redfish/v1/Systems/system/LogServices/EventLog/Entries/<str>/",
              std::string())
@@ -893,7 +927,6 @@
         }
         const std::string &entryID = params[0];
 
-#ifdef BMCWEB_ENABLE_REDFISH_DBUS_LOG_ENTRIES
         // DBus implementation of EventLog/Entries
         // Make call to Logging Service to find all log entry objects
         crow::connections::systemBus->async_method_call(
@@ -971,14 +1004,12 @@
                     {"Message", *message},
                     {"EntryType", "Event"},
                     {"Severity", translateSeverityDbusToRedfish(*severity)},
-                    { "Created",
-                      crow::utility::getDateTime(timestamp) }};
+                    {"Created", crow::utility::getDateTime(timestamp)}};
             },
             "xyz.openbmc_project.Logging",
             "/xyz/openbmc_project/logging/entry/" + entryID,
             "org.freedesktop.DBus.Properties", "GetAll",
             "xyz.openbmc_project.Logging.Entry");
-#endif
     }
 };
 
@@ -1021,8 +1052,7 @@
         logServiceArray = nlohmann::json::array();
 #ifdef BMCWEB_ENABLE_REDFISH_BMC_JOURNAL
         logServiceArray.push_back(
-            {{ "@odata.id",
-               "/redfish/v1/Managers/bmc/LogServices/Journal" }});
+            {{"@odata.id", "/redfish/v1/Managers/bmc/LogServices/Journal"}});
 #endif
         asyncResp->res.jsonValue["Members@odata.count"] =
             logServiceArray.size();
@@ -1331,9 +1361,8 @@
 #ifdef BMCWEB_ENABLE_REDFISH_RAW_PECI
         asyncResp->res.jsonValue["Actions"]["Oem"].push_back(
             {"#Crashdump.SendRawPeci",
-             { { "target",
-                 "/redfish/v1/Systems/system/LogServices/Crashdump/"
-                 "Actions/Oem/Crashdump.SendRawPeci" } }});
+             {{"target", "/redfish/v1/Systems/system/LogServices/Crashdump/"
+                         "Actions/Oem/Crashdump.SendRawPeci"}}});
 #endif
     }
 };
