diff --git a/Framework/API/CMakeLists.txt b/Framework/API/CMakeLists.txt
index 80bcc1c561a97aca449ed73b99da932fca470345..c93e7e953395f722c4241e012f0a038ff476f654 100644
--- a/Framework/API/CMakeLists.txt
+++ b/Framework/API/CMakeLists.txt
@@ -10,7 +10,6 @@ set ( SRC_FILES
 	src/AnalysisDataService.cpp
 	src/ArchiveSearchFactory.cpp
 	src/Axis.cpp
-	src/GeometryInfoFactory.cpp
 	src/BinEdgeAxis.cpp
 	src/BoxController.cpp
 	src/CatalogFactory.cpp
@@ -45,6 +44,7 @@ set ( SRC_FILES
 	src/FunctionParameterDecorator.cpp
 	src/FunctionProperty.cpp
 	src/FunctionValues.cpp
+	src/GeometryInfoFactory.cpp
 	src/GeometryInfo.cpp
 	src/GridDomain.cpp
 	src/GridDomain1D.cpp
@@ -161,7 +161,6 @@ set ( INC_FILES
 	inc/MantidAPI/AnalysisDataService.h
 	inc/MantidAPI/ArchiveSearchFactory.h
 	inc/MantidAPI/Axis.h
-	inc/MantidAPI/GeometryInfoFactory.h
 	inc/MantidAPI/BinEdgeAxis.h
 	inc/MantidAPI/BoxController.h
 	inc/MantidAPI/CatalogFactory.h
@@ -200,6 +199,7 @@ set ( INC_FILES
 	inc/MantidAPI/FunctionParameterDecorator.h
 	inc/MantidAPI/FunctionProperty.h
 	inc/MantidAPI/FunctionValues.h
+	inc/MantidAPI/GeometryInfoFactory.h
 	inc/MantidAPI/GeometryInfo.h
 	inc/MantidAPI/GridDomain.h
 	inc/MantidAPI/GridDomain1D.h
@@ -339,7 +339,6 @@ set ( TEST_FILES
 	AlgorithmTest.h
 	AnalysisDataServiceTest.h
 	AsynchronousTest.h
-	GeometryInfoFactoryTest.h
 	BinEdgeAxisTest.h
 	BoxControllerTest.h
 	CommonBinsValidatorTest.h
@@ -363,6 +362,7 @@ set ( TEST_FILES
 	FunctionPropertyTest.h
 	FunctionTest.h
 	FunctionValuesTest.h
+	GeometryInfoFactoryTest.h
 	GeometryInfoTest.h
 	GroupingLoaderTest.h
 	HistogramValidatorTest.h
diff --git a/Framework/API/test/CMakeLists.txt b/Framework/API/test/CMakeLists.txt
index 5bc227eabfa3c7855aca7e98bf62aabf1ab47ad9..597646c3bc5117d23f18fc0edd8b91d1379289e3 100644
--- a/Framework/API/test/CMakeLists.txt
+++ b/Framework/API/test/CMakeLists.txt
@@ -7,6 +7,7 @@ if ( CXXTEST_FOUND )
   set ( TESTHELPER_SRCS ../../TestHelpers/src/TearDownWorld.cpp
                         ../../TestHelpers/src/ComponentCreationHelper.cpp
                         ../../TestHelpers/src/BoxControllerDummyIO.cpp
+                        ../../TestHelpers/src/InstrumentCreationHelper.cpp
                         ../../TestHelpers/src/NexusTestHelper.cpp
       )
   cxxtest_add_test ( APITest ${TEST_FILES} ${GMOCK_TEST_FILES})
diff --git a/Framework/API/test/GeometryInfoFactoryTest.h b/Framework/API/test/GeometryInfoFactoryTest.h
index 0a386d661facb1236358e8288e5930ca927fd181..c7eb98f64bf3ba148eb51a7e34f1fe9597a64d29 100644
--- a/Framework/API/test/GeometryInfoFactoryTest.h
+++ b/Framework/API/test/GeometryInfoFactoryTest.h
@@ -3,12 +3,12 @@
 
 #include <cxxtest/TestSuite.h>
 
-#include "MantidTestHelpers/WorkspaceCreationHelper.h"
-#include "MantidAlgorithms/GeometryInfoFactory.h"
+#include "MantidTestHelpers/FakeObjects.h"
+#include "MantidTestHelpers/InstrumentCreationHelper.h"
+#include "MantidAPI/GeometryInfoFactory.h"
 
 using namespace Mantid;
 using namespace Mantid::API;
-using namespace Mantid::DataObjects;
 
 class GeometryInfoFactoryTest : public CxxTest::TestSuite {
 public:
@@ -17,17 +17,23 @@ public:
   }
   static void destroySuite(GeometryInfoFactoryTest *suite) { delete suite; }
 
-  GeometryInfoFactoryTest() {
-    workspace = WorkspaceCreationHelper::create2DWorkspaceWithFullInstrument(
-        1, 1, false);
+  GeometryInfoFactoryTest() : m_workspace(nullptr) {
+    size_t numberOfHistograms = 1;
+    size_t numberOfBins = 1;
+    m_workspace.init(numberOfHistograms, numberOfBins, numberOfBins - 1);
+    bool includeMonitors = false;
+    bool startYNegative = true;
+    const std::string instrumentName("SimpleFakeInstrument");
+    InstrumentCreationHelper::addFullInstrumentToWorkspace(
+        m_workspace, includeMonitors, startYNegative, instrumentName);
   }
 
   void test_constructor() {
-    TS_ASSERT_THROWS_NOTHING(GeometryInfoFactory info(*workspace));
+    TS_ASSERT_THROWS_NOTHING(GeometryInfoFactory info(m_workspace));
   }
 
   void test_getInstrument() {
-    auto info = GeometryInfoFactory(*workspace);
+    auto info = GeometryInfoFactory(m_workspace);
     // This might fail if we get a null instrument, so we test for throw. Since
     // workspace->getInstrument() creates a copy of the instrument there is no
     // point in attempting to verify that the pointer is "correct".
@@ -35,32 +41,32 @@ public:
   }
 
   void test_getSource() {
-    auto info = GeometryInfoFactory(*workspace);
+    auto info = GeometryInfoFactory(m_workspace);
     TS_ASSERT_THROWS_NOTHING(info.getSource());
   }
 
   void test_getSample() {
-    auto info = GeometryInfoFactory(*workspace);
+    auto info = GeometryInfoFactory(m_workspace);
     TS_ASSERT_THROWS_NOTHING(info.getSample());
   }
 
   void test_getSourcePos() {
-    auto info = GeometryInfoFactory(*workspace);
+    auto info = GeometryInfoFactory(m_workspace);
     TS_ASSERT_EQUALS(info.getSourcePos(), Kernel::V3D(-20.0, 0.0, 0.0));
   }
 
   void test_getSamplePos() {
-    auto info = GeometryInfoFactory(*workspace);
+    auto info = GeometryInfoFactory(m_workspace);
     TS_ASSERT_EQUALS(info.getSamplePos(), Kernel::V3D(0.0, 0.0, 0.0));
   }
 
   void test_getL1() {
-    auto info = GeometryInfoFactory(*workspace);
+    auto info = GeometryInfoFactory(m_workspace);
     TS_ASSERT_EQUALS(info.getL1(), 20.0);
   }
 
 private:
-  Workspace2D_sptr workspace;
+  WorkspaceTester m_workspace;
 };
 
 #endif /* MANTID_API_GEOMETRYINFOFACTORY_TEST_H_ */
diff --git a/Framework/API/test/GeometryInfoTest.h b/Framework/API/test/GeometryInfoTest.h
index adf07bf10071dd7ae3c39d2e985a196e3d456365..2236da7ec3cdea509f58a016f05551ba600c3f5a 100644
--- a/Framework/API/test/GeometryInfoTest.h
+++ b/Framework/API/test/GeometryInfoTest.h
@@ -3,63 +3,89 @@
 
 #include <cxxtest/TestSuite.h>
 
-#include "MantidTestHelpers/WorkspaceCreationHelper.h"
+#include "MantidKernel/make_unique.h"
+#include "MantidGeometry/Instrument/ParameterMap.h"
 #include "MantidAPI/GeometryInfo.h"
 
+#include "MantidTestHelpers/FakeObjects.h"
+#include "MantidTestHelpers/InstrumentCreationHelper.h"
+
 using namespace Mantid;
+using namespace Mantid::Geometry;
 using namespace Mantid::API;
-using namespace Mantid::DataObjects;
 
 class GeometryInfoTest : public CxxTest::TestSuite {
 public:
   static GeometryInfoTest *createSuite() { return new GeometryInfoTest(); }
   static void destroySuite(GeometryInfoTest *suite) { delete suite; }
 
-  GeometryInfoTest()
-      : workspace(WorkspaceCreationHelper::create2DWorkspaceWithFullInstrument(
-            5, 1, true, true)),
-        m_instrument_info(*workspace) {}
+  GeometryInfoTest() : m_workspace(nullptr) {
+    size_t numberOfHistograms = 5;
+    size_t numberOfBins = 1;
+    m_workspace.init(numberOfHistograms, numberOfBins, numberOfBins - 1);
+
+    bool includeMonitors = true;
+    bool startYNegative = true;
+    const std::string instrumentName("SimpleFakeInstrument");
+    InstrumentCreationHelper::addFullInstrumentToWorkspace(
+        m_workspace, includeMonitors, startYNegative, instrumentName);
+
+    std::set<int64_t> toMask{0, 3};
+    ParameterMap &pmap = m_workspace.instrumentParameters();
+    for (size_t i = 0; i < m_workspace.getNumberHistograms(); ++i) {
+      if (toMask.find(i) != toMask.end()) {
+        IDetector_const_sptr det = m_workspace.getDetector(i);
+        pmap.addBool(det.get(), "masked", true);
+      }
+    }
+
+    m_instrument_info = Kernel::make_unique<GeometryInfoFactory>(m_workspace);
+  }
 
   void test_constructor() {
     TS_ASSERT_THROWS_NOTHING(
-        GeometryInfo(m_instrument_info, *(workspace->getSpectrum(0))));
+        GeometryInfo(*m_instrument_info, *(m_workspace.getSpectrum(0))));
   }
 
   void test_isMonitor() {
-    TS_ASSERT_EQUALS(GeometryInfo(m_instrument_info,
-                                  *(workspace->getSpectrum(0))).isMonitor(),
+    TS_ASSERT_EQUALS(GeometryInfo(*m_instrument_info,
+                                  *(m_workspace.getSpectrum(0))).isMonitor(),
                      false);
-    TS_ASSERT_EQUALS(GeometryInfo(m_instrument_info,
-                                  *(workspace->getSpectrum(1))).isMonitor(),
+    TS_ASSERT_EQUALS(GeometryInfo(*m_instrument_info,
+                                  *(m_workspace.getSpectrum(1))).isMonitor(),
                      false);
-    TS_ASSERT_EQUALS(GeometryInfo(m_instrument_info,
-                                  *(workspace->getSpectrum(2))).isMonitor(),
+    TS_ASSERT_EQUALS(GeometryInfo(*m_instrument_info,
+                                  *(m_workspace.getSpectrum(2))).isMonitor(),
                      false);
-    TS_ASSERT_EQUALS(GeometryInfo(m_instrument_info,
-                                  *(workspace->getSpectrum(3))).isMonitor(),
+    TS_ASSERT_EQUALS(GeometryInfo(*m_instrument_info,
+                                  *(m_workspace.getSpectrum(3))).isMonitor(),
                      true);
-    TS_ASSERT_EQUALS(GeometryInfo(m_instrument_info,
-                                  *(workspace->getSpectrum(4))).isMonitor(),
+    TS_ASSERT_EQUALS(GeometryInfo(*m_instrument_info,
+                                  *(m_workspace.getSpectrum(4))).isMonitor(),
                      true);
   }
 
   void test_isMasked() {
-    auto ws = WorkspaceCreationHelper::maskSpectra(workspace, {0, 3});
-    auto instrument_info = GeometryInfoFactory(*ws);
-    TS_ASSERT_EQUALS(
-        GeometryInfo(instrument_info, *(ws->getSpectrum(0))).isMasked(), true);
-    TS_ASSERT_EQUALS(
-        GeometryInfo(instrument_info, *(ws->getSpectrum(1))).isMasked(), false);
-    TS_ASSERT_EQUALS(
-        GeometryInfo(instrument_info, *(ws->getSpectrum(2))).isMasked(), false);
-    TS_ASSERT_EQUALS(
-        GeometryInfo(instrument_info, *(ws->getSpectrum(3))).isMasked(), true);
-    TS_ASSERT_EQUALS(
-        GeometryInfo(instrument_info, *(ws->getSpectrum(4))).isMasked(), false);
+    auto instrument_info = GeometryInfoFactory(m_workspace);
+    TS_ASSERT_EQUALS(GeometryInfo(*m_instrument_info,
+                                  *(m_workspace.getSpectrum(0))).isMasked(),
+                     true);
+    TS_ASSERT_EQUALS(GeometryInfo(*m_instrument_info,
+                                  *(m_workspace.getSpectrum(1))).isMasked(),
+                     false);
+    TS_ASSERT_EQUALS(GeometryInfo(*m_instrument_info,
+                                  *(m_workspace.getSpectrum(2))).isMasked(),
+                     false);
+    TS_ASSERT_EQUALS(GeometryInfo(*m_instrument_info,
+                                  *(m_workspace.getSpectrum(3))).isMasked(),
+                     true);
+    TS_ASSERT_EQUALS(GeometryInfo(*m_instrument_info,
+                                  *(m_workspace.getSpectrum(4))).isMasked(),
+                     false);
   }
 
   void test_getL1() {
-    auto info = GeometryInfo(m_instrument_info, *(workspace->getSpectrum(0)));
+    auto info = GeometryInfo(*m_instrument_info, *(m_workspace.getSpectrum(0)));
     TS_ASSERT_EQUALS(info.getL1(), 20.0);
   }
 
@@ -67,53 +93,53 @@ public:
     double x2 = 5.0 * 5.0;
     double y2 = 2.0 * 2.0 * 0.05 * 0.05;
     TS_ASSERT_EQUALS(
-        GeometryInfo(m_instrument_info, *(workspace->getSpectrum(0))).getL2(),
+        GeometryInfo(*m_instrument_info, *(m_workspace.getSpectrum(0))).getL2(),
         sqrt(x2 + 1 * 1 * y2));
     TS_ASSERT_EQUALS(
-        GeometryInfo(m_instrument_info, *(workspace->getSpectrum(1))).getL2(),
+        GeometryInfo(*m_instrument_info, *(m_workspace.getSpectrum(1))).getL2(),
         sqrt(x2 + 0 * 0 * y2));
     TS_ASSERT_EQUALS(
-        GeometryInfo(m_instrument_info, *(workspace->getSpectrum(2))).getL2(),
+        GeometryInfo(*m_instrument_info, *(m_workspace.getSpectrum(2))).getL2(),
         sqrt(x2 + 1 * 1 * y2));
     TS_ASSERT_EQUALS(
-        GeometryInfo(m_instrument_info, *(workspace->getSpectrum(3))).getL2(),
+        GeometryInfo(*m_instrument_info, *(m_workspace.getSpectrum(3))).getL2(),
         -9.0);
     TS_ASSERT_EQUALS(
-        GeometryInfo(m_instrument_info, *(workspace->getSpectrum(4))).getL2(),
+        GeometryInfo(*m_instrument_info, *(m_workspace.getSpectrum(4))).getL2(),
         -2.0);
   }
 
   void test_getTwoTheta() {
-    TS_ASSERT_DELTA(GeometryInfo(m_instrument_info,
-                                 *(workspace->getSpectrum(0))).getTwoTheta(),
+    TS_ASSERT_DELTA(GeometryInfo(*m_instrument_info,
+                                 *(m_workspace.getSpectrum(0))).getTwoTheta(),
                     0.0199973, 1e-6);
-    TS_ASSERT_DELTA(GeometryInfo(m_instrument_info,
-                                 *(workspace->getSpectrum(1))).getTwoTheta(),
+    TS_ASSERT_DELTA(GeometryInfo(*m_instrument_info,
+                                 *(m_workspace.getSpectrum(1))).getTwoTheta(),
                     0.0, 1e-6);
-    TS_ASSERT_DELTA(GeometryInfo(m_instrument_info,
-                                 *(workspace->getSpectrum(2))).getTwoTheta(),
+    TS_ASSERT_DELTA(GeometryInfo(*m_instrument_info,
+                                 *(m_workspace.getSpectrum(2))).getTwoTheta(),
                     0.0199973, 1e-6);
   }
 
   // Legacy test via the workspace method detectorTwoTheta(), which might be
   // removed at some point.
   void test_getTwoThetaLegacy() {
-    auto info = GeometryInfo(m_instrument_info, *(workspace->getSpectrum(2)));
+    auto info = GeometryInfo(*m_instrument_info, *(m_workspace.getSpectrum(2)));
     TS_ASSERT_EQUALS(info.getTwoTheta(),
-                     workspace->detectorTwoTheta(info.getDetector()));
+                     m_workspace.detectorTwoTheta(info.getDetector()));
   }
 
   void test_getSignedTwoTheta() {
     TS_ASSERT_DELTA(
-        GeometryInfo(m_instrument_info, *(workspace->getSpectrum(0)))
+        GeometryInfo(*m_instrument_info, *(m_workspace.getSpectrum(0)))
             .getSignedTwoTheta(),
         -0.0199973, 1e-6);
     TS_ASSERT_DELTA(
-        GeometryInfo(m_instrument_info, *(workspace->getSpectrum(1)))
+        GeometryInfo(*m_instrument_info, *(m_workspace.getSpectrum(1)))
             .getSignedTwoTheta(),
         0.0, 1e-6);
     TS_ASSERT_DELTA(
-        GeometryInfo(m_instrument_info, *(workspace->getSpectrum(2)))
+        GeometryInfo(*m_instrument_info, *(m_workspace.getSpectrum(2)))
             .getSignedTwoTheta(),
         0.0199973, 1e-6);
   }
@@ -121,14 +147,14 @@ public:
   // Legacy test via the workspace method detectorSignedTwoTheta(), which might
   // be removed at some point.
   void test_getSignedTwoThetaLegacy() {
-    auto info = GeometryInfo(m_instrument_info, *(workspace->getSpectrum(2)));
+    auto info = GeometryInfo(*m_instrument_info, *(m_workspace.getSpectrum(2)));
     TS_ASSERT_EQUALS(info.getSignedTwoTheta(),
-                     workspace->detectorSignedTwoTheta(info.getDetector()));
+                     m_workspace.detectorSignedTwoTheta(info.getDetector()));
   }
 
 private:
-  Workspace2D_sptr workspace;
-  GeometryInfoFactory m_instrument_info;
+  WorkspaceTester m_workspace;
+  std::unique_ptr<GeometryInfoFactory> m_instrument_info;
 };
 
 #endif /* MANTID_API_GEOMETRYINFOTEST_H_ */
diff --git a/Framework/Algorithms/test/CMakeLists.txt b/Framework/Algorithms/test/CMakeLists.txt
index 73b5fef2307b7b9b2e46d66078cd5d2a5625a39c..8ebd1e2abed95ba899c68f3f15522de3b5a22015 100644
--- a/Framework/Algorithms/test/CMakeLists.txt
+++ b/Framework/Algorithms/test/CMakeLists.txt
@@ -32,6 +32,7 @@ if ( CXXTEST_FOUND )
   # It will go out of scope at the end of this file so doesn't need un-setting
   set ( TESTHELPER_SRCS ../../TestHelpers/src/TearDownWorld.cpp
                         ../../TestHelpers/src/ComponentCreationHelper.cpp
+                        ../../TestHelpers/src/InstrumentCreationHelper.cpp
                         ../../TestHelpers/src/WorkspaceCreationHelper.cpp
                         ../../TestHelpers/src/SANSInstrumentCreationHelper.cpp
                         ../../TestHelpers/src/MDEventsTestHelper.cpp
diff --git a/Framework/Crystal/test/CMakeLists.txt b/Framework/Crystal/test/CMakeLists.txt
index 5751dfdd1b55daa3d4cf939cfbc508df051c36cd..ce752b4b987b804a09a5bd8653e0e5c111956959 100644
--- a/Framework/Crystal/test/CMakeLists.txt
+++ b/Framework/Crystal/test/CMakeLists.txt
@@ -6,6 +6,7 @@ if ( CXXTEST_FOUND )
   # It will go out of scope at the end of this file so doesn't need un-setting
   set ( TESTHELPER_SRCS ../../TestHelpers/src/TearDownWorld.cpp
                         ../../TestHelpers/src/ComponentCreationHelper.cpp
+                        ../../TestHelpers/src/InstrumentCreationHelper.cpp
                         ../../TestHelpers/src/WorkspaceCreationHelper.cpp
                         ../../TestHelpers/src/MDEventsTestHelper.cpp )
   cxxtest_add_test ( CrystalTest ${TEST_FILES} )
diff --git a/Framework/CurveFitting/test/CMakeLists.txt b/Framework/CurveFitting/test/CMakeLists.txt
index 556f2cc55dba65886476dc9c0cc42a7025e9256f..c9c9735697701f91031f67987b6c8f4ba4d3744c 100644
--- a/Framework/CurveFitting/test/CMakeLists.txt
+++ b/Framework/CurveFitting/test/CMakeLists.txt
@@ -5,6 +5,7 @@ if ( CXXTEST_FOUND )
   # This variable is used within the cxxtest_add_test macro to build these helper classes into the test executable.
   # It will go out of scope at the end of this file so doesn't need un-setting
   set ( TESTHELPER_SRCS ../../TestHelpers/src/TearDownWorld.cpp
+                        ../../TestHelpers/src/InstrumentCreationHelper.cpp
                         ../../TestHelpers/src/WorkspaceCreationHelper.cpp
                         ../../TestHelpers/src/ComponentCreationHelper.cpp
                         ../../TestHelpers/src/StartFrameworkManager.cpp
diff --git a/Framework/DataHandling/test/CMakeLists.txt b/Framework/DataHandling/test/CMakeLists.txt
index 47b4dde26c2e3a658294d047f662308a1002a778..0447c97f4d9b943caae1f05778a83a77a145b117 100644
--- a/Framework/DataHandling/test/CMakeLists.txt
+++ b/Framework/DataHandling/test/CMakeLists.txt
@@ -8,6 +8,7 @@ if ( CXXTEST_FOUND )
                         ../../TestHelpers/src/ComponentCreationHelper.cpp
                         ../../TestHelpers/src/ScopedFileHelper.cpp
                         ../../TestHelpers/src/StartFrameworkManager.cpp
+                        ../../TestHelpers/src/InstrumentCreationHelper.cpp
                         ../../TestHelpers/src/WorkspaceCreationHelper.cpp
       )
 
diff --git a/Framework/DataObjects/test/CMakeLists.txt b/Framework/DataObjects/test/CMakeLists.txt
index b6209a9fe7f7def52116c9ac66c582be1ab3d4b8..cf3bd0f3cbad0fa1b44e41b9a5b8c9ed3bf284e0 100644
--- a/Framework/DataObjects/test/CMakeLists.txt
+++ b/Framework/DataObjects/test/CMakeLists.txt
@@ -6,6 +6,7 @@ if ( CXXTEST_FOUND )
   # It will go out of scope at the end of this file so doesn't need un-setting
   set ( TESTHELPER_SRCS ../../TestHelpers/src/TearDownWorld.cpp
                         ../../TestHelpers/src/ComponentCreationHelper.cpp
+                        ../../TestHelpers/src/InstrumentCreationHelper.cpp
                         ../../TestHelpers/src/WorkspaceCreationHelper.cpp
                         ../../TestHelpers/src/NexusTestHelper.cpp
                         ../../TestHelpers/src/MDEventsTestHelper.cpp 
diff --git a/Framework/ISISLiveData/test/CMakeLists.txt b/Framework/ISISLiveData/test/CMakeLists.txt
index 922418ca8e0ed5aa58a546a0178e84eff2f1ae69..3514ffafaee646624b96df874e75589d993809ec 100644
--- a/Framework/ISISLiveData/test/CMakeLists.txt
+++ b/Framework/ISISLiveData/test/CMakeLists.txt
@@ -6,6 +6,7 @@ if ( CXXTEST_FOUND )
   # It will go out of scope at the end of this file so doesn't need un-setting
   set ( TESTHELPER_SRCS ../../TestHelpers/src/TearDownWorld.cpp
                         ../../TestHelpers/src/ComponentCreationHelper.cpp
+                        ../../TestHelpers/src/InstrumentCreationHelper.cpp
                         ../../TestHelpers/src/WorkspaceCreationHelper.cpp
                         )
 
diff --git a/Framework/LiveData/test/CMakeLists.txt b/Framework/LiveData/test/CMakeLists.txt
index 2854ce66f5793ac1c2c2d64cdf8d288fd97333df..f21580ced25c9c620bd0332a3d80770163123ea7 100644
--- a/Framework/LiveData/test/CMakeLists.txt
+++ b/Framework/LiveData/test/CMakeLists.txt
@@ -8,6 +8,7 @@ if ( CXXTEST_FOUND )
                         TestGroupDataListener.cpp
                         ../../TestHelpers/src/TearDownWorld.cpp
                         ../../TestHelpers/src/ComponentCreationHelper.cpp
+                        ../../TestHelpers/src/InstrumentCreationHelper.cpp
                         ../../TestHelpers/src/WorkspaceCreationHelper.cpp
                         ../../TestHelpers/src/StartFrameworkManager.cpp
       )
diff --git a/Framework/MDAlgorithms/test/CMakeLists.txt b/Framework/MDAlgorithms/test/CMakeLists.txt
index 694c59da7e2f049d5c5bd84af4f00226cd4ba569..d5718355ac3d6bfa5b1ed32bee2c0441d1c2e0e7 100644
--- a/Framework/MDAlgorithms/test/CMakeLists.txt
+++ b/Framework/MDAlgorithms/test/CMakeLists.txt
@@ -10,6 +10,7 @@ if ( CXXTEST_FOUND )
                         ../../TestHelpers/src/MDAlgorithmsTestHelper.cpp
                         ../../TestHelpers/src/MDEventsTestHelper.cpp
                         ../../TestHelpers/src/ScopedFileHelper.cpp
+                        ../../TestHelpers/src/InstrumentCreationHelper.cpp
                         ../../TestHelpers/src/WorkspaceCreationHelper.cpp
                          )
 
diff --git a/Framework/MPIAlgorithms/test/CMakeLists.txt b/Framework/MPIAlgorithms/test/CMakeLists.txt
index 2dfe09a9efba6cdbba0995f5d5fd11612d7b5900..fd7cd24ed92a369390246f8f7f111115fc59b761 100644
--- a/Framework/MPIAlgorithms/test/CMakeLists.txt
+++ b/Framework/MPIAlgorithms/test/CMakeLists.txt
@@ -5,6 +5,7 @@ if ( CXXTEST_FOUND )
   set ( TESTHELPER_SRCS
                         ../../TestHelpers/src/TearDownWorld.cpp
                         ../../TestHelpers/src/ComponentCreationHelper.cpp
+                        ../../TestHelpers/src/InstrumentCreationHelper.cpp
                         ../../TestHelpers/src/WorkspaceCreationHelper.cpp
       )
 
diff --git a/Framework/PythonInterface/test/testhelpers/CMakeLists.txt b/Framework/PythonInterface/test/testhelpers/CMakeLists.txt
index 1aacbe5d6bb30e1ff414e4a37c45484c75c32581..3e07b7e18d23ccd2c9eab39cf121da6709cda132 100644
--- a/Framework/PythonInterface/test/testhelpers/CMakeLists.txt
+++ b/Framework/PythonInterface/test/testhelpers/CMakeLists.txt
@@ -26,6 +26,7 @@ set ( SRC_FILES
   WorkspaceCreationHelperModule.cpp 
   ${FRAMEWORK_DIR}/TestHelpers/src/ComponentCreationHelper.cpp
   ${FRAMEWORK_DIR}/TestHelpers/src/MDEventsTestHelper.cpp
+  ${FRAMEWORK_DIR}/TestHelpers/src/InstrumentCreationHelper.cpp
   ${FRAMEWORK_DIR}/TestHelpers/src/WorkspaceCreationHelper.cpp
 )
 add_library ( PythonWorkspaceCreationHelper ${SRC_FILES} ${INC_FILES} ${PYTHON_INSTALL_FILES} )
diff --git a/Framework/SINQ/test/CMakeLists.txt b/Framework/SINQ/test/CMakeLists.txt
index 5a868a37ee7ef635562650960ad61b32cd5224f5..93f379e2edde652c1be1290b486be727546c0b06 100644
--- a/Framework/SINQ/test/CMakeLists.txt
+++ b/Framework/SINQ/test/CMakeLists.txt
@@ -5,6 +5,7 @@ if ( CXXTEST_FOUND )
   
   set ( TESTHELPER_SRCS ../../TestHelpers/src/TearDownWorld.cpp 
                         ../../TestHelpers/src/ComponentCreationHelper.cpp
+                        ../../TestHelpers/src/InstrumentCreationHelper.cpp
                         ../../TestHelpers/src/WorkspaceCreationHelper.cpp )
 
   cxxtest_add_test ( PSISINQTest ${TEST_FILES} ${GMOCK_TEST_FILES})
diff --git a/Framework/TestHelpers/inc/MantidTestHelpers/InstrumentCreationHelper.h b/Framework/TestHelpers/inc/MantidTestHelpers/InstrumentCreationHelper.h
index d9f5a4524e06aa00138ac0a45a4fda086e57e077..3ef6ca88f0d21a5cf9862a6d520dc08055a197f5 100644
--- a/Framework/TestHelpers/inc/MantidTestHelpers/InstrumentCreationHelper.h
+++ b/Framework/TestHelpers/inc/MantidTestHelpers/InstrumentCreationHelper.h
@@ -1,90 +1,19 @@
 #ifndef INSTRUMENTCREATIONHELPER_H_
 #define INSTRUMENTCREATIONHELPER_H_
 
-#include "MantidAPI/MatrixWorkspace.h"
-#include "MantidGeometry/Instrument.h"
-#include "MantidGeometry/Instrument/Detector.h"
-#include "MantidGeometry/Instrument/ReferenceFrame.h"
+#include "MantidTestHelpers/ComponentCreationHelper.h"
+
+namespace Mantid {
+namespace API {
+class MatrixWorkspace;
+}
+}
 
 namespace InstrumentCreationHelper {
-using namespace Mantid;
-using namespace Mantid::Kernel;
-using namespace Mantid::Geometry;
-using namespace Mantid::API;
 
-void addFullInstrumentToWorkspace(MatrixWorkspace &workspace,
+void addFullInstrumentToWorkspace(Mantid::API::MatrixWorkspace &workspace,
                                   bool includeMonitors, bool startYNegative,
-                                  const std::string &instrumentName) {
-  auto instrument = boost::make_shared<Instrument>(instrumentName);
-  instrument->setReferenceFrame(
-      boost::make_shared<ReferenceFrame>(Y, Z, Left, ""));
-  workspace.setInstrument(instrument);
-
-  const double pixelRadius(0.05);
-  Object_sptr pixelShape = ComponentCreationHelper::createCappedCylinder(
-      pixelRadius, 0.02, V3D(0.0, 0.0, 0.0), V3D(0., 1.0, 0.), "tube");
-
-  const double detXPos(5.0);
-  auto ndets = workspace.getNumberHistograms();
-  if (includeMonitors)
-    ndets -= 2;
-  for (size_t i = 0; i < ndets; ++i) {
-    std::ostringstream lexer;
-    lexer << "pixel-" << i << ")";
-    Detector *physicalPixel =
-        new Detector(lexer.str(), workspace.getAxis(1)->spectraNo(i), pixelShape,
-                     instrument.get());
-    auto ycount(i);
-    if (startYNegative)
-      ycount -= 1;
-    const double ypos = static_cast<double>(ycount) * 2.0 * pixelRadius;
-    physicalPixel->setPos(detXPos, ypos, 0.0);
-    instrument->add(physicalPixel);
-    instrument->markAsDetector(physicalPixel);
-    workspace.getSpectrum(i)->addDetectorID(physicalPixel->getID());
-  }
-
-  // Monitors last
-  if (includeMonitors) // These occupy the last 2 spectra
-  {
-    Detector *monitor1 =
-        new Detector("mon1", workspace.getAxis(1)->spectraNo(ndets), Object_sptr(),
-                     instrument.get());
-    monitor1->setPos(-9.0, 0.0, 0.0);
-    instrument->add(monitor1);
-    instrument->markAsMonitor(monitor1);
-
-    Detector *monitor2 =
-        new Detector("mon2", workspace.getAxis(1)->spectraNo(ndets) + 1,
-                     Object_sptr(), instrument.get());
-    monitor2->setPos(-2.0, 0.0, 0.0);
-    instrument->add(monitor2);
-    instrument->markAsMonitor(monitor2);
-  }
-
-  // Define a source and sample position
-  // Define a source component
-  ObjComponent *source = new ObjComponent(
-      "moderator",
-      ComponentCreationHelper::createSphere(0.1, V3D(0, 0, 0), "1"),
-      instrument.get());
-  source->setPos(V3D(-20, 0.0, 0.0));
-  instrument->add(source);
-  instrument->markAsSource(source);
-
-  // Define a sample as a simple sphere
-  ObjComponent *sample = new ObjComponent(
-      "samplePos",
-      ComponentCreationHelper::createSphere(0.1, V3D(0, 0, 0), "1"),
-      instrument.get());
-  instrument->setPos(0.0, 0.0, 0.0);
-  instrument->add(sample);
-  instrument->markAsSamplePos(sample);
-  // chopper position
-  Component *chop_pos =
-      new Component("chopper-position", Kernel::V3D(-10, 0, 0), instrument.get());
-  instrument->add(chop_pos);
-}
+                                  const std::string &instrumentName);
 }
 
 #endif /* INSTRUMENTCREATIONHELPER_H_ */
diff --git a/Framework/TestHelpers/src/InstrumentCreationHelper.cpp b/Framework/TestHelpers/src/InstrumentCreationHelper.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..1e4df540b2700cb7d451319f1132233eefbb0af0
--- /dev/null
+++ b/Framework/TestHelpers/src/InstrumentCreationHelper.cpp
@@ -0,0 +1,90 @@
+#include "MantidTestHelpers/InstrumentCreationHelper.h"
+
+#include "MantidAPI/MatrixWorkspace.h"
+#include "MantidGeometry/Instrument.h"
+#include "MantidGeometry/Instrument/Detector.h"
+#include "MantidGeometry/Instrument/ReferenceFrame.h"
+
+using namespace Mantid;
+using namespace Mantid::Kernel;
+using namespace Mantid::Geometry;
+using namespace Mantid::API;
+namespace InstrumentCreationHelper {
+
+void addFullInstrumentToWorkspace(MatrixWorkspace &workspace,
+                                  bool includeMonitors, bool startYNegative,
+                                  const std::string &instrumentName) {
+  auto instrument = boost::make_shared<Instrument>(instrumentName);
+  instrument->setReferenceFrame(
+      boost::make_shared<ReferenceFrame>(Y, Z, Left, ""));
+  workspace.setInstrument(instrument);
+
+  const double pixelRadius(0.05);
+  Object_sptr pixelShape = ComponentCreationHelper::createCappedCylinder(
+      pixelRadius, 0.02, V3D(0.0, 0.0, 0.0), V3D(0., 1.0, 0.), "tube");
+
+  const double detXPos(5.0);
+  // Careful! Do not use size_t or auto, the unisgned will break the -=2 below.
+  int ndets = static_cast<int>(workspace.getNumberHistograms());
+  if (includeMonitors)
+    ndets -= 2;
+  for (int i = 0; i < ndets; ++i) {
+    std::ostringstream lexer;
+    lexer << "pixel-" << i << ")";
+    Detector *physicalPixel =
+        new Detector(lexer.str(), workspace.getAxis(1)->spectraNo(i), pixelShape,
+                     instrument.get());
+    int ycount(i);
+    if (startYNegative)
+      ycount -= 1;
+    const double ypos = ycount * 2.0 * pixelRadius;
+    physicalPixel->setPos(detXPos, ypos, 0.0);
+    instrument->add(physicalPixel);
+    instrument->markAsDetector(physicalPixel);
+    workspace.getSpectrum(i)->setDetectorID(physicalPixel->getID());
+  }
+
+  // Monitors last
+  if (includeMonitors) // These occupy the last 2 spectra
+  {
+    Detector *monitor1 =
+        new Detector("mon1", workspace.getAxis(1)->spectraNo(ndets), Object_sptr(),
+                     instrument.get());
+    monitor1->setPos(-9.0, 0.0, 0.0);
+    instrument->add(monitor1);
+    instrument->markAsMonitor(monitor1);
+    workspace.getSpectrum(ndets)->setDetectorID(ndets + 1);
+
+    Detector *monitor2 =
+        new Detector("mon2", workspace.getAxis(1)->spectraNo(ndets) + 1,
+                     Object_sptr(), instrument.get());
+    monitor2->setPos(-2.0, 0.0, 0.0);
+    instrument->add(monitor2);
+    instrument->markAsMonitor(monitor2);
+    workspace.getSpectrum(ndets + 1)->setDetectorID(ndets + 2);
+  }
+
+  // Define a source and sample position
+  // Define a source component
+  ObjComponent *source = new ObjComponent(
+      "moderator",
+      ComponentCreationHelper::createSphere(0.1, V3D(0, 0, 0), "1"),
+      instrument.get());
+  source->setPos(V3D(-20, 0.0, 0.0));
+  instrument->add(source);
+  instrument->markAsSource(source);
+
+  // Define a sample as a simple sphere
+  ObjComponent *sample = new ObjComponent(
+      "samplePos",
+      ComponentCreationHelper::createSphere(0.1, V3D(0, 0, 0), "1"),
+      instrument.get());
+  instrument->setPos(0.0, 0.0, 0.0);
+  instrument->add(sample);
+  instrument->markAsSamplePos(sample);
+  // chopper position
+  Component *chop_pos =
+      new Component("chopper-position", Kernel::V3D(-10, 0, 0), instrument.get());
+  instrument->add(chop_pos);
+}
+}
diff --git a/Framework/WorkflowAlgorithms/test/CMakeLists.txt b/Framework/WorkflowAlgorithms/test/CMakeLists.txt
index 4992d610d377a9d5274cdd14c53c1b9e787ddadc..3e9182162b1f414d60394674e474095d57224a29 100644
--- a/Framework/WorkflowAlgorithms/test/CMakeLists.txt
+++ b/Framework/WorkflowAlgorithms/test/CMakeLists.txt
@@ -7,6 +7,7 @@ if ( CXXTEST_FOUND )
   # It will go out of scope at the end of this file so doesn't need un-setting
   set ( TESTHELPER_SRCS ../../TestHelpers/src/TearDownWorld.cpp
                         ../../TestHelpers/src/ComponentCreationHelper.cpp
+                        ../../TestHelpers/src/InstrumentCreationHelper.cpp
                         ../../TestHelpers/src/WorkspaceCreationHelper.cpp )
   cxxtest_add_test ( WorkflowAlgorithmsTest ${TEST_FILES} )
   target_link_libraries ( WorkflowAlgorithmsTest LINK_PRIVATE ${TCMALLOC_LIBRARIES_LINKTIME} 
diff --git a/MantidQt/API/test/CMakeLists.txt b/MantidQt/API/test/CMakeLists.txt
index e524aaa6ae3d16f9565a9cec900e36cbe18bbc77..7722cd0f6c1f1b7ada0de935113d7640a89f09a7 100644
--- a/MantidQt/API/test/CMakeLists.txt
+++ b/MantidQt/API/test/CMakeLists.txt
@@ -8,6 +8,7 @@ if ( CXXTEST_FOUND )
     # It will go out of scope at the end of this file so doesn't need un-setting
     set ( TESTHELPER_SRCS ../../../Framework/TestHelpers/src/TearDownWorld.cpp
                           ../../../Framework/TestHelpers/src/ComponentCreationHelper.cpp
+                          ../../../Framework/TestHelpers/src/InstrumentCreationHelper.cpp
                           ../../../Framework/TestHelpers/src/WorkspaceCreationHelper.cpp
         )
     
diff --git a/MantidQt/CustomInterfaces/test/CMakeLists.txt b/MantidQt/CustomInterfaces/test/CMakeLists.txt
index 90a9052d4ad7a8d395b05b89573a29a00b3dd24d..f593d538ead2833dd11651a78febceb87ffbef3d 100644
--- a/MantidQt/CustomInterfaces/test/CMakeLists.txt
+++ b/MantidQt/CustomInterfaces/test/CMakeLists.txt
@@ -4,6 +4,7 @@ if ( CXXTEST_FOUND )
   include_directories( ../../../Framework/TestHelpers/inc ../../../Framework/DataObjects/inc )
 
   set ( TESTHELPER_SRCS ../../../Framework/TestHelpers/src/ComponentCreationHelper.cpp 
+                        ../../../Framework/TestHelpers/src/InstrumentCreationHelper.cpp
                         ../../../Framework/TestHelpers/src/WorkspaceCreationHelper.cpp
                         ../../../Framework/TestHelpers/src/ScopedFileHelper.cpp
                         ../../../Framework/TestHelpers/src/TearDownWorld.cpp
diff --git a/MantidQt/SliceViewer/CMakeLists.txt b/MantidQt/SliceViewer/CMakeLists.txt
index 686cb9b5b3813cb45806bb74c8083c5ad4614cc8..e2fbbf0254fd450c003a32332236d74928866dbe 100644
--- a/MantidQt/SliceViewer/CMakeLists.txt
+++ b/MantidQt/SliceViewer/CMakeLists.txt
@@ -175,8 +175,10 @@ if ( CXXTEST_FOUND )
 
   include_directories( ../../Framework/TestHelpers/inc ../../Framework/DataObjects/inc ../../Framework/Crystal/inc )
 
-  set ( TESTHELPER_SRCS ../../Framework/TestHelpers/src/WorkspaceCreationHelper.cpp 
-  ../../Framework/TestHelpers/src/ComponentCreationHelper.cpp 
+  set ( TESTHELPER_SRCS
+    ../../Framework/TestHelpers/src/InstrumentCreationHelper.cpp
+    ../../Framework/TestHelpers/src/WorkspaceCreationHelper.cpp
+    ../../Framework/TestHelpers/src/ComponentCreationHelper.cpp
   )
 
   cxxtest_add_test ( SliceViewerTest ${TEST_FILES} ${GMOCK_TEST_FILES} )
diff --git a/Vates/VatesAPI/CMakeLists.txt b/Vates/VatesAPI/CMakeLists.txt
index ecc53db40aa04538d99abfb8c9f496198ba45cb4..05a3f3c32462cc1c393c997f0220687c003c654d 100644
--- a/Vates/VatesAPI/CMakeLists.txt
+++ b/Vates/VatesAPI/CMakeLists.txt
@@ -246,6 +246,7 @@ if( CXXTEST_FOUND AND GMOCK_FOUND AND GTEST_FOUND )
 
   include_directories( inc ../../Framework/TestHelpers/inc ../../Framework/DataHandling/inc ../../Framework/DataObjects/inc ../../Framework/MDAlgorithms/inc)
   set ( TESTHELPER_SRCS ../../Framework/TestHelpers/src/ComponentCreationHelper.cpp 
+                        ../../Framework/TestHelpers/src/InstrumentCreationHelper.cpp
                         ../../Framework/TestHelpers/src/WorkspaceCreationHelper.cpp
                         ../../Framework/TestHelpers/src/MDEventsTestHelper.cpp 
                         ../../Framework/TestHelpers/src/StartFrameworkManager.cpp )
diff --git a/Vates/VatesSimpleGui/ViewWidgets/CMakeLists.txt b/Vates/VatesSimpleGui/ViewWidgets/CMakeLists.txt
index dd587576537f786f627f14a99186d2d4adf06294..b566f8461133884b92b672102e36d547b6fc3411 100644
--- a/Vates/VatesSimpleGui/ViewWidgets/CMakeLists.txt
+++ b/Vates/VatesSimpleGui/ViewWidgets/CMakeLists.txt
@@ -164,6 +164,7 @@ if( CXXTEST_FOUND AND GMOCK_FOUND AND GTEST_FOUND )
 
   include_directories( inc ../../../Framework/TestHelpers/inc ../../../Framework/DataHandling/inc ../../../Framework/DataObjects/inc)
   set ( TESTHELPER_SRCS ../../../Framework/TestHelpers/src/ComponentCreationHelper.cpp 
+                        ../../../Framework/TestHelpers/src/InstrumentCreationHelper.cpp
                         ../../../Framework/TestHelpers/src/WorkspaceCreationHelper.cpp
                         ../../../Framework/TestHelpers/src/MDEventsTestHelper.cpp 
                         ../../../Framework/TestHelpers/src/StartFrameworkManager.cpp )