diff --git a/Core/Computation/IComputationTerm.cpp b/Core/Computation/IComputationTerm.cpp
index c459ee2264b13ad24b3225b0c20de315e3a9b92b..8cc7196a709b7c8753614feef9b3cc211c50a883 100644
--- a/Core/Computation/IComputationTerm.cpp
+++ b/Core/Computation/IComputationTerm.cpp
@@ -16,15 +16,11 @@
 #include "IComputationTerm.h"
 
 
-IComputationTerm::IComputationTerm(const MultiLayer* p_multilayer)
+IComputationTerm::IComputationTerm(const MultiLayer* p_multilayer,
+                                   const ILayerSpecularInfo* p_fresnel_map)
     : mp_multilayer(p_multilayer)
-    , mp_fresnel_map(nullptr)
+    , mp_fresnel_map(p_fresnel_map)
 {}
 
 IComputationTerm::~IComputationTerm()
 {}
-
-void IComputationTerm::setSpecularInfo(const ILayerSpecularInfo* p_full_map)
-{
-    mp_fresnel_map = p_full_map;
-}
diff --git a/Core/Computation/IComputationTerm.h b/Core/Computation/IComputationTerm.h
index 74ba09f736a82b95df3698502181e786103384ea..14b6d4b510ef125b43ce2cbf0bc12e14f21dda81 100644
--- a/Core/Computation/IComputationTerm.h
+++ b/Core/Computation/IComputationTerm.h
@@ -18,7 +18,6 @@
 
 #include <vector>
 
-
 class ILayerSpecularInfo;
 class MultiLayer;
 class ProgressHandler;
@@ -33,12 +32,9 @@ class SimulationOptions;
 class IComputationTerm
 {
 public:
-    IComputationTerm(const MultiLayer* p_multilayer);
+    IComputationTerm(const MultiLayer* p_multilayer, const ILayerSpecularInfo* p_fresnel_map);
     virtual ~IComputationTerm();
 
-    //! Sets magnetic reflection/transmission info for all layers
-    void setSpecularInfo(const ILayerSpecularInfo* p_full_map);
-
     //! Calculate scattering intensity for each SimulationElement
     //! returns false if nothing needed to be calculated
     virtual bool eval(const SimulationOptions& options,
diff --git a/Core/Computation/MainComputation.cpp b/Core/Computation/MainComputation.cpp
index 1fd7ddd3e8e24b04f87a0f8fe28a74f43e1ec39e..ee14f38d6eb5f537367a73c0d71502ed555b8b06 100644
--- a/Core/Computation/MainComputation.cpp
+++ b/Core/Computation/MainComputation.cpp
@@ -47,15 +47,16 @@ MainComputation::MainComputation(
         const Layer* layer = mP_multi_layer->getLayer(i);
         for (size_t j=0; j<layer->getNumberOfLayouts(); ++j)
             m_computation_terms.push_back(
-                        new ParticleLayoutComputation(mP_multi_layer.get(),
+                        new ParticleLayoutComputation(mP_multi_layer.get(), mP_fresnel_map.get(),
                                                       layer->getLayout(j), i));
     }
     // scattering from rough surfaces in DWBA
     if (mP_multi_layer->hasRoughness())
-        m_computation_terms.push_back(new RoughMultiLayerComputation(mP_multi_layer.get()));
+        m_computation_terms.push_back(new RoughMultiLayerComputation(mP_multi_layer.get(),
+                                                                     mP_fresnel_map.get()));
     if (m_sim_options.includeSpecular())
-        m_computation_terms.push_back(new SpecularComputation(mP_multi_layer.get()));
-    passFresnelInfo();
+        m_computation_terms.push_back(new SpecularComputation(mP_multi_layer.get(),
+                                                              mP_fresnel_map.get()));
 }
 
 MainComputation::~MainComputation()
@@ -96,13 +97,6 @@ void MainComputation::runProtected()
     }
 }
 
-void MainComputation::passFresnelInfo()
-{
-    for (IComputationTerm* comp: m_computation_terms) {
-        comp->setSpecularInfo(mP_fresnel_map.get());
-    }
-}
-
 ILayerSpecularInfo* MainComputation::createFresnelMap(const MultiLayer* p_multilayer,
                                                       const MultiLayer* p_inverted_multilayer)
 {
diff --git a/Core/Computation/MainComputation.h b/Core/Computation/MainComputation.h
index c26d976ff53e8e623c8eaa65a25291ae65f19d1d..8c055a286f3a3dadeffe07af20ab33468b444dc9 100644
--- a/Core/Computation/MainComputation.h
+++ b/Core/Computation/MainComputation.h
@@ -54,7 +54,6 @@ public:
 
 private:
     void runProtected();
-    void passFresnelInfo();
     static ILayerSpecularInfo* createFresnelMap(const MultiLayer* p_multilayer,
                                                 const MultiLayer* p_inverted_multilayer);
 
diff --git a/Core/Computation/ParticleLayoutComputation.cpp b/Core/Computation/ParticleLayoutComputation.cpp
index 597a64cba508e340434d525dab4a904caf8c158d..aa39fee13dc269bc7547ab6a747da55595fed2cb 100644
--- a/Core/Computation/ParticleLayoutComputation.cpp
+++ b/Core/Computation/ParticleLayoutComputation.cpp
@@ -25,8 +25,9 @@
 #include "SimulationElement.h"
 
 ParticleLayoutComputation::ParticleLayoutComputation(const MultiLayer* p_multilayer,
+                                                     const ILayerSpecularInfo* p_fresnel_map,
                                                      const ILayout* p_layout, size_t layer_index)
-    : IComputationTerm(p_multilayer)
+    : IComputationTerm(p_multilayer, p_fresnel_map)
     , mp_layout(p_layout)
     , m_layer_index(layer_index)
 {}
diff --git a/Core/Computation/ParticleLayoutComputation.h b/Core/Computation/ParticleLayoutComputation.h
index 715f6c1d25995f84ae3ebf83c2a5bd37b2354e61..35f94b8d37a5523bd1e8048632daa9c311e204e8 100644
--- a/Core/Computation/ParticleLayoutComputation.h
+++ b/Core/Computation/ParticleLayoutComputation.h
@@ -29,8 +29,9 @@ class ILayout;
 class ParticleLayoutComputation final : public IComputationTerm
 {
 public:
-    ParticleLayoutComputation(const MultiLayer* p_multilayer, const ILayout* p_layout,
-                              size_t layer_index);
+    ParticleLayoutComputation(
+        const MultiLayer* p_multilayer, const ILayerSpecularInfo* p_fresnel_map,
+        const ILayout* p_layout, size_t layer_index);
 
     bool eval(const SimulationOptions& options,
               ProgressHandler* progress,
diff --git a/Core/Computation/RoughMultiLayerComputation.cpp b/Core/Computation/RoughMultiLayerComputation.cpp
index fde554f2df9e7b82fd159e786c5cd5bbaa9dab85..3820f3cd87d20d5e97594723c4d0ac9d79e6c444 100644
--- a/Core/Computation/RoughMultiLayerComputation.cpp
+++ b/Core/Computation/RoughMultiLayerComputation.cpp
@@ -40,14 +40,13 @@ namespace {
     }
 }
 
-RoughMultiLayerComputation::RoughMultiLayerComputation(const MultiLayer *p_multi_layer)
-    : IComputationTerm(p_multi_layer)
-{
-}
+RoughMultiLayerComputation::RoughMultiLayerComputation(const MultiLayer *p_multi_layer,
+                                                       const ILayerSpecularInfo* p_fresnel_map)
+    : IComputationTerm(p_multi_layer, p_fresnel_map)
+{}
 
 RoughMultiLayerComputation::~RoughMultiLayerComputation()
-{
-}
+{}
 
 bool RoughMultiLayerComputation::eval(
     const SimulationOptions&, ProgressHandler* progress, bool,
diff --git a/Core/Computation/RoughMultiLayerComputation.h b/Core/Computation/RoughMultiLayerComputation.h
index c54d014cbf454b93516ed3cea1c1b491bca63926..7bc027302b4c26522de6d7e27bcb2098ec3d4780 100644
--- a/Core/Computation/RoughMultiLayerComputation.h
+++ b/Core/Computation/RoughMultiLayerComputation.h
@@ -30,7 +30,8 @@ class SimulationElement;
 class RoughMultiLayerComputation final : public IComputationTerm
 {
 public:
-    RoughMultiLayerComputation(const MultiLayer* p_multi_layer);
+    RoughMultiLayerComputation(const MultiLayer* p_multi_layer,
+                               const ILayerSpecularInfo* p_fresnel_map);
     ~RoughMultiLayerComputation();
 
     bool eval(const SimulationOptions& options,
diff --git a/Core/Computation/SpecularComputation.cpp b/Core/Computation/SpecularComputation.cpp
index 25cae08d66a94b59e19a38f7d970932a1e5dd4f1..250372351bcf77fcbc6e57f343cb50909ec9f855 100644
--- a/Core/Computation/SpecularComputation.cpp
+++ b/Core/Computation/SpecularComputation.cpp
@@ -19,8 +19,9 @@
 #include "ILayerRTCoefficients.h"
 #include "MultiLayer.h"
 
-SpecularComputation::SpecularComputation(const MultiLayer* p_multi_layer)
-    : IComputationTerm(p_multi_layer)
+SpecularComputation::SpecularComputation(const MultiLayer* p_multi_layer,
+                                         const ILayerSpecularInfo* p_fresnel_map)
+    : IComputationTerm(p_multi_layer, p_fresnel_map)
 {}
 
 bool SpecularComputation::eval(
diff --git a/Core/Computation/SpecularComputation.h b/Core/Computation/SpecularComputation.h
index 688f14b730bc816cdf8bd59b879e5f7a740f3ed4..e74ac0cb2192c8d3c1a9d8949cf40ac845f37595 100644
--- a/Core/Computation/SpecularComputation.h
+++ b/Core/Computation/SpecularComputation.h
@@ -25,7 +25,7 @@
 class SpecularComputation final : public IComputationTerm
 {
 public:
-    SpecularComputation(const MultiLayer* p_multi_layer);
+    SpecularComputation(const MultiLayer* p_multi_layer, const ILayerSpecularInfo* p_fresnel_map);
 
     bool eval(const SimulationOptions& options,
               ProgressHandler* progress,