diff --git a/cold-redundancy/cold_redundancy.cpp b/cold-redundancy/cold_redundancy.cpp
index 2409e0a..08ed491 100644
--- a/cold-redundancy/cold_redundancy.cpp
+++ b/cold-redundancy/cold_redundancy.cpp
@@ -50,9 +50,8 @@
 {
     post(io,
          [this, &io, &objectServer, &systemBus]() { createPSU(systemBus); });
-    std::function<void(sdbusplus::message::message&)> eventHandler =
-        [this, &io, &objectServer,
-         &systemBus](sdbusplus::message::message& message) {
+    std::function<void(sdbusplus::message_t&)> eventHandler =
+        [this, &io, &objectServer, &systemBus](sdbusplus::message_t& message) {
             if (message.is_method_error())
             {
                 std::cerr << "callback method error\n";
@@ -73,8 +72,8 @@
             });
         };
 
-    std::function<void(sdbusplus::message::message&)> eventCollect =
-        [&](sdbusplus::message::message& message) {
+    std::function<void(sdbusplus::message_t&)> eventCollect =
+        [&](sdbusplus::message_t& message) {
             std::string objectName;
             boost::container::flat_map<std::string, std::variant<bool>> values;
             std::string path = message.get_path();
@@ -99,7 +98,7 @@
             {
                 message.read(objectName, values);
             }
-            catch (const sdbusplus::exception::exception& e)
+            catch (const sdbusplus::exception_t& e)
             {
                 std::cerr << "Failed to read message from PSU Event\n";
                 return;
@@ -137,8 +136,8 @@
     using namespace sdbusplus::bus::match::rules;
     for (const char* type : psuInterfaceTypes)
     {
-        auto match = std::make_unique<sdbusplus::bus::match::match>(
-            static_cast<sdbusplus::bus::bus&>(*systemBus),
+        auto match = std::make_unique<sdbusplus::bus::match_t>(
+            static_cast<sdbusplus::bus_t&>(*systemBus),
             type::signal() + member("PropertiesChanged") +
                 path_namespace(inventoryPath) + arg0namespace(type),
             eventHandler);
@@ -147,8 +146,8 @@
 
     for (const char* eventType : psuEventInterface)
     {
-        auto eventMatch = std::make_unique<sdbusplus::bus::match::match>(
-            static_cast<sdbusplus::bus::bus&>(*systemBus),
+        auto eventMatch = std::make_unique<sdbusplus::bus::match_t>(
+            static_cast<sdbusplus::bus_t&>(*systemBus),
             type::signal() + member("PropertiesChanged") +
                 path_namespace(eventPath) + arg0namespace(eventType),
             eventCollect);
diff --git a/cold-redundancy/cold_redundancy.hpp b/cold-redundancy/cold_redundancy.hpp
index b72c642..a66705a 100644
--- a/cold-redundancy/cold_redundancy.hpp
+++ b/cold-redundancy/cold_redundancy.hpp
@@ -76,7 +76,7 @@
      *          D-Bus properties change will trigger callback function
      *          by these matches
      */
-    std::vector<std::unique_ptr<sdbusplus::bus::match::match>> matches;
+    std::vector<std::unique_ptr<sdbusplus::bus::match_t>> matches;
 };
 
 /**
diff --git a/cold-redundancy/util.cpp b/cold-redundancy/util.cpp
index fea972e..8946d30 100644
--- a/cold-redundancy/util.cpp
+++ b/cold-redundancy/util.cpp
@@ -35,7 +35,7 @@
     phosphor::power::util::getProperty<bool>(
         "xyz.openbmc_project.State.Decorator.OperationalStatus", "functional",
         pathStr, "xyz.openbmc_project.PSUSensor",
-        static_cast<sdbusplus::bus::bus&>(*conn), result);
+        static_cast<sdbusplus::bus_t&>(*conn), result);
 
     if (!result)
     {
