diff --git a/dump/dump_monitor.cpp b/dump/dump_monitor.cpp
index 6595cf5..0afe7ca 100644
--- a/dump/dump_monitor.cpp
+++ b/dump/dump_monitor.cpp
@@ -118,7 +118,7 @@
             {
                 lg2::info("An entry created, collecting a new dump {DUMP}",
                           "DUMP", interfaceName);
-                executeCollectionScript(objectPath, it->second);
+                initiateDumpCollection(objectPath, interfaceName, it->second);
             }
         }
     }
@@ -147,4 +147,55 @@
     }
 }
 
+void DumpMonitor::startMpReboot(
+    const sdbusplus::message::object_path& objectPath)
+{
+    constexpr auto systemdService = "org.freedesktop.systemd1";
+    constexpr auto systemdObjPath = "/org/freedesktop/systemd1";
+    constexpr auto systemdInterface = "org.freedesktop.systemd1.Manager";
+    constexpr auto diagModeTarget = "obmc-host-crash@0.target";
+
+    try
+    {
+        auto b = sdbusplus::bus::new_default();
+        auto method = b.new_method_call(systemdService, systemdObjPath,
+                                        systemdInterface, "StartUnit");
+        method.append(diagModeTarget); // unit to activate
+        method.append("replace");
+        b.call_noreply(method);
+    }
+    catch (const sdbusplus::exception_t& e)
+    {
+        lg2::error("Failed to start memory preserving reboot");
+        updateProgressStatus(objectPath, dumpStatusFailed);
+    }
+}
+
+void DumpMonitor::initiateDumpCollection(const std::string& path,
+                                         const std::string& intf,
+                                         const PropertyMap& properties)
+{
+    using namespace sdbusplus::common::xyz::openbmc_project::dump::entry;
+    if (intf == System::interface)
+    {
+        // Find the SystemImpact property, if this property is not
+        // available assume disruptive.
+        auto systemImpactIt = properties.find("SystemImpact");
+        if (systemImpactIt != properties.end() &&
+            std::get<std::string>(systemImpactIt->second) !=
+                System::convertSystemImpactToString(
+                    System::SystemImpact::Disruptive))
+        {
+            lg2::info("Ignoring non-disruptive system dump {PATH}", "PATH",
+                      path);
+            return;
+        }
+        startMpReboot(path);
+    }
+    else
+    {
+        executeCollectionScript(path, properties);
+    }
+}
+
 } // namespace openpower::dump
diff --git a/dump/dump_monitor.hpp b/dump/dump_monitor.hpp
index c9c4021..b499dba 100644
--- a/dump/dump_monitor.hpp
+++ b/dump/dump_monitor.hpp
@@ -10,6 +10,7 @@
 #include <sdbusplus/bus.hpp>
 #include <sdbusplus/bus/match.hpp>
 #include <xyz/openbmc_project/Common/Progress/common.hpp>
+#include <xyz/openbmc_project/Dump/Entry/System/common.hpp>
 
 #include <iostream>
 #include <string>
@@ -20,6 +21,7 @@
 
 using PropertyMap = std::map<std::string, std::variant<uint32_t, std::string>>;
 using InterfaceMap = std::map<std::string, PropertyMap>;
+
 /**
  * @class DumpMonitor
  * @brief Monitors DBus signals for dump creation and handles them.
@@ -57,7 +59,7 @@
     /* @brief Monitores dump interfaces */
     const std::vector<std::string> monitoredInterfaces = {
         "com.ibm.Dump.Entry.Hardware", "com.ibm.Dump.Entry.Hostboot",
-        "com.ibm.Dump.Entry.SBE"};
+        "com.ibm.Dump.Entry.SBE", "xyz.openbmc_project.Dump.Entry.System"};
 
     /* @brief InterfaceAdded match */
     sdbusplus::bus::match_t match;
@@ -129,6 +131,24 @@
         }
         return 0;
     }
+
+    /**
+     * @brief Initiates the dump collection process based on the given interface
+     *        and properties.
+     *
+     * @param[in] path The object path of the dump entry.
+     * @param[in] intf The interface type of the dump entry.
+     * @param[in] properties The properties of the dump entry.
+     */
+    void initiateDumpCollection(const std::string& path,
+                                const std::string& intf,
+                                const PropertyMap& properties);
+
+    /**
+     * @brief Initiates a memory-preserving reboot by starting the
+     *        appropriate systemd unit.
+     */
+    void startMpReboot(const sdbusplus::message::object_path& objectPath);
 };
 
 } // namespace openpower::dump
