diff --git a/src/hei_main.hpp b/src/hei_main.hpp
index 21f2f66..ea5df05 100644
--- a/src/hei_main.hpp
+++ b/src/hei_main.hpp
@@ -18,6 +18,13 @@
  * Data Files themselves are updated, which would require reinitialization
  * anyway. Of course, leaving the object in memory chews up resources. So, some
  * users may need to weigh performance vs. memory usage.
+ *
+ * If data for a specific chip type changes and needs to be reinitialized, the
+ * user application must reinitialize all chip data as follows:
+ *
+ *  - Call uninitialize() to flush isolation objects for ALL chip types.
+ *
+ *  - Call initialize() for ALL necessary Chip Data Files.
  */
 
 #pragma once
@@ -45,29 +52,21 @@
  *
  * Details of the Chip Data File format can be found in CHIP_DATA.md.
  *
- * @param i_buffer     A pointer to the buffer containing a single Chip
- *                     Data File.
+ * IMPORTANT:
+ *   This function will build and store objects as it is parsing the Chip Data
+ *   Files. It will assert:
+ *     - Each file is the proper format and contains valid data.
+ *     - No two files can share the same chip model/level.
+ *   This ensures that the isolator does not use a partial (possibly invalid) or
+ *   duplicate set of objects.
+ *
+ * @param i_buffer A pointer to the buffer containing a single Chip Data File.
  *
  * @param i_bufferSize The size (in bytes) of the target Chip Data File.
- *
- * @param i_forceInit  It is possible the user application could call this
- *                     function for a chip type that has already been
- *                     initialized. This is useful if for some reason the Chip
- *                     Data File for a specific chip type has been updated. If
- *                     this function is called and a chip type has already been
- *                     initialized:
- *                      - false (default), the function will return
- *                        RC_CHIP_DATA_INITIALIZED and exit.
- *                      - true, the function will delete the previous isolation
- *                        objects for this chip type and reinitialize.
- *
- * @return RC_SUCCESS or RC_CHIP_DATA_INVALID or RC_CHIP_DATA_INITIALIZED
  */
-inline ReturnCode initialize(void* i_buffer, size_t i_bufferSize,
-                             bool i_forceInit = false)
+inline void initialize(void* i_buffer, size_t i_bufferSize)
 {
-    return Isolator::getSingleton().initialize(i_buffer, i_bufferSize,
-                                               i_forceInit);
+    Isolator::getSingleton().initialize(i_buffer, i_bufferSize);
 }
 
 /**
diff --git a/src/hei_return_code.hpp b/src/hei_return_code.hpp
index 4be0713..88799e8 100644
--- a/src/hei_return_code.hpp
+++ b/src/hei_return_code.hpp
@@ -68,13 +68,6 @@
 /** Function returned successfully. */
 static constexpr ReturnCode RC_SUCCESS                 = ReturnCode();
 
-/** The given Chip Data File is malformed or unsupported. */
-static constexpr ReturnCode RC_CHIP_DATA_INVALID       = ReturnCode(0x00000001);
-
-/** The given Chip Data File contains a chip type that has already been
- *  initialized. */
-static constexpr ReturnCode RC_CHIP_DATA_INITIALIZED   = ReturnCode(0x00000002);
-
 /** The given chip type has not been initialized. */
 static constexpr ReturnCode RC_CHIP_DATA_MISSING       = ReturnCode(0x00000003);
 
diff --git a/src/isolator/hei_isolator.cpp b/src/isolator/hei_isolator.cpp
index d932659..41d33a9 100644
--- a/src/isolator/hei_isolator.cpp
+++ b/src/isolator/hei_isolator.cpp
@@ -13,14 +13,11 @@
 namespace libhei
 {
 
-ReturnCode Isolator::initialize(void* i_buffer, size_t i_bufferSize,
-                                bool i_forceInit)
+void Isolator::initialize(void* i_buffer, size_t i_bufferSize)
 {
-    ReturnCode rc;
-
     // BEGIN temporary code
-    HEI_INF("Isolator::initialize(%p,%" PRIu64 ",%d)", i_buffer,
-            (uint64_t)i_bufferSize, i_forceInit);
+    HEI_INF("Isolator::initialize(%p,%" PRIu64 ")", i_buffer,
+            (uint64_t)i_bufferSize);
 
     auto& scom_fw    = Flyweight<ScomRegister>::getSingleton();
     auto& idScom_fw  = Flyweight<IdScomRegister>::getSingleton();
@@ -45,8 +42,6 @@
     iv_isoStart[static_cast<ChipType_t>(0xdeadbeef)].push_back(
         {&node0, ATTN_TYPE_CHECKSTOP});
     // END temporary code
-
-    return rc;
 }
 
 void Isolator::uninitialize()
diff --git a/src/isolator/hei_isolator.hpp b/src/isolator/hei_isolator.hpp
index c60835d..207f940 100644
--- a/src/isolator/hei_isolator.hpp
+++ b/src/isolator/hei_isolator.hpp
@@ -55,8 +55,7 @@
     }
 
     /** @brief See API wrapper description in hei_main.hpp. */
-    ReturnCode initialize(void* i_buffer, size_t i_bufferSize,
-                          bool i_forceInit = false);
+    void initialize(void* i_buffer, size_t i_bufferSize);
 
     /**
      * @brief See API wrapper description in hei_main.hpp.
diff --git a/test/simulator/simulator.cpp b/test/simulator/simulator.cpp
index dfedb61..236bfc6 100644
--- a/test/simulator/simulator.cpp
+++ b/test/simulator/simulator.cpp
@@ -48,8 +48,7 @@
     cdf.close();
 
     // Initilize the chip with this Chip Data File.
-    ReturnCode rc = initialize(buffer, sz_buffer);
-    ASSERT_TRUE(RC_SUCCESS == rc || RC_CHIP_DATA_INITIALIZED == rc);
+    initialize(buffer, sz_buffer);
 
     // Clean up the buffer
     delete[] buffer;
