diff --git a/Core/Aggregate/FormFactorCoherentPart.cpp b/Core/Aggregate/FormFactorCoherentPart.cpp
index f2fdeaf9e83074da94d32f92fab187a343e65d7d..116cb60f2416786d9bb5000c2d1abf3919501d2f 100644
--- a/Core/Aggregate/FormFactorCoherentPart.cpp
+++ b/Core/Aggregate/FormFactorCoherentPart.cpp
@@ -13,7 +13,7 @@
 // ************************************************************************** //
 
 #include "FormFactorCoherentPart.h"
-#include "IFresnelMap.h"
+#include "IMultiLayerFresnelMap.h"
 #include "IFormFactor.h"
 #include "SimulationElement.h"
 #include "WavevectorInfo.h"
@@ -56,7 +56,7 @@ Eigen::Matrix2cd FormFactorCoherentPart::evaluatePol(const SimulationElement& si
     return mP_ff->evaluatePol(wavevectors);
 }
 
-void FormFactorCoherentPart::setSpecularInfo(const IFresnelMap* p_fresnel_map, size_t layer_index)
+void FormFactorCoherentPart::setSpecularInfo(const IMultiLayerFresnelMap* p_fresnel_map, size_t layer_index)
 {
     mp_fresnel_map = p_fresnel_map;
     m_layer_index = layer_index;
diff --git a/Core/Aggregate/FormFactorCoherentPart.h b/Core/Aggregate/FormFactorCoherentPart.h
index 3bbddb845aeab55b739ddb155f0cffe387dfc2b8..404ccdfe29db1233ba5b95b5c273d9a8d519e2d5 100644
--- a/Core/Aggregate/FormFactorCoherentPart.h
+++ b/Core/Aggregate/FormFactorCoherentPart.h
@@ -20,7 +20,7 @@
 #include "WinDllMacros.h"
 #include <memory>
 
-class IFresnelMap;
+class IMultiLayerFresnelMap;
 class IFormFactor;
 class SimulationElement;
 
@@ -39,11 +39,11 @@ public:
     Eigen::Matrix2cd evaluatePol(const SimulationElement& sim_element) const;
 #endif
 
-    void setSpecularInfo(const IFresnelMap* p_fresnel_map, size_t layer_index);
+    void setSpecularInfo(const IMultiLayerFresnelMap* p_fresnel_map, size_t layer_index);
     double radialExtension() const;
 private:
     std::unique_ptr<IFormFactor> mP_ff;
-    const IFresnelMap* mp_fresnel_map;
+    const IMultiLayerFresnelMap* mp_fresnel_map;
     size_t m_layer_index;
 };
 
diff --git a/Core/Aggregate/FormFactorCoherentSum.cpp b/Core/Aggregate/FormFactorCoherentSum.cpp
index e182195d5616058c42fed0a5757201a32a420819..4d530c7b9894cfb819395ee50b584f858984b5eb 100644
--- a/Core/Aggregate/FormFactorCoherentSum.cpp
+++ b/Core/Aggregate/FormFactorCoherentSum.cpp
@@ -16,7 +16,7 @@
 #include "IFormFactor.h"
 #include "SimulationElement.h"
 #include "WavevectorInfo.h"
-#include "IFresnelMap.h"
+#include "IMultiLayerFresnelMap.h"
 #include "ILayerRTCoefficients.h"
 #include "Exceptions.h"
 
@@ -55,7 +55,7 @@ Eigen::Matrix2cd FormFactorCoherentSum::evaluatePol(const SimulationElement& sim
     return result;
 }
 
-void FormFactorCoherentSum::setSpecularInfo(const IFresnelMap* p_fresnel_map, size_t layer_index)
+void FormFactorCoherentSum::setSpecularInfo(const IMultiLayerFresnelMap* p_fresnel_map, size_t layer_index)
 {
     m_parts[0].setSpecularInfo(p_fresnel_map, layer_index);
 }
diff --git a/Core/Aggregate/FormFactorCoherentSum.h b/Core/Aggregate/FormFactorCoherentSum.h
index 559838eea78ebcf4ab67170b83684b3b1ecc9f04..6c39ac94af7c7be9caa68c7b1eb9b891ae00bc40 100644
--- a/Core/Aggregate/FormFactorCoherentSum.h
+++ b/Core/Aggregate/FormFactorCoherentSum.h
@@ -21,7 +21,7 @@
 #include "FormFactorCoherentPart.h"
 #include <vector>
 
-class IFresnelMap;
+class IMultiLayerFresnelMap;
 class IFormFactor;
 class SimulationElement;
 
@@ -42,7 +42,7 @@ public:
     Eigen::Matrix2cd evaluatePol(const SimulationElement& sim_element) const;
 #endif
 
-    void setSpecularInfo(const IFresnelMap* p_fresnel_map, size_t layer_index);
+    void setSpecularInfo(const IMultiLayerFresnelMap* p_fresnel_map, size_t layer_index);
 
     double relativeAbundance() const { return m_abundance; }
     void scaleRelativeAbundance(double total_abundance);
diff --git a/Core/Computation/DWBAComputation.h b/Core/Computation/DWBAComputation.h
index c20831ccaaa78ac46e529ba240df5b9197600ef2..287626fb853d0254f9a7ea8bc48b1848d9df3dd3 100644
--- a/Core/Computation/DWBAComputation.h
+++ b/Core/Computation/DWBAComputation.h
@@ -19,7 +19,7 @@
 #include "DWBASingleComputation.h"
 #include "SimulationOptions.h"
 
-class IFresnelMap;
+class IMultiLayerFresnelMap;
 class MultiLayer;
 class SimulationElement;
 
@@ -44,7 +44,7 @@ private:
     //! These iterators define the span of detector bins this simulation will work on
     std::vector<SimulationElement>::iterator m_begin_it, m_end_it;
     //! Contains the information, necessary to calculate the Fresnel coefficients.
-    std::unique_ptr<IFresnelMap> mP_fresnel_map;
+    std::unique_ptr<IMultiLayerFresnelMap> mP_fresnel_map;
     DWBASingleComputation m_single_computation;
 };
 
diff --git a/Core/Computation/DepthProbeComputation.h b/Core/Computation/DepthProbeComputation.h
index cfc240872e5e33fe6fa2a5c5dcd558be50a16fa1..1da89822f3d8135fc8ab02074be177b124cbe193 100644
--- a/Core/Computation/DepthProbeComputation.h
+++ b/Core/Computation/DepthProbeComputation.h
@@ -19,7 +19,7 @@
 #include "SimulationOptions.h"
 #include "DepthProbeComputationTerm.h"
 
-class IFresnelMap;
+class IMultiLayerFresnelMap;
 class MultiLayer;
 
 //! Performs a single-threaded depth probe computation with given sample.
@@ -41,7 +41,7 @@ private:
     void runProtected() override;
 
     DepthProbeElementIter m_begin_it, m_end_it;
-    std::unique_ptr<IFresnelMap> mP_fresnel_map;
+    std::unique_ptr<IMultiLayerFresnelMap> mP_fresnel_map;
     DepthProbeComputationTerm m_computation_term;
 };
 
diff --git a/Core/Computation/DepthProbeComputationTerm.cpp b/Core/Computation/DepthProbeComputationTerm.cpp
index dfaea0dc19d764676cbe578ddd90794d1becd46b..93bfa7b3b66d2246a6985a77ccc48dd67a3bb507 100644
--- a/Core/Computation/DepthProbeComputationTerm.cpp
+++ b/Core/Computation/DepthProbeComputationTerm.cpp
@@ -16,12 +16,12 @@
 #include "DelayedProgressCounter.h"
 #include "DepthProbeElement.h"
 #include "IAxis.h"
-#include "IFresnelMap.h"
+#include "IMultiLayerFresnelMap.h"
 #include "ILayerRTCoefficients.h"
 #include "MultiLayer.h"
 
 DepthProbeComputationTerm::DepthProbeComputationTerm(const MultiLayer* p_multi_layer,
-                                                     const IFresnelMap* p_fresnel_map)
+                                                     const IMultiLayerFresnelMap* p_fresnel_map)
     : mp_multilayer(p_multi_layer), mp_fresnel_map(p_fresnel_map)
 {}
 
diff --git a/Core/Computation/DepthProbeComputationTerm.h b/Core/Computation/DepthProbeComputationTerm.h
index 49aba73f1f838a953e745fac2f6c7a03c0f90de4..2cc799375044b08d0ab776756f661efe7df95c40 100644
--- a/Core/Computation/DepthProbeComputationTerm.h
+++ b/Core/Computation/DepthProbeComputationTerm.h
@@ -19,7 +19,7 @@
 #include <vector>
 
 class DelayedProgressCounter;
-class IFresnelMap;
+class IMultiLayerFresnelMap;
 class MultiLayer;
 class ProgressHandler;
 class DepthProbeElement;
@@ -27,7 +27,7 @@ class DepthProbeElement;
 class DepthProbeComputationTerm
 {
 public:
-    DepthProbeComputationTerm(const MultiLayer* p_multi_layer, const IFresnelMap* p_fresnel_map);
+    DepthProbeComputationTerm(const MultiLayer* p_multi_layer, const IMultiLayerFresnelMap* p_fresnel_map);
     ~DepthProbeComputationTerm();
 
     void setProgressHandler(ProgressHandler* p_progress);
@@ -36,7 +36,7 @@ public:
 
 private:
     const MultiLayer* mp_multilayer;
-    const IFresnelMap* mp_fresnel_map;
+    const IMultiLayerFresnelMap* mp_fresnel_map;
     std::unique_ptr<DelayedProgressCounter> mP_progress_counter;
 };
 
diff --git a/Core/Computation/GISASSpecularComputation.cpp b/Core/Computation/GISASSpecularComputation.cpp
index 65362358ba310f93e1c416f0c744095df3e2cb7c..fd857e6bff5286797077d991f973f04dff102f0c 100644
--- a/Core/Computation/GISASSpecularComputation.cpp
+++ b/Core/Computation/GISASSpecularComputation.cpp
@@ -13,13 +13,13 @@
 // ************************************************************************** //
 
 #include "GISASSpecularComputation.h"
-#include "IFresnelMap.h"
+#include "IMultiLayerFresnelMap.h"
 #include "ILayerRTCoefficients.h"
 #include "MultiLayer.h"
 #include "SimulationElement.h"
 
 GISASSpecularComputation::GISASSpecularComputation(const MultiLayer* p_multi_layer,
-                                                           const IFresnelMap* p_fresnel_map)
+                                                           const IMultiLayerFresnelMap* p_fresnel_map)
     : m_multilayer_info(p_multi_layer, p_fresnel_map)
 {}
 
diff --git a/Core/Computation/GISASSpecularComputation.h b/Core/Computation/GISASSpecularComputation.h
index f166339e27afaf07cdda7a17a69e2a14a418276a..0dfea3c27045954ddbfac9f6dd7e3b098a3fc7a3 100644
--- a/Core/Computation/GISASSpecularComputation.h
+++ b/Core/Computation/GISASSpecularComputation.h
@@ -26,7 +26,7 @@ class SimulationElement;
 class GISASSpecularComputation final
 {
 public:
-    GISASSpecularComputation(const MultiLayer* p_multi_layer, const IFresnelMap* p_fresnel_map);
+    GISASSpecularComputation(const MultiLayer* p_multi_layer, const IMultiLayerFresnelMap* p_fresnel_map);
 
     void compute(SimulationElement& elem) const;
 private:
diff --git a/Core/Computation/IComputationUtils.cpp b/Core/Computation/IComputationUtils.cpp
index 0ba188f3e45dba3a8c0e1c129b1ee5e37342242c..f36b6af9674c35a2a7e12e49db131ffcdff544cb 100644
--- a/Core/Computation/IComputationUtils.cpp
+++ b/Core/Computation/IComputationUtils.cpp
@@ -32,10 +32,10 @@ std::unique_ptr<MultiLayer> CreateAveragedMultilayerImpl(
 }
 
 namespace IComputationUtils {
-std::unique_ptr<IFresnelMap> CreateFresnelMap(const MultiLayer& multilayer,
+std::unique_ptr<IMultiLayerFresnelMap> CreateFresnelMap(const MultiLayer& multilayer,
                                               const SimulationOptions& sim_options)
 {
-    std::unique_ptr<IFresnelMap> P_result;
+    std::unique_ptr<IMultiLayerFresnelMap> P_result;
     if (!multilayer.requiresMatrixRTCoefficients())
         P_result.reset(new ScalarFresnelMap());
     else
diff --git a/Core/Computation/IComputationUtils.h b/Core/Computation/IComputationUtils.h
index 774bf5b45012d5b819839c0df17b6dcce750e8ea..b34ee5212cde2bcab2d8866e768f58476e62fe23 100644
--- a/Core/Computation/IComputationUtils.h
+++ b/Core/Computation/IComputationUtils.h
@@ -20,12 +20,12 @@
 #include <memory>
 #include <vector>
 
-class IFresnelMap;
+class IMultiLayerFresnelMap;
 class MultiLayer;
 class SimulationOptions;
 
 namespace IComputationUtils {
-BA_CORE_API_ std::unique_ptr<IFresnelMap> CreateFresnelMap(const MultiLayer& multilayer,
+BA_CORE_API_ std::unique_ptr<IMultiLayerFresnelMap> CreateFresnelMap(const MultiLayer& multilayer,
                                                            const SimulationOptions& sim_options);
 
 //! creates a multilayer that contains averaged materials, for use in Fresnel calculations
diff --git a/Core/Computation/MultilayerInfo.h b/Core/Computation/MultilayerInfo.h
index 6c0d486237d918b991b970d0b36db8a9cef97703..e8d56740a6e424f9add98a2ec202954d8794a172 100644
--- a/Core/Computation/MultilayerInfo.h
+++ b/Core/Computation/MultilayerInfo.h
@@ -15,7 +15,7 @@
 #ifndef MULTILAYERINFO_H
 #define MULTILAYERINFO_H
 
-class IFresnelMap;
+class IMultiLayerFresnelMap;
 class MultiLayer;
 
 //! Container struct for information regarding a multilayer: Fresnel coefficients and the
@@ -26,11 +26,11 @@ class MultiLayer;
 
 struct MultilayerInfo
 {
-    MultilayerInfo(const MultiLayer* p_multilayer, const IFresnelMap* p_fresnel_map)
+    MultilayerInfo(const MultiLayer* p_multilayer, const IMultiLayerFresnelMap* p_fresnel_map)
         : mp_multilayer(p_multilayer) , mp_fresnel_map(p_fresnel_map) {}
 
     const MultiLayer* mp_multilayer;
-    const IFresnelMap* mp_fresnel_map;
+    const IMultiLayerFresnelMap* mp_fresnel_map;
 };
 
 #endif // MULTILAYERINFO_H
diff --git a/Core/Computation/ParticleLayoutComputation.cpp b/Core/Computation/ParticleLayoutComputation.cpp
index b016b2f8f39b39009e85937eb8d02b3e691d34b6..1ca91aee4e1728971095b5906f8dd116256fd30a 100644
--- a/Core/Computation/ParticleLayoutComputation.cpp
+++ b/Core/Computation/ParticleLayoutComputation.cpp
@@ -16,7 +16,7 @@
 #include "DelayedProgressCounter.h"
 #include "Exceptions.h"
 #include "IInterferenceFunctionStrategy.h"
-#include "IFresnelMap.h"
+#include "IMultiLayerFresnelMap.h"
 #include "ILayout.h"
 #include "LayoutStrategyBuilder.h"
 #include "MultiLayer.h"
@@ -24,7 +24,7 @@
 #include "SimulationElement.h"
 
 ParticleLayoutComputation::ParticleLayoutComputation(const MultiLayer* p_multilayer,
-                                                     const IFresnelMap* p_fresnel_map,
+                                                     const IMultiLayerFresnelMap* p_fresnel_map,
                                                      const ILayout* p_layout, size_t layer_index,
                                                      const SimulationOptions& options,
                                                      bool polarized)
diff --git a/Core/Computation/ParticleLayoutComputation.h b/Core/Computation/ParticleLayoutComputation.h
index cc03cfc9838b0323d8f48f5c04c832d1b0fe1ec8..6d23f3b86b46528cc56b0101fcba59123aca1666 100644
--- a/Core/Computation/ParticleLayoutComputation.h
+++ b/Core/Computation/ParticleLayoutComputation.h
@@ -35,7 +35,7 @@ class SimulationOptions;
 class ParticleLayoutComputation final
 {
 public:
-    ParticleLayoutComputation(const MultiLayer* p_multilayer, const IFresnelMap* p_fresnel_map,
+    ParticleLayoutComputation(const MultiLayer* p_multilayer, const IMultiLayerFresnelMap* p_fresnel_map,
                               const ILayout* p_layout, size_t layer_index,
                               const SimulationOptions& options, bool polarized);
     ~ParticleLayoutComputation();
diff --git a/Core/Computation/ProcessedLayout.cpp b/Core/Computation/ProcessedLayout.cpp
index 8243f03e4f3299b23a6e996680c1c34885c57283..38191c1f335585099c63d9f4114cb94ad2071639 100644
--- a/Core/Computation/ProcessedLayout.cpp
+++ b/Core/Computation/ProcessedLayout.cpp
@@ -29,7 +29,7 @@ void ScaleRegionMap(std::map<size_t, std::vector<HomogeneousRegion>>& region_map
 }
 
 ProcessedLayout::ProcessedLayout(const ILayout& layout, const std::vector<Slice>& slices,
-                                 double z_ref, const IFresnelMap* p_fresnel_map, bool polarized)
+                                 double z_ref, const IMultiLayerFresnelMap* p_fresnel_map, bool polarized)
     : mp_fresnel_map(p_fresnel_map), m_polarized(polarized)
 {
     collectFormFactors(layout, slices, z_ref);
diff --git a/Core/Computation/ProcessedLayout.h b/Core/Computation/ProcessedLayout.h
index 203c455659a169c2dbbd4790f17578fad51013ac..8c26df2050ca92b8f7b834a80bc6d96a61f3b3bd 100644
--- a/Core/Computation/ProcessedLayout.h
+++ b/Core/Computation/ProcessedLayout.h
@@ -22,7 +22,7 @@
 
 class FormFactorCoherentSum;
 class HomogeneousRegion;
-class IFresnelMap;
+class IMultiLayerFresnelMap;
 class IInterferenceFunction;
 class ILayout;
 class IParticle;
@@ -39,7 +39,7 @@ class ProcessedLayout
 {
 public:
     ProcessedLayout(const ILayout& layout, const std::vector<Slice>& slices, double z_ref,
-                    const IFresnelMap* p_fresnel_map, bool polarized);
+                    const IMultiLayerFresnelMap* p_fresnel_map, bool polarized);
     ProcessedLayout(ProcessedLayout&& other);
     ~ProcessedLayout();
 
@@ -47,7 +47,7 @@ private:
     void collectFormFactors(const ILayout& layout, const std::vector<Slice>& slices, double z_ref);
     FormFactorCoherentSum* ProcessParticle(const IParticle& particle, const std::vector<Slice>& slices, double z_ref);
     void mergeRegionMap(const std::map<size_t, std::vector<HomogeneousRegion>>& region_map);
-    const IFresnelMap* mp_fresnel_map;
+    const IMultiLayerFresnelMap* mp_fresnel_map;
     bool m_polarized;
     SafePointerVector<FormFactorCoherentSum> m_formfactors;
     std::unique_ptr<IInterferenceFunction> mP_iff;
diff --git a/Core/Computation/ProcessedSample.cpp b/Core/Computation/ProcessedSample.cpp
index b13a7afdcfe92c61183c402a2af04c75172062a5..7b817dd010e0e2b5098aceacf0d57fd16ef0c62c 100644
--- a/Core/Computation/ProcessedSample.cpp
+++ b/Core/Computation/ProcessedSample.cpp
@@ -13,7 +13,7 @@
 // ************************************************************************** //
 
 #include "ProcessedSample.h"
-#include "IFresnelMap.h"
+#include "IMultiLayerFresnelMap.h"
 #include "Layer.h"
 #include "LayerRoughness.h"
 #include "MultiLayer.h"
diff --git a/Core/Computation/ProcessedSample.h b/Core/Computation/ProcessedSample.h
index 5580822af9fa9bb4945878e86c443fa8dffb2bcc..0e9e2cb9e797b2615b339809a45bfc8abe972178 100644
--- a/Core/Computation/ProcessedSample.h
+++ b/Core/Computation/ProcessedSample.h
@@ -20,7 +20,7 @@
 #include <memory>
 #include <vector>
 
-class IFresnelMap;
+class IMultiLayerFresnelMap;
 class LayerRoughness;
 class MultiLayer;
 class ProcessedLayout;
@@ -47,7 +47,7 @@ private:
     void initLayouts(const MultiLayer& sample);
     void addSlice(double thickness, const Material& material, const LayerRoughness* p_roughness=nullptr);
     void addNSlices(size_t n, double thickness, const Material& material, const LayerRoughness* p_roughness=nullptr);
-    std::unique_ptr<IFresnelMap> mp_fresnel_map;
+    std::unique_ptr<IMultiLayerFresnelMap> mp_fresnel_map;
     std::vector<Slice> m_slices;
     std::vector<ProcessedLayout> m_layouts;
     double m_crossCorrLength;
diff --git a/Core/Computation/RoughMultiLayerComputation.cpp b/Core/Computation/RoughMultiLayerComputation.cpp
index d4ea017e0b8a41ec85ec435ff47db2f9510a727e..4ac36f040d25ceb236b045fd927c34e13c11577c 100644
--- a/Core/Computation/RoughMultiLayerComputation.cpp
+++ b/Core/Computation/RoughMultiLayerComputation.cpp
@@ -14,7 +14,7 @@
 
 #include "RoughMultiLayerComputation.h"
 #include "ILayerRTCoefficients.h"
-#include "IFresnelMap.h"
+#include "IMultiLayerFresnelMap.h"
 #include "Faddeeva.hh"
 #include "Layer.h"
 #include "LayerInterface.h"
@@ -38,7 +38,7 @@ namespace {
 }
 
 RoughMultiLayerComputation::RoughMultiLayerComputation(const MultiLayer *p_multi_layer,
-                                                       const IFresnelMap* p_fresnel_map)
+                                                       const IMultiLayerFresnelMap* p_fresnel_map)
     : m_multilayer_info(p_multi_layer, p_fresnel_map)
 {}
 
diff --git a/Core/Computation/RoughMultiLayerComputation.h b/Core/Computation/RoughMultiLayerComputation.h
index 7405730aa0ff6c9c7d66196d3b30b5070534ddab..688cf4f3d151820e6d351935c1229e3bb55785e5 100644
--- a/Core/Computation/RoughMultiLayerComputation.h
+++ b/Core/Computation/RoughMultiLayerComputation.h
@@ -27,7 +27,7 @@ class SimulationElement;
 class RoughMultiLayerComputation final
 {
 public:
-    RoughMultiLayerComputation(const MultiLayer* p_multi_layer, const IFresnelMap* p_fresnel_map);
+    RoughMultiLayerComputation(const MultiLayer* p_multi_layer, const IMultiLayerFresnelMap* p_fresnel_map);
 
     void compute(SimulationElement& elem) const;
 
diff --git a/Core/Multilayer/IInterferenceFunctionStrategy.cpp b/Core/Multilayer/IInterferenceFunctionStrategy.cpp
index 4df607d648472e085bc8fe3d442cf5184702a8d5..02530df3e3acc8c082e9209a6c930ffea6d97108 100644
--- a/Core/Multilayer/IInterferenceFunctionStrategy.cpp
+++ b/Core/Multilayer/IInterferenceFunctionStrategy.cpp
@@ -18,7 +18,7 @@
 #include "IFormFactor.h"
 #include "IInterferenceFunction.h"
 #include "IntegratorMCMiser.h"
-#include "IFresnelMap.h"
+#include "IMultiLayerFresnelMap.h"
 #include "MathConstants.h"
 #include "RealParameter.h"
 #include "ScalarRTCoefficients.h"
diff --git a/Core/Multilayer/IInterferenceFunctionStrategy.h b/Core/Multilayer/IInterferenceFunctionStrategy.h
index bd7d03f373b82b330ebad2baa7ea20f407f39090..2bc6f9c77f67c2e44fae09d340be228acfb7a7b0 100644
--- a/Core/Multilayer/IInterferenceFunctionStrategy.h
+++ b/Core/Multilayer/IInterferenceFunctionStrategy.h
@@ -26,7 +26,7 @@ template <class T> class IntegratorMCMiser;
 class Bin1DCVector;
 class FormFactorCoherentSum;
 class IInterferenceFunction;
-class IFresnelMap;
+class IMultiLayerFresnelMap;
 class SimulationElement;
 
 //! Base class of all interference function strategy classes.
diff --git a/Core/Multilayer/IFresnelMap.cpp b/Core/Multilayer/IMultiLayerFresnelMap.cpp
similarity index 66%
rename from Core/Multilayer/IFresnelMap.cpp
rename to Core/Multilayer/IMultiLayerFresnelMap.cpp
index bdbc9e6ea0c5a0633f55c2b153d69bd32ab1baf4..45f39092f46b60b92fc0e5b9727536ccda269a10 100644
--- a/Core/Multilayer/IFresnelMap.cpp
+++ b/Core/Multilayer/IMultiLayerFresnelMap.cpp
@@ -12,25 +12,25 @@
 //
 // ************************************************************************** //
 
-#include "IFresnelMap.h"
+#include "IMultiLayerFresnelMap.h"
 #include "MultiLayer.h"
 
-static_assert(std::is_copy_constructible<IFresnelMap>::value == false,
+static_assert(std::is_copy_constructible<IMultiLayerFresnelMap>::value == false,
     "IFresnelMap should not be copy constructable");
-static_assert(std::is_copy_assignable<IFresnelMap>::value == false,
+static_assert(std::is_copy_assignable<IMultiLayerFresnelMap>::value == false,
     "IFresnelMap should not be copy assignable");
 
-IFresnelMap::IFresnelMap()
+IMultiLayerFresnelMap::IMultiLayerFresnelMap()
     : m_use_cache(true)
 {}
-IFresnelMap::~IFresnelMap() {}
+IMultiLayerFresnelMap::~IMultiLayerFresnelMap() {}
 
-void IFresnelMap::setMultilayer(const MultiLayer& multilayer)
+void IMultiLayerFresnelMap::setMultilayer(const MultiLayer& multilayer)
 {
     mP_multilayer.reset(multilayer.clone());
 }
 
-void IFresnelMap::disableCaching()
+void IMultiLayerFresnelMap::disableCaching()
 {
     m_use_cache = false;
 }
diff --git a/Core/Multilayer/IFresnelMap.h b/Core/Multilayer/IMultiLayerFresnelMap.h
similarity index 91%
rename from Core/Multilayer/IFresnelMap.h
rename to Core/Multilayer/IMultiLayerFresnelMap.h
index 7563b2d286a73c138e6fed906be9754e7469bdb1..a0b26fbe18870a93aeaffed136a0ff1c556d76f0 100644
--- a/Core/Multilayer/IFresnelMap.h
+++ b/Core/Multilayer/IMultiLayerFresnelMap.h
@@ -12,8 +12,8 @@
 //
 // ************************************************************************** //
 
-#ifndef IFRESNELMAP_H
-#define IFRESNELMAP_H
+#ifndef IMULTILAYERFRESNELMAP_H
+#define IMULTILAYERFRESNELMAP_H
 
 #include "ILayerRTCoefficients.h"
 #include "WinDllMacros.h"
@@ -32,11 +32,11 @@ typedef BasicVector3D<double> kvector_t;
 //! (these amplitudes correspond to the specular part of the wavefunction).
 //! @ingroup algorithms_internal
 
-class BA_CORE_API_ IFresnelMap
+class BA_CORE_API_ IMultiLayerFresnelMap
 {
 public:
-    IFresnelMap();
-    virtual ~IFresnelMap();
+    IMultiLayerFresnelMap();
+    virtual ~IMultiLayerFresnelMap();
 
     //! Retrieves the amplitude coefficients for a (time-reversed) outgoing wavevector.
     virtual std::unique_ptr<const ILayerRTCoefficients>
@@ -64,4 +64,4 @@ protected:
     std::unique_ptr<MultiLayer> mP_multilayer;
 };
 
-#endif // IFRESNELMAP_H
+#endif // IMULTILAYERFRESNELMAP_H
diff --git a/Core/Multilayer/LayoutStrategyBuilder.cpp b/Core/Multilayer/LayoutStrategyBuilder.cpp
index 0adf69e0ddeb2d271b84b82a98ffd4646036ab86..306ab64617fe16c2f7c5bd9c6de85cfabe51da07 100644
--- a/Core/Multilayer/LayoutStrategyBuilder.cpp
+++ b/Core/Multilayer/LayoutStrategyBuilder.cpp
@@ -19,7 +19,7 @@
 #include "FormFactorDWBA.h"
 #include "FormFactorDWBAPol.h"
 #include "FormFactorBAPol.h"
-#include "IFresnelMap.h"
+#include "IMultiLayerFresnelMap.h"
 #include "ILayout.h"
 #include "IParticle.h"
 #include "InterferenceFunctionNone.h"
@@ -32,7 +32,7 @@
 
 LayoutStrategyBuilder::LayoutStrategyBuilder(
     const MultiLayer* p_multilayer, const ILayout* p_layout,
-    const IFresnelMap* p_fresnel_map, bool polarized,
+    const IMultiLayerFresnelMap* p_fresnel_map, bool polarized,
     const SimulationOptions& sim_params, size_t layer_index)
     : mp_multilayer(p_multilayer)
     , mp_layout(p_layout)
diff --git a/Core/Multilayer/LayoutStrategyBuilder.h b/Core/Multilayer/LayoutStrategyBuilder.h
index e79ef038bfd0d866fd3598cf16dae3c48cf8f1e3..2ac5bae080ea4cfab403453e44ab80737f77b701 100644
--- a/Core/Multilayer/LayoutStrategyBuilder.h
+++ b/Core/Multilayer/LayoutStrategyBuilder.h
@@ -27,7 +27,7 @@ class IInterferenceFunction;
 class IInterferenceFunctionStrategy;
 class ILayout;
 class IParticle;
-class IFresnelMap;
+class IMultiLayerFresnelMap;
 class MultiLayer;
 
 //! Methods to generate a simulation strategy for a ParticleLayoutComputation.
@@ -38,7 +38,7 @@ class BA_CORE_API_ LayoutStrategyBuilder
 public:
     LayoutStrategyBuilder(
         const MultiLayer* p_multilayer, const ILayout* p_layout,
-        const IFresnelMap* p_fresnel_map, bool polarized,
+        const IMultiLayerFresnelMap* p_fresnel_map, bool polarized,
         const SimulationOptions& sim_params, size_t layer_index);
 
     ~LayoutStrategyBuilder();
@@ -57,7 +57,7 @@ private:
     const MultiLayer* mp_multilayer;
     const ILayout* mp_layout;
     //! R and T coefficients for DWBA
-    const IFresnelMap* mp_fresnel_map;
+    const IMultiLayerFresnelMap* mp_fresnel_map;
     bool m_polarized;  //!< polarized computation required?
     SimulationOptions m_sim_params;
     size_t m_layer_index;
diff --git a/Core/Multilayer/MatrixFresnelMap.cpp b/Core/Multilayer/MatrixFresnelMap.cpp
index 523939e64919146d51b21c3db211b0603488e11f..9d8ab34a287821d87688f2db679e0f81babc17da 100644
--- a/Core/Multilayer/MatrixFresnelMap.cpp
+++ b/Core/Multilayer/MatrixFresnelMap.cpp
@@ -59,7 +59,7 @@ MatrixFresnelMap::getCoefficients(const kvector_t& kvec, size_t layer_index,
 
 void MatrixFresnelMap::setMultilayer(const MultiLayer& multilayer)
 {
-    IFresnelMap::setMultilayer(multilayer);
+    IMultiLayerFresnelMap::setMultilayer(multilayer);
     mP_inverted_multilayer.reset(multilayer.cloneInvertB());
 }
 
diff --git a/Core/Multilayer/MatrixFresnelMap.h b/Core/Multilayer/MatrixFresnelMap.h
index c1047bcf069f1fcdf2002592bc7b72357b6ba0a6..63c7f4fa929ef883955ad40f66ea4d21276a6705 100644
--- a/Core/Multilayer/MatrixFresnelMap.h
+++ b/Core/Multilayer/MatrixFresnelMap.h
@@ -16,7 +16,7 @@
 #define MATRIXFRESNELMAP_H
 
 #include "HashKVector.h"
-#include "IFresnelMap.h"
+#include "IMultiLayerFresnelMap.h"
 #include <memory>
 #include <unordered_map>
 #include <vector>
@@ -29,7 +29,7 @@ class SimulationElement;
 //! Implementation of IFresnelMap for matrix valued reflection/transmission coefficients.
 //! @ingroup algorithms_internal
 
-class BA_CORE_API_ MatrixFresnelMap : public IFresnelMap
+class BA_CORE_API_ MatrixFresnelMap : public IMultiLayerFresnelMap
 {
 public:
     MatrixFresnelMap();
diff --git a/Core/Multilayer/ScalarFresnelMap.h b/Core/Multilayer/ScalarFresnelMap.h
index 57c357d98b5e3918a18604b629d9f39f146b87a1..7f9d7133ba757736a0d7b12e525eebd645e1d06c 100644
--- a/Core/Multilayer/ScalarFresnelMap.h
+++ b/Core/Multilayer/ScalarFresnelMap.h
@@ -16,7 +16,7 @@
 #define SCALARFRESNELMAP_H
 
 #include "Hash2Doubles.h"
-#include "IFresnelMap.h"
+#include "IMultiLayerFresnelMap.h"
 #include <unordered_map>
 #include <utility>
 #include <vector>
@@ -29,7 +29,7 @@ class SimulationElement;
 //! Implementation of IFresnelMap for scalar valued reflection/transmission coefficients.
 //! @ingroup algorithms_internal
 
-class BA_CORE_API_ ScalarFresnelMap : public IFresnelMap
+class BA_CORE_API_ ScalarFresnelMap : public IMultiLayerFresnelMap
 {
 public:
     ScalarFresnelMap();