diff --git a/control/zone.cpp b/control/zone.cpp
index 28b81f9..3a35b24 100644
--- a/control/zone.cpp
+++ b/control/zone.cpp
@@ -36,20 +36,24 @@
         _fans.emplace_back(std::make_unique<Fan>(bus, def));
     }
 
-    // Setup signal trigger for property changes
-    for (auto& event : std::get<setSpeedEventsPos>(def))
-    {
-        for (auto& prop : event)
-        {
-            _signalEvents.emplace_back(
-                std::make_unique<SignalEvent>(this,
-                                              std::get<handlerObjPos>(prop)
-                                              ));
-            _matches.emplace_back(bus,
-                                  std::get<signaturePos>(prop).c_str(),
-                                  signalHandler,
-                                  _signalEvents.back().get());
-        }
+    // Setup signal trigger for set speed events
+    for (auto& event : std::get<setSpeedEventsPos>(def))
+    {
+        for (auto& prop : std::get<propChangeListPos>(event))
+        {
+            _signalEvents.emplace_back(
+                std::make_unique<SignalEvent>(this,
+                                              EventData
+                                              {
+                                                  std::get<groupPos>(event),
+                                                  std::get<handlerObjPos>(prop),
+                                                  std::get<actionPos>(event)
+                                              }));
+            _matches.emplace_back(bus,
+                                  std::get<signaturePos>(prop).c_str(),
+                                  signalHandler,
+                                  _signalEvents.back().get());
+        }
     }
 }
 
@@ -70,18 +74,20 @@
     auto& signalEvent = *static_cast<SignalEvent*>(data);
     std::get<zoneObjPos>(signalEvent)->handleEvent(
         sdbpMsg,
-        std::get<handlerObjPos>(signalEvent));
+        std::get<eventDataPos>(signalEvent));
     return 0;
 }
 
 void Zone::handleEvent(sdbusplus::message::message& msg,
-                       const Handler& handler)
+                       const EventData& eventData)
 {
     // Handle the callback
-    handler(_bus, msg, *this);
+    std::get<eventHandlerPos>(eventData)(_bus, msg, *this);
+    // Perform the action
+    std::get<eventActionPos>(eventData)(*this,
+                                        std::get<eventGroupPos>(eventData));
 }
 
-
 }
 }
 }
