diff --git a/presence/fan_enclosure.cpp b/presence/fan_enclosure.cpp
index 262876e..ca97c07 100644
--- a/presence/fan_enclosure.cpp
+++ b/presence/fan_enclosure.cpp
@@ -69,7 +69,7 @@
         std::string invService;
         try
         {
-            invService = getInvService(bus);
+            invService = phosphor::fan::util::getInvService(bus);
         }
         catch (const std::runtime_error& err)
         {
diff --git a/utility.cpp b/utility.cpp
index db88712..2cfeac8 100644
--- a/utility.cpp
+++ b/utility.cpp
@@ -20,42 +20,53 @@
 {
 namespace fan
 {
-namespace presence
+namespace util
 {
 
+using namespace std::string_literals;
+
 //TODO Should get these from phosphor-objmgr config.h
 constexpr auto MAPPER_BUSNAME = "xyz.openbmc_project.ObjectMapper";
 constexpr auto MAPPER_PATH = "/xyz/openbmc_project/object_mapper";
 constexpr auto MAPPER_INTERFACE = "xyz.openbmc_project.ObjectMapper";
 
 //TODO Should get these from phosphor-inventory-manager config.h
-constexpr auto INVENTORY_PATH = "/xyz/openbmc_project/inventory";
-constexpr auto INVENTORY_INTF = "xyz.openbmc_project.Inventory.Manager";
+const auto INVENTORY_PATH = "/xyz/openbmc_project/inventory"s;
+const auto INVENTORY_INTF = "xyz.openbmc_project.Inventory.Manager"s;
 
 std::string getInvService(sdbusplus::bus::bus& bus)
 {
+    return getService(INVENTORY_PATH, INVENTORY_INTF, bus);
+}
+
+
+std::string getService(const std::string& path,
+                       const std::string& interface,
+                       sdbusplus::bus::bus& bus)
+{
     auto mapperCall = bus.new_method_call(MAPPER_BUSNAME,
                                           MAPPER_PATH,
                                           MAPPER_INTERFACE,
                                           "GetObject");
 
-    mapperCall.append(INVENTORY_PATH);
-    mapperCall.append(std::vector<std::string>({INVENTORY_INTF}));
+    mapperCall.append(path);
+    mapperCall.append(std::vector<std::string>({interface}));
 
     auto mapperResponseMsg = bus.call(mapperCall);
     if (mapperResponseMsg.is_method_error())
     {
         throw std::runtime_error(
-            "Error in mapper call to get inventory service name");
+            "Error in mapper call to get service name");
     }
 
+
     std::map<std::string, std::vector<std::string>> mapperResponse;
     mapperResponseMsg.read(mapperResponse);
 
     if (mapperResponse.empty())
     {
         throw std::runtime_error(
-            "Error in mapper response for inventory service name");
+            "Error in mapper response for getting service name");
     }
 
     return mapperResponse.begin()->first;
diff --git a/utility.hpp b/utility.hpp
index d45fa02..b37987d 100644
--- a/utility.hpp
+++ b/utility.hpp
@@ -6,7 +6,7 @@
 {
 namespace fan
 {
-namespace presence
+namespace util
 {
 
 /**
@@ -16,6 +16,21 @@
  */
 std::string getInvService(sdbusplus::bus::bus& bus);
 
+
+/**
+ * @brief Get the service name from the mapper for the
+ *        interface and path passed in.
+ *
+ * @param[in] path - the dbus path name
+ * @param[in] interface - the dbus interface name
+ * @param[in] bus - the dbus object
+ *
+ * @return The service name
+ */
+std::string getService(const std::string& path,
+                       const std::string& interface,
+                       sdbusplus::bus::bus& bus);
+
 }
 }
 }
