diff --git a/presence/tach_sensor.cpp b/presence/tach_sensor.cpp
index c21478b..60da441 100644
--- a/presence/tach_sensor.cpp
+++ b/presence/tach_sensor.cpp
@@ -30,35 +30,18 @@
     return (tach != 0);
 }
 
-// Tach signal callback handler
-int TachSensor::handleTachChangeSignal(sd_bus_message* msg,
-                                       void* usrData,
-                                       sd_bus_error* err)
-{
-    auto sdbpMsg = sdbusplus::message::message(msg);
-    static_cast<TachSensor*>(usrData)->handleTachChange(sdbpMsg, err);
-    return 0;
-}
-
-void TachSensor::handleTachChange(sdbusplus::message::message& sdbpMsg,
-                                  sd_bus_error* err)
+void TachSensor::handleTachChange(sdbusplus::message::message& sdbpMsg)
 {
     std::string msgSensor;
     std::map<std::string, sdbusplus::message::variant<int64_t>> msgData;
     sdbpMsg.read(msgSensor, msgData);
 
-    // TODO openbmc/phosphor-fan-presence#5
-    //      Update to use 'arg0namespace' match option to reduce dbus traffic
-    // Find interface with value property
-    if (msgSensor.compare("xyz.openbmc_project.Sensor.Value") == 0)
+    // Find the 'Value' property containing tach
+    auto valPropMap = msgData.find("Value");
+    if (valPropMap != msgData.end())
     {
-        // Find the 'Value' property containing tach
-        auto valPropMap = msgData.find("Value");
-        if (valPropMap != msgData.end())
-        {
-            tach = sdbusplus::message::variant_ns::get<int64_t>(
-                valPropMap->second);
-        }
+        tach = sdbusplus::message::variant_ns::get<int64_t>(
+            valPropMap->second);
     }
     // Update inventory according to latest tach reported
     fanEnc.updInventory();
diff --git a/presence/tach_sensor.hpp b/presence/tach_sensor.hpp
index 90d955b..3de5d69 100644
--- a/presence/tach_sensor.hpp
+++ b/presence/tach_sensor.hpp
@@ -12,6 +12,8 @@
 namespace presence
 {
 
+using namespace sdbusplus::bus::match::rules;
+
 /**
  * @class TachSensor
  * @brief OpenBMC Tach feedback sensor presence implementation
@@ -43,8 +45,10 @@
                 bus(bus),
                 tachSignal(bus,
                            match(id).c_str(),
-                           handleTachChangeSignal,
-                           this)
+                           std::bind(
+                               std::mem_fn(&TachSensor::handleTachChange),
+                               this,
+                               std::placeholders::_1))
         {
             // Nothing to do here
         }
@@ -73,32 +77,19 @@
          */
         static std::string match(const std::string& id)
         {
-            return std::string("type='signal',"
-                               "interface='org.freedesktop.DBus.Properties',"
-                               "member='PropertiesChanged',"
-                               "path='/xyz/openbmc_project/sensors/fan_tach/" +
-                               id + "'");
+            return std::string(
+                    interface("org.freedesktop.DBus.Properties") +
+                    member("PropertiesChanged") +
+                    type::signal() +
+                    path("/xyz/openbmc_project/sensors/fan_tach/" + id) +
+                    argN(0, "xyz.openbmc_project.Sensor.Value"));
         }
         /**
-         * @brief Callback function on tach change signals
-         *
-         * @param[out] msg - Data associated with the subscribed signal
-         * @param[out] data - Pointer to this tach sensor object instance
-         * @param[out] err - Contains any sdbus error reference if occurred
-         *
-         * @return 0
-         */
-        static int handleTachChangeSignal(sd_bus_message* msg,
-                                          void* data,
-                                          sd_bus_error* err);
-        /**
-         * @brief Determine & handle when the signal was a tach change
+         * @brief Handle when the signal was a tach change
          *
          * @param[in] msg - Expanded sdbusplus message data
-         * @param[in] err - Contains any sdbus error reference if occurred
          */
-        void handleTachChange(sdbusplus::message::message& msg,
-                              sd_bus_error* err);
+        void handleTachChange(sdbusplus::message::message& msg);
 
 };
 
