diff --git a/control/fan.cpp b/control/fan.cpp
index b0881da..40ec6b4 100644
--- a/control/fan.cpp
+++ b/control/fan.cpp
@@ -19,7 +19,6 @@
 #include <xyz/openbmc_project/Common/error.hpp>
 #include <string>
 #include "fan.hpp"
-#include "utility.hpp"
 #include "sdbusplus.hpp"
 
 namespace phosphor
@@ -49,12 +48,18 @@
     for (auto& s : sensors)
     {
         path = FAN_SENSOR_PATH + s;
-        _sensors.emplace_back(path);
+        auto service = util::SDBusPlus::getService(
+                bus,
+                path,
+                _interface);
+        _sensors[path] = service;
     }
-    // All sensors associated with this fan are set to same target speed,
+    // All sensors associated with this fan are set to the same target speed,
     // so only need to read target property from one.
     if (!path.empty())
     {
+        // Use getProperty with service lookup since each target sensor
+        // path given could have different services providing them
         _targetSpeed = util::SDBusPlus::getProperty<uint64_t>(
                 bus,
                 path,
@@ -63,17 +68,6 @@
     }
 }
 
-
-//TODO openbmc/openbmc#1524  Can cache this value when
-//openbmc/openbmc#1496 is resolved.
-std::string Fan::getService(const std::string& sensor)
-{
-    return phosphor::fan::util::getService(sensor,
-                                           _interface,
-                                           _bus);
-}
-
-
 void Fan::setSpeed(uint64_t speed)
 {
     sdbusplus::message::variant<uint64_t> value = speed;
@@ -81,10 +75,8 @@
 
     for (auto& sensor : _sensors)
     {
-        auto service = getService(sensor);
-
-        auto method = _bus.new_method_call(service.c_str(),
-                                           sensor.c_str(),
+        auto method = _bus.new_method_call(sensor.second.c_str(),
+                                           sensor.first.c_str(),
                                            PROPERTY_INTERFACE,
                                            "Set");
         method.append(_interface, property, value);
@@ -93,7 +85,8 @@
         if (response.is_method_error())
         {
             log<level::ERR>(
-                "Failed call to set fan speed ", entry("SENSOR=%s", sensor));
+                "Failed call to set fan speed ",
+                entry("SENSOR=%s", sensor.first));
             elog<InternalFailure>();
         }
     }
diff --git a/control/fan.hpp b/control/fan.hpp
index e7f3067..3e05e16 100644
--- a/control/fan.hpp
+++ b/control/fan.hpp
@@ -59,15 +59,6 @@
     private:
 
         /**
-         * Returns the service name to use for interacting
-         * with the fan sensor passed in.
-         *
-         * @param[in] sensor - the fan tach sensor name
-         * @return - the service name
-         */
-        std::string getService(const std::string& sensor);
-
-        /**
          * The dbus object
          */
         sdbusplus::bus::bus& _bus;
@@ -78,9 +69,9 @@
         std::string _name;
 
         /**
-         * Vector of hwmon sensors for the rotors
+         * Map of hwmon target sensors to the service providing them
          */
-        std::vector<std::string> _sensors;
+        std::map<std::string, std::string> _sensors;
 
         /**
          * The interface of the fan target
