diff --git a/analyzer/analyzer_main.cpp b/analyzer/analyzer_main.cpp
index 71d47e9..c17a0ee 100644
--- a/analyzer/analyzer_main.cpp
+++ b/analyzer/analyzer_main.cpp
@@ -34,10 +34,10 @@
  * @brief Will create and submit a PEL using the given data.
  * @param i_isoData   The data gathered during isolation (for FFDC).
  * @param i_servData  Data regarding service actions gathered during analysis.
- * @return Tuple of BMC log id, platform log id
+ * @return The platform log ID. Will return zero if no PEL is generated.
  */
-std::tuple<uint32_t, uint32_t> createPel(const libhei::IsolationData& i_isoData,
-                                         const ServiceData& i_servData);
+uint32_t createPel(const libhei::IsolationData& i_isoData,
+                   const ServiceData& i_servData);
 
 //------------------------------------------------------------------------------
 
@@ -70,14 +70,14 @@
 
 //------------------------------------------------------------------------------
 
-bool analyzeHardware(attn::DumpParameters& o_dumpParameters)
+uint32_t analyzeHardware(attn::DumpParameters& o_dumpParameters)
 {
-    bool attnFound = false;
+    uint32_t o_plid = 0; // default, zero indicates PEL was not created
 
     if (!util::pdbg::queryHardwareAnalysisSupported())
     {
         trace::err("Hardware error analysis is not supported on this system");
-        return attnFound;
+        return o_plid;
     }
 
     trace::inf(">>> enter analyzeHardware()");
@@ -102,7 +102,7 @@
 
     // Filter for root cause attention.
     libhei::Signature rootCause{};
-    attnFound = filterRootCause(isoData, rootCause);
+    bool attnFound = filterRootCause(isoData, rootCause);
 
     if (!attnFound)
     {
@@ -124,18 +124,24 @@
         rasData.getResolution(rootCause)->resolve(servData);
 
         // Create and commit a PEL.
-        uint32_t logId = std::get<1>(createPel(isoData, servData));
+        o_plid = createPel(isoData, servData);
 
-        trace::inf("PEL created: PLID=0x%0" PRIx32, logId);
+        if (0 == o_plid)
+        {
+            trace::err("Failed to create PEL");
+        }
+        else
+        {
+            trace::inf("PEL created: PLID=0x%0" PRIx32, o_plid);
 
-        // Gather/return information needed for dump. A hardware dump will
-        // always be used for system checkstop attenions. Software dumps will be
-        // reserved for MP-IPLs during TI analysis.
-        // TODO: Need ID from root cause. At the moment, HUID does not exist in
-        //       devtree. Will need a better ID definition.
-        o_dumpParameters.logId    = logId;
-        o_dumpParameters.unitId   = 0;
-        o_dumpParameters.dumpType = attn::DumpType::Hardware;
+            // Gather/return information needed for dump. A hardware dump will
+            // always be used for system checkstop attenions. Software dumps
+            // will be reserved for MP-IPLs during TI analysis.
+            // TODO: Need ID from root cause. At the moment, HUID does not exist
+            //       in devtree. Will need a better ID definition.
+            o_dumpParameters.unitId   = 0;
+            o_dumpParameters.dumpType = attn::DumpType::Hardware;
+        }
     }
 
     // All done, clean up the isolator.
@@ -144,7 +150,7 @@
 
     trace::inf("<<< exit analyzeHardware()");
 
-    return attnFound;
+    return o_plid;
 }
 
 //------------------------------------------------------------------------------
diff --git a/analyzer/analyzer_main.hpp b/analyzer/analyzer_main.hpp
index 5619ba3..51399b0 100644
--- a/analyzer/analyzer_main.hpp
+++ b/analyzer/analyzer_main.hpp
@@ -11,18 +11,10 @@
  *         attentions.
  *
  * @param[out] o_dumpParameters Dump request parameters
- * @return True if an active attenion was successfully analyzed, false
- *         otherwise.
- *         For system checkstop handling:
- *            If analysis fails, there likely is a defect in the design because
- *            an active attention is required to trigger the interrupt.
- *         For TI handling:
- *            It is possible that a recoverable attention could cause a TI,
- *            however, it is not required. Therefore, it is expected that
- *            analysis could fail to find an attention and it should not be
- *            treated as a defect.
+ * @return The platform log ID (PLID) of the PEL generated during analysis. Will
+ *         return zero if no PEL is generated.
  */
-bool analyzeHardware(attn::DumpParameters& o_dumpParameters);
+uint32_t analyzeHardware(attn::DumpParameters& o_dumpParameters);
 
 /**
  * @brief Get error analyzer build information
diff --git a/analyzer/create_pel.cpp b/analyzer/create_pel.cpp
index adc2264..bef001e 100644
--- a/analyzer/create_pel.cpp
+++ b/analyzer/create_pel.cpp
@@ -308,9 +308,11 @@
 
 //------------------------------------------------------------------------------
 
-std::tuple<uint32_t, uint32_t> createPel(const libhei::IsolationData& i_isoData,
-                                         const ServiceData& i_servData)
+uint32_t createPel(const libhei::IsolationData& i_isoData,
+                   const ServiceData& i_servData)
 {
+    uint32_t o_plid = 0; // default, zero indicates PEL was not created
+
     // The message registry will require additional log data to fill in keywords
     // and additional log data.
     std::map<std::string, std::string> logData;
@@ -348,9 +350,6 @@
     std::vector<util::FFDCTuple> userData;
     util::transformFFDC(userDataFiles, userData);
 
-    // Response will be a tuple containing bmc-log-id, pel-log-id
-    std::tuple<uint32_t, uint32_t> response = {0, 0};
-
     try
     {
         // We want to use the logging interface that returns the event log
@@ -387,8 +386,13 @@
             // Log the event.
             auto reply = bus.call(method);
 
+            // Response will be a tuple containing bmc-log-id, pel-log-id
+            std::tuple<uint32_t, uint32_t> response = {0, 0};
+
             // Parse reply for response
             reply.read(response);
+
+            o_plid = std::get<1>(response);
         }
     }
     catch (const sdbusplus::exception::SdBusError& e)
@@ -398,8 +402,8 @@
         trace::err(exceptionString.c_str());
     }
 
-    // return tuple of {bmc-log-id, pel-log-id} or {0, 0} on error
-    return response;
+    // Return the platorm log ID of the error.
+    return o_plid;
 }
 
 } // namespace analyzer
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
diff --git a/main.cpp b/main.cpp
index 5bce1a5..c63cb80 100644
--- a/main.cpp
+++ b/main.cpp
@@ -11,7 +11,7 @@
  * This is the main interface to the hardware diagnostics application. This
  * application will either be loaded as a daemon for monitoring the attention
  * gpio or it will be loaded as an application to analyze hardware and
- * diagnose hadrware error conditions.
+ * diagnose hardware error conditions.
  *
  *     Usage:
  *        --analyze:              Analyze the hardware
@@ -60,7 +60,8 @@
         // Either analyze (application mode) or daemon mode
         if (true == getCliOption(argv, argv + argc, "--analyze"))
         {
-            rc = analyzer::analyzeHardware(); // analyze hardware
+            attn::DumpParameters dumpParameters;
+            analyzer::analyzeHardware(dumpParameters); // analyze hardware
         }
         // daemon mode
         else
diff --git a/main_nl.cpp b/main_nl.cpp
index 16baa36..227c6a6 100644
--- a/main_nl.cpp
+++ b/main_nl.cpp
@@ -49,7 +49,7 @@
         if (true == getCliOption(argv, argv + argc, "--analyze"))
         {
             attn::DumpParameters dumpParameters;
-            rc = analyzer::analyzeHardware(dumpParameters); // analyze hardware
+            analyzer::analyzeHardware(dumpParameters); // analyze hardware
         }
         // daemon mode
         else
