diff --git a/inc/button_factory.hpp b/inc/button_factory.hpp
index fc75f4f..69e05a9 100644
--- a/inc/button_factory.hpp
+++ b/inc/button_factory.hpp
@@ -8,7 +8,7 @@
 #include <unordered_map>
 
 using buttonIfCreatorMethod = std::function<std::unique_ptr<ButtonIface>(
-    sdbusplus::bus::bus& bus, EventPtr& event, buttonConfig& buttonCfg)>;
+    sdbusplus::bus_t& bus, EventPtr& event, buttonConfig& buttonCfg)>;
 
 /**
  * @brief This is abstract factory for the creating phosphor buttons objects
@@ -36,7 +36,7 @@
     void addToRegistry()
     {
         buttonIfaceRegistry[std::string(T::getFormFactorName())] =
-            [](sdbusplus::bus::bus& bus, EventPtr& event,
+            [](sdbusplus::bus_t& bus, EventPtr& event,
                buttonConfig& buttonCfg) {
                 return std::make_unique<T>(bus, T::getDbusObjectPath(), event,
                                            buttonCfg);
@@ -47,7 +47,7 @@
      *    corresponding to the button formfactor name provided
      */
     std::unique_ptr<ButtonIface> createInstance(const std::string& name,
-                                                sdbusplus::bus::bus& bus,
+                                                sdbusplus::bus_t& bus,
                                                 EventPtr& event,
                                                 buttonConfig& buttonCfg)
     {
diff --git a/inc/button_handler.hpp b/inc/button_handler.hpp
index 8d1b319..5723cf7 100644
--- a/inc/button_handler.hpp
+++ b/inc/button_handler.hpp
@@ -41,7 +41,7 @@
      *
      * @param[in] bus - sdbusplus connection object
      */
-    explicit Handler(sdbusplus::bus::bus& bus);
+    explicit Handler(sdbusplus::bus_t& bus);
 
   private:
     /**
@@ -52,7 +52,7 @@
      *
      * @param[in] msg - sdbusplus message from signal
      */
-    void powerReleased(sdbusplus::message::message& msg);
+    void powerReleased(sdbusplus::message_t& msg);
 
     /**
      * @brief The handler for a long power button press
@@ -62,7 +62,7 @@
      *
      * @param[in] msg - sdbusplus message from signal
      */
-    void longPowerPressed(sdbusplus::message::message& msg);
+    void longPowerPressed(sdbusplus::message_t& msg);
 
     /**
      * @brief The handler for an ID button press
@@ -71,7 +71,7 @@
      *
      * @param[in] msg - sdbusplus message from signal
      */
-    void idReleased(sdbusplus::message::message& msg);
+    void idReleased(sdbusplus::message_t& msg);
 
     /**
      * @brief The handler for a reset button press
@@ -80,7 +80,7 @@
      *
      * @param[in] msg - sdbusplus message from signal
      */
-    void resetReleased(sdbusplus::message::message& msg);
+    void resetReleased(sdbusplus::message_t& msg);
 
     /**
      * @brief Checks if system is powered on
@@ -125,7 +125,7 @@
     /**
      * @brief sdbusplus connection object
      */
-    sdbusplus::bus::bus& bus;
+    sdbusplus::bus_t& bus;
 
     /**
      * @brief Matches on the power button released signal
diff --git a/inc/button_interface.hpp b/inc/button_interface.hpp
index 9d85e8e..f05beb9 100644
--- a/inc/button_interface.hpp
+++ b/inc/button_interface.hpp
@@ -10,8 +10,7 @@
 class ButtonIface
 {
   public:
-    ButtonIface(sdbusplus::bus::bus& bus, EventPtr& event,
-                buttonConfig& buttonCfg,
+    ButtonIface(sdbusplus::bus_t& bus, EventPtr& event, buttonConfig& buttonCfg,
                 sd_event_io_handler_t handler = ButtonIface::EventHandler) :
         bus(bus),
         event(event), config(buttonCfg), callbackHandler(handler)
@@ -108,7 +107,7 @@
         }
     }
 
-    sdbusplus::bus::bus& bus;
+    sdbusplus::bus_t& bus;
     EventPtr& event;
     buttonConfig config;
     sd_event_io_handler_t callbackHandler;
diff --git a/inc/hostSelector_switch.hpp b/inc/hostSelector_switch.hpp
index cb9eab7..dc98739 100644
--- a/inc/hostSelector_switch.hpp
+++ b/inc/hostSelector_switch.hpp
@@ -33,7 +33,7 @@
     public ButtonIface
 {
   public:
-    HostSelector(sdbusplus::bus::bus& bus, const char* path, EventPtr& event,
+    HostSelector(sdbusplus::bus_t& bus, const char* path, EventPtr& event,
                  buttonConfig& buttonCfg) :
         sdbusplus::server::object_t<sdbusplus::xyz::openbmc_project::Chassis::
                                         Buttons::server::HostSelector>(
diff --git a/inc/id_button.hpp b/inc/id_button.hpp
index 41a2059..e48843b 100644
--- a/inc/id_button.hpp
+++ b/inc/id_button.hpp
@@ -31,14 +31,14 @@
 static constexpr std::string_view ID_BUTTON = "ID_BTN";
 
 class IDButton :
-    public sdbusplus::server::object::object<
+    public sdbusplus::server::object_t<
         sdbusplus::xyz::openbmc_project::Chassis::Buttons::server::ID>,
     public ButtonIface
 {
   public:
-    IDButton(sdbusplus::bus::bus& bus, const char* path, EventPtr& event,
+    IDButton(sdbusplus::bus_t& bus, const char* path, EventPtr& event,
              buttonConfig& buttonCfg) :
-        sdbusplus::server::object::object<
+        sdbusplus::server::object_t<
             sdbusplus::xyz::openbmc_project::Chassis::Buttons::server::ID>(
             bus, path),
         ButtonIface(bus, event, buttonCfg)
diff --git a/inc/power_button.hpp b/inc/power_button.hpp
index 73336ac..90076f3 100644
--- a/inc/power_button.hpp
+++ b/inc/power_button.hpp
@@ -33,14 +33,14 @@
 static constexpr std::string_view POWER_BUTTON = "POWER_BUTTON";
 
 class PowerButton :
-    public sdbusplus::server::object::object<
+    public sdbusplus::server::object_t<
         sdbusplus::xyz::openbmc_project::Chassis::Buttons::server::Power>,
     public ButtonIface
 {
   public:
-    PowerButton(sdbusplus::bus::bus& bus, const char* path, EventPtr& event,
+    PowerButton(sdbusplus::bus_t& bus, const char* path, EventPtr& event,
                 buttonConfig& buttonCfg) :
-        sdbusplus::server::object::object<
+        sdbusplus::server::object_t<
             sdbusplus::xyz::openbmc_project::Chassis::Buttons::server::Power>(
             bus, path),
         ButtonIface(bus, event, buttonCfg)
diff --git a/inc/reset_button.hpp b/inc/reset_button.hpp
index fea82b6..925bed1 100644
--- a/inc/reset_button.hpp
+++ b/inc/reset_button.hpp
@@ -31,14 +31,14 @@
 static constexpr std::string_view RESET_BUTTON = "RESET_BUTTON";
 
 class ResetButton :
-    public sdbusplus::server::object::object<
+    public sdbusplus::server::object_t<
         sdbusplus::xyz::openbmc_project::Chassis::Buttons::server::Reset>,
     public ButtonIface
 {
   public:
-    ResetButton(sdbusplus::bus::bus& bus, const char* path, EventPtr& event,
+    ResetButton(sdbusplus::bus_t& bus, const char* path, EventPtr& event,
                 buttonConfig& buttonCfg) :
-        sdbusplus::server::object::object<
+        sdbusplus::server::object_t<
             sdbusplus::xyz::openbmc_project::Chassis::Buttons::server::Reset>(
             bus, path),
         ButtonIface(bus, event, buttonCfg)
