diff --git a/control/json/triggers/signal.cpp b/control/json/triggers/signal.cpp
index 8b66c5f..fa6d32b 100644
--- a/control/json/triggers/signal.cpp
+++ b/control/json/triggers/signal.cpp
@@ -90,8 +90,8 @@
     }
 }
 
-void propertiesChanged(Manager* mgr, const std::string& eventName,
-                       std::unique_ptr<ActionBase>& action)
+void propertiesChanged(Manager* mgr, std::unique_ptr<ActionBase>& action,
+                       const json&)
 {
     // Groups are optional, but a signal triggered event with no groups
     // will do nothing since signals require a group
@@ -118,8 +118,8 @@
     }
 }
 
-void interfacesAdded(Manager* mgr, const std::string& eventName,
-                     std::unique_ptr<ActionBase>& action)
+void interfacesAdded(Manager* mgr, std::unique_ptr<ActionBase>& action,
+                     const json&)
 {
     // Groups are optional, but a signal triggered event with no groups
     // will do nothing since signals require a group
@@ -144,8 +144,8 @@
     }
 }
 
-void interfacesRemoved(Manager* mgr, const std::string& eventName,
-                       std::unique_ptr<ActionBase>& action)
+void interfacesRemoved(Manager* mgr, std::unique_ptr<ActionBase>& action,
+                       const json&)
 {
     // Groups are optional, but a signal triggered event with no groups
     // will do nothing since signals require a group
@@ -170,8 +170,8 @@
     }
 }
 
-void nameOwnerChanged(Manager* mgr, const std::string& eventName,
-                      std::unique_ptr<ActionBase>& action)
+void nameOwnerChanged(Manager* mgr, std::unique_ptr<ActionBase>& action,
+                      const json&)
 {
     // Groups are optional, but a signal triggered event with no groups
     // will do nothing since signals require a group
@@ -205,9 +205,9 @@
                 // service to appear? When to stop checking?
                 log<level::ERR>(
                     fmt::format(
-                        "Event '{}' will not be triggered by name owner "
-                        "changed signals from service of path {}, interface {}",
-                        eventName, member, group.getInterface())
+                        "Events will not be triggered by name owner changed"
+                        "signals from service of path {}, interface {}",
+                        member, group.getInterface())
                         .c_str());
             }
         }
@@ -240,13 +240,13 @@
         throw std::runtime_error(msg.c_str());
     }
 
-    return [subscriber = std::move(subscriber)](
-               const std::string& eventName, Manager* mgr,
-               std::vector<std::unique_ptr<ActionBase>>& actions) {
+    return [subscriber = std::move(subscriber),
+            jsonObj](const std::string& eventName, Manager* mgr,
+                     std::vector<std::unique_ptr<ActionBase>>& actions) {
         for (auto& action : actions)
         {
             // Call signal subscriber for each group in the action
-            subscriber->second(mgr, eventName, action);
+            subscriber->second(mgr, action, jsonObj);
         }
     };
 }
