diff --git a/control/json/group.cpp b/control/json/group.cpp
index 3b7f990..e100d71 100644
--- a/control/json/group.cpp
+++ b/control/json/group.cpp
@@ -24,6 +24,8 @@
 using json = nlohmann::json;
 using namespace phosphor::logging;
 
+std::set<std::string> Group::_allMembers{};
+
 Group::Group(const json& jsonObj) : ConfigBase(jsonObj), _service("")
 {
     setMembers(jsonObj);
@@ -57,6 +59,7 @@
     {
         _members.emplace_back(member.get<std::string>());
     }
+    _allMembers.insert(_members.begin(), _members.end());
 }
 
 void Group::setService(const json& jsonObj)
diff --git a/control/json/group.hpp b/control/json/group.hpp
index dd5c6a0..4057914 100644
--- a/control/json/group.hpp
+++ b/control/json/group.hpp
@@ -19,6 +19,8 @@
 
 #include <nlohmann/json.hpp>
 
+#include <set>
+
 namespace phosphor::fan::control::json
 {
 
@@ -150,6 +152,14 @@
         return _value;
     }
 
+    /**
+     * @brief Get the set of all configured group members
+     */
+    static const std::set<std::string>& getAllMembers()
+    {
+        return _allMembers;
+    }
+
   private:
     /* Members of the group */
     std::vector<std::string> _members;
@@ -169,6 +179,9 @@
     /* Optional property value for all the members */
     std::optional<PropertyVariantType> _value;
 
+    /* Single set of all group members across all groups */
+    static std::set<std::string> _allMembers;
+
     /**
      * @brief Parse and set the members list
      *
diff --git a/control/json/manager.cpp b/control/json/manager.cpp
index 2351597..9825a32 100644
--- a/control/json/manager.cpp
+++ b/control/json/manager.cpp
@@ -501,6 +501,22 @@
 
 void Manager::insertFilteredObjects(ManagedObjects& ref)
 {
+    // Filter out objects that aren't part of a group
+    const auto& allGroupMembers = Group::getAllMembers();
+    auto it = ref.begin();
+
+    while (it != ref.end())
+    {
+        if (allGroupMembers.find(it->first) == allGroupMembers.end())
+        {
+            it = ref.erase(it);
+        }
+        else
+        {
+            it++;
+        }
+    }
+
     for (auto& [path, pathMap] : ref)
     {
         for (auto& [intf, intfMap] : pathMap)
@@ -543,11 +559,10 @@
     for (const auto& objMgrPath : objMgrPaths)
     {
         // Get all managed objects of service
-        // want to filter here...
         auto objects = util::SDBusPlus::getManagedObjects<PropertyVariantType>(
             _bus, service, objMgrPath);
 
-        // insert all objects but remove any NaN values
+        // insert all objects that are in groups but remove any NaN values
         insertFilteredObjects(objects);
     }
 }
diff --git a/control/json/manager.hpp b/control/json/manager.hpp
index 7da379a..0f9ff5f 100644
--- a/control/json/manager.hpp
+++ b/control/json/manager.hpp
@@ -565,7 +565,8 @@
 
     /**
      * @brief Insert managed objects into cache, but filter out properties
-     * containing unwanted NaN (not-a-number) values.
+     * containing unwanted NaN (not-a-number) values and properties that
+     * are on D-Bus paths that aren't in an existing Group object.
      *
      * @param[in] ref - The map of ManagedObjects to insert into cache
      */
