diff --git a/control/json/manager.cpp b/control/json/manager.cpp
index 42c267b..61924ea 100644
--- a/control/json/manager.cpp
+++ b/control/json/manager.cpp
@@ -582,8 +582,45 @@
     _timers.emplace_back(std::move(dataPtr), std::move(timer));
 }
 
+void Manager::addGroup(const Group& group)
+{
+    const auto& members = group.getMembers();
+    for (const auto& member : members)
+    {
+        try
+        {
+            auto service = getService(member, group.getInterface());
+
+            auto variant =
+                util::SDBusPlus::getPropertyVariant<PropertyVariantType>(
+                    service, member, group.getInterface(), group.getProperty());
+
+            setProperty(member, group.getInterface(), group.getProperty(),
+                        variant);
+        }
+        catch (const std::exception& e)
+        {
+            try
+            {
+                _objects.at(member)
+                    .at(group.getInterface())
+                    .erase(group.getProperty());
+            }
+            catch (const std::out_of_range&)
+            {}
+        }
+    }
+}
+
 void Manager::timerExpired(TimerData& data)
 {
+    if (std::get<bool>(data.second))
+    {
+        const auto& groups = std::get<const std::vector<Group>&>(data.second);
+        std::for_each(groups.begin(), groups.end(),
+                      [this](const auto& group) { addGroup(group); });
+    }
+
     auto& actions =
         std::get<std::vector<std::unique_ptr<ActionBase>>&>(data.second);
     // Perform the actions in the timer data
