diff --git a/common/utils.hpp b/common/utils.hpp
index 43a8056..a99c47c 100644
--- a/common/utils.hpp
+++ b/common/utils.hpp
@@ -200,7 +200,7 @@
      *
      *  @return std::string - the dbus service name
      *
-     *  @throw sdbusplus::exception::exception when it fails
+     *  @throw sdbusplus::exception_t when it fails
      */
     std::string getService(const char* path,
                            const char* interface) const override;
@@ -215,7 +215,7 @@
      *
      *  @return GetSubTreeResponse - the mapper subtree response
      *
-     *  @throw sdbusplus::exception::exception when it fails
+     *  @throw sdbusplus::exception_t when it fails
      */
     GetSubTreeResponse
         getSubtree(const std::string& path, int depth,
@@ -229,7 +229,7 @@
      *
      *  @return The value of the property(type: variant)
      *
-     *  @throw sdbusplus::exception::exception when it fails
+     *  @throw sdbusplus::exception_t when it fails
      */
     PropertyValue
         getDbusPropertyVariant(const char* objPath, const char* dbusProp,
@@ -246,7 +246,7 @@
      *
      *  @return The value of the property
      *
-     *  @throw sdbusplus::exception::exception when dbus request fails
+     *  @throw sdbusplus::exception_t when dbus request fails
      *         std::bad_variant_access when \p Property and property on dbus do
      *         not match
      */
@@ -265,7 +265,7 @@
      *                       type for the D-Bus object
      *  @param[in] value - The value to be set
      *
-     *  @throw sdbusplus::exception::exception when it fails
+     *  @throw sdbusplus::exception_t when it fails
      */
     void setDbusProperty(const DBusMapping& dBusMap,
                          const PropertyValue& value) const override;
diff --git a/fw-update/activation.hpp b/fw-update/activation.hpp
index d5c2fc7..3a061b1 100644
--- a/fw-update/activation.hpp
+++ b/fw-update/activation.hpp
@@ -15,11 +15,11 @@
 namespace fw_update
 {
 
-using ActivationIntf = sdbusplus::server::object::object<
+using ActivationIntf = sdbusplus::server::object_t<
     sdbusplus::xyz::openbmc_project::Software::server::Activation>;
-using ActivationProgressIntf = sdbusplus::server::object::object<
+using ActivationProgressIntf = sdbusplus::server::object_t<
     sdbusplus::xyz::openbmc_project::Software::server::ActivationProgress>;
-using DeleteIntf = sdbusplus::server::object::object<
+using DeleteIntf = sdbusplus::server::object_t<
     sdbusplus::xyz::openbmc_project::Object::server::Delete>;
 
 /** @class ActivationProgress
@@ -35,7 +35,7 @@
      * @param[in] bus - Bus to attach to
      * @param[in] objPath - D-Bus object path
      */
-    ActivationProgress(sdbusplus::bus::bus& bus, const std::string& objPath) :
+    ActivationProgress(sdbusplus::bus_t& bus, const std::string& objPath) :
         ActivationProgressIntf(bus, objPath.c_str(),
                                action::emit_interface_added)
     {
@@ -56,7 +56,7 @@
      *  @param[in] objPath - D-Bus object path
      *  @param[in] updateManager - Reference to FW update manager
      */
-    Delete(sdbusplus::bus::bus& bus, const std::string& objPath,
+    Delete(sdbusplus::bus_t& bus, const std::string& objPath,
            UpdateManager* updateManager) :
         DeleteIntf(bus, objPath.c_str(), action::emit_interface_added),
         updateManager(updateManager)
@@ -86,7 +86,7 @@
      *  @param[in] objPath - D-Bus object path
      *  @param[in] updateManager - Reference to FW update manager
      */
-    Activation(sdbusplus::bus::bus& bus, std::string objPath,
+    Activation(sdbusplus::bus_t& bus, std::string objPath,
                Activations activationStatus, UpdateManager* updateManager) :
         ActivationIntf(bus, objPath.c_str(),
                        ActivationIntf::action::defer_emit),
@@ -140,7 +140,7 @@
     }
 
   private:
-    sdbusplus::bus::bus& bus;
+    sdbusplus::bus_t& bus;
     const std::string objPath;
     UpdateManager* updateManager;
     std::unique_ptr<Delete> deleteImpl;
diff --git a/host-bmc/dbus_to_event_handler.cpp b/host-bmc/dbus_to_event_handler.cpp
index 5d4d857..9fcf3ba 100644
--- a/host-bmc/dbus_to_event_handler.cpp
+++ b/host-bmc/dbus_to_event_handler.cpp
@@ -108,7 +108,7 @@
 
         const auto& dbusMapping = dbusMappings[offset];
         const auto& dbusValueMapping = dbusValMaps[offset];
-        auto stateSensorMatch = std::make_unique<sdbusplus::bus::match::match>(
+        auto stateSensorMatch = std::make_unique<sdbusplus::bus::match_t>(
             pldm::utils::DBusHandler::getBus(),
             propertiesChanged(dbusMapping.objectPath.c_str(),
                               dbusMapping.interface.c_str()),
diff --git a/host-bmc/dbus_to_event_handler.hpp b/host-bmc/dbus_to_event_handler.hpp
index 8818d67..83cb792 100644
--- a/host-bmc/dbus_to_event_handler.hpp
+++ b/host-bmc/dbus_to_event_handler.hpp
@@ -77,8 +77,7 @@
     pldm::dbus_api::Requester& requester;
 
     /** @brief D-Bus property changed signal match */
-    std::vector<std::unique_ptr<sdbusplus::bus::match::match>>
-        stateSensorMatchs;
+    std::vector<std::unique_ptr<sdbusplus::bus::match_t>> stateSensorMatchs;
 
     /** @brief PLDM request handler */
     pldm::requester::Handler<pldm::requester::Request>* handler;
diff --git a/host-bmc/dbus_to_host_effecters.cpp b/host-bmc/dbus_to_host_effecters.cpp
index a4d4be0..86c00e8 100644
--- a/host-bmc/dbus_to_host_effecters.cpp
+++ b/host-bmc/dbus_to_host_effecters.cpp
@@ -175,7 +175,7 @@
             return;
         }
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         std::cerr << "Error in getting current host state. Will still "
                      "continue to set the host effecter \n";
@@ -316,18 +316,17 @@
                                                  uint16_t effecterId)
 {
     using namespace sdbusplus::bus::match::rules;
-    effecterInfoMatch.emplace_back(
-        std::make_unique<sdbusplus::bus::match::match>(
-            pldm::utils::DBusHandler::getBus(),
-            propertiesChanged(objectPath, interface),
-            [this, effecterInfoIndex, dbusInfoIndex,
-             effecterId](sdbusplus::message::message& msg) {
-                DbusChgHostEffecterProps props;
-                std::string iface;
-                msg.read(iface, props);
-                processHostEffecterChangeNotification(
-                    props, effecterInfoIndex, dbusInfoIndex, effecterId);
-            }));
+    effecterInfoMatch.emplace_back(std::make_unique<sdbusplus::bus::match_t>(
+        pldm::utils::DBusHandler::getBus(),
+        propertiesChanged(objectPath, interface),
+        [this, effecterInfoIndex, dbusInfoIndex,
+         effecterId](sdbusplus::message_t& msg) {
+            DbusChgHostEffecterProps props;
+            std::string iface;
+            msg.read(iface, props);
+            processHostEffecterChangeNotification(props, effecterInfoIndex,
+                                                  dbusInfoIndex, effecterId);
+        }));
 }
 
 } // namespace host_effecters
diff --git a/host-bmc/dbus_to_host_effecters.hpp b/host-bmc/dbus_to_host_effecters.hpp
index 3dd8c38..f8e165e 100644
--- a/host-bmc/dbus_to_host_effecters.hpp
+++ b/host-bmc/dbus_to_host_effecters.hpp
@@ -173,7 +173,7 @@
     int sockFd;              //!< Socket fd to send message to host
     const pldm_pdr* pdrRepo; //!< Reference to PDR repo
     std::vector<EffecterInfo> hostEffecterInfo; //!< Parsed effecter information
-    std::vector<std::unique_ptr<sdbusplus::bus::match::match>>
+    std::vector<std::unique_ptr<sdbusplus::bus::match_t>>
         effecterInfoMatch; //!< vector to catch the D-Bus property change
                            //!< signals for the effecters
     const pldm::utils::DBusHandler* dbusHandler; //!< D-bus Handler
diff --git a/host-bmc/host_condition.hpp b/host-bmc/host_condition.hpp
index 6ea9978..f7d67fb 100644
--- a/host-bmc/host_condition.hpp
+++ b/host-bmc/host_condition.hpp
@@ -11,7 +11,7 @@
 namespace dbus_api
 {
 
-using HostIntf = sdbusplus::server::object::object<
+using HostIntf = sdbusplus::server::object_t<
     sdbusplus::xyz::openbmc_project::Condition::server::HostFirmware>;
 
 class Host : public HostIntf
@@ -24,7 +24,7 @@
     Host& operator=(Host&&) = delete;
     virtual ~Host() = default;
 
-    Host(sdbusplus::bus::bus& bus, const std::string& path) :
+    Host(sdbusplus::bus_t& bus, const std::string& path) :
         HostIntf(bus, path.c_str()){};
 
     /** @brief Override reads to CurrentFirmwareCondition */
diff --git a/host-bmc/host_pdr_handler.cpp b/host-bmc/host_pdr_handler.cpp
index f4c86e6..e74affc 100644
--- a/host-bmc/host_pdr_handler.cpp
+++ b/host-bmc/host_pdr_handler.cpp
@@ -90,12 +90,11 @@
         }
     }
 
-    hostOffMatch = std::make_unique<sdbusplus::bus::match::match>(
+    hostOffMatch = std::make_unique<sdbusplus::bus::match_t>(
         pldm::utils::DBusHandler::getBus(),
         propertiesChanged("/xyz/openbmc_project/state/host0",
                           "xyz.openbmc_project.State.Host"),
-        [this, repo, entityTree,
-         bmcEntityTree](sdbusplus::message::message& msg) {
+        [this, repo, entityTree, bmcEntityTree](sdbusplus::message_t& msg) {
             DbusChangedProps props{};
             std::string intf;
             msg.read(intf, props);
diff --git a/host-bmc/host_pdr_handler.hpp b/host-bmc/host_pdr_handler.hpp
index 9ea8611..694bcdd 100644
--- a/host-bmc/host_pdr_handler.hpp
+++ b/host-bmc/host_pdr_handler.hpp
@@ -246,7 +246,7 @@
      */
     std::map<EntityType, pldm_entity> parents;
     /** @brief D-Bus property changed signal match */
-    std::unique_ptr<sdbusplus::bus::match::match> hostOffMatch;
+    std::unique_ptr<sdbusplus::bus::match_t> hostOffMatch;
 
     /** @brief sensorMap is a lookup data structure that is build from the
      *         hostPDR that speeds up the lookup of <TerminusID, SensorID> in
diff --git a/libpldmresponder/bios.cpp b/libpldmresponder/bios.cpp
index e6f4a6c..2306ad9 100644
--- a/libpldmresponder/bios.cpp
+++ b/libpldmresponder/bios.cpp
@@ -125,7 +125,7 @@
         timeUsec = pldm::utils::DBusHandler().getDbusProperty<EpochTimeUS>(
             bmcTimePath, "Elapsed", timeInterface);
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         std::cerr << "Error getting time, PATH=" << bmcTimePath
                   << " TIME INTERACE=" << timeInterface << "\n";
diff --git a/libpldmresponder/bios_config.cpp b/libpldmresponder/bios_config.cpp
index 3649c78..704fa33 100644
--- a/libpldmresponder/bios_config.cpp
+++ b/libpldmresponder/bios_config.cpp
@@ -958,10 +958,10 @@
     constexpr auto objInterface = "xyz.openbmc_project.BIOSConfig.Manager";
 
     using namespace sdbusplus::bus::match::rules;
-    auto updateBIOSMatch = std::make_unique<sdbusplus::bus::match::match>(
+    auto updateBIOSMatch = std::make_unique<sdbusplus::bus::match_t>(
         pldm::utils::DBusHandler::getBus(),
         propertiesChanged(objPath, objInterface),
-        [this](sdbusplus::message::message& msg) {
+        [this](sdbusplus::message_t& msg) {
             constexpr auto propertyName = "PendingAttributes";
 
             using Value =
diff --git a/libpldmresponder/bios_config.hpp b/libpldmresponder/bios_config.hpp
index 18e13b0..381ff0a 100644
--- a/libpldmresponder/bios_config.hpp
+++ b/libpldmresponder/bios_config.hpp
@@ -159,7 +159,7 @@
     using DbusChObjProperties = std::map<propName, pldm::utils::PropertyValue>;
 
     // vector to catch the D-Bus property change signals for BIOS attributes
-    std::vector<std::unique_ptr<sdbusplus::bus::match::match>> biosAttrMatch;
+    std::vector<std::unique_ptr<sdbusplus::bus::match_t>> biosAttrMatch;
 
     /** @brief Method to update a BIOS attribute when the corresponding Dbus
      *  property is changed
@@ -188,12 +188,11 @@
             {
                 using namespace sdbusplus::bus::match::rules;
                 biosAttrMatch.push_back(
-                    std::make_unique<sdbusplus::bus::match::match>(
+                    std::make_unique<sdbusplus::bus::match_t>(
                         pldm::utils::DBusHandler::getBus(),
                         propertiesChanged(dBusMap->objectPath,
                                           dBusMap->interface),
-                        [this,
-                         biosAttrIndex](sdbusplus::message::message& msg) {
+                        [this, biosAttrIndex](sdbusplus::message_t& msg) {
                             DbusChObjProperties props;
                             std::string iface;
                             msg.read(iface, props);
diff --git a/oem/ibm/libpldmresponder/file_io.hpp b/oem/ibm/libpldmresponder/file_io.hpp
index ee8074d..b1fe17c 100644
--- a/oem/ibm/libpldmresponder/file_io.hpp
+++ b/oem/ibm/libpldmresponder/file_io.hpp
@@ -229,12 +229,12 @@
                                                            payloadLength);
                          });
 
-        resDumpMatcher = std::make_unique<sdbusplus::bus::match::match>(
+        resDumpMatcher = std::make_unique<sdbusplus::bus::match_t>(
             pldm::utils::DBusHandler::getBus(),
             sdbusplus::bus::match::rules::interfacesAdded() +
                 sdbusplus::bus::match::rules::argNpath(0, dumpObjPath),
             [this, hostSockFd, hostEid, dbusImplReqester,
-             handler](sdbusplus::message::message& msg) {
+             handler](sdbusplus::message_t& msg) {
                 std::map<
                     std::string,
                     std::map<std::string, std::variant<std::string, uint32_t>>>
@@ -272,12 +272,12 @@
                     }
                 }
             });
-        vmiCertMatcher = std::make_unique<sdbusplus::bus::match::match>(
+        vmiCertMatcher = std::make_unique<sdbusplus::bus::match_t>(
             pldm::utils::DBusHandler::getBus(),
             sdbusplus::bus::match::rules::interfacesAdded() +
                 sdbusplus::bus::match::rules::argNpath(0, certObjPath),
             [this, hostSockFd, hostEid, dbusImplReqester,
-             handler](sdbusplus::message::message& msg) {
+             handler](sdbusplus::message_t& msg) {
                 std::map<
                     std::string,
                     std::map<std::string, std::variant<std::string, uint32_t>>>
@@ -422,10 +422,10 @@
         std::vector<std::pair<std::string, std::variant<std::string>>>>>;
     std::unique_ptr<pldm::requester::oem_ibm::DbusToFileHandler>
         dbusToFileHandler; //!< pointer to send request to Host
-    std::unique_ptr<sdbusplus::bus::match::match>
+    std::unique_ptr<sdbusplus::bus::match_t>
         resDumpMatcher; //!< Pointer to capture the interface added signal
                         //!< for new resource dump
-    std::unique_ptr<sdbusplus::bus::match::match>
+    std::unique_ptr<sdbusplus::bus::match_t>
         vmiCertMatcher; //!< Pointer to capture the interface added signal
                         //!< for new csr string
     /** @brief PLDM request handler */
diff --git a/oem/ibm/libpldmresponder/inband_code_update.cpp b/oem/ibm/libpldmresponder/inband_code_update.cpp
index dc83af8..980a869 100644
--- a/oem/ibm/libpldmresponder/inband_code_update.cpp
+++ b/oem/ibm/libpldmresponder/inband_code_update.cpp
@@ -190,20 +190,20 @@
 
     using namespace sdbusplus::bus::match::rules;
     captureNextBootSideChange.push_back(
-        std::make_unique<sdbusplus::bus::match::match>(
+        std::make_unique<sdbusplus::bus::match_t>(
             pldm::utils::DBusHandler::getBus(),
             propertiesChanged(runningVersion, redundancyIntf),
-            [this](sdbusplus::message::message& msg) {
+            [this](sdbusplus::message_t& msg) {
                 DbusChangedProps props;
                 std::string iface;
                 msg.read(iface, props);
                 processPriorityChangeNotification(props);
             }));
-    fwUpdateMatcher.push_back(std::make_unique<sdbusplus::bus::match::match>(
+    fwUpdateMatcher.push_back(std::make_unique<sdbusplus::bus::match_t>(
         pldm::utils::DBusHandler::getBus(),
         "interface='org.freedesktop.DBus.ObjectManager',type='signal',"
         "member='InterfacesAdded',path='/xyz/openbmc_project/software'",
-        [this](sdbusplus::message::message& msg) {
+        [this](sdbusplus::message_t& msg) {
             DBusInterfaceAdded interfaces;
             sdbusplus::message::object_path path;
             msg.read(path, interfaces);
@@ -230,12 +230,12 @@
                             if (!imageActivationMatch)
                             {
                                 imageActivationMatch = std::make_unique<
-                                    sdbusplus::bus::match::match>(
+                                    sdbusplus::bus::match_t>(
                                     pldm::utils::DBusHandler::getBus(),
                                     propertiesChanged(newImageId,
                                                       "xyz.openbmc_project."
                                                       "Software.Activation"),
-                                    [this](sdbusplus::message::message& msg) {
+                                    [this](sdbusplus::message_t& msg) {
                                         DbusChangedProps props;
                                         std::string iface;
                                         msg.read(iface, props);
@@ -306,7 +306,7 @@
                             break;
                         }
                     }
-                    catch (const sdbusplus::exception::exception& e)
+                    catch (const sdbusplus::exception_t& e)
                     {
                         std::cerr << "Error in getting Activation status \n";
                     }
diff --git a/oem/ibm/libpldmresponder/inband_code_update.hpp b/oem/ibm/libpldmresponder/inband_code_update.hpp
index 7832579..9c7f41c 100644
--- a/oem/ibm/libpldmresponder/inband_code_update.hpp
+++ b/oem/ibm/libpldmresponder/inband_code_update.hpp
@@ -186,10 +186,10 @@
     bool codeUpdateInProgress =
         false; //!< indicates whether codeupdate is going on
     const pldm::utils::DBusHandler* dBusIntf; //!< D-Bus handler
-    std::vector<std::unique_ptr<sdbusplus::bus::match::match>>
+    std::vector<std::unique_ptr<sdbusplus::bus::match_t>>
         captureNextBootSideChange; //!< vector to catch the D-Bus property
                                    //!< change for next boot side
-    std::vector<std::unique_ptr<sdbusplus::bus::match::match>>
+    std::vector<std::unique_ptr<sdbusplus::bus::match_t>>
         fwUpdateMatcher; //!< pointer to capture the interface added signal for
                          //!< new image
     pldm::responder::oem_platform::Handler*
@@ -198,7 +198,7 @@
     uint16_t firmwareUpdateSensorId;
 
     /** @brief D-Bus property changed signal match for image activation */
-    std::unique_ptr<sdbusplus::bus::match::match> imageActivationMatch;
+    std::unique_ptr<sdbusplus::bus::match_t> imageActivationMatch;
 
     /* @brief Method to take action when the subscribed D-Bus property is
      *        changed
diff --git a/oem/ibm/libpldmresponder/oem_ibm_handler.cpp b/oem/ibm/libpldmresponder/oem_ibm_handler.cpp
index 1b803dd..0881869 100644
--- a/oem/ibm/libpldmresponder/oem_ibm_handler.cpp
+++ b/oem/ibm/libpldmresponder/oem_ibm_handler.cpp
@@ -439,11 +439,11 @@
     }
 
     using namespace sdbusplus::bus::match::rules;
-    chassisOffMatch = std::make_unique<sdbusplus::bus::match::match>(
+    chassisOffMatch = std::make_unique<sdbusplus::bus::match_t>(
         pldm::utils::DBusHandler::getBus(),
         propertiesChanged("/xyz/openbmc_project/state/chassis0",
                           "xyz.openbmc_project.State.Chassis"),
-        [this](sdbusplus::message::message& msg) {
+        [this](sdbusplus::message_t& msg) {
             DbusChangedProps props{};
             std::string intf;
             msg.read(intf, props);
diff --git a/oem/ibm/libpldmresponder/oem_ibm_handler.hpp b/oem/ibm/libpldmresponder/oem_ibm_handler.hpp
index ce69cf1..6c1983c 100644
--- a/oem/ibm/libpldmresponder/oem_ibm_handler.hpp
+++ b/oem/ibm/libpldmresponder/oem_ibm_handler.hpp
@@ -41,11 +41,11 @@
         setEventReceiverCnt = 0;
 
         using namespace sdbusplus::bus::match::rules;
-        hostOffMatch = std::make_unique<sdbusplus::bus::match::match>(
+        hostOffMatch = std::make_unique<sdbusplus::bus::match_t>(
             pldm::utils::DBusHandler::getBus(),
             propertiesChanged("/xyz/openbmc_project/state/host0",
                               "xyz.openbmc_project.State.Host"),
-            [this](sdbusplus::message::message& msg) {
+            [this](sdbusplus::message_t& msg) {
                 pldm::utils::DbusChangedProps props{};
                 std::string intf;
                 msg.read(intf, props);
@@ -208,13 +208,13 @@
 
   private:
     /** @brief D-Bus property changed signal match for CurrentPowerState*/
-    std::unique_ptr<sdbusplus::bus::match::match> chassisOffMatch;
+    std::unique_ptr<sdbusplus::bus::match_t> chassisOffMatch;
 
     /** @brief PLDM request handler */
     pldm::requester::Handler<pldm::requester::Request>* handler;
 
     /** @brief D-Bus property changed signal match */
-    std::unique_ptr<sdbusplus::bus::match::match> hostOffMatch;
+    std::unique_ptr<sdbusplus::bus::match_t> hostOffMatch;
 
     bool hostOff = true;
 
diff --git a/oem/ibm/libpldmresponder/platform_oem_ibm.cpp b/oem/ibm/libpldmresponder/platform_oem_ibm.cpp
index 73e6c85..7639e54 100644
--- a/oem/ibm/libpldmresponder/platform_oem_ibm.cpp
+++ b/oem/ibm/libpldmresponder/platform_oem_ibm.cpp
@@ -42,7 +42,7 @@
             return PLDM_SUCCESS;
         }
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         std::cerr << "Error in getting current host state, continue ... \n";
     }
diff --git a/oem/ibm/test/libpldmresponder_oem_platform_test.cpp b/oem/ibm/test/libpldmresponder_oem_platform_test.cpp
index e9d02aa..5ad4fe2 100644
--- a/oem/ibm/test/libpldmresponder_oem_platform_test.cpp
+++ b/oem/ibm/test/libpldmresponder_oem_platform_test.cpp
@@ -53,7 +53,7 @@
     uint16_t entityInstance_ = 0;
     uint8_t compSensorCnt_ = 1;
     uint16_t effecterId = 0xA;
-    sdbusplus::bus::bus bus(sdbusplus::bus::new_default());
+    sdbusplus::bus_t bus(sdbusplus::bus::new_default());
     Requester requester(bus, "/abc/def");
     auto event = sdeventplus::Event::get_default();
     std::vector<get_sensor_state_field> stateField;
@@ -186,7 +186,7 @@
 TEST(generateStateEffecterOEMPDR, testGoodRequest)
 {
     auto inPDRRepo = pldm_pdr_init();
-    sdbusplus::bus::bus bus(sdbusplus::bus::new_default());
+    sdbusplus::bus_t bus(sdbusplus::bus::new_default());
     Requester requester(bus, "/abc/def");
     auto mockDbusHandler = std::make_unique<MockdBusHandler>();
     auto event = sdeventplus::Event::get_default();
@@ -291,7 +291,7 @@
 TEST(generateStateSensorOEMPDR, testGoodRequest)
 {
     auto inPDRRepo = pldm_pdr_init();
-    sdbusplus::bus::bus bus(sdbusplus::bus::new_default());
+    sdbusplus::bus_t bus(sdbusplus::bus::new_default());
     Requester requester(bus, "/abc/def");
 
     auto mockDbusHandler = std::make_unique<MockdBusHandler>();
diff --git a/pldmd/dbus_impl_pdr.hpp b/pldmd/dbus_impl_pdr.hpp
index 2a4a889..822a3b2 100644
--- a/pldmd/dbus_impl_pdr.hpp
+++ b/pldmd/dbus_impl_pdr.hpp
@@ -15,7 +15,7 @@
 namespace dbus_api
 {
 
-using PdrIntf = sdbusplus::server::object::object<
+using PdrIntf = sdbusplus::server::object_t<
     sdbusplus::xyz::openbmc_project::PLDM::server::PDR>;
 
 /** @class Pdr
@@ -38,10 +38,8 @@
      *  @param[in] path - Path to attach at.
      *  @param[in] repo - pointer to BMC's primary PDR repo
      */
-    Pdr(sdbusplus::bus::bus& bus, const std::string& path,
-        const pldm_pdr* repo) :
-        PdrIntf(bus, path.c_str()),
-        pdrRepo(repo){};
+    Pdr(sdbusplus::bus_t& bus, const std::string& path, const pldm_pdr* repo) :
+        PdrIntf(bus, path.c_str()), pdrRepo(repo){};
 
     /** @brief Implementation for PdrIntf.FindStateEffecterPDR
      *  @param[in] tid - PLDM terminus ID.
diff --git a/pldmd/dbus_impl_requester.hpp b/pldmd/dbus_impl_requester.hpp
index e5c08af..a1dfcf5 100644
--- a/pldmd/dbus_impl_requester.hpp
+++ b/pldmd/dbus_impl_requester.hpp
@@ -13,7 +13,7 @@
 namespace dbus_api
 {
 
-using RequesterIntf = sdbusplus::server::object::object<
+using RequesterIntf = sdbusplus::server::object_t<
     sdbusplus::xyz::openbmc_project::PLDM::server::Requester>;
 
 /** @class Requester
@@ -35,7 +35,7 @@
      *  @param[in] bus - Bus to attach to.
      *  @param[in] path - Path to attach at.
      */
-    Requester(sdbusplus::bus::bus& bus, const std::string& path) :
+    Requester(sdbusplus::bus_t& bus, const std::string& path) :
         RequesterIntf(bus, path.c_str()){};
 
     /** @brief Implementation for RequesterIntf.GetInstanceId */
diff --git a/pldmd/pldmd.cpp b/pldmd/pldmd.cpp
index 8e39a1f..1e7cd15 100644
--- a/pldmd/pldmd.cpp
+++ b/pldmd/pldmd.cpp
@@ -205,8 +205,8 @@
     }
     auto event = Event::get_default();
     auto& bus = pldm::utils::DBusHandler::getBus();
-    sdbusplus::server::manager::manager objManager(
-        bus, "/xyz/openbmc_project/software");
+    sdbusplus::server::manager_t objManager(bus,
+                                            "/xyz/openbmc_project/software");
     dbus_api::Requester dbusImplReq(bus, "/xyz/openbmc_project/pldm");
 
     Invoker invoker{};
diff --git a/requester/mctp_endpoint_discovery.cpp b/requester/mctp_endpoint_discovery.cpp
index b95935f..d13c979 100644
--- a/requester/mctp_endpoint_discovery.cpp
+++ b/requester/mctp_endpoint_discovery.cpp
@@ -14,7 +14,7 @@
 namespace pldm
 {
 
-MctpDiscovery::MctpDiscovery(sdbusplus::bus::bus& bus,
+MctpDiscovery::MctpDiscovery(sdbusplus::bus_t& bus,
                              fw_update::Manager* fwManager) :
     bus(bus),
     fwManager(fwManager),
@@ -68,7 +68,7 @@
     }
 }
 
-void MctpDiscovery::dicoverEndpoints(sdbusplus::message::message& msg)
+void MctpDiscovery::dicoverEndpoints(sdbusplus::message_t& msg)
 {
     constexpr std::string_view mctpEndpointIntfName{
         "xyz.openbmc_project.MCTP.Endpoint"};
diff --git a/requester/mctp_endpoint_discovery.hpp b/requester/mctp_endpoint_discovery.hpp
index b09a2e9..8f7e7eb 100644
--- a/requester/mctp_endpoint_discovery.hpp
+++ b/requester/mctp_endpoint_discovery.hpp
@@ -23,19 +23,19 @@
      *  @param[in] bus - reference to systemd bus
      *  @param[in] fwManager - pointer to the firmware manager
      */
-    explicit MctpDiscovery(sdbusplus::bus::bus& bus,
+    explicit MctpDiscovery(sdbusplus::bus_t& bus,
                            fw_update::Manager* fwManager);
 
   private:
     /** @brief reference to the systemd bus */
-    sdbusplus::bus::bus& bus;
+    sdbusplus::bus_t& bus;
 
     fw_update::Manager* fwManager;
 
     /** @brief Used to watch for new MCTP endpoints */
     sdbusplus::bus::match_t mctpEndpointSignal;
 
-    void dicoverEndpoints(sdbusplus::message::message& msg);
+    void dicoverEndpoints(sdbusplus::message_t& msg);
 
     static constexpr uint8_t mctpTypePLDM = 1;
 
diff --git a/softoff/softoff.cpp b/softoff/softoff.cpp
index 8ef0729..1b6f16e 100644
--- a/softoff/softoff.cpp
+++ b/softoff/softoff.cpp
@@ -30,7 +30,7 @@
 constexpr pldm::pdr::TerminusID TID = 0; // TID will be implemented later.
 namespace sdbusRule = sdbusplus::bus::match::rules;
 
-SoftPowerOff::SoftPowerOff(sdbusplus::bus::bus& bus, sd_event* event) :
+SoftPowerOff::SoftPowerOff(sdbusplus::bus_t& bus, sd_event* event) :
     bus(bus), timer(event)
 {
     getHostState();
@@ -100,7 +100,7 @@
     return PLDM_SUCCESS;
 }
 
-void SoftPowerOff::hostSoftOffComplete(sdbusplus::message::message& msg)
+void SoftPowerOff::hostSoftOffComplete(sdbusplus::message_t& msg)
 {
     pldm::pdr::TerminusID msgTID;
     pldm::pdr::SensorID msgSensorID;
@@ -161,7 +161,7 @@
             VMMPdrExist = false;
         }
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         std::cerr << "PLDM soft off: Error get VMM PDR,ERROR=" << e.what()
                   << "\n";
@@ -205,7 +205,7 @@
             effecterID = sysFwPdr->effecter_id;
         }
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         std::cerr << "PLDM soft off: Error get system firmware PDR,ERROR="
                   << e.what() << "\n";
@@ -282,7 +282,7 @@
                 possibleStateSize + sizeof(setId) + sizeof(possibleStateSize);
         }
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         std::cerr << "PLDM soft off: Error get State Sensor PDR,ERROR="
                   << e.what() << "\n";
@@ -313,7 +313,7 @@
 
         ResponseMsg.read(instanceID);
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         std::cerr << "PLDM soft off: Error get instanceID,ERROR=" << e.what()
                   << "\n";
diff --git a/softoff/softoff.hpp b/softoff/softoff.hpp
index 302144c..e9a8f44 100644
--- a/softoff/softoff.hpp
+++ b/softoff/softoff.hpp
@@ -24,7 +24,7 @@
      *  @param[in] bus       - system D-Bus handler
      *  @param[in] event     - sd_event handler
      */
-    SoftPowerOff(sdbusplus::bus::bus& bus, sd_event* event);
+    SoftPowerOff(sdbusplus::bus_t& bus, sd_event* event);
 
     /** @brief Is the pldm-softpoweroff has error.
      * if hasError is true, that means the pldm-softpoweroff failed to
@@ -82,7 +82,7 @@
      *
      *  @param[in] msg - Data associated with subscribed signal
      */
-    void hostSoftOffComplete(sdbusplus::message::message& msg);
+    void hostSoftOffComplete(sdbusplus::message_t& msg);
 
     /** @brief Start the timer.
      *
@@ -133,7 +133,7 @@
     bool VMMPdrExist = true;
 
     /* @brief sdbusplus handle */
-    sdbusplus::bus::bus& bus;
+    sdbusplus::bus_t& bus;
 
     /** @brief Reference to Timer object */
     phosphor::Timer timer;
