diff --git a/actions.hpp b/actions.hpp
index 57a2f6f..2837e7a 100644
--- a/actions.hpp
+++ b/actions.hpp
@@ -9,6 +9,8 @@
 {
 namespace manager
 {
+class Manager;
+
 namespace actions
 {
 namespace details
@@ -31,10 +33,10 @@
     Base(Base&&) = default;
     Base& operator=(Base&&) = default;
 
-    virtual void operator()() const = 0;
-    virtual void operator()()
+    virtual void operator()(Manager &mgr) const = 0;
+    virtual void operator()(Manager &mgr)
     {
-        const_cast<const Base &>(*this)();
+        const_cast<const Base &>(*this)(mgr);
     }
 };
 
@@ -58,14 +60,14 @@
     Holder& operator=(Holder&&) = default;
     explicit Holder(T &&func) : _func(std::forward<T>(func)) {}
 
-    virtual void operator()() const override
+    virtual void operator()(Manager &mgr) const override
     {
-        _func();
+        _func(mgr);
     }
 
-    virtual void operator()() override
+    virtual void operator()(Manager &mgr) override
     {
-        _func();
+        _func(mgr);
     }
 
     private:
@@ -93,13 +95,13 @@
     Wrapper(Wrapper&&) = default;
     Wrapper& operator=(Wrapper&&) = default;
 
-    void operator()()
+    void operator()(Manager &mgr)
     {
-        (*_ptr)();
+        (*_ptr)(mgr);
     }
-    void operator()() const
+    void operator()(Manager &mgr) const
     {
-        (*_ptr)();
+        (*_ptr)(mgr);
     }
 
     private:
@@ -109,7 +111,7 @@
 } // namespace details
 
 /** @brief The default action.  */
-inline void noop() noexcept { }
+inline void noop(Manager &mgr) noexcept { }
 
 } // namespace actions
 } // namespace manager
diff --git a/filters.hpp b/filters.hpp
index 309fff6..2a3da48 100644
--- a/filters.hpp
+++ b/filters.hpp
@@ -10,6 +10,8 @@
 {
 namespace manager
 {
+
+class Manager;
 namespace filters
 {
 namespace details
@@ -32,10 +34,10 @@
     Base(Base&&) = default;
     Base& operator=(Base&&) = default;
 
-    virtual bool operator()(sdbusplus::message::message &) const = 0;
-    virtual bool operator()(sdbusplus::message::message &msg)
+    virtual bool operator()(sdbusplus::message::message &, Manager &) const = 0;
+    virtual bool operator()(sdbusplus::message::message &msg, Manager &mgr)
     {
-        return const_cast<const Base &>(*this)(msg);
+        return const_cast<const Base &>(*this)(msg, mgr);
     }
 };
 
@@ -59,14 +61,16 @@
     Holder& operator=(Holder&&) = default;
     explicit Holder(T &&func) : _func(std::forward<T>(func)) { }
 
-    virtual bool operator()(sdbusplus::message::message &msg) const override
+    virtual bool operator()(
+            sdbusplus::message::message &msg, Manager &mgr) const override
     {
-        return _func(msg);
+        return _func(msg, mgr);
     }
 
-    virtual bool operator()(sdbusplus::message::message &msg) override
+    virtual bool operator()(
+            sdbusplus::message::message &msg, Manager &mgr) override
     {
-        return _func(msg);
+        return _func(msg, mgr);
     }
 
     private:
@@ -93,13 +97,13 @@
     Wrapper(Wrapper&&) = default;
     Wrapper& operator=(Wrapper&&) = default;
 
-    bool operator()(sdbusplus::message::message &msg)
+    bool operator()(sdbusplus::message::message &msg, Manager &mgr)
     {
-        return (*_ptr)(msg);
+        return (*_ptr)(msg, mgr);
     }
-    bool operator()(sdbusplus::message::message &msg) const
+    bool operator()(sdbusplus::message::message &msg, Manager &mgr) const
     {
-        return (*_ptr)(msg);
+        return (*_ptr)(msg, mgr);
     }
 
     private:
@@ -134,7 +138,7 @@
      * Extract the property from the PropertiesChanged
      * message and run the condition test.
      */
-    bool operator()(sdbusplus::message::message &msg) const
+    bool operator()(sdbusplus::message::message &msg, Manager &) const
     {
         std::map<
             std::string,
@@ -163,7 +167,7 @@
 } // namespace details
 
 /** @brief The default filter.  */
-inline bool none(sdbusplus::message::message &) noexcept
+inline bool none(sdbusplus::message::message &, Manager &) noexcept
 {
     return true;
 }
diff --git a/manager.cpp b/manager.cpp
index 8e185ac..6c15bf0 100644
--- a/manager.cpp
+++ b/manager.cpp
@@ -155,8 +155,8 @@
     auto &filter = std::get<1>(args);
     auto &action = std::get<2>(args);
 
-    if(filter(msg)) {
-        action();
+    if(filter(msg, *this)) {
+        action(*this);
     }
 }
 
