diff --git a/Core/Computation/DWBAComputation.cpp b/Core/Computation/DWBAComputation.cpp
index 5680edfeb473833a66afcdbf1c71bc560f1efb0a..49a9972b654af7521e2935294588be8c6d3309f7 100644
--- a/Core/Computation/DWBAComputation.cpp
+++ b/Core/Computation/DWBAComputation.cpp
@@ -40,21 +40,19 @@ makeLayoutComputation(const std::vector<ProcessedLayout>& layouts, const Simulat
 } // namespace
 
 
-DWBAComputation::DWBAComputation(std::unique_ptr<const ProcessedSample>&& re_sample,
-                                 const SimulationOptions& options, ProgressHandler& progress,
+DWBAComputation::DWBAComputation(const ProcessedSample& re_sample, const SimulationOptions& options,
+                                 ProgressHandler& progress,
                                  std::vector<DiffuseElement>::iterator begin_it,
                                  std::vector<DiffuseElement>::iterator end_it)
-    : IComputation(std::move(re_sample), options, progress)
+    : IComputation(re_sample, options, progress)
     , m_begin_it(begin_it)
     , m_end_it(end_it)
-    , m_fresnel_map(m_re_sample->fresnelMap())
+    , m_fresnel_map(m_re_sample.fresnelMap())
     , m_specular_contrib(options.includeSpecular() ? new GISASSpecularContribution() : nullptr)
-    , m_roughness_contrib(m_re_sample->hasRoughness()
-                          ? new RoughMultiLayerContribution(*m_re_sample)
-                          : nullptr)
-    , m_layout_contribs(
-          makeLayoutComputation(m_re_sample->layouts(), options,
-                                m_re_sample->containsMagneticMaterial()))
+    , m_roughness_contrib(m_re_sample.hasRoughness() ? new RoughMultiLayerContribution(m_re_sample)
+                                                     : nullptr)
+    , m_layout_contribs(makeLayoutComputation(m_re_sample.layouts(), options,
+                                              m_re_sample.containsMagneticMaterial()))
 {
 }
 
diff --git a/Core/Computation/DWBAComputation.h b/Core/Computation/DWBAComputation.h
index bd8580a60859e5720988cf47d2bd430ed97ef0a5..00a6c36a8b899c4242436f170e224974ccc873d5 100644
--- a/Core/Computation/DWBAComputation.h
+++ b/Core/Computation/DWBAComputation.h
@@ -42,9 +42,8 @@ class SimulationOptions;
 
 class DWBAComputation : public IComputation {
 public:
-    DWBAComputation(std::unique_ptr<const ProcessedSample>&& re_sample,
-                    const SimulationOptions& options, ProgressHandler& progress,
-                    std::vector<DiffuseElement>::iterator begin_it,
+    DWBAComputation(const ProcessedSample& re_sample, const SimulationOptions& options,
+                    ProgressHandler& progress, std::vector<DiffuseElement>::iterator begin_it,
                     std::vector<DiffuseElement>::iterator end_it);
     ~DWBAComputation() override;
 
diff --git a/Core/Computation/DepthProbeComputation.cpp b/Core/Computation/DepthProbeComputation.cpp
index 485b6de88e4712b241c5e4afc2d91742652a56ac..18ed1a910c562edd68a4cbdbe24e09764600b830 100644
--- a/Core/Computation/DepthProbeComputation.cpp
+++ b/Core/Computation/DepthProbeComputation.cpp
@@ -20,14 +20,12 @@
 #include "Resample/Fresnel/IFresnelMap.h"
 #include "Resample/Processed/ProcessedSample.h"
 
-DepthProbeComputation::DepthProbeComputation(std::unique_ptr<const ProcessedSample>&& re_sample,
+DepthProbeComputation::DepthProbeComputation(const ProcessedSample& re_sample,
                                              const SimulationOptions& options,
                                              ProgressHandler& progress,
                                              DepthProbeElementIter begin_it,
                                              DepthProbeElementIter end_it)
-    : IComputation(std::move(re_sample), options, progress)
-    , m_begin_it(begin_it)
-    , m_end_it(end_it)
+    : IComputation(re_sample, options, progress), m_begin_it(begin_it), m_end_it(end_it)
 {
 }
 
@@ -42,18 +40,18 @@ void DepthProbeComputation::runProtected()
 
         const IAxis& z_positions = *ele.getZPositions();
         const size_t n_z = z_positions.size();
-        const size_t n_layers = m_re_sample->numberOfSlices();
+        const size_t n_layers = m_re_sample.numberOfSlices();
         size_t start_z_ind = n_z;
         std::valarray<double> intensities(0.0, n_z);
 
         double z_layer_bottom(0.0);
         double z_layer_top(0.0);
         for (size_t i_layer = 0; i_layer < n_layers && start_z_ind != 0; ++i_layer) {
-            z_layer_bottom = m_re_sample->sliceBottomZ(i_layer);
-            z_layer_top = i_layer ? m_re_sample->sliceTopZ(i_layer) : 0;
+            z_layer_bottom = m_re_sample.sliceBottomZ(i_layer);
+            z_layer_top = i_layer ? m_re_sample.sliceTopZ(i_layer) : 0;
 
             // get R & T coefficients for current layer
-            const auto flux = m_re_sample->fresnelMap()->getInFlux(ele.getKi(), i_layer);
+            const auto flux = m_re_sample.fresnelMap()->getInFlux(ele.getKi(), i_layer);
             const complex_t R = flux->getScalarR();
             const complex_t T = flux->getScalarT();
             const complex_t kz_out = flux->getScalarKz();
diff --git a/Core/Computation/DepthProbeComputation.h b/Core/Computation/DepthProbeComputation.h
index 8a234494c5b8e875ed27139a546e7e2b07ba3600..cf3cf466665b9a5382f77cb18c11366adce5b04e 100644
--- a/Core/Computation/DepthProbeComputation.h
+++ b/Core/Computation/DepthProbeComputation.h
@@ -33,9 +33,9 @@ class DepthProbeComputation : public IComputation {
     using DepthProbeElementIter = std::vector<DepthProbeElement>::iterator;
 
 public:
-    DepthProbeComputation(std::unique_ptr<const ProcessedSample>&& re_sample,
-                          const SimulationOptions& options, ProgressHandler& progress,
-                          DepthProbeElementIter begin_it, DepthProbeElementIter end_it);
+    DepthProbeComputation(const ProcessedSample& re_sample, const SimulationOptions& options,
+                          ProgressHandler& progress, DepthProbeElementIter begin_it,
+                          DepthProbeElementIter end_it);
     ~DepthProbeComputation() override;
 
 private:
diff --git a/Core/Computation/IComputation.cpp b/Core/Computation/IComputation.cpp
index 76f093650ce11be222ff78f34675382e6ba4af61..5e2456d220b73522ad6099127f87843a9a8c76fc 100644
--- a/Core/Computation/IComputation.cpp
+++ b/Core/Computation/IComputation.cpp
@@ -17,9 +17,9 @@
 #include "Base/Progress/ProgressHandler.h"
 #include "Resample/Processed/ProcessedSample.h"
 
-IComputation::IComputation(std::unique_ptr<const ProcessedSample>&& re_sample,
-                           const SimulationOptions& options, ProgressHandler& progress)
-    : m_re_sample(std::move(re_sample)), m_options(options), m_progress(&progress)
+IComputation::IComputation(const ProcessedSample& re_sample, const SimulationOptions& options,
+                           ProgressHandler& progress)
+    : m_re_sample(re_sample), m_options(options), m_progress(&progress)
 {
 }
 
diff --git a/Core/Computation/IComputation.h b/Core/Computation/IComputation.h
index 84e04a4a8128200d6b9adb13f72d27b17efc5223..32c33d54b684c8643998a4e021f10f1738b5ffe1 100644
--- a/Core/Computation/IComputation.h
+++ b/Core/Computation/IComputation.h
@@ -37,8 +37,8 @@ class SimulationOptions;
 
 class IComputation {
 public:
-    IComputation(std::unique_ptr<const ProcessedSample>&& re_sample,
-                 const SimulationOptions& options, ProgressHandler& progress);
+    IComputation(const ProcessedSample& re_sample, const SimulationOptions& options,
+                 ProgressHandler& progress);
     virtual ~IComputation();
 
     //! Calls runProtected(), catches exceptions, sets m_status.
@@ -51,7 +51,7 @@ protected:
     void setProgressHandler(ProgressHandler* progress) const;
     void stepProgress() const;
 
-    const std::unique_ptr<const ProcessedSample> m_re_sample;
+    const ProcessedSample& m_re_sample;
     const SimulationOptions& m_options;
     ProgressHandler* m_progress;
     ComputationStatus m_status;
diff --git a/Core/Computation/SpecularComputation.cpp b/Core/Computation/SpecularComputation.cpp
index 7804e0ddfe89d00512fa113d9aa1a823456698f3..8913655a1d62591c767a4088e51f1b1ae728a1cc 100644
--- a/Core/Computation/SpecularComputation.cpp
+++ b/Core/Computation/SpecularComputation.cpp
@@ -23,26 +23,25 @@
 
 namespace {
 
-std::unique_ptr<ISpecularStrategy>sample2strategy(const ProcessedSample& re_sample)
+std::unique_ptr<ISpecularStrategy> sample2strategy(const ProcessedSample& re_sample)
 {
     if (re_sample.polarizing())
         return SampleUtils::SpecularStrategyBuilder::buildMagnetic(
             re_sample.sample().roughnessModel());
-    return SampleUtils::SpecularStrategyBuilder::buildScalar(
-        re_sample.sample().roughnessModel());
+    return SampleUtils::SpecularStrategyBuilder::buildScalar(re_sample.sample().roughnessModel());
 }
 
 } // namespace
 
 
-SpecularComputation::SpecularComputation(std::unique_ptr<const ProcessedSample>&& re_sample,
+SpecularComputation::SpecularComputation(const ProcessedSample& re_sample,
                                          const SimulationOptions& options,
                                          ProgressHandler& progress, SpecularElementIter begin_it,
                                          SpecularElementIter end_it)
     : IComputation(std::move(re_sample), options, progress)
     , m_begin_it(begin_it)
     , m_end_it(end_it)
-    , m_strategy(sample2strategy(*m_re_sample))
+    , m_strategy(sample2strategy(m_re_sample))
 {
 }
 
@@ -50,15 +49,14 @@ SpecularComputation::~SpecularComputation() = default;
 
 void SpecularComputation::runProtected()
 {
-    auto& slices = m_re_sample->averageSlices();
+    auto& slices = m_re_sample.averageSlices();
     for (auto it = m_begin_it; it != m_end_it; ++it) {
         SpecularElement& ele = *it;
         if (!ele.isCalculated())
             continue;
-        if (m_re_sample->polarizing()) {
-            const auto R =
-                std::get<Eigen::Matrix2cd>(
-                    m_strategy->computeTopLayerR(slices, ele.produceKz(slices)));
+        if (m_re_sample.polarizing()) {
+            const auto R = std::get<Eigen::Matrix2cd>(
+                m_strategy->computeTopLayerR(slices, ele.produceKz(slices)));
 
             const auto& polarization = ele.polarizationHandler().getPolarization();
             const auto& analyzer = ele.polarizationHandler().getAnalyzerOperator();
@@ -68,8 +66,8 @@ void SpecularComputation::runProtected()
             ele.setIntensity(std::abs(trace));
 
         } else {
-            const auto R = std::get<complex_t>(
-                m_strategy->computeTopLayerR(slices, ele.produceKz(slices)));
+            const auto R =
+                std::get<complex_t>(m_strategy->computeTopLayerR(slices, ele.produceKz(slices)));
             ele.setIntensity(std::norm(R));
         }
 
diff --git a/Core/Computation/SpecularComputation.h b/Core/Computation/SpecularComputation.h
index 32089000c0d304d8bfa7ea9ed8a36976a6e34328..d6fc5f51a3db8c74ebad1562e7a778040efde263 100644
--- a/Core/Computation/SpecularComputation.h
+++ b/Core/Computation/SpecularComputation.h
@@ -34,9 +34,9 @@ class SpecularComputation : public IComputation {
     using SpecularElementIter = std::vector<SpecularElement>::iterator;
 
 public:
-    SpecularComputation(std::unique_ptr<const ProcessedSample>&& re_sample,
-                        const SimulationOptions& options, ProgressHandler& progress,
-                        SpecularElementIter begin_it, SpecularElementIter end_it);
+    SpecularComputation(const ProcessedSample& re_sample, const SimulationOptions& options,
+                        ProgressHandler& progress, SpecularElementIter begin_it,
+                        SpecularElementIter end_it);
     ~SpecularComputation() override;
 
 private:
diff --git a/Core/Simulation/DepthProbeSimulation.cpp b/Core/Simulation/DepthProbeSimulation.cpp
index fc367cb3eb711835fde2b9859b780959685f390c..268a6bc15fbbce3dcd0acd40535418f68e3eaa31 100644
--- a/Core/Simulation/DepthProbeSimulation.cpp
+++ b/Core/Simulation/DepthProbeSimulation.cpp
@@ -166,13 +166,14 @@ std::vector<DepthProbeElement> DepthProbeSimulation::generateDiffuseElements(con
     return result;
 }
 
-std::unique_ptr<IComputation> DepthProbeSimulation::createComputation(
-    std::unique_ptr<const ProcessedSample>&& re_sample, size_t start, size_t n_elements)
+std::unique_ptr<IComputation>
+DepthProbeSimulation::createComputation(const ProcessedSample& re_sample, size_t start,
+                                        size_t n_elements)
 {
     ASSERT(start < m_sim_elements.size() && start + n_elements <= m_sim_elements.size());
     const auto& begin = m_sim_elements.begin() + static_cast<long>(start);
-    return std::make_unique<DepthProbeComputation>(std::move(re_sample), options(), progress(),
-                                                   begin, begin + static_cast<long>(n_elements));
+    return std::make_unique<DepthProbeComputation>(re_sample, options(), progress(), begin,
+                                                   begin + static_cast<long>(n_elements));
 }
 
 void DepthProbeSimulation::validityCheck() const
diff --git a/Core/Simulation/DepthProbeSimulation.h b/Core/Simulation/DepthProbeSimulation.h
index 101a9ad4640601a3c1d42d3832fa0d9e76cecd76..2588e70edd9f84dce6bf62c58370e2a158999a6b 100644
--- a/Core/Simulation/DepthProbeSimulation.h
+++ b/Core/Simulation/DepthProbeSimulation.h
@@ -83,9 +83,8 @@ private:
     //! Generate a single threaded computation for a given range of simulation elements
     //! @param start Index of the first element to include into computation
     //! @param n_elements Number of elements to process
-    std::unique_ptr<IComputation>
-    createComputation(std::unique_ptr<const ProcessedSample>&& re_sample,
-                                      size_t start, size_t n_elements) override;
+    std::unique_ptr<IComputation> createComputation(const ProcessedSample& re_sample, size_t start,
+                                                    size_t n_elements) override;
 
     //! Checks if simulation data is ready for retrieval.
     void validityCheck() const;
diff --git a/Core/Simulation/ISimulation.cpp b/Core/Simulation/ISimulation.cpp
index 6245048bf3087839cc6d1cf5328e591b3b5c1cd6..c25b950a8947389e4d73fba43044b994bc5eae8d 100644
--- a/Core/Simulation/ISimulation.cpp
+++ b/Core/Simulation/ISimulation.cpp
@@ -300,6 +300,8 @@ void ISimulation::runSingleSimulation(size_t batch_start, size_t batch_size, dou
     const auto force_polarized =
         detector().detectionProperties().analyzerDirection() != kvector_t{};
 
+    const ProcessedSample re_sample(*sample(), options(), force_polarized);
+
     initDiffuseElementVector();
 
     const size_t n_threads = m_options.getNumberOfThreads();
@@ -309,16 +311,12 @@ void ISimulation::runSingleSimulation(size_t batch_start, size_t batch_size, dou
 
     for (size_t i_thread = 0; i_thread < n_threads; ++i_thread) {
 
-        // TODO: Make the ProcessedSample thread-safe, and move it in front of the loop.
-        auto re_sample =
-            std::make_unique<ProcessedSample>(*sample(), options(), force_polarized);
 
         const size_t thread_start = batch_start + getStartIndex(n_threads, i_thread, batch_size);
         const size_t thread_size = getNumberOfElements(n_threads, i_thread, batch_size);
         if (thread_size == 0)
             break;
-        computations.emplace_back(
-            createComputation(std::move(re_sample), thread_start, thread_size));
+        computations.emplace_back(createComputation(re_sample, thread_start, thread_size));
     }
     runComputations(computations);
 
diff --git a/Core/Simulation/ISimulation.h b/Core/Simulation/ISimulation.h
index d17921c49c74f75ae388cf821dcce6ab50dd57ac..1b48c5293a9b24cdd92c63243c985a76dcf24b84 100644
--- a/Core/Simulation/ISimulation.h
+++ b/Core/Simulation/ISimulation.h
@@ -128,9 +128,8 @@ private:
     //! Generate a single threaded computation for a given range of simulation elements
     //! @param start Index of the first element to include into computation
     //! @param n_elements Number of elements to process
-    virtual std::unique_ptr<IComputation>
-    createComputation(std::unique_ptr<const ProcessedSample>&& re_sample,
-                                      size_t start, size_t n_elements) = 0;
+    virtual std::unique_ptr<IComputation> createComputation(const ProcessedSample& re_sample,
+                                                            size_t start, size_t n_elements) = 0;
 
     //! Checks the distribution validity for simulation.
     virtual void validateParametrization(const ParameterDistribution&) const {}
diff --git a/Core/Simulation/ISimulation2D.cpp b/Core/Simulation/ISimulation2D.cpp
index e4ff7efa674160a61bec2da151e2a3056995f83d..6ea02e6f03d3554ddaff9f162b94d44787d9b3f5 100644
--- a/Core/Simulation/ISimulation2D.cpp
+++ b/Core/Simulation/ISimulation2D.cpp
@@ -95,13 +95,12 @@ void ISimulation2D::setDetector(const IDetector2D& detector)
     initCoordSystem();
 }
 
-std::unique_ptr<IComputation>
-ISimulation2D::createComputation(std::unique_ptr<const ProcessedSample>&& re_sample,
-                                                 size_t start, size_t n_elements)
+std::unique_ptr<IComputation> ISimulation2D::createComputation(const ProcessedSample& re_sample,
+                                                               size_t start, size_t n_elements)
 {
     ASSERT(start < m_sim_elements.size() && start + n_elements <= m_sim_elements.size());
     const auto& begin = m_sim_elements.begin() + static_cast<long>(start);
-    return std::make_unique<DWBAComputation>(std::move(re_sample), options(), progress(), begin,
+    return std::make_unique<DWBAComputation>(re_sample, options(), progress(), begin,
                                              begin + static_cast<long>(n_elements));
 }
 
diff --git a/Core/Simulation/ISimulation2D.h b/Core/Simulation/ISimulation2D.h
index c4e0825a5fd8a5ce6c0266e061b0ecb9d1477a63..d3d7c4aa63a958cec941fcc6bf7930e75e620606 100644
--- a/Core/Simulation/ISimulation2D.h
+++ b/Core/Simulation/ISimulation2D.h
@@ -78,9 +78,8 @@ protected:
     //! Generate a single threaded computation for a given range of simulation elements
     //! @param start Index of the first element to include into computation
     //! @param n_elements Number of elements to process
-    std::unique_ptr<IComputation>
-    createComputation(std::unique_ptr<const ProcessedSample>&& re_sample,
-                                      size_t start, size_t n_elements) override;
+    std::unique_ptr<IComputation> createComputation(const ProcessedSample& re_sample, size_t start,
+                                                    size_t n_elements) override;
 
     //! Generate simulation elements for given beam
     std::vector<DiffuseElement> generateDiffuseElements(const Beam& beam);
diff --git a/Core/Simulation/SpecularSimulation.cpp b/Core/Simulation/SpecularSimulation.cpp
index 6e56779dacacff39cfa0313cdd6466d5225583ce..542e71159ed810cf80fc68bf7e128872b183a19c 100644
--- a/Core/Simulation/SpecularSimulation.cpp
+++ b/Core/Simulation/SpecularSimulation.cpp
@@ -166,12 +166,13 @@ void SpecularSimulation::initDiffuseElementVector()
     m_cache.resize(m_sim_elements.size(), 0);
 }
 
-std::unique_ptr<IComputation> SpecularSimulation::createComputation(
-    std::unique_ptr<const ProcessedSample>&& re_sample, size_t start, size_t n_elements)
+std::unique_ptr<IComputation>
+SpecularSimulation::createComputation(const ProcessedSample& re_sample, size_t start,
+                                      size_t n_elements)
 {
     ASSERT(start < m_sim_elements.size() && start + n_elements <= m_sim_elements.size());
     const auto& begin = m_sim_elements.begin() + static_cast<long>(start);
-    return std::make_unique<SpecularComputation>(std::move(re_sample), options(), progress(), begin,
+    return std::make_unique<SpecularComputation>(re_sample, options(), progress(), begin,
                                                  begin + static_cast<long>(n_elements));
 }
 
diff --git a/Core/Simulation/SpecularSimulation.h b/Core/Simulation/SpecularSimulation.h
index c21ae6c43304822aaae33a736bfb5dfd5fa0abaf..33c4b696a69eba9d92648bae9793b78d06e3279e 100644
--- a/Core/Simulation/SpecularSimulation.h
+++ b/Core/Simulation/SpecularSimulation.h
@@ -73,9 +73,8 @@ private:
     //! Generate a single threaded computation for a given range of simulation elements
     //! @param start Index of the first element to include into computation
     //! @param n_elements Number of elements to process
-    std::unique_ptr<IComputation>
-    createComputation(std::unique_ptr<const ProcessedSample>&& re_sample,
-                                      size_t start, size_t n_elements) override;
+    std::unique_ptr<IComputation> createComputation(const ProcessedSample& re_sample, size_t start,
+                                                    size_t n_elements) override;
 
     void checkCache() const;
 
diff --git a/GUI/Views/FitWidgets/FitParameterWidget.cpp b/GUI/Views/FitWidgets/FitParameterWidget.cpp
index a8a23b2e8c132ed0e25f62d000d22b3e2ac748b3..7f413f7e18b153600072542e1a4c5da5988cd48c 100644
--- a/GUI/Views/FitWidgets/FitParameterWidget.cpp
+++ b/GUI/Views/FitWidgets/FitParameterWidget.cpp
@@ -21,8 +21,8 @@
 #include "GUI/Models/JobItem.h"
 #include "GUI/Models/JobModel.h"
 #include "GUI/Models/ParameterTreeItems.h"
-#include "GUI/Views/InfoWidgets/OverlayLabelController.h"
 #include "GUI/Views/FitWidgets/ParameterTuningWidget.h"
+#include "GUI/Views/InfoWidgets/OverlayLabelController.h"
 #include "GUI/Views/SessionModelDelegate.h"
 #include "GUI/mainwindow/mainwindow_constants.h"
 #include "GUI/utils/CustomEventFilters.h"
diff --git a/GUI/Views/JobWidgets/JobResultsPresenter.cpp b/GUI/Views/JobWidgets/JobResultsPresenter.cpp
index 3db26ebbdbd245d6eb01aecb114d17db6f0e303a..eaaac70fbeebf7f59b86b2bce7f0010f5cf40416 100644
--- a/GUI/Views/JobWidgets/JobResultsPresenter.cpp
+++ b/GUI/Views/JobWidgets/JobResultsPresenter.cpp
@@ -15,9 +15,9 @@
 #include "GUI/Views/JobWidgets/JobResultsPresenter.h"
 #include "GUI/Models/InstrumentItems.h"
 #include "GUI/Models/JobItem.h"
+#include "GUI/Views/IntensityDataWidgets/IntensityDataWidget.h"
 #include "GUI/Views/JobWidgets/FitComparisonWidget.h"
 #include "GUI/Views/JobWidgets/FitComparisonWidget1D.h"
-#include "GUI/Views/IntensityDataWidgets/IntensityDataWidget.h"
 #include "GUI/Views/ProjectionsWidgets/IntensityDataProjectionsWidget.h"
 #include "GUI/Views/SpecularDataWidgets/SpecularDataWidget.h"
 
diff --git a/auto/Wrap/doxygenCore.i b/auto/Wrap/doxygenCore.i
index 26c150391726c2e5a5293e4a2b5b865b640561e5..ac602de7581a0b887682bd40b352edfc720a0808 100644
--- a/auto/Wrap/doxygenCore.i
+++ b/auto/Wrap/doxygenCore.i
@@ -289,7 +289,7 @@ Controlled by the multi-threading machinery in ISimulation::runSingleSimulation(
 C++ includes: DepthProbeComputation.h
 ";
 
-%feature("docstring")  DepthProbeComputation::DepthProbeComputation "DepthProbeComputation::DepthProbeComputation(std::unique_ptr< const ProcessedSample > &&re_sample, const SimulationOptions &options, ProgressHandler &progress, DepthProbeElementIter begin_it, DepthProbeElementIter end_it)
+%feature("docstring")  DepthProbeComputation::DepthProbeComputation "DepthProbeComputation::DepthProbeComputation(const ProcessedSample &re_sample, const SimulationOptions &options, ProgressHandler &progress, DepthProbeElementIter begin_it, DepthProbeElementIter end_it)
 ";
 
 %feature("docstring")  DepthProbeComputation::~DepthProbeComputation "DepthProbeComputation::~DepthProbeComputation() override
@@ -405,7 +405,7 @@ Controlled by the multi-threading machinery in ISimulation::runSingleSimulation(
 C++ includes: DWBAComputation.h
 ";
 
-%feature("docstring")  DWBAComputation::DWBAComputation "DWBAComputation::DWBAComputation(std::unique_ptr< const ProcessedSample > &&re_sample, const SimulationOptions &options, ProgressHandler &progress, std::vector< DiffuseElement >::iterator begin_it, std::vector< DiffuseElement >::iterator end_it)
+%feature("docstring")  DWBAComputation::DWBAComputation "DWBAComputation::DWBAComputation(const ProcessedSample &re_sample, const SimulationOptions &options, ProgressHandler &progress, std::vector< DiffuseElement >::iterator begin_it, std::vector< DiffuseElement >::iterator end_it)
 ";
 
 %feature("docstring")  DWBAComputation::~DWBAComputation "DWBAComputation::~DWBAComputation() override
@@ -856,7 +856,7 @@ Controlled by the multi-threading machinery in ISimulation::runSingleSimulation(
 C++ includes: IComputation.h
 ";
 
-%feature("docstring")  IComputation::IComputation "IComputation::IComputation(std::unique_ptr< const ProcessedSample > &&re_sample, const SimulationOptions &options, ProgressHandler &progress)
+%feature("docstring")  IComputation::IComputation "IComputation::IComputation(const ProcessedSample &re_sample, const SimulationOptions &options, ProgressHandler &progress)
 ";
 
 %feature("docstring")  IComputation::~IComputation "IComputation::~IComputation()
@@ -1957,7 +1957,7 @@ Controlled by the multi-threading machinery in ISimulation::runSingleSimulation(
 C++ includes: SpecularComputation.h
 ";
 
-%feature("docstring")  SpecularComputation::SpecularComputation "SpecularComputation::SpecularComputation(std::unique_ptr< const ProcessedSample > &&re_sample, const SimulationOptions &options, ProgressHandler &progress, SpecularElementIter begin_it, SpecularElementIter end_it)
+%feature("docstring")  SpecularComputation::SpecularComputation "SpecularComputation::SpecularComputation(const ProcessedSample &re_sample, const SimulationOptions &options, ProgressHandler &progress, SpecularElementIter begin_it, SpecularElementIter end_it)
 ";
 
 %feature("docstring")  SpecularComputation::~SpecularComputation "SpecularComputation::~SpecularComputation() override