diff --git a/dbus/dbusactiveread.hpp b/dbus/dbusactiveread.hpp
index 8f92cb4..46532a6 100644
--- a/dbus/dbusactiveread.hpp
+++ b/dbus/dbusactiveread.hpp
@@ -19,7 +19,7 @@
 class DbusActiveRead : public ReadInterface
 {
   public:
-    DbusActiveRead(sdbusplus::bus::bus& bus, const std::string& path,
+    DbusActiveRead(sdbusplus::bus_t& bus, const std::string& path,
                    const std::string& service,
                    std::unique_ptr<DbusHelperInterface> helper) :
         ReadInterface(),
@@ -29,7 +29,7 @@
     ReadReturn read(void) override;
 
   private:
-    sdbusplus::bus::bus& _bus;
+    sdbusplus::bus_t& _bus;
     const std::string _path;
     const std::string _service; // the sensor service.
     std::unique_ptr<DbusHelperInterface> _helper;
diff --git a/dbus/dbusconfiguration.cpp b/dbus/dbusconfiguration.cpp
index 1af938a..990dd53 100644
--- a/dbus/dbusconfiguration.cpp
+++ b/dbus/dbusconfiguration.cpp
@@ -81,7 +81,7 @@
     return retString;
 }
 
-std::vector<std::string> getSelectedProfiles(sdbusplus::bus::bus& bus)
+std::vector<std::string> getSelectedProfiles(sdbusplus::bus_t& bus)
 {
     std::vector<std::string> ret;
     auto mapper =
@@ -161,7 +161,7 @@
     const std::array<const char*, 1> skipList = {
         "xyz.openbmc_project.Association"};
 
-    sdbusplus::message::message message(m);
+    sdbusplus::message_t message(m);
     if (std::string(message.get_member()) == "InterfacesAdded")
     {
         sdbusplus::message::object_path path;
@@ -206,10 +206,10 @@
     return 1;
 }
 
-void createMatches(sdbusplus::bus::bus& bus, boost::asio::steady_timer& timer)
+void createMatches(sdbusplus::bus_t& bus, boost::asio::steady_timer& timer)
 {
     // this is a list because the matches can't be moved
-    static std::list<sdbusplus::bus::match::match> matches;
+    static std::list<sdbusplus::bus::match_t> matches;
 
     const std::array<std::string, 4> interfaces = {
         thermalControlIface, pidConfigurationInterface,
@@ -258,7 +258,7 @@
 }
 
 void populatePidInfo(
-    sdbusplus::bus::bus& bus,
+    sdbusplus::bus_t& bus,
     const std::unordered_map<std::string, DbusVariantType>& base,
     conf::ControllerInfo& info, const std::string* thresholdProperty,
     const std::map<std::string, conf::SensorConfig>& sensorConfig)
@@ -296,7 +296,7 @@
             helper.getProperty(service, path, interface, *thresholdProperty,
                                reading);
         }
-        catch (const sdbusplus::exception::exception& ex)
+        catch (const sdbusplus::exception_t& ex)
         {
             // unsupported threshold, leaving reading at 0
         }
@@ -346,7 +346,7 @@
     info.pidInfo.positiveHysteresis = positiveHysteresis;
 }
 
-bool init(sdbusplus::bus::bus& bus, boost::asio::steady_timer& timer,
+bool init(sdbusplus::bus_t& bus, boost::asio::steady_timer& timer,
           std::map<std::string, conf::SensorConfig>& sensorConfig,
           std::map<int64_t, conf::PIDConf>& zoneConfig,
           std::map<int64_t, conf::ZoneConfig>& zoneDetailsConfig)
diff --git a/dbus/dbusconfiguration.hpp b/dbus/dbusconfiguration.hpp
index 318da68..a880a0c 100644
--- a/dbus/dbusconfiguration.hpp
+++ b/dbus/dbusconfiguration.hpp
@@ -50,7 +50,7 @@
  * @param zoneConfig - The configuration converted PID list.
  * @param zoneDetailsConfig - The configuration converted Zone configuration.
  */
-bool init(sdbusplus::bus::bus& bus, boost::asio::steady_timer& timer,
+bool init(sdbusplus::bus_t& bus, boost::asio::steady_timer& timer,
           std::map<std::string, conf::SensorConfig>& sensorConfig,
           std::map<int64_t, conf::PIDConf>& zoneConfig,
           std::map<int64_t, conf::ZoneConfig>& zoneDetailsConfig);
diff --git a/dbus/dbushelper.cpp b/dbus/dbushelper.cpp
index d08f537..01383cb 100644
--- a/dbus/dbushelper.cpp
+++ b/dbus/dbushelper.cpp
@@ -58,7 +58,7 @@
 
         responseMsg.read(response);
     }
-    catch (const sdbusplus::exception::exception& ex)
+    catch (const sdbusplus::exception_t& ex)
     {
         log<level::ERR>("ObjectMapper call failure",
                         entry("WHAT=%s", ex.what()));
@@ -88,7 +88,7 @@
         auto valueResponseMsg = _bus.call(pimMsg);
         valueResponseMsg.read(propMap);
     }
-    catch (const sdbusplus::exception::exception& ex)
+    catch (const sdbusplus::exception_t& ex)
     {
         log<level::ERR>("GetAll Properties Failed",
                         entry("WHAT=%s", ex.what()));
@@ -135,7 +135,7 @@
     {
         getProperty(service, path, availabilityIntf, "Available", available);
     }
-    catch (const sdbusplus::exception::exception& ex)
+    catch (const sdbusplus::exception_t& ex)
     {
         // unsupported Available property, leaving reading at 'True'
     }
diff --git a/dbus/dbushelper.hpp b/dbus/dbushelper.hpp
index 3f3e688..f65784c 100644
--- a/dbus/dbushelper.hpp
+++ b/dbus/dbushelper.hpp
@@ -21,7 +21,7 @@
     static constexpr char availabilityIntf[] =
         "xyz.openbmc_project.State.Decorator.Availability";
 
-    explicit DbusHelper(sdbusplus::bus::bus bus) : _bus(std::move(bus))
+    explicit DbusHelper(sdbusplus::bus_t bus) : _bus(std::move(bus))
     {}
     ~DbusHelper() = default;
 
@@ -58,7 +58,7 @@
             auto valueResponseMsg = _bus.call(msg);
             valueResponseMsg.read(result);
         }
-        catch (const sdbusplus::exception::exception& ex)
+        catch (const sdbusplus::exception_t& ex)
         {
             log::log<log::level::ERR>("Get Property Failed",
                                       log::entry("WHAT=%s", ex.what()));
@@ -69,7 +69,7 @@
     }
 
   private:
-    sdbusplus::bus::bus _bus;
+    sdbusplus::bus_t _bus;
 };
 
 } // namespace pid_control
diff --git a/dbus/dbuspassive.cpp b/dbus/dbuspassive.cpp
index a5da100..038b1d7 100644
--- a/dbus/dbuspassive.cpp
+++ b/dbus/dbuspassive.cpp
@@ -33,7 +33,7 @@
 {
 
 std::unique_ptr<ReadInterface> DbusPassive::createDbusPassive(
-    sdbusplus::bus::bus& bus, const std::string& type, const std::string& id,
+    sdbusplus::bus_t& bus, const std::string& type, const std::string& id,
     std::unique_ptr<DbusHelperInterface> helper, const conf::SensorConfig* info,
     const std::shared_ptr<DbusPassiveRedundancy>& redundancy)
 {
@@ -79,7 +79,7 @@
 }
 
 DbusPassive::DbusPassive(
-    sdbusplus::bus::bus& bus, const std::string& type, const std::string& id,
+    sdbusplus::bus_t& bus, const std::string& type, const std::string& id,
     std::unique_ptr<DbusHelperInterface> helper,
     const SensorProperties& settings, bool failed, const std::string& path,
     const std::shared_ptr<DbusPassiveRedundancy>& redundancy) :
@@ -248,7 +248,7 @@
     setValue(value);
 }
 
-int handleSensorValue(sdbusplus::message::message& msg, DbusPassive* owner)
+int handleSensorValue(sdbusplus::message_t& msg, DbusPassive* owner)
 {
     std::string msgSensor;
     std::map<std::string, std::variant<int64_t, double, bool>> msgData;
@@ -325,7 +325,7 @@
 
 int dbusHandleSignal(sd_bus_message* msg, void* usrData, sd_bus_error* err)
 {
-    auto sdbpMsg = sdbusplus::message::message(msg);
+    auto sdbpMsg = sdbusplus::message_t(msg);
     DbusPassive* obj = static_cast<DbusPassive*>(usrData);
 
     return handleSensorValue(sdbpMsg, obj);
diff --git a/dbus/dbuspassive.hpp b/dbus/dbuspassive.hpp
index bc16719..72ad9a5 100644
--- a/dbus/dbuspassive.hpp
+++ b/dbus/dbuspassive.hpp
@@ -41,12 +41,12 @@
 {
   public:
     static std::unique_ptr<ReadInterface> createDbusPassive(
-        sdbusplus::bus::bus& bus, const std::string& type,
-        const std::string& id, std::unique_ptr<DbusHelperInterface> helper,
+        sdbusplus::bus_t& bus, const std::string& type, const std::string& id,
+        std::unique_ptr<DbusHelperInterface> helper,
         const conf::SensorConfig* info,
         const std::shared_ptr<DbusPassiveRedundancy>& redundancy);
 
-    DbusPassive(sdbusplus::bus::bus& bus, const std::string& type,
+    DbusPassive(sdbusplus::bus_t& bus, const std::string& type,
                 const std::string& id,
                 std::unique_ptr<DbusHelperInterface> helper,
                 const SensorProperties& settings, bool failed,
@@ -94,6 +94,6 @@
     std::chrono::high_resolution_clock::time_point _updated;
 };
 
-int handleSensorValue(sdbusplus::message::message& msg, DbusPassive* owner);
+int handleSensorValue(sdbusplus::message_t& msg, DbusPassive* owner);
 
 } // namespace pid_control
diff --git a/dbus/dbuspassiveredundancy.cpp b/dbus/dbuspassiveredundancy.cpp
index 57c3c50..f7f82dd 100644
--- a/dbus/dbuspassiveredundancy.cpp
+++ b/dbus/dbuspassiveredundancy.cpp
@@ -45,11 +45,11 @@
 
 } // namespace redundancy
 
-DbusPassiveRedundancy::DbusPassiveRedundancy(sdbusplus::bus::bus& bus) :
+DbusPassiveRedundancy::DbusPassiveRedundancy(sdbusplus::bus_t& bus) :
     match(bus,
           "type='signal',member='PropertiesChanged',arg0namespace='" +
               std::string(redundancy::interface) + "'",
-          std::move([this](sdbusplus::message::message& message) {
+          std::move([this](sdbusplus::message_t& message) {
               std::string objectName;
               std::unordered_map<
                   std::string,
diff --git a/dbus/dbuspassiveredundancy.hpp b/dbus/dbuspassiveredundancy.hpp
index 790c758..1fd2aed 100644
--- a/dbus/dbuspassiveredundancy.hpp
+++ b/dbus/dbuspassiveredundancy.hpp
@@ -34,15 +34,15 @@
 class DbusPassiveRedundancy
 {
   public:
-    explicit DbusPassiveRedundancy(sdbusplus::bus::bus& bus);
+    explicit DbusPassiveRedundancy(sdbusplus::bus_t& bus);
     const std::set<std::string>& getFailed(void);
 
   private:
     void populateFailures(void);
 
-    sdbusplus::bus::match::match match;
+    sdbusplus::bus::match_t match;
     std::set<std::string> failed;
-    sdbusplus::bus::bus& passiveBus;
+    sdbusplus::bus_t& passiveBus;
 };
 
 } // namespace pid_control
diff --git a/dbus/dbuswrite.cpp b/dbus/dbuswrite.cpp
index 880dea9..33ba730 100644
--- a/dbus/dbuswrite.cpp
+++ b/dbus/dbuswrite.cpp
@@ -89,7 +89,7 @@
         // TODO: if we don't use the reply, call_noreply()
         auto resp = writeBus.call(mesg);
     }
-    catch (const sdbusplus::exception::exception& ex)
+    catch (const sdbusplus::exception_t& ex)
     {
         log<level::ERR>("Dbus Call Failure", entry("PATH=%s", path.c_str()),
                         entry("WHAT=%s", ex.what()));
@@ -152,7 +152,7 @@
         // TODO: consider call_noreplly
         auto resp = writeBus.call(mesg);
     }
-    catch (const sdbusplus::exception::exception& ex)
+    catch (const sdbusplus::exception_t& ex)
     {
         log<level::ERR>("Dbus Call Failure", entry("PATH=%s", path.c_str()),
                         entry("WHAT=%s", ex.what()));
diff --git a/ipmi/dbus_mode.cpp b/ipmi/dbus_mode.cpp
index b9cdb67..d109ae1 100644
--- a/ipmi/dbus_mode.cpp
+++ b/ipmi/dbus_mode.cpp
@@ -68,7 +68,7 @@
 
         *value = std::get<bool>(propMap[property]);
     }
-    catch (const sdbusplus::exception::exception& ex)
+    catch (const sdbusplus::exception_t& ex)
     {
         return IPMI_CC_INVALID;
     }
@@ -95,7 +95,7 @@
     {
         PropertyWriteBus.call_noreply(pimMsg);
     }
-    catch (const sdbusplus::exception::exception& ex)
+    catch (const sdbusplus::exception_t& ex)
     {
         return IPMI_CC_INVALID;
     }
diff --git a/main.cpp b/main.cpp
index db15b8d..3ae9374 100644
--- a/main.cpp
+++ b/main.cpp
@@ -280,11 +280,11 @@
 
     static constexpr auto modeRoot = "/xyz/openbmc_project/settings/fanctrl";
     // Create a manager for the ModeBus because we own it.
-    sdbusplus::server::manager::manager(
-        static_cast<sdbusplus::bus::bus&>(modeControlBus), modeRoot);
+    sdbusplus::server::manager_t(static_cast<sdbusplus::bus_t&>(modeControlBus),
+                                 modeRoot);
     hostBus.request_name("xyz.openbmc_project.Hwmon.external");
     modeControlBus.request_name("xyz.openbmc_project.State.FanCtrl");
-    sdbusplus::server::manager::manager objManager(modeControlBus, modeRoot);
+    sdbusplus::server::manager_t objManager(modeControlBus, modeRoot);
 
     /*
      * All sensors are managed by one manager, but each zone has a pointer to
diff --git a/pid/builder.cpp b/pid/builder.cpp
index 505ca98..7be7897 100644
--- a/pid/builder.cpp
+++ b/pid/builder.cpp
@@ -47,7 +47,7 @@
 std::unordered_map<int64_t, std::shared_ptr<ZoneInterface>>
     buildZones(const std::map<int64_t, conf::PIDConf>& zonePids,
                std::map<int64_t, conf::ZoneConfig>& zoneConfigs,
-               SensorManager& mgr, sdbusplus::bus::bus& modeControlBus)
+               SensorManager& mgr, sdbusplus::bus_t& modeControlBus)
 {
     std::unordered_map<int64_t, std::shared_ptr<ZoneInterface>> zones;
 
diff --git a/pid/builder.hpp b/pid/builder.hpp
index 5f03400..dbfc229 100644
--- a/pid/builder.hpp
+++ b/pid/builder.hpp
@@ -15,6 +15,6 @@
 std::unordered_map<int64_t, std::shared_ptr<ZoneInterface>>
     buildZones(const std::map<int64_t, conf::PIDConf>& zonePids,
                std::map<int64_t, conf::ZoneConfig>& zoneConfigs,
-               SensorManager& mgr, sdbusplus::bus::bus& modeControlBus);
+               SensorManager& mgr, sdbusplus::bus_t& modeControlBus);
 
 }
diff --git a/pid/zone.hpp b/pid/zone.hpp
index c73ad39..12e47a6 100644
--- a/pid/zone.hpp
+++ b/pid/zone.hpp
@@ -20,7 +20,7 @@
 #include <vector>
 
 template <typename... T>
-using ServerObject = typename sdbusplus::server::object::object<T...>;
+using ServerObject = typename sdbusplus::server::object_t<T...>;
 using ModeInterface = sdbusplus::xyz::openbmc_project::Control::server::Mode;
 using ModeObject = ServerObject<ModeInterface>;
 
@@ -36,7 +36,7 @@
 {
   public:
     DbusPidZone(int64_t zone, double minThermalOutput, double failSafePercent,
-                const SensorManager& mgr, sdbusplus::bus::bus& bus,
+                const SensorManager& mgr, sdbusplus::bus_t& bus,
                 const char* objPath, bool defer) :
         ModeObject(bus, objPath,
                    defer ? ModeObject::action::defer_emit
diff --git a/sensors/builder.cpp b/sensors/builder.cpp
index f4257ad..82f54a1 100644
--- a/sensors/builder.cpp
+++ b/sensors/builder.cpp
@@ -44,7 +44,7 @@
 
 SensorManager
     buildSensors(const std::map<std::string, conf::SensorConfig>& config,
-                 sdbusplus::bus::bus& passive, sdbusplus::bus::bus& host)
+                 sdbusplus::bus_t& passive, sdbusplus::bus_t& host)
 {
     SensorManager mgmr(passive, host);
     auto& hostSensorBus = mgmr.getHostBus();
diff --git a/sensors/builder.hpp b/sensors/builder.hpp
index 955307a..14eabad 100644
--- a/sensors/builder.hpp
+++ b/sensors/builder.hpp
@@ -17,6 +17,6 @@
  */
 SensorManager
     buildSensors(const std::map<std::string, conf::SensorConfig>& config,
-                 sdbusplus::bus::bus& passive, sdbusplus::bus::bus& host);
+                 sdbusplus::bus_t& passive, sdbusplus::bus_t& host);
 
 } // namespace pid_control
diff --git a/sensors/host.cpp b/sensors/host.cpp
index 85a37dc..9cc1eee 100644
--- a/sensors/host.cpp
+++ b/sensors/host.cpp
@@ -35,7 +35,7 @@
 
 std::unique_ptr<Sensor> HostSensor::createTemp(const std::string& name,
                                                int64_t timeout,
-                                               sdbusplus::bus::bus& bus,
+                                               sdbusplus::bus_t& bus,
                                                const char* objPath, bool defer)
 {
     auto sensor =
diff --git a/sensors/host.hpp b/sensors/host.hpp
index bf935b7..efbc17d 100644
--- a/sensors/host.hpp
+++ b/sensors/host.hpp
@@ -11,7 +11,7 @@
 #include <type_traits>
 
 template <typename... T>
-using ServerObject = typename sdbusplus::server::object::object<T...>;
+using ServerObject = typename sdbusplus::server::object_t<T...>;
 
 using ValueInterface = sdbusplus::xyz::openbmc_project::Sensor::server::Value;
 using ValueObject = ServerObject<ValueInterface>;
@@ -42,11 +42,11 @@
   public:
     static std::unique_ptr<Sensor> createTemp(const std::string& name,
                                               int64_t timeout,
-                                              sdbusplus::bus::bus& bus,
+                                              sdbusplus::bus_t& bus,
                                               const char* objPath, bool defer);
 
-    HostSensor(const std::string& name, int64_t timeout,
-               sdbusplus::bus::bus& bus, const char* objPath, bool defer) :
+    HostSensor(const std::string& name, int64_t timeout, sdbusplus::bus_t& bus,
+               const char* objPath, bool defer) :
         Sensor(name, timeout),
         ValueObject(bus, objPath,
                     defer ? ValueObject::action::defer_emit
diff --git a/sensors/manager.hpp b/sensors/manager.hpp
index 6fcd275..e02e1c9 100644
--- a/sensors/manager.hpp
+++ b/sensors/manager.hpp
@@ -19,11 +19,11 @@
 class SensorManager
 {
   public:
-    SensorManager(sdbusplus::bus::bus& pass, sdbusplus::bus::bus& host) :
+    SensorManager(sdbusplus::bus_t& pass, sdbusplus::bus_t& host) :
         _passiveListeningBus(&pass), _hostSensorBus(&host)
     {
         // manager gets its interface from the bus. :D
-        sdbusplus::server::manager::manager(*_hostSensorBus, SensorRoot);
+        sdbusplus::server::manager_t(*_hostSensorBus, SensorRoot);
     }
 
     SensorManager() = default;
@@ -45,12 +45,12 @@
         return _sensorMap.at(name).get();
     }
 
-    sdbusplus::bus::bus& getPassiveBus(void)
+    sdbusplus::bus_t& getPassiveBus(void)
     {
         return *_passiveListeningBus;
     }
 
-    sdbusplus::bus::bus& getHostBus(void)
+    sdbusplus::bus_t& getHostBus(void)
     {
         return *_hostSensorBus;
     }
@@ -59,8 +59,8 @@
     std::map<std::string, std::unique_ptr<Sensor>> _sensorMap;
     std::map<std::string, std::vector<std::string>> _sensorTypeList;
 
-    sdbusplus::bus::bus* _passiveListeningBus;
-    sdbusplus::bus::bus* _hostSensorBus;
+    sdbusplus::bus_t* _passiveListeningBus;
+    sdbusplus::bus_t* _hostSensorBus;
 
     static constexpr auto SensorRoot = "/xyz/openbmc_project/extsensors";
 };
diff --git a/setsensor.cpp b/setsensor.cpp
index c7de0ec..53559f2 100644
--- a/setsensor.cpp
+++ b/setsensor.cpp
@@ -43,7 +43,7 @@
         auto responseMsg = PropertyWriteBus.call(pimMsg);
         fprintf(stderr, "call to Set the host sensor value succeeded.\n");
     }
-    catch (const sdbusplus::exception::exception& ex)
+    catch (const sdbusplus::exception_t& ex)
     {
         fprintf(stderr, "call to Set the host sensor value failed.\n");
     }
@@ -76,7 +76,7 @@
         auto responseMsg = PropertyWriteBus.call(pimMsg);
         fprintf(stderr, "call to Set the manual mode succeeded.\n");
     }
-    catch (const sdbusplus::exception::exception& ex)
+    catch (const sdbusplus::exception_t& ex)
     {
         fprintf(stderr, "call to Set the manual mode failed.\n");
     }
diff --git a/test/dbus_passive_unittest.cpp b/test/dbus_passive_unittest.cpp
index ce1f017..0f689e1 100644
--- a/test/dbus_passive_unittest.cpp
+++ b/test/dbus_passive_unittest.cpp
@@ -98,7 +98,7 @@
     }
 
     sdbusplus::SdBusMock sdbus_mock;
-    sdbusplus::bus::bus bus_mock;
+    sdbusplus::bus_t bus_mock;
     std::unique_ptr<DbusHelperMock> helper;
     std::string type = "temp";
     std::string id = "id";
@@ -157,7 +157,7 @@
 
     EXPECT_CALL(sdbus_mock, sd_bus_message_ref(IsNull()))
         .WillOnce(Return(nullptr));
-    sdbusplus::message::message msg(nullptr, &sdbus_mock);
+    sdbusplus::message_t msg(nullptr, &sdbus_mock);
 
     const char* Value = "Value";
     int64_t xValue = 10000;
@@ -227,7 +227,7 @@
 
     EXPECT_CALL(sdbus_mock, sd_bus_message_ref(IsNull()))
         .WillOnce(Return(nullptr));
-    sdbusplus::message::message msg(nullptr, &sdbus_mock);
+    sdbusplus::message_t msg(nullptr, &sdbus_mock);
 
     const char* Scale = "Scale";
     int64_t xScale = -6;
@@ -296,7 +296,7 @@
     // Verifies when a threshold is crossed the sensor goes into error state
     EXPECT_CALL(sdbus_mock, sd_bus_message_ref(IsNull()))
         .WillOnce(Return(nullptr));
-    sdbusplus::message::message msg(nullptr, &sdbus_mock);
+    sdbusplus::message_t msg(nullptr, &sdbus_mock);
 
     const char* criticalAlarm = "CriticalAlarmHigh";
     bool alarm = true;
@@ -371,7 +371,7 @@
     // the normal state
     EXPECT_CALL(sdbus_mock, sd_bus_message_ref(IsNull()))
         .WillOnce(Return(nullptr));
-    sdbusplus::message::message msg(nullptr, &sdbus_mock);
+    sdbusplus::message_t msg(nullptr, &sdbus_mock);
 
     const char* criticalAlarm = "CriticalAlarmHigh";
     bool alarm = false;
@@ -446,7 +446,7 @@
     // the sensor goes into error state
     EXPECT_CALL(sdbus_mock, sd_bus_message_ref(IsNull()))
         .WillOnce(Return(nullptr));
-    sdbusplus::message::message msg(nullptr, &sdbus_mock);
+    sdbusplus::message_t msg(nullptr, &sdbus_mock);
 
     const char* property = "Available";
     bool asserted = false;
@@ -521,7 +521,7 @@
     // an error sensor goes back to normal state
     EXPECT_CALL(sdbus_mock, sd_bus_message_ref(IsNull()))
         .WillOnce(Return(nullptr));
-    sdbusplus::message::message msg(nullptr, &sdbus_mock);
+    sdbusplus::message_t msg(nullptr, &sdbus_mock);
 
     const char* property = "Available";
     bool asserted = true;
@@ -626,7 +626,7 @@
     }
 
     sdbusplus::SdBusMock sdbus_mock;
-    sdbusplus::bus::bus bus_mock;
+    sdbusplus::bus_t bus_mock;
     std::unique_ptr<DbusHelperMock> helper;
     std::string type = "temp";
     std::string id = "id";
@@ -645,7 +645,7 @@
     // the sensor remains at OK state but reading goes to NaN.
     EXPECT_CALL(sdbus_mock, sd_bus_message_ref(IsNull()))
         .WillOnce(Return(nullptr));
-    sdbusplus::message::message msg(nullptr, &sdbus_mock);
+    sdbusplus::message_t msg(nullptr, &sdbus_mock);
 
     const char* property = "Available";
     bool asserted = false;
@@ -722,7 +722,7 @@
     // && unavailableAsFailed == false, this sensor remains at OK state.
     EXPECT_CALL(sdbus_mock, sd_bus_message_ref(IsNull()))
         .WillOnce(Return(nullptr));
-    sdbusplus::message::message msg(nullptr, &sdbus_mock);
+    sdbusplus::message_t msg(nullptr, &sdbus_mock);
 
     const char* property = "Available";
     bool asserted = true;
@@ -831,7 +831,7 @@
     }
 
     sdbusplus::SdBusMock sdbus_mock;
-    sdbusplus::bus::bus bus_mock;
+    sdbusplus::bus_t bus_mock;
     std::unique_ptr<DbusHelperMock> helper;
     std::string type = "temp";
     std::string id = "id";
@@ -876,7 +876,7 @@
     }
 
     sdbusplus::SdBusMock sdbus_mock;
-    sdbusplus::bus::bus bus_mock;
+    sdbusplus::bus_t bus_mock;
     std::unique_ptr<DbusHelperMock> helper;
     std::string type = "temp";
     std::string id = "id";
diff --git a/test/helpers.hpp b/test/helpers.hpp
index 1b5486e..1f41523 100644
--- a/test/helpers.hpp
+++ b/test/helpers.hpp
@@ -31,7 +31,7 @@
  * TODO: Make it support more cases, as I'm sure there are more.
  *
  * @param[in] sdbus_mock - Pointer to your sdbus mock interface used with
- *     the sdbusplus::bus::bus you created.
+ *     the sdbusplus::bus_t you created.
  * @param[in] defer - Whether object announcement is deferred.
  * @param[in] path - the dbus path passed to the object
  * @param[in] intf - the dbus interface
