diff --git a/Core/StandardSamples/MagneticLayersBuilder.cpp b/Core/StandardSamples/MagneticLayersBuilder.cpp
index 98b1da61268722d4395457afe50d0499ac50ea36..7c28d15f834c04358a3cd9c51ed631631c51db4e 100644
--- a/Core/StandardSamples/MagneticLayersBuilder.cpp
+++ b/Core/StandardSamples/MagneticLayersBuilder.cpp
@@ -15,10 +15,12 @@
 #include "Core/StandardSamples/MagneticLayersBuilder.h"
 #include "Core/Aggregate/ParticleLayout.h"
 #include "Core/Basics/Units.h"
+#include "Core/Multilayer/LayerRoughness.h"
 #include "Core/HardParticle/FormFactorFullSphere.h"
 #include "Core/Material/MaterialFactoryFuncs.h"
 #include "Core/Multilayer/Layer.h"
 #include "Core/Multilayer/MultiLayer.h"
+#include "Core/Multilayer/RoughnessModels.h"
 #include "Core/Parametrization/RealParameter.h"
 #include "Core/Particle/Particle.h"
 
@@ -102,6 +104,61 @@ MultiLayer* MagneticLayerBuilder::buildSample() const
     return multi_layer;
 }
 
+SimpleMagneticRotationBuilder::SimpleMagneticRotationBuilder() = default;
+
+MultiLayer* SimpleMagneticRotationBuilder::buildSample() const
+{
+}
+
+MultiLayer* SimpleMagneticRotationBuilder::builder(double sigmaRoughness,
+                                                  RoughnessModel roughnessModel)
+{
+    MultiLayer* multi_layer = new MultiLayer();
+
+    kvector_t substr_field = kvector_t(0.0, 1e6, 0.0);
+    kvector_t layer_field(1e6, 0.0, 0.0);
+    Material air_material = HomogeneousMaterial("Air", 0.0, 0.0);
+    Material substrate_material = HomogeneousMaterial("Substrate", 7e-6, 2e-8, substr_field);
+    Material layer_material = HomogeneousMaterial("MagLayer", 6e-4, 2e-8, layer_field);
+
+    auto roughness = LayerRoughness();
+    roughness.setSigma(sigmaRoughness * Units::angstrom);
+
+    Layer air_layer(air_material);
+    Layer substrate_layer(substrate_material);
+    Layer layer(layer_material);
+    multi_layer->addLayer(air_layer);
+    multi_layer->addLayerWithTopRoughness(layer, roughness);
+    multi_layer->addLayerWithTopRoughness(substrate_layer, roughness);
+    multi_layer->setRoughnessModel(roughnessModel);
+    return multi_layer;
+}
+
+size_t SimpleMagneticRotationBuilder::size(){return 3;}
+
+MultiLayer* SimpleMagneticRotationBuilder::createSample(size_t index){
+
+    switch(index){
+
+        case 0:
+            return builder(0.);
+
+        case 1:
+            setName("Tanh");
+            return builder(2., RoughnessModel::TANH);
+
+        case 2:
+            setName("NC");
+            return builder(2., RoughnessModel::NEVOT_CROCE);
+
+        default:
+            throw std::runtime_error("SimpleMagneticRotationBuilder::createSample() -> Error. "
+                                 "Sample index is out of range.");
+    }
+
+}
+
+
 MagneticRotationBuilder::MagneticRotationBuilder() : m_sphere_radius(5 * Units::nanometer) {}
 
 MultiLayer* MagneticRotationBuilder::buildSample() const
diff --git a/Core/StandardSamples/MagneticLayersBuilder.h b/Core/StandardSamples/MagneticLayersBuilder.h
index 055c98051ee131651de039d5234da4cb08f7be65..72b229cba2cc8f0a7e756599336f388463cd23f0 100644
--- a/Core/StandardSamples/MagneticLayersBuilder.h
+++ b/Core/StandardSamples/MagneticLayersBuilder.h
@@ -16,6 +16,7 @@
 #define BORNAGAIN_CORE_STANDARDSAMPLES_MAGNETICLAYERSBUILDER_H
 
 #include "Core/Multilayer/IMultiLayerBuilder.h"
+#include "Core/Multilayer/RoughnessModels.h"
 
 class ISample;
 
@@ -55,6 +56,22 @@ private:
     double m_sphere_radius;
 };
 
+//! Builds sample: magnetic layer on a magnetic substrate with the fields rotated by 90°
+//! @ingroup standard_samples
+
+class BA_CORE_API_ SimpleMagneticRotationBuilder : public IMultiLayerBuilder
+{
+public:
+    SimpleMagneticRotationBuilder();
+    MultiLayer* buildSample() const;
+
+    MultiLayer* createSample(size_t index = 0);
+    size_t size();
+protected:
+    MultiLayer* builder(double sigmaRoughness = 0.,
+                        RoughnessModel roughnessModel = RoughnessModel::TANH);
+};
+
 //! Builds sample: rotated magnetic spheres in substrate layer with a unit magnetic field.
 //! @ingroup standard_samples
 
diff --git a/Core/StandardSamples/SampleBuilderFactory.cpp b/Core/StandardSamples/SampleBuilderFactory.cpp
index a80d8fb69c17cec190867f0e891646f0136d6159..eab50185219a3657e438318d90c0103536d65a41 100644
--- a/Core/StandardSamples/SampleBuilderFactory.cpp
+++ b/Core/StandardSamples/SampleBuilderFactory.cpp
@@ -113,6 +113,8 @@ SampleBuilderFactory::SampleBuilderFactory()
 
     registerItem("SimpleMagneticLayerBuilder", create_new<SimpleMagneticLayerBuilder>);
 
+    registerItem("SimpleMagneticRotationBuilder", create_new<SimpleMagneticRotationBuilder>);
+
     registerItem("MagneticLayerBuilder", create_new<MagneticLayerBuilder>);
 
     registerItem("FeNiBiLayerBuilder", create_new<FeNiBiLayerBuilder>);
diff --git a/Tests/Functional/Std/StandardTests.h b/Tests/Functional/Std/StandardTests.h
index bfebae2e60efb390d649d9f9676e41fdaa16fdbc..4606e43c774dcd0dc174cd68c38f0a678698833d 100644
--- a/Tests/Functional/Std/StandardTests.h
+++ b/Tests/Functional/Std/StandardTests.h
@@ -515,6 +515,18 @@ TEST_F(Std, PolarizedQAngleReflectivityMM)
                     "SimpleMagneticLayerBuilder", 1e-10));
 }
 
+TEST_F(Std, MagneticRotationReflectivity)
+{
+    EXPECT_TRUE(run("MagneticRotationReflectivityPP", "BasicSpecularPP",
+                    "SimpleMagneticRotationBuilder", 1e-10));
+    EXPECT_TRUE(run("MagneticRotationReflectivityMM", "BasicSpecularMM",
+                    "SimpleMagneticRotationBuilder", 1e-10));
+    EXPECT_TRUE(run("MagneticRotationReflectivityPM", "BasicSpecularPM",
+                    "SimpleMagneticRotationBuilder", 1e-10));
+    EXPECT_TRUE(run("MagneticRotationReflectivityMP", "BasicSpecularMP",
+                    "SimpleMagneticRotationBuilder", 1e-10));
+}
+
 TEST_F(Std, PolarizedFeNiBiLayerPP)
 {
     EXPECT_TRUE(run("PolarizedFeNiBiLayerPP", "BasicSpecularPP",
diff --git a/Tests/ReferenceData/Std/MagneticRotationReflectivityMM.int.gz b/Tests/ReferenceData/Std/MagneticRotationReflectivityMM.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..51f52a54411117af2f784e43ade25dcd5119b3a0
Binary files /dev/null and b/Tests/ReferenceData/Std/MagneticRotationReflectivityMM.int.gz differ
diff --git a/Tests/ReferenceData/Std/MagneticRotationReflectivityMM_NC.int.gz b/Tests/ReferenceData/Std/MagneticRotationReflectivityMM_NC.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..8e067098762eed1dd794bc6f6b22ccb9ecdb1d14
Binary files /dev/null and b/Tests/ReferenceData/Std/MagneticRotationReflectivityMM_NC.int.gz differ
diff --git a/Tests/ReferenceData/Std/MagneticRotationReflectivityMM_Tanh.int.gz b/Tests/ReferenceData/Std/MagneticRotationReflectivityMM_Tanh.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..6753ee8417d41985322f5bab9215ce1d186937a4
Binary files /dev/null and b/Tests/ReferenceData/Std/MagneticRotationReflectivityMM_Tanh.int.gz differ
diff --git a/Tests/ReferenceData/Std/MagneticRotationReflectivityMP.int.gz b/Tests/ReferenceData/Std/MagneticRotationReflectivityMP.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..4748fc89e42d5a401557450ae5deded45e24b40b
Binary files /dev/null and b/Tests/ReferenceData/Std/MagneticRotationReflectivityMP.int.gz differ
diff --git a/Tests/ReferenceData/Std/MagneticRotationReflectivityMP_NC.int.gz b/Tests/ReferenceData/Std/MagneticRotationReflectivityMP_NC.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..6a7992935a2145fa98b16441e90a9c7f41b2b0ec
Binary files /dev/null and b/Tests/ReferenceData/Std/MagneticRotationReflectivityMP_NC.int.gz differ
diff --git a/Tests/ReferenceData/Std/MagneticRotationReflectivityMP_Tanh.int.gz b/Tests/ReferenceData/Std/MagneticRotationReflectivityMP_Tanh.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..25a54a19a284cd84b2720dd69a91f07c371214ce
Binary files /dev/null and b/Tests/ReferenceData/Std/MagneticRotationReflectivityMP_Tanh.int.gz differ
diff --git a/Tests/ReferenceData/Std/MagneticRotationReflectivityPM.int.gz b/Tests/ReferenceData/Std/MagneticRotationReflectivityPM.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..da0d83084d43f82505037bfbae148dd29ccad046
Binary files /dev/null and b/Tests/ReferenceData/Std/MagneticRotationReflectivityPM.int.gz differ
diff --git a/Tests/ReferenceData/Std/MagneticRotationReflectivityPM_NC.int.gz b/Tests/ReferenceData/Std/MagneticRotationReflectivityPM_NC.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..571ac574ccf92435b1d73d715dfcf893a1280afb
Binary files /dev/null and b/Tests/ReferenceData/Std/MagneticRotationReflectivityPM_NC.int.gz differ
diff --git a/Tests/ReferenceData/Std/MagneticRotationReflectivityPM_Tanh.int.gz b/Tests/ReferenceData/Std/MagneticRotationReflectivityPM_Tanh.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..253f16a0e48d0f380bc4fd853f3dfb37c2e4d5ad
Binary files /dev/null and b/Tests/ReferenceData/Std/MagneticRotationReflectivityPM_Tanh.int.gz differ
diff --git a/Tests/ReferenceData/Std/MagneticRotationReflectivityPP.int.gz b/Tests/ReferenceData/Std/MagneticRotationReflectivityPP.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..1dcea2e2bd1ec16de1977ee9d218f4cdd780eeab
Binary files /dev/null and b/Tests/ReferenceData/Std/MagneticRotationReflectivityPP.int.gz differ
diff --git a/Tests/ReferenceData/Std/MagneticRotationReflectivityPP_NC.int.gz b/Tests/ReferenceData/Std/MagneticRotationReflectivityPP_NC.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..3c31a709443cc963663e424d48e99f184eea7c1c
Binary files /dev/null and b/Tests/ReferenceData/Std/MagneticRotationReflectivityPP_NC.int.gz differ
diff --git a/Tests/ReferenceData/Std/MagneticRotationReflectivityPP_Tanh.int.gz b/Tests/ReferenceData/Std/MagneticRotationReflectivityPP_Tanh.int.gz
new file mode 100644
index 0000000000000000000000000000000000000000..741ecfeba74999c08e438cc9d92d5a259348714e
Binary files /dev/null and b/Tests/ReferenceData/Std/MagneticRotationReflectivityPP_Tanh.int.gz differ