diff --git a/controller.cpp b/controller.cpp
index 78fd316..a694b3d 100644
--- a/controller.cpp
+++ b/controller.cpp
@@ -135,7 +135,7 @@
     auto bus = sdbusplus::bus::new_default();
 
     // Add systemd object manager.
-    sdbusplus::server::manager::manager(bus, objPath.c_str());
+    sdbusplus::server::manager_t(bus, objPath.c_str());
 
     // Create the Physical LED objects for directing actions.
     // Need to save this else sdbusplus destructor will wipe this off.
diff --git a/physical.hpp b/physical.hpp
index 7a3c912..3592494 100644
--- a/physical.hpp
+++ b/physical.hpp
@@ -45,8 +45,8 @@
      * @param[in] ledPath   - sysfs path where this LED is exported
      * @param[in] color     - led color name
      */
-    Physical(sdbusplus::bus::bus& bus, const std::string& objPath,
-             SysfsLed& led, const std::string& color = "") :
+    Physical(sdbusplus::bus_t& bus, const std::string& objPath, SysfsLed& led,
+             const std::string& color = "") :
         PhysicalIfaces(bus, objPath.c_str(),
                        PhysicalIfaces::action::defer_emit),
         led(led)
diff --git a/test/physical.cpp b/test/physical.cpp
index ae831a3..000b321 100644
--- a/test/physical.cpp
+++ b/test/physical.cpp
@@ -72,7 +72,7 @@
 
 TEST(Physical, ctor_none_trigger)
 {
-    sdbusplus::bus::bus bus = sdbusplus::bus::new_default();
+    sdbusplus::bus_t bus = sdbusplus::bus::new_default();
     /* NiceMock ignores calls to methods with no expectations defined */
     NiceMock<MockLed> led;
     ON_CALL(led, getTrigger()).WillByDefault(Return("none"));
@@ -82,7 +82,7 @@
 
 TEST(Physical, ctor_maxbrightness_and_brightness_read_127)
 {
-    sdbusplus::bus::bus bus = sdbusplus::bus::new_default();
+    sdbusplus::bus_t bus = sdbusplus::bus::new_default();
     /* NiceMock ignores calls to methods with no expectations defined */
     NiceMock<MockLed> led;
     EXPECT_CALL(led, getTrigger()).WillRepeatedly(Return("none"));
@@ -94,7 +94,7 @@
 
 TEST(Physical, ctor_maxbrightness_and_brightness_read_0)
 {
-    sdbusplus::bus::bus bus = sdbusplus::bus::new_default();
+    sdbusplus::bus_t bus = sdbusplus::bus::new_default();
     /* NiceMock ignores calls to methods with no expectations defined */
     NiceMock<MockLed> led;
     EXPECT_CALL(led, getTrigger()).WillRepeatedly(Return("none"));
@@ -106,7 +106,7 @@
 
 TEST(Physical, ctor_only_maxbrightness_read_127)
 {
-    sdbusplus::bus::bus bus = sdbusplus::bus::new_default();
+    sdbusplus::bus_t bus = sdbusplus::bus::new_default();
     /* NiceMock ignores calls to methods with no expectations defined */
     NiceMock<MockLed> led;
     EXPECT_CALL(led, getTrigger()).WillRepeatedly(Return("none"));
@@ -118,7 +118,7 @@
 
 TEST(Physical, ctor_only_brightness_read_127)
 {
-    sdbusplus::bus::bus bus = sdbusplus::bus::new_default();
+    sdbusplus::bus_t bus = sdbusplus::bus::new_default();
     /* NiceMock ignores calls to methods with no expectations defined */
     NiceMock<MockLed> led;
     EXPECT_CALL(led, getTrigger()).WillRepeatedly(Return("none"));
@@ -130,7 +130,7 @@
 
 TEST(Physical, ctor_timer_trigger)
 {
-    sdbusplus::bus::bus bus = sdbusplus::bus::new_default();
+    sdbusplus::bus_t bus = sdbusplus::bus::new_default();
     NiceMock<MockLed> led;
     EXPECT_CALL(led, getTrigger()).WillOnce(Return("timer"));
     EXPECT_CALL(led, getDelayOn()).WillOnce(Return(500));
@@ -141,7 +141,7 @@
 
 TEST(Physical, off)
 {
-    sdbusplus::bus::bus bus = sdbusplus::bus::new_default();
+    sdbusplus::bus_t bus = sdbusplus::bus::new_default();
     NiceMock<MockLed> led;
     ON_CALL(led, getMaxBrightness()).WillByDefault(Return(127));
     EXPECT_CALL(led, getTrigger()).WillOnce(Return("none"));
@@ -156,7 +156,7 @@
 {
     constexpr unsigned long asserted = 127;
 
-    sdbusplus::bus::bus bus = sdbusplus::bus::new_default();
+    sdbusplus::bus_t bus = sdbusplus::bus::new_default();
     NiceMock<MockLed> led;
     ON_CALL(led, getMaxBrightness()).WillByDefault(Return(asserted));
     EXPECT_CALL(led, getTrigger()).WillOnce(Return("none"));
@@ -169,7 +169,7 @@
 
 TEST(Physical, blink)
 {
-    sdbusplus::bus::bus bus = sdbusplus::bus::new_default();
+    sdbusplus::bus_t bus = sdbusplus::bus::new_default();
     NiceMock<MockLed> led;
     EXPECT_CALL(led, getTrigger()).WillOnce(Return("none"));
     EXPECT_CALL(led, setTrigger("timer"));
@@ -182,7 +182,7 @@
 
 TEST(Physical, ctor_none_trigger_asserted_brightness)
 {
-    sdbusplus::bus::bus bus = sdbusplus::bus::new_default();
+    sdbusplus::bus_t bus = sdbusplus::bus::new_default();
     NiceMock<MockLed> led;
     EXPECT_CALL(led, getTrigger()).WillRepeatedly(Return("none"));
     EXPECT_CALL(led, getBrightness()).WillRepeatedly(Return(127));
