diff --git a/Core/StandardSamples/SimulationRegistry.cpp b/Core/StandardSamples/SimulationRegistry.cpp
index 37776b8a9b6c8262e4a8f5ffc14e86635ea0c83a..bf0a5341782fe9a0ac575a7c2d794973cab65d8e 100644
--- a/Core/StandardSamples/SimulationRegistry.cpp
+++ b/Core/StandardSamples/SimulationRegistry.cpp
@@ -6,6 +6,9 @@
 
 SimulationRegistry::SimulationRegistry()
 {
+    registerItem(
+                "isgisaxs01", StandardSimulations::IsGISAXS01,
+        "Mixture of cylinders and prisms without interference");
 
     registerItem(
         "mesocrystal01", StandardSimulations::MesoCrystal01,
diff --git a/Core/StandardSamples/StandardSimulations.cpp b/Core/StandardSamples/StandardSimulations.cpp
index 5e7e5f2304a474468311104be3cc905bba6151db..ab7a2c5e977f450d7754aa632f7e0af9e1b46d1c 100644
--- a/Core/StandardSamples/StandardSimulations.cpp
+++ b/Core/StandardSamples/StandardSimulations.cpp
@@ -4,6 +4,24 @@
 #include "ResolutionFunction2DSimple.h"
 #include "Units.h"
 
+Simulation *StandardSimulations::IsGISAXS01()
+{
+    SampleBuilderFactory factory;
+    ISampleBuilder *builder = factory.createBuilder("isgisaxs01");
+
+    Simulation *result = new Simulation();
+
+    result->setDetectorParameters(
+        100,-1.0*Units::degree, 1.0*Units::degree, 100,
+        0.0*Units::degree, 2.0*Units::degree, true);
+    result->setBeamParameters(
+        1.0*Units::angstrom, 0.2*Units::degree, 0.0*Units::degree);
+
+    result->setSampleBuilder( builder );
+
+    return result;
+}
+
 Simulation *StandardSimulations::MesoCrystal01()
 {
     SampleBuilderFactory factory;
diff --git a/Core/StandardSamples/StandardSimulations.h b/Core/StandardSamples/StandardSimulations.h
index 4061e77b03d8850afbb6396f699fd1cdd9937954..d535a17e9408a13dce2509797320133b8fa9991f 100644
--- a/Core/StandardSamples/StandardSimulations.h
+++ b/Core/StandardSamples/StandardSimulations.h
@@ -8,7 +8,7 @@ class Simulation;
 
 namespace StandardSimulations{
 
-
+Simulation *IsGISAXS01();
 Simulation *MesoCrystal01();
 Simulation *PolarizedDWBAZeroMag();
 
diff --git a/Tests/FunctionalTests/TestCore/IsGISAXS01/IsGISAXS01.cpp b/Tests/FunctionalTests/TestCore/IsGISAXS01/IsGISAXS01.cpp
index ccf009565d6bc4e2fba0d27ef5d833d06547d8b1..25c5ee9b58316ea9a69f773daf0ceb5be319a709 100644
--- a/Tests/FunctionalTests/TestCore/IsGISAXS01/IsGISAXS01.cpp
+++ b/Tests/FunctionalTests/TestCore/IsGISAXS01/IsGISAXS01.cpp
@@ -5,6 +5,7 @@
 #include "Utils.h"
 #include "Units.h"
 #include "MathFunctions.h"
+#include "SimulationRegistry.h"
 #include <iostream>
 #include <cmath>
 
@@ -13,44 +14,34 @@ FunctionalTests::IsGISAXS01::IsGISAXS01()
     : m_name("IsGISAXS01")
     , m_description("Mixture of cylinders and prisms without interference")
     , m_result(0)
+	, m_reference(0)
 { }
 
 
-void FunctionalTests::IsGISAXS01::run()
+void FunctionalTests::IsGISAXS01::run(const std::string &path_to_data)
 {
-    SampleBuilderFactory factory;
-    ISample *sample = factory.createSample("isgisaxs01");
 
-    Simulation simulation;
-    simulation.setDetectorParameters(
-        100,-1.0*Units::degree, 1.0*Units::degree, 100,
-        0.0*Units::degree, 2.0*Units::degree, true);
-    simulation.setBeamParameters(
-        1.0*Units::angstrom, 0.2*Units::degree, 0.0*Units::degree);
+    SimulationRegistry sim_registry;
+    Simulation *simulation = sim_registry.createSimulation("isgisaxs01");
 
-    // Run simulation
-    simulation.setSample(*sample);
-    simulation.runSimulation();
+    // loading reference data
+    std::string filename = path_to_data + "isgisaxs01_reference.ima.gz";
+    m_reference = OutputDataIOFactory::readIntensityData(filename);
 
-    // Copy results
-    m_result = simulation.getIntensityData();
+    simulation->runSimulation();
 
-    delete sample;
+    m_result = simulation->getIntensityData();
+    delete simulation;
 }
 
 
-int FunctionalTests::IsGISAXS01::analyseResults(const std::string &path_to_data)
+int FunctionalTests::IsGISAXS01::analyseResults()
 {
     const double threshold(2e-10);
 
-    // Retrieve reference data.
-    std::string filename = path_to_data + "isgisaxs01_reference.ima.gz";
-    OutputData<double > *reference =
-        OutputDataIOFactory::readIntensityData(filename);
-
     // Calculating average relative difference.
-    *m_result -= *reference;
-    *m_result /= *reference;
+    *m_result -= *m_reference;
+    *m_result /= *m_reference;
 
     double diff(0);
     for(OutputData<double>::const_iterator it =
@@ -60,15 +51,12 @@ int FunctionalTests::IsGISAXS01::analyseResults(const std::string &path_to_data)
     diff /= m_result->getAllocatedSize();
 
     // Assess result.
-    bool status_ok(true);
-    if( diff > threshold || MathFunctions::isnan(diff) ) status_ok=false;
-
+	bool status_ok(true);
+    if( diff > threshold || std::isnan(diff)) status_ok=false;
 
+    std::cout << " diff " << diff << std::endl;
     std::cout << m_name << " " << m_description << " " <<
-        (status_ok ? "[OK]" : "[FAILED]") << std::endl;
-
-    delete reference;
-
+            (status_ok ? "[OK]" : "[FAILED]") << std::endl;
     return (status_ok ? 0 : 1);
 }
 
@@ -83,7 +71,7 @@ std::string GetPathToData(int argc, char **argv)
 int main(int argc, char **argv)
 {
     FunctionalTests::IsGISAXS01 test;
-    test.run();
-    return test.analyseResults(GetPathToData(argc,argv));
+    test.run(GetPathToData(argc, argv));
+    return test.analyseResults();
 }
 #endif
diff --git a/Tests/FunctionalTests/TestCore/IsGISAXS01/IsGISAXS01.h b/Tests/FunctionalTests/TestCore/IsGISAXS01/IsGISAXS01.h
index cae1dbcea3535ef9963f21b7dff3c5ffb9ad534f..5d3a5b07a9384f27dc50cac1241ce9afe0581471 100644
--- a/Tests/FunctionalTests/TestCore/IsGISAXS01/IsGISAXS01.h
+++ b/Tests/FunctionalTests/TestCore/IsGISAXS01/IsGISAXS01.h
@@ -1,23 +1,28 @@
 #ifndef FUNCTIONALTESTS_ISGISAXS01_H
 #define FUNCTIONALTESTS_ISGISAXS01_H
 
+#include "ISampleBuilder.h"
 #include <string>
 #include "OutputData.h"
 
+class ISample;
+class Simulation;
+
 namespace FunctionalTests {
 
 class IsGISAXS01
 {
  public:
     IsGISAXS01();
-    ~IsGISAXS01() { delete m_result; }
-    void run();
-    int analyseResults(const std::string &path_to_data = std::string());
-    const OutputData<double> *getOutputData() { return m_result;}
+    ~IsGISAXS01() { delete m_result; delete m_reference; }
+    void run(const std::string &path_to_data = std::string());
+    int analyseResults();
+//    const OutputData<double> *getOutputData() { return m_result;}
  private:
     std::string m_name;
     std::string m_description;
     OutputData<double> *m_result;
+    OutputData<double> *m_reference;
 };
 
 }
diff --git a/Tests/FunctionalTests/TestCore/PolarizedDWBAZeroMag/PolarizedDWBAZeroMag.h b/Tests/FunctionalTests/TestCore/PolarizedDWBAZeroMag/PolarizedDWBAZeroMag.h
index c3bda9aac6e4a5c97b0a33be5370d9f670ac1383..20e3499eb1a1a6e56d71664e9ee94d3c93a66ca9 100644
--- a/Tests/FunctionalTests/TestCore/PolarizedDWBAZeroMag/PolarizedDWBAZeroMag.h
+++ b/Tests/FunctionalTests/TestCore/PolarizedDWBAZeroMag/PolarizedDWBAZeroMag.h
@@ -8,7 +8,6 @@
 
 class ISample;
 class Simulation;
-#include "OutputData.h"
 
 
 namespace FunctionalTests {