diff --git a/attn/attn_common.cpp b/attn/attn_common.cpp
index 4f333e8..89d28b9 100644
--- a/attn/attn_common.cpp
+++ b/attn/attn_common.cpp
@@ -12,32 +12,6 @@
 namespace attn
 {
 
-/** @brief Transition the host state */
-void transitionHost(const HostState i_hostState)
-{
-    // The host quiesce code will handle the instruction-stop task(s)
-    // thread_stop_all(); // in libpdbg
-
-    // We will be transitioning host by starting appropriate dbus target
-    std::string target = "obmc-host-quiesce@0.target"; // quiesce is default
-
-    // crash (mpipl) mode state requested
-    if (HostState::Crash == i_hostState)
-    {
-        target = "obmc-host-crash@0.target";
-    }
-
-    auto bus    = sdbusplus::bus::new_system();
-    auto method = bus.new_method_call(
-        "org.freedesktop.systemd1", "/org/freedesktop/systemd1",
-        "org.freedesktop.systemd1.Manager", "StartUnit");
-
-    method.append(target);    // target unit to start
-    method.append("replace"); // mode = replace conflicting queued jobs
-
-    bus.call_noreply(method); // start the service
-}
-
 /** @brief Traces some regs for hostboot */
 void addHbStatusRegs()
 {
diff --git a/attn/attn_common.hpp b/attn/attn_common.hpp
index 67d3f71..6f4428d 100644
--- a/attn/attn_common.hpp
+++ b/attn/attn_common.hpp
@@ -33,22 +33,6 @@
     ATTN_PDBG_SCOM = 3
 };
 
-enum class HostState
-{
-    Quiesce,
-    Diagnostic,
-    Crash
-};
-
-/**
- * @brief Transition the host state
- *
- * We will transition the host state by starting the appropriate dbus target.
- *
- * @param i_hostState the state to transition the host to
- */
-void transitionHost(const HostState i_hostState);
-
 /**
  * @brief Traces some regs for hostboot
  *
diff --git a/attn/ti_handler.cpp b/attn/ti_handler.cpp
index 69191ab..fb0893f 100644
--- a/attn/ti_handler.cpp
+++ b/attn/ti_handler.cpp
@@ -5,6 +5,7 @@
 #include <attn/ti_handler.hpp>
 #include <sdbusplus/bus.hpp>
 #include <sdbusplus/exception.hpp>
+#include <util/dbus.hpp>
 
 #include <iomanip>
 #include <iostream>
@@ -100,12 +101,12 @@
     if (autoRebootEnabled())
     {
         // If autoreboot is enabled we will start crash (mpipl) mode target
-        transitionHost(HostState::Crash);
+        util::dbus::transitionHost(util::dbus::HostState::Crash);
     }
     else
     {
         // If autoreboot is disabled we will quiesce the host
-        transitionHost(HostState::Quiesce);
+        util::dbus::transitionHost(util::dbus::HostState::Quiesce);
     }
 }
 
@@ -253,7 +254,7 @@
 
     if (true == terminateHost)
     {
-        transitionHost(HostState::Quiesce);
+        util::dbus::transitionHost(util::dbus::HostState::Quiesce);
     }
 }
 
diff --git a/attn/vital_handler.cpp b/attn/vital_handler.cpp
index b0a771e..910c005 100644
--- a/attn/vital_handler.cpp
+++ b/attn/vital_handler.cpp
@@ -2,6 +2,7 @@
 #include <attn/attn_common.hpp>
 #include <attn/attn_logging.hpp>
 #include <sdbusplus/bus.hpp>
+#include <util/dbus.hpp>
 
 namespace attn
 {
@@ -28,7 +29,7 @@
     else
     {
         // transition host state after analyses
-        transitionHost(HostState::Quiesce);
+        util::dbus::transitionHost(util::dbus::HostState::Quiesce);
 
         // generate pel
         eventVital();
diff --git a/util/dbus.cpp b/util/dbus.cpp
index 7e8a234..968a44f 100644
--- a/util/dbus.cpp
+++ b/util/dbus.cpp
@@ -165,6 +165,38 @@
     return names;
 }
 
+/** @brief Transition the host state */
+void transitionHost(const HostState i_hostState)
+{
+    try
+    {
+        // We will be transitioning host by starting appropriate dbus target
+        std::string target = "obmc-host-quiesce@0.target"; // quiesce is default
+
+        // crash (mpipl) mode state requested
+        if (HostState::Crash == i_hostState)
+        {
+            target = "obmc-host-crash@0.target";
+        }
+
+        auto bus    = sdbusplus::bus::new_system();
+        auto method = bus.new_method_call(
+            "org.freedesktop.systemd1", "/org/freedesktop/systemd1",
+            "org.freedesktop.systemd1.Manager", "StartUnit");
+
+        method.append(target);    // target unit to start
+        method.append("replace"); // mode = replace conflicting queued jobs
+
+        bus.call_noreply(method); // start the service
+    }
+    catch (const sdbusplus::exception::SdBusError& e)
+    {
+        trace::err("util::dbus::transitionHost exception");
+        std::string traceMsg = std::string(e.what());
+        trace::err(traceMsg.c_str());
+    }
+}
+
 } // namespace dbus
 
 } // namespace util
diff --git a/util/dbus.hpp b/util/dbus.hpp
index 03fb5be..66a2ad4 100644
--- a/util/dbus.hpp
+++ b/util/dbus.hpp
@@ -64,6 +64,23 @@
  */
 std::vector<std::string> systemNames();
 
+/** @brief Host states for util::dbus host state operations */
+enum class HostState
+{
+    Quiesce,
+    Diagnostic,
+    Crash
+};
+
+/**
+ * @brief Transition the host state
+ *
+ * We will transition the host state by starting the appropriate dbus target.
+ *
+ * @param i_hostState the state to transition the host to
+ */
+void transitionHost(const HostState i_hostState);
+
 } // namespace dbus
 
 } // namespace util
