diff --git a/activation.cpp b/activation.cpp
index bfcd546..94820aa 100644
--- a/activation.cpp
+++ b/activation.cpp
@@ -46,7 +46,7 @@
     {
         this->bus.call_noreply(method);
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         if (e.name() != nullptr &&
             strcmp("org.freedesktop.systemd1.AlreadySubscribed", e.name()) == 0)
@@ -72,7 +72,7 @@
     {
         this->bus.call_noreply(method);
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         error("Error unsubscribing from systemd signals: {ERROR}", "ERROR", e);
     }
@@ -246,7 +246,7 @@
             {
                 bus.call_noreply(deleteMethod);
             }
-            catch (const sdbusplus::exception::exception& e)
+            catch (const sdbusplus::exception_t& e)
             {
                 error(
                     "Error deleting image ({PATH}) from image manager: {ERROR}",
@@ -255,7 +255,7 @@
             }
         }
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         error("Error in mapper method call for ({PATH}, {INTERFACE}: {ERROR}",
               "ERROR", e, "PATH", path, "INTERFACE", interface);
@@ -302,7 +302,7 @@
     return softwareServer::RedundancyPriority::priority(value);
 }
 
-void Activation::unitStateChange(sdbusplus::message::message& msg)
+void Activation::unitStateChange(sdbusplus::message_t& msg)
 {
     if (softwareServer::Activation::activation() !=
         softwareServer::Activation::Activations::Activating)
@@ -384,7 +384,7 @@
                 return true;
             }
         }
-        catch (const sdbusplus::exception::exception& e)
+        catch (const sdbusplus::exception_t& e)
         {
             error("Error in getting ApplyTime: {ERROR}", "ERROR", e);
         }
@@ -403,14 +403,14 @@
     {
         auto reply = bus.call(method);
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         error("Error in trying to upgrade Host Bios: {ERROR}", "ERROR", e);
         report<InternalFailure>();
     }
 }
 
-void Activation::onStateChangesBios(sdbusplus::message::message& msg)
+void Activation::onStateChangesBios(sdbusplus::message_t& msg)
 {
     uint32_t newStateID{};
     sdbusplus::message::object_path newStateObjPath;
@@ -467,7 +467,7 @@
     {
         auto reply = bus.call(method);
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         alert("Error in trying to reboot the BMC. The BMC needs to be manually "
               "rebooted to complete the image activation. {ERROR}",
diff --git a/activation.hpp b/activation.hpp
index 7425a54..94cc1bb 100644
--- a/activation.hpp
+++ b/activation.hpp
@@ -29,15 +29,15 @@
 
 using AssociationList =
     std::vector<std::tuple<std::string, std::string, std::string>>;
-using ActivationInherit = sdbusplus::server::object::object<
+using ActivationInherit = sdbusplus::server::object_t<
     sdbusplus::xyz::openbmc_project::Software::server::Activation,
     sdbusplus::xyz::openbmc_project::Association::server::Definitions>;
-using ActivationBlocksTransitionInherit = sdbusplus::server::object::object<
-    sdbusplus::xyz::openbmc_project::Software::server::
-        ActivationBlocksTransition>;
-using RedundancyPriorityInherit = sdbusplus::server::object::object<
+using ActivationBlocksTransitionInherit =
+    sdbusplus::server::object_t<sdbusplus::xyz::openbmc_project::Software::
+                                    server::ActivationBlocksTransition>;
+using RedundancyPriorityInherit = sdbusplus::server::object_t<
     sdbusplus::xyz::openbmc_project::Software::server::RedundancyPriority>;
-using ActivationProgressInherit = sdbusplus::server::object::object<
+using ActivationProgressInherit = sdbusplus::server::object_t<
     sdbusplus::xyz::openbmc_project::Software::server::ActivationProgress>;
 
 constexpr auto applyTimeImmediate =
@@ -69,7 +69,7 @@
      *  @param[in] value  - The redundancyPriority value
      *  @param[in] freePriority  - Call freePriorioty, default to true
      */
-    RedundancyPriority(sdbusplus::bus::bus& bus, const std::string& path,
+    RedundancyPriority(sdbusplus::bus_t& bus, const std::string& path,
                        Activation& parent, uint8_t value,
                        bool freePriority = true) :
         RedundancyPriorityInherit(bus, path.c_str(),
@@ -127,8 +127,7 @@
      *  @param[in] bus    - The Dbus bus object
      *  @param[in] path   - The Dbus object path
      */
-    ActivationBlocksTransition(sdbusplus::bus::bus& bus,
-                               const std::string& path) :
+    ActivationBlocksTransition(sdbusplus::bus_t& bus, const std::string& path) :
         ActivationBlocksTransitionInherit(bus, path.c_str(),
                                           action::emit_interface_added),
         bus(bus)
@@ -142,7 +141,7 @@
     }
 
   private:
-    sdbusplus::bus::bus& bus;
+    sdbusplus::bus_t& bus;
 
     /** @brief Enables a Guard that blocks any BMC reboot commands */
     void enableRebootGuard();
@@ -159,7 +158,7 @@
      * @param[in] bus    - The Dbus bus object
      * @param[in] path   - The Dbus object path
      */
-    ActivationProgress(sdbusplus::bus::bus& bus, const std::string& path) :
+    ActivationProgress(sdbusplus::bus_t& bus, const std::string& path) :
         ActivationProgressInherit(bus, path.c_str(),
                                   action::emit_interface_added)
     {
@@ -184,7 +183,7 @@
      * @param[in] activationStatus - The status of Activation
      * @param[in] assocs - Association objects
      */
-    Activation(sdbusplus::bus::bus& bus, const std::string& path,
+    Activation(sdbusplus::bus_t& bus, const std::string& path,
                ItemUpdater& parent, std::string& versionId,
                sdbusplus::xyz::openbmc_project::Software::server::Activation::
                    Activations activationStatus,
@@ -245,11 +244,11 @@
     void flashWriteHost();
 
     /** @brief Function that acts on Bios upgrade service file state changes */
-    void onStateChangesBios(sdbusplus::message::message&);
+    void onStateChangesBios(sdbusplus::message_t&);
 #endif
 
     /** @brief Overloaded function that acts on service file state changes */
-    void onStateChanges(sdbusplus::message::message&) override;
+    void onStateChanges(sdbusplus::message_t&) override;
 
     /** @brief Check if systemd state change is relevant to this object
      *
@@ -259,7 +258,7 @@
      * @param[in]  msg       - Data associated with subscribed signal
      *
      */
-    void unitStateChange(sdbusplus::message::message& msg);
+    void unitStateChange(sdbusplus::message_t& msg);
 
     /**
      * @brief subscribe to the systemd signals
@@ -301,7 +300,7 @@
     void rebootBmc();
 
     /** @brief Persistent sdbusplus DBus bus connection */
-    sdbusplus::bus::bus& bus;
+    sdbusplus::bus_t& bus;
 
     /** @brief Persistent DBus object path */
     std::string path;
diff --git a/download_manager.hpp b/download_manager.hpp
index 9f7d1cf..a947747 100644
--- a/download_manager.hpp
+++ b/download_manager.hpp
@@ -13,7 +13,7 @@
 namespace manager
 {
 
-using DownloadInherit = sdbusplus::server::object::object<
+using DownloadInherit = sdbusplus::server::object_t<
     sdbusplus::xyz::openbmc_project::Common::server::TFTP>;
 
 /** @class Download
@@ -29,7 +29,7 @@
      * @param[in] bus       - The Dbus bus object
      * @param[in] objPath   - The Dbus object path
      */
-    Download(sdbusplus::bus::bus& bus, const std::string& objPath) :
+    Download(sdbusplus::bus_t& bus, const std::string& objPath) :
         DownloadInherit(bus, (objPath).c_str()){};
 
     /**
diff --git a/download_manager_main.cpp b/download_manager_main.cpp
index c61e185..3656f8c 100644
--- a/download_manager_main.cpp
+++ b/download_manager_main.cpp
@@ -9,7 +9,7 @@
     auto bus = sdbusplus::bus::new_default();
 
     // Add sdbusplus ObjectManager.
-    sdbusplus::server::manager::manager objManager(bus, SOFTWARE_OBJPATH);
+    sdbusplus::server::manager_t objManager(bus, SOFTWARE_OBJPATH);
 
     phosphor::software::manager::Download manager(bus, SOFTWARE_OBJPATH);
 
diff --git a/flash.hpp b/flash.hpp
index c276017..0da94de 100644
--- a/flash.hpp
+++ b/flash.hpp
@@ -29,7 +29,7 @@
     /**
      * @brief Takes action when the state of the activation service file changes
      */
-    virtual void onStateChanges(sdbusplus::message::message& msg) = 0;
+    virtual void onStateChanges(sdbusplus::message_t& msg) = 0;
 };
 
 } // namespace updater
diff --git a/image_manager.cpp b/image_manager.cpp
index b02abd3..eb4fec4 100644
--- a/image_manager.cpp
+++ b/image_manager.cpp
@@ -59,7 +59,7 @@
 namespace // anonymous
 {
 
-std::vector<std::string> getSoftwareObjects(sdbusplus::bus::bus& bus)
+std::vector<std::string> getSoftwareObjects(sdbusplus::bus_t& bus)
 {
     std::vector<std::string> paths;
     auto method = bus.new_method_call(MAPPER_BUSNAME, MAPPER_PATH,
diff --git a/image_manager.hpp b/image_manager.hpp
index 25f0ced..ca4d676 100644
--- a/image_manager.hpp
+++ b/image_manager.hpp
@@ -26,7 +26,7 @@
      *
      * @param[in] bus - The Dbus bus object
      */
-    explicit Manager(sdbusplus::bus::bus& bus) : bus(bus){};
+    explicit Manager(sdbusplus::bus_t& bus) : bus(bus){};
 
     /**
      * @brief Verify and untar the tarball. Verify the manifest file.
@@ -51,7 +51,7 @@
     std::map<std::string, std::unique_ptr<Version>> versions;
 
     /** @brief Persistent sdbusplus DBus bus connection. */
-    sdbusplus::bus::bus& bus;
+    sdbusplus::bus_t& bus;
 
     /** @brief The random generator to get the version salt */
     std::mt19937 randomGen{static_cast<unsigned>(
diff --git a/image_manager_main.cpp b/image_manager_main.cpp
index f4dc03f..961f245 100644
--- a/image_manager_main.cpp
+++ b/image_manager_main.cpp
@@ -17,7 +17,7 @@
     sd_event* loop = nullptr;
     sd_event_default(&loop);
 
-    sdbusplus::server::manager::manager objManager(bus, SOFTWARE_OBJPATH);
+    sdbusplus::server::manager_t objManager(bus, SOFTWARE_OBJPATH);
     bus.request_name(VERSION_BUSNAME);
 
     try
diff --git a/item_updater.cpp b/item_updater.cpp
index c8fda76..96782f2 100644
--- a/item_updater.cpp
+++ b/item_updater.cpp
@@ -38,7 +38,7 @@
 namespace fs = std::filesystem;
 using NotAllowed = sdbusplus::xyz::openbmc_project::Common::Error::NotAllowed;
 
-void ItemUpdater::createActivation(sdbusplus::message::message& msg)
+void ItemUpdater::createActivation(sdbusplus::message_t& msg)
 {
 
     using SVersion = server::Version;
@@ -636,7 +636,7 @@
             bmcInventoryPath = result.front();
         }
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         error("Error in mapper GetSubTreePath: {ERROR}", "ERROR", e);
         return;
diff --git a/item_updater.hpp b/item_updater.hpp
index ccacd28..c50d9de 100644
--- a/item_updater.hpp
+++ b/item_updater.hpp
@@ -20,7 +20,7 @@
 namespace updater
 {
 
-using ItemUpdaterInherit = sdbusplus::server::object::object<
+using ItemUpdaterInherit = sdbusplus::server::object_t<
     sdbusplus::xyz::openbmc_project::Common::server::FactoryReset,
     sdbusplus::xyz::openbmc_project::Control::server::FieldMode,
     sdbusplus::xyz::openbmc_project::Association::server::Definitions,
@@ -51,7 +51,7 @@
      *
      * @param[in] bus    - The D-Bus bus object
      */
-    ItemUpdater(sdbusplus::bus::bus& bus, const std::string& path) :
+    ItemUpdater(sdbusplus::bus_t& bus, const std::string& path) :
         ItemUpdaterInherit(bus, path.c_str(),
                            ItemUpdaterInherit::action::defer_emit),
         bus(bus), helper(bus),
@@ -180,7 +180,7 @@
      *
      * @param[in]  msg       - Data associated with subscribed signal
      */
-    void createActivation(sdbusplus::message::message& msg);
+    void createActivation(sdbusplus::message_t& msg);
 
     /**
      * @brief Validates the presence of SquashFS image in the image dir.
@@ -225,7 +225,7 @@
     void createFunctionalAssociation(const std::string& path);
 
     /** @brief Persistent sdbusplus D-Bus bus connection. */
-    sdbusplus::bus::bus& bus;
+    sdbusplus::bus_t& bus;
 
     /** @brief The helper of image updater. */
     Helper helper;
diff --git a/item_updater_helper.hpp b/item_updater_helper.hpp
index b328285..81d66d9 100644
--- a/item_updater_helper.hpp
+++ b/item_updater_helper.hpp
@@ -24,7 +24,7 @@
      *
      *  @param[in] bus - sdbusplus D-Bus bus connection
      */
-    explicit Helper(sdbusplus::bus::bus& bus) : bus(bus)
+    explicit Helper(sdbusplus::bus_t& bus) : bus(bus)
     {
         // Empty
     }
@@ -65,7 +65,7 @@
 
   private:
     /** @brief Persistent sdbusplus D-Bus bus connection. */
-    sdbusplus::bus::bus& bus;
+    sdbusplus::bus_t& bus;
 };
 
 } // namespace updater
diff --git a/item_updater_main.cpp b/item_updater_main.cpp
index 7e41ad7..790af60 100644
--- a/item_updater_main.cpp
+++ b/item_updater_main.cpp
@@ -18,7 +18,7 @@
     sdbusplus::asio::connection bus(getIOContext());
 
     // Add sdbusplus ObjectManager.
-    sdbusplus::server::manager::manager objManager(bus, SOFTWARE_OBJPATH);
+    sdbusplus::server::manager_t objManager(bus, SOFTWARE_OBJPATH);
 
     phosphor::software::updater::ItemUpdater updater(bus, SOFTWARE_OBJPATH);
 
diff --git a/mmc/flash.cpp b/mmc/flash.cpp
index e1c5e9c..3bc2ab8 100644
--- a/mmc/flash.cpp
+++ b/mmc/flash.cpp
@@ -23,7 +23,7 @@
     bus.call_noreply(method);
 }
 
-void Activation::onStateChanges(sdbusplus::message::message& msg)
+void Activation::onStateChanges(sdbusplus::message_t& msg)
 {
     uint32_t newStateID{};
     sdbusplus::message::object_path newStateObjPath;
diff --git a/side-switch/side_switch.cpp b/side-switch/side_switch.cpp
index d2a2384..45b1c73 100644
--- a/side-switch/side_switch.cpp
+++ b/side-switch/side_switch.cpp
@@ -12,7 +12,7 @@
 
 PHOSPHOR_LOG2_USING;
 
-bool sideSwitchNeeded(sdbusplus::bus::bus& bus)
+bool sideSwitchNeeded(sdbusplus::bus_t& bus)
 {
 
     std::string fwRunningVersionPath;
@@ -124,7 +124,7 @@
     return (false);
 }
 
-bool powerOffSystem(sdbusplus::bus::bus& bus)
+bool powerOffSystem(sdbusplus::bus_t& bus)
 {
 
     try
@@ -172,7 +172,7 @@
     return (false);
 }
 
-bool setAutoPowerRestart(sdbusplus::bus::bus& bus)
+bool setAutoPowerRestart(sdbusplus::bus_t& bus)
 {
     try
     {
@@ -196,7 +196,7 @@
     return (true);
 }
 
-bool rebootTheBmc(sdbusplus::bus::bus& bus)
+bool rebootTheBmc(sdbusplus::bus_t& bus)
 {
     try
     {
diff --git a/side-switch/side_switch.hpp b/side-switch/side_switch.hpp
index ddaa922..324edaf 100644
--- a/side-switch/side_switch.hpp
+++ b/side-switch/side_switch.hpp
@@ -7,25 +7,25 @@
  *  @param[in] bus       - The Dbus bus object
  *  @return True if side switch needed, false otherwise
  */
-bool sideSwitchNeeded(sdbusplus::bus::bus& bus);
+bool sideSwitchNeeded(sdbusplus::bus_t& bus);
 
 /** @brief Power off the system
  *
  *  @param[in] bus       - The Dbus bus object
  *  @return True if chassis off success, false otherwise
  */
-bool powerOffSystem(sdbusplus::bus::bus& bus);
+bool powerOffSystem(sdbusplus::bus_t& bus);
 
 /** @brief Configure BMC to auto power on the host after reboot
  *
  *  @param[in] bus       - The Dbus bus object
  *  @return True if policy set correctly, false otherwise
  */
-bool setAutoPowerRestart(sdbusplus::bus::bus& bus);
+bool setAutoPowerRestart(sdbusplus::bus_t& bus);
 
 /** @brief Reboot the BMC
  *
  *  @param[in] bus       - The Dbus bus object
  *  @return True if reboot request had no error, false otherwise
  */
-bool rebootTheBmc(sdbusplus::bus::bus& bus);
+bool rebootTheBmc(sdbusplus::bus_t& bus);
diff --git a/static/flash.cpp b/static/flash.cpp
index 748a6cf..cdf0683 100644
--- a/static/flash.cpp
+++ b/static/flash.cpp
@@ -57,8 +57,7 @@
     }
 }
 
-void Activation::onStateChanges(
-    [[maybe_unused]] sdbusplus::message::message& msg)
+void Activation::onStateChanges([[maybe_unused]] sdbusplus::message_t& msg)
 {
 #ifdef BMC_STATIC_DUAL_IMAGE
     uint32_t newStateID;
diff --git a/sync_manager_main.cpp b/sync_manager_main.cpp
index db269a9..758abcf 100644
--- a/sync_manager_main.cpp
+++ b/sync_manager_main.cpp
@@ -18,7 +18,7 @@
     sd_event* loop = nullptr;
     sd_event_default(&loop);
 
-    sdbusplus::server::manager::manager objManager(bus, SOFTWARE_OBJPATH);
+    sdbusplus::server::manager_t objManager(bus, SOFTWARE_OBJPATH);
 
     try
     {
diff --git a/ubi/flash.cpp b/ubi/flash.cpp
index 0089d01..b445a56 100644
--- a/ubi/flash.cpp
+++ b/ubi/flash.cpp
@@ -28,7 +28,7 @@
     return;
 }
 
-void Activation::onStateChanges(sdbusplus::message::message& msg)
+void Activation::onStateChanges(sdbusplus::message_t& msg)
 {
     uint32_t newStateID{};
     sdbusplus::message::object_path newStateObjPath;
diff --git a/ubi/item_updater_helper.cpp b/ubi/item_updater_helper.cpp
index acb73a0..ae00ea5 100644
--- a/ubi/item_updater_helper.cpp
+++ b/ubi/item_updater_helper.cpp
@@ -74,7 +74,7 @@
     {
         bus.call_noreply(method);
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         error("Failed to update u-boot env variables: {FLASHID}", "FLASHID",
               flashId);
@@ -92,7 +92,7 @@
     {
         bus.call_noreply(method);
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         error("Failed to copy U-Boot to alternate chip: {ERROR}", "ERROR", e);
     }
diff --git a/usb/usb_manager.cpp b/usb/usb_manager.cpp
index 2bab2de..196ab42 100644
--- a/usb/usb_manager.cpp
+++ b/usb/usb_manager.cpp
@@ -90,7 +90,7 @@
     return;
 }
 
-void USBManager::updateActivation(sdbusplus::message::message& msg)
+void USBManager::updateActivation(sdbusplus::message_t& msg)
 {
     std::map<std::string, std::map<std::string, std::variant<std::string>>>
         interfaces;
diff --git a/usb/usb_manager.hpp b/usb/usb_manager.hpp
index 78e54aa..afb3cec 100644
--- a/usb/usb_manager.hpp
+++ b/usb/usb_manager.hpp
@@ -24,7 +24,7 @@
     USBManager& operator=(const USBManager&) = delete;
     USBManager& operator=(USBManager&&) = default;
 
-    explicit USBManager(sdbusplus::bus::bus& bus, sdeventplus::Event& event,
+    explicit USBManager(sdbusplus::bus_t& bus, sdeventplus::Event& event,
                         const fs::path& devPath, const fs::path& usbPath) :
         bus(bus),
         event(event), devicePath(devPath), usbPath(usbPath),
@@ -56,7 +56,7 @@
      *
      * @param[in]  msg   - Data associated with subscribed signal
      */
-    void updateActivation(sdbusplus::message::message& msg);
+    void updateActivation(sdbusplus::message_t& msg);
 
     /** @brief Set Apply Time to OnReset.
      *
@@ -71,7 +71,7 @@
 
   private:
     /** @brief Persistent sdbusplus DBus bus connection. */
-    sdbusplus::bus::bus& bus;
+    sdbusplus::bus_t& bus;
 
     /** sd event handler. */
     sdeventplus::Event& event;
diff --git a/utils.cpp b/utils.cpp
index d661fb3..91857fc 100644
--- a/utils.cpp
+++ b/utils.cpp
@@ -9,7 +9,7 @@
 
 PHOSPHOR_LOG2_USING;
 
-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)
 {
     auto method = bus.new_method_call(MAPPER_BUSNAME, MAPPER_PATH,
@@ -32,7 +32,7 @@
             return std::string{};
         }
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         error("Error in mapper method call for ({PATH}, {INTERFACE}: {ERROR}",
               "ERROR", e, "PATH", path, "INTERFACE", interface);
@@ -41,7 +41,7 @@
     return response[0].first;
 }
 
-void setProperty(sdbusplus::bus::bus& bus, const std::string& objectPath,
+void setProperty(sdbusplus::bus_t& bus, const std::string& objectPath,
                  const std::string& interface, const std::string& propertyName,
                  const PropertyValue& value)
 {
diff --git a/utils.hpp b/utils.hpp
index 2174938..af6dd98 100644
--- a/utils.hpp
+++ b/utils.hpp
@@ -16,7 +16,7 @@
  *
  * @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);
 
 /** @brief Get property(type: variant)
@@ -28,10 +28,10 @@
  *
  *  @return The value of the property(type: variant)
  *
- *  @throw sdbusplus::exception::exception when it fails
+ *  @throw sdbusplus::exception_t when it fails
  */
 template <typename T>
-T getProperty(sdbusplus::bus::bus& bus, const std::string& objectPath,
+T getProperty(sdbusplus::bus_t& bus, const std::string& objectPath,
               const std::string& interface, const std::string& propertyName)
 {
     std::variant<T> value{};
@@ -59,9 +59,9 @@
  *  @param[in] propertyName     -   D-Bus property name
  *  @param[in] value            -   The value to be set
  *
- *  @throw sdbusplus::exception::exception when it fails
+ *  @throw sdbusplus::exception_t when it fails
  */
-void setProperty(sdbusplus::bus::bus& bus, const std::string& objectPath,
+void setProperty(sdbusplus::bus_t& bus, const std::string& objectPath,
                  const std::string& interface, const std::string& propertyName,
                  const PropertyValue& value);
 
diff --git a/version.hpp b/version.hpp
index 8f284dd..5c74f99 100644
--- a/version.hpp
+++ b/version.hpp
@@ -21,12 +21,12 @@
 
 typedef std::function<void(std::string)> eraseFunc;
 
-using VersionInherit = sdbusplus::server::object::object<
+using VersionInherit = sdbusplus::server::object_t<
     sdbusplus::xyz::openbmc_project::Software::server::ExtendedVersion,
     sdbusplus::xyz::openbmc_project::Software::server::Version,
     sdbusplus::xyz::openbmc_project::Common::server::FilePath,
     sdbusplus::xyz::openbmc_project::Inventory::Decorator::server::Compatible>;
-using DeleteInherit = sdbusplus::server::object::object<
+using DeleteInherit = sdbusplus::server::object_t<
     sdbusplus::xyz::openbmc_project::Object::server::Delete>;
 
 class Version;
@@ -46,7 +46,7 @@
      *  @param[in] path   - The D-Bus object path
      *  @param[in] parent - Parent object.
      */
-    Delete(sdbusplus::bus::bus& bus, const std::string& path, Version& parent) :
+    Delete(sdbusplus::bus_t& bus, const std::string& path, Version& parent) :
         DeleteInherit(bus, path.c_str(), action::emit_interface_added),
         parent(parent)
     {
@@ -80,7 +80,7 @@
      * @param[in] compatibleNames - The device compatibility names
      * @param[in] callback        - The eraseFunc callback
      */
-    Version(sdbusplus::bus::bus& bus, const std::string& objPath,
+    Version(sdbusplus::bus_t& bus, const std::string& objPath,
             const std::string& versionString, VersionPurpose versionPurpose,
             const std::string& extVersion, const std::string& filePath,
             const std::vector<std::string>& compatibleNames, eraseFunc callback,
