diff --git a/include/error_monitors/err2_monitor.hpp b/include/error_monitors/err2_monitor.hpp
index 9477fa6..d6dd9a1 100644
--- a/include/error_monitors/err2_monitor.hpp
+++ b/include/error_monitors/err2_monitor.hpp
@@ -40,7 +40,7 @@
             [this](boost::system::error_code ec,
                    const std::variant<bool>& property) {
                 // Default to no reset after Crashdump
-                bool reset = false;
+                RecoveryType recovery = RecoveryType::noRecovery;
                 if (!ec)
                 {
                     const bool* resetPtr = std::get_if<bool>(&property);
@@ -48,12 +48,12 @@
                     {
                         std::cerr << "Unable to read reset on ERR2 value\n";
                     }
-                    else
+                    else if (*resetPtr)
                     {
-                        reset = *resetPtr;
+                        recovery = RecoveryType::warmReset;
                     }
                 }
-                startCrashdumpAndRecovery(conn, reset, "ERR2 Timeout");
+                startCrashdumpAndRecovery(conn, recovery, "ERR2 Timeout");
             },
             "xyz.openbmc_project.Settings",
             "/xyz/openbmc_project/control/processor_error_config",
diff --git a/include/error_monitors/ierr_monitor.hpp b/include/error_monitors/ierr_monitor.hpp
index 7fda1af..5babf50 100644
--- a/include/error_monitors/ierr_monitor.hpp
+++ b/include/error_monitors/ierr_monitor.hpp
@@ -368,7 +368,7 @@
             [this](boost::system::error_code ec,
                    const std::variant<bool>& property) {
                 // Default to no reset after Crashdump
-                bool reset = false;
+                RecoveryType recovery = RecoveryType::noRecovery;
                 if (!ec)
                 {
                     const bool* resetPtr = std::get_if<bool>(&property);
@@ -376,12 +376,12 @@
                     {
                         std::cerr << "Unable to read reset on CATERR value\n";
                     }
-                    else
+                    else if (*resetPtr)
                     {
-                        reset = *resetPtr;
+                        recovery = RecoveryType::warmReset;
                     }
                 }
-                startCrashdumpAndRecovery(conn, reset, "IERR");
+                startCrashdumpAndRecovery(conn, recovery, "IERR");
             },
             "xyz.openbmc_project.Settings",
             "/xyz/openbmc_project/control/processor_error_config",
diff --git a/include/host_error_monitor.hpp b/include/host_error_monitor.hpp
index eacb1cb..c4652d0 100644
--- a/include/host_error_monitor.hpp
+++ b/include/host_error_monitor.hpp
@@ -64,13 +64,41 @@
             "xyz.openbmc_project.State.Host.Transition.ForceWarmReboot"});
 }
 
+enum class RecoveryType
+{
+    noRecovery,
+    powerCycle,
+    warmReset,
+};
+
+static inline void
+    handleRecovery(RecoveryType recovery, boost::asio::io_context& io,
+                   std::shared_ptr<sdbusplus::asio::connection> conn)
+{
+    switch (recovery)
+    {
+        case RecoveryType::noRecovery:
+            std::cerr << "Recovery is disabled. Leaving the system "
+                         "in the failed state.\n";
+            break;
+        case RecoveryType::powerCycle:
+            std::cerr << "Recovering the system with a power cycle\n";
+            startPowerCycle(conn);
+            break;
+        case RecoveryType::warmReset:
+            std::cerr << "Recovering the system with a warm reset\n";
+            startWarmReset(conn);
+            break;
+    }
+}
+
 void startCrashdumpAndRecovery(
-    std::shared_ptr<sdbusplus::asio::connection> conn, bool recoverSystem,
-    const std::string& triggerType)
+    std::shared_ptr<sdbusplus::asio::connection> conn,
+    RecoveryType requestedRecovery, const std::string& triggerType)
 {
 #ifdef CRASHDUMP
-    static bool recover;
-    recover = recoverSystem;
+    static RecoveryType recovery;
+    recovery = requestedRecovery;
     std::cerr << "Starting crashdump\n";
     static std::shared_ptr<sdbusplus::bus::match::match> crashdumpCompleteMatch;
 
@@ -82,11 +110,7 @@
             "CrashdumpComplete'",
             [conn](sdbusplus::message::message& msg) {
                 std::cerr << "Crashdump completed\n";
-                if (recover)
-                {
-                    std::cerr << "Recovering the system\n";
-                    startWarmReset(conn);
-                }
+                handleRecovery(recovery, io, conn);
                 crashdumpCompleteMatch.reset();
             });
     }
