diff --git a/Core/Export/PythonFormatting.cpp b/Core/Export/PythonFormatting.cpp
index 945bc69d0382fb7283791049b99a4612d75cf8ba..e5d278a516f049d68e110038348fe18bed9a6c52 100644
--- a/Core/Export/PythonFormatting.cpp
+++ b/Core/Export/PythonFormatting.cpp
@@ -21,6 +21,7 @@
 #include "IShape2D.h"
 #include "InfinitePlane.h"
 #include "IParameterized.h"
+#include "ISampleBuilder.h"
 #include "Line.h"
 #include "Macros.h"
 #include "MultiLayer.h"
diff --git a/Core/Multilayer/ISampleBuilder.h b/Core/Multilayer/ISampleBuilder.h
index 3b0062fd0bae2e5c18e13fd5d8bdd3b5ba3ee4b3..519028e9e4f25837de1472f432b4418461445929 100644
--- a/Core/Multilayer/ISampleBuilder.h
+++ b/Core/Multilayer/ISampleBuilder.h
@@ -18,13 +18,12 @@
 
 #include "IParameterized.h"
 
-class ISample;
+class MultiLayer;
 class IFormFactor;
 class IFTDistribution2D;
 
-//! @class ISampleBuilder
+//! Interface to the class capable to build samples to simulate.
 //! @ingroup simulation_internal
-//! @brief Interface to the class capable to build samples to simulate
 
 class BA_CORE_API_ ISampleBuilder : public IParameterized
 {
@@ -32,7 +31,7 @@ public:
     ISampleBuilder() : IParameterized("SampleBuilder") {}
     virtual ~ISampleBuilder() {}
 
-    virtual ISample* buildSample() const = 0;
+    virtual MultiLayer* buildSample() const = 0;
 
     void set_subtest(const IParameterized* subtest_item) { m_subtest_item = subtest_item; }
     const IParameterized* m_subtest_item;
diff --git a/Core/Multilayer/LayerStrategyBuilder.cpp b/Core/Multilayer/LayerStrategyBuilder.cpp
index fbd3cab30aa239ef05ac7370a9cad494964db348..1506c599ea065b417722cb0d537a90d7ef41e77b 100644
--- a/Core/Multilayer/LayerStrategyBuilder.cpp
+++ b/Core/Multilayer/LayerStrategyBuilder.cpp
@@ -21,6 +21,7 @@
 #include "IParticle.h"
 #include "InterferenceFunctionStrategies.h"
 #include "InterferenceFunctions.h"
+#include "MultiLayer.h"
 #include "Layer.h"
 #include "LayerSpecularInfo.h"
 #include "Simulation.h"
diff --git a/Core/Multilayer/LayerStrategyBuilder.h b/Core/Multilayer/LayerStrategyBuilder.h
index 16707686296019e20e1abe5b8d2693112b1bbbed..5fe9a95f10aeb0fc721eb8751e5e093ae75be18d 100644
--- a/Core/Multilayer/LayerStrategyBuilder.h
+++ b/Core/Multilayer/LayerStrategyBuilder.h
@@ -28,9 +28,8 @@ class Layer;
 class LayerSpecularInfo;
 class Simulation;
 
-//! @class LayerStrategyBuilder
+//! Methods to generate a simulation strategy for decorated Layer SimulationParameters.
 //! @ingroup algorithms_internal
-//! @brief Methods to generate a simulation strategy for decorated Layer SimulationParameters
 
 class BA_CORE_API_ LayerStrategyBuilder
 {
@@ -48,9 +47,9 @@ public:
     virtual IInterferenceFunctionStrategy* createStrategy();
 
 protected:
-    std::unique_ptr<class Layer> mP_layer;                            //!< decorated layer
-    std::unique_ptr<class Simulation> mP_simulation;                  //!< simulation
-    SimulationOptions m_sim_params;          //!< simulation parameters
+    std::unique_ptr<class Layer> mP_layer;                     //!< decorated layer
+    std::unique_ptr<class Simulation> mP_simulation;           //!< simulation
+    SimulationOptions m_sim_params;                            //!< simulation parameters
     std::unique_ptr<class LayerSpecularInfo> mP_specular_info; //!< R and T coefficients for DWBA
     size_t m_layout_index; //!< index for the layout to be used in the layer
 
diff --git a/Core/Simulation/DWBASimulation.cpp b/Core/Simulation/DWBASimulation.cpp
index b825ceb4e01cec9b8a1fc0417c6f92d588ddd49d..563cc8a896433beb8c3ca1cce69204378e122a39 100644
--- a/Core/Simulation/DWBASimulation.cpp
+++ b/Core/Simulation/DWBASimulation.cpp
@@ -14,7 +14,7 @@
 // ************************************************************************** //
 
 #include "DWBASimulation.h"
-#include "ISample.h"
+#include "MultiLayer.h"
 
 DWBASimulation::DWBASimulation()
     : mp_simulation(nullptr)
@@ -42,9 +42,9 @@ void DWBASimulation::init(const Simulation& simulation,
     mp_simulation->initProgressHandlerDWBA(&m_progress);
 }
 
-DWBASimulation *DWBASimulation::clone() const
+DWBASimulation* DWBASimulation::clone() const
 {
-    DWBASimulation *p_result = new DWBASimulation();
+    DWBASimulation* p_result = new DWBASimulation();
     p_result->m_dwba_intensity.copyFrom(m_dwba_intensity);
     p_result->m_progress.setCallback(m_progress.getCallback());
     if (mp_simulation)
@@ -57,7 +57,7 @@ bool DWBASimulation::checkPolarizationPresent() const
     if (!mp_simulation)
         throw Exceptions::ClassInitializationException("DWBASimulation::"
                 "checkPolarizationPresent(): simulation not initialized");
-    ISample *p_sample = mp_simulation->getSample();
+    MultiLayer* p_sample = mp_simulation->getSample();
     if (!p_sample)
         throw Exceptions::ClassInitializationException("DWBASimulation::"
                 "checkPolarizationPresent(): sample not initialized");
diff --git a/Core/Simulation/DWBASimulation.h b/Core/Simulation/DWBASimulation.h
index d62bda3165a9a24b6a87ba2c4037899b531699d1..121e1d9822cb948b2bca1952c30026e8aa72a2c8 100644
--- a/Core/Simulation/DWBASimulation.h
+++ b/Core/Simulation/DWBASimulation.h
@@ -32,7 +32,7 @@ public:
     virtual ~DWBASimulation();
 
     //! Initializes the simulation with the parameters from simulation
-    virtual void init(const Simulation &simulation,
+    virtual void init(const Simulation& simulation,
                       std::vector<SimulationElement>::iterator begin_it,
                       std::vector<SimulationElement>::iterator end_it);
 
diff --git a/Core/Simulation/GISASSimulation.cpp b/Core/Simulation/GISASSimulation.cpp
index 8b7ffe6e50bf1a679996ecbe7a0ce2f5b86aebb7..cf9fec4b48b95bde7fab5854f8c0f6c7d85b7bec 100644
--- a/Core/Simulation/GISASSimulation.cpp
+++ b/Core/Simulation/GISASSimulation.cpp
@@ -16,7 +16,8 @@
 #include "GISASSimulation.h"
 #include "BornAgainNamespace.h"
 #include "Histogram2D.h"
-#include "ISample.h"
+#include "ISampleBuilder.h"
+#include "MultiLayer.h"
 #include "SimulationElement.h"
 
 GISASSimulation::GISASSimulation()
@@ -24,7 +25,7 @@ GISASSimulation::GISASSimulation()
     initialize();
 }
 
-GISASSimulation::GISASSimulation(const ISample& p_sample)
+GISASSimulation::GISASSimulation(const MultiLayer& p_sample)
     : Simulation(p_sample)
 {
     initialize();
diff --git a/Core/Simulation/GISASSimulation.h b/Core/Simulation/GISASSimulation.h
index 1d254c3bc3203bba418ff6adbd65fd290bb834f1..5cf07cbceb8be19452c42e82bac7fb7dc934cc13 100644
--- a/Core/Simulation/GISASSimulation.h
+++ b/Core/Simulation/GISASSimulation.h
@@ -19,7 +19,7 @@
 #include "Simulation.h"
 #include "Instrument.h"
 
-class ISample;
+class MultiLayer;
 class ISampleBuilder;
 class IHistogram;
 class Histogram2D;
@@ -31,7 +31,7 @@ class BA_CORE_API_ GISASSimulation : public Simulation
 {
 public:
     GISASSimulation();
-    GISASSimulation(const ISample& p_sample);
+    GISASSimulation(const MultiLayer& p_sample);
     GISASSimulation(std::shared_ptr<ISampleBuilder> p_sample_builder);
 
     virtual ~GISASSimulation() {}
diff --git a/Core/Simulation/OffSpecSimulation.cpp b/Core/Simulation/OffSpecSimulation.cpp
index b2549507c37da4ee3aa9c14fa554f545bb146c11..15c94f5c624d29fa30a989e9a89142e32cf5c861 100644
--- a/Core/Simulation/OffSpecSimulation.cpp
+++ b/Core/Simulation/OffSpecSimulation.cpp
@@ -16,7 +16,8 @@
 #include "OffSpecSimulation.h"
 #include "BornAgainNamespace.h"
 #include "Histogram2D.h"
-#include "ISample.h"
+#include "ISampleBuilder.h"
+#include "MultiLayer.h"
 #include "SimulationElement.h"
 
 OffSpecSimulation::OffSpecSimulation()
@@ -25,7 +26,7 @@ OffSpecSimulation::OffSpecSimulation()
     initialize();
 }
 
-OffSpecSimulation::OffSpecSimulation(const ISample& p_sample)
+OffSpecSimulation::OffSpecSimulation(const MultiLayer& p_sample)
     : Simulation(p_sample)
     , mp_alpha_i_axis(0)
 {
@@ -48,12 +49,12 @@ void OffSpecSimulation::prepareSimulation()
 int OffSpecSimulation::getNumberOfSimulationElements() const
 {
     checkInitialization();
-    const IAxis &phi_axis = m_instrument.getDetectorAxis(0);
-    const IAxis &alpha_axis = m_instrument.getDetectorAxis(1);
+    const IAxis& phi_axis = m_instrument.getDetectorAxis(0);
+    const IAxis& alpha_axis = m_instrument.getDetectorAxis(1);
     return phi_axis.getSize()*alpha_axis.getSize()*mp_alpha_i_axis->getSize();
 }
 
-Histogram2D *OffSpecSimulation::getIntensityData() const
+Histogram2D* OffSpecSimulation::getIntensityData() const
 {
     const std::unique_ptr<OutputData<double> > data(getDetectorIntensity());
     return new Histogram2D(*data);
@@ -162,9 +163,9 @@ void OffSpecSimulation::initSimulationElementVector()
     double phi_i = beam.getPhi();
     checkInitialization();
 
-    for (size_t alpha_i_index = 0; alpha_i_index < mp_alpha_i_axis->getSize(); ++alpha_i_index) {
+    for (size_t iAlpha = 0; iAlpha < mp_alpha_i_axis->getSize(); ++iAlpha) {
         // Incoming angle by convention defined as positive:
-        double alpha_i = mp_alpha_i_axis->getBin(alpha_i_index).getMidPoint();
+        double alpha_i = mp_alpha_i_axis->getBin(iAlpha).getMidPoint();
         beam.setCentralK(wavelength, alpha_i, phi_i);
         m_instrument.setBeam(beam);
         std::vector<SimulationElement> sim_elements_alpha_i =
@@ -180,11 +181,10 @@ void OffSpecSimulation::transferResultsToIntensityMap()
     updateIntensityMap();
     const IAxis &phi_axis = m_instrument.getDetectorAxis(0);
     size_t phi_f_size = phi_axis.getSize();
-    if (phi_f_size*m_intensity_map.getAllocatedSize()!=m_sim_elements.size()) {
-        throw Exceptions::RuntimeErrorException("OffSpecSimulation::transferResultsToIntensityMap: "
-                                    "intensity map size does not conform to number of "
-                                    "calculated intensities");
-    }
+    if (phi_f_size*m_intensity_map.getAllocatedSize()!=m_sim_elements.size())
+        throw Exceptions::RuntimeErrorException(
+            "OffSpecSimulation::transferResultsToIntensityMap: "
+            "intensity map size does not conform to number of calculated intensities");
     for (size_t i=0; i<mp_alpha_i_axis->getSize(); ++i)
         transferDetectorImage(i);
 }
@@ -216,18 +216,16 @@ void OffSpecSimulation::transferDetectorImage(int index)
         detector_image[i] = m_sim_elements[index*detector_size + i].getIntensity();
     m_instrument.applyDetectorResolution(&detector_image);
     size_t y_axis_size = m_instrument.getDetectorAxis(1).getSize();
-    for (size_t i=0; i<detector_size; ++i) {
+    for (size_t i=0; i<detector_size; ++i)
         m_intensity_map[index*y_axis_size + i%y_axis_size] += detector_image[i];
-    }
 }
 
 void OffSpecSimulation::checkInitialization() const
 {
-    if (!mp_alpha_i_axis || mp_alpha_i_axis->getSize()<1) {
+    if (!mp_alpha_i_axis || mp_alpha_i_axis->getSize()<1)
         throw Exceptions::ClassInitializationException(
                 "OffSpecSimulation::checkInitialization() "
                 "Incoming alpha range not configured.");
-    }
     if (m_instrument.getDetectorDimension()!=2)
         throw Exceptions::RuntimeErrorException(
             "OffSpecSimulation::checkInitialization: detector is not two-dimensional");
diff --git a/Core/Simulation/OffSpecSimulation.h b/Core/Simulation/OffSpecSimulation.h
index cc7db2398de2774d0dde6cf4ff884471847e09dd..489d4ec3176b6d2ad860b48d11ab0ebe619b9ea8 100644
--- a/Core/Simulation/OffSpecSimulation.h
+++ b/Core/Simulation/OffSpecSimulation.h
@@ -28,7 +28,7 @@ class BA_CORE_API_ OffSpecSimulation : public Simulation
 {
 public:
     OffSpecSimulation();
-    OffSpecSimulation(const ISample& p_sample);
+    OffSpecSimulation(const MultiLayer& p_sample);
     OffSpecSimulation(std::shared_ptr<class ISampleBuilder> p_sample_builder);
     virtual ~OffSpecSimulation() {}
 
diff --git a/Core/Simulation/Simulation.cpp b/Core/Simulation/Simulation.cpp
index bb04bf9e2659feec8eb0e567ceb20ac5e676513f..678f3a981a038efc8c9397fbd9c648ed5837de76 100644
--- a/Core/Simulation/Simulation.cpp
+++ b/Core/Simulation/Simulation.cpp
@@ -15,7 +15,8 @@
 
 #include "Simulation.h"
 #include "DWBASimulation.h"
-#include "ISample.h"
+#include "ISampleBuilder.h"
+#include "MultiLayer.h"
 #include "Logger.h"
 #include "OMPISimulation.h"
 #include "ParameterPool.h"
@@ -32,7 +33,7 @@ Simulation::Simulation()
 
 Simulation::~Simulation() {} // forward class declaration prevents move to .h
 
-Simulation::Simulation(const ISample& p_sample)
+Simulation::Simulation(const MultiLayer& p_sample)
     : IParameterized("Simulation")
 {
     mP_sample.reset(p_sample.clone());
@@ -102,8 +103,8 @@ void Simulation::runOMPISimulation()
     ompi.runSimulation(this);
 }
 
-//! The ISample object will not be owned by the Simulation object
-void Simulation::setSample(const ISample& sample)
+//! The MultiLayer object will not be owned by the Simulation object
+void Simulation::setSample(const MultiLayer& sample)
 {
     mP_sample.reset(sample.clone());
 }
@@ -118,7 +119,7 @@ void Simulation::setSampleBuilder(std::shared_ptr<class ISampleBuilder> p_sample
     mP_sample.reset(0);
 }
 
-std::string Simulation::addParametersToExternalPool(std::string path, ParameterPool *external_pool,
+std::string Simulation::addParametersToExternalPool(std::string path, ParameterPool* external_pool,
                                                     int copy_number) const
 {
     // add own parameters
@@ -157,7 +158,7 @@ const DistributionHandler& Simulation::getDistributionHandler() const
 void Simulation::updateSample()
 {
     if (mp_sample_builder) {
-        ISample *p_new_sample = mp_sample_builder->buildSample();
+        MultiLayer* p_new_sample = mp_sample_builder->buildSample();
         std::string builder_type = typeid(*mp_sample_builder).name();
         if (builder_type.find("ISampleBuilder_wrapper") != std::string::npos) {
             msglog(MSG::DEBUG2) << "Simulation::updateSample() -> "
@@ -213,7 +214,7 @@ void Simulation::runSingleSimulation()
 
         for (int i_thread = 0; i_thread < m_options.getNumberOfThreads(); ++i_thread) {
             if (i_thread*element_thread_step >= total_batch_elements) break;
-            DWBASimulation *p_dwba_simulation = mP_sample->createDWBASimulation();
+            DWBASimulation* p_dwba_simulation = mP_sample->createDWBASimulation();
             verifyDWBASimulation(p_dwba_simulation);
             std::vector<SimulationElement>::iterator begin_it = batch_start
                                                                 + i_thread * element_thread_step;
@@ -271,7 +272,7 @@ void Simulation::normalize(std::vector<SimulationElement>::iterator begin_it,
     }
 }
 
-void Simulation::initProgressHandlerDWBA(ProgressHandlerDWBA *dwba_progress)
+void Simulation::initProgressHandlerDWBA(ProgressHandlerDWBA* dwba_progress)
 {
     // if we have external ProgressHandler (which is normally coming from GUI),
     // then we will create special callbacks for every DWBASimulation.
@@ -281,7 +282,7 @@ void Simulation::initProgressHandlerDWBA(ProgressHandlerDWBA *dwba_progress)
     }
 }
 
-void Simulation::verifyDWBASimulation(DWBASimulation *dwbaSimulation)
+void Simulation::verifyDWBASimulation(DWBASimulation* dwbaSimulation)
 {
     if (!dwbaSimulation)
         throw Exceptions::RuntimeErrorException(
@@ -296,8 +297,10 @@ std::vector<SimulationElement>::iterator Simulation::getBatchStart(int n_batches
     imposeConsistencyOfBatchNumbers(n_batches, current_batch);
     int total_size = m_sim_elements.size();
     int size_per_batch = total_size/n_batches;
-    if (total_size%n_batches) ++size_per_batch;
-    if (current_batch*size_per_batch >= total_size) return m_sim_elements.end();
+    if (total_size%n_batches)
+        ++size_per_batch;
+    if (current_batch*size_per_batch >= total_size)
+        return m_sim_elements.end();
     return m_sim_elements.begin() + current_batch*size_per_batch;
 }
 
diff --git a/Core/Simulation/Simulation.h b/Core/Simulation/Simulation.h
index 0ca83bd83b9a074d4d609d84cd0f025b1f60ff53..203581be416334ec1f512365124154cf2227e26d 100644
--- a/Core/Simulation/Simulation.h
+++ b/Core/Simulation/Simulation.h
@@ -18,25 +18,23 @@
 
 #include "DistributionHandler.h"
 #include "IDetector2D.h"
-#include "ISampleBuilder.h"
 #include "ProgressHandler.h"
 #include "SimulationOptions.h"
 
 template<class T> class OutputData;
 class DWBASimulation;
-class ISample;
+class MultiLayer;
 class ISampleBuilder;
 class ProgressHandlerDWBA;
 
-//! @class Simulation
+//! Main class to run the simulation.
 //! @ingroup simulation
-//! @brief Main class to run the simulation.
 
 class BA_CORE_API_ Simulation : public ICloneable, public IParameterized
 {
 public:
     Simulation();
-    Simulation(const ISample& p_sample);
+    Simulation(const MultiLayer& p_sample);
     Simulation(std::shared_ptr<ISampleBuilder> p_sample_builder);
     virtual ~Simulation();
 
@@ -52,10 +50,10 @@ public:
     void runOMPISimulation();
 
     //! Sets the sample to be tested
-    void setSample(const ISample& sample);
+    void setSample(const MultiLayer& sample);
 
     //! Returns the sample
-    ISample* getSample() const { return mP_sample.get(); }
+    MultiLayer* getSample() const { return mP_sample.get(); }
 
     //! Sets the sample builder
     void setSampleBuilder(std::shared_ptr<ISampleBuilder> sample_builder);
@@ -134,7 +132,7 @@ protected:
     //! Returns the end iterator of simulation elements for the current batch
     std::vector<SimulationElement>::iterator getBatchEnd(int n_batches, int current_batch);
 
-    std::unique_ptr<ISample> mP_sample;
+    std::unique_ptr<MultiLayer> mP_sample;
     std::shared_ptr<ISampleBuilder> mp_sample_builder;
     SimulationOptions m_options;
     DistributionHandler m_distribution_handler;
diff --git a/Core/StandardSamples/BoxCompositionBuilder.cpp b/Core/StandardSamples/BoxCompositionBuilder.cpp
index 6d41667b90aeca2cab6d1ac289d3dfa048f1c474..6836e09354527d7788627029037737c1f4020191 100644
--- a/Core/StandardSamples/BoxCompositionBuilder.cpp
+++ b/Core/StandardSamples/BoxCompositionBuilder.cpp
@@ -61,7 +61,7 @@ MultiLayer* BoxCompositionBuilder::createMultiLayer(const ParticleComposition &c
 
 // --- BoxCompositionRotateXBuilder ---
 
-ISample* BoxCompositionRotateXBuilder::buildSample() const
+MultiLayer* BoxCompositionRotateXBuilder::buildSample() const
 {
     Particle box(*m_particleMaterial, FormFactorBox(m_length/2.0, m_width, m_height));
     ParticleComposition composition;
@@ -74,7 +74,7 @@ ISample* BoxCompositionRotateXBuilder::buildSample() const
 
 // --- BoxCompositionRotateYBuilder ---
 
-ISample* BoxCompositionRotateYBuilder::buildSample() const
+MultiLayer* BoxCompositionRotateYBuilder::buildSample() const
 {
     Particle box(*m_particleMaterial, FormFactorBox(m_length/2.0, m_width, m_height));
     ParticleComposition composition;
@@ -87,7 +87,7 @@ ISample* BoxCompositionRotateYBuilder::buildSample() const
 
 // --- BoxCompositionRotateZBuilder ---
 
-ISample* BoxCompositionRotateZBuilder::buildSample() const
+MultiLayer* BoxCompositionRotateZBuilder::buildSample() const
 {
     Particle box(*m_particleMaterial, FormFactorBox(m_length/2.0, m_width, m_height));
     ParticleComposition composition;
@@ -100,7 +100,7 @@ ISample* BoxCompositionRotateZBuilder::buildSample() const
 
 // --- BoxCompositionRotateZandYBuilder ---
 
-ISample* BoxCompositionRotateZandYBuilder::buildSample() const
+MultiLayer* BoxCompositionRotateZandYBuilder::buildSample() const
 {
     Particle box(*m_particleMaterial, FormFactorBox(m_length/2.0, m_width, m_height));
     ParticleComposition composition;
@@ -115,7 +115,7 @@ ISample* BoxCompositionRotateZandYBuilder::buildSample() const
 // --- BoxStackCompositionBuilder ---
 
 // Composition of two boxes which gives you the box (10,20,50) with reference point as usual.
-ISample* BoxStackCompositionBuilder::buildSample() const
+MultiLayer* BoxStackCompositionBuilder::buildSample() const
 {
     ParticleComposition composition;
 
diff --git a/Core/StandardSamples/BoxCompositionBuilder.h b/Core/StandardSamples/BoxCompositionBuilder.h
index daf1f474d3bb69a1f30b0e6230aa886272044f2f..b992eab5c6eb3e78578a613729b3515da44c4598 100644
--- a/Core/StandardSamples/BoxCompositionBuilder.h
+++ b/Core/StandardSamples/BoxCompositionBuilder.h
@@ -51,7 +51,7 @@ class BA_CORE_API_ BoxCompositionRotateXBuilder : public BoxCompositionBuilder
 {
 public:
     BoxCompositionRotateXBuilder(){}
-    ISample* buildSample() const;
+    MultiLayer* buildSample() const;
 };
 
 //! @class BoxCompositionRotateYBuilder
@@ -62,7 +62,7 @@ class BA_CORE_API_ BoxCompositionRotateYBuilder : public BoxCompositionBuilder
 {
 public:
     BoxCompositionRotateYBuilder(){}
-    ISample* buildSample() const;
+    MultiLayer* buildSample() const;
 };
 
 //! @class BoxCompositionRotateZBuilder
@@ -73,7 +73,7 @@ class BA_CORE_API_ BoxCompositionRotateZBuilder : public BoxCompositionBuilder
 {
 public:
     BoxCompositionRotateZBuilder(){}
-    ISample* buildSample() const;
+    MultiLayer* buildSample() const;
 };
 
 //! @class BoxCompositionRotateZandYBuilder
@@ -84,7 +84,7 @@ class BA_CORE_API_ BoxCompositionRotateZandYBuilder : public BoxCompositionBuild
 {
 public:
     BoxCompositionRotateZandYBuilder(){}
-    ISample* buildSample() const;
+    MultiLayer* buildSample() const;
 };
 
 //! @class BoxStackCompositionBuilder
@@ -95,7 +95,7 @@ class BA_CORE_API_ BoxStackCompositionBuilder : public BoxCompositionBuilder
 {
 public:
     BoxStackCompositionBuilder(){}
-    ISample* buildSample() const;
+    MultiLayer* buildSample() const;
 };
 
 #endif // BOXCOMPOSITIONBUILDER_H
diff --git a/Core/StandardSamples/CoreShellParticleBuilder.cpp b/Core/StandardSamples/CoreShellParticleBuilder.cpp
index 325cfa6c38cee96b2f1554c9187e3c28b97783be..d986fd15f4e1bc373605e1efb1180cbbfeb62682 100644
--- a/Core/StandardSamples/CoreShellParticleBuilder.cpp
+++ b/Core/StandardSamples/CoreShellParticleBuilder.cpp
@@ -26,7 +26,7 @@
 
 // --- CoreShellParticleBuilder ---
 
-ISample* CoreShellParticleBuilder::buildSample() const
+MultiLayer* CoreShellParticleBuilder::buildSample() const
 {
     MultiLayer* multi_layer = new MultiLayer();
 
@@ -58,7 +58,7 @@ ISample* CoreShellParticleBuilder::buildSample() const
 
 // --- CoreShellBoxRotateZandYBuilder ---
 
-ISample* CoreShellBoxRotateZandYBuilder::buildSample() const
+MultiLayer* CoreShellBoxRotateZandYBuilder::buildSample() const
 {
     const double layer_thickness(100.0*Units::nanometer);
 
@@ -68,7 +68,6 @@ ISample* CoreShellBoxRotateZandYBuilder::buildSample() const
     HomogeneousMaterial mCore("Ag", 1.245e-5, 5.419e-7);
     HomogeneousMaterial mShell("AgO2", 8.600e-6, 3.442e-7);
 
-
     // core shell particle
     const double shell_length(50.0*Units::nanometer);
     const double shell_width(20.0*Units::nanometer);
diff --git a/Core/StandardSamples/CoreShellParticleBuilder.h b/Core/StandardSamples/CoreShellParticleBuilder.h
index deab92c833a34e66538889808a8fcbb86bb89027..9dfe22f5ff0d85d6fd257ff79c94c3e3f2ec299f 100644
--- a/Core/StandardSamples/CoreShellParticleBuilder.h
+++ b/Core/StandardSamples/CoreShellParticleBuilder.h
@@ -28,7 +28,7 @@ class BA_CORE_API_ CoreShellParticleBuilder : public ISampleBuilder
 {
 public:
     CoreShellParticleBuilder(){}
-    ISample* buildSample() const;
+    MultiLayer* buildSample() const;
 };
 
 
@@ -40,7 +40,7 @@ class BA_CORE_API_ CoreShellBoxRotateZandYBuilder : public ISampleBuilder
 {
 public:
     CoreShellBoxRotateZandYBuilder(){}
-    ISample* buildSample() const;
+    MultiLayer* buildSample() const;
 };
 
 #endif // CORESHELLPARTICLEBUILDER_H
diff --git a/Core/StandardSamples/CustomMorphologyBuilder.cpp b/Core/StandardSamples/CustomMorphologyBuilder.cpp
index bfa89f3b64fb329cc01bb06f294e31b79bf60b5a..526200679337a3de38e42f6dac64eaedaa8b93d3 100644
--- a/Core/StandardSamples/CustomMorphologyBuilder.cpp
+++ b/Core/StandardSamples/CustomMorphologyBuilder.cpp
@@ -23,7 +23,7 @@
 #include "RealParameter.h"
 #include "Units.h"
 
-ISample* CustomMorphologyBuilder::buildSample() const
+MultiLayer* CustomMorphologyBuilder::buildSample() const
 {
     MultiLayer* multi_layer = new MultiLayer();
 
diff --git a/Core/StandardSamples/CustomMorphologyBuilder.h b/Core/StandardSamples/CustomMorphologyBuilder.h
index 80190f23488f78f59e572c3bfadea2242c301cba..98b3e42abd3045821805de7faba4589c8c8b11d0 100644
--- a/Core/StandardSamples/CustomMorphologyBuilder.h
+++ b/Core/StandardSamples/CustomMorphologyBuilder.h
@@ -28,7 +28,7 @@ class BA_CORE_API_ CustomMorphologyBuilder : public ISampleBuilder
 {
 public:
     CustomMorphologyBuilder() {}
-    ISample* buildSample() const;
+    MultiLayer* buildSample() const;
 };
 
 #endif // CUSTOMMORPHOLOGYBUILDER_H
diff --git a/Core/StandardSamples/CylindersAndPrismsBuilder.cpp b/Core/StandardSamples/CylindersAndPrismsBuilder.cpp
index e876a9f1bc2b422217dd23559ca7c5a9e9406b22..7efa731dcc3374e5c46eb61204b6a12ff2593b55 100644
--- a/Core/StandardSamples/CylindersAndPrismsBuilder.cpp
+++ b/Core/StandardSamples/CylindersAndPrismsBuilder.cpp
@@ -44,7 +44,7 @@ void CylindersAndPrismsBuilder::init_parameters()
     registerParameter("cylinder_weight", &m_cylinder_weight).setNonnegative();
 }
 
-ISample* CylindersAndPrismsBuilder::buildSample() const
+MultiLayer* CylindersAndPrismsBuilder::buildSample() const
 {
     MultiLayer* multi_layer = new MultiLayer();
 
diff --git a/Core/StandardSamples/CylindersAndPrismsBuilder.h b/Core/StandardSamples/CylindersAndPrismsBuilder.h
index 2ae54d1913999e1a17346270582b06b10d46e5bf..336730b6fda1724cd13706450b81ef5a578d3a01 100644
--- a/Core/StandardSamples/CylindersAndPrismsBuilder.h
+++ b/Core/StandardSamples/CylindersAndPrismsBuilder.h
@@ -29,7 +29,7 @@ class BA_CORE_API_ CylindersAndPrismsBuilder : public ISampleBuilder
 {
 public:
     CylindersAndPrismsBuilder();
-    ISample* buildSample() const;
+    MultiLayer* buildSample() const;
 
 protected:
     void init_parameters();
diff --git a/Core/StandardSamples/CylindersBuilder.cpp b/Core/StandardSamples/CylindersBuilder.cpp
index 50c2d8bb098a65b18fd88046e91064ec7e0362cf..feebedf3949c4e8c4391b8b6c4ac1204cded790e 100644
--- a/Core/StandardSamples/CylindersBuilder.cpp
+++ b/Core/StandardSamples/CylindersBuilder.cpp
@@ -41,7 +41,7 @@ void CylindersInDWBABuilder::init_parameters()
     registerParameter(BornAgain::Height, &m_height).setUnit("nm").setNonnegative();
 }
 
-ISample* CylindersInDWBABuilder::buildSample() const
+MultiLayer* CylindersInDWBABuilder::buildSample() const
 {
     MultiLayer* multi_layer = new MultiLayer();
 
@@ -81,7 +81,7 @@ void CylindersInBABuilder::init_parameters()
     registerParameter(BornAgain::Height, &m_height).setUnit("nm").setNonnegative();
 }
 
-ISample* CylindersInBABuilder::buildSample() const
+MultiLayer* CylindersInBABuilder::buildSample() const
 {
     MultiLayer* multi_layer = new MultiLayer();
 
@@ -118,7 +118,7 @@ void LargeCylindersInDWBABuilder::init_parameters()
     registerParameter(BornAgain::Height, &m_height).setUnit("nm").setNonnegative();
 }
 
-ISample* LargeCylindersInDWBABuilder::buildSample() const
+MultiLayer* LargeCylindersInDWBABuilder::buildSample() const
 {
     MultiLayer* multi_layer = new MultiLayer();
 
diff --git a/Core/StandardSamples/CylindersBuilder.h b/Core/StandardSamples/CylindersBuilder.h
index 7b3bedf086c63f21abdb39af4254479a84a5b950..796a23371ce19ef1741a17f4382e009882214c33 100644
--- a/Core/StandardSamples/CylindersBuilder.h
+++ b/Core/StandardSamples/CylindersBuilder.h
@@ -28,7 +28,7 @@ class BA_CORE_API_ CylindersInDWBABuilder : public ISampleBuilder
 {
 public:
     CylindersInDWBABuilder();
-    ISample* buildSample() const;
+    MultiLayer* buildSample() const;
 
 protected:
     void init_parameters();
@@ -46,7 +46,7 @@ class BA_CORE_API_ CylindersInBABuilder : public ISampleBuilder
 {
 public:
     CylindersInBABuilder();
-    ISample* buildSample() const;
+    MultiLayer* buildSample() const;
 
 protected:
     void init_parameters();
@@ -64,7 +64,7 @@ class BA_CORE_API_ LargeCylindersInDWBABuilder : public ISampleBuilder
 {
 public:
     LargeCylindersInDWBABuilder();
-    ISample* buildSample() const;
+    MultiLayer* buildSample() const;
 
 protected:
     void init_parameters();
diff --git a/Core/StandardSamples/LatticeBuilder.cpp b/Core/StandardSamples/LatticeBuilder.cpp
index 7f8f78dc895adb07b6da428e63b9ca51d04429ce..bf24b03983115aeedbbb07a0aeb0e027493d735d 100644
--- a/Core/StandardSamples/LatticeBuilder.cpp
+++ b/Core/StandardSamples/LatticeBuilder.cpp
@@ -35,7 +35,7 @@ Lattice1DBuilder::Lattice1DBuilder()
     init_parameters();
 }
 
-ISample* Lattice1DBuilder::buildSample() const
+MultiLayer* Lattice1DBuilder::buildSample() const
 {
     MultiLayer* multi_layer = new MultiLayer();
 
diff --git a/Core/StandardSamples/LatticeBuilder.h b/Core/StandardSamples/LatticeBuilder.h
index 5e55ec5d4af0c09b0d08f2f15603499b8e7a61f1..8ebc6ab29fe09ab3e259b9701689a070b5392595 100644
--- a/Core/StandardSamples/LatticeBuilder.h
+++ b/Core/StandardSamples/LatticeBuilder.h
@@ -28,7 +28,7 @@ class BA_CORE_API_ Lattice1DBuilder : public ISampleBuilder
 {
 public:
     Lattice1DBuilder();
-    ISample* buildSample() const;
+    MultiLayer* buildSample() const;
 
 protected:
     void init_parameters();
diff --git a/Core/StandardSamples/LayersWithAbsorptionBuilder.cpp b/Core/StandardSamples/LayersWithAbsorptionBuilder.cpp
index c4570a8f050894979ffbe86d103261297732c2d6..25430bdd9ab9bbd65f94e83aed118c2c9a03018b 100644
--- a/Core/StandardSamples/LayersWithAbsorptionBuilder.cpp
+++ b/Core/StandardSamples/LayersWithAbsorptionBuilder.cpp
@@ -25,7 +25,7 @@
 #include "RealParameter.h"
 #include "Units.h"
 
-ISample* LayersWithAbsorptionBuilder::buildSample() const
+MultiLayer* LayersWithAbsorptionBuilder::buildSample() const
 {
     const IFormFactor* form_factor = getFormFactor();
     if(!form_factor)
diff --git a/Core/StandardSamples/LayersWithAbsorptionBuilder.h b/Core/StandardSamples/LayersWithAbsorptionBuilder.h
index 90012bb77aeb792ffa5f4c8a03ed334ae98f40c9..c69ad1caf6481e60ace8c512552092c7cac29737 100644
--- a/Core/StandardSamples/LayersWithAbsorptionBuilder.h
+++ b/Core/StandardSamples/LayersWithAbsorptionBuilder.h
@@ -18,10 +18,10 @@
 
 #include "ISampleBuilder.h"
 
-//! @class LayersWithAbsorptionBuilder
-//! @ingroup standard_samples
-//! @brief The LayersWithAbsorptionBuilder class generates a multilayer with 3 layers with
+//! The LayersWithAbsorptionBuilder class generates a multilayer with 3 layers with
 //! absorption (refractive index has imaginary part).
+//! @ingroup standard_samples
+
 //! The middle layer is populated with particles.
 //! Requires IComponentService which generates form factors, used for bulk form factors testing.
 
@@ -30,7 +30,7 @@ class BA_CORE_API_ LayersWithAbsorptionBuilder : public ISampleBuilder
 public:
     LayersWithAbsorptionBuilder() {}
     virtual ~LayersWithAbsorptionBuilder() {}
-    virtual ISample *buildSample() const;
+    virtual MultiLayer* buildSample() const;
 };
 
 #endif // LAYERSWITHABSORPTIONBUILDER_H
diff --git a/Core/StandardSamples/MagneticParticlesBuilder.cpp b/Core/StandardSamples/MagneticParticlesBuilder.cpp
index a796499d6f9c247fdafbd97a9a4d9b534c328c9e..b63971a4892dc90ad175dbe243ff196bf8b287de 100644
--- a/Core/StandardSamples/MagneticParticlesBuilder.cpp
+++ b/Core/StandardSamples/MagneticParticlesBuilder.cpp
@@ -42,7 +42,7 @@ void MagneticParticleZeroFieldBuilder::init_parameters()
     registerParameter("cylinder_height", &m_cylinder_height).setUnit("nm").setNonnegative();
 }
 
-ISample* MagneticParticleZeroFieldBuilder::buildSample() const
+MultiLayer* MagneticParticleZeroFieldBuilder::buildSample() const
 {
     MultiLayer* multi_layer = new MultiLayer();
 
@@ -83,7 +83,7 @@ void MagneticCylindersBuilder::init_parameters()
     registerParameter("cylinder_height", &m_cylinder_height).setUnit("nm").setNonnegative();
 }
 
-ISample* MagneticCylindersBuilder::buildSample() const
+MultiLayer* MagneticCylindersBuilder::buildSample() const
 {
     MultiLayer* multi_layer = new MultiLayer();
 
diff --git a/Core/StandardSamples/MagneticParticlesBuilder.h b/Core/StandardSamples/MagneticParticlesBuilder.h
index bcfccfcb6cf8348c130edfd32fa5352c3a1cfedc..2af1efedbe17d7954015b0eab736a1f98fe02810 100644
--- a/Core/StandardSamples/MagneticParticlesBuilder.h
+++ b/Core/StandardSamples/MagneticParticlesBuilder.h
@@ -28,7 +28,7 @@ class BA_CORE_API_ MagneticParticleZeroFieldBuilder : public ISampleBuilder
 {
 public:
     MagneticParticleZeroFieldBuilder();
-    ISample* buildSample() const;
+    MultiLayer* buildSample() const;
 
 protected:
     void init_parameters();
@@ -46,7 +46,7 @@ class BA_CORE_API_ MagneticCylindersBuilder : public ISampleBuilder
 {
 public:
     MagneticCylindersBuilder();
-    ISample* buildSample() const;
+    MultiLayer* buildSample() const;
 
 protected:
     void init_parameters();
diff --git a/Core/StandardSamples/MesoCrystalBuilder.cpp b/Core/StandardSamples/MesoCrystalBuilder.cpp
index 9c4d40be85176a6461375f1f2f266aeea8607c81..dbc0746bc064d470c789e95b1ac1b07615b37cc3 100644
--- a/Core/StandardSamples/MesoCrystalBuilder.cpp
+++ b/Core/StandardSamples/MesoCrystalBuilder.cpp
@@ -67,7 +67,7 @@ void MesoCrystalBuilder::init_parameters()
 
 
 // create mesocrystal
-ISample* MesoCrystalBuilder::buildSample() const
+MultiLayer* MesoCrystalBuilder::buildSample() const
 {
     // create mesocrystal
     double surface_density = m_surface_filling_ratio/Pi::PI/m_meso_radius/m_meso_radius;
diff --git a/Core/StandardSamples/MesoCrystalBuilder.h b/Core/StandardSamples/MesoCrystalBuilder.h
index 7cdeeaa1f6e43c9eb413c6773f88c1fb68bc09b2..0703099c8451425ae9528fd7e791ba5a3afb1209 100644
--- a/Core/StandardSamples/MesoCrystalBuilder.h
+++ b/Core/StandardSamples/MesoCrystalBuilder.h
@@ -33,7 +33,7 @@ public:
     MesoCrystalBuilder();
 
     virtual ~MesoCrystalBuilder(){}
-    virtual ISample* buildSample() const;
+    virtual MultiLayer* buildSample() const;
 
 protected:
     virtual void init_parameters();
diff --git a/Core/StandardSamples/MultiLayerWithRoughnessBuilder.cpp b/Core/StandardSamples/MultiLayerWithRoughnessBuilder.cpp
index ae51fefd2daba19cbbc49c776c2da0cf0a65f55d..a9a26eaf4a85799f0f7c4bc5a7d7acbca1cefa57 100644
--- a/Core/StandardSamples/MultiLayerWithRoughnessBuilder.cpp
+++ b/Core/StandardSamples/MultiLayerWithRoughnessBuilder.cpp
@@ -44,7 +44,7 @@ void MultiLayerWithRoughnessBuilder::init_parameters()
 }
 
 
-ISample* MultiLayerWithRoughnessBuilder::buildSample() const
+MultiLayer* MultiLayerWithRoughnessBuilder::buildSample() const
 {
     MultiLayer* multi_layer = new MultiLayer();
     HomogeneousMaterial air_material("Air", 0., 0.);
diff --git a/Core/StandardSamples/MultiLayerWithRoughnessBuilder.h b/Core/StandardSamples/MultiLayerWithRoughnessBuilder.h
index 16fe62b9389a3897d7c96e93838a501300bc1d80..0c90b6590cbbf4726536b1180343a0c253e6d2da 100644
--- a/Core/StandardSamples/MultiLayerWithRoughnessBuilder.h
+++ b/Core/StandardSamples/MultiLayerWithRoughnessBuilder.h
@@ -28,7 +28,7 @@ class BA_CORE_API_ MultiLayerWithRoughnessBuilder : public ISampleBuilder
 {
 public:
     MultiLayerWithRoughnessBuilder();
-    ISample* buildSample() const;
+    MultiLayer* buildSample() const;
 
 protected:
     void init_parameters();
diff --git a/Core/StandardSamples/MultipleLayoutBuilder.cpp b/Core/StandardSamples/MultipleLayoutBuilder.cpp
index be1ad9107044f04536d6f49a1f79da24f15b7f58..d04dc3a4f21511cec81e2af330b6e804edf5a6bf 100644
--- a/Core/StandardSamples/MultipleLayoutBuilder.cpp
+++ b/Core/StandardSamples/MultipleLayoutBuilder.cpp
@@ -43,7 +43,7 @@ void MultipleLayoutBuilder::init_parameters()
     registerParameter("cylinder_weight", &m_cylinder_weight).setUnit("nm").setNonnegative();
 }
 
-ISample* MultipleLayoutBuilder::buildSample() const
+MultiLayer* MultipleLayoutBuilder::buildSample() const
 {
     MultiLayer* multi_layer = new MultiLayer();
 
diff --git a/Core/StandardSamples/MultipleLayoutBuilder.h b/Core/StandardSamples/MultipleLayoutBuilder.h
index 0782ca3e50602256afe62314a1107aace0e5df49..e290437f92ce4f977079247b13c04eed3e91adcb 100644
--- a/Core/StandardSamples/MultipleLayoutBuilder.h
+++ b/Core/StandardSamples/MultipleLayoutBuilder.h
@@ -29,7 +29,7 @@ class BA_CORE_API_ MultipleLayoutBuilder : public ISampleBuilder
 {
 public:
     MultipleLayoutBuilder();
-    ISample* buildSample() const;
+    MultiLayer* buildSample() const;
 
 protected:
     void init_parameters();
diff --git a/Core/StandardSamples/ParaCrystalBuilder.cpp b/Core/StandardSamples/ParaCrystalBuilder.cpp
index 7aad2f0b544740d019ac5bd2f2341093a8b4be42..bb304159f4b67c58fe7009615ac9e000c549e8d5 100644
--- a/Core/StandardSamples/ParaCrystalBuilder.cpp
+++ b/Core/StandardSamples/ParaCrystalBuilder.cpp
@@ -35,7 +35,7 @@ RadialParaCrystalBuilder::RadialParaCrystalBuilder()
     init_parameters();
 }
 
-ISample* RadialParaCrystalBuilder::buildSample() const
+MultiLayer* RadialParaCrystalBuilder::buildSample() const
 {
     MultiLayer* multi_layer = new MultiLayer();
 
@@ -86,7 +86,7 @@ Basic2DParaCrystalBuilder::~Basic2DParaCrystalBuilder()
     delete m_pdf1;
 }
 
-ISample* Basic2DParaCrystalBuilder::buildSample() const
+MultiLayer* Basic2DParaCrystalBuilder::buildSample() const
 {
     const IFTDistribution2D* pdf2 = getFTDistribution2D();
     MultiLayer* multi_layer = new MultiLayer();
@@ -138,7 +138,7 @@ HexParaCrystalBuilder::HexParaCrystalBuilder()
     init_parameters();
 }
 
-ISample* HexParaCrystalBuilder::buildSample() const
+MultiLayer* HexParaCrystalBuilder::buildSample() const
 {
     MultiLayer* multi_layer = new MultiLayer();
 
@@ -184,7 +184,7 @@ void HexParaCrystalBuilder::init_parameters()
 // RectParaCrystalBuilder
 // -----------------------------------------------------------------------------
 
-ISample* RectParaCrystalBuilder::buildSample() const
+MultiLayer* RectParaCrystalBuilder::buildSample() const
 {
     MultiLayer* multi_layer = new MultiLayer();
 
@@ -223,7 +223,7 @@ ISample* RectParaCrystalBuilder::buildSample() const
 // IsGISAXS08BBuilder
 // -----------------------------------------------------------------------------
 
-ISample* IsGISAXS08BBuilder::buildSample() const
+MultiLayer* IsGISAXS08BBuilder::buildSample() const
 {
     MultiLayer* multi_layer = new MultiLayer();
 
diff --git a/Core/StandardSamples/ParaCrystalBuilder.h b/Core/StandardSamples/ParaCrystalBuilder.h
index 98e00ae76ec93a463ff0fa1cce49a2c48564f764..b3f67f73dfbecba4b61c787cf19c00a161761823 100644
--- a/Core/StandardSamples/ParaCrystalBuilder.h
+++ b/Core/StandardSamples/ParaCrystalBuilder.h
@@ -29,7 +29,7 @@ class BA_CORE_API_ RadialParaCrystalBuilder : public ISampleBuilder
 {
 public:
     RadialParaCrystalBuilder();
-    ISample* buildSample() const;
+    MultiLayer* buildSample() const;
 
 protected:
     void init_parameters();
@@ -52,7 +52,7 @@ class BA_CORE_API_ Basic2DParaCrystalBuilder : public ISampleBuilder
 public:
     Basic2DParaCrystalBuilder();
     virtual ~Basic2DParaCrystalBuilder();
-    virtual ISample* buildSample() const;
+    virtual MultiLayer* buildSample() const;
 private:
     IFTDistribution2D* m_pdf1;
 };
@@ -65,7 +65,7 @@ class BA_CORE_API_ HexParaCrystalBuilder : public ISampleBuilder
 {
 public:
     HexParaCrystalBuilder();
-    virtual ISample* buildSample() const;
+    virtual MultiLayer* buildSample() const;
 
 protected:
     virtual void init_parameters();
@@ -87,7 +87,7 @@ class BA_CORE_API_ RectParaCrystalBuilder : public ISampleBuilder
 {
 public:
     RectParaCrystalBuilder(){}
-    virtual ISample* buildSample() const;
+    virtual MultiLayer* buildSample() const;
 };
 
 //! @class IsGISAXS08BBuilder
@@ -99,7 +99,7 @@ class BA_CORE_API_ IsGISAXS08BBuilder : public ISampleBuilder
 {
 public:
     IsGISAXS08BBuilder(){}
-    virtual ISample* buildSample() const;
+    virtual MultiLayer* buildSample() const;
 };
 
 #endif // PARACRYSTALBUILDER_H
diff --git a/Core/StandardSamples/ParticleCompositionBuilder.cpp b/Core/StandardSamples/ParticleCompositionBuilder.cpp
index eabec7e094313516bda59cbfb53096fce187ddb0..2bb72a0425355837fcc7d5e2b6d00241c32a7b2e 100644
--- a/Core/StandardSamples/ParticleCompositionBuilder.cpp
+++ b/Core/StandardSamples/ParticleCompositionBuilder.cpp
@@ -27,7 +27,7 @@
 
 // --- ParticleCompositionBuilder ---
 
-ISample* ParticleCompositionBuilder::buildSample() const
+MultiLayer* ParticleCompositionBuilder::buildSample() const
 {
     MultiLayer* multi_layer = new MultiLayer();
 
diff --git a/Core/StandardSamples/ParticleCompositionBuilder.h b/Core/StandardSamples/ParticleCompositionBuilder.h
index 89f93defdd0d092b60c758b1128c4d920e5102ff..0b0ece8d306dceef1b9fb50fbd091286cf41136d 100644
--- a/Core/StandardSamples/ParticleCompositionBuilder.h
+++ b/Core/StandardSamples/ParticleCompositionBuilder.h
@@ -26,8 +26,7 @@ class BA_CORE_API_ ParticleCompositionBuilder : public ISampleBuilder
 {
 public:
     ParticleCompositionBuilder(){}
-    ISample *buildSample() const;
-
+    MultiLayer *buildSample() const;
 };
 
 #endif // PARTICLECOMPOSITIONBUILDER_H
diff --git a/Core/StandardSamples/ParticleDistributionsBuilder.cpp b/Core/StandardSamples/ParticleDistributionsBuilder.cpp
index 94388e82805b06ee2869b0c5ac45a4273a2e9857..a1a69cee833170317ff91c5ad917bcb2723b2963 100644
--- a/Core/StandardSamples/ParticleDistributionsBuilder.cpp
+++ b/Core/StandardSamples/ParticleDistributionsBuilder.cpp
@@ -43,9 +43,9 @@ void CylindersWithSizeDistributionBuilder::init_parameters()
 }
 
 
-ISample *CylindersWithSizeDistributionBuilder::buildSample() const
+MultiLayer* CylindersWithSizeDistributionBuilder::buildSample() const
 {
-    MultiLayer *multi_layer = new MultiLayer();
+    MultiLayer* multi_layer = new MultiLayer();
 
     HomogeneousMaterial air_material("Air", 0.0, 0.0);
     HomogeneousMaterial particle_material("Particle", 6e-4, 2e-8);
@@ -102,9 +102,9 @@ void TwoTypesCylindersDistributionBuilder::init_parameters()
 }
 
 
-ISample *TwoTypesCylindersDistributionBuilder::buildSample() const
+MultiLayer* TwoTypesCylindersDistributionBuilder::buildSample() const
 {
-    MultiLayer *multi_layer = new MultiLayer();
+    MultiLayer* multi_layer = new MultiLayer();
 
     HomogeneousMaterial air_material("Air", 0.0, 0.0);
     HomogeneousMaterial particle_material("Particle", 6e-4, 2e-8);
diff --git a/Core/StandardSamples/ParticleDistributionsBuilder.h b/Core/StandardSamples/ParticleDistributionsBuilder.h
index c82392e38bbcb376d2439c3a17bd94e15cb47f45..04838b95b42022c5b0fcf163f17b90691d839c76 100644
--- a/Core/StandardSamples/ParticleDistributionsBuilder.h
+++ b/Core/StandardSamples/ParticleDistributionsBuilder.h
@@ -18,15 +18,14 @@
 
 #include "ISampleBuilder.h"
 
-//! @class CylindersWithSizeDistributionBuilder
+//! Cylinders in BA with size distributions (IsGISAXS example #3, part II).
 //! @ingroup standard_samples
-//! @brief Cylinders in BA with size distributions (IsGISAXS example #3, part II)
 
 class CylindersWithSizeDistributionBuilder : public ISampleBuilder
 {
 public:
     CylindersWithSizeDistributionBuilder();
-    ISample *buildSample() const;
+    MultiLayer* buildSample() const;
 
 protected:
     void init_parameters();
@@ -37,16 +36,14 @@ private:
 };
 
 
-//! @class TwoTypesCylindersDistributionBuilder
+//! Builds mixture of cylinder particles with different size distribution (IsGISAXS example #2)
 //! @ingroup standard_samples
-//! @brief Builds sample: mixture cylinder particles with different size
-//! distribution (IsGISAXS example #2)
 
 class BA_CORE_API_ TwoTypesCylindersDistributionBuilder : public ISampleBuilder
 {
 public:
     TwoTypesCylindersDistributionBuilder();
-    ISample *buildSample() const;
+    MultiLayer* buildSample() const;
 
 protected:
     void init_parameters();
@@ -60,5 +57,4 @@ private:
     double m_sigma2_ratio;
 };
 
-
 #endif // PARTICLEDISTRIBUTIONSBUILDER_H
diff --git a/Core/StandardSamples/ParticleInTheAirBuilder.cpp b/Core/StandardSamples/ParticleInTheAirBuilder.cpp
index 8731f0e74e2b0e87b4f64e47104aaf7c9fb1a8d6..d44b4fa95bc3d9084d0101e39876035306d5d49c 100644
--- a/Core/StandardSamples/ParticleInTheAirBuilder.cpp
+++ b/Core/StandardSamples/ParticleInTheAirBuilder.cpp
@@ -22,7 +22,7 @@
 #include "ParticleLayout.h"
 #include "RealParameter.h"
 
-ISample* ParticleInTheAirBuilder::buildSample() const
+MultiLayer* ParticleInTheAirBuilder::buildSample() const
 {
     const IFormFactor* form_factor = getFormFactor();
     if(!form_factor)
diff --git a/Core/StandardSamples/ParticleInTheAirBuilder.h b/Core/StandardSamples/ParticleInTheAirBuilder.h
index 217e910f317d4af8810da7210528d62d0c524e4a..bbe4943fce8430f61f3db038f5d66c8f80d54362 100644
--- a/Core/StandardSamples/ParticleInTheAirBuilder.h
+++ b/Core/StandardSamples/ParticleInTheAirBuilder.h
@@ -29,7 +29,7 @@ class BA_CORE_API_ ParticleInTheAirBuilder : public ISampleBuilder
 public:
     ParticleInTheAirBuilder() {}
     virtual ~ParticleInTheAirBuilder() {}
-    virtual ISample* buildSample() const;
+    virtual MultiLayer* buildSample() const;
 };
 
 #endif // PARTICLEINTHEAIRBUILDER_H
diff --git a/Core/StandardSamples/RipplesBuilder.cpp b/Core/StandardSamples/RipplesBuilder.cpp
index f2b67da61cd096aabab8cb1f3a5df3d5d1d4a361..3f4c669187ea64ac9fa12a5e5f63032be5ab90b3 100644
--- a/Core/StandardSamples/RipplesBuilder.cpp
+++ b/Core/StandardSamples/RipplesBuilder.cpp
@@ -44,7 +44,7 @@ void CosineRippleBuilder::init_parameters()
     registerParameter("interf_width", &m_interf_width).setUnit("nm").setNonnegative();
 }
 
-ISample* CosineRippleBuilder::buildSample() const
+MultiLayer* CosineRippleBuilder::buildSample() const
 {
     MultiLayer* p_multi_layer = new MultiLayer();
 
@@ -98,7 +98,7 @@ void TriangularRippleBuilder::init_parameters()
     registerParameter("interf_width", &m_interf_width).setUnit("nm").setNonnegative();
 }
 
-ISample* TriangularRippleBuilder::buildSample() const
+MultiLayer* TriangularRippleBuilder::buildSample() const
 {
     MultiLayer* p_multi_layer = new MultiLayer();
 
diff --git a/Core/StandardSamples/RipplesBuilder.h b/Core/StandardSamples/RipplesBuilder.h
index 61f51158a8a4b2bf274a56e4175f95a2b2d6954b..72f5a309abe96c9de2d1b906343e1bab98b635cf 100644
--- a/Core/StandardSamples/RipplesBuilder.h
+++ b/Core/StandardSamples/RipplesBuilder.h
@@ -26,7 +26,7 @@ class BA_CORE_API_ CosineRippleBuilder : public ISampleBuilder
 {
 public:
     CosineRippleBuilder();
-    ISample* buildSample() const;
+    MultiLayer* buildSample() const;
 
 protected:
     void init_parameters();
@@ -50,7 +50,7 @@ class BA_CORE_API_ TriangularRippleBuilder : public ISampleBuilder
 {
 public:
     TriangularRippleBuilder();
-    ISample* buildSample() const;
+    MultiLayer* buildSample() const;
 
 protected:
     void init_parameters();
diff --git a/Core/StandardSamples/RotatedPyramidsBuilder.cpp b/Core/StandardSamples/RotatedPyramidsBuilder.cpp
index 894f104e87ec19cc311d7bfff33e255cbd45165b..7058d15611428e5bc13e6e0c24df1291d351c75c 100644
--- a/Core/StandardSamples/RotatedPyramidsBuilder.cpp
+++ b/Core/StandardSamples/RotatedPyramidsBuilder.cpp
@@ -40,7 +40,7 @@ void RotatedPyramidsBuilder::init_parameters()
     registerParameter("zangle", &m_zangle).setUnit("rad");
 }
 
-ISample* RotatedPyramidsBuilder::buildSample() const
+MultiLayer* RotatedPyramidsBuilder::buildSample() const
 {
     MultiLayer* multi_layer = new MultiLayer();
 
diff --git a/Core/StandardSamples/RotatedPyramidsBuilder.h b/Core/StandardSamples/RotatedPyramidsBuilder.h
index 46216cb99ad6b657da99d47da9785060d043529e..186b734b9de7d3959399ce950e2f1cf2f041dae7 100644
--- a/Core/StandardSamples/RotatedPyramidsBuilder.h
+++ b/Core/StandardSamples/RotatedPyramidsBuilder.h
@@ -18,16 +18,14 @@
 
 #include "ISampleBuilder.h"
 
-//! @class RotatedPyramidsBuilder
+//! Builds sample: Pyramids, rotated pyramids on top of substrate (IsGISAXS example #9)
 //! @ingroup standard_samples
-//! @brief Builds sample:  Pyramids, rotated pyramids on top of substrate
-//!(IsGISAXS example #9)
 
 class BA_CORE_API_ RotatedPyramidsBuilder : public ISampleBuilder
 {
 public:
     RotatedPyramidsBuilder();
-    ISample *buildSample() const;
+    MultiLayer* buildSample() const;
 
 protected:
     void init_parameters();
@@ -39,5 +37,4 @@ private:
     double m_zangle;
 };
 
-
 #endif // ROTATEDPYRAMIDSBUILDER_H
diff --git a/Core/StandardSamples/SampleBuilderFactory.cpp b/Core/StandardSamples/SampleBuilderFactory.cpp
index 72b3660f5a38c0477929b7758ec05b405c6218a2..690c4802aad2831860bf20106b7a917e274978b1 100644
--- a/Core/StandardSamples/SampleBuilderFactory.cpp
+++ b/Core/StandardSamples/SampleBuilderFactory.cpp
@@ -229,7 +229,7 @@ SampleBuilderFactory::SampleBuilderFactory()
 
 //! Retrieves a SampleBuilder from the registry, does the build, and returns the result.
 
-ISample *SampleBuilderFactory::createSample(const std::string& name)
+MultiLayer* SampleBuilderFactory::createSample(const std::string& name)
 {
     return createItem(name)->buildSample();
 }
diff --git a/Core/StandardSamples/SampleBuilderFactory.h b/Core/StandardSamples/SampleBuilderFactory.h
index e925c25aa9e77cc926a9108f8b87f55f8f5c6f62..42e37861939270cd4a6e37c55e9ce42268abfc9a 100644
--- a/Core/StandardSamples/SampleBuilderFactory.h
+++ b/Core/StandardSamples/SampleBuilderFactory.h
@@ -19,7 +19,7 @@
 #include "IFactory.h"
 #include "ISampleBuilder.h"
 
-class ISample;
+class MultiLayer;
 
 //! @class SampleBuilderFactory
 //! @ingroup standard_samples
@@ -29,7 +29,7 @@ class BA_CORE_API_ SampleBuilderFactory : public IFactory<std::string, ISampleBu
 {
 public:
     SampleBuilderFactory();
-    ISample* createSample(const std::string& name);
+    MultiLayer* createSample(const std::string& name);
 };
 
 #endif // SAMPLEBUILDERFACTORY_H
diff --git a/Core/StandardSamples/SizeDistributionModelsBuilder.cpp b/Core/StandardSamples/SizeDistributionModelsBuilder.cpp
index ea22c233de3815a2dbd2992098fa731c981700d4..a2d98e7d0cab7e12f10135180bdececa0cde31f2 100644
--- a/Core/StandardSamples/SizeDistributionModelsBuilder.cpp
+++ b/Core/StandardSamples/SizeDistributionModelsBuilder.cpp
@@ -29,7 +29,7 @@
 
 using namespace BornAgain;
 
-ISample* SizeDistributionDAModelBuilder::buildSample() const
+MultiLayer* SizeDistributionDAModelBuilder::buildSample() const
 {
         MultiLayer* multi_layer = new MultiLayer();
 
@@ -72,7 +72,7 @@ ISample* SizeDistributionDAModelBuilder::buildSample() const
 
 // ----------------------------------------------------------------------------
 
-ISample* SizeDistributionLMAModelBuilder::buildSample() const
+MultiLayer* SizeDistributionLMAModelBuilder::buildSample() const
 {
     MultiLayer* multi_layer = new MultiLayer();
 
@@ -125,7 +125,7 @@ ISample* SizeDistributionLMAModelBuilder::buildSample() const
 
 // ----------------------------------------------------------------------------
 
-ISample* SizeDistributionSSCAModelBuilder::buildSample() const
+MultiLayer* SizeDistributionSSCAModelBuilder::buildSample() const
 {
     MultiLayer *multi_layer = new MultiLayer();
 
@@ -171,7 +171,7 @@ ISample* SizeDistributionSSCAModelBuilder::buildSample() const
 
 // ----------------------------------------------------------------------------
 
-ISample* CylindersInSSCABuilder::buildSample() const
+MultiLayer* CylindersInSSCABuilder::buildSample() const
 {
     MultiLayer* multi_layer = new MultiLayer();
 
diff --git a/Core/StandardSamples/SizeDistributionModelsBuilder.h b/Core/StandardSamples/SizeDistributionModelsBuilder.h
index bbe0dfa34ce6f7a0cabffad96a193ff3cc872d9d..614426770646b08a83bd6c36e06dabd7bfcc430e 100644
--- a/Core/StandardSamples/SizeDistributionModelsBuilder.h
+++ b/Core/StandardSamples/SizeDistributionModelsBuilder.h
@@ -18,19 +18,17 @@
 
 #include "ISampleBuilder.h"
 
-//! @class SizeDistributionDAModelBuilder
+//! Creates the sample demonstrating size distribution model in decoupling approximation.
 //! @ingroup standard_samples
-//! @brief Creates the sample demonstrating size distribution model in decoupling approximation.
 //! Equivalent of Examples/python/simulation/ex03_InterferenceFunctions/ApproximationDA.py
 
 class BA_CORE_API_ SizeDistributionDAModelBuilder : public ISampleBuilder
 {
 public:
     SizeDistributionDAModelBuilder(){}
-    ISample *buildSample() const;
+    MultiLayer* buildSample() const;
 };
 
-//! @class SizeDistributionLMAModelBuilder
 //! @ingroup standard_samples
 //! @brief Creates the sample demonstrating size distribution model in local monodisperse
 //! approximation.
@@ -40,33 +38,28 @@ class BA_CORE_API_ SizeDistributionLMAModelBuilder : public ISampleBuilder
 {
 public:
     SizeDistributionLMAModelBuilder(){}
-    ISample *buildSample() const;
+    MultiLayer* buildSample() const;
 };
 
-//! @class SizeDistributionSSCAModelBuilder
+//! Creates the sample demonstrating size distribution model in size space coupling approximation.
 //! @ingroup standard_samples
-//! @brief Creates the sample demonstrating size distribution model in size space coupling
-//! approximation.
 //! Equivalent of Examples/python/simulation/ex03_InterferenceFunctions/ApproximationSSCA.py
 
 class BA_CORE_API_ SizeDistributionSSCAModelBuilder : public ISampleBuilder
 {
 public:
     SizeDistributionSSCAModelBuilder(){}
-    ISample *buildSample() const;
+    MultiLayer* buildSample() const;
 };
 
-//! @class CylindersInSSCABuilder
+//! Builds sample: size spacing correlation approximation (IsGISAXS example #15).
 //! @ingroup standard_samples
-//! @brief Builds sample: size spacing correlation approximation
-//! (IsGISAXS example #15)
 
 class BA_CORE_API_ CylindersInSSCABuilder : public ISampleBuilder
 {
 public:
     CylindersInSSCABuilder(){}
-    ISample *buildSample() const;
+    MultiLayer* buildSample() const;
 };
 
-
 #endif // SIZEDISTRIBUTIONMODELSBUILDER_H
diff --git a/Core/StandardSamples/TransformationsBuilder.cpp b/Core/StandardSamples/TransformationsBuilder.cpp
index 6b3463aebf9d7d3878b14c2ba911b43a000ceb17..ae224f7bb4d8b93d60642fbe45813147b5fee748 100644
--- a/Core/StandardSamples/TransformationsBuilder.cpp
+++ b/Core/StandardSamples/TransformationsBuilder.cpp
@@ -23,7 +23,7 @@
 #include "RealParameter.h"
 #include "Units.h"
 
-ISample* TransformBoxBuilder::buildSample() const
+MultiLayer* TransformBoxBuilder::buildSample() const
 {
     HomogeneousMaterial mAmbience("Air", 0.0, 0.0);
     HomogeneousMaterial mMiddle("Teflon", 2.900e-6, 6.019e-9);
diff --git a/Core/StandardSamples/TransformationsBuilder.h b/Core/StandardSamples/TransformationsBuilder.h
index c390e79a870488814eb5b99bd79c09add27213b2..ebdd4c06474e16840adf3f9998b4e41e7f525149 100644
--- a/Core/StandardSamples/TransformationsBuilder.h
+++ b/Core/StandardSamples/TransformationsBuilder.h
@@ -18,16 +18,14 @@
 
 #include "ISampleBuilder.h"
 
-//! @class TransformBoxBuilder
+//! Rotated box in 3 layers system.
 //! @ingroup standard_samples
-//! @brief Rotated box in 3 layers system
 
 class BA_CORE_API_ TransformBoxBuilder : public ISampleBuilder
 {
 public:
     TransformBoxBuilder(){}
-    ISample *buildSample() const;
+    MultiLayer* buildSample() const;
 };
 
-
 #endif // TRANSFORMATIONSBUILDER_H
diff --git a/Core/StandardSamples/TwoDimLatticeBuilder.cpp b/Core/StandardSamples/TwoDimLatticeBuilder.cpp
index 14292acb0452f201cb099a7062db1dfd6de10c48..fc4a70777347328f538ee683d1b4d9c8a417d36c 100644
--- a/Core/StandardSamples/TwoDimLatticeBuilder.cpp
+++ b/Core/StandardSamples/TwoDimLatticeBuilder.cpp
@@ -28,9 +28,9 @@
 // -----------------------------------------------------------------------------
 // lattice #1:
 // -----------------------------------------------------------------------------
-ISample *SquareLatticeBuilder::buildSample() const
+MultiLayer* SquareLatticeBuilder::buildSample() const
 {
-    MultiLayer *multi_layer = new MultiLayer();
+    MultiLayer* multi_layer = new MultiLayer();
 
     HomogeneousMaterial particle_material("Particle", 6e-4, 2e-8);
     HomogeneousMaterial air_material("Air", 0.0, 0.0);
@@ -65,9 +65,9 @@ ISample *SquareLatticeBuilder::buildSample() const
 // -----------------------------------------------------------------------------
 // lattice #2: centered
 // -----------------------------------------------------------------------------
-ISample *CenteredSquareLatticeBuilder::buildSample() const
+MultiLayer* CenteredSquareLatticeBuilder::buildSample() const
 {
-    MultiLayer *multi_layer = new MultiLayer();
+    MultiLayer* multi_layer = new MultiLayer();
 
     HomogeneousMaterial particle_material("Particle", 6e-4, 2e-8);
     HomogeneousMaterial air_material("Air", 0.0, 0.0);
@@ -107,9 +107,9 @@ ISample *CenteredSquareLatticeBuilder::buildSample() const
 // -----------------------------------------------------------------------------
 // lattice #3: rotated
 // -----------------------------------------------------------------------------
-ISample *RotatedSquareLatticeBuilder::buildSample() const
+MultiLayer* RotatedSquareLatticeBuilder::buildSample() const
 {
-    MultiLayer *multi_layer = new MultiLayer();
+    MultiLayer* multi_layer = new MultiLayer();
 
     HomogeneousMaterial particle_material("Particle", 6e-4, 2e-8);
     HomogeneousMaterial air_material("Air", 0.0, 0.0);
diff --git a/Core/StandardSamples/TwoDimLatticeBuilder.h b/Core/StandardSamples/TwoDimLatticeBuilder.h
index 7fb6cff4b3b2e3c34d76bbe2ade1d66ca8f17439..a3e3aa82bf472edd124edc3dc6bb00b6094c1c9b 100644
--- a/Core/StandardSamples/TwoDimLatticeBuilder.h
+++ b/Core/StandardSamples/TwoDimLatticeBuilder.h
@@ -18,38 +18,36 @@
 
 #include "ISampleBuilder.h"
 
-//! @class SquareLatticeBuilder
+//! Builds sample: 2D lattice with different disorder (IsGISAXS example #6).
 //! @ingroup standard_samples
-//! @brief Builds sample: 2D lattice with different disorder (IsGISAXS example #6)
 
 class BA_CORE_API_ SquareLatticeBuilder : public ISampleBuilder
 {
 public:
     SquareLatticeBuilder(){}
-    ISample *buildSample() const;
+    MultiLayer* buildSample() const;
 };
 
 
-//! @class CenteredSquareLatticeBuilder
+//! Builds sample: 2D lattice with different disorder (IsGISAXS example #6).
 //! @ingroup standard_samples
-//! @brief Builds sample: 2D lattice with different disorder (IsGISAXS example #6)
 
 class BA_CORE_API_ CenteredSquareLatticeBuilder : public ISampleBuilder
 {
 public:
     CenteredSquareLatticeBuilder(){}
-    ISample *buildSample() const;
+    MultiLayer* buildSample() const;
 };
 
-//! @class RotatedSquareLatticeBuilder
+
+//! Builds sample: 2D lattice with different disorder (IsGISAXS example #6).
 //! @ingroup standard_samples
-//! @brief Builds sample: 2D lattice with different disorder (IsGISAXS example #6)
 
 class BA_CORE_API_ RotatedSquareLatticeBuilder : public ISampleBuilder
 {
 public:
     RotatedSquareLatticeBuilder(){}
-    ISample *buildSample() const;
+    MultiLayer* buildSample() const;
 };
 
 #endif // TWODIMLATTICEBUILDER_H
diff --git a/GUI/coregui/Models/ApplicationModels.cpp b/GUI/coregui/Models/ApplicationModels.cpp
index 7a476896ed650caa01dde3845243a310e5e83917..3e5d75f8a73fe2ae246304a905c4e73554353844 100644
--- a/GUI/coregui/Models/ApplicationModels.cpp
+++ b/GUI/coregui/Models/ApplicationModels.cpp
@@ -25,6 +25,7 @@
 #include "JobModel.h"
 #include "MaterialModel.h"
 #include "MaterialSvc.h"
+#include "MultiLayer.h"
 #include "RealDataModel.h"
 #include "SampleBuilderFactory.h"
 #include "SampleModel.h"
diff --git a/GUI/coregui/Models/GUIExamplesFactory.cpp b/GUI/coregui/Models/GUIExamplesFactory.cpp
index 443bdc9f191da472c642e6de6f69fa3325aba5a8..6c09a9cda17d232f3e65d3d4efe3cdd1a98d1414 100644
--- a/GUI/coregui/Models/GUIExamplesFactory.cpp
+++ b/GUI/coregui/Models/GUIExamplesFactory.cpp
@@ -16,7 +16,7 @@
 
 #include "GUIExamplesFactory.h"
 #include "GUIObjectBuilder.h"
-#include "ISample.h"
+#include "MultiLayer.h"
 #include "SampleBuilderFactory.h"
 #include <memory>
 
diff --git a/GUI/coregui/Models/GUIObjectBuilder.cpp b/GUI/coregui/Models/GUIObjectBuilder.cpp
index 2b732792686fb44217b6f89fbc3da71e985bed4b..f2d3e9a988a35a294000ea85f354d8fe8dcbd0b4 100644
--- a/GUI/coregui/Models/GUIObjectBuilder.cpp
+++ b/GUI/coregui/Models/GUIObjectBuilder.cpp
@@ -28,6 +28,7 @@
 #include "GUIHelpers.h"
 #include "IMaterial.h"
 #include "InstrumentModel.h"
+#include "ISampleBuilder.h"
 #include "Layer.h"
 #include "LayerItem.h"
 #include "MaterialModel.h"
diff --git a/GUI/coregui/Views/MaskWidgets/MaskEditor.cpp b/GUI/coregui/Views/MaskWidgets/MaskEditor.cpp
index b191129f78a28ad6d2d5ad6a308988cd68107dfe..27d1a6feb3bbf008245aafa54cf887ba9faba8e0 100644
--- a/GUI/coregui/Views/MaskWidgets/MaskEditor.cpp
+++ b/GUI/coregui/Views/MaskWidgets/MaskEditor.cpp
@@ -17,7 +17,6 @@
 #include "MaskEditor.h"
 #include "GISASSimulation.h"
 #include "GUIHelpers.h"
-#include "ISample.h"
 #include "IntensityDataItem.h"
 #include "MaskEditorActions.h"
 #include "MaskEditorCanvas.h"
@@ -26,6 +25,7 @@
 #include "MaskGraphicsScene.h"
 #include "MaskGraphicsView.h"
 #include "MaskItems.h"
+#include "MultiLayer.h"
 #include "SampleBuilderFactory.h"
 #include "SessionModel.h"
 #include "SimulationFactory.h"
@@ -94,7 +94,8 @@ void MaskEditor::init_test_model()
     const std::unique_ptr<GISASSimulation> simulation(simRegistry.createItem("BasicGISAS"));
 
     SampleBuilderFactory sampleFactory;
-    const std::unique_ptr<ISample> sample(sampleFactory.createSample("CylindersAndPrismsBuilder"));
+    const std::unique_ptr<MultiLayer> sample(
+        sampleFactory.createSample("CylindersAndPrismsBuilder"));
 
     simulation->setSample(*sample.get());
     simulation->runSimulation();
diff --git a/Tests/Functional/Fit/IMinimizerTest.cpp b/Tests/Functional/Fit/IMinimizerTest.cpp
index 7ea643125eea1cd21928a3bbe556b1bd9d92ee92..31532425800f46313816554af7cf61e28b5024ba 100644
--- a/Tests/Functional/Fit/IMinimizerTest.cpp
+++ b/Tests/Functional/Fit/IMinimizerTest.cpp
@@ -16,7 +16,7 @@
 #include "IMinimizerTest.h"
 #include "FitSuite.h"
 #include "GISASSimulation.h"
-#include "ISample.h"
+#include "MultiLayer.h"
 #include "MinimizerFactory.h"
 #include "MinimizerOptions.h"
 #include "SampleBuilderFactory.h"
@@ -48,7 +48,7 @@ IMinimizerTest::IMinimizerTest(const std::string& minimizer_name,
 
 bool IMinimizerTest::runTest()
 {
-    std::unique_ptr<ISample> sample(createSample());
+    std::unique_ptr<MultiLayer> sample(createSample());
     for (size_t i = 0; i < m_parameters.size(); ++i)
         sample->setParameterValue(m_parameters[i].m_name, m_parameters[i].m_real_value);
 
@@ -97,10 +97,10 @@ std::unique_ptr<FitSuite> IMinimizerTest::createFitSuite()
     return result;
 }
 
-std::unique_ptr<ISample> IMinimizerTest::createSample()
+std::unique_ptr<MultiLayer> IMinimizerTest::createSample()
 {
     SampleBuilderFactory builderFactory;
-    std::unique_ptr<ISample> result(builderFactory.createSample(m_sample_builder_name));
+    std::unique_ptr<MultiLayer> result(builderFactory.createSample(m_sample_builder_name));
     return result;
 }
 
diff --git a/Tests/Functional/Fit/IMinimizerTest.h b/Tests/Functional/Fit/IMinimizerTest.h
index 853d498af7f1a7c9bdfa6412cb6d72fb189eaae4..95ec49cb61ac890a2710ce0ced9b974d68411ee1 100644
--- a/Tests/Functional/Fit/IMinimizerTest.h
+++ b/Tests/Functional/Fit/IMinimizerTest.h
@@ -21,7 +21,7 @@
 #include <memory>
 
 class FitSuite;
-class ISample;
+class MultiLayer;
 class GISASSimulation;
 
 //! @class IMinimizerTest
@@ -32,7 +32,7 @@ class IMinimizerTest : public IFunctionalTest
 {
 public:
     IMinimizerTest(const std::string &minimizer_name,
-                             const std::string &minimizer_algorithm = std::string());
+                   const std::string &minimizer_algorithm = std::string());
     virtual ~IMinimizerTest(){}
 
     bool runTest() final;
@@ -51,7 +51,7 @@ public:
 
 protected:
     virtual std::unique_ptr<FitSuite> createFitSuite();
-    virtual std::unique_ptr<ISample> createSample();
+    virtual std::unique_ptr<MultiLayer> createSample();
     virtual std::unique_ptr<GISASSimulation> createSimulation();
     virtual std::unique_ptr<OutputData<double>> createOutputData(const GISASSimulation* simulation);
 
diff --git a/Tests/UnitTests/Core/2/SpecularSimulationTest.h b/Tests/UnitTests/Core/2/SpecularSimulationTest.h
index ec32ff18457749978f4a8b147b5437a3f1d3d18d..516d20c13b043301af718b342315520d055bbd2a 100644
--- a/Tests/UnitTests/Core/2/SpecularSimulationTest.h
+++ b/Tests/UnitTests/Core/2/SpecularSimulationTest.h
@@ -14,19 +14,10 @@ class SpecularSimulationTest : public ::testing::Test
 {
  protected:
     SpecularSimulationTest();
-
-    class SampleBuilder : public ISampleBuilder
-    {
-    public:
-        virtual ISample *buildSample() const { return new Layer(); }
-    };
-
-    std::shared_ptr<class ISampleBuilder> sample_builder;
     MultiLayer multilayer;
 };
 
 SpecularSimulationTest::SpecularSimulationTest()
-    : sample_builder(new SampleBuilder)
 {
     HomogeneousMaterial mat0("ambience", 0.0, 0.0);
     HomogeneousMaterial mat1("PartA", 5e-6, 0.0);
@@ -127,8 +118,6 @@ TEST_F(SpecularSimulationTest, SimulationClone)
     EXPECT_EQ(size_t(10), clone->getScalarR(0).size());
     EXPECT_EQ(size_t(10), clone->getScalarT(0).size());
     EXPECT_EQ(size_t(10), clone->getScalarKz(0).size());
-
 }
 
-
 #endif // SPECULARSIMULATIONTEST_H
diff --git a/Tests/UnitTests/Core/4/GISASSimulationTest.h b/Tests/UnitTests/Core/4/GISASSimulationTest.h
index c1d151487ac17716c0065a2188dbdecf5ee31fe3..3913470f45d1d74164a02a56fc36f9bb79a666d2 100644
--- a/Tests/UnitTests/Core/4/GISASSimulationTest.h
+++ b/Tests/UnitTests/Core/4/GISASSimulationTest.h
@@ -4,28 +4,18 @@
 #include "GISASSimulation.h"
 #include "OutputData.h"
 #include "Beam.h"
-#include "MultiLayer.h"
+#include "Layer.h"
 #include "ISampleBuilder.h"
 #include "BornAgainNamespace.h"
 #include "Layer.h"
 #include <memory>
 #include <cmath>
 
-
 class GISASSimulationTest : public ::testing::Test
 {
  protected:
     GISASSimulationTest();
     virtual ~GISASSimulationTest();
-
-    class SampleBuilder : public ISampleBuilder
-    {
-    public:
-        virtual ISample *buildSample() const { return new Layer(); }
-    };
-
-    std::shared_ptr<class ISampleBuilder> sample_builder;
-
     GISASSimulation emptySimulation;
     GISASSimulation constructedSimulation;
     OutputData<double> test_data;
@@ -33,7 +23,6 @@ class GISASSimulationTest : public ::testing::Test
 
 
 GISASSimulationTest::GISASSimulationTest()
-    : sample_builder(new SampleBuilder)
 {
     test_data.addAxis(BornAgain::PHI_AXIS_NAME, 10, 0., 10.);
     test_data.addAxis("theta_f", 20, 0., 20.);
@@ -51,7 +40,6 @@ TEST_F(GISASSimulationTest, SimulationInitialState)
     EXPECT_EQ( size_t(1), emptySimulation.getOutputData()->getAllocatedSize());
     EXPECT_EQ( size_t(0), emptySimulation.getOutputData()->getRank());
     EXPECT_TRUE(emptySimulation.getOutputData()->getRank() == emptySimulation.getInstrument().getDetectorDimension() );
-    EXPECT_EQ(nullptr, emptySimulation.getSampleBuilder().get());
 }
 
 
@@ -66,17 +54,7 @@ TEST_F(GISASSimulationTest, SimulationConstruction)
     Layer layer;
     ml.addLayer(layer);
     constructedSimulation.setSample(ml);
-    EXPECT_EQ( size_t(1), dynamic_cast<MultiLayer *>(constructedSimulation.getSample())->getNumberOfLayers());
-    constructedSimulation.setSampleBuilder(sample_builder);
-    EXPECT_EQ( nullptr, constructedSimulation.getSample());
-    EXPECT_EQ( sample_builder.get(), constructedSimulation.getSampleBuilder().get());
-
-    constructedSimulation.prepareSimulation();
-
-    EXPECT_TRUE( nullptr == constructedSimulation.getSample());
-    std::unique_ptr<ISample> sample(constructedSimulation.getSampleBuilder()->buildSample());
-    EXPECT_EQ( std::string("Layer"), sample->getName());
-    EXPECT_EQ( dynamic_cast<Layer *>(sample.get())->getThickness(), 0.);
+    EXPECT_EQ( size_t(1), dynamic_cast<MultiLayer*>(constructedSimulation.getSample())->getNumberOfLayers());
 }
 
 TEST_F(GISASSimulationTest, SimulationInitialStateOfClone)
@@ -96,7 +74,6 @@ TEST_F(GISASSimulationTest, SimulationClone)
     GISASSimulation *originalSimulation = new GISASSimulation();
     originalSimulation->setBeamIntensity(10);
     originalSimulation->setDetectorParameters(test_data);
-    originalSimulation->setSampleBuilder(sample_builder);
     GISASSimulation *clonedSimulation = originalSimulation->clone();
     delete originalSimulation;
 
diff --git a/auto/Wrap/libBornAgainCore.py b/auto/Wrap/libBornAgainCore.py
index a16e461350c4f8d2427ba663e9bfc9055b9334b3..2a5ed6542e8b44b3eb535a27a8213e5d60fb7e0f 100644
--- a/auto/Wrap/libBornAgainCore.py
+++ b/auto/Wrap/libBornAgainCore.py
@@ -6577,7 +6577,7 @@ class ISampleBuilder(IParameterized):
 
     def buildSample(self):
         """
-        buildSample(ISampleBuilder self) -> ISample
+        buildSample(ISampleBuilder self) -> MultiLayer
 
         virtual ISample* ISampleBuilder::buildSample() const =0
 
@@ -14884,7 +14884,7 @@ class Simulation(ICloneable, IParameterized):
 
     def setSample(self, sample):
         """
-        setSample(Simulation self, ISample sample)
+        setSample(Simulation self, MultiLayer sample)
 
         void Simulation::setSample(const ISample &sample)
 
@@ -14898,7 +14898,7 @@ class Simulation(ICloneable, IParameterized):
 
     def getSample(self):
         """
-        getSample(Simulation self) -> ISample
+        getSample(Simulation self) -> MultiLayer
 
         ISample* Simulation::getSample() const
 
@@ -15188,7 +15188,7 @@ class GISASSimulation(Simulation):
     def __init__(self, *args):
         """
         __init__(GISASSimulation self) -> GISASSimulation
-        __init__(GISASSimulation self, ISample p_sample) -> GISASSimulation
+        __init__(GISASSimulation self, MultiLayer p_sample) -> GISASSimulation
         __init__(GISASSimulation self, std::shared_ptr< ISampleBuilder > p_sample_builder) -> GISASSimulation
 
         GISASSimulation::GISASSimulation(std::shared_ptr< ISampleBuilder > p_sample_builder)
@@ -21221,7 +21221,7 @@ class OffSpecSimulation(Simulation):
     def __init__(self, *args):
         """
         __init__(OffSpecSimulation self) -> OffSpecSimulation
-        __init__(OffSpecSimulation self, ISample p_sample) -> OffSpecSimulation
+        __init__(OffSpecSimulation self, MultiLayer p_sample) -> OffSpecSimulation
         __init__(OffSpecSimulation self, std::shared_ptr< ISampleBuilder > p_sample_builder) -> OffSpecSimulation
 
         OffSpecSimulation::OffSpecSimulation(std::shared_ptr< class ISampleBuilder > p_sample_builder)
diff --git a/auto/Wrap/libBornAgainCore_wrap.cpp b/auto/Wrap/libBornAgainCore_wrap.cpp
index c527045af960e5cee2c894ea74683459a8988511..e9448bf9f409d8c3e8ae578d2dfb5e9940acc2d4 100644
--- a/auto/Wrap/libBornAgainCore_wrap.cpp
+++ b/auto/Wrap/libBornAgainCore_wrap.cpp
@@ -7659,12 +7659,12 @@ void SwigDirector_ISampleBuilder::print(std::ostream &ostr) const {
 }
 
 
-ISample *SwigDirector_ISampleBuilder::buildSample() const {
+MultiLayer *SwigDirector_ISampleBuilder::buildSample() const {
   void *swig_argp ;
   int swig_res ;
   swig_owntype own ;
   
-  ISample *c_result;
+  MultiLayer *c_result;
   if (!swig_get_self()) {
     Swig::DirectorException::raise("'self' uninitialized, maybe you forgot to call ISampleBuilder.__init__.");
   }
@@ -7682,13 +7682,13 @@ ISample *SwigDirector_ISampleBuilder::buildSample() const {
       Swig::DirectorMethodException::raise("Error detected when calling 'ISampleBuilder.buildSample'");
     }
   }
-  swig_res = SWIG_ConvertPtrAndOwn(result, &swig_argp, SWIGTYPE_p_ISample,  0  | SWIG_POINTER_DISOWN, &own);
+  swig_res = SWIG_ConvertPtrAndOwn(result, &swig_argp, SWIGTYPE_p_MultiLayer,  0  | SWIG_POINTER_DISOWN, &own);
   if (!SWIG_IsOK(swig_res)) {
-    Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError(swig_res)), "in output value of type '""ISample *""'");
+    Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError(swig_res)), "in output value of type '""MultiLayer *""'");
   }
-  c_result = reinterpret_cast< ISample * >(swig_argp);
+  c_result = reinterpret_cast< MultiLayer * >(swig_argp);
   swig_acquire_ownership_obj(SWIG_as_voidptr(c_result), own /* & TODO: SWIG_POINTER_OWN */);
-  return (ISample *) c_result;
+  return (MultiLayer *) c_result;
 }
 
 
@@ -43001,7 +43001,7 @@ SWIGINTERN PyObject *_wrap_ISampleBuilder_buildSample(PyObject *SWIGUNUSEDPARM(s
   PyObject * obj0 = 0 ;
   Swig::Director *director = 0;
   bool upcall = false;
-  ISample *result = 0 ;
+  MultiLayer *result = 0 ;
   
   if (!PyArg_ParseTuple(args,(char *)"O:ISampleBuilder_buildSample",&obj0)) SWIG_fail;
   {
@@ -43025,18 +43025,12 @@ SWIGINTERN PyObject *_wrap_ISampleBuilder_buildSample(PyObject *SWIGUNUSEDPARM(s
     if (upcall) {
       Swig::DirectorPureVirtualException::raise("ISampleBuilder::buildSample");
     } else {
-      result = (ISample *)((ISampleBuilder const *)arg1)->buildSample();
+      result = (MultiLayer *)((ISampleBuilder const *)arg1)->buildSample();
     }
   } catch (Swig::DirectorException&) {
     SWIG_fail;
   }
-  director = SWIG_DIRECTOR_CAST(result);
-  if (director) {
-    resultobj = director->swig_get_self();
-    Py_INCREF(resultobj);
-  } else {
-    resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ISample, 0 |  0 );
-  }
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_MultiLayer, 0 |  0 );
   if (director) {
     SWIG_AcquirePtr(resultobj, director->swig_release_ownership(SWIG_as_voidptr(result)));
   }
@@ -68281,7 +68275,7 @@ fail:
 SWIGINTERN PyObject *_wrap_Simulation_setSample(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
   Simulation *arg1 = (Simulation *) 0 ;
-  ISample *arg2 = 0 ;
+  MultiLayer *arg2 = 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   void *argp2 = 0 ;
@@ -68295,15 +68289,15 @@ SWIGINTERN PyObject *_wrap_Simulation_setSample(PyObject *SWIGUNUSEDPARM(self),
     SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Simulation_setSample" "', argument " "1"" of type '" "Simulation *""'"); 
   }
   arg1 = reinterpret_cast< Simulation * >(argp1);
-  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_ISample,  0  | 0);
+  res2 = SWIG_ConvertPtr(obj1, &argp2, SWIGTYPE_p_MultiLayer,  0  | 0);
   if (!SWIG_IsOK(res2)) {
-    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Simulation_setSample" "', argument " "2"" of type '" "ISample const &""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "Simulation_setSample" "', argument " "2"" of type '" "MultiLayer const &""'"); 
   }
   if (!argp2) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Simulation_setSample" "', argument " "2"" of type '" "ISample const &""'"); 
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "Simulation_setSample" "', argument " "2"" of type '" "MultiLayer const &""'"); 
   }
-  arg2 = reinterpret_cast< ISample * >(argp2);
-  (arg1)->setSample((ISample const &)*arg2);
+  arg2 = reinterpret_cast< MultiLayer * >(argp2);
+  (arg1)->setSample((MultiLayer const &)*arg2);
   resultobj = SWIG_Py_Void();
   return resultobj;
 fail:
@@ -68317,8 +68311,7 @@ SWIGINTERN PyObject *_wrap_Simulation_getSample(PyObject *SWIGUNUSEDPARM(self),
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject * obj0 = 0 ;
-  Swig::Director *director = 0;
-  ISample *result = 0 ;
+  MultiLayer *result = 0 ;
   
   if (!PyArg_ParseTuple(args,(char *)"O:Simulation_getSample",&obj0)) SWIG_fail;
   res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_Simulation, 0 |  0 );
@@ -68326,14 +68319,8 @@ SWIGINTERN PyObject *_wrap_Simulation_getSample(PyObject *SWIGUNUSEDPARM(self),
     SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "Simulation_getSample" "', argument " "1"" of type '" "Simulation const *""'"); 
   }
   arg1 = reinterpret_cast< Simulation * >(argp1);
-  result = (ISample *)((Simulation const *)arg1)->getSample();
-  director = SWIG_DIRECTOR_CAST(result);
-  if (director) {
-    resultobj = director->swig_get_self();
-    Py_INCREF(resultobj);
-  } else {
-    resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_ISample, 0 |  0 );
-  }
+  result = (MultiLayer *)((Simulation const *)arg1)->getSample();
+  resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_MultiLayer, 0 |  0 );
   return resultobj;
 fail:
   return NULL;
@@ -69486,22 +69473,22 @@ fail:
 
 SWIGINTERN PyObject *_wrap_new_GISASSimulation__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  ISample *arg1 = 0 ;
+  MultiLayer *arg1 = 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject * obj0 = 0 ;
   GISASSimulation *result = 0 ;
   
   if (!PyArg_ParseTuple(args,(char *)"O:new_GISASSimulation",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_ISample,  0  | 0);
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_MultiLayer,  0  | 0);
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_GISASSimulation" "', argument " "1"" of type '" "ISample const &""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_GISASSimulation" "', argument " "1"" of type '" "MultiLayer const &""'"); 
   }
   if (!argp1) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_GISASSimulation" "', argument " "1"" of type '" "ISample const &""'"); 
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_GISASSimulation" "', argument " "1"" of type '" "MultiLayer const &""'"); 
   }
-  arg1 = reinterpret_cast< ISample * >(argp1);
-  result = (GISASSimulation *)new GISASSimulation((ISample const &)*arg1);
+  arg1 = reinterpret_cast< MultiLayer * >(argp1);
+  result = (GISASSimulation *)new GISASSimulation((MultiLayer const &)*arg1);
   resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_GISASSimulation, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
@@ -69552,7 +69539,7 @@ SWIGINTERN PyObject *_wrap_new_GISASSimulation(PyObject *self, PyObject *args) {
   }
   if (argc == 1) {
     int _v;
-    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_ISample, 0);
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_MultiLayer, 0);
     _v = SWIG_CheckState(res);
     if (_v) {
       return _wrap_new_GISASSimulation__SWIG_1(self, args);
@@ -69571,7 +69558,7 @@ fail:
   SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_GISASSimulation'.\n"
     "  Possible C/C++ prototypes are:\n"
     "    GISASSimulation::GISASSimulation()\n"
-    "    GISASSimulation::GISASSimulation(ISample const &)\n"
+    "    GISASSimulation::GISASSimulation(MultiLayer const &)\n"
     "    GISASSimulation::GISASSimulation(std::shared_ptr< ISampleBuilder >)\n");
   return 0;
 }
@@ -88438,22 +88425,22 @@ fail:
 
 SWIGINTERN PyObject *_wrap_new_OffSpecSimulation__SWIG_1(PyObject *SWIGUNUSEDPARM(self), PyObject *args) {
   PyObject *resultobj = 0;
-  ISample *arg1 = 0 ;
+  MultiLayer *arg1 = 0 ;
   void *argp1 = 0 ;
   int res1 = 0 ;
   PyObject * obj0 = 0 ;
   OffSpecSimulation *result = 0 ;
   
   if (!PyArg_ParseTuple(args,(char *)"O:new_OffSpecSimulation",&obj0)) SWIG_fail;
-  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_ISample,  0  | 0);
+  res1 = SWIG_ConvertPtr(obj0, &argp1, SWIGTYPE_p_MultiLayer,  0  | 0);
   if (!SWIG_IsOK(res1)) {
-    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_OffSpecSimulation" "', argument " "1"" of type '" "ISample const &""'"); 
+    SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "new_OffSpecSimulation" "', argument " "1"" of type '" "MultiLayer const &""'"); 
   }
   if (!argp1) {
-    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_OffSpecSimulation" "', argument " "1"" of type '" "ISample const &""'"); 
+    SWIG_exception_fail(SWIG_ValueError, "invalid null reference " "in method '" "new_OffSpecSimulation" "', argument " "1"" of type '" "MultiLayer const &""'"); 
   }
-  arg1 = reinterpret_cast< ISample * >(argp1);
-  result = (OffSpecSimulation *)new OffSpecSimulation((ISample const &)*arg1);
+  arg1 = reinterpret_cast< MultiLayer * >(argp1);
+  result = (OffSpecSimulation *)new OffSpecSimulation((MultiLayer const &)*arg1);
   resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_OffSpecSimulation, SWIG_POINTER_NEW |  0 );
   return resultobj;
 fail:
@@ -88504,7 +88491,7 @@ SWIGINTERN PyObject *_wrap_new_OffSpecSimulation(PyObject *self, PyObject *args)
   }
   if (argc == 1) {
     int _v;
-    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_ISample, 0);
+    int res = SWIG_ConvertPtr(argv[0], 0, SWIGTYPE_p_MultiLayer, 0);
     _v = SWIG_CheckState(res);
     if (_v) {
       return _wrap_new_OffSpecSimulation__SWIG_1(self, args);
@@ -88523,7 +88510,7 @@ fail:
   SWIG_SetErrorMsg(PyExc_NotImplementedError,"Wrong number or type of arguments for overloaded function 'new_OffSpecSimulation'.\n"
     "  Possible C/C++ prototypes are:\n"
     "    OffSpecSimulation::OffSpecSimulation()\n"
-    "    OffSpecSimulation::OffSpecSimulation(ISample const &)\n"
+    "    OffSpecSimulation::OffSpecSimulation(MultiLayer const &)\n"
     "    OffSpecSimulation::OffSpecSimulation(std::shared_ptr< ISampleBuilder >)\n");
   return 0;
 }
@@ -103566,7 +103553,7 @@ static PyMethodDef SwigMethods[] = {
 		"\n"
 		""},
 	 { (char *)"ISampleBuilder_buildSample", _wrap_ISampleBuilder_buildSample, METH_VARARGS, (char *)"\n"
-		"ISampleBuilder_buildSample(ISampleBuilder self) -> ISample\n"
+		"ISampleBuilder_buildSample(ISampleBuilder self) -> MultiLayer\n"
 		"\n"
 		"virtual ISample* ISampleBuilder::buildSample() const =0\n"
 		"\n"
@@ -107938,7 +107925,7 @@ static PyMethodDef SwigMethods[] = {
 		"\n"
 		""},
 	 { (char *)"Simulation_setSample", _wrap_Simulation_setSample, METH_VARARGS, (char *)"\n"
-		"Simulation_setSample(Simulation self, ISample sample)\n"
+		"Simulation_setSample(Simulation self, MultiLayer sample)\n"
 		"\n"
 		"void Simulation::setSample(const ISample &sample)\n"
 		"\n"
@@ -107948,7 +107935,7 @@ static PyMethodDef SwigMethods[] = {
 		"\n"
 		""},
 	 { (char *)"Simulation_getSample", _wrap_Simulation_getSample, METH_VARARGS, (char *)"\n"
-		"Simulation_getSample(Simulation self) -> ISample\n"
+		"Simulation_getSample(Simulation self) -> MultiLayer\n"
 		"\n"
 		"ISample* Simulation::getSample() const\n"
 		"\n"
@@ -108114,7 +108101,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"SimulationOptions_swigregister", SimulationOptions_swigregister, METH_VARARGS, NULL},
 	 { (char *)"new_GISASSimulation", _wrap_new_GISASSimulation, METH_VARARGS, (char *)"\n"
 		"GISASSimulation()\n"
-		"GISASSimulation(ISample p_sample)\n"
+		"GISASSimulation(MultiLayer p_sample)\n"
 		"new_GISASSimulation(std::shared_ptr< ISampleBuilder > p_sample_builder) -> GISASSimulation\n"
 		"\n"
 		"GISASSimulation::GISASSimulation(std::shared_ptr< ISampleBuilder > p_sample_builder)\n"
@@ -111463,7 +111450,7 @@ static PyMethodDef SwigMethods[] = {
 	 { (char *)"MultiLayer_swigregister", MultiLayer_swigregister, METH_VARARGS, NULL},
 	 { (char *)"new_OffSpecSimulation", _wrap_new_OffSpecSimulation, METH_VARARGS, (char *)"\n"
 		"OffSpecSimulation()\n"
-		"OffSpecSimulation(ISample p_sample)\n"
+		"OffSpecSimulation(MultiLayer p_sample)\n"
 		"new_OffSpecSimulation(std::shared_ptr< ISampleBuilder > p_sample_builder) -> OffSpecSimulation\n"
 		"\n"
 		"OffSpecSimulation::OffSpecSimulation(std::shared_ptr< class ISampleBuilder > p_sample_builder)\n"
diff --git a/auto/Wrap/libBornAgainCore_wrap.h b/auto/Wrap/libBornAgainCore_wrap.h
index 209b764f52a039da9c157ea1407f1093928d63bb..3ee9c32a58212a4d8f0e69416698e608f3c67aad 100644
--- a/auto/Wrap/libBornAgainCore_wrap.h
+++ b/auto/Wrap/libBornAgainCore_wrap.h
@@ -247,7 +247,7 @@ public:
     virtual void printSwigPublic(std::ostream &ostr) const {
       IParameterized::print(ostr);
     }
-    virtual ISample *buildSample() const;
+    virtual MultiLayer *buildSample() const;
 
 /* Internal director utilities */
 public: