diff --git a/analyzer/analyzer_main.cpp b/analyzer/analyzer_main.cpp
index c17a0ee..b569852 100644
--- a/analyzer/analyzer_main.cpp
+++ b/analyzer/analyzer_main.cpp
@@ -1,6 +1,7 @@
 #include <assert.h>
 #include <unistd.h>
 
+#include <analyzer/analyzer_main.hpp>
 #include <analyzer/ras-data/ras-data-parser.hpp>
 #include <analyzer/service_data.hpp>
 #include <attn/attn_dump.hpp>
@@ -41,10 +42,10 @@
 
 //------------------------------------------------------------------------------
 
-const char* __attn(libhei::AttentionType_t i_attnType)
+const char* __attn(libhei::AttentionType_t i_type)
 {
     const char* str = "";
-    switch (i_attnType)
+    switch (i_type)
     {
         case libhei::ATTN_TYPE_CHECKSTOP:
             str = "CHECKSTOP";
@@ -62,7 +63,7 @@
             str = "HOST_ATTN";
             break;
         default:
-            trace::err("Unsupported attention type: %u", i_attnType);
+            trace::err("Unsupported attention type: %u", i_type);
             assert(0);
     }
     return str;
@@ -70,7 +71,30 @@
 
 //------------------------------------------------------------------------------
 
-uint32_t analyzeHardware(attn::DumpParameters& o_dumpParameters)
+const char* __analysisType(AnalysisType i_type)
+{
+    const char* str = "";
+    switch (i_type)
+    {
+        case AnalysisType::SYSTEM_CHECKSTOP:
+            str = "SYSTEM_CHECKSTOP";
+            break;
+        case AnalysisType::TERMINATE_IMMEDIATE:
+            str = "TERMINATE_IMMEDIATE";
+            break;
+        case AnalysisType::MANUAL:
+            str = "MANUAL";
+            break;
+        default:
+            trace::err("Unsupported analysis type: %u", i_type);
+            assert(0);
+    }
+    return str;
+}
+
+//------------------------------------------------------------------------------
+
+uint32_t analyzeHardware(AnalysisType i_type, attn::DumpParameters& o_dump)
 {
     uint32_t o_plid = 0; // default, zero indicates PEL was not created
 
@@ -80,7 +104,7 @@
         return o_plid;
     }
 
-    trace::inf(">>> enter analyzeHardware()");
+    trace::inf(">>> enter analyzeHardware(%s)", __analysisType(i_type));
 
     // Initialize the isolator and get all of the chips to be analyzed.
     trace::inf("Initializing the isolator...");
@@ -139,8 +163,8 @@
             // 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;
+            o_dump.unitId   = 0;
+            o_dump.dumpType = attn::DumpType::Hardware;
         }
     }
 
diff --git a/analyzer/analyzer_main.hpp b/analyzer/analyzer_main.hpp
index 51399b0..96de902 100644
--- a/analyzer/analyzer_main.hpp
+++ b/analyzer/analyzer_main.hpp
@@ -5,16 +5,45 @@
 namespace analyzer
 {
 
+enum class AnalysisType
+{
+    /**
+     * Queries for the root cause of a system checkstop attention. An
+     * unrecoverable PEL will be logged containing any necessary service actions
+     * and the associated FFDC from analysis.
+     */
+    SYSTEM_CHECKSTOP,
+
+    /**
+     * Queries for any active recoverable or unit checkstop attentions that may
+     * be attributed to a Terminate Immediate (TI) event. If any are found, an
+     * predictive PEL will be logged containing any necessary service actions
+     * and the associated FFDC from analysis.
+     */
+    TERMINATE_IMMEDIATE,
+
+    /**
+     * Queries for any active attentions. If any are found, an informational PEL
+     * will be logged containing the FFDC from analysis (no service actions
+     * applied).
+     */
+    MANUAL,
+};
+
 /**
- * @brief  Queries the host hardware for all attentions reported by each active
- *         chip. Then it performs all approriate RAS actions based on the active
- *         attentions.
+ * @brief  Queries all chips in the host hardware for any active attentions.
+ *         Then, it will perform any required RAS service actions based on the
+ *         given analysis type.
  *
- * @param[out] o_dumpParameters Dump request parameters
+ * @param  i_type The type of analysis to perform. See enum above.
+ *
+ * @param  o_dump The returned dump data. This data is only set if the input
+ *                value of i_type is SYSTEM_CHECKSTOP.
+ *
  * @return The platform log ID (PLID) of the PEL generated during analysis. Will
  *         return zero if no PEL is generated.
  */
-uint32_t analyzeHardware(attn::DumpParameters& o_dumpParameters);
+uint32_t analyzeHardware(AnalysisType i_type, attn::DumpParameters& o_dump);
 
 /**
  * @brief Get error analyzer build information
diff --git a/attn/attn_handler.cpp b/attn/attn_handler.cpp
index 65bf7f9..13f9af4 100644
--- a/attn/attn_handler.cpp
+++ b/attn/attn_handler.cpp
@@ -249,7 +249,8 @@
         // Look for any attentions found in hardware. This will generate and
         // commit a PEL if any errors are found.
         DumpParameters dumpParameters;
-        auto logid = analyzer::analyzeHardware(dumpParameters);
+        auto logid = analyzer::analyzeHardware(
+            analyzer::AnalysisType::SYSTEM_CHECKSTOP, dumpParameters);
         if (0 == logid)
         {
             // A PEL should exist for a checkstop attention.
diff --git a/attn/attn_logging.cpp b/attn/attn_logging.cpp
index 279d212..9f0e531 100644
--- a/attn/attn_logging.cpp
+++ b/attn/attn_logging.cpp
@@ -219,7 +219,8 @@
     if (it != i_additional.end() && "true" == it->second)
     {
         DumpParameters dumpParameters;
-        auto plid = analyzer::analyzeHardware(dumpParameters);
+        auto plid = analyzer::analyzeHardware(
+            analyzer::AnalysisType::TERMINATE_IMMEDIATE, dumpParameters);
         if (0 != plid)
         {
             // Link the PLID if an attention was found and a PEL was generated.
diff --git a/main.cpp b/main.cpp
index c63cb80..8693c5b 100644
--- a/main.cpp
+++ b/main.cpp
@@ -60,8 +60,14 @@
         // Either analyze (application mode) or daemon mode
         if (true == getCliOption(argv, argv + argc, "--analyze"))
         {
+            // Analyze the host hardware.
+            // TODO: At the moment, we'll only do MANUAL analysis (no service
+            //       actions). It may be possible in the future to allow command
+            //       line options to change the analysis type, if needed.
+
             attn::DumpParameters dumpParameters;
-            analyzer::analyzeHardware(dumpParameters); // analyze hardware
+            analyzer::analyzeHardware(analyzer::AnalysisType::MANUAL,
+                                      dumpParameters);
         }
         // daemon mode
         else
diff --git a/main_nl.cpp b/main_nl.cpp
index d5a501f..ff71fd8 100644
--- a/main_nl.cpp
+++ b/main_nl.cpp
@@ -52,8 +52,14 @@
         // Either analyze (application mode) or daemon mode
         if (true == getCliOption(argv, argv + argc, "--analyze"))
         {
+            // Analyze the host hardware.
+            // TODO: At the moment, we'll only do MANUAL analysis (no service
+            //       actions). It may be possible in the future to allow command
+            //       line options to change the analysis type, if needed.
+
             attn::DumpParameters dumpParameters;
-            analyzer::analyzeHardware(dumpParameters); // analyze hardware
+            analyzer::analyzeHardware(analyzer::AnalysisType::MANUAL,
+                                      dumpParameters);
         }
         // daemon mode
         else
