diff --git a/settings.cpp b/settings.cpp
index df16aeb..50081b7 100644
--- a/settings.cpp
+++ b/settings.cpp
@@ -17,24 +17,12 @@
 
 Objects::Objects(sdbusplus::bus_t& bus) : bus(bus)
 {
-    std::vector<std::string> settingsIntfs = {timeSyncIntf};
-    auto depth = 0;
-
-    auto mapperCall = bus.new_method_call(mapperService, mapperPath, mapperIntf,
-                                          "GetSubTree");
-    mapperCall.append(root);
-    mapperCall.append(depth);
-    mapperCall.append(settingsIntfs);
-
-    using Interfaces = std::vector<Interface>;
-    using MapperResponse = std::vector<
-        std::pair<Path, std::vector<std::pair<Service, Interfaces>>>>;
+    Interfaces settingsIntfs = {timeSyncIntf};
     MapperResponse result;
 
     try
     {
-        auto response = bus.call(mapperCall);
-        response.read(result);
+        result = getSubTree(bus, root, settingsIntfs, 0);
     }
     catch (const sdbusplus::exception_t& ex)
     {
diff --git a/settings.hpp b/settings.hpp
index 8e5ead5..f45c910 100644
--- a/settings.hpp
+++ b/settings.hpp
@@ -1,5 +1,7 @@
 #pragma once
 
+#include "utils.hpp"
+
 #include <sdbusplus/bus.hpp>
 
 #include <string>
@@ -7,9 +9,7 @@
 namespace settings
 {
 
-using Path = std::string;
-using Service = std::string;
-using Interface = std::string;
+using namespace phosphor::time::utils;
 
 constexpr auto root = "/";
 constexpr auto timeSyncIntf = "xyz.openbmc_project.Time.Synchronization";
diff --git a/utils.cpp b/utils.cpp
index 9bf83cb..bc95feb 100644
--- a/utils.cpp
+++ b/utils.cpp
@@ -46,6 +46,22 @@
     }
 }
 
+MapperResponse getSubTree(sdbusplus::bus_t& bus, const std::string& root,
+                          const Interfaces& interfaces, int32_t depth)
+{
+    auto mapperCall = bus.new_method_call(MAPPER_BUSNAME, MAPPER_PATH,
+                                          MAPPER_INTERFACE, "GetSubTree");
+    mapperCall.append(root);
+    mapperCall.append(depth);
+    mapperCall.append(interfaces);
+
+    auto response = bus.call(mapperCall);
+
+    MapperResponse result;
+    response.read(result);
+    return result;
+}
+
 Mode strToMode(const std::string& mode)
 {
     return ModeSetting::convertMethodFromString(mode);
diff --git a/utils.hpp b/utils.hpp
index 6f2fc62..dd81314 100644
--- a/utils.hpp
+++ b/utils.hpp
@@ -5,6 +5,8 @@
 #include <phosphor-logging/lg2.hpp>
 #include <sdbusplus/bus.hpp>
 
+#include <vector>
+
 namespace phosphor
 {
 namespace time
@@ -12,6 +14,13 @@
 namespace utils
 {
 
+using Path = std::string;
+using Service = std::string;
+using Interface = std::string;
+using Interfaces = std::vector<Interface>;
+using MapperResponse =
+    std::vector<std::pair<Path, std::vector<std::pair<Service, Interfaces>>>>;
+
 /** @brief The template function to get property from the requested dbus path
  *
  * @param[in] bus          - The Dbus bus object
@@ -57,6 +66,20 @@
 std::string getService(sdbusplus::bus_t& bus, const char* path,
                        const char* interface);
 
+/** @brief Get sub tree from root, depth and interfaces
+ *
+ * @param[in] bus           - The Dbus bus object
+ * @param[in] root          - The root of the tree to search
+ * @param[in] interfaces    - All interfaces in the subtree to search for
+ * @param[in] depth         - The number of path elements to descend
+ *
+ * @return The name of the service
+ *
+ * @throw sdbusplus::exception_t when it fails
+ */
+MapperResponse getSubTree(sdbusplus::bus_t& bus, const std::string& root,
+                          const Interfaces& interfaces, int32_t depth);
+
 /** @brief Convert a string to enum Mode
  *
  * Convert the time mode string to enum.
