diff --git a/bmc_dump_entry.hpp b/bmc_dump_entry.hpp
index 24f0fcd..964f3a7 100644
--- a/bmc_dump_entry.hpp
+++ b/bmc_dump_entry.hpp
@@ -18,9 +18,9 @@
 namespace bmc
 {
 template <typename T>
-using ServerObject = typename sdbusplus::server::object::object<T>;
+using ServerObject = typename sdbusplus::server::object_t<T>;
 
-using EntryIfaces = sdbusplus::server::object::object<
+using EntryIfaces = sdbusplus::server::object_t<
     sdbusplus::xyz::openbmc_project::Dump::Entry::server::BMC>;
 
 class Manager;
@@ -51,7 +51,7 @@
      *  @param[in] status - status of the dump.
      *  @param[in] parent - The dump entry's parent.
      */
-    Entry(sdbusplus::bus::bus& bus, const std::string& objPath, uint32_t dumpId,
+    Entry(sdbusplus::bus_t& bus, const std::string& objPath, uint32_t dumpId,
           uint64_t timeStamp, uint64_t fileSize,
           const std::filesystem::path& file,
           phosphor::dump::OperationStatus status,
diff --git a/core_manager.cpp b/core_manager.cpp
index dc3e869..e764953 100644
--- a/core_manager.cpp
+++ b/core_manager.cpp
@@ -70,7 +70,7 @@
         auto mapperResponseMsg = b.call(mapper);
         mapperResponseMsg.read(mapperResponse);
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         log<level::ERR>(
             fmt::format("Failed to GetObject on Dump.Internal: {}", e.what())
@@ -91,7 +91,7 @@
     {
         b.call_noreply(m);
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         log<level::ERR>(
             fmt::format("Failed to create dump: {}", e.what()).c_str());
diff --git a/dump-extensions.hpp b/dump-extensions.hpp
index ad5b688..ec22258 100644
--- a/dump-extensions.hpp
+++ b/dump-extensions.hpp
@@ -16,6 +16,6 @@
  * @param[out] dumpMgrList - list dump manager objects.
  *
  */
-void loadExtensions(sdbusplus::bus::bus& bus, DumpManagerList& dumpMgrList);
+void loadExtensions(sdbusplus::bus_t& bus, DumpManagerList& dumpMgrList);
 } // namespace dump
 } // namespace phosphor
diff --git a/dump-extensions/default/default.cpp b/dump-extensions/default/default.cpp
index 184ab14..0de4e09 100644
--- a/dump-extensions/default/default.cpp
+++ b/dump-extensions/default/default.cpp
@@ -4,7 +4,7 @@
 {
 namespace dump
 {
-void loadExtensions(sdbusplus::bus::bus&, DumpManagerList&)
+void loadExtensions(sdbusplus::bus_t&, DumpManagerList&)
 {}
 } // namespace dump
 } // namespace phosphor
diff --git a/dump-extensions/openpower-dumps/dump-extensions.cpp b/dump-extensions/openpower-dumps/dump-extensions.cpp
index b47ba55..45864ca 100644
--- a/dump-extensions/openpower-dumps/dump-extensions.cpp
+++ b/dump-extensions/openpower-dumps/dump-extensions.cpp
@@ -12,7 +12,7 @@
 namespace dump
 {
 
-void loadExtensions(sdbusplus::bus::bus& bus, DumpManagerList& dumpList)
+void loadExtensions(sdbusplus::bus_t& bus, DumpManagerList& dumpList)
 {
 
     dumpList.push_back(std::make_unique<openpower::dump::system::Manager>(
diff --git a/dump-extensions/openpower-dumps/dump_manager_resource.hpp b/dump-extensions/openpower-dumps/dump_manager_resource.hpp
index e30dfec..4935ed0 100644
--- a/dump-extensions/openpower-dumps/dump_manager_resource.hpp
+++ b/dump-extensions/openpower-dumps/dump_manager_resource.hpp
@@ -16,7 +16,7 @@
 {
 
 constexpr uint32_t INVALID_SOURCE_ID = 0xFFFFFFFF;
-using NotifyIface = sdbusplus::server::object::object<
+using NotifyIface = sdbusplus::server::object_t<
     sdbusplus::xyz::openbmc_project::Dump::server::Create,
     sdbusplus::com::ibm::Dump::server::Create,
     sdbusplus::xyz::openbmc_project::Dump::server::NewDump>;
@@ -44,7 +44,7 @@
      *  @param[in] path - Path to attach at.
      *  @param[in] baseEntryPath - Base path of the dump entry.
      */
-    Manager(sdbusplus::bus::bus& bus, const char* path,
+    Manager(sdbusplus::bus_t& bus, const char* path,
             const std::string& baseEntryPath) :
         NotifyIface(bus, path),
         phosphor::dump::Manager(bus, path, baseEntryPath)
diff --git a/dump-extensions/openpower-dumps/dump_manager_system.hpp b/dump-extensions/openpower-dumps/dump_manager_system.hpp
index 7170b3f..5ea4deb 100644
--- a/dump-extensions/openpower-dumps/dump_manager_system.hpp
+++ b/dump-extensions/openpower-dumps/dump_manager_system.hpp
@@ -16,7 +16,7 @@
 {
 
 constexpr uint32_t INVALID_SOURCE_ID = 0xFFFFFFFF;
-using NotifyIface = sdbusplus::server::object::object<
+using NotifyIface = sdbusplus::server::object_t<
     sdbusplus::xyz::openbmc_project::Dump::server::Create,
     sdbusplus::xyz::openbmc_project::Dump::server::NewDump>;
 
@@ -43,7 +43,7 @@
      *  @param[in] path - Path to attach at.
      *  @param[in] baseEntryPath - Base path of the dump entry.
      */
-    Manager(sdbusplus::bus::bus& bus, const char* path,
+    Manager(sdbusplus::bus_t& bus, const char* path,
             const std::string& baseEntryPath) :
         NotifyIface(bus, path),
         phosphor::dump::Manager(bus, path, baseEntryPath)
diff --git a/dump-extensions/openpower-dumps/resource_dump_entry.hpp b/dump-extensions/openpower-dumps/resource_dump_entry.hpp
index 7fedfba..065438c 100644
--- a/dump-extensions/openpower-dumps/resource_dump_entry.hpp
+++ b/dump-extensions/openpower-dumps/resource_dump_entry.hpp
@@ -15,9 +15,9 @@
 namespace resource
 {
 template <typename T>
-using ServerObject = typename sdbusplus::server::object::object<T>;
+using ServerObject = typename sdbusplus::server::object_t<T>;
 
-using EntryIfaces = sdbusplus::server::object::object<
+using EntryIfaces = sdbusplus::server::object_t<
     sdbusplus::com::ibm::Dump::Entry::server::Resource>;
 
 class Manager;
@@ -51,7 +51,7 @@
      *  @param[in] status - status  of the dump.
      *  @param[in] parent - The dump entry's parent.
      */
-    Entry(sdbusplus::bus::bus& bus, const std::string& objPath, uint32_t dumpId,
+    Entry(sdbusplus::bus_t& bus, const std::string& objPath, uint32_t dumpId,
           uint64_t timeStamp, uint64_t dumpSize, const uint32_t sourceId,
           std::string vspStr, std::string pwd,
           phosphor::dump::OperationStatus status,
diff --git a/dump-extensions/openpower-dumps/system_dump_entry.hpp b/dump-extensions/openpower-dumps/system_dump_entry.hpp
index f09fafc..bc247c9 100644
--- a/dump-extensions/openpower-dumps/system_dump_entry.hpp
+++ b/dump-extensions/openpower-dumps/system_dump_entry.hpp
@@ -13,9 +13,9 @@
 namespace system
 {
 template <typename T>
-using ServerObject = typename sdbusplus::server::object::object<T>;
+using ServerObject = typename sdbusplus::server::object_t<T>;
 
-using EntryIfaces = sdbusplus::server::object::object<
+using EntryIfaces = sdbusplus::server::object_t<
     sdbusplus::xyz::openbmc_project::Dump::Entry::server::System>;
 
 class Manager;
@@ -46,7 +46,7 @@
      *  @param[in] status - status  of the dump.
      *  @param[in] parent - The dump entry's parent.
      */
-    Entry(sdbusplus::bus::bus& bus, const std::string& objPath, uint32_t dumpId,
+    Entry(sdbusplus::bus_t& bus, const std::string& objPath, uint32_t dumpId,
           uint64_t timeStamp, uint64_t dumpSize, const uint32_t sourceId,
           phosphor::dump::OperationStatus status,
           phosphor::dump::Manager& parent) :
diff --git a/dump_entry.hpp b/dump_entry.hpp
index 7a8bba3..34a25dc 100644
--- a/dump_entry.hpp
+++ b/dump_entry.hpp
@@ -16,13 +16,13 @@
 {
 
 template <typename T>
-using ServerObject = typename sdbusplus::server::object::object<T>;
+using ServerObject = typename sdbusplus::server::object_t<T>;
 
 // TODO Revisit whether sdbusplus::xyz::openbmc_project::Time::server::EpochTime
 // still needed in dump entry since start time and completed time are available
 // from sdbusplus::xyz::openbmc_project::Common::server::Progress
 // #ibm-openbmc/2809
-using EntryIfaces = sdbusplus::server::object::object<
+using EntryIfaces = sdbusplus::server::object_t<
     sdbusplus::xyz::openbmc_project::Common::server::Progress,
     sdbusplus::xyz::openbmc_project::Dump::server::Entry,
     sdbusplus::xyz::openbmc_project::Object::server::Delete,
@@ -57,7 +57,7 @@
      *  @param[in] dumpSize - Dump file size in bytes.
      *  @param[in] parent - The dump entry's parent.
      */
-    Entry(sdbusplus::bus::bus& bus, const std::string& objPath, uint32_t dumpId,
+    Entry(sdbusplus::bus_t& bus, const std::string& objPath, uint32_t dumpId,
           uint64_t timeStamp, uint64_t dumpSize, OperationStatus dumpStatus,
           Manager& parent) :
         EntryIfaces(bus, objPath.c_str(), EntryIfaces::action::emit_no_signals),
diff --git a/dump_internal.hpp b/dump_internal.hpp
index 027480f..7bd69cb 100644
--- a/dump_internal.hpp
+++ b/dump_internal.hpp
@@ -16,7 +16,7 @@
 namespace internal
 {
 
-using CreateIface = sdbusplus::server::object::object<
+using CreateIface = sdbusplus::server::object_t<
     sdbusplus::xyz::openbmc_project::Dump::Internal::server::Create>;
 using Mgr = phosphor::dump::bmc::Manager;
 
@@ -39,7 +39,7 @@
      *  @param[in] dumpMgr - Dump Manager object
      *  @param[in] path - Path to attach at.
      */
-    Manager(sdbusplus::bus::bus& bus, Mgr& dumpMgr, const char* path) :
+    Manager(sdbusplus::bus_t& bus, Mgr& dumpMgr, const char* path) :
         CreateIface(bus, path), dumpMgr(dumpMgr){};
 
     /**  @brief Implementation for Create
diff --git a/dump_manager.hpp b/dump_manager.hpp
index 1f5e3c7..5045ff4 100644
--- a/dump_manager.hpp
+++ b/dump_manager.hpp
@@ -13,7 +13,7 @@
 
 using DumpCreateParams =
     std::map<std::string, std::variant<std::string, uint64_t>>;
-using Iface = sdbusplus::server::object::object<
+using Iface = sdbusplus::server::object_t<
     sdbusplus::xyz::openbmc_project::Collection::server::DeleteAll>;
 
 /** @class Manager
@@ -39,7 +39,7 @@
      *  @param[in] path - Path to attach at.
      *  @param[in] baseEntryPath - Base path of the dump entry.
      */
-    Manager(sdbusplus::bus::bus& bus, const char* path,
+    Manager(sdbusplus::bus_t& bus, const char* path,
             const std::string& baseEntryPath) :
         Iface(bus, path, Iface::action::defer_emit),
         bus(bus), lastEntryId(0), baseEntryPath(baseEntryPath)
@@ -64,7 +64,7 @@
     void deleteAll() override;
 
     /** @brief sdbusplus DBus bus connection. */
-    sdbusplus::bus::bus& bus;
+    sdbusplus::bus_t& bus;
 
     /** @brief Dump Entry dbus objects map based on entry id */
     std::map<uint32_t, std::unique_ptr<Entry>> entries;
diff --git a/dump_manager_bmc.hpp b/dump_manager_bmc.hpp
index ddc094ae..6c1910f 100644
--- a/dump_manager_bmc.hpp
+++ b/dump_manager_bmc.hpp
@@ -22,7 +22,7 @@
 
 } // namespace internal
 
-using CreateIface = sdbusplus::server::object::object<
+using CreateIface = sdbusplus::server::object_t<
     sdbusplus::xyz::openbmc_project::Dump::server::Create>;
 
 using UserMap = phosphor::dump::inotify::UserMap;
@@ -66,7 +66,7 @@
      *  @param[in] baseEntryPath - Base path for dump entry.
      *  @param[in] filePath - Path where the dumps are stored.
      */
-    Manager(sdbusplus::bus::bus& bus, const EventPtr& event, const char* path,
+    Manager(sdbusplus::bus_t& bus, const EventPtr& event, const char* path,
             const std::string& baseEntryPath, const char* filePath) :
         CreateIface(bus, path),
         phosphor::dump::Manager(bus, path, baseEntryPath),
diff --git a/dump_manager_faultlog.hpp b/dump_manager_faultlog.hpp
index 56b1bd6..72dce08 100644
--- a/dump_manager_faultlog.hpp
+++ b/dump_manager_faultlog.hpp
@@ -19,7 +19,7 @@
 
 using namespace phosphor::logging;
 
-using CreateIface = sdbusplus::server::object::object<
+using CreateIface = sdbusplus::server::object_t<
     sdbusplus::xyz::openbmc_project::Dump::server::Create>;
 
 /** @class Manager
@@ -43,7 +43,7 @@
      *  @param[in] baseEntryPath - Base path for dump entry.
      *  @param[in] filePath - Path where the dumps are stored.
      */
-    Manager(sdbusplus::bus::bus& bus, const char* path,
+    Manager(sdbusplus::bus_t& bus, const char* path,
             const std::string& baseEntryPath, const char* filePath) :
         CreateIface(bus, path),
         phosphor::dump::Manager(bus, path, baseEntryPath), dumpDir(filePath)
diff --git a/dump_manager_main.cpp b/dump_manager_main.cpp
index 55f4812..402cea3 100644
--- a/dump_manager_main.cpp
+++ b/dump_manager_main.cpp
@@ -65,7 +65,7 @@
     }
 
     // Add sdbusplus ObjectManager for the 'root' path of the DUMP manager.
-    sdbusplus::server::manager::manager objManager(bus, DUMP_OBJPATH);
+    sdbusplus::server::manager_t objManager(bus, DUMP_OBJPATH);
 
     try
     {
diff --git a/dump_utils.cpp b/dump_utils.cpp
index c642a47..a0ada8a 100644
--- a/dump_utils.cpp
+++ b/dump_utils.cpp
@@ -11,7 +11,7 @@
 
 using namespace phosphor::logging;
 
-std::string getService(sdbusplus::bus::bus& bus, const std::string& path,
+std::string getService(sdbusplus::bus_t& bus, const std::string& path,
                        const std::string& interface)
 {
     constexpr auto objectMapperName = "xyz.openbmc_project.ObjectMapper";
@@ -38,7 +38,7 @@
             return std::string{};
         }
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         log<level::ERR>(fmt::format("Error in mapper method call, "
                                     "errormsg({}), PATH({}), INTERFACE({})",
@@ -84,7 +84,7 @@
         bootProgessStage = sdbusplus::xyz::openbmc_project::State::Boot::
             server::Progress::convertProgressStagesFromString(bootPgs);
     }
-    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/dump_utils.hpp b/dump_utils.hpp
index 4a6b419..1a18844 100644
--- a/dump_utils.hpp
+++ b/dump_utils.hpp
@@ -72,7 +72,7 @@
  * @param[in] interface - D-Bus interface name.
  * @return the bus service as a string
  **/
-std::string getService(sdbusplus::bus::bus& bus, const std::string& path,
+std::string getService(sdbusplus::bus_t& bus, const std::string& path,
                        const std::string& interface);
 
 /**
diff --git a/elog_watch.cpp b/elog_watch.cpp
index e95c991..17fd87a 100644
--- a/elog_watch.cpp
+++ b/elog_watch.cpp
@@ -34,7 +34,7 @@
 using PropertyName = std::string;
 using PropertyMap = std::map<PropertyName, AttributeMap>;
 
-Watch::Watch(sdbusplus::bus::bus& bus, IMgr& iMgr) :
+Watch::Watch(sdbusplus::bus_t& bus, IMgr& iMgr) :
     iMgr(iMgr),
     addMatch(bus,
              sdbusplus::bus::match::rules::interfacesAdded() +
@@ -58,7 +58,7 @@
     }
 }
 
-void Watch::addCallback(sdbusplus::message::message& msg)
+void Watch::addCallback(sdbusplus::message_t& msg)
 {
     using QuotaExceeded =
         sdbusplus::xyz::openbmc_project::Dump::Create::Error::QuotaExceeded;
@@ -69,7 +69,7 @@
     {
         msg.read(objectPath, propertyMap);
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         log<level::ERR>(
             fmt::format(
@@ -158,14 +158,14 @@
     return;
 }
 
-void Watch::delCallback(sdbusplus::message::message& msg)
+void Watch::delCallback(sdbusplus::message_t& msg)
 {
     sdbusplus::message::object_path objectPath;
     try
     {
         msg.read(objectPath);
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         log<level::ERR>(
             fmt::format(
diff --git a/elog_watch.hpp b/elog_watch.hpp
index 252cdcf..3806ed8 100644
--- a/elog_watch.hpp
+++ b/elog_watch.hpp
@@ -41,7 +41,7 @@
      *  @param[in] bus -  The Dbus bus object
      *  @param[in] intMgr - Dump internal Manager object
      */
-    Watch(sdbusplus::bus::bus& bus, IMgr& iMgr);
+    Watch(sdbusplus::bus_t& bus, IMgr& iMgr);
 
   private:
     friend class cereal::access;
@@ -67,12 +67,12 @@
      *           Internal error type dump request.
      *  @param[in] msg  - Data associated with subscribed signal
      */
-    void addCallback(sdbusplus::message::message& msg);
+    void addCallback(sdbusplus::message_t& msg);
 
     /** @brief Callback function for error log delete.
      *  @param[in] msg  - Data associated with subscribed signal
      */
-    void delCallback(sdbusplus::message::message& msg);
+    void delCallback(sdbusplus::message_t& msg);
 
     /** @brief get elog ID from elog entry object string.
      *  @param[in] objectPath  - elog entry object path.
diff --git a/faultlog_dump_entry.hpp b/faultlog_dump_entry.hpp
index 50f97cd..47299ca 100644
--- a/faultlog_dump_entry.hpp
+++ b/faultlog_dump_entry.hpp
@@ -16,9 +16,9 @@
 namespace faultlog
 {
 template <typename T>
-using ServerObject = typename sdbusplus::server::object::object<T>;
+using ServerObject = typename sdbusplus::server::object_t<T>;
 
-using EntryIfaces = sdbusplus::server::object::object<>;
+using EntryIfaces = sdbusplus::server::object_t<>;
 
 class Manager;
 
@@ -46,7 +46,7 @@
      *  @param[in] status - status of the dump.
      *  @param[in] parent - The dump entry's parent.
      */
-    Entry(sdbusplus::bus::bus& bus, const std::string& objPath, uint32_t dumpId,
+    Entry(sdbusplus::bus_t& bus, const std::string& objPath, uint32_t dumpId,
           uint64_t timeStamp, uint64_t fileSize,
           const std::filesystem::path& file,
           phosphor::dump::OperationStatus status,
diff --git a/ramoops_manager.cpp b/ramoops_manager.cpp
index 7cc7bba..e9f4772 100644
--- a/ramoops_manager.cpp
+++ b/ramoops_manager.cpp
@@ -51,7 +51,7 @@
         auto mapperResponseMsg = b.call(mapper);
         mapperResponseMsg.read(mapperResponse);
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         log<level::ERR>(
             fmt::format("Failed to parse dump create message, error({})",
@@ -73,7 +73,7 @@
     {
         b.call_noreply(m);
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         log<level::ERR>(
             fmt::format("Failed to create ramoops dump, errormsg({})", e.what())
