diff --git a/test/simulator/simulator.cpp b/test/simulator/simulator.cpp
index b68ec80..572809e 100644
--- a/test/simulator/simulator.cpp
+++ b/test/simulator/simulator.cpp
@@ -22,7 +22,7 @@
 
 //------------------------------------------------------------------------------
 
-void SimulatorData::addChip(const Chip& i_chip)
+void SimulatorData::addChip(const Chip& i_chip, const char* i_chipPath)
 {
     // First check if this entry already exists.
     auto chip_itr = std::find(iv_chipList.begin(), iv_chipList.end(), i_chip);
@@ -42,10 +42,20 @@
     // Add the new entry.
     iv_typeList.push_back(chipType);
 
-    // Look for the file path
-    auto itr2 = cv_chipPath.find(static_cast<SimChipType>(chipType));
-    ASSERT_NE(cv_chipPath.end(), itr2);
-    const char* path = itr2->second;
+    // Look for the file path, if a path was provided use that instead of one
+    // of the hardcoded values in the map.
+    ASSERT_TRUE(nullptr != i_chipPath);
+    const char* path = "";
+    if (0 != strcmp(i_chipPath, ""))
+    {
+        path = i_chipPath;
+    }
+    else
+    {
+        auto itr2 = cv_chipPath.find(static_cast<SimChipType>(chipType));
+        ASSERT_NE(cv_chipPath.end(), itr2);
+        path = itr2->second;
+    }
 
     // Open the Chip Data File
     std::ifstream cdf{path, std::ifstream::binary};
@@ -103,11 +113,11 @@
 
 //------------------------------------------------------------------------------
 
-void SimulatorData::endIteration()
+void SimulatorData::simIsolate(IsolationData& o_isoData)
 {
     // Start by calling libhei::isolate().
     IsolationData isoData{};
-    isolate(iv_chipList, isoData);
+    isolate(iv_chipList, o_isoData);
 
     /* TODO: Currently used for debug. Eventually, we want this written to file.
     for (const auto& e : isoData.getRegisterDump())
@@ -123,7 +133,7 @@
     */
 
     // Get the list of signatures found in isolation.
-    std::vector<Signature> givenSigList = isoData.getSignatureList();
+    std::vector<Signature> givenSigList = o_isoData.getSignatureList();
 
     // Print out the expected signature list and verify matches with given list.
     HEI_INF("Signature summary:")
@@ -163,6 +173,15 @@
 
     // Final check for mismatches.
     ASSERT_FALSE(mismatch);
+}
+
+//------------------------------------------------------------------------------
+
+void SimulatorData::endIteration()
+{
+    // First call simIsolate to isolate and check the expected signatures.
+    IsolationData isoData{};
+    simIsolate(isoData);
 
     // The iteration is complete so we can flush the data.
     flushIterationData();
diff --git a/test/simulator/simulator.hpp b/test/simulator/simulator.hpp
index e3b6bef..b1079d8 100644
--- a/test/simulator/simulator.hpp
+++ b/test/simulator/simulator.hpp
@@ -78,7 +78,7 @@
      *        initialize() API which will initialize the isolator with the Chip
      *        Data File associated with this chip.
      */
-    void addChip(const Chip& i_chip);
+    void addChip(const Chip& i_chip, const char* i_chipPath = "");
 
     /** @brief Retrieve ScomReg from map and return its value */
     uint64_t getScomReg(const Chip& i_chip, uint32_t i_address)
@@ -154,9 +154,15 @@
     }
 
     /**
+     * @brief Runs the simulation for isolation and verifies the expected
+     *        signatures.
+     */
+    void simIsolate(IsolationData& o_isoData);
+
+    /**
      * @brief After an iteration is set up with registers and expected
      *        signatures, this is called to run the simulation and verify the
-     *        expected signatures.
+     *        expected signatures and will then flush the iteration data.
      */
     void endIteration();
 };
