diff --git a/include/dbus_monitor.hpp b/include/dbus_monitor.hpp
index ce0550d..129422e 100644
--- a/include/dbus_monitor.hpp
+++ b/include/dbus_monitor.hpp
@@ -18,7 +18,7 @@
 
 struct DbusWebsocketSession
 {
-    std::vector<std::unique_ptr<sdbusplus::bus::match::match>> matches;
+    std::vector<std::unique_ptr<sdbusplus::bus::match_t>> matches;
     boost::container::flat_set<std::string, std::less<>,
                                std::vector<std::string>>
         interfaces;
@@ -44,7 +44,7 @@
         BMCWEB_LOG_ERROR << "Couldn't find dbus connection " << connection;
         return 0;
     }
-    sdbusplus::message::message message(m);
+    sdbusplus::message_t message(m);
     nlohmann::json json;
     json["event"] = message.get_member();
     json["path"] = message.get_path();
@@ -206,7 +206,7 @@
                 BMCWEB_LOG_DEBUG << "Creating match " << propertiesMatchString;
 
                 thisSession.matches.emplace_back(
-                    std::make_unique<sdbusplus::bus::match::match>(
+                    std::make_unique<sdbusplus::bus::match_t>(
                         *crow::connections::systemBus, propertiesMatchString,
                         onPropertyUpdate, &conn));
             }
@@ -229,7 +229,7 @@
                     ifaceMatchString += "'";
                     BMCWEB_LOG_DEBUG << "Creating match " << ifaceMatchString;
                     thisSession.matches.emplace_back(
-                        std::make_unique<sdbusplus::bus::match::match>(
+                        std::make_unique<sdbusplus::bus::match_t>(
                             *crow::connections::systemBus, ifaceMatchString,
                             onPropertyUpdate, &conn));
                 }
@@ -243,7 +243,7 @@
                  "member='InterfacesAdded'");
             BMCWEB_LOG_DEBUG << "Creating match " << objectManagerMatchString;
             thisSession.matches.emplace_back(
-                std::make_unique<sdbusplus::bus::match::match>(
+                std::make_unique<sdbusplus::bus::match_t>(
                     *crow::connections::systemBus, objectManagerMatchString,
                     onPropertyUpdate, &conn));
         }
diff --git a/include/hostname_monitor.hpp b/include/hostname_monitor.hpp
index 738dc1b..3fb42e4 100644
--- a/include/hostname_monitor.hpp
+++ b/include/hostname_monitor.hpp
@@ -11,7 +11,7 @@
 {
 namespace hostname_monitor
 {
-static std::unique_ptr<sdbusplus::bus::match::match> hostnameSignalMonitor;
+static std::unique_ptr<sdbusplus::bus::match_t> hostnameSignalMonitor;
 
 inline void installCertificate(const std::filesystem::path& certPath)
 {
@@ -41,7 +41,7 @@
         return 0;
     }
 
-    sdbusplus::message::message message(m);
+    sdbusplus::message_t message(m);
     std::string iface;
     dbus::utility::DBusPropertiesMap changedProperties;
 
@@ -133,7 +133,7 @@
          "arg0='xyz.openbmc_project.Network.SystemConfiguration',"
          "member='PropertiesChanged'");
 
-    hostnameSignalMonitor = std::make_unique<sdbusplus::bus::match::match>(
+    hostnameSignalMonitor = std::make_unique<sdbusplus::bus::match_t>(
         *crow::connections::systemBus, propertiesMatchString, onPropertyUpdate,
         nullptr);
 }
diff --git a/include/image_upload.hpp b/include/image_upload.hpp
index 0fff1ea..4defbb6 100644
--- a/include/image_upload.hpp
+++ b/include/image_upload.hpp
@@ -16,7 +16,7 @@
 namespace image_upload
 {
 
-static std::unique_ptr<sdbusplus::bus::match::match> fwUpdateMatcher;
+static std::unique_ptr<sdbusplus::bus::match_t> fwUpdateMatcher;
 
 inline void
     uploadImageHandler(const crow::Request& req,
@@ -57,8 +57,8 @@
         asyncResp->res.jsonValue["status"] = "error";
     };
 
-    std::function<void(sdbusplus::message::message&)> callback =
-        [asyncResp](sdbusplus::message::message& m) {
+    std::function<void(sdbusplus::message_t&)> callback =
+        [asyncResp](sdbusplus::message_t& m) {
         BMCWEB_LOG_DEBUG << "Match fired";
 
         sdbusplus::message::object_path path;
@@ -84,7 +84,7 @@
             fwUpdateMatcher = nullptr;
         }
     };
-    fwUpdateMatcher = std::make_unique<sdbusplus::bus::match::match>(
+    fwUpdateMatcher = std::make_unique<sdbusplus::bus::match_t>(
         *crow::connections::systemBus,
         "interface='org.freedesktop.DBus.ObjectManager',type='signal',"
         "member='InterfacesAdded',path='/xyz/openbmc_project/software'",
diff --git a/include/openbmc_dbus_rest.hpp b/include/openbmc_dbus_rest.hpp
index d4700a3..9c8d9f5 100644
--- a/include/openbmc_dbus_rest.hpp
+++ b/include/openbmc_dbus_rest.hpp
@@ -938,7 +938,7 @@
 }
 
 template <typename T>
-int readMessageItem(const std::string& typeCode, sdbusplus::message::message& m,
+int readMessageItem(const std::string& typeCode, sdbusplus::message_t& m,
                     nlohmann::json& data)
 {
     T value;
@@ -955,11 +955,11 @@
     return 0;
 }
 
-int convertDBusToJSON(const std::string& returnType,
-                      sdbusplus::message::message& m, nlohmann::json& response);
+int convertDBusToJSON(const std::string& returnType, sdbusplus::message_t& m,
+                      nlohmann::json& response);
 
 inline int readDictEntryFromMessage(const std::string& typeCode,
-                                    sdbusplus::message::message& m,
+                                    sdbusplus::message_t& m,
                                     nlohmann::json& object)
 {
     std::vector<std::string> types = dbusArgSplit(typeCode);
@@ -1018,8 +1018,7 @@
 }
 
 inline int readArrayFromMessage(const std::string& typeCode,
-                                sdbusplus::message::message& m,
-                                nlohmann::json& data)
+                                sdbusplus::message_t& m, nlohmann::json& data)
 {
     if (typeCode.size() < 2)
     {
@@ -1098,8 +1097,7 @@
 }
 
 inline int readStructFromMessage(const std::string& typeCode,
-                                 sdbusplus::message::message& m,
-                                 nlohmann::json& data)
+                                 sdbusplus::message_t& m, nlohmann::json& data)
 {
     if (typeCode.size() < 3)
     {
@@ -1139,8 +1137,7 @@
     return 0;
 }
 
-inline int readVariantFromMessage(sdbusplus::message::message& m,
-                                  nlohmann::json& data)
+inline int readVariantFromMessage(sdbusplus::message_t& m, nlohmann::json& data)
 {
     const char* containerType = nullptr;
     int r = sd_bus_message_peek_type(m.get(), nullptr, &containerType);
@@ -1176,8 +1173,7 @@
 }
 
 inline int convertDBusToJSON(const std::string& returnType,
-                             sdbusplus::message::message& m,
-                             nlohmann::json& response)
+                             sdbusplus::message_t& m, nlohmann::json& response)
 {
     int r = 0;
     const std::vector<std::string> returnTypes = dbusArgSplit(returnType);
@@ -1317,7 +1313,7 @@
 
 inline void handleMethodResponse(
     const std::shared_ptr<InProgressActionData>& transaction,
-    sdbusplus::message::message& m, const std::string& returnType)
+    sdbusplus::message_t& m, const std::string& returnType)
 {
     nlohmann::json data;
 
@@ -1434,7 +1430,7 @@
                         BMCWEB_LOG_DEBUG << "Found method named "
                                          << thisMethodName << " on interface "
                                          << thisInterfaceName;
-                        sdbusplus::message::message m =
+                        sdbusplus::message_t m =
                             crow::connections::systemBus->new_method_call(
                                 connectionName.c_str(),
                                 transaction->path.c_str(), thisInterfaceName,
@@ -1500,7 +1496,7 @@
                             m,
                             [transaction,
                              returnType](boost::system::error_code ec2,
-                                         sdbusplus::message::message& m2) {
+                                         sdbusplus::message_t& m2) {
                             if (ec2)
                             {
                                 transaction->methodFailed = true;
@@ -1748,7 +1744,7 @@
 
             for (const std::string& interface : interfaceNames)
             {
-                sdbusplus::message::message m =
+                sdbusplus::message_t m =
                     crow::connections::systemBus->new_method_call(
                         connection.first.c_str(), path->c_str(),
                         "org.freedesktop.DBus.Properties", "GetAll");
@@ -1756,7 +1752,7 @@
                 crow::connections::systemBus->async_send(
                     m, [asyncResp, response,
                         propertyName](const boost::system::error_code ec2,
-                                      sdbusplus::message::message& msg) {
+                                      sdbusplus::message_t& msg) {
                         if (ec2)
                         {
                             BMCWEB_LOG_ERROR << "Bad dbus request error: "
@@ -1942,7 +1938,7 @@
                             const char* argType = propNode->Attribute("type");
                             if (argType != nullptr)
                             {
-                                sdbusplus::message::message m =
+                                sdbusplus::message_t m =
                                     crow::connections::systemBus
                                         ->new_method_call(
                                             connectionName.c_str(),
@@ -1988,9 +1984,8 @@
                                 }
                                 crow::connections::systemBus->async_send(
                                     m,
-                                    [transaction](
-                                        boost::system::error_code ec,
-                                        sdbusplus::message::message& m2) {
+                                    [transaction](boost::system::error_code ec,
+                                                  sdbusplus::message_t& m2) {
                                     BMCWEB_LOG_DEBUG << "sent";
                                     if (ec)
                                     {
@@ -2366,7 +2361,7 @@
                 const char* type = property->Attribute("type");
                 if (type != nullptr && name != nullptr)
                 {
-                    sdbusplus::message::message m =
+                    sdbusplus::message_t m =
                         crow::connections::systemBus->new_method_call(
                             processName.c_str(), objectPath.c_str(),
                             "org.freedesktop."
@@ -2378,7 +2373,7 @@
                     crow::connections::systemBus->async_send(
                         m, [&propertyItem,
                             asyncResp](const boost::system::error_code& e,
-                                       sdbusplus::message::message& msg) {
+                                       sdbusplus::message_t& msg) {
                             if (e)
                             {
                                 return;
