diff --git a/fault-monitor/fru-fault-monitor.cpp b/fault-monitor/fru-fault-monitor.cpp
index e1941cf..d0f5d00 100644
--- a/fault-monitor/fru-fault-monitor.cpp
+++ b/fault-monitor/fru-fault-monitor.cpp
@@ -47,7 +47,7 @@
 using InvalidArgumentErr =
     sdbusplus::xyz::openbmc_project::Common::Error::InvalidArgument;
 
-std::string getService(sdbusplus::bus::bus& bus, const std::string& path)
+std::string getService(sdbusplus::bus_t& bus, const std::string& path)
 {
     auto mapper = bus.new_method_call(MAPPER_BUSNAME, MAPPER_OBJ_PATH,
                                       MAPPER_IFACE, "GetObject");
@@ -59,7 +59,7 @@
         auto mapperResponseMsg = bus.call(mapper);
         mapperResponseMsg.read(mapperResponse);
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         lg2::error(
             "Failed to parse getService mapper response, ERROR = {ERROR}",
@@ -77,7 +77,7 @@
     return mapperResponse.cbegin()->first;
 }
 
-void action(sdbusplus::bus::bus& bus, const std::string& path, bool assert)
+void action(sdbusplus::bus_t& bus, const std::string& path, bool assert)
 {
     std::string service;
     try
@@ -116,7 +116,7 @@
     {
         bus.call_noreply(method);
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         // Log an info message, system may not have all the LED Groups defined
         lg2::info("Failed to Assert LED Group, ERROR = {ERROR}", "ERROR", e);
@@ -125,7 +125,7 @@
     return;
 }
 
-void Add::created(sdbusplus::message::message& msg)
+void Add::created(sdbusplus::message_t& msg)
 {
     auto bus = msg.get_bus();
 
@@ -135,7 +135,7 @@
     {
         msg.read(objectPath, interfaces);
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         lg2::error("Failed to parse created message, ERROR = {ERROR}", "ERROR",
                    e);
@@ -186,7 +186,7 @@
     return;
 }
 
-void getLoggingSubTree(sdbusplus::bus::bus& bus, MapperResponseType& subtree)
+void getLoggingSubTree(sdbusplus::bus_t& bus, MapperResponseType& subtree)
 {
     auto depth = 0;
     auto mapperCall = bus.new_method_call(MAPPER_BUSNAME, MAPPER_OBJ_PATH,
@@ -200,7 +200,7 @@
         auto mapperResponseMsg = bus.call(mapperCall);
         mapperResponseMsg.read(subtree);
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         lg2::error(
             "Failed to parse existing callouts subtree message, ERROR = {ERROR}",
@@ -208,7 +208,7 @@
     }
 }
 
-void Add::processExistingCallouts(sdbusplus::bus::bus& bus)
+void Add::processExistingCallouts(sdbusplus::bus_t& bus)
 {
     MapperResponseType mapperResponse;
 
@@ -239,7 +239,7 @@
         {
             reply.read(assoc);
         }
-        catch (const sdbusplus::exception::exception& e)
+        catch (const sdbusplus::exception_t& e)
         {
             lg2::error(
                 "Failed to parse existing callouts associations message, ERROR = {ERROR}",
@@ -265,7 +265,7 @@
     }
 }
 
-void Remove::removed(sdbusplus::message::message& msg)
+void Remove::removed(sdbusplus::message_t& msg)
 {
     auto bus = msg.get_bus();
 
diff --git a/fault-monitor/fru-fault-monitor.hpp b/fault-monitor/fru-fault-monitor.hpp
index 923a0f9..028e873 100644
--- a/fault-monitor/fru-fault-monitor.hpp
+++ b/fault-monitor/fru-fault-monitor.hpp
@@ -23,7 +23,7 @@
  *  @param[in] path      -  Inventory path of the FRU
  *  @param[in] assert    -  Assert if true deassert if false
  */
-void action(sdbusplus::bus::bus& bus, const std::string& path, bool assert);
+void action(sdbusplus::bus_t& bus, const std::string& path, bool assert);
 
 class Remove;
 
@@ -45,7 +45,7 @@
     /** @brief constructs Add a watch for FRU faults.
      *  @param[in] bus -  The Dbus bus object
      */
-    explicit Add(sdbusplus::bus::bus& bus) :
+    explicit Add(sdbusplus::bus_t& bus) :
         matchCreated(
             bus,
             sdbusplus::bus::match::rules::interfacesAdded() +
@@ -65,12 +65,12 @@
     /** @brief Callback function for fru fault created
      *  @param[in] msg       - Data associated with subscribed signal
      */
-    void created(sdbusplus::message::message& msg);
+    void created(sdbusplus::message_t& msg);
 
     /** @brief This function process all callouts at application start
      *  @param[in] bus - The Dbus bus object
      */
-    void processExistingCallouts(sdbusplus::bus::bus& bus);
+    void processExistingCallouts(sdbusplus::bus_t& bus);
 };
 
 /** @class Remove
@@ -92,7 +92,7 @@
      *  @param[in] bus  -  The Dbus bus object
      *  @param[in] path -  Inventory path to fru
      */
-    Remove(sdbusplus::bus::bus& bus, const std::string& path) :
+    Remove(sdbusplus::bus_t& bus, const std::string& path) :
         inventoryPath(path),
         matchRemoved(bus, match(path),
                      std::bind(std::mem_fn(&Remove::removed), this,
@@ -111,7 +111,7 @@
     /** @brief Callback function for fru fault created
      *  @param[in] msg       - Data associated with subscribed signal
      */
-    void removed(sdbusplus::message::message& msg);
+    void removed(sdbusplus::message_t& msg);
 
     /** @brief function to create fault remove match for a fru
      *  @param[in] path  - Inventory path of the faulty unit.
diff --git a/fault-monitor/monitor-main.cpp b/fault-monitor/monitor-main.cpp
index f4e2182..92b332d 100644
--- a/fault-monitor/monitor-main.cpp
+++ b/fault-monitor/monitor-main.cpp
@@ -9,7 +9,7 @@
 int main(void)
 {
     /** @brief Dbus constructs used by Fault Monitor */
-    sdbusplus::bus::bus bus = sdbusplus::bus::new_default();
+    sdbusplus::bus_t bus = sdbusplus::bus::new_default();
 
 #ifdef MONITOR_OPERATIONAL_STATUS
     phosphor::led::Operational::status::monitor::Monitor monitor(bus);
diff --git a/fault-monitor/operational-status-monitor.cpp b/fault-monitor/operational-status-monitor.cpp
index 1114463..26ee918 100644
--- a/fault-monitor/operational-status-monitor.cpp
+++ b/fault-monitor/operational-status-monitor.cpp
@@ -14,7 +14,7 @@
 namespace monitor
 {
 
-void Monitor::matchHandler(sdbusplus::message::message& msg)
+void Monitor::matchHandler(sdbusplus::message_t& msg)
 {
     // Get the ObjectPath of the `xyz.openbmc_project.Inventory.Manager`
     // service
@@ -72,7 +72,7 @@
                                            "xyz.openbmc_project.Association",
                                            "endpoints");
     }
-    catch (const sdbusplus::exception::exception& e)
+    catch (const sdbusplus::exception_t& e)
     {
         lg2::error(
             "Failed to get endpoints property, ERROR = {ERROR}, PATH = {PATH}",
@@ -98,7 +98,7 @@
             dBusHandler.setProperty(path, "xyz.openbmc_project.Led.Group",
                                     "Asserted", assertedValue);
         }
-        catch (const sdbusplus::exception::exception& e)
+        catch (const sdbusplus::exception_t& e)
         {
             lg2::error(
                 "Failed to set Asserted property, ERROR = {ERROR}, PATH = {PATH}",
diff --git a/fault-monitor/operational-status-monitor.hpp b/fault-monitor/operational-status-monitor.hpp
index 3fa995d..3b67edb 100644
--- a/fault-monitor/operational-status-monitor.hpp
+++ b/fault-monitor/operational-status-monitor.hpp
@@ -39,7 +39,7 @@
      *
      *  @param[in] bus -  D-Bus object
      */
-    explicit Monitor(sdbusplus::bus::bus& bus) :
+    explicit Monitor(sdbusplus::bus_t& bus) :
         bus(bus),
         matchSignal(bus,
                     "type='signal',member='PropertiesChanged', "
@@ -54,7 +54,7 @@
 
   private:
     /** @brief sdbusplus D-Bus connection. */
-    sdbusplus::bus::bus& bus;
+    sdbusplus::bus_t& bus;
 
     /** @brief sdbusplus signal matches for Monitor */
     sdbusplus::bus::match_t matchSignal;
@@ -70,7 +70,7 @@
      *
      * @param[in] msg - The D-Bus message contents
      */
-    void matchHandler(sdbusplus::message::message& msg);
+    void matchHandler(sdbusplus::message_t& msg);
 
     /**
      * @brief From the Inventory D-Bus object, obtains the associated LED group
