diff --git a/src/entity_manager/entity_manager.cpp b/src/entity_manager/entity_manager.cpp
index e5e8b23..3835cc1 100644
--- a/src/entity_manager/entity_manager.cpp
+++ b/src/entity_manager/entity_manager.cpp
@@ -58,7 +58,8 @@
     objServer(sdbusplus::asio::object_server(systemBus, /*skipManager=*/true)),
     lastJson(nlohmann::json::object()),
     systemConfiguration(nlohmann::json::object()), io(io),
-    powerStatus(*systemBus), propertiesChangedTimer(io)
+    dbus_interface(io, objServer), powerStatus(*systemBus),
+    propertiesChangedTimer(io)
 {
     // All other objects that EntityManager currently support are under the
     // inventory subtree.
@@ -96,7 +97,7 @@
         }
 
         auto ifacePtr = dbus_interface.createInterface(
-            objServer, assocPath, "xyz.openbmc_project.Association.Definitions",
+            assocPath, "xyz.openbmc_project.Association.Definitions",
             findBoard->second);
 
         ifacePtr->register_property("Associations", assocPropValue);
@@ -134,22 +135,19 @@
         em_utils::buildInventorySystemPath(boardName, boardType);
 
     std::shared_ptr<sdbusplus::asio::dbus_interface> inventoryIface =
-        dbus_interface.createInterface(objServer, boardPath,
-                                       "xyz.openbmc_project.Inventory.Item",
-                                       boardName);
+        dbus_interface.createInterface(
+            boardPath, "xyz.openbmc_project.Inventory.Item", boardName);
 
     std::shared_ptr<sdbusplus::asio::dbus_interface> boardIface =
         dbus_interface.createInterface(
-            objServer, boardPath,
-            "xyz.openbmc_project.Inventory.Item." + boardType, boardNameOrig);
+            boardPath, "xyz.openbmc_project.Inventory.Item." + boardType,
+            boardNameOrig);
 
-    dbus_interface.createAddObjectMethod(
-        io, jsonPointerPath, boardPath, systemConfiguration, objServer,
-        boardNameOrig);
+    dbus_interface.createAddObjectMethod(jsonPointerPath, boardPath,
+                                         systemConfiguration, boardNameOrig);
 
-    dbus_interface::populateInterfaceFromJson(
-        io, systemConfiguration, jsonPointerPath, boardIface, boardValues,
-        objServer);
+    dbus_interface.populateInterfaceFromJson(
+        systemConfiguration, jsonPointerPath, boardIface, boardValues);
     jsonPointerPath += "/";
     // iterate through board properties
     for (const auto& [propName, propValue] : boardValues.items())
@@ -157,12 +155,12 @@
         if (propValue.type() == nlohmann::json::value_t::object)
         {
             std::shared_ptr<sdbusplus::asio::dbus_interface> iface =
-                dbus_interface.createInterface(objServer, boardPath, propName,
+                dbus_interface.createInterface(boardPath, propName,
                                                boardNameOrig);
 
-            dbus_interface::populateInterfaceFromJson(
-                io, systemConfiguration, jsonPointerPath + propName, iface,
-                propValue, objServer);
+            dbus_interface.populateInterfaceFromJson(
+                systemConfiguration, jsonPointerPath + propName, iface,
+                propValue);
         }
     }
 
@@ -235,21 +233,21 @@
     {
         std::shared_ptr<sdbusplus::asio::dbus_interface> bmcIface =
             dbus_interface.createInterface(
-                objServer, ifacePath, "xyz.openbmc_project.Inventory.Item.Bmc",
+                ifacePath, "xyz.openbmc_project.Inventory.Item.Bmc",
                 boardNameOrig);
-        dbus_interface::populateInterfaceFromJson(
-            io, systemConfiguration, jsonPointerPath, bmcIface, item, objServer,
+        dbus_interface.populateInterfaceFromJson(
+            systemConfiguration, jsonPointerPath, bmcIface, item,
             getPermission(itemType));
     }
     else if (itemType == "System")
     {
         std::shared_ptr<sdbusplus::asio::dbus_interface> systemIface =
             dbus_interface.createInterface(
-                objServer, ifacePath,
-                "xyz.openbmc_project.Inventory.Item.System", boardNameOrig);
-        dbus_interface::populateInterfaceFromJson(
-            io, systemConfiguration, jsonPointerPath, systemIface, item,
-            objServer, getPermission(itemType));
+                ifacePath, "xyz.openbmc_project.Inventory.Item.System",
+                boardNameOrig);
+        dbus_interface.populateInterfaceFromJson(
+            systemConfiguration, jsonPointerPath, systemIface, item,
+            getPermission(itemType));
     }
 
     for (const auto& [name, config] : item.items())
@@ -268,11 +266,11 @@
 
     std::shared_ptr<sdbusplus::asio::dbus_interface> itemIface =
         dbus_interface.createInterface(
-            objServer, ifacePath,
-            "xyz.openbmc_project.Configuration." + itemType, boardNameOrig);
+            ifacePath, "xyz.openbmc_project.Configuration." + itemType,
+            boardNameOrig);
 
-    dbus_interface::populateInterfaceFromJson(
-        io, systemConfiguration, jsonPointerPath, itemIface, item, objServer,
+    dbus_interface.populateInterfaceFromJson(
+        systemConfiguration, jsonPointerPath, itemIface, item,
         getPermission(itemType));
 
     topology.addBoard(boardPath, boardType, boardNameOrig, item);
@@ -289,12 +287,11 @@
         ifaceName.append(itemType).append(".").append(name);
 
         std::shared_ptr<sdbusplus::asio::dbus_interface> objectIface =
-            dbus_interface.createInterface(objServer, ifacePath, ifaceName,
-                                           boardNameOrig);
+            dbus_interface.createInterface(ifacePath, ifaceName, boardNameOrig);
 
-        dbus_interface::populateInterfaceFromJson(
-            io, systemConfiguration, jsonPointerPath, objectIface, config,
-            objServer, getPermission(name));
+        dbus_interface.populateInterfaceFromJson(
+            systemConfiguration, jsonPointerPath, objectIface, config,
+            getPermission(name));
     }
     else if (config.type() == nlohmann::json::value_t::array)
     {
@@ -332,13 +329,13 @@
             ifaceName.append(std::to_string(index));
 
             std::shared_ptr<sdbusplus::asio::dbus_interface> objectIface =
-                dbus_interface.createInterface(objServer, ifacePath, ifaceName,
+                dbus_interface.createInterface(ifacePath, ifaceName,
                                                boardNameOrig);
 
-            dbus_interface::populateInterfaceFromJson(
-                io, systemConfiguration,
+            dbus_interface.populateInterfaceFromJson(
+                systemConfiguration,
                 jsonPointerPath + "/" + std::to_string(index), objectIface,
-                arrayItem, objServer, getPermission(name));
+                arrayItem, getPermission(name));
             index++;
         }
     }
