diff --git a/Core/InputOutput/IntensityDataIOFactory.cpp b/Core/InputOutput/IntensityDataIOFactory.cpp
index 9123c5eb6a01105974c7e0ddb848c9a8095893dd..8db3a28e42a5f2a3f91f17474cfa0248caecc662 100644
--- a/Core/InputOutput/IntensityDataIOFactory.cpp
+++ b/Core/InputOutput/IntensityDataIOFactory.cpp
@@ -18,6 +18,7 @@
 #include "Core/Instrument/IHistogram.h"
 #include "Core/Instrument/SimulationResult.h"
 #include "Core/Tools/FileSystemUtils.h"
+#include <exception>
 #include <fstream>
 #include <memory>
 
@@ -25,9 +26,9 @@ OutputData<double>* IntensityDataIOFactory::readOutputData(const std::string& fi
 {
     if (!FileSystemUtils::IsFileExists(file_name))
         return nullptr;
-    std::unique_ptr<OutputDataReader> P_reader(OutputDataReadFactory::getReader(file_name));
-    if (P_reader)
-        return P_reader->getOutputData();
+    std::unique_ptr<OutputDataReader> reader(OutputDataReadFactory::getReader(file_name));
+    if (reader)
+        return reader->getOutputData();
     return nullptr;
 }
 
@@ -35,17 +36,19 @@ OutputData<double>* IntensityDataIOFactory::readReflectometryData(const std::str
 {
     if (!FileSystemUtils::IsFileExists(file_name))
         return nullptr;
-    std::unique_ptr<OutputDataReader> P_reader(
+    std::unique_ptr<OutputDataReader> reader(
         OutputDataReadFactory::getReflectometryReader(file_name));
-    if (P_reader)
-        return P_reader->getOutputData();
+    if (reader)
+        return reader->getOutputData();
     return nullptr;
 }
 
 IHistogram* IntensityDataIOFactory::readIntensityData(const std::string& file_name)
 {
-    std::unique_ptr<OutputData<double>> P_data(readOutputData(file_name));
-    return IHistogram::createHistogram(*P_data);
+    std::unique_ptr<OutputData<double>> data(readOutputData(file_name));
+    if (!data)
+        throw std::runtime_error("Could not read " + file_name);
+    return IHistogram::createHistogram(*data);
 }
 
 void IntensityDataIOFactory::writeOutputData(const OutputData<double>& data,
@@ -59,8 +62,8 @@ void IntensityDataIOFactory::writeOutputData(const OutputData<double>& data,
 void IntensityDataIOFactory::writeIntensityData(const IHistogram& histogram,
                                                 const std::string& file_name)
 {
-    std::unique_ptr<OutputData<double>> P_data(histogram.createOutputData());
-    writeOutputData(*P_data, file_name);
+    std::unique_ptr<OutputData<double>> data(histogram.createOutputData());
+    writeOutputData(*data, file_name);
 }
 
 void IntensityDataIOFactory::writeSimulationResult(const SimulationResult& result,
diff --git a/Core/Instrument/Instrument.h b/Core/Instrument/Instrument.h
index 86d79c1510b4d75f2284305dbecfc4778a1f3448..efcb5a58e807f48dd39d6d41a9d5695d9843bb38 100644
--- a/Core/Instrument/Instrument.h
+++ b/Core/Instrument/Instrument.h
@@ -31,7 +31,7 @@ class SimulationElement;
 //! Assembles beam, detector and their relative positions with respect to the sample.
 //! @ingroup simulation_internal
 
-class BA_CORE_API_ Instrument final : public INode
+class BA_CORE_API_ Instrument : public INode
 {
 public:
     Instrument();
diff --git a/Tests/Functional/CMakeLists.txt b/Tests/Functional/CMakeLists.txt
index 4f94caf38af2b5af710445ca3bb972ff3b231644..a460717b11c209dda62e1b9d89e368927bb39833 100644
--- a/Tests/Functional/CMakeLists.txt
+++ b/Tests/Functional/CMakeLists.txt
@@ -4,7 +4,6 @@
 
 include_directories(${CMAKE_SOURCE_DIR}/Tests/Functional/TestMachinery)
 
-add_subdirectory(Std)
 add_subdirectory(Core)
 add_subdirectory(Fit)
 
diff --git a/Tests/Functional/Core/CMakeLists.txt b/Tests/Functional/Core/CMakeLists.txt
index 4fc1c336109b99a2dd26d5e7a61f049adcb3adab..c8a15f9413c415548819a2da5438f04acfa540f0 100644
--- a/Tests/Functional/Core/CMakeLists.txt
+++ b/Tests/Functional/Core/CMakeLists.txt
@@ -3,10 +3,10 @@
 ############################################################################
 
 # add standard and special tests
-add_subdirectory(CoreStandardTest)
-add_subdirectory(SelfConsistenceTest)
+add_subdirectory(Consistence)
 add_subdirectory(CoreSpecial)
 add_subdirectory(Fitting)
+add_subdirectory(Std)
 
 # build MPI test executable
 if(BORNAGAIN_MPI)
diff --git a/Tests/Functional/Core/Consistence/CMakeLists.txt b/Tests/Functional/Core/Consistence/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..957fd6bd3bbb8570ac566a8c7da5c37f339f20d0
--- /dev/null
+++ b/Tests/Functional/Core/Consistence/CMakeLists.txt
@@ -0,0 +1,14 @@
+include(GoogleTest) # provides gtest_discover_tests
+
+set(test TestCoreConsistence)
+
+file(GLOB source_files "*.cpp")
+
+add_executable(${test} ${source_files} ${CMAKE_SOURCE_DIR}/Tests/GTestWrapper/TestAll.cpp)
+
+target_include_directories(${test} PUBLIC
+    ${BornAgainCore_INCLUDE_DIRS}
+    ${CMAKE_SOURCE_DIR}/ThirdParty/common/gtest/gtest-1.8.0/include)
+target_link_libraries(${test} BornAgainCore gtest)
+
+gtest_discover_tests(${test} TEST_PREFIX Core.)
diff --git a/Tests/Functional/Core/Consistence/compare.cpp b/Tests/Functional/Core/Consistence/compare.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..4f9cedc23aa9683109b3e925bc08d37d3e69c120
--- /dev/null
+++ b/Tests/Functional/Core/Consistence/compare.cpp
@@ -0,0 +1,51 @@
+// ************************************************************************** //
+//
+//  BornAgain: simulate and fit scattering at grazing incidence
+//
+//! @file      Tests/Functional/Core/Std/Check.cpp
+//! @brief     Implements function compare for core consistence test
+//!
+//! @homepage  http://www.bornagainproject.org
+//! @license   GNU General Public License v3 or higher (see COPYING)
+//! @copyright Forschungszentrum Jülich GmbH 2018
+//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
+//
+// ************************************************************************** //
+
+#include "BABuild.h"
+#include "BATesting.h"
+#include "Core/InputOutput/IntensityDataIOFactory.h"
+#include "Core/Instrument/IntensityDataFunctions.h"
+#include "Core/Multilayer/IMultiLayerBuilder.h"
+#include "Core/Multilayer/MultiLayer.h"
+#include "Core/Simulation/Simulation.h"
+#include "Core/StandardSamples/SampleBuilderFactory.h"
+#include "Core/StandardSamples/SimulationFactory.h"
+#include "Core/Tools/FileSystemUtils.h"
+#include <cassert>
+#include <iostream>
+
+std::unique_ptr<OutputData<double>> load(const std::string& name)
+{
+    assert(name != "");
+    const std::string path =
+        FileSystemUtils::jointPath(BATesting::StdReferenceDir(), name + ".int.gz");
+    std::unique_ptr<OutputData<double>> data;
+    try {
+        data.reset(IntensityDataIOFactory::readOutputData(path));
+    } catch (const std::exception&) {
+        std::cout << "Data file " << path << "not found.\n"
+                  << "Run the pertinent Core standard test, copy the fresh data file"
+                  << " to the reference directory,\n"
+                  << "then rerun this test." << std::endl;
+    }
+    return data;
+}
+
+int compare(const std::string& name0, const std::string& name1, const double limit)
+{
+    std::unique_ptr<OutputData<double>> data0 = load(name0);
+    std::unique_ptr<OutputData<double>> data1 = load(name1);
+
+    return IntensityDataFunctions::checkRelativeDifference(*data0, *data1, limit);
+}
diff --git a/Tests/Functional/Core/Consistence/macros.cpp b/Tests/Functional/Core/Consistence/macros.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e17612c0dc1209c03285f1393b28fd2017f07335
--- /dev/null
+++ b/Tests/Functional/Core/Consistence/macros.cpp
@@ -0,0 +1,47 @@
+// ************************************************************************** //
+//
+//  BornAgain: simulate and fit scattering at grazing incidence
+//
+//! @file      Tests/Functional/Core/Std/macros.cpp
+//! @brief     Implements Core standard tests through gtest macros.
+//!
+//! @homepage  http://www.bornagainproject.org
+//! @license   GNU General Public License v3 or higher (see COPYING)
+//! @copyright Forschungszentrum Jülich GmbH 2018
+//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
+//
+// ************************************************************************** //
+
+#include "Tests/GTestWrapper/google_test.h"
+#include <string>
+
+int compare(const std::string& name0, const std::string& name1, const double limit);
+
+class Consistence : public ::testing::Test
+{
+};
+
+TEST_F(Consistence, SpecularWithSlicing)
+{
+    EXPECT_TRUE(compare("SpecularWithSlicing_01", "SpecularWithSlicing_02", 2e-10));
+    EXPECT_TRUE(compare("SpecularWithSlicing_01", "SpecularWithSlicing_03", 2e-10));
+}
+
+TEST_F(Consistence, InstrumentDefinitionComparison)
+{
+    EXPECT_TRUE(
+        compare("InstrumentDefinitionComparison_0", "InstrumentDefinitionComparison_Q", 2e-10));
+}
+
+TEST_F(Consistence, TOFResolutionComparison)
+{
+    EXPECT_TRUE(compare("TOFResolutionComparison_TP", "TOFResolutionComparison_TR", 2e-10));
+}
+
+TEST_F(Consistence, PolarizedQAngleReflectivity)
+{
+    EXPECT_TRUE(
+        compare("PolarizedQAngleReflectivityPP_0", "PolarizedQAngleReflectivityPP_Q", 2e-10));
+    EXPECT_TRUE(
+        compare("PolarizedQAngleReflectivityMM_0", "PolarizedQAngleReflectivityMM_Q", 2e-10));
+}
diff --git a/Tests/Functional/Core/CoreSpecial/FourierTransformationTest.cpp b/Tests/Functional/Core/CoreSpecial/FourierTransformationTest.cpp
index ad044d81421bf1b5ff588c9d473d8e9f2d7905cb..594a432e8032d900259a9d457a4fd4da3b86ff69 100644
--- a/Tests/Functional/Core/CoreSpecial/FourierTransformationTest.cpp
+++ b/Tests/Functional/Core/CoreSpecial/FourierTransformationTest.cpp
@@ -27,68 +27,35 @@ namespace
 
 const double threshold = 1e-10;
 
-//! Returns file names to test fft.
-std::vector<std::string> inputImages()
-{
-    return {"CylindersAndPrisms.int.gz", "RectDetectorGeneric.int.gz"};
-}
-
-//! Returns location of images to test fft.
-std::string inputImageDir()
-{
-    return BATesting::CoreReferenceDir();
-}
-
-//! Returns file names with paths to test fft.
-std::vector<std::string> inputImageNames()
-{
-    std::vector<std::string> result;
-    for (auto name : inputImages())
-        result.push_back(FileSystemUtils::jointPath(inputImageDir(), name));
-
-    return result;
-}
-
-//! Returns name of directory with fft images for reference.
-std::string fftReferenceDir()
-{
-    return BATesting::CoreReferenceDir();
-}
-
 //! Returns name of fft image based on given image name.
 std::string fftReferenceImage(const std::string& input_image)
 {
     auto filename = FileSystemUtils::filename(input_image);
-    return FileSystemUtils::jointPath(fftReferenceDir(), "FourierTransformation_" + filename);
-}
-
-//! Returns name of directory for output fft images.
-std::string outputDir()
-{
-    return BATesting::CoreOutputDir();
+    return FileSystemUtils::jointPath(BATesting::CoreReferenceDir(),
+                                      "FourierTransformation_" + filename);
 }
 
 //! Runs test over one image. Returns true upon success.
 bool test_fft(const std::string& input_image_name, const std::string& reference_fft_name)
 {
-    std::cout << "\nFourierTransformationTest::test_fft()"
-              << "\n";
-    std::cout << "Input image: " << input_image_name << "\n";
-    std::cout << "Reference fft: " << reference_fft_name << "\n";
+    std::cout << "Input image: " << input_image_name << std::endl;
+    std::cout << "Reference fft: " << reference_fft_name << std::endl;
 
     // loading input image
     std::unique_ptr<OutputData<double>> input_image;
     try {
-        input_image.reset(IntensityDataIOFactory::readOutputData(input_image_name));
+        const auto filename =
+            FileSystemUtils::jointPath(BATesting::StdReferenceDir(), input_image_name);
+        input_image.reset(IntensityDataIOFactory::readOutputData(filename));
     } catch (const std::exception&) {
         std::cout << "Error: no input image.\n";
         return false;
     }
 
-    // making fourier transformation
-    std::unique_ptr<OutputData<double>> fft = IntensityDataFunctions::createFFT(*input_image.get());
+    std::cout << "transforming" << std::endl;
+    std::unique_ptr<OutputData<double>> fft = IntensityDataFunctions::createFFT(*input_image);
 
-    // loading reference fft
+    std::cout << "loading reference" << std::endl;
     std::unique_ptr<OutputData<double>> reference_fft;
     try {
         reference_fft.reset(IntensityDataIOFactory::readOutputData(reference_fft_name));
@@ -96,17 +63,17 @@ bool test_fft(const std::string& input_image_name, const std::string& reference_
         std::cout << "Error: no reference fft image. Creating new one.\n";
     }
 
-    // comparing new fft against reference fft, if exist
+    std::cout << "comparing" << std::endl;
     bool success(false);
     if (reference_fft)
         success = IntensityDataFunctions::getRelativeDifference(*fft, *reference_fft) <= threshold;
 
     if (!success) {
-        FileSystemUtils::createDirectory(outputDir());
-        std::string out_fname =
-            FileSystemUtils::jointPath(outputDir(), FileSystemUtils::filename(reference_fft_name));
+        FileSystemUtils::createDirectory(BATesting::CoreOutputDir());
+        std::string out_fname = FileSystemUtils::jointPath(
+            BATesting::CoreOutputDir(), FileSystemUtils::filename(reference_fft_name));
         IntensityDataIOFactory::writeOutputData(*fft, out_fname);
-        std::cout << "New fft image stored in " << out_fname << "\n";
+        std::cout << "New fft image stored in " << out_fname << std::endl;
     }
 
     return success;
@@ -120,6 +87,6 @@ class FourierTransformationTest : public ::testing::Test
 
 TEST_F(FourierTransformationTest, FourierTransformation)
 {
-    for (auto inputImage : inputImageNames())
+    for (const char* inputImage : {"CylindersAndPrisms.int.gz", "RectDetectorGeneric.int.gz"})
         EXPECT_TRUE(test_fft(inputImage, fftReferenceImage(inputImage)));
 }
diff --git a/Tests/Functional/Core/CoreStandardTest/CMakeLists.txt b/Tests/Functional/Core/CoreStandardTest/CMakeLists.txt
deleted file mode 100644
index 1c488a37152338c45d53ba868f57f67b7c80dac5..0000000000000000000000000000000000000000
--- a/Tests/Functional/Core/CoreStandardTest/CMakeLists.txt
+++ /dev/null
@@ -1,96 +0,0 @@
-############################################################################
-# Tests/Functional/Core/CMakeLists.txt
-############################################################################
-
-set(test TestCoreStandard)
-
-# CoreStandardTest cases:
-set(test_cases
-    ApproximationDA
-    ApproximationLMA
-    ApproximationSSCA
-    Basic2DParaCrystal
-    BeamDivergence
-    BoxCompositionRotateX
-    BoxCompositionRotateY
-    BoxCompositionRotateZ
-    BoxCompositionRotateZandY
-    BoxesWithSpecular
-    BoxStackComposition
-    CenteredSquareLattice
-    ConstantBackground
-    CoreShellBoxRotateZandY
-    CoreShellParticle
-    CosineRipple
-    CustomMorphology
-    CylindersAndPrisms
-    CylindersInSSCA
-    CylindersWithSizeDistribution
-    DetectorResolution
-    FormFactors
-    FormFactorsWithAbsorption
-    GISASAbsorptiveSLDLayers
-    HexParaCrystal
-    LargeCylindersMonteCarlo
-    Lattice1D
-    MagneticParticleZeroField
-    MagneticSpheres
-    MagneticSubstrateZeroField
-    MagneticRotation
-    MagneticCylindersPP
-    MagneticCylindersPM
-    MagneticCylindersMP
-    MagneticCylindersMM
-    MesoCrystal
-    MultiLayerWithRoughness
-    MultipleLayout
-    ParticleComposition
-    RadialParaCrystal
-    HardDisk
-    RectDetectorGeneric
-    RectDetectorPerpToDirectBeam
-    RectDetectorPerpToReflectedBeam
-    RectDetectorPerpToReflectedBeamDpos
-    RectDetectorPerpToSample
-    RectParaCrystal
-    RotatedCylinder
-    RotatedPyramids
-    RotatedSquareLattice
-    FiniteSquareLattice
-    SuperLattice
-    SimulationWithMasks
-    SquareLattice
-    TransformBox
-    TriangularRipple
-    AsymRipple
-    TwoTypesCylindersDistribution
-    SphericalDetWithRoi
-    RectDetWithRoi
-    SlicedComposition
-    RotatedPyramidsDistribution
-    SpheresWithLimitsDistribution
-    ConesWithLimitsDistribution
-    LinkedBoxDistribution
-    HomogeneousTiNiSample
-    HomogeneousTiNiSampleWithAbsorption
-    RoughnessInSpecular
-    NCRoughnessInSpecular
-    GaussianBeamFootprint
-    SquareBeamFootprint
-    SpecularDivergentBeam
-    RelativeResolutionTOF
-    OffSpecularResonator
-    DepthProbeTest
-    ThickAbsorptiveSampleWithRoughness
-    MagneticSpheresInMagLayerPP
-    MagneticSpheresInMagLayerMP
-    BasicSpecularPP
-    BasicSpecularMM
-    )
-
-add_executable(${test} main.cpp CoreStandardTest.h CoreStandardTest.cpp)
-target_link_libraries(${test} BornAgainCore BornAgainTestMachinery)
-foreach(test_case ${test_cases})
-    add_test(${test}/${test_case}
-        ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${test} ${test_case})
-endforeach()
diff --git a/Tests/Functional/Core/CoreStandardTest/CoreStandardTest.h b/Tests/Functional/Core/CoreStandardTest/CoreStandardTest.h
deleted file mode 100644
index a2d8d9cf266798428869ddf67e9099a75bf08de6..0000000000000000000000000000000000000000
--- a/Tests/Functional/Core/CoreStandardTest/CoreStandardTest.h
+++ /dev/null
@@ -1,33 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Tests/Functional/Core/CoreStandardTest/CoreStandardTest.h
-//! @brief     Defines class CoreStandardTest.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#ifndef BORNAGAIN_TESTS_FUNCTIONAL_CORE_CORESTANDARDTEST_CORESTANDARDTEST_H
-#define BORNAGAIN_TESTS_FUNCTIONAL_CORE_CORESTANDARDTEST_CORESTANDARDTEST_H
-
-#include "Tests/Functional/Std/IStandardTest.h"
-
-class Simulation;
-
-//! A functional test of BornAgain/Core.
-//! Performs a given standard simulation, and compares results with reference data.
-
-class CoreStandardTest : public IStandardTest
-{
-public:
-    using IStandardTest::IStandardTest;
-
-    bool runTest() final;
-};
-
-#endif // BORNAGAIN_TESTS_FUNCTIONAL_CORE_CORESTANDARDTEST_CORESTANDARDTEST_H
diff --git a/Tests/Functional/Core/SelfConsistenceTest/CMakeLists.txt b/Tests/Functional/Core/SelfConsistenceTest/CMakeLists.txt
deleted file mode 100644
index 5f7ca44e1a762934b7da20fa041945bed8febc00..0000000000000000000000000000000000000000
--- a/Tests/Functional/Core/SelfConsistenceTest/CMakeLists.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-############################################################################
-# Tests/Functional/Core/SelfConsistenceTest/CMakeLists.txt
-############################################################################
-
-set(test TestSelfConsistence)
-
-# CoreStandardTest cases:
-set(test_cases
-    SpecularWithSlicing
-    InstrumentDefinitionComparison
-    TOFResolutionComparison
-    PolarizedQAngleReflectivityPP
-    PolarizedQAngleReflectivityMM
-    )
-
-file(GLOB source_files "*.cpp")
-
-add_executable(${test} ${source_files})
-target_link_libraries(${test} BornAgainCore BornAgainTestMachinery)
-foreach(test_case ${test_cases})
-    add_test(${test}/${test_case}
-        ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${test} ${test_case})
-endforeach()
diff --git a/Tests/Functional/Core/SelfConsistenceTest/SelfConsistenceTest.cpp b/Tests/Functional/Core/SelfConsistenceTest/SelfConsistenceTest.cpp
deleted file mode 100644
index f1b61cba801870afc06f04ba8b85ba0b6b1c3565..0000000000000000000000000000000000000000
--- a/Tests/Functional/Core/SelfConsistenceTest/SelfConsistenceTest.cpp
+++ /dev/null
@@ -1,73 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Tests/Functional/Core/SelfConsistenceTest/SelfConsistenceTest.cpp
-//! @brief     Implements class SelfConsistenceTest.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#include "Tests/Functional/Core/SelfConsistenceTest/SelfConsistenceTest.h"
-#include "BATesting.h"
-#include "Core/InputOutput/IntensityDataIOFactory.h"
-#include "Core/Instrument/IntensityDataFunctions.h"
-#include "Core/Simulation/Simulation.h"
-#include "Core/Tools/FileSystemUtils.h"
-#include <cassert>
-
-namespace
-{
-std::string composeName(std::string d_name, std::string test_name, size_t index)
-{
-    std::stringstream ss;
-    ss << index;
-    return FileSystemUtils::jointPath(d_name, test_name + ss.str() + ".int.gz");
-}
-} // namespace
-
-SelfConsistenceTest::SelfConsistenceTest(const std::string& name,
-                                         std::vector<std::unique_ptr<Simulation>> simulations,
-                                         double threshold)
-    : m_name(name), m_simulations(std::move(simulations)), m_threshold(threshold)
-{
-    assert(m_simulations.size() >= 2); // need at least two simulations to compare
-}
-
-bool SelfConsistenceTest::runTest()
-{
-    // Run simulation.
-    std::vector<std::unique_ptr<OutputData<double>>> results;
-    for (auto& simulation : m_simulations) {
-        simulation->runSimulation();
-        auto sim_result = simulation->result();
-        results.push_back(sim_result.data());
-    }
-
-    // Compare with reference if available.
-    bool success = true;
-    for (size_t i = 1, size = results.size(); i < size; ++i) {
-        const bool outcome =
-            IntensityDataFunctions::checkRelativeDifference(*results[i], *results[0], m_threshold);
-        if (!outcome) { // compose message and save results
-            std::stringstream ss;
-            ss << "Simulations 0 and " << i << " yield different results.\n"
-               << "Results are stored in\n";
-            const std::string output_dname = BATesting::SelfConsistenceOutputDir();
-            FileSystemUtils::createDirectories(output_dname);
-            for (size_t index : {size_t(0), i}) {
-                const std::string fname = composeName(output_dname, m_name, index);
-                IntensityDataIOFactory::writeOutputData(*results[index], fname);
-                ss << "- " << fname << "\n";
-            }
-            std::cout << ss.str();
-        }
-        success = success && outcome;
-    }
-
-    return success;
-}
diff --git a/Tests/Functional/Core/SelfConsistenceTest/SelfConsistenceTest.h b/Tests/Functional/Core/SelfConsistenceTest/SelfConsistenceTest.h
deleted file mode 100644
index 7f6e4875994c835218c9e18d9304ca2ffc7f91d0..0000000000000000000000000000000000000000
--- a/Tests/Functional/Core/SelfConsistenceTest/SelfConsistenceTest.h
+++ /dev/null
@@ -1,42 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Tests/Functional/Core/SelfConsistenceTest/SelfConsistenceTest.h
-//! @brief     Defines class SelfConsistenceTest.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#ifndef BORNAGAIN_TESTS_FUNCTIONAL_CORE_SELFCONSISTENCETEST_SELFCONSISTENCETEST_H
-#define BORNAGAIN_TESTS_FUNCTIONAL_CORE_SELFCONSISTENCETEST_SELFCONSISTENCETEST_H
-
-#include <memory>
-#include <string>
-#include <vector>
-
-class Simulation;
-
-//! A functional test of BornAgain/Core.
-//! Performs given simulations and compares their results with each other.
-
-class SelfConsistenceTest
-{
-public:
-    SelfConsistenceTest(const std::string& name,
-                        std::vector<std::unique_ptr<Simulation>> simulations, double threshold);
-    ~SelfConsistenceTest() = default;
-
-    bool runTest();
-
-private:
-    std::string m_name;
-    std::vector<std::unique_ptr<Simulation>> m_simulations;
-    double m_threshold;
-};
-
-#endif // BORNAGAIN_TESTS_FUNCTIONAL_CORE_SELFCONSISTENCETEST_SELFCONSISTENCETEST_H
diff --git a/Tests/Functional/Core/SelfConsistenceTest/SelfConsistenceTestService.cpp b/Tests/Functional/Core/SelfConsistenceTest/SelfConsistenceTestService.cpp
deleted file mode 100644
index 08562e4f0670e94deddbe2947937fe80c018812e..0000000000000000000000000000000000000000
--- a/Tests/Functional/Core/SelfConsistenceTest/SelfConsistenceTestService.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Tests/Functional/Core/SelfConsistenceTest/SelfConsistenceTestService.cpp
-//! @brief     Implements class SelfConsistenceTestService.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#include "Tests/Functional/Core/SelfConsistenceTest/SelfConsistenceTestService.h"
-#include "Core/Simulation/Simulation.h"
-#include "Core/StandardSamples/SampleBuilderFactory.h"
-#include "Core/StandardSamples/SimulationFactory.h"
-#include "Tests/Functional/Core/SelfConsistenceTest/SelfConsistenceTest.h"
-#include "Tests/Functional/Std/StandardTestCatalog.h"
-
-using sim_ptr = std::unique_ptr<Simulation>;
-using builder_ptr = std::unique_ptr<IMultiLayerBuilder>;
-
-bool SelfConsistenceTestService::execute(int argc, char** argv)
-{
-    assert(argc > 1);
-    StandardTestInfo info = StandardTestCatalog().testInfo(argv[1]);
-
-    std::vector<sim_ptr> simulations;
-    for (size_t i = 0, size = info.size(); i < size; ++i) {
-        builder_ptr builder(SampleBuilderFactory().createItem(info.m_sample_builder_names[i]));
-        sim_ptr simulation(SimulationFactory().createItem(info.m_simulation_names[i]));
-        simulation->setSampleBuilder(std::move(builder));
-        simulations.push_back(std::move(simulation));
-    }
-
-    auto test = std::make_unique<SelfConsistenceTest>(info.m_test_name, std::move(simulations),
-                                                      info.m_threshold);
-    return test->runTest();
-}
diff --git a/Tests/Functional/Core/SelfConsistenceTest/SelfConsistenceTestService.h b/Tests/Functional/Core/SelfConsistenceTest/SelfConsistenceTestService.h
deleted file mode 100644
index 00183f389822eb5db8e1b9d2aaad722114a6dda1..0000000000000000000000000000000000000000
--- a/Tests/Functional/Core/SelfConsistenceTest/SelfConsistenceTestService.h
+++ /dev/null
@@ -1,28 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Tests/Functional/Core/SelfConsistenceTest/SelfConsistenceTestService.h
-//! @brief     Defines class SelfConsistenceTestService.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#ifndef BORNAGAIN_TESTS_FUNCTIONAL_CORE_SELFCONSISTENCETEST_SELFCONSISTENCETESTSERVICE_H
-#define BORNAGAIN_TESTS_FUNCTIONAL_CORE_SELFCONSISTENCETEST_SELFCONSISTENCETESTSERVICE_H
-
-//! @class SelfConsistenceTestService
-//! @brief Contains static method to run self-consistence functional test from standalone
-//! executable.
-
-class SelfConsistenceTestService
-{
-public:
-    static bool execute(int argc, char** argv);
-};
-
-#endif // BORNAGAIN_TESTS_FUNCTIONAL_CORE_SELFCONSISTENCETEST_SELFCONSISTENCETESTSERVICE_H
diff --git a/Tests/Functional/Core/Std/CMakeLists.txt b/Tests/Functional/Core/Std/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..4946afcc7152da9c6d19f8fac1aa2dfb97272ca8
--- /dev/null
+++ b/Tests/Functional/Core/Std/CMakeLists.txt
@@ -0,0 +1,13 @@
+include(GoogleTest) # provides gtest_discover_tests
+
+set(test TestCoreStd)
+
+file(GLOB source_files "*.cpp" "../../Std/Run.cpp")
+
+add_executable(${test} ${source_files} ${CMAKE_SOURCE_DIR}/Tests/GTestWrapper/TestAll.cpp)
+target_include_directories(${test} PUBLIC
+    ${BornAgainCore_INCLUDE_DIRS}
+    ${CMAKE_SOURCE_DIR}/ThirdParty/common/gtest/gtest-1.8.0/include)
+target_link_libraries(${test} BornAgainCore gtest)
+
+gtest_discover_tests(${test} TEST_PREFIX Core.)
diff --git a/Tests/Functional/Core/CoreStandardTest/CoreStandardTest.cpp b/Tests/Functional/Core/Std/Check.cpp
similarity index 59%
rename from Tests/Functional/Core/CoreStandardTest/CoreStandardTest.cpp
rename to Tests/Functional/Core/Std/Check.cpp
index 4ba2a251a837c8e09a157431d3764bdab8ab7480..e7a1a06ad7fa2f210b5222ba0f856747de3ccaa0 100644
--- a/Tests/Functional/Core/CoreStandardTest/CoreStandardTest.cpp
+++ b/Tests/Functional/Core/Std/Check.cpp
@@ -2,8 +2,8 @@
 //
 //  BornAgain: simulate and fit scattering at grazing incidence
 //
-//! @file      Tests/Functional/Core/CoreStandardTest/CoreStandardTest.cpp
-//! @brief     Implements class CoreStandardTest.
+//! @file      Tests/Functional/Core/Std/Check.cpp
+//! @brief     Implements function checkSimulation for core standard test
 //!
 //! @homepage  http://www.bornagainproject.org
 //! @license   GNU General Public License v3 or higher (see COPYING)
@@ -12,45 +12,50 @@
 //
 // ************************************************************************** //
 
-#include "Tests/Functional/Core/CoreStandardTest/CoreStandardTest.h"
 #include "BABuild.h"
 #include "BATesting.h"
 #include "Core/InputOutput/IntensityDataIOFactory.h"
 #include "Core/Instrument/IntensityDataFunctions.h"
+#include "Core/Multilayer/IMultiLayerBuilder.h"
+#include "Core/Multilayer/MultiLayer.h"
 #include "Core/Simulation/Simulation.h"
+#include "Core/StandardSamples/SampleBuilderFactory.h"
+#include "Core/StandardSamples/SimulationFactory.h"
 #include "Core/Tools/FileSystemUtils.h"
 #include <cassert>
+#include <iostream>
 
-bool CoreStandardTest::runTest()
+bool checkSimulation(const std::string& name, const Simulation& direct_simulation,
+                     const double limit)
 {
+    const auto result_data = direct_simulation.result().data();
+
     std::unique_ptr<OutputData<double>> reference;
 
     // Load reference if available
-    assert(m_name != "");
+    assert(name != "");
     try {
         reference.reset(IntensityDataIOFactory::readOutputData(
-            FileSystemUtils::jointPath(BATesting::CoreReferenceDir(), m_name + ".int.gz")));
+                            FileSystemUtils::jointPath(BATesting::StdReferenceDir(), name + ".int.gz")));
     } catch (const std::exception&) {
-        std::cout << "No reference found, but we proceed with the simulation to create a new one\n";
+        std::cout
+            << "No reference found, but we proceed with the simulation to create a new one\n";
     }
 
-    // Run simulation.
-    assert(m_reference_simulation);
-    m_reference_simulation->runSimulation();
-    auto sim_result = m_reference_simulation->result();
-    const auto result_data = sim_result.data();
-
     // Compare with reference if available.
     bool success = false;
-    if (reference)
+    if (reference) {
+        std::cout << "- check diff" << std::endl;
         success =
-            IntensityDataFunctions::checkRelativeDifference(*result_data, *reference, m_threshold);
+            IntensityDataFunctions::checkRelativeDifference(*reference, *result_data, limit);
+    }
 
     // Save simulation if different from reference.
     if (!success) {
-        FileSystemUtils::createDirectories(BATesting::CoreOutputDir());
+        std::cout << "- failure ..." << std::endl;
+        FileSystemUtils::createDirectories(BATesting::StdOutputDir());
         std::string out_fname =
-            FileSystemUtils::jointPath(BATesting::CoreOutputDir(), m_name + ".int.gz");
+            FileSystemUtils::jointPath(BATesting::StdOutputDir(), name + ".int.gz");
         IntensityDataIOFactory::writeOutputData(*result_data, out_fname);
         std::cout << "New simulation result stored in " << out_fname << "\n"
                   << "To visualize an intensity map, use " << BABuild::buildBinDir()
@@ -60,5 +65,6 @@ bool CoreStandardTest::runTest()
                   << "If the new result is correct, then move it to "
                   << BATesting::CoreReferenceDir() << "/\n";
     }
+
     return success;
 }
diff --git a/Tests/Functional/Core/Std/macros.cpp b/Tests/Functional/Core/Std/macros.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..4b5eead7809749134d7a3844009a23f16c0f8533
--- /dev/null
+++ b/Tests/Functional/Core/Std/macros.cpp
@@ -0,0 +1,16 @@
+// ************************************************************************** //
+//
+//  BornAgain: simulate and fit scattering at grazing incidence
+//
+//! @file      Tests/Functional/Core/Std/macros.cpp
+//! @brief     Implements Core standard tests through gtest macros.
+//!
+//! @homepage  http://www.bornagainproject.org
+//! @license   GNU General Public License v3 or higher (see COPYING)
+//! @copyright Forschungszentrum Jülich GmbH 2018
+//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
+//
+// ************************************************************************** //
+
+#include "Tests/Functional/Std/Run.h"
+#include "Tests/Functional/Std/StandardTests.h" // contains macros that are executed by gtest
diff --git a/Tests/Functional/GUI/CMakeLists.txt b/Tests/Functional/GUI/CMakeLists.txt
index 539f854e04a6957fcc9e3af185f3fbb191a23225..a26a369a095164c65e5e80b0c4f7a47dd4535fcd 100644
--- a/Tests/Functional/GUI/CMakeLists.txt
+++ b/Tests/Functional/GUI/CMakeLists.txt
@@ -1,5 +1,5 @@
 find_package(Qt5Widgets REQUIRED)
 
-add_subdirectory(GUIStandardTest)
+add_subdirectory(Std)
 add_subdirectory(Translate)
 add_subdirectory(Other)
diff --git a/Tests/Functional/GUI/GUIStandardTest/CMakeLists.txt b/Tests/Functional/GUI/GUIStandardTest/CMakeLists.txt
deleted file mode 100644
index 4cb72336872b02efcff70d6a459b0f5ab1e88ed5..0000000000000000000000000000000000000000
--- a/Tests/Functional/GUI/GUIStandardTest/CMakeLists.txt
+++ /dev/null
@@ -1,75 +0,0 @@
-############################################################################
-# Tests/Functional/GUI/CMakeLists.txt
-############################################################################
-
-set(test TestGUIStandard)
-
-set(test_cases
-    ApproximationDA
-    ApproximationLMA
-    ApproximationSSCA
-    Basic2DParaCrystal
-    BeamDivergence
-    BoxCompositionRotateX
-    BoxCompositionRotateY
-    BoxCompositionRotateZ
-    BoxCompositionRotateZandY
-    BoxesWithSpecular
-    BoxStackComposition
-    CenteredSquareLattice
-    ConstantBackground
-    CoreShellBoxRotateZandY
-    CoreShellParticle
-    CosineRipple
-    CylindersAndPrisms
-    CylindersInSSCA
-    CylindersWithSizeDistribution
-    DetectorResolution
-    FormFactors
-    GISASAbsorptiveSLDLayers
-    HexParaCrystal
-    LargeCylindersMonteCarlo
-    Lattice1D
-    MagneticSpheres
-    MesoCrystal
-    MultiLayerWithRoughness
-    MultipleLayout
-    ParticleComposition
-    RadialParaCrystal
-    HardDisk
-    RectDetectorGeneric
-    RectDetectorPerpToDirectBeam
-    RectDetectorPerpToReflectedBeam
-    RectDetectorPerpToReflectedBeamDpos
-    RectDetectorPerpToSample
-    RectParaCrystal
-    RotatedCylinder
-    RotatedPyramids
-    RotatedSquareLattice
-    FiniteSquareLattice
-    SimulationWithMasks
-    SquareLattice
-    TransformBox
-    TriangularRipple
-    AsymRipple
-    TwoTypesCylindersDistribution
-    SphericalDetWithRoi
-    RectDetWithRoi
-    SlicedComposition
-    RotatedPyramidsDistribution
-    SpheresWithLimitsDistribution
-    ConesWithLimitsDistribution
-    LinkedBoxDistribution
-    OffSpecularResonator
-    SquareBeamFootprint
-    GaussianBeamFootprint
-    SpecularDivergentBeam
-    HomogeneousTiNiSampleWithAbsorption
-)
-
-add_executable(${test} main.cpp GUIStandardTest.cpp GUIStandardTest.h )
-target_link_libraries(${test} BornAgainCore BornAgainGUI BornAgainTestMachinery)
-
-foreach(test_case ${test_cases})
-    add_test(${test}/${test_case} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${test} ${test_case})
-endforeach()
diff --git a/Tests/Functional/GUI/GUIStandardTest/GUIStandardTest.h b/Tests/Functional/GUI/GUIStandardTest/GUIStandardTest.h
deleted file mode 100644
index 68cf349d02f2364b8e4c85c568e96e6bf91276d4..0000000000000000000000000000000000000000
--- a/Tests/Functional/GUI/GUIStandardTest/GUIStandardTest.h
+++ /dev/null
@@ -1,32 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Tests/Functional/GUI/GUIStandardTest/GUIStandardTest.h
-//! @brief     Defines class GUIStandardTest
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#ifndef BORNAGAIN_TESTS_FUNCTIONAL_GUI_GUISTANDARDTEST_GUISTANDARDTEST_H
-#define BORNAGAIN_TESTS_FUNCTIONAL_GUI_GUISTANDARDTEST_GUISTANDARDTEST_H
-
-#include "Tests/Functional/Std/IStandardTest.h"
-
-//! A functional test of the BornAgain GUI.
-//! Performs a given standard simulation directly, and through domain->GUI->domain,
-//! and compares results.
-
-class GUIStandardTest : public IStandardTest
-{
-public:
-    using IStandardTest::IStandardTest;
-
-    bool runTest() final;
-};
-
-#endif // BORNAGAIN_TESTS_FUNCTIONAL_GUI_GUISTANDARDTEST_GUISTANDARDTEST_H
diff --git a/Tests/Functional/GUI/GUIStandardTest/main.cpp b/Tests/Functional/GUI/GUIStandardTest/main.cpp
deleted file mode 100644
index 4d1bc28ecfcd99ef4f6ca5aff4f13012965343b9..0000000000000000000000000000000000000000
--- a/Tests/Functional/GUI/GUIStandardTest/main.cpp
+++ /dev/null
@@ -1,30 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Tests/Functional/GUI/GUIStandardTest/main.cpp
-//! @brief     Implements program GUIStandardTest to run gui functional tests
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#include "Tests/Functional/GUI/GUIStandardTest/GUIStandardTest.h"
-#include "Tests/Functional/Std/StandardTestService.h"
-#include <iostream>
-
-//! Runs GUIStandardTest on a standard simulation indicated by argv[1].
-
-int main(int argc, char** argv)
-{
-    bool ok = StandardTestService<GUIStandardTest>().execute(argc, argv);
-    if (!ok)
-        std::cout << "\n"
-                  << "hint: If this test fails while all other form-factor related tests\n"
-                  << "pass then a likely cause is a change in the form factor API that is\n"
-                  << "not correctly reflected in the GUIDomainSampleVisitor class.\n\n";
-    return !ok;
-}
diff --git a/Tests/Functional/GUI/Std/CMakeLists.txt b/Tests/Functional/GUI/Std/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..bc9bd07e7627745fa29ec54671ea29dd7b262e58
--- /dev/null
+++ b/Tests/Functional/GUI/Std/CMakeLists.txt
@@ -0,0 +1,13 @@
+include(GoogleTest) # provides gtest_discover_tests
+
+set(test TestGuiStd)
+
+file(GLOB source_files "*.cpp" "../../Std/Run.cpp")
+
+add_executable(${test} ${source_files} ${CMAKE_SOURCE_DIR}/Tests/GTestWrapper/TestAll.cpp)
+target_include_directories(${test} PUBLIC
+    ${BornAgainGUI_INCLUDE_DIRS}
+    ${CMAKE_SOURCE_DIR}/ThirdParty/common/gtest/gtest-1.8.0/include)
+target_link_libraries(${test} BornAgainGUI gtest)
+
+gtest_discover_tests(${test} TEST_PREFIX Gui.)
diff --git a/Tests/Functional/GUI/GUIStandardTest/GUIStandardTest.cpp b/Tests/Functional/GUI/Std/Check.cpp
similarity index 54%
rename from Tests/Functional/GUI/GUIStandardTest/GUIStandardTest.cpp
rename to Tests/Functional/GUI/Std/Check.cpp
index 3c754aa71d2646d8c6b9bd0fdbc56ae276c7bcdb..2a913d42a4ba67cc5b0445e4c5922d4b3c6fe042 100644
--- a/Tests/Functional/GUI/GUIStandardTest/GUIStandardTest.cpp
+++ b/Tests/Functional/GUI/Std/Check.cpp
@@ -2,8 +2,8 @@
 //
 //  BornAgain: simulate and fit scattering at grazing incidence
 //
-//! @file      Tests/Functional/GUI/GUIStandardTest/GUIStandardTest.cpp
-//! @brief     Implements class GUIStandardTest
+//! @file      Tests/Functional/GUI/Std/Check.cpp
+//! @brief     Implements function checkSimulation for Python standard test
 //!
 //! @homepage  http://www.bornagainproject.org
 //! @license   GNU General Public License v3 or higher (see COPYING)
@@ -12,7 +12,6 @@
 //
 // ************************************************************************** //
 
-#include "Tests/Functional/GUI/GUIStandardTest/GUIStandardTest.h"
 #include "Core/Instrument/IntensityDataFunctions.h"
 #include "Core/Simulation/Simulation.h"
 #include "GUI/coregui/Models/DocumentModel.h"
@@ -23,9 +22,8 @@
 #include "GUI/coregui/Models/MaterialModel.h"
 #include "GUI/coregui/Models/SampleModel.h"
 
-namespace
-{
-std::unique_ptr<Simulation> createDomainSimulation(const Simulation& origin)
+std::unique_ptr<OutputData<double>> domainData(const std::string& /*test_name*/,
+                                               const Simulation& direct_simulation)
 {
     // initializing necessary GUI
     DocumentModel documentModel;
@@ -34,27 +32,24 @@ std::unique_ptr<Simulation> createDomainSimulation(const Simulation& origin)
     MaterialModel materialModel;
 
     // populating GUI models from domain
-    GUIObjectBuilder::populateSampleModelFromSim(&sampleModel, &materialModel, origin);
-    GUIObjectBuilder::populateInstrumentModel(&instrumentModel, origin);
-    GUIObjectBuilder::populateDocumentModel(&documentModel, origin);
+    GUIObjectBuilder::populateSampleModelFromSim(&sampleModel, &materialModel, direct_simulation);
+    GUIObjectBuilder::populateInstrumentModel(&instrumentModel, direct_simulation);
+    GUIObjectBuilder::populateDocumentModel(&documentModel, direct_simulation);
 
-    auto result = DomainSimulationBuilder::createSimulation(sampleModel.multiLayerItem(),
-                                                            instrumentModel.instrumentItem(),
-                                                            documentModel.simulationOptionsItem());
+    std::unique_ptr<Simulation> domain_simulation = DomainSimulationBuilder::createSimulation(
+        sampleModel.multiLayerItem(), instrumentModel.instrumentItem(),
+        documentModel.simulationOptionsItem());
 
-    return result;
+    domain_simulation->runSimulation();
+    return std::unique_ptr<OutputData<double>>(domain_simulation->result().data());
 }
-} // namespace
 
-bool GUIStandardTest::runTest()
+bool checkSimulation(const std::string& name, const Simulation& direct_simulation,
+                     const double limit)
 {
-    m_reference_simulation->runSimulation();
-    const SimulationResult& ref_result = m_reference_simulation->result();
+    const std::unique_ptr<OutputData<double>> domain_data = domainData(name, direct_simulation);
 
-    std::unique_ptr<Simulation> domain_simulation = createDomainSimulation(*m_reference_simulation);
-    domain_simulation->runSimulation();
-    const SimulationResult& domain_result = domain_simulation->result();
+    const std::unique_ptr<OutputData<double>> ref_data = direct_simulation.result().data();
 
-    return IntensityDataFunctions::checkRelativeDifference(*domain_result.data(),
-                                                           *ref_result.data(), m_threshold);
+    return IntensityDataFunctions::checkRelativeDifference(*domain_data, *ref_data, limit);
 }
diff --git a/Tests/Functional/Core/SelfConsistenceTest/main.cpp b/Tests/Functional/GUI/Std/macros.cpp
similarity index 54%
rename from Tests/Functional/Core/SelfConsistenceTest/main.cpp
rename to Tests/Functional/GUI/Std/macros.cpp
index d13fff8bdcdd0e2366f8ca034aeacd0369ba6975..43e3e119d34a821ebae4abd0275f168e5a2fc194 100644
--- a/Tests/Functional/Core/SelfConsistenceTest/main.cpp
+++ b/Tests/Functional/GUI/Std/macros.cpp
@@ -2,8 +2,8 @@
 //
 //  BornAgain: simulate and fit scattering at grazing incidence
 //
-//! @file      Tests/Functional/Core/SelfConsistenceTest/main.cpp
-//! @brief     Implements program CoreStandardTest to run core functional tests
+//! @file      Tests/Functional/GUI/Std/macros.cpp
+//! @brief     Implements Core standard tests through gtest macros.
 //!
 //! @homepage  http://www.bornagainproject.org
 //! @license   GNU General Public License v3 or higher (see COPYING)
@@ -12,11 +12,7 @@
 //
 // ************************************************************************** //
 
-#include "Tests/Functional/Core/SelfConsistenceTest/SelfConsistenceTestService.h"
+#include "Tests/Functional/Std/Run.h"
 
-//! Runs CoreStandardTest on a standard simulation indicated by argv[1].
-
-int main(int argc, char** argv)
-{
-    return SelfConsistenceTestService::execute(argc, argv) ? 0 : 1;
-}
+#define  GUI_STD_TEST
+#include "Tests/Functional/Std/StandardTests.h" // contains macros that are executed by gtest
diff --git a/Tests/Functional/Python/CMakeLists.txt b/Tests/Functional/Python/CMakeLists.txt
index b7a973d0adf9f38c89c5c6d02b65d10684007988..2382fd012d3151a06a2b9a02a27a4b4950c27d79 100644
--- a/Tests/Functional/Python/CMakeLists.txt
+++ b/Tests/Functional/Python/CMakeLists.txt
@@ -1,10 +1,8 @@
 # Collection of Python related tests
 
-add_subdirectory(PyStandard)
+add_subdirectory(Std)
 add_subdirectory(PyExamples)
 add_subdirectory(PyCore)
 add_subdirectory(PyFit)
 add_subdirectory(PyPersistence)
 add_subdirectory(PyEmbedded)
-
-
diff --git a/Tests/Functional/Python/PyCore/polmagcylinders2.py b/Tests/Functional/Python/PyCore/polmagcylinders2.py
index c1dbb2006d5b2c4af1b4db17440f58239cec0e94..2fe13d2c191b01e245ffe320c1f94856cfad0efd 100644
--- a/Tests/Functional/Python/PyCore/polmagcylinders2.py
+++ b/Tests/Functional/Python/PyCore/polmagcylinders2.py
@@ -8,12 +8,13 @@ from utils import get_difference
 
 from bornagain import *
 
-REFERENCE_DIR = "@TEST_REFERENCE_DIR@/Core"
+REFERENCE_DIR = "@TEST_REFERENCE_DIR@/Python"
 
 # ----------------------------------
 # describe sample and run simulation
 # ----------------------------------
 def getSimulationIntensity(rho_beam, efficiency):
+    print("- simulate", flush=True)
     # defining materials
     mAmbience = HomogeneousMaterial("Air", 0.0, 0.0)
     mSubstrate = HomogeneousMaterial("Substrate", 15e-6, 0.0)
@@ -48,6 +49,7 @@ def getSimulationIntensity(rho_beam, efficiency):
     simulation.setSample(multi_layer)
     simulation.setBeamIntensity(1e9)
     simulation.runSimulation()
+    print("- - simulation done", flush=True)
     return simulation.result()
 
 
@@ -56,12 +58,17 @@ def get_reference_data(filename):
     """
     read and return reference data from file
     """
-    return IntensityDataIOFactory.readIntensityData(os.path.join(REFERENCE_DIR,filename))
+    path = os.path.join(REFERENCE_DIR,filename)
+    print("- read reference from", path, flush=True)
+    ret = IntensityDataIOFactory.readIntensityData(path)
+    print("- - reference read", flush=True)
+    return ret
 
 # --------------------------------------------------------------
 # run test and analyse test results
 # --------------------------------------------------------------
 def run_test():
+    print("run test", flush=True)
     zplus = kvector_t(0.0, 0.0, 1.0)
     zmin = kvector_t(0.0, 0.0, -1.0)
 
diff --git a/Tests/Functional/Python/PyStandard/CMakeLists.txt b/Tests/Functional/Python/PyStandard/CMakeLists.txt
deleted file mode 100644
index 86a40daeef7cd8ab4690fca645b017808f63f54d..0000000000000000000000000000000000000000
--- a/Tests/Functional/Python/PyStandard/CMakeLists.txt
+++ /dev/null
@@ -1,78 +0,0 @@
-############################################################################
-# Tests/Functional/PyCore/suite/CMakeLists.txt
-############################################################################
-
-set(test TestPyStandard)
-
-set(output_dir ${TEST_OUTPUT_DIR}/Functional/Python/PyStandard)
-file(MAKE_DIRECTORY ${output_dir})
-
-set(test_cases
-    ApproximationDA
-    ApproximationLMA
-    ApproximationSSCA
-    Basic2DParaCrystal
-    BeamDivergence
-    BoxCompositionRotateX
-    BoxCompositionRotateY
-    BoxCompositionRotateZ
-    BoxCompositionRotateZandY
-    BoxesWithSpecular
-    BoxStackComposition
-    CenteredSquareLattice
-    ConstantBackground
-    CoreShellBoxRotateZandY
-    CoreShellParticle
-    CosineRipple
-    CylindersAndPrisms
-    CylindersInSSCA
-    CylindersWithSizeDistribution
-    DetectorResolution
-    FormFactors
-    GISASAbsorptiveSLDLayers
-    HexParaCrystal
-    LargeCylindersMonteCarlo
-    Lattice1D
-    MagneticSpheres
-    MultiLayerWithRoughness
-    MultipleLayout
-    ParticleComposition
-    RadialParaCrystal
-    HardDisk
-    RectDetectorGeneric
-    RectDetectorPerpToDirectBeam
-    RectDetectorPerpToReflectedBeam
-    RectDetectorPerpToReflectedBeamDpos
-    RectDetectorPerpToSample
-    RectParaCrystal
-    RotatedCylinder
-    RotatedPyramids
-    RotatedSquareLattice
-    FiniteSquareLattice
-    SimulationWithMasks
-    SquareLattice
-    TransformBox
-    TriangularRipple
-    AsymRipple
-    TwoTypesCylindersDistribution
-    SphericalDetWithRoi
-    RectDetWithRoi
-    SlicedComposition
-    RotatedPyramidsDistribution
-    SpheresWithLimitsDistribution
-    ConesWithLimitsDistribution
-    LinkedBoxDistribution
-    OffSpecularResonator
-    GaussianBeamFootprint
-    SpecularDivergentBeam
-    HomogeneousTiNiSampleWithAbsorption
-    RelativeResolutionTOF
-)
-
-add_executable(${test} main.cpp PyStandardTest.h PyStandardTest.cpp)
-target_link_libraries(${test} BornAgainCore BornAgainTestMachinery)
-
-foreach(test_case ${test_cases})
-    add_test(${test}/${test_case}
-        ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${test} ${test_case})
-endforeach()
diff --git a/Tests/Functional/Python/PyStandard/PyStandardTest.cpp b/Tests/Functional/Python/PyStandard/PyStandardTest.cpp
deleted file mode 100644
index 4f771a86e7ad861b7aad2077662bdef35cd7aa74..0000000000000000000000000000000000000000
--- a/Tests/Functional/Python/PyStandard/PyStandardTest.cpp
+++ /dev/null
@@ -1,87 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Tests/Functional/Python/PyStandard/PyStandardTest.cpp
-//! @brief     Implements class PyExportTest
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#include "Tests/Functional/Python/PyStandard/PyStandardTest.h"
-#include "BABuild.h"
-#include "BATesting.h"
-#include "Core/Export/ExportToPython.h"
-#include "Core/InputOutput/IntensityDataIOFactory.h"
-#include "Core/Instrument/IntensityDataFunctions.h"
-#include "Core/Simulation/Simulation.h"
-#include "Core/Tools/FileSystemUtils.h"
-#include <cassert>
-#include <fstream>
-#include <iostream>
-
-namespace
-{
-
-//! Runs a python command, prints messages, returns true unless the system call failed.
-bool runPython(const std::string& py_command)
-{
-#ifndef _WIN32
-    std::string sys_command = std::string("PYTHONPATH=") + BABuild::buildLibDir() + " "
-                              + std::string("NOPLOT=TRUE") + " " + BABuild::pythonExecutable()
-                              + " -B " + py_command;
-#else
-    std::string sys_command = std::string("set PYTHONPATH=") + BABuild::buildLibDir() + " & "
-                              + std::string("set NOPLOT=TRUE") + " & \""
-                              + BABuild::pythonExecutable() + "\" -B " + py_command;
-#endif
-    std::cout << sys_command << std::endl /*sic*/; // flush output before calling std::system
-    int ret = std::system(sys_command.c_str());
-    if (ret != 0) {
-        std::cerr << "Command returned non-zero value " << ret << "\n";
-        return false;
-    }
-    return true;
-}
-
-} // namespace
-
-//! Runs simulation via a Python script and directly, and returns true if the results agree.
-bool PyStandardTest::runTest()
-{
-    // Set output data filename, and remove old output files
-    assert(m_name != "");
-    std::string output_name = FileSystemUtils::jointPath(BATesting::PyStandardOutputDir(), m_name);
-    std::string output_path = output_name + ".ref.int.gz";
-    std::remove(output_path.c_str());
-    std::cout << "Removed old output " << output_path << "\n";
-
-    // Generate Python script
-    std::string pyscript_filename =
-        FileSystemUtils::jointPath(BATesting::PyStandardOutputDir(), m_name + ".py");
-    std::ofstream pythonFile(pyscript_filename);
-    pythonFile << ExportToPython::generatePyExportTest(*m_reference_simulation);
-    pythonFile.close();
-
-    // Run Python script
-    if (!runPython(pyscript_filename + " " + output_path))
-        return false;
-
-    // Run direct simulation
-    std::cout << "Running simulation and comparing with result from Py script\n";
-    m_reference_simulation->runSimulation();
-    auto ref_result = m_reference_simulation->result();
-
-    const auto reference_data = ref_result.data();
-
-    // Compare results
-    const std::unique_ptr<OutputData<double>> domain_data(
-        IntensityDataIOFactory::readOutputData(output_path));
-
-    return IntensityDataFunctions::checkRelativeDifference(*domain_data, *reference_data,
-                                                           m_threshold);
-}
diff --git a/Tests/Functional/Python/PyStandard/PyStandardTest.h b/Tests/Functional/Python/PyStandard/PyStandardTest.h
deleted file mode 100644
index 200b847bcde695ef7ecca835bb9e5bf07d4e1cb9..0000000000000000000000000000000000000000
--- a/Tests/Functional/Python/PyStandard/PyStandardTest.h
+++ /dev/null
@@ -1,31 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Tests/Functional/Python/PyStandard/PyStandardTest.h
-//! @brief     Defines class PyStandardTest
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#ifndef BORNAGAIN_TESTS_FUNCTIONAL_PYTHON_PYSTANDARD_PYSTANDARDTEST_H
-#define BORNAGAIN_TESTS_FUNCTIONAL_PYTHON_PYSTANDARD_PYSTANDARDTEST_H
-
-#include "Tests/Functional/Std/IStandardTest.h"
-
-//! Tests Python scripts generation from Core objects.
-//! Performs core standard simulation and checks it against simulation via generated Python script.
-
-class PyStandardTest : public IStandardTest
-{
-public:
-    using IStandardTest::IStandardTest;
-
-    bool runTest() final;
-};
-
-#endif // BORNAGAIN_TESTS_FUNCTIONAL_PYTHON_PYSTANDARD_PYSTANDARDTEST_H
diff --git a/Tests/Functional/Python/Std/CMakeLists.txt b/Tests/Functional/Python/Std/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..31493895bb7ee7038c699e3c402967233b208ece
--- /dev/null
+++ b/Tests/Functional/Python/Std/CMakeLists.txt
@@ -0,0 +1,15 @@
+include(GoogleTest) # provides gtest_discover_tests
+
+set(test TestPyStd)
+
+file(GLOB source_files "*.cpp" "../../Std/Run.cpp")
+
+add_executable(${test} ${source_files} ${CMAKE_SOURCE_DIR}/Tests/GTestWrapper/TestAll.cpp)
+target_include_directories(${test} PUBLIC
+    ${BornAgainCore_INCLUDE_DIRS}
+    ${CMAKE_SOURCE_DIR}/ThirdParty/common/gtest/gtest-1.8.0/include)
+target_link_libraries(${test} BornAgainCore gtest)
+
+gtest_discover_tests(${test} TEST_PREFIX Py.)
+
+file(MAKE_DIRECTORY ${TEST_OUTPUT_DIR}/Functional/Python/Std)
diff --git a/Tests/Functional/Python/Std/Check.cpp b/Tests/Functional/Python/Std/Check.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..6ee8f8c3a4ec3e37cf97d83de8afb87e41715cf5
--- /dev/null
+++ b/Tests/Functional/Python/Std/Check.cpp
@@ -0,0 +1,72 @@
+// ************************************************************************** //
+//
+//  BornAgain: simulate and fit scattering at grazing incidence
+//
+//! @file      Tests/Functional/Python/Std/Check.cpp
+//! @brief     Implements function checkSimulation for Python standard test
+//!
+//! @homepage  http://www.bornagainproject.org
+//! @license   GNU General Public License v3 or higher (see COPYING)
+//! @copyright Forschungszentrum Jülich GmbH 2018
+//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
+//
+// ************************************************************************** //
+
+#include "BABuild.h"
+#include "BATesting.h"
+#include "Core/Export/ExportToPython.h"
+#include "Core/InputOutput/IntensityDataIOFactory.h"
+#include "Core/Instrument/IntensityDataFunctions.h"
+#include "Core/Simulation/Simulation.h"
+#include "Core/Tools/FileSystemUtils.h"
+#include <cassert>
+#include <fstream>
+#include <iostream>
+
+std::unique_ptr<OutputData<double>> domainData(const std::string& test_name,
+                                               const Simulation& direct_simulation)
+{
+    const std::string output_name =
+        FileSystemUtils::jointPath(BATesting::PyStandardOutputDir(), test_name);
+    const std::string output_path = output_name + ".ref.int.gz";
+    std::remove(output_path.c_str());
+    std::cout << "- removed old output " << output_path << "\n";
+
+    // Generate Python script
+    const std::string pyscript_filename =
+        FileSystemUtils::jointPath(BATesting::PyStandardOutputDir(), test_name + ".py");
+    std::ofstream pythonFile(pyscript_filename);
+    pythonFile << ExportToPython::generatePyExportTest(direct_simulation);
+    pythonFile.close();
+
+    // Run Python script
+    const std::string py_command = pyscript_filename + " " + output_path;
+#ifndef _WIN32
+    const std::string sys_command = std::string("PYTHONPATH=") + BABuild::buildLibDir() + " "
+                                    + std::string("NOPLOT=TRUE") + " " + BABuild::pythonExecutable()
+                                    + " -B " + py_command;
+#else
+    const std::string sys_command = std::string("set PYTHONPATH=") + BABuild::buildLibDir() + " & "
+                                    + std::string("set NOPLOT=TRUE") + " & \""
+                                    + BABuild::pythonExecutable() + "\" -B " + py_command;
+#endif
+    std::cout << "- system call: " << sys_command << std::endl; // note: endl = \n + flush
+    int ret = std::system(sys_command.c_str());
+    if (ret != 0) {
+        std::stringstream msg;
+        msg << "System call returned non-zero value " << ret;
+        throw std::runtime_error(msg.str());
+    }
+
+    return std::unique_ptr<OutputData<double>>(IntensityDataIOFactory::readOutputData(output_path));
+}
+
+bool checkSimulation(const std::string& name, const Simulation& direct_simulation,
+                     const double limit)
+{
+    const std::unique_ptr<OutputData<double>> domain_data = domainData(name, direct_simulation);
+
+    const std::unique_ptr<OutputData<double>> ref_data = direct_simulation.result().data();
+
+    return IntensityDataFunctions::checkRelativeDifference(*domain_data, *ref_data, limit);
+}
diff --git a/Tests/Functional/Python/PyStandard/main.cpp b/Tests/Functional/Python/Std/macros.cpp
similarity index 52%
rename from Tests/Functional/Python/PyStandard/main.cpp
rename to Tests/Functional/Python/Std/macros.cpp
index fcf0295f5cb764e520818a7ec6370fc5f33a1b15..2612de48a605ddd9419b614214cd86b375191693 100644
--- a/Tests/Functional/Python/PyStandard/main.cpp
+++ b/Tests/Functional/Python/Std/macros.cpp
@@ -2,8 +2,8 @@
 //
 //  BornAgain: simulate and fit scattering at grazing incidence
 //
-//! @file      Tests/Functional/Python/PyStandard/main.cpp
-//! @brief     Implements program PyStandardTest, to run functional tests
+//! @file      Tests/Functional/Python/Std/macros.cpp
+//! @brief     Implements Core standard tests through gtest macros.
 //!
 //! @homepage  http://www.bornagainproject.org
 //! @license   GNU General Public License v3 or higher (see COPYING)
@@ -12,12 +12,7 @@
 //
 // ************************************************************************** //
 
-#include "Tests/Functional/Python/PyStandard/PyStandardTest.h"
-#include "Tests/Functional/Std/StandardTestService.h"
+#include "Tests/Functional/Std/Run.h"
 
-//! Runs PyStandardTest on a standard simulation indicated by argv[1].
-
-int main(int argc, char** argv)
-{
-    return !StandardTestService<PyStandardTest>().execute(argc, argv);
-}
+#define  PYTHON_STD_TEST
+#include "Tests/Functional/Std/StandardTests.h" // contains macros that are executed by gtest
diff --git a/Tests/Functional/Std/CMakeLists.txt b/Tests/Functional/Std/CMakeLists.txt
deleted file mode 100644
index 0cffff6101a7446fde686bf8a021dc3e966d347d..0000000000000000000000000000000000000000
--- a/Tests/Functional/Std/CMakeLists.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-############################################################################
-# CMakeLists.txt file for building libBornAgainCore library
-############################################################################
-
-set(library_name BornAgainTestMachinery)
-
-file(GLOB source_files "*.cpp")
-
-if(WIN32)
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DBA_CORE_BUILD_DLL")
-endif()
-
-add_library(${library_name} SHARED ${source_files})
-target_link_libraries(${library_name} ${BornAgainCore_LIBRARY} ${CMAKE_THREAD_LIBS_INIT})
-
-set_target_properties(${library_name} PROPERTIES PREFIX ${libprefix} SUFFIX ${libsuffix})
-set(${library_name}_LIBRARY_TYPE SHARED)
-
-set(${library_name}_INCLUDE_DIRS ${include_dirs} PARENT_SCOPE)
-set(${library_name}_LIBRARY ${library_name} PARENT_SCOPE)
-
-
-if(APPLE AND BORNAGAIN_APPLE_BUNDLE)
-    set(link_flags "-Wl,-rpath,@loader_path/../../Frameworks")
-    set_target_properties(${library_name} PROPERTIES LINK_FLAGS ${link_flags})
-endif()
diff --git a/Tests/Functional/Std/IStandardTest.cpp b/Tests/Functional/Std/IStandardTest.cpp
deleted file mode 100644
index 5e1a7027caf11cc3ee39047b49a33bf339990f5d..0000000000000000000000000000000000000000
--- a/Tests/Functional/Std/IStandardTest.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Tests/Functional/Std/IStandardTest.cpp
-//! @brief     Defines pure virtual base class IStandardTest.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#include "Tests/Functional/Std/IStandardTest.h"
-#include "Core/Simulation/Simulation.h"
-
-IStandardTest::IStandardTest(const std::string& name, const Simulation& simulation,
-                             double threshold)
-    : m_name(name), m_reference_simulation(simulation.clone()), m_threshold(threshold)
-{
-}
-
-IStandardTest::~IStandardTest() = default; // needs sizeof(Simulation)
diff --git a/Tests/Functional/Std/IStandardTest.h b/Tests/Functional/Std/IStandardTest.h
deleted file mode 100644
index a673ab664c15b6a9ad0ad324939001a88fa40783..0000000000000000000000000000000000000000
--- a/Tests/Functional/Std/IStandardTest.h
+++ /dev/null
@@ -1,42 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Tests/Functional/Std/IStandardTest.h
-//! @brief     Defines pure virtual base class IStandardTest.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#ifndef BORNAGAIN_TESTS_FUNCTIONAL_STD_ISTANDARDTEST_H
-#define BORNAGAIN_TESTS_FUNCTIONAL_STD_ISTANDARDTEST_H
-
-#include "Wrap/WinDllMacros.h"
-#include <memory>
-#include <string>
-
-class Simulation;
-
-//! Base class for tests that compare results with reference data.
-//! @ingroup standard_samples
-
-class BA_CORE_API_ IStandardTest
-{
-public:
-    IStandardTest(const std::string& name, const Simulation& simulation, double threshold);
-
-    virtual ~IStandardTest();
-
-    virtual bool runTest() = 0;
-
-protected:
-    std::string m_name;
-    std::unique_ptr<Simulation> m_reference_simulation;
-    double m_threshold;
-};
-
-#endif // BORNAGAIN_TESTS_FUNCTIONAL_STD_ISTANDARDTEST_H
diff --git a/Tests/Functional/Std/Run.cpp b/Tests/Functional/Std/Run.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..aae837f12f1841c2646dd27ae1703290cbb038bd
--- /dev/null
+++ b/Tests/Functional/Std/Run.cpp
@@ -0,0 +1,64 @@
+// ************************************************************************** //
+//
+//  BornAgain: simulate and fit scattering at grazing incidence
+//
+//! @file      Tests/Functional/Std/Run.cpp
+//! @brief     Implements function run for use in standard tests.
+//!
+//! @homepage  http://www.bornagainproject.org
+//! @license   GNU General Public License v3 or higher (see COPYING)
+//! @copyright Forschungszentrum Jülich GmbH 2018
+//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
+//
+// ************************************************************************** //
+
+#include "BABuild.h"
+#include "BATesting.h"
+#include "Core/InputOutput/IntensityDataIOFactory.h"
+#include "Core/Instrument/IntensityDataFunctions.h"
+#include "Core/Multilayer/IMultiLayerBuilder.h"
+#include "Core/Multilayer/MultiLayer.h"
+#include "Core/Simulation/Simulation.h"
+#include "Core/StandardSamples/SampleBuilderFactory.h"
+#include "Core/StandardSamples/SimulationFactory.h"
+#include "Core/Tools/FileSystemUtils.h"
+#include <cassert>
+#include <iostream>
+
+// implemented differently for Core/Py/Gui tests:
+bool checkSimulation(const std::string& name, const Simulation& direct_simulation,
+                     const double limit);
+
+int run(const std::string& test_name, const std::string& sim_name,
+        const std::string& sample_builder_name, const double limit)
+{
+    std::cout << "run std test " << test_name << std::endl;
+    std::cout << "- create sim " << sim_name << std::endl;
+    std::unique_ptr<Simulation> simulation{SimulationFactory().createItem(sim_name)};
+    assert(simulation);
+
+    std::cout << "- sample builder " << sample_builder_name << std::endl;
+    std::unique_ptr<IMultiLayerBuilder> builder{
+        SampleBuilderFactory().createItem(sample_builder_name)};
+    std::cout << "- builder name " << builder->getName() << std::endl;
+
+    int number_of_failed_tests = 0;
+    for (size_t iSample = 0; iSample < builder->size(); ++iSample) {
+        std::cout << "- run subtest " << iSample << "/" << builder->size() << ": "
+                  << builder->getName() << "\n";
+
+        std::unique_ptr<MultiLayer> sample(builder->createSample(iSample));
+        simulation->setSample(*sample);
+
+        std::string full_name = test_name;
+        if (builder->getName() != "SampleBuilder")
+            full_name += "_" + builder->getName();
+
+        simulation->runSimulation();
+
+        if (!checkSimulation(full_name, *simulation, limit))
+            ++number_of_failed_tests;
+    }
+
+    return !number_of_failed_tests;
+}
diff --git a/Tests/Functional/Core/CoreStandardTest/main.cpp b/Tests/Functional/Std/Run.h
similarity index 51%
rename from Tests/Functional/Core/CoreStandardTest/main.cpp
rename to Tests/Functional/Std/Run.h
index eb50d619e14b2ba3c2850671f66cdfa2a8344501..6da551c5006c38651f21e8245f47ad728496010a 100644
--- a/Tests/Functional/Core/CoreStandardTest/main.cpp
+++ b/Tests/Functional/Std/Run.h
@@ -2,8 +2,8 @@
 //
 //  BornAgain: simulate and fit scattering at grazing incidence
 //
-//! @file      Tests/Functional/Core/CoreStandardTest/main.cpp
-//! @brief     Implements program CoreStandardTest to run core functional tests
+//! @file      Tests/Functional/Std/Run.h
+//! @brief     Declares function run for use in standard tests.
 //!
 //! @homepage  http://www.bornagainproject.org
 //! @license   GNU General Public License v3 or higher (see COPYING)
@@ -12,12 +12,7 @@
 //
 // ************************************************************************** //
 
-#include "Tests/Functional/Core/CoreStandardTest/CoreStandardTest.h"
-#include "Tests/Functional/Std/StandardTestService.h"
+#include <string>
 
-//! Runs CoreStandardTest on a standard simulation indicated by argv[1].
-
-int main(int argc, char** argv)
-{
-    return !StandardTestService<CoreStandardTest>().execute(argc, argv);
-}
+int run(const std::string& test_name, const std::string& sim_name,
+        const std::string& sample_builder_name, const double limit);
diff --git a/Tests/Functional/Std/StandardTestCatalog.cpp b/Tests/Functional/Std/StandardTestCatalog.cpp
deleted file mode 100644
index bb39acd3d5cc9b8b6c1434ef560617206fe4359f..0000000000000000000000000000000000000000
--- a/Tests/Functional/Std/StandardTestCatalog.cpp
+++ /dev/null
@@ -1,376 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Tests/Functional/Std/StandardTestCatalog.cpp
-//! @brief     Implements class StandardTestCatalog.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#include "Tests/Functional/Std/StandardTestCatalog.h"
-#include "Fit/Tools/StringUtils.h"
-#include <iostream>
-
-StandardTestCatalog::StandardTestCatalog()
-{
-    add("FormFactors", "Test of all form factors defined", "MiniGISAS", "ParticleInTheAirBuilder",
-        2e-10);
-
-    add("FormFactorsWithAbsorption", "Test of all form factors defined, absorption case",
-        "MiniGISAS_v2", "LayersWithAbsorptionBuilder", 2e-10);
-
-    add("GISASAbsorptiveSLDLayers", "Test for SLD material in GISAS simulations", "MiniGISAS",
-        "LayersWithAbsorptionBySLDBuilder", 2e-10);
-
-    add("CylindersAndPrisms", "Mixture of cylinders and prisms without interference", "MiniGISAS",
-        "CylindersAndPrismsBuilder", 2e-10);
-
-    add("RadialParaCrystal", "Interference function of radial paracrystal", "MiniGISAS",
-        "RadialParaCrystalBuilder", 2e-10);
-
-    add("HardDisk", "Interference function of hard disk Percus-Yevick", "MiniGISAS",
-        "HardDiskBuilder", 2e-10);
-
-    add("Basic2DParaCrystal",
-        "Interference function of basic 2D paracrystal with variety of FT distributions",
-        "MiniGISAS", "Basic2DParaCrystalBuilder", 2e-10);
-
-    add("HexParaCrystal", "Interference function of 2D hexagonal paracrystal", "MiniGISAS",
-        "HexParaCrystalBuilder", 2e-10);
-
-    add("Lattice1D", "Interference function of 21D lattice", "MiniGISAS", "Lattice1DBuilder",
-        2e-10);
-
-    add("RectParaCrystal", "Interference function of 2D rectanguler paracrystal", "MiniGISAS",
-        "RectParaCrystalBuilder", 2e-10);
-
-    // --- CoreShell ---
-
-    add("CoreShellParticle", "Core shell particle", "MiniGISAS", "CoreShellParticleBuilder", 2e-10);
-
-    add("CoreShellBoxRotateZandY",
-        "Rotation and translation of core shell box particle in 3 layers system", "MiniGISAS",
-        "CoreShellBoxRotateZandYBuilder", 2e-10);
-
-    // ---
-
-    add("MultiLayerWithRoughness", "Multilayer with roughness", "MiniGISAS",
-        "MultiLayerWithRoughnessBuilder", 2e-10);
-
-    add("SquareLattice", "Interference function of 2D square lattice", "MiniGISAS",
-        "SquareLatticeBuilder", 2e-10);
-
-    add("CenteredSquareLattice", "Interference function of 2D square lattice", "MiniGISAS",
-        "CenteredSquareLatticeBuilder", 2e-10);
-
-    add("RotatedSquareLattice", "Interference function of rotated 2D square lattice", "MiniGISAS",
-        "RotatedSquareLatticeBuilder", 2e-10);
-
-    add("FiniteSquareLattice", "Interference function of finite 2D square lattice", "MiniGISAS",
-        "FiniteSquareLatticeBuilder", 2e-10);
-
-    add("SuperLattice", "Interference function of 2D superlattice", "MiniGISAS",
-        "SuperLatticeBuilder", 2e-10);
-
-    add("RotatedPyramids", "Interference function of rotated 2D square lattice", "MiniGISAS",
-        "RotatedPyramidsBuilder", 2e-10);
-
-    add("ThickAbsorptiveSampleWithRoughness",
-        "GISAS picture on extra long wavelength from thick absorptive sample with roughness",
-        "ExtraLongWavelengthGISAS", "ThickAbsorptiveSampleBuilder", 2e-10);
-
-    // --- Compositions ---
-
-    add("ParticleComposition", "Two layers of spheres at hex lattice", "MiniGISAS",
-        "ParticleCompositionBuilder", 2e-10);
-
-    add("BoxCompositionRotateX", "Two boxes in particle composition rotated in X by 90 degrees",
-        "MiniGISAS", "BoxCompositionRotateXBuilder", 2e-10);
-
-    add("BoxCompositionRotateY", "Two boxes in particle composition rotated in Y by 90 degrees",
-        "MiniGISAS", "BoxCompositionRotateYBuilder", 2e-10);
-
-    add("BoxCompositionRotateZ", "Two boxes in particle composition rotated in Z by 90 degrees",
-        "MiniGISAS", "BoxCompositionRotateZBuilder", 2e-10);
-
-    add("BoxCompositionRotateZandY",
-        "Two boxes in particle composition rotated in Z and Y by 90 degrees", "MiniGISAS",
-        "BoxCompositionRotateZandYBuilder", 2e-10);
-
-    add("BoxStackComposition",
-        "Two different boxes are first rotated and then composed, composition is then rotated.",
-        "MiniGISAS", "BoxStackCompositionBuilder", 2e-10);
-
-    // ---
-
-    add("CylindersWithSizeDistribution", "Cylinders in BA with size distributions", "MiniGISAS",
-        "CylindersWithSizeDistributionBuilder", 2e-10);
-
-    add("TwoTypesCylindersDistribution", "Cylinders in BA with size distributions", "MiniGISAS",
-        "TwoTypesCylindersDistributionBuilder", 2e-10);
-
-    add("RotatedPyramidsDistribution", "Rotated pyramids distribution", "MiniGISAS",
-        "RotatedPyramidsDistributionBuilder", 2e-10);
-
-    add("SpheresWithLimitsDistribution",
-        "Spherical particles with the distribution applied to the radius and RealLimits defined.",
-        "MiniGISAS", "SpheresWithLimitsDistributionBuilder", 2e-10);
-
-    add("ConesWithLimitsDistribution",
-        "Spherical particles with the distribution applied to the radius and RealLimits defined.",
-        "MiniGISAS", "ConesWithLimitsDistributionBuilder", 2e-10);
-
-    add("LinkedBoxDistribution",
-        "Distribution of boxes with main parameter and two linked parameters.", "MiniGISAS",
-        "LinkedBoxDistributionBuilder", 2e-10);
-
-    // ---
-
-    add("BeamDivergence", "Cylinders in BA in the presence of beam divergence",
-        "MiniGISASBeamDivergence", "CylindersInBABuilder", 2e-10);
-
-    add("DetectorResolution", "Cylinders in BA with detector resolution",
-        "MiniGISASDetectorResolution", "CylindersInBABuilder", 2e-10);
-
-    add("MultipleLayout", "Two types of particles in different layouts", "MiniGISAS",
-        "MultipleLayoutBuilder", 2e-10);
-
-    add("ApproximationDA", "Size distribution model: decoupling approximation", "MiniGISAS",
-        "SizeDistributionDAModelBuilder", 2e-10);
-
-    add("ApproximationLMA", "Size distribution model: local monodisperse approximation",
-        "MiniGISAS", "SizeDistributionLMAModelBuilder", 2e-10);
-
-    add("ApproximationSSCA", "Size distribution model: size space coupling approximation",
-        "MiniGISAS", "SizeDistributionSSCAModelBuilder", 2e-10);
-
-    add("CylindersInSSCA", "Size spacing correlation approximation", "MiniGISAS",
-        "CylindersInSSCABuilder", 2e-10);
-
-    add("CosineRipple", "Cosine ripple within radial paracrystal model", "MiniGISAS",
-        "CosineRippleBuilder", 2e-10);
-
-    add("TriangularRipple", "Triangular ripple within radial paracrystal model", "MiniGISAS",
-        "TriangularRippleBuilder", 2e-10);
-
-    add("AsymRipple", "Triangular ripple with asymetry within radial paracrystal model",
-        "MiniGISAS", "AsymRippleBuilder", 2e-10);
-
-    add("MesoCrystal", "Cylindrical mesocrystal composed of spherical nano particles", "MiniGISAS",
-        "MesoCrystalBuilder", 2e-10);
-
-    add("CustomMorphology", "Custom particle mixture a la isgisaxs morphology approach",
-        "MiniGISAS", "CustomMorphologyBuilder", 2e-10);
-
-    add("TransformBox", "Rotated/translated box in 3 layers system", "MiniGISAS",
-        "TransformBoxBuilder", 1e-10);
-
-    // polarized GISAS
-
-    add("MagneticParticleZeroField", "Magnetic cylinders with zero field", "MiniGISAS",
-        "MagneticParticleZeroFieldBuilder", 2e-10);
-
-    add("MagneticSubstrateZeroField", "Magnetic substrate with zero field",
-        "MiniGISASPolarizationPP", "MagneticSubstrateZeroFieldBuilder", 2e-10);
-
-    add("MagneticRotation", "Rotated magnetic particle in magnetic substrate",
-        "MiniGISASPolarizationPM", "MagneticRotationBuilder", 2e-10);
-
-    add("MagneticSpheres", "Magnetic spheres inside substrate", "MiniGISASPolarizationPM",
-        "MagneticSpheresBuilder", 2e-10);
-
-    add("MagneticCylindersPP", "Magnetic cylinders on a substrate: ++ channel",
-        "MiniGISASPolarizationPP", "MagneticCylindersBuilder", 2e-10);
-
-    add("MagneticCylindersPM", "Magnetic cylinders on a substrate: +- channel",
-        "MiniGISASPolarizationPM", "MagneticCylindersBuilder", 2e-10);
-
-    add("MagneticCylindersMP", "Magnetic cylinders on a substrate: -+ channel",
-        "MiniGISASPolarizationMP", "MagneticCylindersBuilder", 2e-10);
-
-    add("MagneticCylindersMM", "Magnetic cylinders on a substrate: -- channel",
-        "MiniGISASPolarizationMM", "MagneticCylindersBuilder", 2e-10);
-
-    add("MagneticSpheresInMagLayerPP", "Magnetic spheres in a magnetized layer, ++ channel",
-        "MiniGISASPolarizationPP", "MagneticLayerBuilder", 2e-10);
-
-    add("MagneticSpheresInMagLayerMP", "Magnetic spheres in a magnetized layer, ++ channel",
-        "MiniGISASPolarizationMP", "MagneticLayerBuilder", 2e-10);
-
-    // Masking
-
-    add("SimulationWithMasks", "Various masks are added to the simulation", "GISASWithMasks",
-        "CylindersAndPrismsBuilder", 1e-10);
-
-    // Various rectangular detector alignment
-
-    add("RectDetectorGeneric", "Various masks are added to the simulation", "RectDetectorGeneric",
-        "CylindersInBABuilder", 1e-10);
-
-    add("RectDetectorPerpToSample", "Various masks are added to the simulation",
-        "RectDetectorPerpToSample", "CylindersInBABuilder", 1e-10);
-
-    add("RectDetectorPerpToDirectBeam", "Various masks are added to the simulation",
-        "RectDetectorPerpToDirectBeam", "CylindersInBABuilder", 1e-10);
-
-    add("RectDetectorPerpToReflectedBeam", "Various masks are added to the simulation",
-        "RectDetectorPerpToReflectedBeam", "CylindersInBABuilder", 1e-10);
-
-    add("RectDetectorPerpToReflectedBeamDpos", "Various masks are added to the simulation",
-        "RectDetectorPerpToReflectedBeamDpos", "CylindersInBABuilder", 1e-10);
-
-    add("LargeCylindersMonteCarlo", "Large cylinders simulated with MonteCarlo integration",
-        "MiniGISASMonteCarlo", "LargeCylindersInDWBABuilder", 5e-1);
-
-    add("SphericalDetWithRoi", "Spherical detector with ROI and mask defined",
-        "SphericalDetWithRoi", "CylindersAndPrismsBuilder", 1e-10);
-
-    add("RectDetWithRoi", "Rectangular detector with ROI and mask defined", "RectDetWithRoi",
-        "CylindersAndPrismsBuilder", 1e-10);
-
-    add("BoxesWithSpecular", "Boxes in square lattice including specular peak", "MiniGISASSpecular",
-        "BoxesSquareLatticeBuilder", 1e-10);
-
-    add("RotatedCylinder", "Rotated cylinder in substrate", "MiniGISAS", "RotatedCylindersBuilder",
-        1e-10);
-
-    add("SlicedComposition",
-        "Spherical particle made of two different materials crossing interface", "MiniGISAS",
-        "SlicedCompositionBuilder", 1e-10);
-
-    // Simulations with background
-
-    add("ConstantBackground", "Constant background is added to the simulation",
-        "ConstantBackground", "CylindersInBABuilder", 1e-10);
-
-    // Specular simulations
-
-    add("HomogeneousTiNiSample",
-        "Specular simulation for 10 interchanging Ti-Ni homogeneous layers", "BasicSpecular",
-        "HomogeneousMultilayerBuilder", 1e-10);
-
-    add("HomogeneousTiNiSampleWithAbsorption",
-        "Specular simulation for 10 interchanging Ti-Ni homogeneous "
-        "layers with absorptive SLD material",
-        "BasicSpecular", "PlainMultiLayerBySLDBuilder", 1e-10);
-
-    add("RoughnessInSpecular", "Specular simulation with rough sample", "BasicSpecular",
-        "MultiLayerWithRoughnessBuilder", 2e-9);
-
-    add("NCRoughnessInSpecular", "Specular simulation with rough sample (Nevot-Croce)",
-        "BasicSpecular", "MultiLayerWithNCRoughnessBuilder", 2e-9);
-
-    add("GaussianBeamFootprint",
-        "Similar to HomogeneousTiNiSample, but with finite-sized gaussian beam",
-        "SpecularWithGaussianBeam", "HomogeneousMultilayerBuilder", 1e-10);
-
-    add("SquareBeamFootprint",
-        "Similar to HomogeneousTiNiSample, but with finite-sized square beam",
-        "SpecularWithSquareBeam", "HomogeneousMultilayerBuilder", 1e-10);
-
-    add("SpecularDivergentBeam",
-        "Simulates beam divergence both in wavelength and inclination angle",
-        "SpecularDivergentBeam", "HomogeneousMultilayerBuilder", 1e-10);
-
-    add("RelativeResolutionTOF",
-        "Simulates q-defined reflectometry with a fixed relative q resolution",
-        "TOFRWithRelativeResolution", "PlainMultiLayerBySLDBuilder", 1e-10);
-
-    add("SpecularWithSlicing", "Compares manual/automatic slicing in a sample with cylinders",
-        {"BasicSpecular", "BasicSpecular", "BasicSpecular", "BasicSpecularQ"},
-        {"SlicedCylindersBuilder", "SLDSlicedCylindersBuilder", "AveragedSlicedCylindersBuilder",
-         "SLDSlicedCylindersBuilder"},
-        1e-10);
-
-    add("InstrumentDefinitionComparison",
-        "Compares specular signal from q-defined, TOF and conventional instrument",
-        {"BasicSpecular", "BasicSpecularQ"},
-        {"PlainMultiLayerBySLDBuilder", "PlainMultiLayerBySLDBuilder"}, 1e-10);
-
-    add("TOFResolutionComparison",
-        "Compares specular signal from TOF instruments with pointwise and relative resolutions",
-        {"TOFRWithRelativeResolution", "TOFRWithPointwiseResolution"},
-        {"PlainMultiLayerBySLDBuilder", "PlainMultiLayerBySLDBuilder"}, 1e-10);
-
-    // polarized specular
-
-    add("BasicSpecularPP", "Basic specular simulation on polarized sample, ++ channel",
-        "BasicSpecularPP", "SimpleMagneticLayerBuilder", 1e-10);
-
-    add("BasicSpecularMM", "Basic specular simulation on polarized sample, -- channel",
-        "BasicSpecularMM", "SimpleMagneticLayerBuilder", 1e-10);
-
-    add("PolarizedQAngleReflectivityPP",
-        "Compares specular signal from ++ channel for angular- and q-defined reflectivity",
-        {"BasicSpecularPP", "BasicQSpecularPP"},
-        {"SimpleMagneticLayerBuilder", "SimpleMagneticLayerBuilder"}, 1e-10);
-
-    add("PolarizedQAngleReflectivityMM",
-        "Compares specular signal from -- channel for angular- and q-defined reflectivity",
-        {"BasicSpecularMM", "BasicQSpecularMM"},
-        {"SimpleMagneticLayerBuilder", "SimpleMagneticLayerBuilder"}, 1e-10);
-
-    // off-specular simulation
-
-    add("OffSpecularResonator", "Simulates resonator in OffSpec setup", "OffSpecMini",
-        "ResonatorBuilder", 1e-10);
-
-    // depth probe simulation
-
-    add("DepthProbeTest", "Test for basic functionality of depth probe", "BasicDepthProbe",
-        "HomogeneousMultilayerBuilder", 1e-10);
-}
-
-//! Adds test description to the catalog.
-
-void StandardTestCatalog::add(const std::string& test_name, const std::string& test_description,
-                              const std::string& simulation_name,
-                              const std::string& sample_builder_name, double threshold)
-{
-    if (contains(test_name))
-        throw std::runtime_error("StandardTestCatalog::add() -> Error. "
-                                 "Existing item '"
-                                 + test_name + "'");
-
-    m_catalog[test_name] = StandardTestInfo(test_name, test_description, simulation_name,
-                                            sample_builder_name, threshold);
-}
-
-void StandardTestCatalog::add(const std::string& test_name, const std::string& test_description,
-                              std::initializer_list<std::string> simulation_names,
-                              std::initializer_list<std::string> sample_builder_names,
-                              double threshold)
-{
-    if (contains(test_name))
-        throw std::runtime_error("StandardTestCatalog::add() -> Error. "
-                                 "Existing item '"
-                                 + test_name + "'");
-
-    m_catalog[test_name] =
-        StandardTestInfo(test_name, test_description, std::move(simulation_names),
-                         std::move(sample_builder_names), threshold);
-}
-
-//! Returns test info for given test name.
-
-StandardTestInfo StandardTestCatalog::testInfo(const std::string& test_name)
-{
-    if (!contains(test_name))
-        throw std::runtime_error("StandardTestCatalog::testInfo() -> Error. No info for "
-                                 "given name '"
-                                 + test_name + "'");
-
-    return m_catalog[test_name];
-}
-
-//! Returns true if catalog contains info for test with given name.
-
-bool StandardTestCatalog::contains(const std::string& test_name)
-{
-    return m_catalog.find(test_name) != m_catalog.end();
-}
diff --git a/Tests/Functional/Std/StandardTestCatalog.h b/Tests/Functional/Std/StandardTestCatalog.h
deleted file mode 100644
index 2bf2ac8cbd681419fcf989100e152792e5d6aaf7..0000000000000000000000000000000000000000
--- a/Tests/Functional/Std/StandardTestCatalog.h
+++ /dev/null
@@ -1,47 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Tests/Functional/Std/StandardTestCatalog.h
-//! @brief     Defines class StandardTestCatalog.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#ifndef BORNAGAIN_TESTS_FUNCTIONAL_STD_STANDARDTESTCATALOG_H
-#define BORNAGAIN_TESTS_FUNCTIONAL_STD_STANDARDTESTCATALOG_H
-
-#include "Tests/Functional/Std/StandardTestInfo.h"
-#include "Wrap/WinDllMacros.h"
-#include <map>
-
-//! @class StandardTestCatalog
-//! @ingroup standard_samples
-//! @brief Catalog with the description of standard functional tests.
-
-class BA_CORE_API_ StandardTestCatalog
-{
-public:
-    StandardTestCatalog();
-
-    StandardTestInfo testInfo(const std::string& test_name);
-
-    bool contains(const std::string& test_name);
-
-private:
-    void add(const std::string& test_name, const std::string& test_description,
-             const std::string& simulation_name, const std::string& sample_builder_name,
-             double threshold);
-
-    void add(const std::string& test_name, const std::string& test_description,
-             std::initializer_list<std::string> simulation_names,
-             std::initializer_list<std::string> sample_builder_name, double threshold);
-
-    std::map<std::string, StandardTestInfo> m_catalog;
-};
-
-#endif // BORNAGAIN_TESTS_FUNCTIONAL_STD_STANDARDTESTCATALOG_H
diff --git a/Tests/Functional/Std/StandardTestInfo.cpp b/Tests/Functional/Std/StandardTestInfo.cpp
deleted file mode 100644
index bbba02fcd75c0920872c3df721d3aa60fedf3924..0000000000000000000000000000000000000000
--- a/Tests/Functional/Std/StandardTestInfo.cpp
+++ /dev/null
@@ -1,47 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Tests/Functional/Std/StandardTestInfo.cpp
-//! @brief     Implements class SimulationInfo.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#include "Tests/Functional/Std/StandardTestInfo.h"
-#include <stdexcept>
-
-StandardTestInfo::StandardTestInfo() : m_threshold(0.0) {}
-
-StandardTestInfo::StandardTestInfo(const std::string& test_name,
-                                   const std::string& test_description,
-                                   const std::string& simulation_name,
-                                   const std::string& sample_builder_name, double threshold)
-    : m_test_name(test_name), m_test_description(test_description),
-      m_simulation_names({simulation_name}), m_sample_builder_names({sample_builder_name}),
-      m_threshold(threshold)
-{
-}
-
-StandardTestInfo::StandardTestInfo(const std::string& test_name,
-                                   const std::string& test_description,
-                                   std::initializer_list<std::string> simulation_names,
-                                   std::initializer_list<std::string> sample_builder_names,
-                                   double threshold)
-    : m_test_name(test_name), m_test_description(test_description),
-      m_simulation_names(std::move(simulation_names)),
-      m_sample_builder_names(std::move(sample_builder_names)), m_threshold(threshold)
-{
-    if (m_simulation_names.size() != m_sample_builder_names.size())
-        throw std::runtime_error("Error in StandardTestInfo::size(): inconsistent sizes of "
-                                 "simulation and builder name vectors");
-}
-
-size_t StandardTestInfo::size() const
-{
-    return m_simulation_names.size();
-}
diff --git a/Tests/Functional/Std/StandardTestInfo.h b/Tests/Functional/Std/StandardTestInfo.h
deleted file mode 100644
index fa2573ba1e960478a41d8c3f976e47da6163e460..0000000000000000000000000000000000000000
--- a/Tests/Functional/Std/StandardTestInfo.h
+++ /dev/null
@@ -1,46 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Tests/Functional/Std/StandardTestInfo.h
-//! @brief     Defines class StandardTestInfo.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#ifndef BORNAGAIN_TESTS_FUNCTIONAL_STD_STANDARDTESTINFO_H
-#define BORNAGAIN_TESTS_FUNCTIONAL_STD_STANDARDTESTINFO_H
-
-#include "Wrap/WinDllMacros.h"
-#include <string>
-#include <vector>
-
-//! @class StandardTestInfo
-//! @ingroup standard_samples
-//! @brief Collection of parameters necessary to run standard functional test.
-
-class BA_CORE_API_ StandardTestInfo
-{
-public:
-    StandardTestInfo();
-    StandardTestInfo(const std::string& test_name, const std::string& test_description,
-                     const std::string& simulation_name, const std::string& sample_builder_name,
-                     double threshold);
-    StandardTestInfo(const std::string& test_name, const std::string& test_description,
-                     std::initializer_list<std::string> simulation_names,
-                     std::initializer_list<std::string> sample_builder_names, double threshold);
-
-    size_t size() const;
-
-    std::string m_test_name;
-    std::string m_test_description;
-    std::vector<std::string> m_simulation_names;
-    std::vector<std::string> m_sample_builder_names;
-    double m_threshold;
-};
-
-#endif // BORNAGAIN_TESTS_FUNCTIONAL_STD_STANDARDTESTINFO_H
diff --git a/Tests/Functional/Std/StandardTestService.cpp b/Tests/Functional/Std/StandardTestService.cpp
deleted file mode 100644
index 41e1fcde3e933b8b58e15c908cf032608606194b..0000000000000000000000000000000000000000
--- a/Tests/Functional/Std/StandardTestService.cpp
+++ /dev/null
@@ -1,83 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Tests/Functional/Std/StandardTestService.cpp
-//! @brief     Defines class StandardTestService.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#include "Tests/Functional/Std/StandardTestService.h"
-#include "Core/Multilayer/IMultiLayerBuilder.h"
-#include "Core/Multilayer/MultiLayer.h"
-#include "Core/StandardSamples/SampleBuilderFactory.h"
-#include "Core/StandardSamples/SimulationFactory.h"
-#include "Tests/Functional/Std/IStandardTest.h"
-#include "Tests/Functional/Std/StandardTestCatalog.h"
-#include <cassert>
-#include <iostream>
-
-namespace
-{
-
-//! Returns test full name, composed from the test name and the name of sample builder.
-
-std::string fullTestName(const std::string& test_name, const std::string& builder_name)
-{
-    std::string result = test_name;
-
-    if (builder_name != "SampleBuilder")
-        result += "_" + builder_name;
-
-    return result;
-}
-
-} // namespace
-
-//! Runs test corresponding to given command line parameters, returns true if success.
-
-bool StandardTestServiceBase::execute(int argc, char** argv)
-{
-    assert(argc > 1);
-    StandardTestInfo info = StandardTestCatalog().testInfo(argv[1]);
-    assert(!info.m_test_name.empty());
-    assert(info.size() == 1);
-
-    std::unique_ptr<IMultiLayerBuilder> builder(
-        SampleBuilderFactory().createItem(info.m_sample_builder_names.front()));
-
-    size_t n_subtests = builder->size();
-    int number_of_failed_tests = 0;
-
-    for (size_t sample_index = 0; sample_index < builder->size(); ++sample_index) {
-        std::cout << "Run std test " << info.m_test_name << ", subtest " << sample_index << "/"
-                  << builder->size() << ": "<< builder->getName() << "\n";
-
-        std::unique_ptr<Simulation> simulation(
-            SimulationFactory().createItem(info.m_simulation_names.front()));
-
-        std::unique_ptr<MultiLayer> sample(builder->createSample(sample_index));
-        simulation->setSample(*sample);
-
-        std::string test_name = fullTestName(info.m_test_name, builder->getName());
-
-        std::unique_ptr<IStandardTest> test(
-            createStdTest(test_name, *simulation, info.m_threshold));
-
-        if (!test->runTest()) {
-            std::cout << "subtest " << sample_index << " failed\n";
-            ++number_of_failed_tests;
-        }
-    }
-
-    if (number_of_failed_tests)
-        std::cout << "summary: " << number_of_failed_tests << " of " << n_subtests
-                  << " subtests failed\n";
-
-    return number_of_failed_tests == 0;
-}
diff --git a/Tests/Functional/Std/StandardTestService.h b/Tests/Functional/Std/StandardTestService.h
deleted file mode 100644
index 718e2b7b6e0dbf3a556a654e684146c80721b563..0000000000000000000000000000000000000000
--- a/Tests/Functional/Std/StandardTestService.h
+++ /dev/null
@@ -1,53 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Tests/Functional/Std/StandardTestService.h
-//! @brief     Defines class StandardTestService.
-//!
-//! @homepage  http://www.bornagainproject.org
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2018
-//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
-//
-// ************************************************************************** //
-
-#ifndef BORNAGAIN_TESTS_FUNCTIONAL_STD_STANDARDTESTSERVICE_H
-#define BORNAGAIN_TESTS_FUNCTIONAL_STD_STANDARDTESTSERVICE_H
-
-#include "Wrap/WinDllMacros.h"
-#include <string>
-class IStandardTest;
-class Simulation;
-
-//! Main class to run standard functional test from standalone executable.
-//! @ingroup standard_samples
-
-class BA_CORE_API_ StandardTestServiceBase
-{
-public:
-    virtual ~StandardTestServiceBase() = default;
-    bool execute(int argc, char** argv);
-
-private:
-    virtual IStandardTest* createStdTest(const std::string& name, const Simulation& simulation,
-                                         double threshold) = 0;
-};
-
-//! @brief
-//! Extends main class to run standard functional test from standalone executable.
-//! Concrete test type is templated.
-//! @ingroup standard_samples
-
-template <typename T> class StandardTestService : public StandardTestServiceBase
-{
-
-private:
-    IStandardTest* createStdTest(const std::string& name, const Simulation& simulation,
-                                 double threshold) override
-    {
-        return new T(name, simulation, threshold);
-    }
-};
-
-#endif // BORNAGAIN_TESTS_FUNCTIONAL_STD_STANDARDTESTSERVICE_H
diff --git a/Tests/Functional/Std/StandardTests.h b/Tests/Functional/Std/StandardTests.h
new file mode 100644
index 0000000000000000000000000000000000000000..03ab19b8731aa61ca74170ab944be86e1a9e84b3
--- /dev/null
+++ b/Tests/Functional/Std/StandardTests.h
@@ -0,0 +1,524 @@
+// ************************************************************************** //
+//
+//  BornAgain: simulate and fit scattering at grazing incidence
+//
+//! @file      Tests/Functional/Std/StandardTests.h
+//! @brief     Implements class StandardTestCatalog.
+//!
+//! @homepage  http://www.bornagainproject.org
+//! @license   GNU General Public License v3 or higher (see COPYING)
+//! @copyright Forschungszentrum Jülich GmbH 2018
+//! @authors   Scientific Computing Group at MLZ (see CITATION, AUTHORS)
+//
+// ************************************************************************** //
+
+#include "Tests/GTestWrapper/google_test.h"
+
+class Std : public ::testing::Test
+{
+};
+
+TEST_F(Std, FormFactors)
+{
+    EXPECT_TRUE(run("FormFactors", "MiniGISAS", "ParticleInTheAirBuilder", 2e-10));
+}
+
+TEST_F(Std, GISASAbsorptiveSLDLayers)
+{
+    EXPECT_TRUE(
+        run("GISASAbsorptiveSLDLayers", "MiniGISAS", "LayersWithAbsorptionBySLDBuilder", 2e-10));
+}
+
+TEST_F(Std, CylindersAndPrisms)
+{
+    EXPECT_TRUE(run("CylindersAndPrisms", "MiniGISAS", "CylindersAndPrismsBuilder", 2e-10));
+}
+
+TEST_F(Std, RadialParaCrystal)
+{
+    EXPECT_TRUE(run("RadialParaCrystal", "MiniGISAS", "RadialParaCrystalBuilder", 2e-10));
+}
+
+TEST_F(Std, HardDisk)
+{
+    EXPECT_TRUE(run("HardDisk", "MiniGISAS", "HardDiskBuilder", 2e-10));
+}
+
+TEST_F(Std, Basic2DParaCrystal)
+{
+    EXPECT_TRUE(run("Basic2DParaCrystal", "MiniGISAS", "Basic2DParaCrystalBuilder", 2e-10));
+}
+
+TEST_F(Std, HexParaCrystal)
+{
+    EXPECT_TRUE(run("HexParaCrystal", "MiniGISAS", "HexParaCrystalBuilder", 2e-10));
+}
+
+TEST_F(Std, Lattice1D)
+{
+    EXPECT_TRUE(run("Lattice1D", "MiniGISAS", "Lattice1DBuilder", 2e-10));
+}
+
+TEST_F(Std, RectParaCrystal)
+{
+    EXPECT_TRUE(run("RectParaCrystal", "MiniGISAS", "RectParaCrystalBuilder", 2e-10));
+}
+
+TEST_F(Std, CoreShellParticle)
+{
+    EXPECT_TRUE(run("CoreShellParticle", "MiniGISAS", "CoreShellParticleBuilder", 2e-10));
+}
+
+TEST_F(Std, CoreShellBoxRotateZandY)
+{
+    EXPECT_TRUE(
+        run("CoreShellBoxRotateZandY", "MiniGISAS", "CoreShellBoxRotateZandYBuilder", 2e-10));
+}
+
+TEST_F(Std, MultiLayerWithRoughness)
+{
+    EXPECT_TRUE(
+        run("MultiLayerWithRoughness", "MiniGISAS", "MultiLayerWithRoughnessBuilder", 2e-10));
+}
+
+TEST_F(Std, SquareLattice)
+{
+    EXPECT_TRUE(run("SquareLattice", "MiniGISAS", "SquareLatticeBuilder", 2e-10));
+}
+
+TEST_F(Std, CenteredSquareLattice)
+{
+    EXPECT_TRUE(run("CenteredSquareLattice", "MiniGISAS", "CenteredSquareLatticeBuilder", 2e-10));
+}
+
+TEST_F(Std, RotatedSquareLattice)
+{
+    EXPECT_TRUE(run("RotatedSquareLattice", "MiniGISAS", "RotatedSquareLatticeBuilder", 2e-10));
+}
+
+TEST_F(Std, FiniteSquareLattice)
+{
+    EXPECT_TRUE(run("FiniteSquareLattice", "MiniGISAS", "FiniteSquareLatticeBuilder", 2e-10));
+}
+
+TEST_F(Std, RotatedPyramids)
+{
+    EXPECT_TRUE(run("RotatedPyramids", "MiniGISAS", "RotatedPyramidsBuilder", 2e-10));
+}
+
+TEST_F(Std, ThickAbsorptiveSampleWithRoughness)
+{
+    EXPECT_TRUE(run("ThickAbsorptiveSampleWithRoughness", "ExtraLongWavelengthGISAS",
+                    "ThickAbsorptiveSampleBuilder", 2e-10));
+}
+
+TEST_F(Std, ParticleComposition)
+{
+    EXPECT_TRUE(run("ParticleComposition", "MiniGISAS", "ParticleCompositionBuilder", 2e-10));
+}
+
+TEST_F(Std, BoxCompositionRotateX)
+{
+    EXPECT_TRUE(run("BoxCompositionRotateX", "MiniGISAS", "BoxCompositionRotateXBuilder", 2e-10));
+}
+
+TEST_F(Std, BoxCompositionRotateY)
+{
+    EXPECT_TRUE(run("BoxCompositionRotateY", "MiniGISAS", "BoxCompositionRotateYBuilder", 2e-10));
+}
+
+TEST_F(Std, BoxCompositionRotateZ)
+{
+    EXPECT_TRUE(run("BoxCompositionRotateZ", "MiniGISAS", "BoxCompositionRotateZBuilder", 2e-10));
+}
+
+TEST_F(Std, BoxCompositionRotateZandY)
+{
+    EXPECT_TRUE(
+        run("BoxCompositionRotateZandY", "MiniGISAS", "BoxCompositionRotateZandYBuilder", 2e-10));
+}
+
+TEST_F(Std, BoxStackComposition)
+{
+    EXPECT_TRUE(run("BoxStackComposition", "MiniGISAS", "BoxStackCompositionBuilder", 2e-10));
+}
+
+TEST_F(Std, CylindersWithSizeDistribution)
+{
+    EXPECT_TRUE(run("CylindersWithSizeDistribution", "MiniGISAS",
+                    "CylindersWithSizeDistributionBuilder", 2e-10));
+}
+
+TEST_F(Std, TwoTypesCylindersDistribution)
+{
+    EXPECT_TRUE(run("TwoTypesCylindersDistribution", "MiniGISAS",
+                    "TwoTypesCylindersDistributionBuilder", 2e-10));
+}
+
+TEST_F(Std, RotatedPyramidsDistribution)
+{
+    EXPECT_TRUE(run("RotatedPyramidsDistribution", "MiniGISAS",
+                    "RotatedPyramidsDistributionBuilder", 2e-10));
+}
+
+TEST_F(Std, SpheresWithLimitsDistribution)
+{
+    EXPECT_TRUE(run("SpheresWithLimitsDistribution", "MiniGISAS",
+                    "SpheresWithLimitsDistributionBuilder", 2e-10));
+}
+
+TEST_F(Std, ConesWithLimitsDistribution)
+{
+    EXPECT_TRUE(run("ConesWithLimitsDistribution", "MiniGISAS",
+                    "ConesWithLimitsDistributionBuilder", 2e-10));
+}
+
+TEST_F(Std, LinkedBoxDistribution)
+{
+    EXPECT_TRUE(run("LinkedBoxDistribution", "MiniGISAS", "LinkedBoxDistributionBuilder", 2e-10));
+}
+
+TEST_F(Std, BeamDivergence)
+{
+    EXPECT_TRUE(run("BeamDivergence", "MiniGISASBeamDivergence", "CylindersInBABuilder", 2e-10));
+}
+
+TEST_F(Std, DetectorResolution)
+{
+    EXPECT_TRUE(
+        run("DetectorResolution", "MiniGISASDetectorResolution", "CylindersInBABuilder", 2e-10));
+}
+
+TEST_F(Std, MultipleLayout)
+{
+    EXPECT_TRUE(run("MultipleLayout", "MiniGISAS", "MultipleLayoutBuilder", 2e-10));
+}
+
+TEST_F(Std, ApproximationDA)
+{
+    EXPECT_TRUE(run("ApproximationDA", "MiniGISAS", "SizeDistributionDAModelBuilder", 2e-10));
+}
+
+TEST_F(Std, ApproximationLMA)
+{
+    EXPECT_TRUE(run("ApproximationLMA", "MiniGISAS", "SizeDistributionLMAModelBuilder", 2e-10));
+}
+
+TEST_F(Std, ApproximationSSCA)
+{
+    EXPECT_TRUE(run("ApproximationSSCA", "MiniGISAS", "SizeDistributionSSCAModelBuilder", 2e-10));
+}
+
+TEST_F(Std, CylindersInSSCA)
+{
+    EXPECT_TRUE(run("CylindersInSSCA", "MiniGISAS", "CylindersInSSCABuilder", 2e-10));
+}
+
+TEST_F(Std, CosineRipple)
+{
+    EXPECT_TRUE(run("CosineRipple", "MiniGISAS", "CosineRippleBuilder", 2e-10));
+}
+
+TEST_F(Std, TriangularRipple)
+{
+    EXPECT_TRUE(run("TriangularRipple", "MiniGISAS", "TriangularRippleBuilder", 2e-10));
+}
+
+TEST_F(Std, AsymRipple)
+{
+    EXPECT_TRUE(run("AsymRipple", "MiniGISAS", "AsymRippleBuilder", 2e-10));
+}
+
+TEST_F(Std, MesoCrystal)
+{
+    EXPECT_TRUE(run("MesoCrystal", "MiniGISAS", "MesoCrystalBuilder", 2e-10));
+}
+
+TEST_F(Std, CustomMorphology)
+{
+    EXPECT_TRUE(run("CustomMorphology", "MiniGISAS", "CustomMorphologyBuilder", 2e-10));
+}
+
+TEST_F(Std, TransformBox)
+{
+    EXPECT_TRUE(run("TransformBox", "MiniGISAS", "TransformBoxBuilder", 1e-10));
+}
+
+TEST_F(Std, MagneticParticleZeroField)
+{
+    EXPECT_TRUE(
+        run("MagneticParticleZeroField", "MiniGISAS", "MagneticParticleZeroFieldBuilder", 2e-10));
+}
+
+TEST_F(Std, MagneticSubstrateZeroField)
+{
+    EXPECT_TRUE(run("MagneticSubstrateZeroField", "MiniGISASPolarizationPP",
+                    "MagneticSubstrateZeroFieldBuilder", 2e-10));
+}
+
+TEST_F(Std, MagneticRotation)
+{
+    EXPECT_TRUE(
+        run("MagneticRotation", "MiniGISASPolarizationPM", "MagneticRotationBuilder", 2e-10));
+}
+
+TEST_F(Std, MagneticSpheres)
+{
+    EXPECT_TRUE(run("MagneticSpheres", "MiniGISASPolarizationPM", "MagneticSpheresBuilder", 2e-10));
+}
+
+TEST_F(Std, MagneticCylindersPP)
+{
+    EXPECT_TRUE(
+        run("MagneticCylindersPP", "MiniGISASPolarizationPP", "MagneticCylindersBuilder", 2e-10));
+}
+
+TEST_F(Std, MagneticCylindersPM)
+{
+    EXPECT_TRUE(
+        run("MagneticCylindersPM", "MiniGISASPolarizationPM", "MagneticCylindersBuilder", 2e-10));
+}
+
+TEST_F(Std, MagneticCylindersMP)
+{
+    EXPECT_TRUE(
+        run("MagneticCylindersMP", "MiniGISASPolarizationMP", "MagneticCylindersBuilder", 2e-10));
+}
+
+TEST_F(Std, MagneticCylindersMM)
+{
+    EXPECT_TRUE(
+        run("MagneticCylindersMM", "MiniGISASPolarizationMM", "MagneticCylindersBuilder", 2e-10));
+}
+
+TEST_F(Std, MagneticSpheresInMagLayerPP)
+{
+    EXPECT_TRUE(run("MagneticSpheresInMagLayerPP", "MiniGISASPolarizationPP",
+                    "MagneticLayerBuilder", 2e-10));
+}
+
+TEST_F(Std, MagneticSpheresInMagLayerMP)
+{
+    EXPECT_TRUE(run("MagneticSpheresInMagLayerMP", "MiniGISASPolarizationMP",
+                    "MagneticLayerBuilder", 2e-10));
+}
+
+TEST_F(Std, SimulationWithMasks)
+{
+    EXPECT_TRUE(run("SimulationWithMasks", "GISASWithMasks", "CylindersAndPrismsBuilder", 1e-10));
+}
+
+TEST_F(Std, RectDetectorGeneric)
+{
+    EXPECT_TRUE(run("RectDetectorGeneric", "RectDetectorGeneric", "CylindersInBABuilder", 1e-10));
+}
+
+TEST_F(Std, RectDetectorPerpToSample)
+{
+    EXPECT_TRUE(
+        run("RectDetectorPerpToSample", "RectDetectorPerpToSample", "CylindersInBABuilder", 1e-10));
+}
+
+TEST_F(Std, RectDetectorPerpToDirectBeam)
+{
+    EXPECT_TRUE(run("RectDetectorPerpToDirectBeam", "RectDetectorPerpToDirectBeam",
+                    "CylindersInBABuilder", 1e-10));
+}
+
+TEST_F(Std, RectDetectorPerpToReflectedBeam)
+{
+    EXPECT_TRUE(run("RectDetectorPerpToReflectedBeam", "RectDetectorPerpToReflectedBeam",
+                    "CylindersInBABuilder", 1e-10));
+}
+
+TEST_F(Std, RectDetectorPerpToReflectedBeamDpos)
+{
+    EXPECT_TRUE(run("RectDetectorPerpToReflectedBeamDpos", "RectDetectorPerpToReflectedBeamDpos",
+                    "CylindersInBABuilder", 1e-10));
+}
+
+TEST_F(Std, LargeCylindersMonteCarlo)
+{
+    EXPECT_TRUE(run("LargeCylindersMonteCarlo", "MiniGISASMonteCarlo",
+                    "LargeCylindersInDWBABuilder", 5e-1));
+}
+
+TEST_F(Std, SphericalDetWithRoi)
+{
+    EXPECT_TRUE(
+        run("SphericalDetWithRoi", "SphericalDetWithRoi", "CylindersAndPrismsBuilder", 1e-10));
+}
+
+TEST_F(Std, RectDetWithRoi)
+{
+    EXPECT_TRUE(run("RectDetWithRoi", "RectDetWithRoi", "CylindersAndPrismsBuilder", 1e-10));
+}
+
+TEST_F(Std, BoxesWithSpecular)
+{
+    EXPECT_TRUE(run("BoxesWithSpecular", "MiniGISASSpecular", "BoxesSquareLatticeBuilder", 1e-10));
+}
+
+TEST_F(Std, RotatedCylinder)
+{
+    EXPECT_TRUE(run("RotatedCylinder", "MiniGISAS", "RotatedCylindersBuilder", 1e-10));
+}
+
+TEST_F(Std, SlicedComposition)
+{
+    EXPECT_TRUE(run("SlicedComposition", "MiniGISAS", "SlicedCompositionBuilder", 1e-10));
+}
+
+TEST_F(Std, ConstantBackground)
+{
+    EXPECT_TRUE(run("ConstantBackground", "ConstantBackground", "CylindersInBABuilder", 1e-10));
+}
+
+TEST_F(Std, HomogeneousTiNiSample)
+{
+    EXPECT_TRUE(
+        run("HomogeneousTiNiSample", "BasicSpecular", "HomogeneousMultilayerBuilder", 1e-10));
+}
+
+TEST_F(Std, HomogeneousTiNiSampleWithAbsorption)
+{
+    EXPECT_TRUE(run("HomogeneousTiNiSampleWithAbsorption", "BasicSpecular",
+                    "PlainMultiLayerBySLDBuilder", 1e-10));
+}
+
+TEST_F(Std, RoughnessInSpecular)
+{
+    EXPECT_TRUE(
+        run("RoughnessInSpecular", "BasicSpecular", "MultiLayerWithRoughnessBuilder", 2e-9));
+}
+
+TEST_F(Std, GaussianBeamFootprint)
+{
+    EXPECT_TRUE(run("GaussianBeamFootprint", "SpecularWithGaussianBeam",
+                    "HomogeneousMultilayerBuilder", 1e-10));
+}
+
+TEST_F(Std, SquareBeamFootprint)
+{
+    EXPECT_TRUE(run("SquareBeamFootprint", "SpecularWithSquareBeam", "HomogeneousMultilayerBuilder",
+                    1e-10));
+}
+
+TEST_F(Std, SpecularDivergentBeam)
+{
+    EXPECT_TRUE(run("SpecularDivergentBeam", "SpecularDivergentBeam",
+                    "HomogeneousMultilayerBuilder", 1e-10));
+}
+
+
+// ************************************************************************** //
+// TODO: broken under GUI
+// ************************************************************************** //
+
+#ifndef GUI_STD_TEST
+
+TEST_F(Std, RelativeResolutionTOF)
+{
+    EXPECT_TRUE(run("RelativeResolutionTOF", "TOFRWithRelativeResolution",
+                    "PlainMultiLayerBySLDBuilder", 1e-10));
+}
+
+#endif // GUI_STD_TEST
+
+
+// ************************************************************************** //
+// TODO: broken under Python
+// ************************************************************************** //
+
+#ifndef PYTHON_STD_TEST
+
+TEST_F(Std, OffSpecularResonator)
+{
+    EXPECT_TRUE(run("OffSpecularResonator", "OffSpecMini", "ResonatorBuilder", 1e-10));
+}
+
+TEST_F(Std, FormFactorsWithAbsorption)
+{
+    EXPECT_TRUE(
+        run("FormFactorsWithAbsorption", "MiniGISAS_v2", "LayersWithAbsorptionBuilder", 2e-10));
+}
+#endif // PYTHON_STD_TEST
+
+
+// ************************************************************************** //
+// TODO: broken under GUI and Python
+// ************************************************************************** //
+
+#ifndef PYTHON_STD_TEST
+#ifndef GUI_STD_TEST
+
+TEST_F(Std, NCRoughnessInSpecular)
+{
+    EXPECT_TRUE(
+        run("NCRoughnessInSpecular", "BasicSpecular", "MultiLayerWithNCRoughnessBuilder", 2e-9));
+}
+
+TEST_F(Std, SuperLattice)
+{
+    EXPECT_TRUE(run("SuperLattice", "MiniGISAS", "SuperLatticeBuilder", 2e-10));
+}
+
+TEST_F(Std, SpecularWithSlicing)
+{
+    EXPECT_TRUE(run("SpecularWithSlicing_01", "BasicSpecular", "SlicedCylindersBuilder", 1e-10));
+    EXPECT_TRUE(run("SpecularWithSlicing_02", "BasicSpecular", "SLDSlicedCylindersBuilder", 1e-10));
+    EXPECT_TRUE(
+        run("SpecularWithSlicing_03", "BasicSpecular", "AveragedSlicedCylindersBuilder", 1e-10));
+    EXPECT_TRUE(
+        run("SpecularWithSlicing_Q2", "BasicSpecularQ", "SLDSlicedCylindersBuilder", 1e-10));
+}
+
+TEST_F(Std, InstrumentDefinitionComparison)
+{
+    EXPECT_TRUE(run("InstrumentDefinitionComparison_0", "BasicSpecular",
+                    "PlainMultiLayerBySLDBuilder", 1e-10));
+    EXPECT_TRUE(run("InstrumentDefinitionComparison_Q", "BasicSpecularQ",
+                    "PlainMultiLayerBySLDBuilder", 1e-10));
+}
+
+TEST_F(Std, TOFResolutionComparison)
+{
+    EXPECT_TRUE(run("TOFResolutionComparison_TR", "TOFRWithRelativeResolution",
+                    "PlainMultiLayerBySLDBuilder", 1e-10));
+    EXPECT_TRUE(run("TOFResolutionComparison_TP", "TOFRWithPointwiseResolution",
+                    "PlainMultiLayerBySLDBuilder", 1e-10));
+}
+
+TEST_F(Std, BasicSpecularPP)
+{
+    EXPECT_TRUE(run("BasicSpecularPP", "BasicSpecularPP", "SimpleMagneticLayerBuilder", 1e-10));
+}
+
+TEST_F(Std, BasicSpecularMM)
+{
+    EXPECT_TRUE(run("BasicSpecularMM", "BasicSpecularMM", "SimpleMagneticLayerBuilder", 1e-10));
+}
+
+TEST_F(Std, PolarizedQAngleReflectivityPP)
+{
+    EXPECT_TRUE(run("PolarizedQAngleReflectivityPP_0", "BasicSpecularPP",
+                    "SimpleMagneticLayerBuilder", 1e-10));
+    EXPECT_TRUE(run("PolarizedQAngleReflectivityPP_Q", "BasicQSpecularPP",
+                    "SimpleMagneticLayerBuilder", 1e-10));
+}
+
+TEST_F(Std, PolarizedQAngleReflectivityMM)
+{
+    EXPECT_TRUE(run("PolarizedQAngleReflectivityMM_0", "BasicSpecularMM",
+                    "SimpleMagneticLayerBuilder", 1e-10));
+    EXPECT_TRUE(run("PolarizedQAngleReflectivityMM_Q", "BasicQSpecularMM",
+                    "SimpleMagneticLayerBuilder", 1e-10));
+}
+
+TEST_F(Std, DepthProbeTest)
+{
+    EXPECT_TRUE(run("DepthProbeTest", "BasicDepthProbe", "HomogeneousMultilayerBuilder", 1e-10));
+}
+
+#endif // GUI_STD_TEST
+#endif // PYTHON_STD_TEST
diff --git a/Tests/ReferenceData/Core/ApproximationLMA.int.gz b/Tests/ReferenceData/Core/ApproximationLMA.int.gz
deleted file mode 100644
index 10f9a5c4343c0e2619ef9fd540c9e8c8b7a361bc..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/ApproximationLMA.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/Basic2DParaCrystal_FTDistribution2DCauchy.int.gz b/Tests/ReferenceData/Core/Basic2DParaCrystal_FTDistribution2DCauchy.int.gz
deleted file mode 100644
index f916fcf083031626110e3d7652a37786c521f052..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/Basic2DParaCrystal_FTDistribution2DCauchy.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/Basic2DParaCrystal_FTDistribution2DCone.int.gz b/Tests/ReferenceData/Core/Basic2DParaCrystal_FTDistribution2DCone.int.gz
deleted file mode 100644
index 0ed92131f7f9e03f59bb5f07eedad09253a412d2..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/Basic2DParaCrystal_FTDistribution2DCone.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/Basic2DParaCrystal_FTDistribution2DGate.int.gz b/Tests/ReferenceData/Core/Basic2DParaCrystal_FTDistribution2DGate.int.gz
deleted file mode 100644
index 387d100b7364dec8f7ba2c79caefe16133e109fc..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/Basic2DParaCrystal_FTDistribution2DGate.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/Basic2DParaCrystal_FTDistribution2DGauss.int.gz b/Tests/ReferenceData/Core/Basic2DParaCrystal_FTDistribution2DGauss.int.gz
deleted file mode 100644
index 5ef3e83704c9f697774879b47a36512e86984af2..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/Basic2DParaCrystal_FTDistribution2DGauss.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/Basic2DParaCrystal_FTDistribution2DVoigt.int.gz b/Tests/ReferenceData/Core/Basic2DParaCrystal_FTDistribution2DVoigt.int.gz
deleted file mode 100644
index ef8493acc8bd72263b8a7754f4b22d54bee7e29e..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/Basic2DParaCrystal_FTDistribution2DVoigt.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/BoxCompositionRotateX.int.gz b/Tests/ReferenceData/Core/BoxCompositionRotateX.int.gz
deleted file mode 100644
index 6a530c96e1d0c118e31dde5d5ff09c49dedd855c..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/BoxCompositionRotateX.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/BoxCompositionRotateZ.int.gz b/Tests/ReferenceData/Core/BoxCompositionRotateZ.int.gz
deleted file mode 100644
index ee2457583e80673af314957bfe0721032439b943..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/BoxCompositionRotateZ.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/BoxStackComposition.int.gz b/Tests/ReferenceData/Core/BoxStackComposition.int.gz
deleted file mode 100644
index 56e49771c23d53efe0d3d93f49fbadcdfd61ac00..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/BoxStackComposition.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/BoxesWithSpecular.int.gz b/Tests/ReferenceData/Core/BoxesWithSpecular.int.gz
deleted file mode 100644
index 441439a35b398e97507e27ff9f16a975e8fbe47e..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/BoxesWithSpecular.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/CenteredSquareLattice.int.gz b/Tests/ReferenceData/Core/CenteredSquareLattice.int.gz
deleted file mode 100644
index b96cfba38ffdd66dd3560d68f3700783fcd1136a..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/CenteredSquareLattice.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/ConesWithLimitsDistribution.int.gz b/Tests/ReferenceData/Core/ConesWithLimitsDistribution.int.gz
deleted file mode 100644
index 614e5b69682e053668ceda4909a351cfa4c0c391..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/ConesWithLimitsDistribution.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/CoreShellBoxRotateZandY.int.gz b/Tests/ReferenceData/Core/CoreShellBoxRotateZandY.int.gz
deleted file mode 100644
index b932aea272a8a8eeca39e9626bcb3b3d3c9836b8..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/CoreShellBoxRotateZandY.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/CylindersAndPrisms.int.gz b/Tests/ReferenceData/Core/CylindersAndPrisms.int.gz
deleted file mode 100644
index 51b81c18a5e18cb8271904fd1c0b85f0739222c4..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/CylindersAndPrisms.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/CylindersWithSizeDistribution.int.gz b/Tests/ReferenceData/Core/CylindersWithSizeDistribution.int.gz
deleted file mode 100644
index c2de7f2169847192ee6d0d86f43fce96b162458c..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/CylindersWithSizeDistribution.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/DetectorResolution.int.gz b/Tests/ReferenceData/Core/DetectorResolution.int.gz
deleted file mode 100644
index 36a91a9fccd00fe613074b48aab4f5ea153308ca..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/DetectorResolution.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_AnisoPyramid.int.gz b/Tests/ReferenceData/Core/FormFactorsWithAbsorption_AnisoPyramid.int.gz
deleted file mode 100644
index 5b55e2a3a5e88b7f59436b8de4ab4bc04a55e2ab..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_AnisoPyramid.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_Cone.int.gz b/Tests/ReferenceData/Core/FormFactorsWithAbsorption_Cone.int.gz
deleted file mode 100644
index 842a67e6bd8bb037b69cc5664a192e494d2a59a1..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_Cone.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_Cylinder.int.gz b/Tests/ReferenceData/Core/FormFactorsWithAbsorption_Cylinder.int.gz
deleted file mode 100644
index 31bbf8091711538ef9f607f89a64a62bd9c73605..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_Cylinder.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_Dodecahedron.int.gz b/Tests/ReferenceData/Core/FormFactorsWithAbsorption_Dodecahedron.int.gz
deleted file mode 100644
index 08bea1031461f285bd2c4f0331506809c1bd83ef..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_Dodecahedron.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_EllipsoidalCylinder.int.gz b/Tests/ReferenceData/Core/FormFactorsWithAbsorption_EllipsoidalCylinder.int.gz
deleted file mode 100644
index f73ded00a1eaed86001fb7dafa1bfc18ae88808d..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_EllipsoidalCylinder.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_FullSphere.int.gz b/Tests/ReferenceData/Core/FormFactorsWithAbsorption_FullSphere.int.gz
deleted file mode 100644
index bb1d3d28511b4ab9092129a21950222b20b99536..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_FullSphere.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_FullSpheroid.int.gz b/Tests/ReferenceData/Core/FormFactorsWithAbsorption_FullSpheroid.int.gz
deleted file mode 100644
index 7bcd6b4d302bd66d50ddcc5d1d75ab4f23abd0da..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_FullSpheroid.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_Prism3.int.gz b/Tests/ReferenceData/Core/FormFactorsWithAbsorption_Prism3.int.gz
deleted file mode 100644
index 6360fbe3a65fdccb5e4e8a173e9eda6578013d24..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_Prism3.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_Ripple1Box.int.gz b/Tests/ReferenceData/Core/FormFactorsWithAbsorption_Ripple1Box.int.gz
deleted file mode 100644
index eae5818c07038c8b11000dc1cb23c34b4e178bc3..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_Ripple1Box.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_Ripple2Box.int.gz b/Tests/ReferenceData/Core/FormFactorsWithAbsorption_Ripple2Box.int.gz
deleted file mode 100644
index 5b238e600793a0ff670c6d31fb057e18b83c678d..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_Ripple2Box.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_TruncatedCube.int.gz b/Tests/ReferenceData/Core/FormFactorsWithAbsorption_TruncatedCube.int.gz
deleted file mode 100644
index 8f5c7a66048c4ee2500cbcc97748e197a4cbb33f..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_TruncatedCube.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/FormFactors_CantellatedCube.int.gz b/Tests/ReferenceData/Core/FormFactors_CantellatedCube.int.gz
deleted file mode 100644
index ed8b01d05ba82bd3399e316e0a2b420832ca5a13..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/FormFactors_CantellatedCube.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/FormFactors_FullSpheroid.int.gz b/Tests/ReferenceData/Core/FormFactors_FullSpheroid.int.gz
deleted file mode 100644
index 28f6b3203176d7d4a2df3fddc3ba3998e0404887..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/FormFactors_FullSpheroid.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/FormFactors_Ripple1Box.int.gz b/Tests/ReferenceData/Core/FormFactors_Ripple1Box.int.gz
deleted file mode 100644
index c22b96fac2ed20c8e4ff34866e99a666491aa9f0..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/FormFactors_Ripple1Box.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/FormFactors_Ripple2Box.int.gz b/Tests/ReferenceData/Core/FormFactors_Ripple2Box.int.gz
deleted file mode 100644
index 9b87d2e46b4f7359dc6bb2f52f78facb6d33d3ba..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/FormFactors_Ripple2Box.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/GISASAbsorptiveSLDLayers.int.gz b/Tests/ReferenceData/Core/GISASAbsorptiveSLDLayers.int.gz
deleted file mode 100644
index 898148658bd8b9dc9c1eb39cacd36ec236514a94..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/GISASAbsorptiveSLDLayers.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/GaussianBeamFootprint.int.gz b/Tests/ReferenceData/Core/GaussianBeamFootprint.int.gz
deleted file mode 100644
index 70cc1d625fdff3e2354f866e4d0a372b03094656..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/GaussianBeamFootprint.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/HardDisk.int.gz b/Tests/ReferenceData/Core/HardDisk.int.gz
deleted file mode 100644
index cc57e2b837f0ea990a9d62c38da9be4d2eec3506..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/HardDisk.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/HexParaCrystal.int.gz b/Tests/ReferenceData/Core/HexParaCrystal.int.gz
deleted file mode 100644
index be5372c713e71041248e8ace2f599856cd4945b2..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/HexParaCrystal.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/HomogeneousTiNiSample.int.gz b/Tests/ReferenceData/Core/HomogeneousTiNiSample.int.gz
deleted file mode 100644
index feaf3f618e84a5603bd049e52e6d39e83c7077a6..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/HomogeneousTiNiSample.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/HomogeneousTiNiSampleWithAbsorption.int.gz b/Tests/ReferenceData/Core/HomogeneousTiNiSampleWithAbsorption.int.gz
deleted file mode 100644
index 504627f7b693b9c870c2bc0504b2ecf5d1359c32..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/HomogeneousTiNiSampleWithAbsorption.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/LargeCylindersMonteCarlo.int.gz b/Tests/ReferenceData/Core/LargeCylindersMonteCarlo.int.gz
deleted file mode 100644
index fe1367e564068b4af120e0c780e1e1874bc2942e..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/LargeCylindersMonteCarlo.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/LinkedBoxDistribution.int.gz b/Tests/ReferenceData/Core/LinkedBoxDistribution.int.gz
deleted file mode 100644
index 72f3ae36e335feff2f23f9f24576767e03c256fe..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/LinkedBoxDistribution.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/MagneticParticleZeroField.int.gz b/Tests/ReferenceData/Core/MagneticParticleZeroField.int.gz
deleted file mode 100644
index 3bb6f2e3e5cc87405f1b2ff6751f529b84d1aced..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/MagneticParticleZeroField.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/MagneticSpheresInMagLayerPP.int.gz b/Tests/ReferenceData/Core/MagneticSpheresInMagLayerPP.int.gz
deleted file mode 100644
index e071ebaa7f632f51f5ef65c88bfef584e9a661c8..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/MagneticSpheresInMagLayerPP.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/MagneticSubstrateZeroField.int.gz b/Tests/ReferenceData/Core/MagneticSubstrateZeroField.int.gz
deleted file mode 100644
index 46343e74aac61362f7743a6863b4ee0f5f8f774c..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/MagneticSubstrateZeroField.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/MesoCrystal.int.gz b/Tests/ReferenceData/Core/MesoCrystal.int.gz
deleted file mode 100644
index 90e16efdcfe1ec2bc78dd0ccd222ee6b2d90392c..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/MesoCrystal.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/MultiLayerWithRoughness.int.gz b/Tests/ReferenceData/Core/MultiLayerWithRoughness.int.gz
deleted file mode 100644
index 7e5d299ad9c93e38fec08cfcbfc761b0a13276e2..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/MultiLayerWithRoughness.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/MultipleLayout.int.gz b/Tests/ReferenceData/Core/MultipleLayout.int.gz
deleted file mode 100644
index b0d4dce3fa06b2dcef9143256a5a0b1f78310ee1..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/MultipleLayout.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/NCRoughnessInSpecular.int.gz b/Tests/ReferenceData/Core/NCRoughnessInSpecular.int.gz
deleted file mode 100644
index 91c7e14ebcee8f3b95b75f0a339ffa697fcf4d0b..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/NCRoughnessInSpecular.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/OffSpecularResonator.int.gz b/Tests/ReferenceData/Core/OffSpecularResonator.int.gz
deleted file mode 100644
index 5c34fd0725fb1d6036e0ab72d873fda7142782d9..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/OffSpecularResonator.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/RadialParaCrystal.int.gz b/Tests/ReferenceData/Core/RadialParaCrystal.int.gz
deleted file mode 100644
index c0a74aace072302e2c8fcc7f9a255ecb1a018613..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/RadialParaCrystal.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/RectParaCrystal.int.gz b/Tests/ReferenceData/Core/RectParaCrystal.int.gz
deleted file mode 100644
index 1e67f6e04a58e660ad0465c49dc6dea51e59791d..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/RectParaCrystal.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/RotatedPyramids.int.gz b/Tests/ReferenceData/Core/RotatedPyramids.int.gz
deleted file mode 100644
index e6cb0c51f9a23358092f84bba59ca54aadfc85b8..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/RotatedPyramids.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/RoughnessInSpecular.int.gz b/Tests/ReferenceData/Core/RoughnessInSpecular.int.gz
deleted file mode 100644
index a39c0eca79bc7b0ac8d1f4cf1c31e8738a446cac..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/RoughnessInSpecular.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/SpecularDivergentBeam.int.gz b/Tests/ReferenceData/Core/SpecularDivergentBeam.int.gz
deleted file mode 100644
index 62b6e85e8faeb33371dc5a7a40be68c08a462fbe..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/SpecularDivergentBeam.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/SquareBeamFootprint.int.gz b/Tests/ReferenceData/Core/SquareBeamFootprint.int.gz
deleted file mode 100644
index 4243fabb087e971de7d5ab951a60a4e8a876a2d6..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/SquareBeamFootprint.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/ThickAbsorptiveSampleWithRoughness.int.gz b/Tests/ReferenceData/Core/ThickAbsorptiveSampleWithRoughness.int.gz
deleted file mode 100644
index f39b930793b7677dc38674018e510b6dca38fd7e..0000000000000000000000000000000000000000
Binary files a/Tests/ReferenceData/Core/ThickAbsorptiveSampleWithRoughness.int.gz and /dev/null differ
diff --git a/Tests/ReferenceData/Core/polmagcylinders2_reference_00.int.gz b/Tests/ReferenceData/Python/polmagcylinders2_reference_00.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/polmagcylinders2_reference_00.int.gz
rename to Tests/ReferenceData/Python/polmagcylinders2_reference_00.int.gz
diff --git a/Tests/ReferenceData/Core/polmagcylinders2_reference_01.int.gz b/Tests/ReferenceData/Python/polmagcylinders2_reference_01.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/polmagcylinders2_reference_01.int.gz
rename to Tests/ReferenceData/Python/polmagcylinders2_reference_01.int.gz
diff --git a/Tests/ReferenceData/Core/polmagcylinders2_reference_10.int.gz b/Tests/ReferenceData/Python/polmagcylinders2_reference_10.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/polmagcylinders2_reference_10.int.gz
rename to Tests/ReferenceData/Python/polmagcylinders2_reference_10.int.gz
diff --git a/Tests/ReferenceData/Core/polmagcylinders2_reference_11.int.gz b/Tests/ReferenceData/Python/polmagcylinders2_reference_11.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/polmagcylinders2_reference_11.int.gz
rename to Tests/ReferenceData/Python/polmagcylinders2_reference_11.int.gz
diff --git a/Tests/ReferenceData/Core/ApproximationDA.int.gz b/Tests/ReferenceData/Std/ApproximationDA.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/ApproximationDA.int.gz
rename to Tests/ReferenceData/Std/ApproximationDA.int.gz
diff --git a/Tests/ReferenceData/Std/ApproximationLMA.int.gz b/Tests/ReferenceData/Std/ApproximationLMA.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..8ee950db90b13acba03a9c2a09c66516f1f884ec
Binary files /dev/null and b/Tests/ReferenceData/Std/ApproximationLMA.int.gz differ
diff --git a/Tests/ReferenceData/Core/ApproximationSSCA.int.gz b/Tests/ReferenceData/Std/ApproximationSSCA.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/ApproximationSSCA.int.gz
rename to Tests/ReferenceData/Std/ApproximationSSCA.int.gz
diff --git a/Tests/ReferenceData/Core/AsymRipple.int.gz b/Tests/ReferenceData/Std/AsymRipple.int.gz
similarity index 90%
rename from Tests/ReferenceData/Core/AsymRipple.int.gz
rename to Tests/ReferenceData/Std/AsymRipple.int.gz
index df8060c38a08478d5038215e1446c61a458660b6..98bc78b48ba1c3055ea98427ad195a684f7db3d2 100644
Binary files a/Tests/ReferenceData/Core/AsymRipple.int.gz and b/Tests/ReferenceData/Std/AsymRipple.int.gz differ
diff --git a/Tests/ReferenceData/Std/Basic2DParaCrystal.int.gz b/Tests/ReferenceData/Std/Basic2DParaCrystal.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..61f5930c392831a23f90d3e9d7f8b4e6632d63b1
Binary files /dev/null and b/Tests/ReferenceData/Std/Basic2DParaCrystal.int.gz differ
diff --git a/Tests/ReferenceData/Std/Basic2DParaCrystal_FTDistribution2DCauchy.int.gz b/Tests/ReferenceData/Std/Basic2DParaCrystal_FTDistribution2DCauchy.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..e33c591489433fb52a40532203a8b13e04703851
Binary files /dev/null and b/Tests/ReferenceData/Std/Basic2DParaCrystal_FTDistribution2DCauchy.int.gz differ
diff --git a/Tests/ReferenceData/Std/Basic2DParaCrystal_FTDistribution2DCone.int.gz b/Tests/ReferenceData/Std/Basic2DParaCrystal_FTDistribution2DCone.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..c4f335695fc96bad987bdd1cd548ce4b319d07e0
Binary files /dev/null and b/Tests/ReferenceData/Std/Basic2DParaCrystal_FTDistribution2DCone.int.gz differ
diff --git a/Tests/ReferenceData/Std/Basic2DParaCrystal_FTDistribution2DGate.int.gz b/Tests/ReferenceData/Std/Basic2DParaCrystal_FTDistribution2DGate.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..35d95dabdbf292ea3bca474284c1c834d3b4a72c
Binary files /dev/null and b/Tests/ReferenceData/Std/Basic2DParaCrystal_FTDistribution2DGate.int.gz differ
diff --git a/Tests/ReferenceData/Std/Basic2DParaCrystal_FTDistribution2DGauss.int.gz b/Tests/ReferenceData/Std/Basic2DParaCrystal_FTDistribution2DGauss.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..f00f92bd21477db2a0219391cb2fba1a3263fad0
Binary files /dev/null and b/Tests/ReferenceData/Std/Basic2DParaCrystal_FTDistribution2DGauss.int.gz differ
diff --git a/Tests/ReferenceData/Std/Basic2DParaCrystal_FTDistribution2DVoigt.int.gz b/Tests/ReferenceData/Std/Basic2DParaCrystal_FTDistribution2DVoigt.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..61f5930c392831a23f90d3e9d7f8b4e6632d63b1
Binary files /dev/null and b/Tests/ReferenceData/Std/Basic2DParaCrystal_FTDistribution2DVoigt.int.gz differ
diff --git a/Tests/ReferenceData/Core/BasicSpecularMM.int.gz b/Tests/ReferenceData/Std/BasicSpecularMM.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/BasicSpecularMM.int.gz
rename to Tests/ReferenceData/Std/BasicSpecularMM.int.gz
diff --git a/Tests/ReferenceData/Core/BasicSpecularPP.int.gz b/Tests/ReferenceData/Std/BasicSpecularPP.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/BasicSpecularPP.int.gz
rename to Tests/ReferenceData/Std/BasicSpecularPP.int.gz
diff --git a/Tests/ReferenceData/Core/BeamDivergence.int.gz b/Tests/ReferenceData/Std/BeamDivergence.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/BeamDivergence.int.gz
rename to Tests/ReferenceData/Std/BeamDivergence.int.gz
diff --git a/Tests/ReferenceData/Std/BoxCompositionRotateX.int.gz b/Tests/ReferenceData/Std/BoxCompositionRotateX.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..bd3efa83fd825a0ed0dc3f86c59058755a5fae05
Binary files /dev/null and b/Tests/ReferenceData/Std/BoxCompositionRotateX.int.gz differ
diff --git a/Tests/ReferenceData/Core/BoxCompositionRotateY.int.gz b/Tests/ReferenceData/Std/BoxCompositionRotateY.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/BoxCompositionRotateY.int.gz
rename to Tests/ReferenceData/Std/BoxCompositionRotateY.int.gz
diff --git a/Tests/ReferenceData/Std/BoxCompositionRotateZ.int.gz b/Tests/ReferenceData/Std/BoxCompositionRotateZ.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..d6d1d04012922d7f3a3d999af3277856c6e18a1e
Binary files /dev/null and b/Tests/ReferenceData/Std/BoxCompositionRotateZ.int.gz differ
diff --git a/Tests/ReferenceData/Core/BoxCompositionRotateZandY.int.gz b/Tests/ReferenceData/Std/BoxCompositionRotateZandY.int.gz
similarity index 94%
rename from Tests/ReferenceData/Core/BoxCompositionRotateZandY.int.gz
rename to Tests/ReferenceData/Std/BoxCompositionRotateZandY.int.gz
index a47587e3611e0ace6eeac77263e46e068385aa52..427de8eedec0eedc7e9c7227a0d23c2fd5b27ea6 100644
Binary files a/Tests/ReferenceData/Core/BoxCompositionRotateZandY.int.gz and b/Tests/ReferenceData/Std/BoxCompositionRotateZandY.int.gz differ
diff --git a/Tests/ReferenceData/Std/BoxStackComposition.int.gz b/Tests/ReferenceData/Std/BoxStackComposition.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..649e418cfa84c17803754914ab722b7f8f93cb25
Binary files /dev/null and b/Tests/ReferenceData/Std/BoxStackComposition.int.gz differ
diff --git a/Tests/ReferenceData/Std/BoxesWithSpecular.int.gz b/Tests/ReferenceData/Std/BoxesWithSpecular.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..6ed28a9cce33dec9fcc4209abe9a9419119b7746
Binary files /dev/null and b/Tests/ReferenceData/Std/BoxesWithSpecular.int.gz differ
diff --git a/Tests/ReferenceData/Std/CenteredSquareLattice.int.gz b/Tests/ReferenceData/Std/CenteredSquareLattice.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..bca8cc5263aefdf9226a781d93bc9e8cc68a5163
Binary files /dev/null and b/Tests/ReferenceData/Std/CenteredSquareLattice.int.gz differ
diff --git a/Tests/ReferenceData/Std/ConesWithLimitsDistribution.int.gz b/Tests/ReferenceData/Std/ConesWithLimitsDistribution.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..48de86462aa3d2b5edc56102f7e3db4c3762663b
Binary files /dev/null and b/Tests/ReferenceData/Std/ConesWithLimitsDistribution.int.gz differ
diff --git a/Tests/ReferenceData/Core/ConstantBackground.int.gz b/Tests/ReferenceData/Std/ConstantBackground.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/ConstantBackground.int.gz
rename to Tests/ReferenceData/Std/ConstantBackground.int.gz
diff --git a/Tests/ReferenceData/Std/CoreShellBoxRotateZandY.int.gz b/Tests/ReferenceData/Std/CoreShellBoxRotateZandY.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..2f947dd21add0e8897664997d2c35ff54f4f75dd
Binary files /dev/null and b/Tests/ReferenceData/Std/CoreShellBoxRotateZandY.int.gz differ
diff --git a/Tests/ReferenceData/Core/CoreShellParticle.int.gz b/Tests/ReferenceData/Std/CoreShellParticle.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/CoreShellParticle.int.gz
rename to Tests/ReferenceData/Std/CoreShellParticle.int.gz
diff --git a/Tests/ReferenceData/Core/CosineRipple.int.gz b/Tests/ReferenceData/Std/CosineRipple.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/CosineRipple.int.gz
rename to Tests/ReferenceData/Std/CosineRipple.int.gz
diff --git a/Tests/ReferenceData/Core/CustomMorphology.int.gz b/Tests/ReferenceData/Std/CustomMorphology.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/CustomMorphology.int.gz
rename to Tests/ReferenceData/Std/CustomMorphology.int.gz
diff --git a/Tests/ReferenceData/Std/CylindersAndPrisms.int.gz b/Tests/ReferenceData/Std/CylindersAndPrisms.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..a264e1cb39f22cc71bc7737ec7d6105ab03031c2
Binary files /dev/null and b/Tests/ReferenceData/Std/CylindersAndPrisms.int.gz differ
diff --git a/Tests/ReferenceData/Core/CylindersInSSCA.int.gz b/Tests/ReferenceData/Std/CylindersInSSCA.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/CylindersInSSCA.int.gz
rename to Tests/ReferenceData/Std/CylindersInSSCA.int.gz
diff --git a/Tests/ReferenceData/Std/CylindersWithSizeDistribution.int.gz b/Tests/ReferenceData/Std/CylindersWithSizeDistribution.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..37b1a6008f49b46387af352568188347472f88ad
Binary files /dev/null and b/Tests/ReferenceData/Std/CylindersWithSizeDistribution.int.gz differ
diff --git a/Tests/ReferenceData/Core/DepthProbeTest.int.gz b/Tests/ReferenceData/Std/DepthProbeTest.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/DepthProbeTest.int.gz
rename to Tests/ReferenceData/Std/DepthProbeTest.int.gz
diff --git a/Tests/ReferenceData/Std/DetectorResolution.int.gz b/Tests/ReferenceData/Std/DetectorResolution.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..0c44ddd3259afd2a7564ef1736a563279b10e383
Binary files /dev/null and b/Tests/ReferenceData/Std/DetectorResolution.int.gz differ
diff --git a/Tests/ReferenceData/Core/FiniteSquareLattice.int.gz b/Tests/ReferenceData/Std/FiniteSquareLattice.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/FiniteSquareLattice.int.gz
rename to Tests/ReferenceData/Std/FiniteSquareLattice.int.gz
diff --git a/Tests/ReferenceData/Core/FormFactors_TruncatedSphere.int.gz b/Tests/ReferenceData/Std/FormFactors.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/FormFactors_TruncatedSphere.int.gz
rename to Tests/ReferenceData/Std/FormFactors.int.gz
diff --git a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_TruncatedSpheroid.int.gz b/Tests/ReferenceData/Std/FormFactorsWithAbsorption.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/FormFactorsWithAbsorption_TruncatedSpheroid.int.gz
rename to Tests/ReferenceData/Std/FormFactorsWithAbsorption.int.gz
diff --git a/Tests/ReferenceData/Std/FormFactorsWithAbsorption_AnisoPyramid.int.gz b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_AnisoPyramid.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..514da72e39ba9d6022459380610e47d4bc6431de
Binary files /dev/null and b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_AnisoPyramid.int.gz differ
diff --git a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_Box.int.gz b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_Box.int.gz
similarity index 94%
rename from Tests/ReferenceData/Core/FormFactorsWithAbsorption_Box.int.gz
rename to Tests/ReferenceData/Std/FormFactorsWithAbsorption_Box.int.gz
index 8c7c9e02d127c04f277521343fc661f48a9e6a4b..b6420ad8275a2faf63c929bfea05c806eb427881 100644
Binary files a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_Box.int.gz and b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_Box.int.gz differ
diff --git a/Tests/ReferenceData/Std/FormFactorsWithAbsorption_Cone.int.gz b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_Cone.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..fed302a741eea4135b780adfd04d7dfadd04f93c
Binary files /dev/null and b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_Cone.int.gz differ
diff --git a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_Cone6.int.gz b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_Cone6.int.gz
similarity index 81%
rename from Tests/ReferenceData/Core/FormFactorsWithAbsorption_Cone6.int.gz
rename to Tests/ReferenceData/Std/FormFactorsWithAbsorption_Cone6.int.gz
index 5b810de3cca3566ca72c04673a150a6e29ab2ce6..b259e23a9dc8c4c0974526620752358c80471f9c 100644
Binary files a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_Cone6.int.gz and b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_Cone6.int.gz differ
diff --git a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_Cuboctahedron.int.gz b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_Cuboctahedron.int.gz
similarity index 61%
rename from Tests/ReferenceData/Core/FormFactorsWithAbsorption_Cuboctahedron.int.gz
rename to Tests/ReferenceData/Std/FormFactorsWithAbsorption_Cuboctahedron.int.gz
index e8a93a7e23ba49e5d11ae649df67c691578d4e7a..09b51689d994089e39a7423b809d8a9b7551589c 100644
Binary files a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_Cuboctahedron.int.gz and b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_Cuboctahedron.int.gz differ
diff --git a/Tests/ReferenceData/Std/FormFactorsWithAbsorption_Cylinder.int.gz b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_Cylinder.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..806225bfe29e14e4eac9a3a0c16f308a88faa38b
Binary files /dev/null and b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_Cylinder.int.gz differ
diff --git a/Tests/ReferenceData/Std/FormFactorsWithAbsorption_Dodecahedron.int.gz b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_Dodecahedron.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..e5c64d439eb9b7fdde5eb4748ddee3203cb03ec7
Binary files /dev/null and b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_Dodecahedron.int.gz differ
diff --git a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_Dot.int.gz b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_Dot.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/FormFactorsWithAbsorption_Dot.int.gz
rename to Tests/ReferenceData/Std/FormFactorsWithAbsorption_Dot.int.gz
diff --git a/Tests/ReferenceData/Std/FormFactorsWithAbsorption_EllipsoidalCylinder.int.gz b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_EllipsoidalCylinder.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..d1374d67bed01972429ad3a34103432b0fd080e1
Binary files /dev/null and b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_EllipsoidalCylinder.int.gz differ
diff --git a/Tests/ReferenceData/Std/FormFactorsWithAbsorption_FullSphere.int.gz b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_FullSphere.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..ea159d0a00e7df9a53feac5c525f251e34f67122
Binary files /dev/null and b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_FullSphere.int.gz differ
diff --git a/Tests/ReferenceData/Std/FormFactorsWithAbsorption_FullSpheroid.int.gz b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_FullSpheroid.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..6aa4d66abd3b0bf89519468623f4e00be0a9aee3
Binary files /dev/null and b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_FullSpheroid.int.gz differ
diff --git a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_HemiEllipsoid.int.gz b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_HemiEllipsoid.int.gz
similarity index 52%
rename from Tests/ReferenceData/Core/FormFactorsWithAbsorption_HemiEllipsoid.int.gz
rename to Tests/ReferenceData/Std/FormFactorsWithAbsorption_HemiEllipsoid.int.gz
index 5b27d8cb696fe4568db83af3c0215ba9a59ddfde..6fb5abd5397b9fadbf41b464f50b1a1b12efe5fa 100644
Binary files a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_HemiEllipsoid.int.gz and b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_HemiEllipsoid.int.gz differ
diff --git a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_Icosahedron.int.gz b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_Icosahedron.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/FormFactorsWithAbsorption_Icosahedron.int.gz
rename to Tests/ReferenceData/Std/FormFactorsWithAbsorption_Icosahedron.int.gz
diff --git a/Tests/ReferenceData/Std/FormFactorsWithAbsorption_Prism3.int.gz b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_Prism3.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..7d1bf94b44ab0ee91bccdd09a9460aaf54985178
Binary files /dev/null and b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_Prism3.int.gz differ
diff --git a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_Prism6.int.gz b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_Prism6.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/FormFactorsWithAbsorption_Prism6.int.gz
rename to Tests/ReferenceData/Std/FormFactorsWithAbsorption_Prism6.int.gz
diff --git a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_Pyramid.int.gz b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_Pyramid.int.gz
similarity index 52%
rename from Tests/ReferenceData/Core/FormFactorsWithAbsorption_Pyramid.int.gz
rename to Tests/ReferenceData/Std/FormFactorsWithAbsorption_Pyramid.int.gz
index 85da2c3fc1739191690424045fa7de1751be2779..6f2d5c025860eb593b12610ff0f171eafdc69c79 100644
Binary files a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_Pyramid.int.gz and b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_Pyramid.int.gz differ
diff --git a/Tests/ReferenceData/Std/FormFactorsWithAbsorption_Ripple1Box.int.gz b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_Ripple1Box.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..f2a2fab19ea5c4d487188b02278f85a6a3905be0
Binary files /dev/null and b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_Ripple1Box.int.gz differ
diff --git a/Tests/ReferenceData/Std/FormFactorsWithAbsorption_Ripple2Box.int.gz b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_Ripple2Box.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..e0fed012b9faeac1153e0778975a9a90e15d0550
Binary files /dev/null and b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_Ripple2Box.int.gz differ
diff --git a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_Tetrahedron.int.gz b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_Tetrahedron.int.gz
similarity index 57%
rename from Tests/ReferenceData/Core/FormFactorsWithAbsorption_Tetrahedron.int.gz
rename to Tests/ReferenceData/Std/FormFactorsWithAbsorption_Tetrahedron.int.gz
index c964d863b2694017e1bd7b00d8902b74d3eeee0e..10ab87751255ee26a26dcfa333d0a87f5abd8411 100644
Binary files a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_Tetrahedron.int.gz and b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_Tetrahedron.int.gz differ
diff --git a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_CantellatedCube.int.gz b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_TruncatedCube.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/FormFactorsWithAbsorption_CantellatedCube.int.gz
rename to Tests/ReferenceData/Std/FormFactorsWithAbsorption_TruncatedCube.int.gz
diff --git a/Tests/ReferenceData/Core/FormFactorsWithAbsorption_TruncatedSphere.int.gz b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_TruncatedSphere.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/FormFactorsWithAbsorption_TruncatedSphere.int.gz
rename to Tests/ReferenceData/Std/FormFactorsWithAbsorption_TruncatedSphere.int.gz
diff --git a/Tests/ReferenceData/Std/FormFactorsWithAbsorption_TruncatedSpheroid.int.gz b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_TruncatedSpheroid.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..d57c270eeda299db779734c1c1fbf0c883d2b756
Binary files /dev/null and b/Tests/ReferenceData/Std/FormFactorsWithAbsorption_TruncatedSpheroid.int.gz differ
diff --git a/Tests/ReferenceData/Core/FormFactors_AnisoPyramid.int.gz b/Tests/ReferenceData/Std/FormFactors_AnisoPyramid.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/FormFactors_AnisoPyramid.int.gz
rename to Tests/ReferenceData/Std/FormFactors_AnisoPyramid.int.gz
diff --git a/Tests/ReferenceData/Core/FormFactors_Box.int.gz b/Tests/ReferenceData/Std/FormFactors_Box.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/FormFactors_Box.int.gz
rename to Tests/ReferenceData/Std/FormFactors_Box.int.gz
diff --git a/Tests/ReferenceData/Core/FormFactors_Cone.int.gz b/Tests/ReferenceData/Std/FormFactors_Cone.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/FormFactors_Cone.int.gz
rename to Tests/ReferenceData/Std/FormFactors_Cone.int.gz
diff --git a/Tests/ReferenceData/Core/FormFactors_Cone6.int.gz b/Tests/ReferenceData/Std/FormFactors_Cone6.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/FormFactors_Cone6.int.gz
rename to Tests/ReferenceData/Std/FormFactors_Cone6.int.gz
diff --git a/Tests/ReferenceData/Core/FormFactors_Cuboctahedron.int.gz b/Tests/ReferenceData/Std/FormFactors_Cuboctahedron.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/FormFactors_Cuboctahedron.int.gz
rename to Tests/ReferenceData/Std/FormFactors_Cuboctahedron.int.gz
diff --git a/Tests/ReferenceData/Core/FormFactors_Cylinder.int.gz b/Tests/ReferenceData/Std/FormFactors_Cylinder.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/FormFactors_Cylinder.int.gz
rename to Tests/ReferenceData/Std/FormFactors_Cylinder.int.gz
diff --git a/Tests/ReferenceData/Core/FormFactors_Dodecahedron.int.gz b/Tests/ReferenceData/Std/FormFactors_Dodecahedron.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/FormFactors_Dodecahedron.int.gz
rename to Tests/ReferenceData/Std/FormFactors_Dodecahedron.int.gz
diff --git a/Tests/ReferenceData/Core/FormFactors_Dot.int.gz b/Tests/ReferenceData/Std/FormFactors_Dot.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/FormFactors_Dot.int.gz
rename to Tests/ReferenceData/Std/FormFactors_Dot.int.gz
diff --git a/Tests/ReferenceData/Core/FormFactors_EllipsoidalCylinder.int.gz b/Tests/ReferenceData/Std/FormFactors_EllipsoidalCylinder.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/FormFactors_EllipsoidalCylinder.int.gz
rename to Tests/ReferenceData/Std/FormFactors_EllipsoidalCylinder.int.gz
diff --git a/Tests/ReferenceData/Core/FormFactors_FullSphere.int.gz b/Tests/ReferenceData/Std/FormFactors_FullSphere.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/FormFactors_FullSphere.int.gz
rename to Tests/ReferenceData/Std/FormFactors_FullSphere.int.gz
diff --git a/Tests/ReferenceData/Std/FormFactors_FullSpheroid.int.gz b/Tests/ReferenceData/Std/FormFactors_FullSpheroid.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..6d6b3473909fca852c1495d17a110cb3c3bd8c38
Binary files /dev/null and b/Tests/ReferenceData/Std/FormFactors_FullSpheroid.int.gz differ
diff --git a/Tests/ReferenceData/Core/FormFactors_HemiEllipsoid.int.gz b/Tests/ReferenceData/Std/FormFactors_HemiEllipsoid.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/FormFactors_HemiEllipsoid.int.gz
rename to Tests/ReferenceData/Std/FormFactors_HemiEllipsoid.int.gz
diff --git a/Tests/ReferenceData/Core/FormFactors_Icosahedron.int.gz b/Tests/ReferenceData/Std/FormFactors_Icosahedron.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/FormFactors_Icosahedron.int.gz
rename to Tests/ReferenceData/Std/FormFactors_Icosahedron.int.gz
diff --git a/Tests/ReferenceData/Core/FormFactors_Prism3.int.gz b/Tests/ReferenceData/Std/FormFactors_Prism3.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/FormFactors_Prism3.int.gz
rename to Tests/ReferenceData/Std/FormFactors_Prism3.int.gz
diff --git a/Tests/ReferenceData/Core/FormFactors_Prism6.int.gz b/Tests/ReferenceData/Std/FormFactors_Prism6.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/FormFactors_Prism6.int.gz
rename to Tests/ReferenceData/Std/FormFactors_Prism6.int.gz
diff --git a/Tests/ReferenceData/Core/FormFactors_Pyramid.int.gz b/Tests/ReferenceData/Std/FormFactors_Pyramid.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/FormFactors_Pyramid.int.gz
rename to Tests/ReferenceData/Std/FormFactors_Pyramid.int.gz
diff --git a/Tests/ReferenceData/Std/FormFactors_Ripple1Box.int.gz b/Tests/ReferenceData/Std/FormFactors_Ripple1Box.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..f780abe90d7e85fd886f9df9af59a55a00b07e19
Binary files /dev/null and b/Tests/ReferenceData/Std/FormFactors_Ripple1Box.int.gz differ
diff --git a/Tests/ReferenceData/Std/FormFactors_Ripple2Box.int.gz b/Tests/ReferenceData/Std/FormFactors_Ripple2Box.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..94b01f947dfa67b21cb798da3119e822248e80d3
Binary files /dev/null and b/Tests/ReferenceData/Std/FormFactors_Ripple2Box.int.gz differ
diff --git a/Tests/ReferenceData/Core/FormFactors_Tetrahedron.int.gz b/Tests/ReferenceData/Std/FormFactors_Tetrahedron.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/FormFactors_Tetrahedron.int.gz
rename to Tests/ReferenceData/Std/FormFactors_Tetrahedron.int.gz
diff --git a/Tests/ReferenceData/Core/FormFactors_TruncatedCube.int.gz b/Tests/ReferenceData/Std/FormFactors_TruncatedCube.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/FormFactors_TruncatedCube.int.gz
rename to Tests/ReferenceData/Std/FormFactors_TruncatedCube.int.gz
diff --git a/Tests/ReferenceData/Core/FormFactors_TruncatedSpheroid.int.gz b/Tests/ReferenceData/Std/FormFactors_TruncatedSphere.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/FormFactors_TruncatedSpheroid.int.gz
rename to Tests/ReferenceData/Std/FormFactors_TruncatedSphere.int.gz
diff --git a/Tests/ReferenceData/Std/FormFactors_TruncatedSpheroid.int.gz b/Tests/ReferenceData/Std/FormFactors_TruncatedSpheroid.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..2b2f8405a2cd69512b78646d7cc585ae6a1d7f40
Binary files /dev/null and b/Tests/ReferenceData/Std/FormFactors_TruncatedSpheroid.int.gz differ
diff --git a/Tests/ReferenceData/Std/GISASAbsorptiveSLDLayers.int.gz b/Tests/ReferenceData/Std/GISASAbsorptiveSLDLayers.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..bbb112ef6219d335a87b8871ad7e329009146621
Binary files /dev/null and b/Tests/ReferenceData/Std/GISASAbsorptiveSLDLayers.int.gz differ
diff --git a/Tests/ReferenceData/Std/GaussianBeamFootprint.int.gz b/Tests/ReferenceData/Std/GaussianBeamFootprint.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..8616b6d8e516a89813d0acd05a69bc33249b8cec
Binary files /dev/null and b/Tests/ReferenceData/Std/GaussianBeamFootprint.int.gz differ
diff --git a/Tests/ReferenceData/Std/HardDisk.int.gz b/Tests/ReferenceData/Std/HardDisk.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..b98c878511c23a33e1c8d62653ec5f7b04c37110
Binary files /dev/null and b/Tests/ReferenceData/Std/HardDisk.int.gz differ
diff --git a/Tests/ReferenceData/Std/HexParaCrystal.int.gz b/Tests/ReferenceData/Std/HexParaCrystal.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..ffd3dfdcc48694595c7aa34c0376636b3d212196
Binary files /dev/null and b/Tests/ReferenceData/Std/HexParaCrystal.int.gz differ
diff --git a/Tests/ReferenceData/Std/HomogeneousTiNiSample.int.gz b/Tests/ReferenceData/Std/HomogeneousTiNiSample.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..ce8d20041f4b567e5ec02aa546662a6778285af1
Binary files /dev/null and b/Tests/ReferenceData/Std/HomogeneousTiNiSample.int.gz differ
diff --git a/Tests/ReferenceData/Std/HomogeneousTiNiSampleWithAbsorption.int.gz b/Tests/ReferenceData/Std/HomogeneousTiNiSampleWithAbsorption.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..b2f16487df55dc272d22685ea73d23edec67c7ec
Binary files /dev/null and b/Tests/ReferenceData/Std/HomogeneousTiNiSampleWithAbsorption.int.gz differ
diff --git a/Tests/ReferenceData/Std/InstrumentDefinitionComparison_0.int.gz b/Tests/ReferenceData/Std/InstrumentDefinitionComparison_0.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..b2f16487df55dc272d22685ea73d23edec67c7ec
Binary files /dev/null and b/Tests/ReferenceData/Std/InstrumentDefinitionComparison_0.int.gz differ
diff --git a/Tests/ReferenceData/Std/InstrumentDefinitionComparison_Q.int.gz b/Tests/ReferenceData/Std/InstrumentDefinitionComparison_Q.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..bfc3be38bd780895131b22400fcf0d96f31df1e9
Binary files /dev/null and b/Tests/ReferenceData/Std/InstrumentDefinitionComparison_Q.int.gz differ
diff --git a/Tests/ReferenceData/Std/LargeCylindersMonteCarlo.int.gz b/Tests/ReferenceData/Std/LargeCylindersMonteCarlo.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..ceb8a8f5a7064f45788697d76228a44ff3fae877
Binary files /dev/null and b/Tests/ReferenceData/Std/LargeCylindersMonteCarlo.int.gz differ
diff --git a/Tests/ReferenceData/Core/Lattice1D.int.gz b/Tests/ReferenceData/Std/Lattice1D.int.gz
similarity index 96%
rename from Tests/ReferenceData/Core/Lattice1D.int.gz
rename to Tests/ReferenceData/Std/Lattice1D.int.gz
index 1468790f18fa46c9201eab14aa3216ffa5fcdc24..1c0d968673e220dd361ce735f6e1c962809ef51f 100644
Binary files a/Tests/ReferenceData/Core/Lattice1D.int.gz and b/Tests/ReferenceData/Std/Lattice1D.int.gz differ
diff --git a/Tests/ReferenceData/Std/LinkedBoxDistribution.int.gz b/Tests/ReferenceData/Std/LinkedBoxDistribution.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..869bec40a1ae35762a974f03ac3926bbd0c19769
Binary files /dev/null and b/Tests/ReferenceData/Std/LinkedBoxDistribution.int.gz differ
diff --git a/Tests/ReferenceData/Core/MagneticCylindersMM.int.gz b/Tests/ReferenceData/Std/MagneticCylindersMM.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/MagneticCylindersMM.int.gz
rename to Tests/ReferenceData/Std/MagneticCylindersMM.int.gz
diff --git a/Tests/ReferenceData/Core/MagneticCylindersMP.int.gz b/Tests/ReferenceData/Std/MagneticCylindersMP.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/MagneticCylindersMP.int.gz
rename to Tests/ReferenceData/Std/MagneticCylindersMP.int.gz
diff --git a/Tests/ReferenceData/Core/MagneticCylindersPM.int.gz b/Tests/ReferenceData/Std/MagneticCylindersPM.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/MagneticCylindersPM.int.gz
rename to Tests/ReferenceData/Std/MagneticCylindersPM.int.gz
diff --git a/Tests/ReferenceData/Core/MagneticCylindersPP.int.gz b/Tests/ReferenceData/Std/MagneticCylindersPP.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/MagneticCylindersPP.int.gz
rename to Tests/ReferenceData/Std/MagneticCylindersPP.int.gz
diff --git a/Tests/ReferenceData/Std/MagneticParticleZeroField.int.gz b/Tests/ReferenceData/Std/MagneticParticleZeroField.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..89e01550b17948c5cc5af793de3ab017324ab14f
Binary files /dev/null and b/Tests/ReferenceData/Std/MagneticParticleZeroField.int.gz differ
diff --git a/Tests/ReferenceData/Core/MagneticRotation.int.gz b/Tests/ReferenceData/Std/MagneticRotation.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/MagneticRotation.int.gz
rename to Tests/ReferenceData/Std/MagneticRotation.int.gz
diff --git a/Tests/ReferenceData/Core/MagneticSpheres.int.gz b/Tests/ReferenceData/Std/MagneticSpheres.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/MagneticSpheres.int.gz
rename to Tests/ReferenceData/Std/MagneticSpheres.int.gz
diff --git a/Tests/ReferenceData/Core/MagneticSpheresInMagLayerMP.int.gz b/Tests/ReferenceData/Std/MagneticSpheresInMagLayerMP.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/MagneticSpheresInMagLayerMP.int.gz
rename to Tests/ReferenceData/Std/MagneticSpheresInMagLayerMP.int.gz
diff --git a/Tests/ReferenceData/Std/MagneticSpheresInMagLayerPP.int.gz b/Tests/ReferenceData/Std/MagneticSpheresInMagLayerPP.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..8e10822ce06d25fbe39283c726efe4a8820b2f1d
Binary files /dev/null and b/Tests/ReferenceData/Std/MagneticSpheresInMagLayerPP.int.gz differ
diff --git a/Tests/ReferenceData/Std/MagneticSubstrateZeroField.int.gz b/Tests/ReferenceData/Std/MagneticSubstrateZeroField.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..d9e075a8df29a928d1f4d9f5db893f6cacd60a87
Binary files /dev/null and b/Tests/ReferenceData/Std/MagneticSubstrateZeroField.int.gz differ
diff --git a/Tests/ReferenceData/Std/MesoCrystal.int.gz b/Tests/ReferenceData/Std/MesoCrystal.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..a6e555179e22022bea81138a8448ea99f291ff96
Binary files /dev/null and b/Tests/ReferenceData/Std/MesoCrystal.int.gz differ
diff --git a/Tests/ReferenceData/Std/MultiLayerWithRoughness.int.gz b/Tests/ReferenceData/Std/MultiLayerWithRoughness.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..ba7fd57bd48a72b671a783e4474d97fc54994964
Binary files /dev/null and b/Tests/ReferenceData/Std/MultiLayerWithRoughness.int.gz differ
diff --git a/Tests/ReferenceData/Std/MultipleLayout.int.gz b/Tests/ReferenceData/Std/MultipleLayout.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..3b8a10862dd1c683eacd7f367bdbc001ec4e441d
Binary files /dev/null and b/Tests/ReferenceData/Std/MultipleLayout.int.gz differ
diff --git a/Tests/ReferenceData/Std/NCRoughnessInSpecular.int.gz b/Tests/ReferenceData/Std/NCRoughnessInSpecular.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..47c4f99175cf3e190c89e02cf9976b9731b38fcf
Binary files /dev/null and b/Tests/ReferenceData/Std/NCRoughnessInSpecular.int.gz differ
diff --git a/Tests/ReferenceData/Std/OffSpecularResonator.int.gz b/Tests/ReferenceData/Std/OffSpecularResonator.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..c22a674bb3886eac54feb778bd9fa0f867779b5d
Binary files /dev/null and b/Tests/ReferenceData/Std/OffSpecularResonator.int.gz differ
diff --git a/Tests/ReferenceData/Core/ParticleComposition.int.gz b/Tests/ReferenceData/Std/ParticleComposition.int.gz
similarity index 70%
rename from Tests/ReferenceData/Core/ParticleComposition.int.gz
rename to Tests/ReferenceData/Std/ParticleComposition.int.gz
index a54d683a246cd86ee769ca68f697cff6a35ab452..8871c435e960b54c74a8d7696f875c83eeb86206 100644
Binary files a/Tests/ReferenceData/Core/ParticleComposition.int.gz and b/Tests/ReferenceData/Std/ParticleComposition.int.gz differ
diff --git a/Tests/ReferenceData/Std/PolarizedQAngleReflectivityMM_0.int.gz b/Tests/ReferenceData/Std/PolarizedQAngleReflectivityMM_0.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..43ff450187b304e24a225b63179dfd8d61706303
Binary files /dev/null and b/Tests/ReferenceData/Std/PolarizedQAngleReflectivityMM_0.int.gz differ
diff --git a/Tests/ReferenceData/Std/PolarizedQAngleReflectivityMM_Q.int.gz b/Tests/ReferenceData/Std/PolarizedQAngleReflectivityMM_Q.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..4cf7100ca7b63ca94ec1e0fd1da1c20646d799d0
Binary files /dev/null and b/Tests/ReferenceData/Std/PolarizedQAngleReflectivityMM_Q.int.gz differ
diff --git a/Tests/ReferenceData/Std/PolarizedQAngleReflectivityPP_0.int.gz b/Tests/ReferenceData/Std/PolarizedQAngleReflectivityPP_0.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..436b743918f042317560a4fbba81acca0dbe6a53
Binary files /dev/null and b/Tests/ReferenceData/Std/PolarizedQAngleReflectivityPP_0.int.gz differ
diff --git a/Tests/ReferenceData/Std/PolarizedQAngleReflectivityPP_Q.int.gz b/Tests/ReferenceData/Std/PolarizedQAngleReflectivityPP_Q.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..f92b0667843d3274a58a562134149eca9dedee95
Binary files /dev/null and b/Tests/ReferenceData/Std/PolarizedQAngleReflectivityPP_Q.int.gz differ
diff --git a/Tests/ReferenceData/Std/RadialParaCrystal.int.gz b/Tests/ReferenceData/Std/RadialParaCrystal.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..93b19ac356723ec46fd6d61aa4d90d8c1474bcca
Binary files /dev/null and b/Tests/ReferenceData/Std/RadialParaCrystal.int.gz differ
diff --git a/Tests/ReferenceData/Core/RectDetWithRoi.int.gz b/Tests/ReferenceData/Std/RectDetWithRoi.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/RectDetWithRoi.int.gz
rename to Tests/ReferenceData/Std/RectDetWithRoi.int.gz
diff --git a/Tests/ReferenceData/Core/RectDetectorGeneric.int.gz b/Tests/ReferenceData/Std/RectDetectorGeneric.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/RectDetectorGeneric.int.gz
rename to Tests/ReferenceData/Std/RectDetectorGeneric.int.gz
diff --git a/Tests/ReferenceData/Core/RectDetectorPerpToDirectBeam.int.gz b/Tests/ReferenceData/Std/RectDetectorPerpToDirectBeam.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/RectDetectorPerpToDirectBeam.int.gz
rename to Tests/ReferenceData/Std/RectDetectorPerpToDirectBeam.int.gz
diff --git a/Tests/ReferenceData/Core/RectDetectorPerpToReflectedBeam.int.gz b/Tests/ReferenceData/Std/RectDetectorPerpToReflectedBeam.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/RectDetectorPerpToReflectedBeam.int.gz
rename to Tests/ReferenceData/Std/RectDetectorPerpToReflectedBeam.int.gz
diff --git a/Tests/ReferenceData/Core/RectDetectorPerpToReflectedBeamDpos.int.gz b/Tests/ReferenceData/Std/RectDetectorPerpToReflectedBeamDpos.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/RectDetectorPerpToReflectedBeamDpos.int.gz
rename to Tests/ReferenceData/Std/RectDetectorPerpToReflectedBeamDpos.int.gz
diff --git a/Tests/ReferenceData/Core/RectDetectorPerpToSample.int.gz b/Tests/ReferenceData/Std/RectDetectorPerpToSample.int.gz
similarity index 52%
rename from Tests/ReferenceData/Core/RectDetectorPerpToSample.int.gz
rename to Tests/ReferenceData/Std/RectDetectorPerpToSample.int.gz
index 4ec403e1cb4f843056a2a076b358dabe28fbb5cd..a59fa9f16858321b43318543b7380bb07d756abe 100644
Binary files a/Tests/ReferenceData/Core/RectDetectorPerpToSample.int.gz and b/Tests/ReferenceData/Std/RectDetectorPerpToSample.int.gz differ
diff --git a/Tests/ReferenceData/Std/RectParaCrystal.int.gz b/Tests/ReferenceData/Std/RectParaCrystal.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..6dcf5efd311cc09bf5f44786f07764738cd866fd
Binary files /dev/null and b/Tests/ReferenceData/Std/RectParaCrystal.int.gz differ
diff --git a/Tests/ReferenceData/Core/RelativeResolutionTOF.int.gz b/Tests/ReferenceData/Std/RelativeResolutionTOF.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/RelativeResolutionTOF.int.gz
rename to Tests/ReferenceData/Std/RelativeResolutionTOF.int.gz
diff --git a/Tests/ReferenceData/Core/RotatedCylinder.int.gz b/Tests/ReferenceData/Std/RotatedCylinder.int.gz
similarity index 88%
rename from Tests/ReferenceData/Core/RotatedCylinder.int.gz
rename to Tests/ReferenceData/Std/RotatedCylinder.int.gz
index d3b96d8bd006464c5c9e627cd6611728a99ecfd0..6204ce3bd7d89d25afa8252b1617c1dcf606483b 100644
Binary files a/Tests/ReferenceData/Core/RotatedCylinder.int.gz and b/Tests/ReferenceData/Std/RotatedCylinder.int.gz differ
diff --git a/Tests/ReferenceData/Std/RotatedPyramids.int.gz b/Tests/ReferenceData/Std/RotatedPyramids.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..3a816077454813a4a686c32ebebf22c4423569fc
Binary files /dev/null and b/Tests/ReferenceData/Std/RotatedPyramids.int.gz differ
diff --git a/Tests/ReferenceData/Core/RotatedPyramidsDistribution.int.gz b/Tests/ReferenceData/Std/RotatedPyramidsDistribution.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/RotatedPyramidsDistribution.int.gz
rename to Tests/ReferenceData/Std/RotatedPyramidsDistribution.int.gz
diff --git a/Tests/ReferenceData/Core/RotatedSquareLattice.int.gz b/Tests/ReferenceData/Std/RotatedSquareLattice.int.gz
similarity index 86%
rename from Tests/ReferenceData/Core/RotatedSquareLattice.int.gz
rename to Tests/ReferenceData/Std/RotatedSquareLattice.int.gz
index 1607d2988fce2d877b553bcbc2e4b3a64e9f4288..75d32b32ce0985cf280ee1f1535b5715fc16835d 100644
Binary files a/Tests/ReferenceData/Core/RotatedSquareLattice.int.gz and b/Tests/ReferenceData/Std/RotatedSquareLattice.int.gz differ
diff --git a/Tests/ReferenceData/Std/RoughnessInSpecular.int.gz b/Tests/ReferenceData/Std/RoughnessInSpecular.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..451399c85670b66dc4b198f1856cd54b446ce3ae
Binary files /dev/null and b/Tests/ReferenceData/Std/RoughnessInSpecular.int.gz differ
diff --git a/Tests/ReferenceData/Core/SimulationWithMasks.int.gz b/Tests/ReferenceData/Std/SimulationWithMasks.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/SimulationWithMasks.int.gz
rename to Tests/ReferenceData/Std/SimulationWithMasks.int.gz
diff --git a/Tests/ReferenceData/Core/SlicedComposition.int.gz b/Tests/ReferenceData/Std/SlicedComposition.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/SlicedComposition.int.gz
rename to Tests/ReferenceData/Std/SlicedComposition.int.gz
diff --git a/Tests/ReferenceData/Std/SpecularDivergentBeam.int.gz b/Tests/ReferenceData/Std/SpecularDivergentBeam.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..af8baf443253dd1adffd3ce7b3b930be2425dd8d
Binary files /dev/null and b/Tests/ReferenceData/Std/SpecularDivergentBeam.int.gz differ
diff --git a/Tests/ReferenceData/Std/SpecularWithSlicing_01.int.gz b/Tests/ReferenceData/Std/SpecularWithSlicing_01.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..f6067cbe58159631760ec009f3f77ba1397ea051
Binary files /dev/null and b/Tests/ReferenceData/Std/SpecularWithSlicing_01.int.gz differ
diff --git a/Tests/ReferenceData/Std/SpecularWithSlicing_02.int.gz b/Tests/ReferenceData/Std/SpecularWithSlicing_02.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..e7fe9b6232b49ef61c59d914fffda10e7b4de143
Binary files /dev/null and b/Tests/ReferenceData/Std/SpecularWithSlicing_02.int.gz differ
diff --git a/Tests/ReferenceData/Std/SpecularWithSlicing_03.int.gz b/Tests/ReferenceData/Std/SpecularWithSlicing_03.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..e7fe9b6232b49ef61c59d914fffda10e7b4de143
Binary files /dev/null and b/Tests/ReferenceData/Std/SpecularWithSlicing_03.int.gz differ
diff --git a/Tests/ReferenceData/Std/SpecularWithSlicing_Q2.int.gz b/Tests/ReferenceData/Std/SpecularWithSlicing_Q2.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..4619021b613d20f95c7ffbb9253526e5c66d2024
Binary files /dev/null and b/Tests/ReferenceData/Std/SpecularWithSlicing_Q2.int.gz differ
diff --git a/Tests/ReferenceData/Core/SpheresWithLimitsDistribution.int.gz b/Tests/ReferenceData/Std/SpheresWithLimitsDistribution.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/SpheresWithLimitsDistribution.int.gz
rename to Tests/ReferenceData/Std/SpheresWithLimitsDistribution.int.gz
diff --git a/Tests/ReferenceData/Core/SphericalDetWithRoi.int.gz b/Tests/ReferenceData/Std/SphericalDetWithRoi.int.gz
similarity index 74%
rename from Tests/ReferenceData/Core/SphericalDetWithRoi.int.gz
rename to Tests/ReferenceData/Std/SphericalDetWithRoi.int.gz
index 7e7ce27f2dd23bfe14e1f42cf8561bab776757bb..47bb6699beb1ba3ba8bce607badf3ba2591a6356 100644
Binary files a/Tests/ReferenceData/Core/SphericalDetWithRoi.int.gz and b/Tests/ReferenceData/Std/SphericalDetWithRoi.int.gz differ
diff --git a/Tests/ReferenceData/Std/SquareBeamFootprint.int.gz b/Tests/ReferenceData/Std/SquareBeamFootprint.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..3b64e40d7bfb8c5a9f7c94d9da08ba6f84c05e24
Binary files /dev/null and b/Tests/ReferenceData/Std/SquareBeamFootprint.int.gz differ
diff --git a/Tests/ReferenceData/Core/SquareLattice.int.gz b/Tests/ReferenceData/Std/SquareLattice.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/SquareLattice.int.gz
rename to Tests/ReferenceData/Std/SquareLattice.int.gz
diff --git a/Tests/ReferenceData/Core/SuperLattice.int.gz b/Tests/ReferenceData/Std/SuperLattice.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/SuperLattice.int.gz
rename to Tests/ReferenceData/Std/SuperLattice.int.gz
diff --git a/Tests/ReferenceData/Std/TOFResolutionComparison_TP.int.gz b/Tests/ReferenceData/Std/TOFResolutionComparison_TP.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..ea0de53423851ba717bc679a867fa6ed1d7dc3c5
Binary files /dev/null and b/Tests/ReferenceData/Std/TOFResolutionComparison_TP.int.gz differ
diff --git a/Tests/ReferenceData/Std/TOFResolutionComparison_TR.int.gz b/Tests/ReferenceData/Std/TOFResolutionComparison_TR.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..ea0de53423851ba717bc679a867fa6ed1d7dc3c5
Binary files /dev/null and b/Tests/ReferenceData/Std/TOFResolutionComparison_TR.int.gz differ
diff --git a/Tests/ReferenceData/Std/ThickAbsorptiveSampleWithRoughness.int.gz b/Tests/ReferenceData/Std/ThickAbsorptiveSampleWithRoughness.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..0add27eab385b942a2cf9b7eeeb8161221645abf
Binary files /dev/null and b/Tests/ReferenceData/Std/ThickAbsorptiveSampleWithRoughness.int.gz differ
diff --git a/Tests/ReferenceData/Core/TransformBox.int.gz b/Tests/ReferenceData/Std/TransformBox.int.gz
similarity index 85%
rename from Tests/ReferenceData/Core/TransformBox.int.gz
rename to Tests/ReferenceData/Std/TransformBox.int.gz
index 401a5c5f90538f0294ac7231abd0164bbfdd1b33..8b72c7fe5f4034c0812585c8c74e45ba398d525a 100644
Binary files a/Tests/ReferenceData/Core/TransformBox.int.gz and b/Tests/ReferenceData/Std/TransformBox.int.gz differ
diff --git a/Tests/ReferenceData/Core/TriangularRipple.int.gz b/Tests/ReferenceData/Std/TriangularRipple.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/TriangularRipple.int.gz
rename to Tests/ReferenceData/Std/TriangularRipple.int.gz
diff --git a/Tests/ReferenceData/Core/TwoTypesCylindersDistribution.int.gz b/Tests/ReferenceData/Std/TwoTypesCylindersDistribution.int.gz
similarity index 100%
rename from Tests/ReferenceData/Core/TwoTypesCylindersDistribution.int.gz
rename to Tests/ReferenceData/Std/TwoTypesCylindersDistribution.int.gz
diff --git a/auto/Wrap/doxygen_core.i b/auto/Wrap/doxygen_core.i
index d29c25b19badccf9883d894ccd99b2326fbe5c39..eaab6dc9a1c05646cf318128b736372ae6c2d150 100644
--- a/auto/Wrap/doxygen_core.i
+++ b/auto/Wrap/doxygen_core.i
@@ -1421,18 +1421,18 @@ C++ includes: SimpleUnitConverters.h
 %feature("docstring")  DepthProbeConverter::DepthProbeConverter "DepthProbeConverter::DepthProbeConverter(const Beam &beam, const IAxis &alpha_axis, const IAxis &z_axis)
 ";
 
-%feature("docstring")  DepthProbeConverter::~DepthProbeConverter "DepthProbeConverter::~DepthProbeConverter() override
+%feature("docstring")  DepthProbeConverter::~DepthProbeConverter "DepthProbeConverter::~DepthProbeConverter() final
 ";
 
-%feature("docstring")  DepthProbeConverter::clone "DepthProbeConverter * DepthProbeConverter::clone() const override
+%feature("docstring")  DepthProbeConverter::clone "DepthProbeConverter * DepthProbeConverter::clone() const final
 ";
 
-%feature("docstring")  DepthProbeConverter::availableUnits "std::vector< AxesUnits > DepthProbeConverter::availableUnits() const override
+%feature("docstring")  DepthProbeConverter::availableUnits "std::vector< AxesUnits > DepthProbeConverter::availableUnits() const final
 
 Returns the list of all available units. 
 ";
 
-%feature("docstring")  DepthProbeConverter::defaultUnits "AxesUnits DepthProbeConverter::defaultUnits() const override
+%feature("docstring")  DepthProbeConverter::defaultUnits "AxesUnits DepthProbeConverter::defaultUnits() const final
 ";
 
 
@@ -6308,6 +6308,11 @@ C++ includes: ICloneable.h
 %feature("docstring")  ICloneable::clone "virtual ICloneable* ICloneable::clone() const =0
 ";
 
+%feature("docstring")  ICloneable::transferToCPP "virtual void ICloneable::transferToCPP()
+
+Used for Python overriding of clone (see swig/tweaks.py) 
+";
+
 
 // File: classIClusteredParticles.xml
 %feature("docstring") IClusteredParticles "
@@ -7811,10 +7816,10 @@ Returns a vector of children (const).
 %feature("docstring")  INode::setParent "void INode::setParent(const INode *newParent)
 ";
 
-%feature("docstring")  INode::parent "INode * INode::parent() const
+%feature("docstring")  INode::parent "const INode * INode::parent() const
 ";
 
-%feature("docstring")  INode::parent "INode* INode::parent()
+%feature("docstring")  INode::parent "INode * INode::parent()
 ";
 
 %feature("docstring")  INode::copyNumber "int INode::copyNumber(const INode *node) const
@@ -8289,12 +8294,12 @@ Sets the beam's polarization according to the given Bloch vector.
 Returns the beam's intensity. 
 ";
 
-%feature("docstring")  Instrument::getDetector "IDetector * Instrument::getDetector() const
+%feature("docstring")  Instrument::getDetector "const IDetector * Instrument::getDetector() const
 
 Returns the detector data. 
 ";
 
-%feature("docstring")  Instrument::getDetector "IDetector* Instrument::getDetector()
+%feature("docstring")  Instrument::getDetector "IDetector * Instrument::getDetector()
 ";
 
 %feature("docstring")  Instrument::getDetectorMask "const DetectorMask * Instrument::getDetectorMask() const
@@ -11551,13 +11556,13 @@ C++ includes: SimpleUnitConverters.h
 %feature("docstring")  OffSpecularConverter::OffSpecularConverter "OffSpecularConverter::OffSpecularConverter(const IDetector2D &detector, const Beam &beam, const IAxis &alpha_axis)
 ";
 
-%feature("docstring")  OffSpecularConverter::~OffSpecularConverter "OffSpecularConverter::~OffSpecularConverter() override
+%feature("docstring")  OffSpecularConverter::~OffSpecularConverter "OffSpecularConverter::~OffSpecularConverter() final
 ";
 
-%feature("docstring")  OffSpecularConverter::clone "OffSpecularConverter * OffSpecularConverter::clone() const override
+%feature("docstring")  OffSpecularConverter::clone "OffSpecularConverter * OffSpecularConverter::clone() const final
 ";
 
-%feature("docstring")  OffSpecularConverter::defaultUnits "AxesUnits OffSpecularConverter::defaultUnits() const override
+%feature("docstring")  OffSpecularConverter::defaultUnits "AxesUnits OffSpecularConverter::defaultUnits() const final
 ";
 
 
@@ -11695,12 +11700,12 @@ Returns copy of raw data vector.
 Returns sum of all values in the data structure. 
 ";
 
-%feature("docstring")  OutputData::begin "OutputData< T >::const_iterator OutputData< T >::begin()
+%feature("docstring")  OutputData::begin "OutputData< T >::iterator OutputData< T >::begin()
 
 Returns read/write iterator that points to the first element. 
 ";
 
-%feature("docstring")  OutputData::begin "const_iterator OutputData< T >::begin() const
+%feature("docstring")  OutputData::begin "OutputData< T >::const_iterator OutputData< T >::begin() const
 
 Returns read-only iterator that points to the first element. 
 ";
@@ -12135,10 +12140,10 @@ get number of samples for this distribution
 get the sigma factor 
 ";
 
-%feature("docstring")  ParameterDistribution::getDistribution "IDistribution1D * ParameterDistribution::getDistribution() const
+%feature("docstring")  ParameterDistribution::getDistribution "const IDistribution1D * ParameterDistribution::getDistribution() const
 ";
 
-%feature("docstring")  ParameterDistribution::getDistribution "IDistribution1D* ParameterDistribution::getDistribution()
+%feature("docstring")  ParameterDistribution::getDistribution "IDistribution1D * ParameterDistribution::getDistribution()
 ";
 
 %feature("docstring")  ParameterDistribution::generateSamples "std::vector< ParameterSample > ParameterDistribution::generateSamples() const
@@ -13854,18 +13859,18 @@ C++ includes: SimpleUnitConverters.h
 %feature("docstring")  RectangularConverter::RectangularConverter "RectangularConverter::RectangularConverter(const RectangularDetector &detector, const Beam &beam)
 ";
 
-%feature("docstring")  RectangularConverter::~RectangularConverter "RectangularConverter::~RectangularConverter() override
+%feature("docstring")  RectangularConverter::~RectangularConverter "RectangularConverter::~RectangularConverter() final
 ";
 
-%feature("docstring")  RectangularConverter::clone "RectangularConverter * RectangularConverter::clone() const override
+%feature("docstring")  RectangularConverter::clone "RectangularConverter * RectangularConverter::clone() const final
 ";
 
-%feature("docstring")  RectangularConverter::availableUnits "std::vector< AxesUnits > RectangularConverter::availableUnits() const override
+%feature("docstring")  RectangularConverter::availableUnits "std::vector< AxesUnits > RectangularConverter::availableUnits() const final
 
 Returns the list of all available units. 
 ";
 
-%feature("docstring")  RectangularConverter::defaultUnits "AxesUnits RectangularConverter::defaultUnits() const override
+%feature("docstring")  RectangularConverter::defaultUnits "AxesUnits RectangularConverter::defaultUnits() const final
 ";
 
 
@@ -16229,18 +16234,18 @@ C++ includes: SimpleUnitConverters.h
 %feature("docstring")  SphericalConverter::SphericalConverter "SphericalConverter::SphericalConverter(const SphericalDetector &detector, const Beam &beam)
 ";
 
-%feature("docstring")  SphericalConverter::~SphericalConverter "SphericalConverter::~SphericalConverter() override
+%feature("docstring")  SphericalConverter::~SphericalConverter "SphericalConverter::~SphericalConverter() final
 ";
 
-%feature("docstring")  SphericalConverter::clone "SphericalConverter * SphericalConverter::clone() const override
+%feature("docstring")  SphericalConverter::clone "SphericalConverter * SphericalConverter::clone() const final
 ";
 
-%feature("docstring")  SphericalConverter::availableUnits "std::vector< AxesUnits > SphericalConverter::availableUnits() const override
+%feature("docstring")  SphericalConverter::availableUnits "std::vector< AxesUnits > SphericalConverter::availableUnits() const final
 
 Returns the list of all available units. 
 ";
 
-%feature("docstring")  SphericalConverter::defaultUnits "AxesUnits SphericalConverter::defaultUnits() const override
+%feature("docstring")  SphericalConverter::defaultUnits "AxesUnits SphericalConverter::defaultUnits() const final
 ";
 
 
@@ -16790,16 +16795,16 @@ C++ includes: SimpleUnitConverters.h
 %feature("docstring")  UnitConverterSimple::~UnitConverterSimple "UnitConverterSimple::~UnitConverterSimple() override=default
 ";
 
-%feature("docstring")  UnitConverterSimple::dimension "size_t UnitConverterSimple::dimension() const override
+%feature("docstring")  UnitConverterSimple::dimension "size_t UnitConverterSimple::dimension() const final
 ";
 
-%feature("docstring")  UnitConverterSimple::calculateMin "double UnitConverterSimple::calculateMin(size_t i_axis, AxesUnits units_type) const override
+%feature("docstring")  UnitConverterSimple::calculateMin "double UnitConverterSimple::calculateMin(size_t i_axis, AxesUnits units_type) const final
 ";
 
-%feature("docstring")  UnitConverterSimple::calculateMax "double UnitConverterSimple::calculateMax(size_t i_axis, AxesUnits units_type) const override
+%feature("docstring")  UnitConverterSimple::calculateMax "double UnitConverterSimple::calculateMax(size_t i_axis, AxesUnits units_type) const final
 ";
 
-%feature("docstring")  UnitConverterSimple::axisSize "size_t UnitConverterSimple::axisSize(size_t i_axis) const override
+%feature("docstring")  UnitConverterSimple::axisSize "size_t UnitConverterSimple::axisSize(size_t i_axis) const final
 ";
 
 %feature("docstring")  UnitConverterSimple::availableUnits "std::vector< AxesUnits > UnitConverterSimple::availableUnits() const override
@@ -16807,7 +16812,7 @@ C++ includes: SimpleUnitConverters.h
 Returns the list of all available units. 
 ";
 
-%feature("docstring")  UnitConverterSimple::createConvertedAxis "std::unique_ptr< IAxis > UnitConverterSimple::createConvertedAxis(size_t i_axis, AxesUnits units) const override
+%feature("docstring")  UnitConverterSimple::createConvertedAxis "std::unique_ptr< IAxis > UnitConverterSimple::createConvertedAxis(size_t i_axis, AxesUnits units) const final
 ";
 
 
diff --git a/auto/Wrap/doxygen_fit.i b/auto/Wrap/doxygen_fit.i
index 46a473e6e4e398291ecc67e3f672d11f471cb7b1..26ba7ec8e32252fa92dd7b41f59d33c3304e7617 100644
--- a/auto/Wrap/doxygen_fit.i
+++ b/auto/Wrap/doxygen_fit.i
@@ -891,16 +891,16 @@ C++ includes: Parameters.h
 %feature("docstring")  Fit::Parameters::add "void Parameters::add(const Parameter &par)
 ";
 
-%feature("docstring")  Fit::Parameters::begin "Parameters::iterator Parameters::begin() const
+%feature("docstring")  Fit::Parameters::begin "Parameters::const_iterator Parameters::begin() const
 ";
 
-%feature("docstring")  Fit::Parameters::end "Parameters::iterator Parameters::end() const
+%feature("docstring")  Fit::Parameters::end "Parameters::const_iterator Parameters::end() const
 ";
 
-%feature("docstring")  Fit::Parameters::begin "iterator Fit::Parameters::begin()
+%feature("docstring")  Fit::Parameters::begin "Parameters::iterator Parameters::begin()
 ";
 
-%feature("docstring")  Fit::Parameters::end "iterator Fit::Parameters::end()
+%feature("docstring")  Fit::Parameters::end "Parameters::iterator Parameters::end()
 ";
 
 %feature("docstring")  Fit::Parameters::size "size_t Parameters::size() const
diff --git a/auto/Wrap/libBornAgainCore.py b/auto/Wrap/libBornAgainCore.py
index 46f71ad489a4bd8699ee7543e9de0ea0c3b5be6f..20371e742a34f42a5027295ded1e4fa4f4f4d46e 100644
--- a/auto/Wrap/libBornAgainCore.py
+++ b/auto/Wrap/libBornAgainCore.py
@@ -1791,7 +1791,13 @@ class ICloneable(object):
         return _libBornAgainCore.ICloneable_clone(self)
 
     def transferToCPP(self):
-        r"""transferToCPP(ICloneable self)"""
+        r"""
+        transferToCPP(ICloneable self)
+        virtual void ICloneable::transferToCPP()
+
+        Used for Python overriding of clone (see swig/tweaks.py) 
+
+        """
         return self.__disown__()
 
 # Register ICloneable in _libBornAgainCore:
@@ -2052,7 +2058,7 @@ class INode(IParameterized):
         r"""
         parent(INode self) -> INode
         parent(INode self) -> INode
-        INode* INode::parent()
+        INode * INode::parent()
 
         """
         return _libBornAgainCore.INode_parent(self, *args)
@@ -16782,7 +16788,7 @@ class Instrument(INode):
         r"""
         getDetector(Instrument self) -> IDetector
         getDetector(Instrument self) -> IDetector
-        IDetector* Instrument::getDetector()
+        IDetector * Instrument::getDetector()
 
         """
         return _libBornAgainCore.Instrument_getDetector(self, *args)
@@ -20416,7 +20422,7 @@ class IntensityData(object):
         r"""
         begin(IntensityData self) -> OutputData< double >::iterator
         begin(IntensityData self) -> OutputData< double >::const_iterator
-        const_iterator OutputData< T >::begin() const
+        OutputData< T >::const_iterator OutputData< T >::begin() const
 
         Returns read-only iterator that points to the first element. 
 
@@ -20767,7 +20773,7 @@ class ParameterDistribution(IParameterized):
         r"""
         getDistribution(ParameterDistribution self) -> IDistribution1D
         getDistribution(ParameterDistribution self) -> IDistribution1D
-        IDistribution1D* ParameterDistribution::getDistribution()
+        IDistribution1D * ParameterDistribution::getDistribution()
 
         """
         return _libBornAgainCore.ParameterDistribution_getDistribution(self, *args)
diff --git a/auto/Wrap/libBornAgainCore_wrap.cpp b/auto/Wrap/libBornAgainCore_wrap.cpp
index e03504984b446dfb2b827499474791980a29a071..b275fa50b70d48e04103a89f0cd0a9eb76b618f3 100644
--- a/auto/Wrap/libBornAgainCore_wrap.cpp
+++ b/auto/Wrap/libBornAgainCore_wrap.cpp
@@ -122252,7 +122252,13 @@ static PyMethodDef SwigMethods[] = {
 		"virtual ICloneable* ICloneable::clone() const =0\n"
 		"\n"
 		""},
-	 { "ICloneable_transferToCPP", _wrap_ICloneable_transferToCPP, METH_O, "ICloneable_transferToCPP(ICloneable self)"},
+	 { "ICloneable_transferToCPP", _wrap_ICloneable_transferToCPP, METH_O, "\n"
+		"ICloneable_transferToCPP(ICloneable self)\n"
+		"virtual void ICloneable::transferToCPP()\n"
+		"\n"
+		"Used for Python overriding of clone (see swig/tweaks.py) \n"
+		"\n"
+		""},
 	 { "ICloneable_swigregister", ICloneable_swigregister, METH_O, NULL},
 	 { "new_IParameterized", _wrap_new_IParameterized, METH_VARARGS, "\n"
 		"IParameterized(std::string const & name=\"\")\n"
@@ -122390,7 +122396,7 @@ static PyMethodDef SwigMethods[] = {
 	 { "INode_parent", _wrap_INode_parent, METH_VARARGS, "\n"
 		"INode_parent(INode self) -> INode\n"
 		"INode_parent(INode self) -> INode\n"
-		"INode* INode::parent()\n"
+		"INode * INode::parent()\n"
 		"\n"
 		""},
 	 { "INode_copyNumber", _wrap_INode_copyNumber, METH_VARARGS, "\n"
@@ -130932,7 +130938,7 @@ static PyMethodDef SwigMethods[] = {
 	 { "Instrument_getDetector", _wrap_Instrument_getDetector, METH_VARARGS, "\n"
 		"Instrument_getDetector(Instrument self) -> IDetector\n"
 		"Instrument_getDetector(Instrument self) -> IDetector\n"
-		"IDetector* Instrument::getDetector()\n"
+		"IDetector * Instrument::getDetector()\n"
 		"\n"
 		""},
 	 { "Instrument_getDetectorMask", _wrap_Instrument_getDetectorMask, METH_O, "\n"
@@ -133141,7 +133147,7 @@ static PyMethodDef SwigMethods[] = {
 	 { "IntensityData_begin", _wrap_IntensityData_begin, METH_VARARGS, "\n"
 		"IntensityData_begin(IntensityData self) -> OutputData< double >::iterator\n"
 		"IntensityData_begin(IntensityData self) -> OutputData< double >::const_iterator\n"
-		"const_iterator OutputData< T >::begin() const\n"
+		"OutputData< T >::const_iterator OutputData< T >::begin() const\n"
 		"\n"
 		"Returns read-only iterator that points to the first element. \n"
 		"\n"
@@ -133390,7 +133396,7 @@ static PyMethodDef SwigMethods[] = {
 	 { "ParameterDistribution_getDistribution", _wrap_ParameterDistribution_getDistribution, METH_VARARGS, "\n"
 		"ParameterDistribution_getDistribution(ParameterDistribution self) -> IDistribution1D\n"
 		"ParameterDistribution_getDistribution(ParameterDistribution self) -> IDistribution1D\n"
-		"IDistribution1D* ParameterDistribution::getDistribution()\n"
+		"IDistribution1D * ParameterDistribution::getDistribution()\n"
 		"\n"
 		""},
 	 { "ParameterDistribution_generateSamples", _wrap_ParameterDistribution_generateSamples, METH_O, "\n"
diff --git a/auto/Wrap/libBornAgainFit.py b/auto/Wrap/libBornAgainFit.py
index 10a838417acd0671d1bab87af610efbd385977f8..33f3addf37fc596386ec20c6e5fce354be5ca7e0 100644
--- a/auto/Wrap/libBornAgainFit.py
+++ b/auto/Wrap/libBornAgainFit.py
@@ -1722,7 +1722,7 @@ class Parameters(object):
         r"""
         begin(Parameters self) -> Fit::Parameters::const_iterator
         begin(Parameters self) -> Fit::Parameters::iterator
-        iterator Fit::Parameters::begin()
+        Parameters::iterator Parameters::begin()
 
         """
         return _libBornAgainFit.Parameters_begin(self, *args)
@@ -1731,7 +1731,7 @@ class Parameters(object):
         r"""
         end(Parameters self) -> Fit::Parameters::const_iterator
         end(Parameters self) -> Fit::Parameters::iterator
-        iterator Fit::Parameters::end()
+        Parameters::iterator Parameters::end()
 
         """
         return _libBornAgainFit.Parameters_end(self, *args)
diff --git a/auto/Wrap/libBornAgainFit_wrap.cpp b/auto/Wrap/libBornAgainFit_wrap.cpp
index 2ba957261a8620ffe61f6f4a0e66188972de05b8..0c5a892161c9316b6c91c87c4822e677143e25ae 100644
--- a/auto/Wrap/libBornAgainFit_wrap.cpp
+++ b/auto/Wrap/libBornAgainFit_wrap.cpp
@@ -22417,13 +22417,13 @@ static PyMethodDef SwigMethods[] = {
 	 { "Parameters_begin", _wrap_Parameters_begin, METH_VARARGS, "\n"
 		"Parameters_begin(Parameters self) -> Fit::Parameters::const_iterator\n"
 		"Parameters_begin(Parameters self) -> Fit::Parameters::iterator\n"
-		"iterator Fit::Parameters::begin()\n"
+		"Parameters::iterator Parameters::begin()\n"
 		"\n"
 		""},
 	 { "Parameters_end", _wrap_Parameters_end, METH_VARARGS, "\n"
 		"Parameters_end(Parameters self) -> Fit::Parameters::const_iterator\n"
 		"Parameters_end(Parameters self) -> Fit::Parameters::iterator\n"
-		"iterator Fit::Parameters::end()\n"
+		"Parameters::iterator Parameters::end()\n"
 		"\n"
 		""},
 	 { "Parameters_size", _wrap_Parameters_size, METH_O, "\n"
diff --git a/cmake/configurables/BATesting.h.in b/cmake/configurables/BATesting.h.in
index 860d8e47323b5b32fb0f6ebc969c88de4f3b9513..57e81fccdb1e50bc6bf1bde0e571a217773000df 100644
--- a/cmake/configurables/BATesting.h.in
+++ b/cmake/configurables/BATesting.h.in
@@ -24,13 +24,15 @@
 namespace BATesting {
 
 inline std::string ReferenceDataDir() { return "@TEST_REFERENCE_DIR@"; }
+inline std::string StdReferenceDir() { return "@TEST_REFERENCE_DIR@/Std"; }
 inline std::string CoreReferenceDir() { return "@TEST_REFERENCE_DIR@/Core"; }
 
 inline std::string TestOutputDir() { return "@TEST_OUTPUT_DIR@"; }
+inline std::string StdOutputDir() { return "@TEST_OUTPUT_DIR@/Functional/Std"; }
 inline std::string CoreOutputDir() { return "@TEST_OUTPUT_DIR@/Functional/Core"; }
 inline std::string SelfConsistenceOutputDir() { return "@TEST_OUTPUT_DIR@/Functional/SelfConsistence"; }
 inline std::string GUIOutputDir() { return "@TEST_OUTPUT_DIR@/Functional/GUI"; }
-inline std::string PyStandardOutputDir() { return "@TEST_OUTPUT_DIR@/Functional/Python/PyStandard"; }
+inline std::string PyStandardOutputDir() { return "@TEST_OUTPUT_DIR@/Functional/Python/Std"; }
 
 
 }