diff --git a/sensor-monitor/shutdown_alarm_monitor.cpp b/sensor-monitor/shutdown_alarm_monitor.cpp
index 39ced21..8fad830 100644
--- a/sensor-monitor/shutdown_alarm_monitor.cpp
+++ b/sensor-monitor/shutdown_alarm_monitor.cpp
@@ -85,7 +85,7 @@
 using namespace sdbusplus::bus::match;
 
 ShutdownAlarmMonitor::ShutdownAlarmMonitor(
-    sdbusplus::bus::bus& bus, sdeventplus::Event& event,
+    sdbusplus::bus_t& bus, sdeventplus::Event& event,
     std::shared_ptr<PowerState> powerState) :
     bus(bus),
     event(event), _powerState(std::move(powerState)),
@@ -170,8 +170,7 @@
     }
 }
 
-void ShutdownAlarmMonitor::propertiesChanged(
-    sdbusplus::message::message& message)
+void ShutdownAlarmMonitor::propertiesChanged(sdbusplus::message_t& message)
 {
     std::map<std::string, std::variant<bool>> properties;
     std::string interface;
diff --git a/sensor-monitor/shutdown_alarm_monitor.hpp b/sensor-monitor/shutdown_alarm_monitor.hpp
index b63fe83..f9162f6 100644
--- a/sensor-monitor/shutdown_alarm_monitor.hpp
+++ b/sensor-monitor/shutdown_alarm_monitor.hpp
@@ -70,7 +70,7 @@
      * @param[in] event - The sdeventplus event object
      * @param[in] powerState - The PowerState object
      */
-    ShutdownAlarmMonitor(sdbusplus::bus::bus& bus, sdeventplus::Event& event,
+    ShutdownAlarmMonitor(sdbusplus::bus_t& bus, sdeventplus::Event& event,
                          std::shared_ptr<phosphor::fan::PowerState> powerState);
 
   private:
@@ -80,7 +80,7 @@
      * If the power is on, the new alarm values will be checked to see
      * if the shutdown timer needs to be started or stopped.
      */
-    void propertiesChanged(sdbusplus::message::message& message);
+    void propertiesChanged(sdbusplus::message_t& message);
 
     /**
      * @brief Checks an alarm value to see if a shutdown timer needs
@@ -169,7 +169,7 @@
     /**
      * @brief The sdbusplus bus object
      */
-    sdbusplus::bus::bus& bus;
+    sdbusplus::bus_t& bus;
 
     /**
      * @brief The sdeventplus Event object
@@ -185,13 +185,13 @@
      * @brief The match for properties changing on the HardShutdown
      *        interface.
      */
-    sdbusplus::bus::match::match hardShutdownMatch;
+    sdbusplus::bus::match_t hardShutdownMatch;
 
     /**
      * @brief The match for properties changing on the SoftShutdown
      *        interface.
      */
-    sdbusplus::bus::match::match softShutdownMatch;
+    sdbusplus::bus::match_t softShutdownMatch;
 
     /**
      * @brief The map of alarms.
diff --git a/sensor-monitor/threshold_alarm_logger.cpp b/sensor-monitor/threshold_alarm_logger.cpp
index d64366b..b2fd7e8 100644
--- a/sensor-monitor/threshold_alarm_logger.cpp
+++ b/sensor-monitor/threshold_alarm_logger.cpp
@@ -83,7 +83,7 @@
              ErrorData{"PerfLossLowClear", Entry::Level::Informational}}}}}}};
 
 ThresholdAlarmLogger::ThresholdAlarmLogger(
-    sdbusplus::bus::bus& bus, sdeventplus::Event& event,
+    sdbusplus::bus_t& bus, sdeventplus::Event& event,
     std::shared_ptr<PowerState> powerState) :
     bus(bus),
     event(event), _powerState(std::move(powerState)),
@@ -135,7 +135,7 @@
         });
 }
 
-void ThresholdAlarmLogger::propertiesChanged(sdbusplus::message::message& msg)
+void ThresholdAlarmLogger::propertiesChanged(sdbusplus::message_t& msg)
 {
     std::map<std::string, std::variant<bool>> properties;
     std::string sensorPath = msg.get_path();
@@ -180,7 +180,7 @@
     }
 }
 
-void ThresholdAlarmLogger::interfacesRemoved(sdbusplus::message::message& msg)
+void ThresholdAlarmLogger::interfacesRemoved(sdbusplus::message_t& msg)
 {
     static const std::vector<std::string> thresholdNames{
         warningInterface, criticalInterface, perfLossInterface};
@@ -224,7 +224,7 @@
                 createEventLog(sensorPath, interface, property, alarmValue);
             }
         }
-        catch (const sdbusplus::exception::exception& e)
+        catch (const sdbusplus::exception_t& e)
         {
             // Sensor daemons that get their direction from entity manager
             // may only be putting either the high alarm or low alarm on
diff --git a/sensor-monitor/threshold_alarm_logger.hpp b/sensor-monitor/threshold_alarm_logger.hpp
index 0067274..8659ea7 100644
--- a/sensor-monitor/threshold_alarm_logger.hpp
+++ b/sensor-monitor/threshold_alarm_logger.hpp
@@ -66,7 +66,7 @@
      * @param[in] event - The sdeventplus event object
      * @param[in] powerState - The PowerState object
      */
-    ThresholdAlarmLogger(sdbusplus::bus::bus& bus, sdeventplus::Event& event,
+    ThresholdAlarmLogger(sdbusplus::bus_t& bus, sdeventplus::Event& event,
                          std::shared_ptr<phosphor::fan::PowerState> powerState);
 
   private:
@@ -78,7 +78,7 @@
      *
      * @param[in] msg - The signal message payload.
      */
-    void propertiesChanged(sdbusplus::message::message& msg);
+    void propertiesChanged(sdbusplus::message_t& msg);
 
     /**
      * @brief The interfacesRemoved removed handler for the threshold
@@ -88,7 +88,7 @@
      *
      * @param[in] msg - The signal message payload.
      */
-    void interfacesRemoved(sdbusplus::message::message& msg);
+    void interfacesRemoved(sdbusplus::message_t& msg);
 
     /**
      * @brief Checks for active alarms on the path and threshold interface
@@ -169,7 +169,7 @@
     /**
      * @brief The sdbusplus bus object
      */
-    sdbusplus::bus::bus& bus;
+    sdbusplus::bus_t& bus;
 
     /**
      * @brief The sdeventplus Event object
@@ -184,22 +184,22 @@
     /**
      * @brief The Warning interface match object
      */
-    sdbusplus::bus::match::match warningMatch;
+    sdbusplus::bus::match_t warningMatch;
 
     /**
      * @brief The Critical interface match object
      */
-    sdbusplus::bus::match::match criticalMatch;
+    sdbusplus::bus::match_t criticalMatch;
 
     /**
      * @brief The PerformanceLoss interface match object
      */
-    sdbusplus::bus::match::match perfLossMatch;
+    sdbusplus::bus::match_t perfLossMatch;
 
     /**
      * @brief The InterfacesRemoved match object
      */
-    sdbusplus::bus::match::match ifacesRemovedMatch;
+    sdbusplus::bus::match_t ifacesRemovedMatch;
 
     /**
      * @brief The current alarm values
