diff --git a/src/isolator/hei_isolation_chip.cpp b/src/isolator/hei_isolation_chip.cpp
new file mode 100644
index 0000000..ef40564
--- /dev/null
+++ b/src/isolator/hei_isolation_chip.cpp
@@ -0,0 +1,30 @@
+#include <isolator/hei_isolation_chip.hpp>
+
+namespace libhei
+{
+
+//------------------------------------------------------------------------------
+
+bool IsolationChip::analyze(const Chip& i_chip, IsolationData& io_isoData) const
+{
+    bool o_activeAttn = false; // Initially, assume no active attentions.
+
+    // The given chip must be the same type as iv_chipType.
+    HEI_ASSERT(iv_chipType == i_chip.getType());
+
+    // Iterate each root node.
+    for (const auto& node : iv_rootNodes)
+    {
+        if (node.second->analyze(i_chip, node.first, io_isoData))
+        {
+            // At least one attention type had an active attention.
+            o_activeAttn = true;
+        }
+    }
+
+    return o_activeAttn;
+}
+
+//------------------------------------------------------------------------------
+
+} // end namespace libhei
diff --git a/src/isolator/hei_isolation_chip.hpp b/src/isolator/hei_isolation_chip.hpp
new file mode 100644
index 0000000..6930955
--- /dev/null
+++ b/src/isolator/hei_isolation_chip.hpp
@@ -0,0 +1,73 @@
+#pragma once
+
+#include <hei_isolation_data.hpp>
+#include <isolator/hei_isolation_node.hpp>
+
+namespace libhei
+{
+
+/**
+ * @brief This class contains all information required to isolate attentions on
+ *        a specific chip type.
+ *
+ * The primary function of this class is analyze(), which will do a depth-first
+ * search of the hardware attention reporting tree structure (characterized by
+ * IsolationNode objects) to find all active attentions on a chip.
+ *
+ * The data for each chip type is built from information in the Chip Data Files.
+ *
+ *  IMPORTANT:
+ *   Most of the objects created and referenced by this class are stored in the
+ *   flyweight factories, which are used as a space saving mechanism by
+ *   preventing duplicate object creation. For example, a large set of the
+ *   registers for a specific chip model will likely be common between each of
+ *   chip level of that model. It is not necessary to create new objects for
+ *   each level when the attributes are all the same. Because the flyweights are
+ *   used, it is not possible to remove all of the data for a specific chip
+ *   model/level be deleting an IsolationChip object. Instead, you must call the
+ *   main uninitialize() function and clear all data for all objects.
+ */
+class IsolationChip
+{
+  public: // Constructors, destructor, assignment
+    /** @brief Default constructor. */
+    IsolationChip(ChipType_t i_chipType, const RootNodeMap& i_rootNodes) :
+        iv_chipType(i_chipType), iv_rootNodes(i_rootNodes)
+    {}
+
+    /** @brief Destructor. */
+    ~IsolationChip() = default;
+
+    /** @brief Copy constructor. */
+    IsolationChip(const IsolationChip&) = delete;
+
+    /** @brief Assignment operator. */
+    IsolationChip& operator=(const IsolationChip&) = delete;
+
+  private: // Instance variables
+    /** This chip's type. */
+    const ChipType_t iv_chipType;
+
+    /** Root nodes for this chip type. */
+    const RootNodeMap iv_rootNodes;
+
+  public: // Member functions
+    /**
+     * @brief  Finds all active attentions on this chip.
+     * @param  i_chip     The target chip for isolation. Will assert the given
+     *                    chip type matches iv_chipType.
+     * @param  io_isoData The isolation data returned back to the user
+     *                    application.
+     * @return True, if any active attentions found on this chip.
+     *         False, otherwise.
+     */
+    bool analyze(const Chip& i_chip, IsolationData& io_isoData) const;
+
+    /** @brief Chip type accessor. */
+    ChipType_t getChipType() const
+    {
+        return iv_chipType;
+    }
+};
+
+} // end namespace libhei
diff --git a/src/isolator/hei_isolation_node.hpp b/src/isolator/hei_isolation_node.hpp
index 86098fc..90aaeb4 100644
--- a/src/isolator/hei_isolation_node.hpp
+++ b/src/isolator/hei_isolation_node.hpp
@@ -181,4 +181,7 @@
     }
 };
 
+/** Simple map to ensure only one root IsolationNode per attention type. */
+using RootNodeMap = std::map<AttentionType_t, const IsolationNode*>;
+
 } // end namespace libhei
