diff --git a/src/isolator/hei_isolation_chip.hpp b/src/isolator/hei_isolation_chip.hpp
index 6930955..d4acddf 100644
--- a/src/isolator/hei_isolation_chip.hpp
+++ b/src/isolator/hei_isolation_chip.hpp
@@ -30,10 +30,8 @@
 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 Constructor. */
+    explicit IsolationChip(ChipType_t i_chipType) : iv_chipType(i_chipType) {}
 
     /** @brief Destructor. */
     ~IsolationChip() = default;
@@ -49,7 +47,7 @@
     const ChipType_t iv_chipType;
 
     /** Root nodes for this chip type. */
-    const RootNodeMap iv_rootNodes;
+    RootNodeMap iv_rootNodes;
 
   public: // Member functions
     /**
@@ -68,6 +66,22 @@
     {
         return iv_chipType;
     }
+
+    /**
+     * @brief Adds a root node to this chip.
+     * @param i_attnType The target attention type. Will assert this type does
+     *                   not already exist in iv_rootNodes.
+     * @param i_node     The target isolation node for this attention type.
+     */
+    void addRootNode(AttentionType_t i_attnType, IsolationNodePtr i_node)
+    {
+        auto ret = iv_rootNodes.emplace(i_attnType, i_node);
+        HEI_ASSERT(ret.second); // Should have not already existed.
+    }
 };
 
+/** A simple map to ensure only one IsolationChip exists per chip type. */
+using IsolationChipMap =
+    std::map<ChipType_t, const std::unique_ptr<const IsolationChip>>;
+
 } // end namespace libhei
diff --git a/src/isolator/hei_isolation_node.hpp b/src/isolator/hei_isolation_node.hpp
index 90aaeb4..eedde91 100644
--- a/src/isolator/hei_isolation_node.hpp
+++ b/src/isolator/hei_isolation_node.hpp
@@ -181,7 +181,10 @@
     }
 };
 
+/** Pointer management for isolation nodes. */
+using IsolationNodePtr = std::shared_ptr<IsolationNode>;
+
 /** Simple map to ensure only one root IsolationNode per attention type. */
-using RootNodeMap = std::map<AttentionType_t, const IsolationNode*>;
+using RootNodeMap = std::map<AttentionType_t, const IsolationNodePtr>;
 
 } // end namespace libhei
diff --git a/src/isolator/hei_isolator.cpp b/src/isolator/hei_isolator.cpp
index dc4d09b..db5668e 100644
--- a/src/isolator/hei_isolator.cpp
+++ b/src/isolator/hei_isolator.cpp
@@ -2,14 +2,9 @@
 #include <hei_includes.hpp>
 #include <isolator/hei_isolation_node.hpp>
 #include <isolator/hei_isolator.hpp>
-#include <register/hei_hardware_register.hpp>
-#include <util/hei_flyweight.hpp>
-
-// BEGIN temporary code
-#include <isolator/hei_isolation_node.hpp>
 #include <register/hei_operator_register.hpp>
 #include <register/hei_scom_register.hpp>
-// END temporary code
+#include <util/hei_flyweight.hpp>
 
 namespace libhei
 {
@@ -35,13 +30,11 @@
 
 //------------------------------------------------------------------------------
 
-void Isolator::initialize(void* i_buffer, size_t i_bufferSize)
-{
-    // TODO
-}
-
 void Isolator::uninitialize()
 {
+    // Clear all of the IsolationChip objects.
+    iv_isoChips.clear();
+
     // Remove all of the IsolationNode objects stored in the flyweights. This
     // must be done before removing the HardwareRegister objects
     Flyweight<IsolationNode>::getSingleton().clear();
@@ -67,8 +60,12 @@
     // Analyze active error on each chip.
     for (const auto& chip : i_chipList)
     {
-        // TODO
-        HEI_INF("Isolator::isolate(%p,%u)", chip.getChip(), chip.getType());
+        // Isolation objects for this chip's type must exist.
+        const auto& itr = iv_isoChips.find(chip.getType());
+        HEI_ASSERT(iv_isoChips.end() != itr);
+
+        // Analyze this chip.
+        itr->second->analyze(chip, o_isoData);
     }
 }
 
diff --git a/src/isolator/hei_isolator.hpp b/src/isolator/hei_isolator.hpp
index f185007..25aaa50 100644
--- a/src/isolator/hei_isolator.hpp
+++ b/src/isolator/hei_isolator.hpp
@@ -1,6 +1,6 @@
 #pragma once
 
-#include <hei_includes.hpp>
+#include <chip_data/hei_chip_data.hpp>
 #include <hei_isolation_data.hpp>
 #include <isolator/hei_isolation_node.hpp>
 
@@ -46,6 +46,10 @@
     /** @brief Assignment operator. */
     Isolator& operator=(const Isolator&) = delete;
 
+  private:
+    /** Keeps track of all chip types that have been initialized. */
+    IsolationChipMap iv_isoChips;
+
   public:
     /** @brief Provides access to a singleton instance of this object. */
     static Isolator& getSingleton()
@@ -55,7 +59,10 @@
     }
 
     /** @brief See API wrapper description in hei_main.hpp. */
-    void initialize(void* i_buffer, size_t i_bufferSize);
+    void initialize(void* i_buffer, size_t i_bufferSize)
+    {
+        parseChipDataFile(i_buffer, i_bufferSize, iv_isoChips);
+    }
 
     /**
      * @brief See API wrapper description in hei_main.hpp.
