diff --git a/attn/ti_handler.cpp b/attn/ti_handler.cpp
index fb0893f..de692ac 100644
--- a/attn/ti_handler.cpp
+++ b/attn/ti_handler.cpp
@@ -98,7 +98,7 @@
 
     // We are finished creating the event log entries so transition host to
     // the required state.
-    if (autoRebootEnabled())
+    if (true == util::dbus::autoRebootEnabled())
     {
         // If autoreboot is enabled we will start crash (mpipl) mode target
         util::dbus::transitionHost(util::dbus::HostState::Crash);
@@ -392,39 +392,6 @@
     }
 }
 
-/** @brief Read state of autoreboot propertyi via dbus */
-bool autoRebootEnabled()
-{
-    // Use dbus get-property interface to read the autoreboot property
-    auto bus = sdbusplus::bus::new_system();
-    auto method =
-        bus.new_method_call("xyz.openbmc_project.Settings",
-                            "/xyz/openbmc_project/control/host0/auto_reboot",
-                            "org.freedesktop.DBus.Properties", "Get");
-
-    method.append("xyz.openbmc_project.Control.Boot.RebootPolicy",
-                  "AutoReboot");
-
-    bool autoReboot = false; // assume autoreboot attribute not available
-
-    try
-    {
-        auto reply = bus.call(method);
-
-        std::variant<bool> result;
-        reply.read(result);
-        autoReboot = std::get<bool>(result);
-    }
-    catch (const sdbusplus::exception::SdBusError& e)
-    {
-        trace<level::INFO>("autoRebootEnbabled exception");
-        std::string traceMsg = std::string(e.what(), maxTraceLen);
-        trace<level::ERROR>(traceMsg.c_str());
-    }
-
-    return autoReboot;
-}
-
 /**
  *  Callback for dump request properties change signal monitor
  *
diff --git a/attn/ti_handler.hpp b/attn/ti_handler.hpp
index 23cc58b..9472c2c 100644
--- a/attn/ti_handler.hpp
+++ b/attn/ti_handler.hpp
@@ -125,14 +125,6 @@
                    TiDataArea* i_tiDataArea);
 
 /**
- * @brief Read autoreboot property
- *
- * Read the autoreboot property via dbus. This status will be used to
- * determine whether to either mpipl or quiesce the host on TI condition.
- */
-bool autoRebootEnabled();
-
-/**
  * Request a dump from the dump manager
  *
  * Request a dump from the dump manager and register a monitor for observing
diff --git a/util/dbus.cpp b/util/dbus.cpp
index 968a44f..e9526df 100644
--- a/util/dbus.cpp
+++ b/util/dbus.cpp
@@ -197,6 +197,34 @@
     }
 }
 
+/** @brief Read state of autoreboot propertyi via dbus */
+bool autoRebootEnabled()
+{
+    bool autoReboot = false; // assume autoreboot attribute not available
+
+    constexpr auto interface = "xyz.openbmc_project.Control.Boot.RebootPolicy";
+
+    DBusService service;
+    DBusPath path;
+
+    // find a dbus object and path that implements the interface
+    if (0 == find(interface, path, service))
+    {
+        DBusValue value;
+
+        // autoreboot policy is implemented as a property
+        constexpr auto property = "AutoReboot";
+
+        if (0 == getProperty(interface, path, service, property, value))
+        {
+            // return value is a variant, autoreboot policy is boolean
+            autoReboot = std::get<bool>(value);
+        }
+    }
+
+    return autoReboot;
+}
+
 } // namespace dbus
 
 } // namespace util
diff --git a/util/dbus.hpp b/util/dbus.hpp
index 66a2ad4..d1e152f 100644
--- a/util/dbus.hpp
+++ b/util/dbus.hpp
@@ -81,6 +81,14 @@
  */
 void transitionHost(const HostState i_hostState);
 
+/**
+ * @brief Read autoreboot property
+ *
+ * Read the autoreboot property via dbus. This status will be used to
+ * determine whether to either mpipl or quiesce the host on TI condition.
+ */
+bool autoRebootEnabled();
+
 } // namespace dbus
 
 } // namespace util
