diff --git a/redfish-core/lib/managers.hpp b/redfish-core/lib/managers.hpp
index b6d554f..1d9c5a8 100644
--- a/redfish-core/lib/managers.hpp
+++ b/redfish-core/lib/managers.hpp
@@ -1244,25 +1244,18 @@
                     pidConfigurationIface, pidZoneConfigurationIface,
                     stepwiseConfigurationIface};
 
-                // erase the paths we don't care about
-                for (auto it = mObj.begin(); it != mObj.end();)
+                for (const auto& [path, object] : mObj)
                 {
-                    bool found = false;
-                    for (const auto& [interface, _] : it->second)
+                    for (const auto& [interface, _] : object)
                     {
                         if (std::find(configurations.begin(),
                                       configurations.end(),
                                       interface) != configurations.end())
                         {
-                            found = true;
-                            it++;
+                            self->objectCount++;
                             break;
                         }
                     }
-                    if (!found)
-                    {
-                        it = mObj.erase(it);
-                    }
                 }
                 self->managedObj = std::move(mObj);
             },
@@ -1473,7 +1466,7 @@
 
                 // arbitrary limit to avoid attacks
                 constexpr const size_t controllerLimit = 500;
-                if (createNewObject && managedObj.size() >= controllerLimit)
+                if (createNewObject && objectCount >= controllerLimit)
                 {
                     messages::resourceExhaustion(response->res, type);
                     continue;
@@ -1570,6 +1563,7 @@
     std::string currentProfile;
     std::string profileConnection;
     std::string profilePath;
+    size_t objectCount = 0;
 };
 
 class Manager : public Node
