diff --git a/attn/attn_dump.cpp b/attn/attn_dump.cpp
index 95976be..3f325bd 100644
--- a/attn/attn_dump.cpp
+++ b/attn/attn_dump.cpp
@@ -108,6 +108,14 @@
                     ["com.ibm.Dump.Create.CreateParameters.FailingUnitId"] =
                         i_dumpParameters.unitId;
             }
+            else if (DumpType::SBE == i_dumpParameters.dumpType)
+            {
+                createParams["com.ibm.Dump.Create.CreateParameters.DumpType"] =
+                    "com.ibm.Dump.Create.DumpType.SBE";
+                createParams
+                    ["com.ibm.Dump.Create.CreateParameters.FailingUnitId"] =
+                        i_dumpParameters.unitId;
+            }
             method.append(createParams);
 
             // using system dbus
diff --git a/attn/attn_dump.hpp b/attn/attn_dump.hpp
index 6480b15..04c51e7 100644
--- a/attn/attn_dump.hpp
+++ b/attn/attn_dump.hpp
@@ -7,7 +7,8 @@
 enum class DumpType
 {
     Hostboot,
-    Hardware
+    Hardware,
+    SBE
 };
 
 /** @brief Structure for dump request parameters */
diff --git a/attn/attn_logging.cpp b/attn/attn_logging.cpp
index d85a66c..8aed00f 100644
--- a/attn/attn_logging.cpp
+++ b/attn/attn_logging.cpp
@@ -332,10 +332,14 @@
  * @param  i_event - The event type
  * @param  i_additional - Additional PEL data
  * @param  i_ffdc - FFDC PEL data
+ * @return Event log Id (0 if no event log generated)
  */
-void event(EventType i_event, std::map<std::string, std::string>& i_additional,
-           const std::vector<util::FFDCFile>& i_ffdc)
+uint32_t event(EventType i_event,
+               std::map<std::string, std::string>& i_additional,
+               const std::vector<util::FFDCFile>& i_ffdc)
 {
+    uint32_t pelId = 0; // assume no event log generated
+
     bool eventValid = false; // assume no event created
     bool tiEvent    = false; // assume not a terminate event
 
@@ -370,8 +374,7 @@
     {
         // Create PEL with additional data and FFDC data. The newly created
         // PEL's platform log-id will be returned.
-        auto pelId =
-            createPel(eventName, i_additional, createFFDCTuples(i_ffdc));
+        pelId = createPel(eventName, i_additional, createFFDCTuples(i_ffdc));
 
         // If this is a TI event we will create an additional PEL that is
         // specific to the subsystem that generated the TI.
@@ -420,6 +423,7 @@
             }
         }
     }
+    return pelId;
 }
 
 /**
@@ -465,14 +469,14 @@
           createFFDCFiles(i_tiInfoData, tiInfoSize));
 }
 
-/** @brief Commit SBE vital event to log */
-void eventVital()
+/** @brief Commit SBE vital event to log, returns event log ID */
+uint32_t eventVital()
 {
     // Additional data for log
     std::map<std::string, std::string> additionalData;
 
     // Create log event with additional data and FFDC data
-    event(EventType::Vital, additionalData, createFFDCFiles(nullptr, 0));
+    return event(EventType::Vital, additionalData, createFFDCFiles(nullptr, 0));
 }
 
 /**
diff --git a/attn/attn_logging.hpp b/attn/attn_logging.hpp
index 842f677..e790d94 100644
--- a/attn/attn_logging.hpp
+++ b/attn/attn_logging.hpp
@@ -44,8 +44,8 @@
 void eventTerminate(std::map<std::string, std::string> i_additionalData,
                     char* i_tiInfoData);
 
-/** @brief Commit SBE vital event to log */
-void eventVital();
+/** @brief Commit SBE vital event to log, returns event log Id */
+uint32_t eventVital();
 
 /** @brief Commit attention handler failure event to log */
 void eventAttentionFail(int i_error);
diff --git a/attn/vital_handler.cpp b/attn/vital_handler.cpp
index 910c005..c07dfc7 100644
--- a/attn/vital_handler.cpp
+++ b/attn/vital_handler.cpp
@@ -1,5 +1,6 @@
 #include <attn/attention.hpp>
 #include <attn/attn_common.hpp>
+#include <attn/attn_dump.hpp>
 #include <attn/attn_logging.hpp>
 #include <sdbusplus/bus.hpp>
 #include <util/dbus.hpp>
@@ -28,11 +29,18 @@
     }
     else
     {
-        // transition host state after analyses
-        util::dbus::transitionHost(util::dbus::HostState::Quiesce);
-
         // generate pel
-        eventVital();
+        auto pelId = eventVital();
+
+        // conditionally request dump
+        if ((0 != pelId) && (util::dbus::HostRunningState::NotStarted ==
+                             util::dbus::hostRunningState()))
+        {
+            requestDump(DumpParameters{pelId, 0, DumpType::SBE});
+        }
+
+        // transition host
+        util::dbus::transitionHost(util::dbus::HostState::Quiesce);
     }
 
     return rc;
