diff --git a/include/cpu.hpp b/include/cpu.hpp
index 276e64a..92616c6 100644
--- a/include/cpu.hpp
+++ b/include/cpu.hpp
@@ -118,9 +118,8 @@
     Cpu& operator=(Cpu&&) = delete;
     ~Cpu() = default;
 
-    Cpu(sdbusplus::bus::bus& bus, const std::string& objPath,
-        const uint8_t& cpuId, uint8_t* smbiosTableStorage,
-        const std::string& motherboard) :
+    Cpu(sdbusplus::bus_t& bus, const std::string& objPath, const uint8_t& cpuId,
+        uint8_t* smbiosTableStorage, const std::string& motherboard) :
         sdbusplus::server::object_t<processor, asset, location, connector, rev,
                                     Item, association>(bus, objPath.c_str()),
         cpuNum(cpuId), storage(smbiosTableStorage), motherboardPath(motherboard)
diff --git a/include/cpuinfo.hpp b/include/cpuinfo.hpp
index ac26c60..e4f4d76 100644
--- a/include/cpuinfo.hpp
+++ b/include/cpuinfo.hpp
@@ -43,7 +43,7 @@
 
 struct CPUInfo : public UniqueIdentifierBase
 {
-    CPUInfo(sdbusplus::bus::bus& bus, const size_t cpuId,
+    CPUInfo(sdbusplus::bus_t& bus, const size_t cpuId,
             const uint8_t peciAddress, const uint8_t i2cBusNum,
             const uint8_t i2cSlaveAddress) :
         // use defer_emit for UniqueIdentifier iface so that ObjectMapper
diff --git a/include/dimm.hpp b/include/dimm.hpp
index 66de5bb..1d1fc18 100644
--- a/include/dimm.hpp
+++ b/include/dimm.hpp
@@ -35,21 +35,20 @@
     sdbusplus::xyz::openbmc_project::Inventory::Item::server::Dimm::DeviceType;
 
 class Dimm :
-    sdbusplus::server::object::object<
+    sdbusplus::server::object_t<
         sdbusplus::xyz::openbmc_project::Inventory::Item::server::Dimm>,
-    sdbusplus::server::object::object<
+    sdbusplus::server::object_t<
         sdbusplus::xyz::openbmc_project::Inventory::Decorator::server::Asset>,
-    sdbusplus::server::object::object<
-        sdbusplus::xyz::openbmc_project::Inventory::Decorator::server::
-            LocationCode>,
-    sdbusplus::server::object::object<
+    sdbusplus::server::object_t<sdbusplus::xyz::openbmc_project::Inventory::
+                                    Decorator::server::LocationCode>,
+    sdbusplus::server::object_t<
         sdbusplus::xyz::openbmc_project::Inventory::Connector::server::Slot>,
-    sdbusplus::server::object::object<
+    sdbusplus::server::object_t<
         sdbusplus::xyz::openbmc_project::Inventory::server::Item>,
-    sdbusplus::server::object::object<
+    sdbusplus::server::object_t<
         sdbusplus::xyz::openbmc_project::Association::server::Definitions>,
-    sdbusplus::server::object::object<sdbusplus::xyz::openbmc_project::State::
-                                          Decorator::server::OperationalStatus>
+    sdbusplus::server::object_t<sdbusplus::xyz::openbmc_project::State::
+                                    Decorator::server::OperationalStatus>
 {
   public:
     Dimm() = delete;
@@ -59,31 +58,31 @@
     Dimm(Dimm&&) = default;
     Dimm& operator=(Dimm&&) = default;
 
-    Dimm(sdbusplus::bus::bus& bus, const std::string& objPath,
+    Dimm(sdbusplus::bus_t& bus, const std::string& objPath,
          const uint8_t& dimmId, uint8_t* smbiosTableStorage,
          const std::string& motherboard) :
 
-        sdbusplus::server::object::object<
+        sdbusplus::server::object_t<
             sdbusplus::xyz::openbmc_project::Inventory::Item::server::Dimm>(
             bus, objPath.c_str()),
-        sdbusplus::server::object::object<
-            sdbusplus::xyz::openbmc_project::Inventory::Decorator::server::
-                Asset>(bus, objPath.c_str()),
-        sdbusplus::server::object::object<
-            sdbusplus::xyz::openbmc_project::Inventory::Decorator::server::
-                LocationCode>(bus, objPath.c_str()),
-        sdbusplus::server::object::object<
-            sdbusplus::xyz::openbmc_project::Inventory::Connector::server::
-                Slot>(bus, objPath.c_str()),
-        sdbusplus::server::object::object<
+        sdbusplus::server::object_t<sdbusplus::xyz::openbmc_project::Inventory::
+                                        Decorator::server::Asset>(
+            bus, objPath.c_str()),
+        sdbusplus::server::object_t<sdbusplus::xyz::openbmc_project::Inventory::
+                                        Decorator::server::LocationCode>(
+            bus, objPath.c_str()),
+        sdbusplus::server::object_t<sdbusplus::xyz::openbmc_project::Inventory::
+                                        Connector::server::Slot>(
+            bus, objPath.c_str()),
+        sdbusplus::server::object_t<
             sdbusplus::xyz::openbmc_project::Inventory::server::Item>(
             bus, objPath.c_str()),
-        sdbusplus::server::object::object<
+        sdbusplus::server::object_t<
             sdbusplus::xyz::openbmc_project::Association::server::Definitions>(
             bus, objPath.c_str()),
-        sdbusplus::server::object::object<
-            sdbusplus::xyz::openbmc_project::State::Decorator::server::
-                OperationalStatus>(bus, objPath.c_str()),
+        sdbusplus::server::object_t<sdbusplus::xyz::openbmc_project::State::
+                                        Decorator::server::OperationalStatus>(
+            bus, objPath.c_str()),
         dimmNum(dimmId), storage(smbiosTableStorage),
         motherboardPath(motherboard)
     {
diff --git a/include/mdrv2.hpp b/include/mdrv2.hpp
index c7b4655..ddde0ef 100644
--- a/include/mdrv2.hpp
+++ b/include/mdrv2.hpp
@@ -52,7 +52,7 @@
 constexpr const int limitEntryLen = 0xff;
 
 class MDR_V2 :
-    sdbusplus::server::object::object<
+    sdbusplus::server::object_t<
         sdbusplus::xyz::openbmc_project::Smbios::server::MDR_V2>
 {
   public:
@@ -63,9 +63,9 @@
     MDR_V2& operator=(MDR_V2&&) = delete;
     ~MDR_V2() = default;
 
-    MDR_V2(sdbusplus::bus::bus& bus, const char* path,
+    MDR_V2(sdbusplus::bus_t& bus, const char* path,
            boost::asio::io_context& io) :
-        sdbusplus::server::object::object<
+        sdbusplus::server::object_t<
             sdbusplus::xyz::openbmc_project::Smbios::server::MDR_V2>(bus, path),
         bus(bus), timer(io), smbiosInterface(getObjectServer().add_interface(
                                  smbiosPath, smbiosInterfaceName))
@@ -120,7 +120,7 @@
   private:
     boost::asio::steady_timer timer;
 
-    sdbusplus::bus::bus& bus;
+    sdbusplus::bus_t& bus;
 
     Mdr2DirStruct smbiosDir;
 
diff --git a/include/pcieslot.hpp b/include/pcieslot.hpp
index 7ed083f..d3c9588 100644
--- a/include/pcieslot.hpp
+++ b/include/pcieslot.hpp
@@ -42,7 +42,7 @@
     Pcie& operator=(Pcie&&) = delete;
     ~Pcie() = default;
 
-    Pcie(sdbusplus::bus::bus& bus, const std::string& objPath,
+    Pcie(sdbusplus::bus_t& bus, const std::string& objPath,
          const uint8_t& pcieId, uint8_t* smbiosTableStorage,
          const std::string& motherboard) :
         sdbusplus::server::object_t<PCIeSlot, location, embedded, item,
diff --git a/include/system.hpp b/include/system.hpp
index 79f4eab..091f4cb 100644
--- a/include/system.hpp
+++ b/include/system.hpp
@@ -27,9 +27,9 @@
 {
 
 class System :
-    sdbusplus::server::object::object<
+    sdbusplus::server::object_t<
         sdbusplus::xyz::openbmc_project::Common::server::UUID>,
-    sdbusplus::server::object::object<
+    sdbusplus::server::object_t<
         sdbusplus::xyz::openbmc_project::Inventory::Decorator::server::Revision>
 {
   public:
@@ -40,14 +40,14 @@
     System(System&&) = default;
     System& operator=(System&&) = default;
 
-    System(sdbusplus::bus::bus& bus, const std::string& objPath,
+    System(sdbusplus::bus_t& bus, const std::string& objPath,
            uint8_t* smbiosTableStorage) :
-        sdbusplus::server::object::object<
+        sdbusplus::server::object_t<
             sdbusplus::xyz::openbmc_project::Common::server::UUID>(
             bus, objPath.c_str()),
-        sdbusplus::server::object::object<
-            sdbusplus::xyz::openbmc_project::Inventory::Decorator::server::
-                Revision>(bus, objPath.c_str()),
+        sdbusplus::server::object_t<sdbusplus::xyz::openbmc_project::Inventory::
+                                        Decorator::server::Revision>(
+            bus, objPath.c_str()),
         path(objPath), storage(smbiosTableStorage)
     {
         std::string input = "0";
diff --git a/src/cpuinfo_main.cpp b/src/cpuinfo_main.cpp
index 0d9c797..4633174 100644
--- a/src/cpuinfo_main.cpp
+++ b/src/cpuinfo_main.cpp
@@ -319,11 +319,11 @@
 
     cpuUpdatedMatch.insert_or_assign(
         cpu,
-        std::make_unique<sdbusplus::bus::match::match>(
-            static_cast<sdbusplus::bus::bus&>(*conn),
+        std::make_unique<sdbusplus::bus::match_t>(
+            static_cast<sdbusplus::bus_t&>(*conn),
             sdbusplus::bus::match::rules::interfacesAdded() +
                 sdbusplus::bus::match::rules::argNpath(0, objectPath.c_str()),
-            [conn, cpu](sdbusplus::message::message& msg) {
+            [conn, cpu](sdbusplus::message_t& msg) {
                 sdbusplus::message::object_path objectName;
                 boost::container::flat_map<
                     std::string,
@@ -561,13 +561,13 @@
 {
     // Get the Cpu configuration
     // In case it's not available, set a match for it
-    static std::unique_ptr<sdbusplus::bus::match::match> cpuConfigMatch =
-        std::make_unique<sdbusplus::bus::match::match>(
+    static std::unique_ptr<sdbusplus::bus::match_t> cpuConfigMatch =
+        std::make_unique<sdbusplus::bus::match_t>(
             *conn,
             "type='signal',interface='org.freedesktop.DBus.Properties',member='"
             "PropertiesChanged',arg0='xyz.openbmc_project."
             "Configuration.XeonCPU'",
-            [&io, conn, &objServer](sdbusplus::message::message& msg) {
+            [&io, conn, &objServer](sdbusplus::message_t& msg) {
                 std::cerr << "get cpu configuration match\n";
                 static boost::asio::steady_timer filterTimer(io);
                 filterTimer.expires_after(
@@ -644,9 +644,9 @@
     conn->request_name(cpu_info::cpuInfoObject);
     sdbusplus::asio::object_server server =
         sdbusplus::asio::object_server(conn);
-    sdbusplus::bus::bus& bus = static_cast<sdbusplus::bus::bus&>(*conn);
-    sdbusplus::server::manager::manager objManager(
-        bus, "/xyz/openbmc_project/inventory");
+    sdbusplus::bus_t& bus = static_cast<sdbusplus::bus_t&>(*conn);
+    sdbusplus::server::manager_t objManager(bus,
+                                            "/xyz/openbmc_project/inventory");
 
     cpu_info::hostStateSetup(conn);
 
diff --git a/src/cpuinfo_utils.cpp b/src/cpuinfo_utils.cpp
index 7265bbb..a96235f 100644
--- a/src/cpuinfo_utils.cpp
+++ b/src/cpuinfo_utils.cpp
@@ -218,7 +218,7 @@
         *dbusConn,
         sdbusplus::bus::match::rules::sender(service) +
             sdbusplus::bus::match::rules::propertiesChanged(object, interface),
-        [commonPropHandler](sdbusplus::message::message& reply) {
+        [commonPropHandler](sdbusplus::message_t& reply) {
             ChangedPropertiesType changedProps;
             // ignore first param (interface name), it has to be correct
             reply.read(std::string(), changedProps);
@@ -236,7 +236,7 @@
         sdbusplus::bus::match::rules::sender(service) +
             sdbusplus::bus::match::rules::interfacesAdded(),
         [object = std::string(object), interface = std::string(interface),
-         commonPropHandler](sdbusplus::message::message& reply) {
+         commonPropHandler](sdbusplus::message_t& reply) {
             sdbusplus::message::object_path changedObject;
             reply.read(changedObject);
             if (changedObject != object)
diff --git a/src/mdrv2.cpp b/src/mdrv2.cpp
index f7f428b..3949630 100644
--- a/src/mdrv2.cpp
+++ b/src/mdrv2.cpp
@@ -395,13 +395,13 @@
 void MDR_V2::systemInfoUpdate()
 {
     std::string motherboardPath;
-    sdbusplus::message::message method =
+    sdbusplus::message_t method =
         bus.new_method_call("xyz.openbmc_project.EntityManager",
                             "/xyz/openbmc_project/EntityManager",
                             "xyz.openbmc_project.EntityManager", "ReScan");
     try
     {
-        sdbusplus::message::message reply = bus.call(method);
+        sdbusplus::message_t reply = bus.call(method);
         reply.read(motherboardPath);
     }
     catch (const sdbusplus::exception_t& e)
diff --git a/src/mdrv2_main.cpp b/src/mdrv2_main.cpp
index 2699571..7ab907a 100644
--- a/src/mdrv2_main.cpp
+++ b/src/mdrv2_main.cpp
@@ -33,9 +33,9 @@
 
 int main(void)
 {
-    sdbusplus::bus::bus& bus = static_cast<sdbusplus::bus::bus&>(*connection);
-    sdbusplus::server::manager::manager objManager(
-        bus, "/xyz/openbmc_project/inventory");
+    sdbusplus::bus_t& bus = static_cast<sdbusplus::bus_t&>(*connection);
+    sdbusplus::server::manager_t objManager(bus,
+                                            "/xyz/openbmc_project/inventory");
 
     bus.request_name("xyz.openbmc_project.Smbios.MDR_V2");
 
diff --git a/src/smbios-ipmi-blobs/handler.cpp b/src/smbios-ipmi-blobs/handler.cpp
index 07542fb..5d1921a 100644
--- a/src/smbios-ipmi-blobs/handler.cpp
+++ b/src/smbios-ipmi-blobs/handler.cpp
@@ -32,15 +32,14 @@
 bool syncSmbiosData()
 {
     bool status = false;
-    sdbusplus::bus::bus bus =
-        sdbusplus::bus::bus(ipmid_get_sd_bus_connection());
-    sdbusplus::message::message method =
+    sdbusplus::bus_t bus = sdbusplus::bus_t(ipmid_get_sd_bus_connection());
+    sdbusplus::message_t method =
         bus.new_method_call(mdrV2Service, phosphor::smbios::mdrV2Path,
                             mdrV2Interface, "AgentSynchronizeData");
 
     try
     {
-        sdbusplus::message::message reply = bus.call(method);
+        sdbusplus::message_t reply = bus.call(method);
         reply.read(status);
     }
     catch (const sdbusplus::exception_t& e)
diff --git a/src/speed_select.cpp b/src/speed_select.cpp
index 2641fff..24fb11d 100644
--- a/src/speed_select.cpp
+++ b/src/speed_select.cpp
@@ -118,7 +118,7 @@
 
   public:
     using BaseOperatingConfig::BaseOperatingConfig;
-    OperatingConfig(sdbusplus::bus::bus& bus, unsigned int level_,
+    OperatingConfig(sdbusplus::bus_t& bus, unsigned int level_,
                     std::string path_) :
         BaseOperatingConfig(bus, path_.c_str(), action::defer_emit),
         path(std::move(path_)), level(level_)
@@ -130,7 +130,7 @@
   private:
     /** Objects describing all available SST configs - not modifiable. */
     std::vector<std::unique_ptr<OperatingConfig>> availConfigs;
-    sdbusplus::bus::bus& bus;
+    sdbusplus::bus_t& bus;
     const uint8_t peciAddress;
     const std::string path; ///< D-Bus path of CPU object
     const CPUModel cpuModel;
@@ -161,7 +161,7 @@
     }
 
   public:
-    CPUConfig(sdbusplus::bus::bus& bus_, uint8_t index, CPUModel model) :
+    CPUConfig(sdbusplus::bus_t& bus_, uint8_t index, CPUModel model) :
         BaseCurrentOperatingConfig(bus_, generatePath(index).c_str(),
                                    action::defer_emit),
         bus(bus_), peciAddress(index + MIN_CLIENT_ADDR),
