diff --git a/command/guid.cpp b/command/guid.cpp
index 26e73e8..56b459f 100644
--- a/command/guid.cpp
+++ b/command/guid.cpp
@@ -92,15 +92,13 @@
     if (matchPtr == nullptr)
     {
         using namespace sdbusplus::bus::match::rules;
-        sdbusplus::bus::bus bus{ipmid_get_sd_bus_connection()};
+        sdbusplus::bus_t bus{ipmid_get_sd_bus_connection()};
 
         matchPtr = std::make_unique<sdbusplus::bus::match_t>(
             bus,
             path_namespace(guidObjPath) + type::signal() +
                 member("PropertiesChanged") + interface(propInterface),
-            [](sdbusplus::message::message&) {
-                cache::guid = getSystemGUID();
-            });
+            [](sdbusplus::message_t&) { cache::guid = getSystemGUID(); });
     }
 }
 
diff --git a/command/session_cmds.cpp b/command/session_cmds.cpp
index 25e906e..8a4014a 100644
--- a/command/session_cmds.cpp
+++ b/command/session_cmds.cpp
@@ -168,7 +168,7 @@
             }
         }
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         log<level::ERR>("Failed to fetch object from dbus",
                         entry("INTERFACE=%s", session::sessionIntf),
@@ -298,7 +298,7 @@
             session::Manager::get().getSession(handler->sessionID);
         currentSessionPriv = currentSession->currentPrivilege();
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         log<level::ERR>("Failed to fetch object from dbus",
                         entry("INTERFACE=%s", session::sessionIntf),
diff --git a/sd_event_loop.cpp b/sd_event_loop.cpp
index acf5e68..ee3395c 100644
--- a/sd_event_loop.cpp
+++ b/sd_event_loop.cpp
@@ -56,7 +56,7 @@
         return 0;
     }
 
-    sdbusplus::bus::bus bus{ipmid_get_sd_bus_connection()};
+    sdbusplus::bus_t bus{ipmid_get_sd_bus_connection()};
     // Enumerate all VLAN + ETHERNET interfaces
     auto req = bus.new_method_call(MAPPER_BUS_NAME, MAPPER_OBJ, MAPPER_INTF,
                                    "GetSubTree");
diff --git a/session.hpp b/session.hpp
index 69dbc3c..5ddf2f7 100644
--- a/session.hpp
+++ b/session.hpp
@@ -93,7 +93,7 @@
  * implementation support at least four simultaneous sessions
  */
 
-using SessionIface = sdbusplus::server::object::object<
+using SessionIface = sdbusplus::server::object_t<
     sdbusplus::xyz::openbmc_project::Ipmi::server::SessionInfo>;
 
 class Session : public SessionIface
@@ -115,7 +115,7 @@
      * @param[in] inRemoteConsoleSessID - Remote Console Session ID
      * @param[in] priv - Privilege Level requested in the Command
      */
-    Session(sdbusplus::bus::bus& bus, const char* path,
+    Session(sdbusplus::bus_t& bus, const char* path,
             SessionID inRemoteConsoleSessID, SessionID BMCSessionID,
             char priv) :
         SessionIface(bus, path)
diff --git a/sessions_manager.cpp b/sessions_manager.cpp
index b01ba4a..538aaa4 100644
--- a/sessions_manager.cpp
+++ b/sessions_manager.cpp
@@ -61,7 +61,7 @@
      * through the lifetime of the Session Manager.
      */
 
-    objManager = std::make_unique<sdbusplus::server::manager::manager>(
+    objManager = std::make_unique<sdbusplus::server::manager_t>(
         *getSdBus(), session::sessionManagerRootPath);
 
     auto objPath =
diff --git a/sessions_manager.hpp b/sessions_manager.hpp
index cd7f016..512b17c 100644
--- a/sessions_manager.hpp
+++ b/sessions_manager.hpp
@@ -158,7 +158,7 @@
      *        associative container with Session ID as the unique key
      */
     SessionMap sessionsMap;
-    std::unique_ptr<sdbusplus::server::manager::manager> objManager = nullptr;
+    std::unique_ptr<sdbusplus::server::manager_t> objManager = nullptr;
     std::string chName{}; // Channel Name
     uint8_t ipmiNetworkInstance = 0;
     void setNetworkInstance(void);
diff --git a/sol/sol_manager.cpp b/sol/sol_manager.cpp
index 870bc6a..3c01212 100644
--- a/sol/sol_manager.cpp
+++ b/sol/sol_manager.cpp
@@ -113,7 +113,7 @@
 void Manager::updateSOLParameter(uint8_t channelNum)
 {
     std::variant<uint8_t, bool> value;
-    sdbusplus::bus::bus dbus(ipmid_get_sd_bus_connection());
+    sdbusplus::bus_t dbus(ipmid_get_sd_bus_connection());
     static std::string solService{};
     ipmi::PropertyMap properties;
     std::string ethdevice = ipmi::getChannelName(channelNum);
@@ -227,7 +227,7 @@
 void registerSOLServiceChangeCallback()
 {
     using namespace sdbusplus::bus::match::rules;
-    sdbusplus::bus::bus bus{ipmid_get_sd_bus_connection()};
+    sdbusplus::bus_t bus{ipmid_get_sd_bus_connection()};
     try
     {
         auto servicePath = ipmi::getDbusObject(
@@ -244,7 +244,7 @@
                     ", " +
                     type::signal() + member("PropertiesChanged") +
                     interface("org.freedesktop.DBus.Properties"),
-                [](sdbusplus::message::message& msg) {
+                [](sdbusplus::message_t& msg) {
                     std::string intfName;
                     std::map<std::string, std::variant<bool>> properties;
                     msg.read(intfName, properties);
@@ -270,7 +270,7 @@
     }
 }
 
-void procSolConfChange(sdbusplus::message::message& msg)
+void procSolConfChange(sdbusplus::message_t& msg)
 {
     using SolConfVariant = std::variant<bool, uint8_t>;
     using SolConfProperties =
@@ -340,7 +340,7 @@
     if (solConfPropertiesSignal == nullptr)
     {
         using namespace sdbusplus::bus::match::rules;
-        sdbusplus::bus::bus bus{ipmid_get_sd_bus_connection()};
+        sdbusplus::bus_t bus{ipmid_get_sd_bus_connection()};
         try
         {
             auto servicePath = solPath + channel;
