diff --git a/bmc_state_manager.cpp b/bmc_state_manager.cpp
index 4559c80..9929059 100644
--- a/bmc_state_manager.cpp
+++ b/bmc_state_manager.cpp
@@ -130,23 +130,15 @@
     return;
 }
 
-int BMC::bmcStateChangeSignal(sd_bus_message *msg, void *userData,
-                              sd_bus_error *retError)
-{
-    return static_cast<BMC*>(userData)->bmcStateChange(msg, retError);
-}
-
-int BMC::bmcStateChange(sd_bus_message *msg,
-                        sd_bus_error *retError)
+int BMC::bmcStateChange(sdbusplus::message::message& msg)
 {
     uint32_t newStateID {};
     sdbusplus::message::object_path newStateObjPath;
     std::string newStateUnit{};
     std::string newStateResult{};
 
-    auto sdPlusMsg = sdbusplus::message::message(msg);
     //Read the msg and populate each variable
-    sdPlusMsg.read(newStateID, newStateObjPath, newStateUnit, newStateResult);
+    msg.read(newStateID, newStateObjPath, newStateUnit, newStateResult);
 
     //Caught the signal that indicates the BMC is now BMC_READY
     if((newStateUnit == obmcStandbyTarget) &&
diff --git a/bmc_state_manager.hpp b/bmc_state_manager.hpp
index 0e52a25..f6f7540 100644
--- a/bmc_state_manager.hpp
+++ b/bmc_state_manager.hpp
@@ -1,5 +1,6 @@
 #pragma once
 
+#include <functional>
 #include <sdbusplus/bus.hpp>
 #include "xyz/openbmc_project/State/BMC/server.hpp"
 
@@ -10,13 +11,17 @@
 namespace manager
 {
 
+using BMCInherit = sdbusplus::server::object::object<
+        sdbusplus::xyz::openbmc_project::State::server::BMC>;
+namespace sdbusRule = sdbusplus::bus::match::rules;
+
+
 /** @class BMC
  *  @brief OpenBMC BMC state management implementation.
  *  @details A concrete implementation for xyz.openbmc_project.State.BMC
  *  DBus API.
  */
-class BMC : public sdbusplus::server::object::object<
-                       sdbusplus::xyz::openbmc_project::State::server::BMC>
+class BMC : public BMCInherit
 {
     public:
         /** @brief Constructs BMC State Manager
@@ -27,20 +32,18 @@
          */
         BMC(sdbusplus::bus::bus& bus,
             const char* objPath) :
-                sdbusplus::server::object::object<
-                    sdbusplus::xyz::openbmc_project::State::server::BMC>(
-                        bus, objPath, true),
-                            bus(bus),
-                            stateSignal(
-                                std::make_unique<
-                                decltype(stateSignal)::element_type>(
+                BMCInherit(bus, objPath, true),
+                bus(bus),
+                stateSignal(
+                        std::make_unique<decltype(stateSignal)::element_type>(
                                 bus,
-                                "type='signal',"
-                                "member='JobRemoved',"
-                                "path='/org/freedesktop/systemd1',"
-                                "interface='org.freedesktop.systemd1.Manager'",
-                                bmcStateChangeSignal,
-                                this))
+                                sdbusRule::type::signal() +
+                                sdbusRule::member("JobRemoved") +
+                                sdbusRule::path("/org/freedesktop/systemd1") +
+                                sdbusRule::interface(
+                                        "org.freedesktop.systemd1.Manager"),
+                                std::bind(std::mem_fn(&BMC::bmcStateChange),
+                                          this, std::placeholders::_1)))
         {
             subscribeToSystemdSignals();
             discoverInitialState();
@@ -70,34 +73,21 @@
          */
         void executeTransition(Transition tranReq);
 
-        /** @brief Callback used to direct you into the class
-         *
-         * @param[in]  msg       - Data associated with subscribed signal
-         * @param[in]  userData  - Pointer to this object instance
-         * @param[out] retError  - return error data if any
-         *
-         */
-        static int bmcStateChangeSignal(sd_bus_message* msg,
-                                        void* userData,
-                                        sd_bus_error* retError);
-
         /** @brief Callback function on bmc state change
          *
          * Check if the state is relevant to the BMC and if so, update
          * corresponding BMC object's state
          *
          * @param[in]  msg       - Data associated with subscribed signal
-         * @param[out] retError  - return error data if any
          *
          */
-        int bmcStateChange(sd_bus_message* msg,
-                           sd_bus_error* retError);
+        int bmcStateChange(sdbusplus::message::message& msg);
 
         /** @brief Persistent sdbusplus DBus bus connection. **/
         sdbusplus::bus::bus& bus;
 
         /** @brief Used to subscribe to dbus system state changes **/
-        std::unique_ptr<sdbusplus::server::match::match> stateSignal;
+        std::unique_ptr<sdbusplus::bus::match_t> stateSignal;
 };
 
 } // namespace manager
