diff --git a/actions.hpp b/actions.hpp
index ea7f247..dfa1d00 100644
--- a/actions.hpp
+++ b/actions.hpp
@@ -14,10 +14,10 @@
 class Manager;
 namespace details
 {
-using ActionBase = holder::CallableBase<void, Manager&>;
+using ActionBase = holder::CallableBase<void, sdbusplus::bus::bus&, Manager&>;
 using ActionBasePtr = std::shared_ptr<ActionBase>;
 template <typename T>
-using Action = holder::CallableHolder<T, void, Manager&>;
+using Action = holder::CallableHolder<T, void, sdbusplus::bus::bus&, Manager&>;
 
 /** @brief make_action
  *
@@ -42,7 +42,7 @@
 /** @brief Destroy objects action.  */
 inline auto destroyObjects(std::vector<const char*> paths)
 {
-    return [paths = std::move(paths)](auto & m)
+    return [paths = std::move(paths)](auto&, auto & m)
     {
         m.destroyObjects(paths);
     };
@@ -77,7 +77,7 @@
     // and value to a lambda.  When it is called, forward the
     // path, interface and value on to the manager member function.
     return [path, iface, member,
-                  value = std::forward<V>(value)](auto & m)
+                  value = std::forward<V>(value)](auto&, auto & m)
     {
         m.template invokeMethod<T>(
             path, iface, member, value);
diff --git a/events.hpp b/events.hpp
index f591c42..80fcdae 100644
--- a/events.hpp
+++ b/events.hpp
@@ -16,11 +16,11 @@
 namespace details
 {
 using FilterBase = holder::CallableBase <
-                   bool, sdbusplus::message::message&, Manager& >;
+                   bool, sdbusplus::bus::bus&, sdbusplus::message::message&, Manager& >;
 using FilterBasePtr = std::shared_ptr<FilterBase>;
 template <typename T>
 using Filter = holder::CallableHolder <
-               T, bool, sdbusplus::message::message&, Manager& >;
+               T, bool, sdbusplus::bus::bus&, sdbusplus::message::message&, Manager& >;
 
 /** @struct Event
  *  @brief Event object interface.
@@ -121,7 +121,10 @@
          * Extract the property from the PropertiesChanged
          * message and run the condition test.
          */
-        bool operator()(sdbusplus::message::message& msg, Manager&) const
+        bool operator()(
+            sdbusplus::bus::bus&,
+            sdbusplus::message::message& msg,
+            Manager&) const
         {
             std::map <
             std::string,
diff --git a/manager.cpp b/manager.cpp
index a5cdf89..16ed30a 100644
--- a/manager.cpp
+++ b/manager.cpp
@@ -188,14 +188,14 @@
 
     for (auto& f : filters)
     {
-        if (!(*f)(msg, *this))
+        if (!(*f)(_bus, msg, *this))
         {
             return;
         }
     }
     for (auto& action : actions)
     {
-        (*action)(*this);
+        (*action)(_bus, *this);
     }
 }
 
