diff --git a/analyzer/analyzer_main.cpp b/analyzer/analyzer_main.cpp
index 1db3efe..24839eb 100644
--- a/analyzer/analyzer_main.cpp
+++ b/analyzer/analyzer_main.cpp
@@ -48,8 +48,8 @@
     const char* str = "";
     switch (i_type)
     {
-        case libhei::ATTN_TYPE_CHECKSTOP:
-            str = "CHECKSTOP";
+        case libhei::ATTN_TYPE_CHIP_CS:
+            str = "CHIP_CS";
             break;
         case libhei::ATTN_TYPE_UNIT_CS:
             str = "UNIT_CS";
diff --git a/analyzer/filter-root-cause.cpp b/analyzer/filter-root-cause.cpp
index 5e1ce82..5daf7bd 100644
--- a/analyzer/filter-root-cause.cpp
+++ b/analyzer/filter-root-cause.cpp
@@ -57,6 +57,8 @@
 bool __findIueTh(const std::vector<libhei::Signature>& i_list,
                  libhei::Signature& o_rootCause)
 {
+    // TODO: These bit values propbably changed in Odyssey. Will need to
+    //       consider flags instead of arbitrary values.
     auto itr = std::find_if(i_list.begin(), i_list.end(), [&](const auto& t) {
         return (libhei::hash<libhei::NodeId_t>("RDFFIR") == t.getId() &&
                 (17 == t.getBit() || 37 == t.getBit()));
@@ -82,36 +84,69 @@
     using func  = libhei::NodeId_t (*)(const std::string& i_str);
     func __hash = libhei::hash<libhei::NodeId_t>;
 
+    static const auto mc_dstl_fir       = __hash("MC_DSTL_FIR");
+    static const auto mc_ustl_fir       = __hash("MC_USTL_FIR");
     static const auto mc_omi_dl_err_rpt = __hash("MC_OMI_DL_ERR_RPT");
     static const auto srqfir            = __hash("SRQFIR");
 
-    for (const auto s : i_list)
+    // First, look for any chip checkstops from the connected OCMBs.
+    for (const auto& s : i_list)
     {
-        if (libhei::ATTN_TYPE_UNIT_CS == s.getAttnType() &&
-            i_rasData.isFlagSet(s, RasDataParser::RasDataFlags::SUE_SOURCE))
+        if (TYPE_OCMB != getTrgtType(getTrgt(s.getChip())))
         {
-            // Special Cases:
+            continue; // OCMBs only
+        }
+
+        // TODO: The chip data for Explorer chips currently report chip
+        //       checkstops as unit checkstops. Once the chip data has been
+        //       updated, the check for unit checkstops here will need to be
+        //       removed.
+        if (libhei::ATTN_TYPE_CHIP_CS == s.getAttnType() ||
+            libhei::ATTN_TYPE_UNIT_CS == s.getAttnType())
+        {
+            // Special Case:
             // If the channel fail was specifically a firmware initiated
             // channel fail (SRQFIR[25]) check for any IUE bits that are on
             // that would have caused that (RDFFIR[17,37]).
+            // TODO: These bit values probably changed in Odyssey. Will need to
+            //       consider flags instead of arbitrary values.
             if ((srqfir == s.getId() && 25 == s.getBit()) &&
                 __findIueTh(i_list, o_rootCause))
             {
                 return true;
             }
 
-            // TODO: The proc side channel failure bits are configurable.
-            //       Eventually, we will need some mechanism to check the
-            //       config registers for a more accurate analysis. For now,
-            //       simply check for all bits that could potentially be
-            //       configured to channel failure.
-
             o_rootCause = s;
+            return true;
         }
-        // The bits in the MC_OMI_DL_ERR_RPT register are a special case.
-        // They are possible channel fail bits but the MC_OMI_DL_FIR they
-        // feed into can't be set up to report UNIT_CS attentions, so they
-        // report as recoverable instead.
+    }
+
+    // Now, look for any channel failure attentions on the processor side of the
+    // memory bus.
+    for (const auto& s : i_list)
+    {
+        if (TYPE_PROC != getTrgtType(getTrgt(s.getChip())))
+        {
+            continue; // processors only
+        }
+
+        // Any unit checkstop attentions that originated from the MC_DSTL_FIR or
+        // MC_USTLFIR are considered a channel failure attention.
+        // TODO: The "channel failure" designation is actually configurable via
+        //       other registers. We just happen to expect anything that is
+        //       configured to channel failure to also be configured to unit
+        //       checkstop. Eventually, we will need some mechanism to check the
+        //       configuration registers for a more accurate analysis.
+        if (libhei::ATTN_TYPE_UNIT_CS == s.getAttnType() &&
+            (mc_dstl_fir == s.getId() || mc_ustl_fir == s.getId()) &&
+            !i_rasData.isFlagSet(s,
+                                 RasDataParser::RasDataFlags::ATTN_FROM_OCMB))
+        {
+            o_rootCause = s;
+            return true;
+        }
+        // Any signatures from MC_OMI_DL_ERR_RPT feed into the only bits in
+        // MC_OMI_DL_FIR that are hardwired to channel failure.
         else if (mc_omi_dl_err_rpt == s.getId())
         {
             o_rootCause = s;
@@ -148,7 +183,7 @@
                           libhei::Signature& o_rootCause,
                           const RasDataParser& i_rasData)
 {
-    for (const auto s : i_list)
+    for (const auto& s : i_list)
     {
         // Only looking for recoverable attentions.
         if (libhei::ATTN_TYPE_RECOVERABLE != s.getAttnType())
@@ -172,7 +207,7 @@
                            libhei::Signature& o_rootCause,
                            const RasDataParser& i_rasData)
 {
-    for (const auto s : i_list)
+    for (const auto& s : i_list)
     {
         // Only looking for unit checkstop attentions.
         if (libhei::ATTN_TYPE_UNIT_CS != s.getAttnType())
@@ -200,7 +235,7 @@
 
     // If we have any attentions from an OCMB, assume isolation to the OCMBs
     // was successful and the ATTN_FROM_OCMB flag does not need to be checked.
-    for (const auto s : i_list)
+    for (const auto& s : i_list)
     {
         if (TYPE_OCMB == getTrgtType(getTrgt(s.getChip())))
         {
@@ -208,7 +243,7 @@
         }
     }
 
-    for (const auto s : i_list)
+    for (const auto& s : i_list)
     {
         if (i_rasData.isFlagSet(s, RasDataParser::RasDataFlags::ATTN_FROM_OCMB))
         {
@@ -229,16 +264,16 @@
 
     static const auto pb_ext_fir = libhei::hash<libhei::NodeId_t>("PB_EXT_FIR");
 
-    for (const auto s : i_list)
+    for (const auto& s : i_list)
     {
         const auto targetType = getTrgtType(getTrgt(s.getChip()));
         const auto id         = s.getId();
         const auto attnType   = s.getAttnType();
 
-        // Find any processor with system checkstop attention that did not
+        // Find any processor with chip checkstop attention that did not
         // originate from the PB_EXT_FIR.
         if ((TYPE_PROC == targetType) &&
-            (libhei::ATTN_TYPE_CHECKSTOP == attnType) && (pb_ext_fir != id))
+            (libhei::ATTN_TYPE_CHIP_CS == attnType) && (pb_ext_fir != id))
         {
             o_rootCause = s;
             return true;
diff --git a/test/test-pll-unlock.cpp b/test/test-pll-unlock.cpp
index 3ac44d1..5386b46 100644
--- a/test/test-pll-unlock.cpp
+++ b/test/test-pll-unlock.cpp
@@ -20,7 +20,7 @@
 
     libhei::Chip chip1{util::pdbg::getTrgt("/proc1"), P10_20};
 
-    libhei::Signature sig11{chip1, nodeId, 0, 1, libhei::ATTN_TYPE_CHECKSTOP};
+    libhei::Signature sig11{chip1, nodeId, 0, 1, libhei::ATTN_TYPE_CHIP_CS};
 
     libhei::IsolationData isoData{};
     isoData.addSignature(sig11);
@@ -78,10 +78,10 @@
     libhei::Chip chip1{util::pdbg::getTrgt("/proc1"), P10_20};
 
     // PLL unlock signatures for each clock per processor.
-    libhei::Signature sig00{chip0, nodeId, 0, 0, libhei::ATTN_TYPE_CHECKSTOP};
-    libhei::Signature sig01{chip0, nodeId, 0, 1, libhei::ATTN_TYPE_CHECKSTOP};
-    libhei::Signature sig10{chip1, nodeId, 0, 0, libhei::ATTN_TYPE_CHECKSTOP};
-    libhei::Signature sig11{chip1, nodeId, 0, 1, libhei::ATTN_TYPE_CHECKSTOP};
+    libhei::Signature sig00{chip0, nodeId, 0, 0, libhei::ATTN_TYPE_CHIP_CS};
+    libhei::Signature sig01{chip0, nodeId, 0, 1, libhei::ATTN_TYPE_CHIP_CS};
+    libhei::Signature sig10{chip1, nodeId, 0, 0, libhei::ATTN_TYPE_CHIP_CS};
+    libhei::Signature sig11{chip1, nodeId, 0, 1, libhei::ATTN_TYPE_CHIP_CS};
 
     // Plugins for each processor.
     auto plugin = PluginMap::getSingleton().get(chip1.getType(), "pll_unlock");
diff --git a/test/test-resolution.cpp b/test/test-resolution.cpp
index 99f317c..c759442 100644
--- a/test/test-resolution.cpp
+++ b/test/test-resolution.cpp
@@ -55,7 +55,7 @@
 
     // Get some ServiceData objects
     libhei::Chip chip{util::pdbg::getTrgt(chip_str), 0xdeadbeef};
-    libhei::Signature sig{chip, 0xabcd, 0, 0, libhei::ATTN_TYPE_CHECKSTOP};
+    libhei::Signature sig{chip, 0xabcd, 0, 0, libhei::ATTN_TYPE_CHIP_CS};
     ServiceData sd1{sig, AnalysisType::SYSTEM_CHECKSTOP,
                     libhei::IsolationData{}};
     ServiceData sd2{sig, AnalysisType::TERMINATE_IMMEDIATE,
@@ -148,7 +148,7 @@
         omi_str, callout::Priority::MED_A, true);
 
     libhei::Chip chip{util::pdbg::getTrgt(chip_str), 0xdeadbeef};
-    libhei::Signature sig{chip, 0xabcd, 0, 0, libhei::ATTN_TYPE_CHECKSTOP};
+    libhei::Signature sig{chip, 0xabcd, 0, 0, libhei::ATTN_TYPE_CHIP_CS};
     ServiceData sd{sig, AnalysisType::SYSTEM_CHECKSTOP,
                    libhei::IsolationData{}};
 
@@ -203,7 +203,7 @@
         callout::BusType::OMI_BUS, omi_str, callout::Priority::MED_C, true);
 
     libhei::Chip chip{util::pdbg::getTrgt(chip_str), 0xdeadbeef};
-    libhei::Signature sig{chip, 0xabcd, 0, 0, libhei::ATTN_TYPE_CHECKSTOP};
+    libhei::Signature sig{chip, 0xabcd, 0, 0, libhei::ATTN_TYPE_CHIP_CS};
     ServiceData sd{sig, AnalysisType::SYSTEM_CHECKSTOP,
                    libhei::IsolationData{}};
 
@@ -294,7 +294,7 @@
         callout::BusType::OMI_BUS, omi_str, callout::Priority::LOW, false);
 
     libhei::Chip chip{util::pdbg::getTrgt(chip_str), 0xdeadbeef};
-    libhei::Signature sig{chip, 0xabcd, 0, 0, libhei::ATTN_TYPE_CHECKSTOP};
+    libhei::Signature sig{chip, 0xabcd, 0, 0, libhei::ATTN_TYPE_CHIP_CS};
     ServiceData sd{sig, AnalysisType::SYSTEM_CHECKSTOP,
                    libhei::IsolationData{}};
 
@@ -375,7 +375,7 @@
         callout::ClockType::OSC_REF_CLOCK_1, callout::Priority::HIGH, false);
 
     libhei::Chip chip{util::pdbg::getTrgt(chip_str), 0xdeadbeef};
-    libhei::Signature sig{chip, 0xabcd, 0, 0, libhei::ATTN_TYPE_CHECKSTOP};
+    libhei::Signature sig{chip, 0xabcd, 0, 0, libhei::ATTN_TYPE_CHIP_CS};
     ServiceData sd{sig, AnalysisType::SYSTEM_CHECKSTOP,
                    libhei::IsolationData{}};
 
@@ -421,7 +421,7 @@
         callout::Procedure::NEXTLVL, callout::Priority::LOW);
 
     libhei::Chip chip{util::pdbg::getTrgt(chip_str), 0xdeadbeef};
-    libhei::Signature sig{chip, 0xabcd, 0, 0, libhei::ATTN_TYPE_CHECKSTOP};
+    libhei::Signature sig{chip, 0xabcd, 0, 0, libhei::ATTN_TYPE_CHIP_CS};
     ServiceData sd{sig, AnalysisType::SYSTEM_CHECKSTOP,
                    libhei::IsolationData{}};
 
@@ -465,7 +465,7 @@
                                                       callout::Priority::MED);
 
     libhei::Chip chip{util::pdbg::getTrgt(chip_str), 0xdeadbeef};
-    libhei::Signature sig{chip, 0xabcd, 0, 0, libhei::ATTN_TYPE_CHECKSTOP};
+    libhei::Signature sig{chip, 0xabcd, 0, 0, libhei::ATTN_TYPE_CHIP_CS};
     ServiceData sd{sig, AnalysisType::SYSTEM_CHECKSTOP,
                    libhei::IsolationData{}};
 
diff --git a/test/test-root-cause-filter.cpp b/test/test-root-cause-filter.cpp
index 71d7bf2..34d80fe 100644
--- a/test/test-root-cause-filter.cpp
+++ b/test/test-root-cause-filter.cpp
@@ -43,7 +43,7 @@
 
     // EQ_CORE_FIR[14]: ME = 0 checkstop
     libhei::Signature checkstopSig{procChip0, eqCoreFir, 0, 14,
-                                   libhei::ATTN_TYPE_CHECKSTOP};
+                                   libhei::ATTN_TYPE_CHIP_CS};
 
     // MC_DSTL_FIR[1]: AFU initiated Recoverable Attn on Subchannel A
     libhei::Signature reAttnSig{procChip0, mc_dstl_fir, 0, 1,
diff --git a/test/test-tod-step-check-fault.cpp b/test/test-tod-step-check-fault.cpp
index dd57d51..de31f03 100644
--- a/test/test-tod-step-check-fault.cpp
+++ b/test/test-tod-step-check-fault.cpp
@@ -47,13 +47,13 @@
     scom.add(proc1, 0x00040002, 0x2000000000000000);
 
     // TOD_ERROR(0)[14] step check error on master select 0
-    libhei::Signature sig0{chip0, nodeId, 0, 14, libhei::ATTN_TYPE_CHECKSTOP};
+    libhei::Signature sig0{chip0, nodeId, 0, 14, libhei::ATTN_TYPE_CHIP_CS};
 
     // TOD_ERROR(0)[17] internal step check error
-    libhei::Signature sig1{chip1, nodeId, 0, 17, libhei::ATTN_TYPE_CHECKSTOP};
+    libhei::Signature sig1{chip1, nodeId, 0, 17, libhei::ATTN_TYPE_CHIP_CS};
 
     // TOD_ERROR(0)[21] step check error on slave select 1
-    libhei::Signature sig2{chip1, nodeId, 0, 21, libhei::ATTN_TYPE_CHECKSTOP};
+    libhei::Signature sig2{chip1, nodeId, 0, 21, libhei::ATTN_TYPE_CHIP_CS};
 
     libhei::IsolationData isoData{};
     isoData.addSignature(sig0);
