diff --git a/Core/Multilayer/MatrixFresnelMap.cpp b/Core/Multilayer/MatrixFresnelMap.cpp
index f61a254189eced6da2862c6a2cf095a7c1ca476a..5a5a9a2074e8613da1ee053492e2325922485bc2 100644
--- a/Core/Multilayer/MatrixFresnelMap.cpp
+++ b/Core/Multilayer/MatrixFresnelMap.cpp
@@ -30,7 +30,7 @@ template <class T> auto computeRT(const std::vector<Slice>&, const kvector_t&)
 template <>
 auto computeRT<MatrixRTCoefficients>(const std::vector<Slice>& slices, const kvector_t& k)
 {
-    return SpecularMagnetic::Execute(slices, k);
+    return std::make_unique<SpecularMagneticOldStrategy>()->Execute(slices, k);
 }
 
 template <>
diff --git a/Core/Multilayer/SpecularMagneticOldStrategy.cpp b/Core/Multilayer/SpecularMagneticOldStrategy.cpp
index e0fd8acd5da7509ae755948a81321f251dbf56bc..b35cc92c57d8196d8950c0052661a68b8acdc7f8 100644
--- a/Core/Multilayer/SpecularMagneticOldStrategy.cpp
+++ b/Core/Multilayer/SpecularMagneticOldStrategy.cpp
@@ -31,8 +31,9 @@ complex_t GetImExponential(complex_t exponent);
 const complex_t I(0, 1);
 }
 
-std::vector<MatrixRTCoefficients> SpecularMagnetic::Execute(const std::vector<Slice>& slices,
-                                                            const kvector_t k)
+std::vector<MatrixRTCoefficients>
+SpecularMagneticOldStrategy::Execute(const std::vector<Slice>& slices,
+                                     const kvector_t& k) const
 {
     std::vector<MatrixRTCoefficients> result(slices.size());
     CalculateEigenvalues(slices, k, result);
@@ -40,6 +41,13 @@ std::vector<MatrixRTCoefficients> SpecularMagnetic::Execute(const std::vector<Sl
     return result;
 }
 
+std::vector<MatrixRTCoefficients>
+SpecularMagneticOldStrategy::Execute(const std::vector<Slice>& slices, const std::vector<complex_t>& k) const
+{
+    throw std::runtime_error("Not implemented");
+}
+
+
 namespace {
 void CalculateEigenvalues(const std::vector<Slice> &slices, const kvector_t k,
                           std::vector<MatrixRTCoefficients>& coeff)
diff --git a/Core/Multilayer/SpecularMagneticOldStrategy.h b/Core/Multilayer/SpecularMagneticOldStrategy.h
index a5fa7a0b2011ba8728325205d4665824dc6e326a..744b3f659f599fab02d5fcab47c692ee31722931 100644
--- a/Core/Multilayer/SpecularMagneticOldStrategy.h
+++ b/Core/Multilayer/SpecularMagneticOldStrategy.h
@@ -12,8 +12,8 @@
 //
 // ************************************************************************** //
 
-#ifndef SPECULARMAGNETIC_H
-#define SPECULARMAGNETIC_H
+#ifndef SPECULARMAGNETICOLDSTRATEGY_H
+#define SPECULARMAGNETICOLDSTRATEGY_H
 
 #include "MatrixRTCoefficients.h"
 #include "Vectors3D.h"
@@ -25,12 +25,17 @@ class Slice;
 //! the coherent wave solution in a multilayer with magnetization.
 //! @ingroup algorithms_internal
 
-namespace SpecularMagnetic
+class SpecularMagneticOldStrategy
 {
-//! Computes refraction angle reflection/transmission coefficients
-//! for given sliced multilayer and wavevector k
-BA_CORE_API_ std::vector<MatrixRTCoefficients> Execute(const std::vector<Slice>& slices,
-                                                       const kvector_t k);
-}; // namespace SpecularMagnetic
+public:
+    //! Computes refraction angle reflection/transmission coefficients
+    //! for given sliced multilayer and wavevector k
+    BA_CORE_API_ std::vector<MatrixRTCoefficients>
+    Execute(const std::vector<Slice>& slices, const kvector_t& k) const;
 
-#endif // SPECULARMAGNETIC_H
+    BA_CORE_API_ std::vector<MatrixRTCoefficients>
+    Execute(const std::vector<Slice>& slices, const std::vector<complex_t>& kz) const;
+
+}; // class SpecularMagneticOldStrategy
+
+#endif // SPECULARMAGNETICOLDSTRATEGY_H
diff --git a/Tests/UnitTests/Core/Fresnel/SpecularMagneticTest.cpp b/Tests/UnitTests/Core/Fresnel/SpecularMagneticTest.cpp
index 9d66f8c343be68884a2421514fce81ea0754aeb7..be928ca15d68cef216567cd14d64249046002e23 100644
--- a/Tests/UnitTests/Core/Fresnel/SpecularMagneticTest.cpp
+++ b/Tests/UnitTests/Core/Fresnel/SpecularMagneticTest.cpp
@@ -29,7 +29,7 @@ TEST_F(SpecularMagneticTest, initial)
     mLayer.addLayer(layer0);
     SimulationOptions options;
     ProcessedSample sample(mLayer, options);
-    SpecularMagnetic::Execute(sample.slices(), v);
+    std::make_unique<SpecularMagneticOldStrategy>()->Execute(sample.slices(), v);
 }
 
 TEST_F(SpecularMagneticTest, zerofield)
@@ -66,7 +66,7 @@ TEST_F(SpecularMagneticTest, zerofield)
     Eigen::Vector2cd TMS = RTScalar.T1min() + RTScalar.T2min();
     Eigen::Vector2cd RMS = RTScalar.R1min() + RTScalar.R2min();
 
-    auto coeffs_zerofield = SpecularMagnetic::Execute(sample_zerofield.slices(), k1);
+    auto coeffs_zerofield = std::make_unique<SpecularMagneticOldStrategy>()->Execute(sample_zerofield.slices(), k1);
     MatrixRTCoefficients RTMatrix = coeffs_zerofield[1];
     Eigen::Vector2cd TPM = RTMatrix.T1plus() + RTMatrix.T2plus();
     Eigen::Vector2cd RPM = RTMatrix.R1plus() + RTMatrix.R2plus();
@@ -90,7 +90,7 @@ TEST_F(SpecularMagneticTest, zerofield)
     TMS = RTScalar.T1min() + RTScalar.T2min();
     RMS = RTScalar.R1min() + RTScalar.R2min();
 
-    coeffs_zerofield = SpecularMagnetic::Execute(sample_zerofield.slices(), k2);
+    coeffs_zerofield = std::make_unique<SpecularMagneticOldStrategy>()->Execute(sample_zerofield.slices(), k2);
     RTMatrix = coeffs_zerofield[1];
     TPM = RTMatrix.T1plus() + RTMatrix.T2plus();
     RPM = RTMatrix.R1plus() + RTMatrix.R2plus();
@@ -114,7 +114,7 @@ TEST_F(SpecularMagneticTest, zerofield)
     TMS = RTScalar.T1min() + RTScalar.T2min();
     RMS = RTScalar.R1min() + RTScalar.R2min();
 
-    coeffs_zerofield = SpecularMagnetic::Execute(sample_zerofield.slices(), k3);
+    coeffs_zerofield = std::make_unique<SpecularMagneticOldStrategy>()->Execute(sample_zerofield.slices(), k3);
     RTMatrix = coeffs_zerofield[1];
     TPM = RTMatrix.T1plus() + RTMatrix.T2plus();
     RPM = RTMatrix.R1plus() + RTMatrix.R2plus();