diff --git a/include/manufacturingcommands.hpp b/include/manufacturingcommands.hpp
index c36fcb0..c7d6f25 100644
--- a/include/manufacturingcommands.hpp
+++ b/include/manufacturingcommands.hpp
@@ -44,8 +44,8 @@
     "/xyz/openbmc_project/led/physical/";
 static constexpr const char* fanPwmPath =
     "/xyz/openbmc_project/sensors/fan_pwm/Pwm_";
-static constexpr const char* fanTachPathPrefix =
-    "/xyz/openbmc_project/sensors/fan_tach/Fan_";
+static constexpr const char* fanTachBasePath =
+    "/xyz/openbmc_project/sensors/fan_tach/";
 
 static constexpr const char* fanIntf = "xyz.openbmc_project.Sensor.Value";
 static constexpr const char* buttonIntf = "xyz.openbmc_project.Chassis.Buttons";
diff --git a/src/manufacturingcommands.cpp b/src/manufacturingcommands.cpp
index 483e077..ad38e79 100644
--- a/src/manufacturingcommands.cpp
+++ b/src/manufacturingcommands.cpp
@@ -14,6 +14,7 @@
 // limitations under the License.
 */
 
+#include <boost/container/flat_map.hpp>
 #include <ipmid/api.hpp>
 #include <manufacturingcommands.hpp>
 #include <oemcommands.hpp>
@@ -252,8 +253,8 @@
 ipmi::RspType<uint8_t,                // Signal value
               std::optional<uint16_t> // Fan tach value
               >
-    appMTMGetSignal(uint8_t signalTypeByte, uint8_t instance,
-                    uint8_t actionByte)
+    appMTMGetSignal(boost::asio::yield_context yield, uint8_t signalTypeByte,
+                    uint8_t instance, uint8_t actionByte)
 {
     if (mtm.getAccessLvl() < MtmLvl::mtmAvailable)
     {
@@ -268,7 +269,7 @@
         case SmSignalGet::smFanPwmGet:
         {
             ipmi::Value reply;
-            std::string fullPath = fanPwmPath + std::to_string(instance);
+            std::string fullPath = fanPwmPath + std::to_string(instance + 1);
             if (mtm.getProperty(fanService, fullPath, fanIntf, "Value",
                                 &reply) < 0)
             {
@@ -284,31 +285,31 @@
         }
         break;
         case SmSignalGet::smFanTachometerGet:
-
         {
-            // Full path calculation pattern:
-            // Instance 1 path is
-            // /xyz/openbmc_project/sensors/fan_tach/Fan_1a Instance 2 path
-            // is /xyz/openbmc_project/sensors/fan_tach/Fan_1b Instance 3
-            // path is /xyz/openbmc_project/sensors/fan_tach/Fan_2a
-            // and so on...
-            std::string fullPath = fanTachPathPrefix;
-            std::string fanAb = (instance % 2) == 0 ? "b" : "a";
-            if (0 == instance)
+            auto sdbusp = getSdBus();
+            boost::system::error_code ec;
+            using objFlatMap = boost::container::flat_map<
+                std::string, boost::container::flat_map<
+                                 std::string, std::vector<std::string>>>;
+
+            auto flatMap = sdbusp->yield_method_call<objFlatMap>(
+                yield, ec, "xyz.openbmc_project.ObjectMapper",
+                "/xyz/openbmc_project/object_mapper",
+                "xyz.openbmc_project.ObjectMapper", "GetSubTree",
+                fanTachBasePath, 0, std::array<const char*, 1>{fanIntf});
+            if (ec)
+            {
+                phosphor::logging::log<phosphor::logging::level::ERR>(
+                    "Failed to query fan tach sub tree objects");
+                return ipmi::responseUnspecifiedError();
+            }
+            if (instance >= flatMap.size())
             {
                 return ipmi::responseInvalidFieldRequest();
             }
-            else if (0 == instance / 2)
-            {
-                fullPath += std::string("1") + fanAb;
-            }
-            else
-            {
-                fullPath += std::to_string(instance / 2) + fanAb;
-            }
-
+            auto itr = flatMap.nth(instance);
             ipmi::Value reply;
-            if (mtm.getProperty(fanService, fullPath, fanIntf, "Value",
+            if (mtm.getProperty(fanService, itr->first, fanIntf, "Value",
                                 &reply) < 0)
             {
                 return ipmi::responseInvalidFieldRequest();
