diff --git a/control/actions.cpp b/control/actions.cpp
index 3c3b194..029a69a 100644
--- a/control/actions.cpp
+++ b/control/actions.cpp
@@ -29,20 +29,30 @@
                 {
                     return !std::get<hasOwnerPos>(s);
                 });
-            if (setTimer &&
-                zone.findTimer(group, actions) ==
-                    std::end(zone.getTimerEvents()))
+            auto it = zone.getTimerEvents().find(__func__);
+            if (it != zone.getTimerEvents().end())
             {
-                zone.addTimer(group, actions, tConf);
-            }
-            else
-            {
-                // Stop and remove any timers for this group
-                auto timer = zone.findTimer(group, actions);
-                if (timer != std::end(zone.getTimerEvents()))
+                auto& timers = it->second;
+                auto timerIter = zone.findTimer(group, actions, timers);
+                if (setTimer && timerIter == timers.end())
                 {
-                    zone.removeTimer(timer);
+                    // No timer exists yet for action, add timer
+                    zone.addTimer(__func__, group, actions, tConf);
                 }
+                else if (!setTimer && timerIter != timers.end())
+                {
+                    // Remove any timer for this group
+                    timers.erase(timerIter);
+                    if (timers.empty())
+                    {
+                        zone.getTimerEvents().erase(it);
+                    }
+                }
+            }
+            else if (setTimer)
+            {
+                // No timer exists yet for event, add timer
+                zone.addTimer(__func__, group, actions, tConf);
             }
         }
         catch (const std::out_of_range& oore)
