diff --git a/attn/attn_dump.cpp b/attn/attn_dump.cpp
index 3f325bd..52bfca0 100644
--- a/attn/attn_dump.cpp
+++ b/attn/attn_dump.cpp
@@ -78,7 +78,7 @@
 }
 
 /** Request a dump from the dump manager */
-void requestDump(const DumpParameters& i_dumpParameters)
+void requestDump(uint32_t i_logId, const DumpParameters& i_dumpParameters)
 {
     constexpr auto path      = "/org/openpower/dump";
     constexpr auto interface = "xyz.openbmc_project.Dump.Create";
@@ -94,7 +94,7 @@
             std::map<std::string, std::variant<std::string, uint64_t>>
                 createParams;
             createParams["com.ibm.Dump.Create.CreateParameters.ErrorLogId"] =
-                uint64_t(i_dumpParameters.logId);
+                uint64_t(i_logId);
             if (DumpType::Hostboot == i_dumpParameters.dumpType)
             {
                 createParams["com.ibm.Dump.Create.CreateParameters.DumpType"] =
diff --git a/attn/attn_dump.hpp b/attn/attn_dump.hpp
index d7cdfac..289aea5 100644
--- a/attn/attn_dump.hpp
+++ b/attn/attn_dump.hpp
@@ -16,7 +16,6 @@
 class DumpParameters
 {
   public:
-    uint32_t logId;
     uint32_t unitId;
     DumpType dumpType;
 };
@@ -27,8 +26,9 @@
  * Request a dump from the dump manager and register a monitor for observing
  * the dump progress.
  *
+ * @param i_logId        The platform log ID associated with the dump request.
  * @param dumpParameters Parameters for the dump request
  */
-void requestDump(const DumpParameters& dumpParameters);
+void requestDump(uint32_t i_logId, const DumpParameters& dumpParameters);
 
 } // namespace attn
diff --git a/attn/attn_handler.cpp b/attn/attn_handler.cpp
index 4022d06..65bf7f9 100644
--- a/attn/attn_handler.cpp
+++ b/attn/attn_handler.cpp
@@ -249,13 +249,15 @@
         // Look for any attentions found in hardware. This will generate and
         // commit a PEL if any errors are found.
         DumpParameters dumpParameters;
-        if (true != analyzer::analyzeHardware(dumpParameters))
+        auto logid = analyzer::analyzeHardware(dumpParameters);
+        if (0 == logid)
         {
+            // A PEL should exist for a checkstop attention.
             rc = RC_ANALYZER_ERROR;
         }
         else
         {
-            requestDump(dumpParameters);
+            requestDump(logid, dumpParameters);
             util::dbus::transitionHost(util::dbus::HostState::Quiesce);
         }
     }
diff --git a/attn/attn_logging.cpp b/attn/attn_logging.cpp
index 3fb0572..279d212 100644
--- a/attn/attn_logging.cpp
+++ b/attn/attn_logging.cpp
@@ -219,9 +219,11 @@
     if (it != i_additional.end() && "true" == it->second)
     {
         DumpParameters dumpParameters;
-        if (analyzer::analyzeHardware(dumpParameters))
+        auto plid = analyzer::analyzeHardware(dumpParameters);
+        if (0 != plid)
         {
-            tiPel->setPlid(dumpParameters.logId);
+            // Link the PLID if an attention was found and a PEL was generated.
+            tiPel->setPlid(plid);
         }
     }
 
@@ -436,7 +438,7 @@
                 if ("true" == i_additional["Dump"])
                 {
                     // will not return until dump is complete
-                    requestDump(DumpParameters{pelId, 0, DumpType::Hostboot});
+                    requestDump(pelId, DumpParameters{0, DumpType::Hostboot});
                 }
             }
         }
diff --git a/attn/ti_handler.cpp b/attn/ti_handler.cpp
index 6d28458..3a82bb4 100644
--- a/attn/ti_handler.cpp
+++ b/attn/ti_handler.cpp
@@ -137,7 +137,7 @@
         {
             // retrieve log ID from TI info data
             uint32_t logId = be32toh(i_tiDataArea->asciiData1);
-            requestDump(DumpParameters{logId, 0, DumpType::Hostboot});
+            requestDump(logId, DumpParameters{0, DumpType::Hostboot});
         }
     }
 
diff --git a/attn/vital_handler.cpp b/attn/vital_handler.cpp
index c07dfc7..4d4b0ce 100644
--- a/attn/vital_handler.cpp
+++ b/attn/vital_handler.cpp
@@ -36,7 +36,7 @@
         if ((0 != pelId) && (util::dbus::HostRunningState::NotStarted ==
                              util::dbus::hostRunningState()))
         {
-            requestDump(DumpParameters{pelId, 0, DumpType::SBE});
+            requestDump(pelId, DumpParameters{0, DumpType::SBE});
         }
 
         // transition host
