diff --git a/src/EntityManager.cpp b/src/EntityManager.cpp
index 173f4dc..e8113c2 100644
--- a/src/EntityManager.cpp
+++ b/src/EntityManager.cpp
@@ -918,6 +918,32 @@
     return inventory[device["Name"].get<std::string>()];
 }
 
+static void pruneConfiguration(nlohmann::json& systemConfiguration,
+                               sdbusplus::asio::object_server& objServer,
+                               bool powerOff, const std::string& name,
+                               const nlohmann::json& device)
+{
+    if (powerOff && deviceRequiresPowerOn(device))
+    {
+        // power not on yet, don't know if it's there or not
+        return;
+    }
+
+    auto& ifaces = getDeviceInterfaces(device);
+    for (auto& iface : ifaces)
+    {
+        auto sharedPtr = iface.lock();
+        if (!!sharedPtr)
+        {
+            objServer.remove_interface(sharedPtr);
+        }
+    }
+
+    ifaces.clear();
+    systemConfiguration.erase(name);
+    logDeviceRemoved(device);
+}
+
 // main properties changed entry
 void propertiesChangedCallback(nlohmann::json& systemConfiguration,
                                sdbusplus::asio::object_server& objServer)
@@ -974,23 +1000,8 @@
                 for (const auto& [name, device] :
                      missingConfigurations->items())
                 {
-                    if (powerOff && deviceRequiresPowerOn(device))
-                    {
-                        // power not on yet, don't know if it's there or not
-                        continue;
-                    }
-                    auto& ifaces = getDeviceInterfaces(device);
-                    for (auto& iface : ifaces)
-                    {
-                        auto sharedPtr = iface.lock();
-                        if (!!sharedPtr)
-                        {
-                            objServer.remove_interface(sharedPtr);
-                        }
-                    }
-                    ifaces.clear();
-                    systemConfiguration.erase(name);
-                    logDeviceRemoved(device);
+                    pruneConfiguration(systemConfiguration, objServer, powerOff,
+                                       name, device);
                 }
 
                 nlohmann::json newConfiguration = systemConfiguration;
