diff --git a/phosphor-power-sequencer/src/power_control.cpp b/phosphor-power-sequencer/src/power_control.cpp
index 91021a4..e120532 100644
--- a/phosphor-power-sequencer/src/power_control.cpp
+++ b/phosphor-power-sequencer/src/power_control.cpp
@@ -40,7 +40,7 @@
 const std::string busPropertyName = "Bus";
 const std::string namePropertyName = "Name";
 
-PowerControl::PowerControl(sdbusplus::bus::bus& bus,
+PowerControl::PowerControl(sdbusplus::bus_t& bus,
                            const sdeventplus::Event& event) :
     PowerObject{bus, POWER_OBJ_PATH, PowerObject::action::defer_emit},
     bus{bus}, device{std::make_unique<PowerSequencerMonitor>(bus)},
@@ -116,7 +116,7 @@
     return state;
 }
 
-void PowerControl::interfacesAddedHandler(sdbusplus::message::message& msg)
+void PowerControl::interfacesAddedHandler(sdbusplus::message_t& msg)
 {
     // Only continue if message is valid and device has not already been found
     if (!msg || deviceFound)
diff --git a/phosphor-power-sequencer/src/power_control.hpp b/phosphor-power-sequencer/src/power_control.hpp
index f659744..0e37f7e 100644
--- a/phosphor-power-sequencer/src/power_control.hpp
+++ b/phosphor-power-sequencer/src/power_control.hpp
@@ -18,7 +18,7 @@
 namespace phosphor::power::sequencer
 {
 
-using PowerObject = sdbusplus::server::object::object<PowerInterface>;
+using PowerObject = sdbusplus::server::object_t<PowerInterface>;
 
 /**
  * @class PowerControl
@@ -40,7 +40,7 @@
      * @param bus D-Bus bus object
      * @param event event object
      */
-    PowerControl(sdbusplus::bus::bus& bus, const sdeventplus::Event& event);
+    PowerControl(sdbusplus::bus_t& bus, const sdeventplus::Event& event);
 
     /** @copydoc PowerInterface::getPgood() */
     int getPgood() const override;
@@ -55,7 +55,7 @@
      * Callback function to handle interfacesAdded D-Bus signals
      * @param msg Expanded sdbusplus message data
      */
-    void interfacesAddedHandler(sdbusplus::message::message& msg);
+    void interfacesAddedHandler(sdbusplus::message_t& msg);
 
     /** @copydoc PowerInterface::setPgoodTimeout() */
     void setPgoodTimeout(int timeout) override;
@@ -70,7 +70,7 @@
     /**
      * The D-Bus bus object
      */
-    sdbusplus::bus::bus& bus;
+    sdbusplus::bus_t& bus;
 
     /**
      * The power sequencer device to monitor.
diff --git a/phosphor-power-sequencer/src/power_interface.cpp b/phosphor-power-sequencer/src/power_interface.cpp
index 06e17da..d3def79 100644
--- a/phosphor-power-sequencer/src/power_interface.cpp
+++ b/phosphor-power-sequencer/src/power_interface.cpp
@@ -33,7 +33,7 @@
 namespace phosphor::power::sequencer
 {
 
-PowerInterface::PowerInterface(sdbusplus::bus::bus& bus, const char* path) :
+PowerInterface::PowerInterface(sdbusplus::bus_t& bus, const char* path) :
     serverInterface(bus, path, POWER_IFACE, vtable, this)
 {}
 
@@ -52,7 +52,7 @@
             log<level::INFO>(
                 fmt::format("callbackGetPgood: {}", pgood).c_str());
 
-            sdbusplus::message::message(msg).append(pgood);
+            sdbusplus::message_t(msg).append(pgood);
         }
         catch (const sdbusplus::exception_t& e)
         {
@@ -85,7 +85,7 @@
             log<level::INFO>(
                 fmt::format("callbackGetPgoodTimeout: {}", timeout).c_str());
 
-            sdbusplus::message::message(msg).append(timeout);
+            sdbusplus::message_t(msg).append(timeout);
         }
         catch (const sdbusplus::exception_t& e)
         {
@@ -117,7 +117,7 @@
             log<level::INFO>(
                 fmt::format("callbackGetPowerState: {}", pgood).c_str());
 
-            auto reply = sdbusplus::message::message(msg).new_method_return();
+            auto reply = sdbusplus::message_t(msg).new_method_return();
             reply.append(pgood);
             reply.method_return();
         }
@@ -147,7 +147,7 @@
     {
         try
         {
-            auto m = sdbusplus::message::message(msg);
+            auto m = sdbusplus::message_t(msg);
 
             int timeout{};
             m.read(timeout);
@@ -188,7 +188,7 @@
             log<level::INFO>(
                 fmt::format("callbackGetState: {}", state).c_str());
 
-            sdbusplus::message::message(msg).append(state);
+            sdbusplus::message_t(msg).append(state);
         }
         catch (const sdbusplus::exception_t& e)
         {
@@ -212,7 +212,7 @@
     {
         try
         {
-            auto m = sdbusplus::message::message(msg);
+            auto m = sdbusplus::message_t(msg);
 
             int state{};
             m.read(state);
@@ -254,7 +254,7 @@
     {
         try
         {
-            auto m = sdbusplus::message::message(msg);
+            auto m = sdbusplus::message_t(msg);
 
             std::string psError{};
             m.read(psError);
diff --git a/phosphor-power-sequencer/src/power_interface.hpp b/phosphor-power-sequencer/src/power_interface.hpp
index e4bf8cd..6b07d41 100644
--- a/phosphor-power-sequencer/src/power_interface.hpp
+++ b/phosphor-power-sequencer/src/power_interface.hpp
@@ -30,7 +30,7 @@
      * @param bus D-Bus bus object
      * @param path D-Bus object path
      */
-    PowerInterface(sdbusplus::bus::bus& bus, const char* path);
+    PowerInterface(sdbusplus::bus_t& bus, const char* path);
 
     /**
      * Emit the power good signal
diff --git a/phosphor-power-sequencer/src/power_sequencer_monitor.cpp b/phosphor-power-sequencer/src/power_sequencer_monitor.cpp
index e11fb3f..603dae1 100644
--- a/phosphor-power-sequencer/src/power_sequencer_monitor.cpp
+++ b/phosphor-power-sequencer/src/power_sequencer_monitor.cpp
@@ -29,8 +29,7 @@
 
 using namespace phosphor::logging;
 
-PowerSequencerMonitor::PowerSequencerMonitor(sdbusplus::bus::bus& bus) :
-    bus(bus)
+PowerSequencerMonitor::PowerSequencerMonitor(sdbusplus::bus_t& bus) : bus(bus)
 {}
 
 void PowerSequencerMonitor::createBmcDump()
diff --git a/phosphor-power-sequencer/src/power_sequencer_monitor.hpp b/phosphor-power-sequencer/src/power_sequencer_monitor.hpp
index eb151ce..ed095bb 100644
--- a/phosphor-power-sequencer/src/power_sequencer_monitor.hpp
+++ b/phosphor-power-sequencer/src/power_sequencer_monitor.hpp
@@ -26,7 +26,7 @@
      * Create a base device object for power sequence monitoring.
      * @param bus D-Bus bus object
      */
-    explicit PowerSequencerMonitor(sdbusplus::bus::bus& bus);
+    explicit PowerSequencerMonitor(sdbusplus::bus_t& bus);
 
     /**
      * Logs an error using the D-Bus Create method.
@@ -50,7 +50,7 @@
     /**
      * The D-Bus bus object
      */
-    sdbusplus::bus::bus& bus;
+    sdbusplus::bus_t& bus;
 
     /*
      * Create a BMC Dump
diff --git a/phosphor-power-sequencer/src/ucd90320_monitor.cpp b/phosphor-power-sequencer/src/ucd90320_monitor.cpp
index 050fcdc..297d20b 100644
--- a/phosphor-power-sequencer/src/ucd90320_monitor.cpp
+++ b/phosphor-power-sequencer/src/ucd90320_monitor.cpp
@@ -47,7 +47,7 @@
 
 namespace device_error = sdbusplus::xyz::openbmc_project::Common::Device::Error;
 
-UCD90320Monitor::UCD90320Monitor(sdbusplus::bus::bus& bus, std::uint8_t i2cBus,
+UCD90320Monitor::UCD90320Monitor(sdbusplus::bus_t& bus, std::uint8_t i2cBus,
                                  std::uint16_t i2cAddress) :
     PowerSequencerMonitor(bus),
     match{bus,
@@ -132,7 +132,7 @@
     }
 }
 
-void UCD90320Monitor::interfacesAddedHandler(sdbusplus::message::message& msg)
+void UCD90320Monitor::interfacesAddedHandler(sdbusplus::message_t& msg)
 {
     // Only continue if message is valid and rails / pins have not already been
     // found
diff --git a/phosphor-power-sequencer/src/ucd90320_monitor.hpp b/phosphor-power-sequencer/src/ucd90320_monitor.hpp
index 59e784c..9bcbf77 100644
--- a/phosphor-power-sequencer/src/ucd90320_monitor.hpp
+++ b/phosphor-power-sequencer/src/ucd90320_monitor.hpp
@@ -47,14 +47,14 @@
      * @param i2cBus The bus number of the power sequencer device
      * @param i2cAddress The I2C address of the power sequencer device
      */
-    UCD90320Monitor(sdbusplus::bus::bus& bus, std::uint8_t i2cBus,
+    UCD90320Monitor(sdbusplus::bus_t& bus, std::uint8_t i2cBus,
                     std::uint16_t i2cAddress);
 
     /**
      * Callback function to handle interfacesAdded D-Bus signals
      * @param msg Expanded sdbusplus message data
      */
-    void interfacesAddedHandler(sdbusplus::message::message& msg);
+    void interfacesAddedHandler(sdbusplus::message_t& msg);
 
     /** @copydoc PowerSequencerMonitor::onFailure() */
     void onFailure(bool timeout, const std::string& powerSupplyError) override;
