diff --git a/host_state_manager.hpp b/host_state_manager.hpp
index e9158a3..de9d5fb 100644
--- a/host_state_manager.hpp
+++ b/host_state_manager.hpp
@@ -1,6 +1,7 @@
 #pragma once
 
 #include <string>
+#include <functional>
 #include <sdbusplus/bus.hpp>
 #include "xyz/openbmc_project/State/Host/server.hpp"
 
@@ -11,13 +12,16 @@
 namespace manager
 {
 
+using HostInherit = sdbusplus::server::object::object<
+        sdbusplus::xyz::openbmc_project::State::server::Host>;
+namespace sdbusRule = sdbusplus::bus::match::rules;
+
 /** @class Host
  *  @brief OpenBMC host state management implementation.
  *  @details A concrete implementation for xyz.openbmc_project.State.Host
  *  DBus API.
  */
-class Host : public sdbusplus::server::object::object<
-                sdbusplus::xyz::openbmc_project::State::server::Host>
+class Host : public HostInherit
 {
     public:
         /** @brief Constructs Host State Manager
@@ -31,19 +35,19 @@
          * @param[in] objPath   - The Dbus object path
          */
         Host(sdbusplus::bus::bus& bus,
-                const char* busName,
-                const char* objPath) :
-                sdbusplus::server::object::object<
-                    sdbusplus::xyz::openbmc_project::State::server::Host>(
-                            bus, objPath, true),
+             const char* busName,
+             const char* objPath) :
+                HostInherit(bus, objPath, true),
                 bus(bus),
-                systemdSignals(bus,
-                               "type='signal',"
-                               "member='JobRemoved',"
-                               "path='/org/freedesktop/systemd1',"
-                               "interface='org.freedesktop.systemd1.Manager'",
-                                sysStateChangeSignal,
-                                this)
+                systemdSignals(
+                        bus,
+                        sdbusRule::type::signal() +
+                        sdbusRule::member("JobRemoved") +
+                        sdbusRule::path("/org/freedesktop/systemd1") +
+                        sdbusRule::interface(
+                                "org.freedesktop.systemd1.Manager"),
+                        std::bind(std::mem_fn(&Host::sysStateChange),
+                                  this, std::placeholders::_1))
         {
             // Enable systemd signals
             subscribeToSystemdSignals();
@@ -113,36 +117,21 @@
          **/
         bool isAutoReboot();
 
-        /** @brief Callback function on systemd state changes
-         *
-         * Will just do a call into the appropriate object for processing
-         *
-         * @param[in]  msg       - Data associated with subscribed signal
-         * @param[in]  userData  - Pointer to this object instance
-         * @param[out] retError  - Not used but required with signal API
-         *
-         */
-        static int sysStateChangeSignal(sd_bus_message* msg,
-                                        void* userData,
-                                        sd_bus_error* retError);
-
         /** @brief Check if systemd state change is relevant to this object
          *
          * Instance specific interface to handle the detected systemd state
          * change
          *
          * @param[in]  msg       - Data associated with subscribed signal
-         * @param[out] retError  - Not used but required with signal API
          *
          */
-        int sysStateChange(sd_bus_message* msg,
-                           sd_bus_error* retError);
+        void sysStateChange(sdbusplus::message::message& msg);
 
         /** @brief Persistent sdbusplus DBus bus connection. */
         sdbusplus::bus::bus& bus;
 
         /** @brief Used to subscribe to dbus systemd signals **/
-        sdbusplus::server::match::match systemdSignals;
+        sdbusplus::bus::match_t systemdSignals;
 };
 
 } // namespace manager
