diff --git a/analyzer/analyzer_main.cpp b/analyzer/analyzer_main.cpp
index 55726bd..4be14f5 100644
--- a/analyzer/analyzer_main.cpp
+++ b/analyzer/analyzer_main.cpp
@@ -24,11 +24,13 @@
 
 /**
  * @brief  Will get the list of active chip and initialize the isolator.
+ * @param  i_type      The type of analysis to perform. See enum for details.
  * @param  i_isoData   The data gathered during isolation (for FFDC).
  * @param  o_rootCause The returned root cause signature.
  * @return True, if root cause has been found. False, otherwise.
  */
-bool filterRootCause(const libhei::IsolationData& i_isoData,
+bool filterRootCause(AnalysisType i_type,
+                     const libhei::IsolationData& i_isoData,
                      libhei::Signature& o_rootCause);
 
 /**
@@ -126,7 +128,7 @@
 
     // Filter for root cause attention.
     libhei::Signature rootCause{};
-    bool attnFound = filterRootCause(isoData, rootCause);
+    bool attnFound = filterRootCause(i_type, isoData, rootCause);
 
     // If a root cause attention was found, or if this was a system checkstop,
     // generate a PEL.
diff --git a/analyzer/filter-root-cause.cpp b/analyzer/filter-root-cause.cpp
index 7533174..6455f27 100644
--- a/analyzer/filter-root-cause.cpp
+++ b/analyzer/filter-root-cause.cpp
@@ -1,5 +1,6 @@
 #include <assert.h>
 
+#include <analyzer_main.hpp>
 #include <hei_main.hpp>
 #include <util/pdbg.hpp>
 
@@ -345,27 +346,22 @@
 
 //------------------------------------------------------------------------------
 
-bool filterRootCause(const libhei::IsolationData& i_isoData,
+bool filterRootCause(AnalysisType i_type,
+                     const libhei::IsolationData& i_isoData,
                      libhei::Signature& o_rootCause)
 {
     // We'll need to make a copy of the list so that the original list is
-    // maintained for the log.
+    // maintained for the PEL.
     std::vector<libhei::Signature> list{i_isoData.getSignatureList()};
 
     // START WORKAROUND
     // TODO: Filtering should be data driven. Until that support is available,
     //       use the following isolation rules.
 
-    // Special and host attentions are not supported by this user application.
-    auto itr = std::remove_if(list.begin(), list.end(), [&](const auto& t) {
-        return (libhei::ATTN_TYPE_SP_ATTN == t.getAttnType() ||
-                libhei::ATTN_TYPE_HOST_ATTN == t.getAttnType());
-    });
-    list.resize(std::distance(list.begin(), itr));
-
+    // Ensure the list is not empty before continuing.
     if (list.empty())
     {
-        return false; // the list is empty, nothing more to do
+        return false; // nothing more to do
     }
 
     // First, look for any RCS OSC errors. This must always be first because
@@ -383,6 +379,9 @@
         return true;
     }
 
+    // Regardless of the analysis type, always look for anything that could be
+    // blamed as the root cause of a system checkstop.
+
     // Memory channel failure attentions will produce SUEs and likely cause
     // downstream attentions, including a system checkstop.
     if (__findMemoryChannelFailure(list, o_rootCause))
@@ -417,26 +416,30 @@
         return true;
     }
 
-    if (!list.empty())
+    if (AnalysisType::SYSTEM_CHECKSTOP != i_type)
     {
-        // TODO: At this point, we have not found any known errors that could be
-        //       attributed to a system checkstop attention. This would be an
-        //       isolation error if this function is called specifically for
-        //       checkstop analysis, but this function currently is called for
-        //       TIs and manual analysis as well. For now, we'll just sort the
-        //       remaining list (recoverable, unit checkstop, and then system
-        //       checkstop) and return the first element in the list. Later,
-        //       we'll change this to properly handle error path scenarios.
+        // No system checkstop root cause attentions were found. Next, look for
+        // any recoverable or unit checkstop attentions that could be associated
+        // with a TI.
 
-        // Fortunately, we just need to sort the list by the greater attention
-        // type value.
-        std::sort(list.begin(), list.end(), [&](const auto& a, const auto& b) {
-            return a.getAttnType() > b.getAttnType();
+        auto itr = std::find_if(list.begin(), list.end(), [&](const auto& t) {
+            return (libhei::ATTN_TYPE_RECOVERABLE == t.getAttnType() ||
+                    libhei::ATTN_TYPE_UNIT_CS == t.getAttnType());
         });
 
-        // The entry at the front of the list will be the root cause.
-        o_rootCause = list.front();
-        return true;
+        if (list.end() != itr)
+        {
+            o_rootCause = *itr;
+            return true;
+        }
+
+        if (AnalysisType::TERMINATE_IMMEDIATE != i_type)
+        {
+            // No attentions associated with a system checkstop or TI were
+            // found. Simply, return the first entry in the list.
+            o_rootCause = list.front();
+            return true;
+        }
     }
 
     // END WORKAROUND
