diff --git a/utility.hpp b/utility.hpp
new file mode 100644
index 0000000..a4df0cb
--- /dev/null
+++ b/utility.hpp
@@ -0,0 +1,75 @@
+#pragma once
+
+#include <phosphor-logging/log.hpp>
+#include <sdbusplus/bus.hpp>
+#include <string>
+
+namespace witherspoon
+{
+namespace power
+{
+namespace util
+{
+
+constexpr auto PROPERTY_INTF = "org.freedesktop.DBus.Properties";
+
+/**
+ * @brief Get the service name from the mapper for the
+ *        interface and path passed in.
+ *
+ * @param[in] path - the D-Bus path name
+ * @param[in] interface - the D-Bus interface name
+ * @param[in] bus - the D-Bus object
+ *
+ * @return The service name
+ */
+std::string getService(const std::string& path,
+                       const std::string& interface,
+                       sdbusplus::bus::bus& bus);
+
+/**
+ * @brief Read a D-Bus property
+ *
+ * @param[in] interface - the interface the property is on
+ * @param[in] propertName - the name of the property
+ * @param[in] path - the D-Bus path
+ * @param[in] service - the D-Bus service
+ * @param[in] bus - the D-Bus object
+ * @param[out] value - filled in with the property value
+ */
+template<typename T>
+void getProperty(const std::string& interface,
+                 const std::string& propertyName,
+                 const std::string& path,
+                 const std::string& service,
+                 sdbusplus::bus::bus& bus,
+                 T& value)
+{
+    sdbusplus::message::variant<T> property;
+
+    auto method = bus.new_method_call(service.c_str(),
+            path.c_str(),
+            PROPERTY_INTF,
+            "Get");
+
+    method.append(interface, propertyName);
+
+    auto reply = bus.call(method);
+    if (reply.is_method_error())
+    {
+        using namespace phosphor::logging;
+        log<level::ERR>("Error in property get call",
+                entry("PATH=%s", path.c_str()),
+                entry("PROPERTY=%s", propertyName.c_str()));
+        //
+        // TODO openbmc/openbmc#851 - Once available, throw returned error
+        throw std::runtime_error("Error in property get call");
+    }
+
+    reply.read(property);
+    value = sdbusplus::message::variant_ns::get<T>(property);
+}
+
+}
+}
+}
