diff --git a/ext_interface.cpp b/ext_interface.cpp
index 8e6db17..cc3475e 100644
--- a/ext_interface.cpp
+++ b/ext_interface.cpp
@@ -28,7 +28,7 @@
  *
  * @return distinct dbus name for input interface/path
  **/
-std::string getService(sdbusplus::bus::bus& bus, const std::string& intf,
+std::string getService(sdbusplus::bus_t& bus, const std::string& intf,
                        const std::string& path)
 {
 
diff --git a/extensions/phal/create_pel.cpp b/extensions/phal/create_pel.cpp
index 75ee064..6cbf305 100644
--- a/extensions/phal/create_pel.cpp
+++ b/extensions/phal/create_pel.cpp
@@ -115,7 +115,7 @@
         method.append(event, level, additionalData, pelCalloutInfo);
         auto resp = bus.call(method);
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         log<level::ERR>(
             fmt::format("D-Bus call exception",
@@ -222,7 +222,7 @@
         response.read(reply);
         plid = std::get<1>(reply); // platform log id is tuple "second"
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         log<level::ERR>(fmt::format("D-Bus call exception",
                                     "OBJPATH={}, INTERFACE={}, EXCEPTION={}",
@@ -263,7 +263,7 @@
         method.append(event, level, additionalData);
         auto resp = bus.call(method);
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         log<level::ERR>(fmt::format("sdbusplus D-Bus call exception",
                                     "OBJPATH={}, INTERFACE={}, EXCEPTION={}",
diff --git a/extensions/phal/dump_utils.cpp b/extensions/phal/dump_utils.cpp
index 6356de1..11051ae 100644
--- a/extensions/phal/dump_utils.cpp
+++ b/extensions/phal/dump_utils.cpp
@@ -22,8 +22,8 @@
  * @param[out] inProgress Used to break out of our dbus wait loop
  * @reutn Always non-zero indicating no error, no cascading callbacks
  */
-uint32_t dumpStatusChanged(sdbusplus::message::message& msg,
-                           const std::string& path, bool& inProgress)
+uint32_t dumpStatusChanged(sdbusplus::message_t& msg, const std::string& path,
+                           bool& inProgress)
 {
     // reply (msg) will be a property change message
     std::string interface;
@@ -108,7 +108,7 @@
     constexpr auto interface = "xyz.openbmc_project.Dump.Create";
     constexpr auto function = "CreateDump";
 
-    sdbusplus::message::message method;
+    sdbusplus::message_t method;
 
     auto bus = sdbusplus::bus::new_default();
 
@@ -140,7 +140,7 @@
         // monitor dump progress
         monitorDump(reply, dumpParameters.timeout);
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         log<level::ERR>(fmt::format("D-Bus call createDump exception",
                                     "OBJPATH={}, INTERFACE={}, EXCEPTION={}",
diff --git a/extensions/phal/fw_update_watch.cpp b/extensions/phal/fw_update_watch.cpp
index b778734..b85c2f0 100644
--- a/extensions/phal/fw_update_watch.cpp
+++ b/extensions/phal/fw_update_watch.cpp
@@ -33,7 +33,7 @@
 using InterfaceName = std::string;
 using InterfaceMap = std::map<InterfaceName, PropertyMap>;
 
-void Watch::fwIntfAddedCallback(sdbusplus::message::message& msg)
+void Watch::fwIntfAddedCallback(sdbusplus::message_t& msg)
 {
     //  DBusInterfaceAdded interfaces;
     sdbusplus::message::object_path objectPath;
@@ -43,7 +43,7 @@
     {
         msg.read(objectPath, interfaceMap);
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         log<level::ERR>(fmt::format("Failed to parse software add signal"
                                     "Exception [{}] REPLY_SIG [{}]",
diff --git a/extensions/phal/fw_update_watch.hpp b/extensions/phal/fw_update_watch.hpp
index 615e10c..d8d056e 100644
--- a/extensions/phal/fw_update_watch.hpp
+++ b/extensions/phal/fw_update_watch.hpp
@@ -40,7 +40,7 @@
      *  @param[in] bus -  The Dbus bus object
      */
 
-    Watch(sdbusplus::bus::bus& bus) :
+    Watch(sdbusplus::bus_t& bus) :
         addMatch(bus,
                  sdbusplus::bus::match::rules::interfacesAdded() +
                      sdbusplus::bus::match::rules::path(OBJ_SOFTWARE),
@@ -73,7 +73,7 @@
      *
      *  @param[in] msg  - Data associated with subscribed signal
      */
-    void fwIntfAddedCallback(sdbusplus::message::message& msg);
+    void fwIntfAddedCallback(sdbusplus::message_t& msg);
 
     /** @brief sdbusplus signal match for software path add */
     sdbusplus::bus::match_t addMatch;
diff --git a/nmi_interface.cpp b/nmi_interface.cpp
index a0cafc0..c8f507b 100644
--- a/nmi_interface.cpp
+++ b/nmi_interface.cpp
@@ -31,7 +31,7 @@
 namespace proc
 {
 
-NMI::NMI(sdbusplus::bus::bus& bus, const char* path) :
+NMI::NMI(sdbusplus::bus_t& bus, const char* path) :
     Interface(bus, path), bus(bus), objectPath(path)
 {}
 
diff --git a/nmi_interface.hpp b/nmi_interface.hpp
index ef871b8..3835c61 100644
--- a/nmi_interface.hpp
+++ b/nmi_interface.hpp
@@ -10,7 +10,7 @@
 {
 
 using Base = sdbusplus::xyz::openbmc_project::Control::Host::server::NMI;
-using Interface = sdbusplus::server::object::object<Base>;
+using Interface = sdbusplus::server::object_t<Base>;
 
 /*  @class NMI
  *  @brief Implementation of NMI (Soft Reset)
@@ -29,7 +29,7 @@
      *  @param[in] bus - sdbusplus D-Bus to attach to.
      *  @param[in] path - Path to attach to.
      */
-    NMI(sdbusplus::bus::bus& bus, const char* path);
+    NMI(sdbusplus::bus_t& bus, const char* path);
 
     /*  @brief trigger stop followed by soft reset.
      */
@@ -37,7 +37,7 @@
 
   private:
     /** @brief sdbus handle */
-    sdbusplus::bus::bus& bus;
+    sdbusplus::bus_t& bus;
 
     /** @brief object path */
     std::string objectPath;
diff --git a/nmi_main.cpp b/nmi_main.cpp
index 36a0004..ccf7d3c 100644
--- a/nmi_main.cpp
+++ b/nmi_main.cpp
@@ -30,7 +30,7 @@
     pdbg_targets_init(NULL);
 
     // Add sdbusplus ObjectManager
-    sdbusplus::server::manager::manager objManager(bus, BUSPATH_NMI);
+    sdbusplus::server::manager_t objManager(bus, BUSPATH_NMI);
     openpower::proc::NMI NMI(bus, BUSPATH_NMI);
     bus.request_name(BUSNAME_NMI);
 
diff --git a/procedures/phal/start_host.cpp b/procedures/phal/start_host.cpp
index fc30ecc..2be25f4 100644
--- a/procedures/phal/start_host.cpp
+++ b/procedures/phal/start_host.cpp
@@ -118,7 +118,7 @@
         auto result = bus.call(properties);
         result.read(val);
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         log<level::ERR>("Get HW Keyword read from VINI Failed");
         throw std::runtime_error("Get HW Keyword read from VINI Failed");
@@ -264,7 +264,7 @@
                                                {{"REASON_FOR_PEL", trace}});
         }
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         const auto trace{fmt::format(
             "Exception [{}] to get the HardwareIsolation policy "
diff --git a/util.cpp b/util.cpp
index 9a43a50..28f59aa 100644
--- a/util.cpp
+++ b/util.cpp
@@ -12,7 +12,7 @@
 {
 using namespace phosphor::logging;
 
-std::string getService(sdbusplus::bus::bus& bus, const std::string& objectPath,
+std::string getService(sdbusplus::bus_t& bus, const std::string& objectPath,
                        const std::string& interface)
 {
     constexpr auto mapperBusBame = "xyz.openbmc_project.ObjectMapper";
@@ -27,7 +27,7 @@
         auto reply = bus.call(method);
         reply.read(response);
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         log<level::ERR>(fmt::format("D-Bus call exception OBJPATH={}"
                                     "INTERFACE={}  EXCEPTION={}",
diff --git a/util.hpp b/util.hpp
index 442bd22..e68c9c0 100644
--- a/util.hpp
+++ b/util.hpp
@@ -17,7 +17,7 @@
  *
  * @return service name on success and exception on failure
  */
-std::string getService(sdbusplus::bus::bus& bus, const std::string& objectPath,
+std::string getService(sdbusplus::bus_t& bus, const std::string& objectPath,
                        const std::string& interface);
 
 /**
