diff --git a/src/hei_main.hpp b/src/hei_main.hpp
index ea5df05..919cd62 100644
--- a/src/hei_main.hpp
+++ b/src/hei_main.hpp
@@ -81,8 +81,8 @@
 /**
  * @brief Isolates all active hardware errors found on the given list of chips.
  *
- * This functions requires initialize() to be called with the Chip Data File
- * corresponding to the given chip types.
+ * This functions will assert that initialize() has been called for each Chip
+ * Data File corresponding to the given chip types.
  *
  * @param i_chipList The list of all chips that need to be analyzed. Generally,
  *                   this would include all processor and memory chips in the
@@ -93,13 +93,11 @@
  *                   on the given list of chips, the contents of any registers
  *                   associated with the active errors, and any other data that
  *                   can be useful for debug.
- *
- * @return RC_SUCCESS or RC_CHIP_DATA_MISSING
  */
-inline ReturnCode isolate(const std::vector<Chip>& i_chipList,
-                          IsolationData& o_isoData)
+inline void isolate(const std::vector<Chip>& i_chipList,
+                    IsolationData& o_isoData)
 {
-    return Isolator::getSingleton().isolate(i_chipList, o_isoData);
+    Isolator::getSingleton().isolate(i_chipList, o_isoData);
 }
 
 } // end namespace libhei
diff --git a/src/hei_return_code.hpp b/src/hei_return_code.hpp
index 88799e8..4090bf3 100644
--- a/src/hei_return_code.hpp
+++ b/src/hei_return_code.hpp
@@ -68,9 +68,6 @@
 /** Function returned successfully. */
 static constexpr ReturnCode RC_SUCCESS                 = ReturnCode();
 
-/** The given chip type has not been initialized. */
-static constexpr ReturnCode RC_CHIP_DATA_MISSING       = ReturnCode(0x00000003);
-
 /** Generic return code indicating something along the hardware register access
  *  path failed and the returned data is undefined and should not be used. */
 static constexpr ReturnCode RC_REG_ACCESS_FAILURE      = ReturnCode(0x00000004);
diff --git a/src/isolator/hei_isolator.cpp b/src/isolator/hei_isolator.cpp
index 41d33a9..7e3a032 100644
--- a/src/isolator/hei_isolator.cpp
+++ b/src/isolator/hei_isolator.cpp
@@ -59,11 +59,9 @@
     Flyweight<IdScomRegister>::getSingleton().clear();
 }
 
-ReturnCode Isolator::isolate(const std::vector<Chip>& i_chipList,
-                             IsolationData& o_isoData) const
+void Isolator::isolate(const std::vector<Chip>& i_chipList,
+                       IsolationData& o_isoData) const
 {
-    ReturnCode rc;
-
     // Flush the isolation data to ensure a clean slate.
     o_isoData.flush();
 
@@ -94,8 +92,6 @@
         }
         // END temporary code
     }
-
-    return rc;
 }
 
 } // end namespace libhei
diff --git a/src/isolator/hei_isolator.hpp b/src/isolator/hei_isolator.hpp
index 207f940..fddcedd 100644
--- a/src/isolator/hei_isolator.hpp
+++ b/src/isolator/hei_isolator.hpp
@@ -66,8 +66,8 @@
     void uninitialize();
 
     /** @brief See API wrapper description in hei_main.hpp. */
-    ReturnCode isolate(const std::vector<Chip>& i_chipList,
-                       IsolationData& o_isoData) const;
+    void isolate(const std::vector<Chip>& i_chipList,
+                 IsolationData& o_isoData) const;
 
   private:
     // BEGIN temporary code
