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";
 };
