diff --git a/control/json/manager.hpp b/control/json/manager.hpp
index c783e44..23dda2b 100644
--- a/control/json/manager.hpp
+++ b/control/json/manager.hpp
@@ -107,11 +107,11 @@
  * Tuple constructed of:
  *     std::unique_ptr<std::vector<SignalPkg>> =
  *         Pointer to list of the signal's packages
- *     std::unique_ptr<sdbusplus::server::match::match> =
+ *     std::unique_ptr<sdbusplus::bus::match_t> =
  *         Pointer to match holding the subscription to a signal
  */
 using SignalData = std::tuple<std::unique_ptr<std::vector<SignalPkg>>,
-                              std::unique_ptr<sdbusplus::server::match::match>>;
+                              std::unique_ptr<sdbusplus::bus::match_t>>;
 
 /**
  * @class Manager - Represents the fan control manager's configuration
diff --git a/control/json/triggers/signal.cpp b/control/json/triggers/signal.cpp
index 70bc8be..491c7a4 100644
--- a/control/json/triggers/signal.cpp
+++ b/control/json/triggers/signal.cpp
@@ -52,11 +52,11 @@
         std::unique_ptr<std::vector<SignalPkg>> pkgs =
             std::make_unique<std::vector<SignalPkg>>();
         pkgs->emplace_back(std::move(signalPkg));
-        std::unique_ptr<sdbusplus::server::match::match> ptrMatch = nullptr;
+        std::unique_ptr<sdbusplus::bus::match_t> ptrMatch = nullptr;
         if (!match.empty())
         {
             // Subscribe to signal
-            ptrMatch = std::make_unique<sdbusplus::server::match::match>(
+            ptrMatch = std::make_unique<sdbusplus::bus::match_t>(
                 mgr->getBus(), match.c_str(),
                 std::bind(std::mem_fn(&Manager::handleSignal), &(*mgr),
                           std::placeholders::_1, pkgs.get()));
diff --git a/control/triggers.cpp b/control/triggers.cpp
index cb7281c..5847576 100644
--- a/control/triggers.cpp
+++ b/control/triggers.cpp
@@ -28,11 +28,11 @@
         // Setup signal matches of the property for event
         std::unique_ptr<EventData> eventData =
             std::make_unique<EventData>(group, match, handler, actions);
-        std::unique_ptr<sdbusplus::server::match::match> mPtr = nullptr;
+        std::unique_ptr<sdbusplus::bus::match_t> mPtr = nullptr;
         if (!match.empty())
         {
             // Subscribe to signal match
-            mPtr = std::make_unique<sdbusplus::server::match::match>(
+            mPtr = std::make_unique<sdbusplus::bus::match_t>(
                 zone.getBus(), match.c_str(),
                 std::bind(std::mem_fn(&Zone::handleEvent), &zone,
                           std::placeholders::_1, eventData.get()));
diff --git a/control/types.hpp b/control/types.hpp
index 0207b36..8bc8690 100644
--- a/control/types.hpp
+++ b/control/types.hpp
@@ -1,5 +1,5 @@
 #pragma once
-#include <sdbusplus/server.hpp>
+#include <sdbusplus/bus/match.hpp>
 #include <sdeventplus/clock.hpp>
 #include <sdeventplus/utility/timer.hpp>
 
@@ -97,9 +97,8 @@
 
 constexpr auto signalEventDataPos = 0;
 constexpr auto signalMatchPos = 1;
-using SignalEvent =
-    std::tuple<std::unique_ptr<EventData>,
-               std::unique_ptr<sdbusplus::server::match::match>>;
+using SignalEvent = std::tuple<std::unique_ptr<EventData>,
+                               std::unique_ptr<sdbusplus::bus::match_t>>;
 
 constexpr auto zoneNumPos = 0;
 constexpr auto fullSpeedPos = 1;
diff --git a/control/zone.hpp b/control/zone.hpp
index e7c01f3..c82f0a8 100644
--- a/control/zone.hpp
+++ b/control/zone.hpp
@@ -573,9 +573,9 @@
      * @param[in] data - Event data for signal
      * @param[in] match - Subscribed signal match
      */
-    inline void
-        addSignal(const std::string& name, std::unique_ptr<EventData>&& data,
-                  std::unique_ptr<sdbusplus::server::match::match>&& match)
+    inline void addSignal(const std::string& name,
+                          std::unique_ptr<EventData>&& data,
+                          std::unique_ptr<sdbusplus::bus::match_t>&& match)
     {
         _signalEvents[name].emplace_back(std::move(data), std::move(match));
     }
