diff --git a/watchdog/watchdog_main.cpp b/watchdog/watchdog_main.cpp
index b124be3..e650f70 100644
--- a/watchdog/watchdog_main.cpp
+++ b/watchdog/watchdog_main.cpp
@@ -33,6 +33,42 @@
     transitionHost(HOST_STATE_QUIESCE_TGT);
 }
 
+void triggerSystemDump()
+{
+    try
+    {
+        // Create a PEL may be before setting the target
+        constexpr auto eventName =
+            "org.open_power.Host.Boot.Error.WatchdogTimedOut";
+
+        // CreatePELWithFFDCFiles requires a vector of FFDCTuple.
+        auto emptyFfdc = std::vector<FFDCTuple>{};
+
+        std::map<std::string, std::string> additionalData;
+
+        // Create PEL with empty additional data.
+        createPel(eventName, additionalData, emptyFfdc);
+
+        // We will be transitioning host by starting appropriate dbus target
+        constexpr auto 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)
+    {
+        lg2::error("triggerMPIPLDump:: D-Bus call exception, errorMsg({ERROR})",
+                   "ERROR", e.what());
+    }
+}
+
 /**
  * @brief get SBE special callout information
  *
diff --git a/watchdog/watchdog_main.hpp b/watchdog/watchdog_main.hpp
index bb90ee2..b915a0c 100644
--- a/watchdog/watchdog_main.hpp
+++ b/watchdog/watchdog_main.hpp
@@ -26,5 +26,13 @@
  */
 void handleSbeBootError(struct pdbg_target* procTarget, const uint32_t timeout);
 
+/**
+ * @brief creates a PEL and triggers System dump
+ *
+ * @details This function creates the PEL and then triggers System dump
+ *
+ */
+void triggerSystemDump();
+
 } // namespace dump
 } // namespace watchdog
diff --git a/watchdog_timeout.cpp b/watchdog_timeout.cpp
index f616312..aa2ed0a 100644
--- a/watchdog_timeout.cpp
+++ b/watchdog_timeout.cpp
@@ -62,9 +62,22 @@
                 return EXIT_SUCCESS;
             }
 
-            // SBE boot done, Need to collect hostboot dump
-            lg2::info("Handle Hostboot boot failure");
-            triggerHostbootDump(timeout);
+            // If the hostboot has transitioned to hypervisor, and there is a
+            // failure before hypervisor is loaded we will hit the below piece
+            // of code, so trigger system dump
+            if (openpower::phal::pdbg::hasControlTransitionedToHost())
+            {
+                // hostboot done, Need to collect system dump
+                lg2::info(
+                    "Failure while loading hypervisor, triggering system dump");
+                triggerSystemDump();
+            }
+            else
+            {
+                // SBE boot done, Need to collect hostboot dump
+                lg2::info("Handle Hostboot boot failure");
+                triggerHostbootDump(timeout);
+            }
         }
         else
         {
