diff --git a/Resample/Processed/ProcessedSample.cpp b/Resample/Processed/ProcessedSample.cpp
index 9045b9229eeeb754158789d24a6cdac09e07cf28..b7d68848bc221fee02ade361c4c370d31c44b85c 100644
--- a/Resample/Processed/ProcessedSample.cpp
+++ b/Resample/Processed/ProcessedSample.cpp
@@ -114,6 +114,7 @@ SliceStack refineStack(const SliceStack& stack, const std::vector<ProcessedLayou
             result[i_slice].setMaterial(createAveragedMaterial(slice_mat, entry.second));
         }
     }
+    ASSERT(result.size()==stack.size());
     return result;
 }
 
@@ -199,22 +200,6 @@ std::vector<ProcessedLayout> collectLayouts(const MultiLayer& sample, const Slic
     return result;
 }
 
-//! Returns a Fresnel map, for use in ProcessedSample constructor.
-
-std::unique_ptr<IFresnelMap> fresnelify(const MultiLayer& sample, const SliceStack& slices,
-                                        const std::vector<ProcessedLayout>& layouts,
-                                        const SimulationOptions& options)
-{
-    SliceStack fresnelStack = options.useAvgMaterials() ? refineStack(slices, layouts) : slices;
-
-    if (slices.containsMagneticMaterial())
-        return std::make_unique<MatrixFresnelMap>(
-            fresnelStack,
-            SampleUtils::SpecularStrategyBuilder::buildMagnetic(sample.roughnessModel()));
-    return std::make_unique<ScalarFresnelMap>(
-        fresnelStack, SampleUtils::SpecularStrategyBuilder::buildScalar(sample.roughnessModel()));
-}
-
 } // namespace
 
 
@@ -228,7 +213,14 @@ ProcessedSample::ProcessedSample(const MultiLayer& sample, const SimulationOptio
     , m_polarized{forcePolarized || sample.isMagnetic()}
     , m_slices{slicify(sample, options).setBField(sample.externalField())}
     , m_layouts{collectLayouts(sample, m_slices, m_polarized)}
-    , m_fresnel_map{fresnelify(sample, m_slices, m_layouts, options)}
+    , m_refined_stack(options.useAvgMaterials() ? refineStack(m_slices, m_layouts) : m_slices)
+    , m_fresnel_map(m_slices.containsMagneticMaterial()
+                    ? (std::unique_ptr<IFresnelMap>)std::make_unique<MatrixFresnelMap>(
+               m_refined_stack,
+               SampleUtils::SpecularStrategyBuilder::buildMagnetic(sample.roughnessModel()))
+                    : (std::unique_ptr<IFresnelMap>)std::make_unique<ScalarFresnelMap>(
+               m_refined_stack,
+               SampleUtils::SpecularStrategyBuilder::buildScalar(sample.roughnessModel())))
 {
 }
 
diff --git a/Resample/Processed/ProcessedSample.h b/Resample/Processed/ProcessedSample.h
index 998834700957d1a1336b141a0ad3e311303d5d9c..ce97012897a50c3f15e15a16cd7bfad76bc866f7 100644
--- a/Resample/Processed/ProcessedSample.h
+++ b/Resample/Processed/ProcessedSample.h
@@ -63,6 +63,7 @@ private:
     const bool m_polarized;
     const SliceStack m_slices;
     const std::vector<ProcessedLayout> m_layouts;
+    const SliceStack m_refined_stack;
     const std::unique_ptr<const IFresnelMap> m_fresnel_map;
 };