diff --git a/discover_system_state.cpp b/discover_system_state.cpp
index f638561..29abdc6 100644
--- a/discover_system_state.cpp
+++ b/discover_system_state.cpp
@@ -2,6 +2,7 @@
 
 #include "host_state_manager.hpp"
 #include "settings.hpp"
+#include "utils.hpp"
 #include "xyz/openbmc_project/Common/error.hpp"
 #include "xyz/openbmc_project/Control/Power/RestorePolicy/server.hpp"
 
@@ -30,94 +31,6 @@
 using namespace sdbusplus::xyz::openbmc_project::Common::Error;
 using namespace sdbusplus::xyz::openbmc_project::Control::Power::server;
 
-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";
-
-constexpr auto PROPERTY_INTERFACE = "org.freedesktop.DBus.Properties";
-
-std::string getService(sdbusplus::bus::bus& bus, std::string path,
-                       std::string interface)
-{
-    auto mapper = bus.new_method_call(MAPPER_BUSNAME, MAPPER_PATH,
-                                      MAPPER_INTERFACE, "GetObject");
-
-    mapper.append(path, std::vector<std::string>({interface}));
-
-    std::map<std::string, std::vector<std::string>> mapperResponse;
-    try
-    {
-        auto mapperResponseMsg = bus.call(mapper);
-
-        mapperResponseMsg.read(mapperResponse);
-        if (mapperResponse.empty())
-        {
-            error("Mapper response empty, does not have path {PATH} and "
-                  "interface {INTERFACE}",
-                  "PATH", path, "INTERFACE", interface);
-            throw std::runtime_error("Error reading mapper response");
-        }
-    }
-    catch (const sdbusplus::exception::exception& e)
-    {
-        error("Error in mapper call for path {PATH} and interface {INTERFACE} "
-              "with error {ERROR}",
-              "PATH", path, "INTERFACE", interface, "ERROR", e);
-        throw;
-    }
-
-    return mapperResponse.begin()->first;
-}
-
-std::string getProperty(sdbusplus::bus::bus& bus, std::string path,
-                        std::string interface, std::string propertyName)
-{
-    std::variant<std::string> property;
-    std::string service = getService(bus, path, interface);
-
-    auto method = bus.new_method_call(service.c_str(), path.c_str(),
-                                      PROPERTY_INTERFACE, "Get");
-
-    method.append(interface, propertyName);
-
-    try
-    {
-        auto reply = bus.call(method);
-        reply.read(property);
-    }
-    catch (const sdbusplus::exception::exception& e)
-    {
-        error("Error in property Get, error {ERROR}, property {PROPERTY}",
-              "ERROR", e, "PROPERTY", propertyName);
-        throw;
-    }
-
-    if (std::get<std::string>(property).empty())
-    {
-        error("Error reading property response for {PROPERTY}", "PROPERTY",
-              propertyName);
-        throw std::runtime_error("Error reading property response");
-    }
-
-    return std::get<std::string>(property);
-}
-
-void setProperty(sdbusplus::bus::bus& bus, const std::string& path,
-                 const std::string& interface, const std::string& property,
-                 const std::string& value)
-{
-    std::variant<std::string> variantValue = value;
-    std::string service = getService(bus, path, interface);
-
-    auto method = bus.new_method_call(service.c_str(), path.c_str(),
-                                      PROPERTY_INTERFACE, "Set");
-
-    method.append(interface, property, variantValue);
-    bus.call_noreply(method);
-
-    return;
-}
-
 } // namespace manager
 } // namespace state
 } // namespace phosphor
@@ -194,9 +107,10 @@
             // one_time setting was set so we're going to use it. Reset it
             // to default for next time.
             info("One time set, use it and reset to default");
-            setProperty(bus, settings.powerRestorePolicyOneTime.c_str(),
-                        powerRestoreIntf, "PowerRestorePolicy",
-                        convertForMessage(RestorePolicy::Policy::None));
+            phosphor::state::manager::utils::setProperty(
+                bus, settings.powerRestorePolicyOneTime.c_str(),
+                powerRestoreIntf, "PowerRestorePolicy",
+                convertForMessage(RestorePolicy::Policy::None));
         }
 
         info("Host power is off, processing power policy {POWER_POLICY}",
@@ -206,11 +120,13 @@
             RestorePolicy::convertPolicyFromString(powerPolicy))
         {
             info("power_policy=ALWAYS_POWER_ON, powering host on");
-            setProperty(bus, hostPath, HOST_BUSNAME, "RestartCause",
-                        convertForMessage(
-                            server::Host::RestartCause::PowerPolicyAlwaysOn));
-            setProperty(bus, hostPath, HOST_BUSNAME, "RequestedHostTransition",
-                        convertForMessage(server::Host::Transition::On));
+            phosphor::state::manager::utils::setProperty(
+                bus, hostPath, HOST_BUSNAME, "RestartCause",
+                convertForMessage(
+                    server::Host::RestartCause::PowerPolicyAlwaysOn));
+            phosphor::state::manager::utils::setProperty(
+                bus, hostPath, HOST_BUSNAME, "RequestedHostTransition",
+                convertForMessage(server::Host::Transition::On));
         }
         else if (RestorePolicy::Policy::AlwaysOff ==
                  RestorePolicy::convertPolicyFromString(powerPolicy))
@@ -223,15 +139,16 @@
                  RestorePolicy::convertPolicyFromString(powerPolicy))
         {
             info("power_policy=RESTORE, restoring last state");
-            setProperty(
+            phosphor::state::manager::utils::setProperty(
                 bus, hostPath, HOST_BUSNAME, "RestartCause",
                 convertForMessage(
                     server::Host::RestartCause::PowerPolicyPreviousState));
             // Read last requested state and re-request it to execute it
-            auto hostReqState = getProperty(bus, hostPath, HOST_BUSNAME,
-                                            "RequestedHostTransition");
-            setProperty(bus, hostPath, HOST_BUSNAME, "RequestedHostTransition",
-                        hostReqState);
+            auto hostReqState = phosphor::state::manager::utils::getProperty(
+                bus, hostPath, HOST_BUSNAME, "RequestedHostTransition");
+            phosphor::state::manager::utils::setProperty(
+                bus, hostPath, HOST_BUSNAME, "RequestedHostTransition",
+                hostReqState);
         }
     }
     catch (const sdbusplus::exception::exception& e)
diff --git a/meson.build b/meson.build
index 1ac11e8..9dad57f 100644
--- a/meson.build
+++ b/meson.build
@@ -124,8 +124,9 @@
 executable('phosphor-discover-system-state',
             'discover_system_state.cpp',
             'settings.cpp',
+            'utils.cpp',
             dependencies: [
-            sdbusplus, phosphorlogging
+            sdbusplus, phosphorlogging, libgpiod
             ],
     implicit_include_directories: true,
     install: true
diff --git a/utils.cpp b/utils.cpp
index a93fa39..1e5e9e2 100644
--- a/utils.cpp
+++ b/utils.cpp
@@ -55,6 +55,40 @@
     return mapperResponse.begin()->first;
 }
 
+std::string getProperty(sdbusplus::bus::bus& bus, const std::string& path,
+                        const std::string& interface,
+                        const std::string& propertyName)
+{
+    std::variant<std::string> property;
+    std::string service = getService(bus, path, interface);
+
+    auto method = bus.new_method_call(service.c_str(), path.c_str(),
+                                      PROPERTY_INTERFACE, "Get");
+
+    method.append(interface, propertyName);
+
+    try
+    {
+        auto reply = bus.call(method);
+        reply.read(property);
+    }
+    catch (const sdbusplus::exception::exception& e)
+    {
+        error("Error in property Get, error {ERROR}, property {PROPERTY}",
+              "ERROR", e, "PROPERTY", propertyName);
+        throw;
+    }
+
+    if (std::get<std::string>(property).empty())
+    {
+        error("Error reading property response for {PROPERTY}", "PROPERTY",
+              propertyName);
+        throw std::runtime_error("Error reading property response");
+    }
+
+    return std::get<std::string>(property);
+}
+
 void setProperty(sdbusplus::bus::bus& bus, const std::string& path,
                  const std::string& interface, const std::string& property,
                  const std::string& value)
diff --git a/utils.hpp b/utils.hpp
index 004d97a..410f972 100644
--- a/utils.hpp
+++ b/utils.hpp
@@ -23,6 +23,19 @@
 std::string getService(sdbusplus::bus::bus& bus, std::string path,
                        std::string interface);
 
+/** @brief Get the value of input property
+ *
+ * @param[in] bus          - The Dbus bus object
+ * @param[in] path         - The Dbus object path
+ * @param[in] interface    - The Dbus interface
+ * @param[in] property     - The property name to get
+ *
+ * @return The value of the property
+ */
+std::string getProperty(sdbusplus::bus::bus& bus, const std::string& path,
+                        const std::string& interface,
+                        const std::string& propertyName);
+
 /** @brief Set the value of property
  *
  * @param[in] bus          - The Dbus bus object
