diff --git a/GUI/Model/FromCore/ItemizeSample.cpp b/GUI/Model/FromCore/ItemizeSample.cpp
index 162c3008fd60eeb92a53f165b9a3730db9dd8863..840a2e66130d4840a066b7238672bbea73d7f544 100644
--- a/GUI/Model/FromCore/ItemizeSample.cpp
+++ b/GUI/Model/FromCore/ItemizeSample.cpp
@@ -654,7 +654,7 @@ SampleItem* itemizeSample(const MultiLayer& sample, const QString& nodeName)
         const auto* layer = sample.layer(layerIndex);
 
         const LayerRoughness* top_roughness =
-            layerIndex == 0 ? nullptr : sample.layerRoughness(layerIndex);
+            layerIndex == 0 ? nullptr : sample.layer(layerIndex)->roughness();
 
         auto* layerItem = result->createLayerItemAt();
         layerItem->setMaterial(findMaterialItem(matItems, layer));
diff --git a/Resample/Processed/ReSample.cpp b/Resample/Processed/ReSample.cpp
index 1786228a1a3d495cb6a8d80e1301188ecec09e81..7d63330a2676a5a8e4024a0067408665cf7ab05e 100644
--- a/Resample/Processed/ReSample.cpp
+++ b/Resample/Processed/ReSample.cpp
@@ -85,7 +85,7 @@ const LayerRoughness* layerTopRoughness(const MultiLayer& sample, size_t i_layer
 {
     if (i_layer == 0)
         return nullptr;
-    return sample.layerRoughness(i_layer);
+    return sample.layer(i_layer)->roughness();
 }
 
 //! Returns a vector of slices that represent the layer structure of the sample.
diff --git a/Sample/Interface/RoughnessMap.cpp b/Sample/Interface/RoughnessMap.cpp
index 1e0056d7babc4715947237a26ae3aa8e39f692aa..b78bd19c9ed05b7676383e99596e08feebcb8ea7 100644
--- a/Sample/Interface/RoughnessMap.cpp
+++ b/Sample/Interface/RoughnessMap.cpp
@@ -16,6 +16,7 @@
 #include "Base/Const/PhysicalConstants.h"
 #include "Base/Util/Assert.h"
 #include "Sample/Interface/LayerRoughness.h"
+#include "Sample/Multilayer/Layer.h"
 #include <algorithm>
 
 using PhysConsts::pi;
@@ -80,9 +81,9 @@ double2d_t RoughnessMap::generateMap()
 double2d_t RoughnessMap::mapFromHeights() const
 {
     const size_t z_steps = 3999;
-    const InterlayerModel* interlayerModel = m_sample.layerRoughness(m_i_layer)->interlayerModel();
+    const InterlayerModel* interlayer = m_sample.layer(m_i_layer)->roughness()->interlayerModel();
     const double rms = m_sample.layerRoughnessRMS(m_i_layer);
-    const double sigma_factor = interlayerModel->sigmaRange();
+    const double sigma_factor = interlayer->sigmaRange();
     const double z_limit = rms * sigma_factor;
     const double step = 2 * z_limit / (z_steps - 1);
 
@@ -94,7 +95,7 @@ double2d_t RoughnessMap::mapFromHeights() const
     // fill mesh with weights
     std::vector<double> z_weights(z_steps);
     for (size_t i = 0; i < z_steps; i++)
-        z_weights[i] = interlayerModel->distribution(z_points[i], rms);
+        z_weights[i] = interlayer->distribution(z_points[i], rms);
 
     // fill map with random values
     std::discrete_distribution<int> d(z_weights.begin(), z_weights.end());
diff --git a/Sample/Multilayer/MultiLayer.cpp b/Sample/Multilayer/MultiLayer.cpp
index bef82bede7150659301dc22dedb5f6e534f024d3..d8aad9ecec82df906b0293ff03811dcac81d3a5c 100644
--- a/Sample/Multilayer/MultiLayer.cpp
+++ b/Sample/Multilayer/MultiLayer.cpp
@@ -58,14 +58,14 @@ void MultiLayer::addLayer(const Layer& layer)
 
 const AutocorrelationModel* MultiLayer::autocorrAt(int i_layer) const
 {
-    return layerRoughness(i_layer)->autocorrelationModel();
+    return layer(i_layer)->roughness()->autocorrelationModel();
 }
 
 double MultiLayer::maxCutoffSpatialFrequencyAt(size_t i_layer) const
 {
     double result = 0;
     for (size_t i = i_layer; i < m_layers.size(); i++) {
-        const auto autocorr = layerRoughness(i_layer)->autocorrelationModel();
+        const auto autocorr = layer(i_layer)->roughness()->autocorrelationModel();
         result = std::max(autocorr->maxSpatialFrequency(), result);
     }
     return result;
@@ -76,11 +76,6 @@ const Layer* MultiLayer::layer(size_t i_layer) const
     return m_layers.at(i_layer);
 }
 
-const LayerRoughness* MultiLayer::layerRoughness(size_t i_layer) const
-{
-    return m_layers.at(i_layer)->roughness();
-}
-
 void MultiLayer::setExternalField(const R3& ext_field)
 {
     m_ext_field = ext_field;
diff --git a/Sample/Multilayer/MultiLayer.h b/Sample/Multilayer/MultiLayer.h
index d15f75f5fc259209117ab46b4159d1d3357b1bd3..996d11f84fd185281e08ffee26283089690e4e7f 100644
--- a/Sample/Multilayer/MultiLayer.h
+++ b/Sample/Multilayer/MultiLayer.h
@@ -78,7 +78,6 @@ public:
     }
 
     const Layer* layer(size_t i_layer) const;
-    const LayerRoughness* layerRoughness(size_t i_layer) const;
     R3 externalField() const
     {
         return m_ext_field;
diff --git a/Tests/Unit/Sample/MultiLayerTest.cpp b/Tests/Unit/Sample/MultiLayerTest.cpp
index 7d2e0c199858225601ac8c81dac73e772bb4c859..abf7aefdd0d53916f5cb27254b561b5147c7d137 100644
--- a/Tests/Unit/Sample/MultiLayerTest.cpp
+++ b/Tests/Unit/Sample/MultiLayerTest.cpp
@@ -83,15 +83,15 @@ TEST_F(MultiLayerTest, LayerInterfaces)
     set_four();
 
     // check interfaces
-    const LayerRoughness* roughness1 = mLayer.layerRoughness(1);
+    const LayerRoughness* roughness1 = mLayer.layer(1)->roughness();
     EXPECT_TRUE(nullptr != roughness1);
     EXPECT_EQ(mLayer.layerRoughnessRMS(1), 0.0);
 
-    const LayerRoughness* roughness2 = mLayer.layerRoughness(2);
+    const LayerRoughness* roughness2 = mLayer.layer(2)->roughness();
     EXPECT_TRUE(nullptr != roughness2);
     EXPECT_EQ(mLayer.layerRoughnessRMS(2), 0.0);
 
-    const LayerRoughness* roughness3 = mLayer.layerRoughness(3);
+    const LayerRoughness* roughness3 = mLayer.layer(3)->roughness();
     EXPECT_TRUE(nullptr != roughness3);
     EXPECT_EQ(mLayer.layerRoughnessRMS(3), 0.0);
 }
@@ -112,19 +112,19 @@ TEST_F(MultiLayerTest, Clone)
     EXPECT_EQ(substrate.thickness(), mLayerClone->layer(3)->thickness());
 
     // check interfaces
-    const LayerRoughness* roughness0 = mLayerClone->layerRoughness(0);
+    const LayerRoughness* roughness0 = mLayerClone->layer(1)->roughness();
     EXPECT_TRUE(nullptr != roughness0);
-    EXPECT_EQ(mLayerClone->layerRoughnessRMS(0), 0.0);
+    EXPECT_EQ(mLayerClone->layerRoughnessRMS(1), 0.0);
     EXPECT_TRUE(nullptr == roughness0->crosscorrelationModel());
 
-    const LayerRoughness* roughness1 = mLayerClone->layerRoughness(1);
+    const LayerRoughness* roughness1 = mLayerClone->layer(2)->roughness();
     EXPECT_TRUE(nullptr != roughness1);
-    EXPECT_EQ(mLayerClone->layerRoughnessRMS(1), 0.0);
+    EXPECT_EQ(mLayerClone->layerRoughnessRMS(2), 0.0);
     EXPECT_TRUE(nullptr == roughness1->crosscorrelationModel());
 
-    const LayerRoughness* roughness2 = mLayerClone->layerRoughness(2);
+    const LayerRoughness* roughness2 = mLayerClone->layer(3)->roughness();
     EXPECT_TRUE(nullptr != roughness2);
-    EXPECT_EQ(mLayerClone->layerRoughnessRMS(2), 0.0);
+    EXPECT_EQ(mLayerClone->layerRoughnessRMS(3), 0.0);
     EXPECT_TRUE(nullptr == roughness2->crosscorrelationModel());
 
     delete mLayerClone;
@@ -140,8 +140,8 @@ TEST_F(MultiLayerTest, WithRoughness)
     mLayer.addLayer(Layer(*layer1.material(), layer1.thickness(), &lr));
     mLayer.addLayer(substrate);
 
-    const LayerRoughness* roughness0 = mLayer.layerRoughness(1);
-    const LayerRoughness* roughness1 = mLayer.layerRoughness(2);
+    const LayerRoughness* roughness0 = mLayer.layer(1)->roughness();
+    const LayerRoughness* roughness1 = mLayer.layer(2)->roughness();
 
     EXPECT_TRUE(roughness0);
     auto* roughness0_AC =
@@ -175,8 +175,8 @@ TEST_F(MultiLayerTest, CloneWithRoughness)
 
     MultiLayer* mLayerClone = mLayer.clone();
 
-    const LayerRoughness* roughness1 = mLayerClone->layerRoughness(1);
-    const LayerRoughness* roughness2 = mLayerClone->layerRoughness(2);
+    const LayerRoughness* roughness1 = mLayerClone->layer(1)->roughness();
+    const LayerRoughness* roughness2 = mLayerClone->layer(2)->roughness();
 
     EXPECT_TRUE(roughness1);
     EXPECT_TRUE(roughness2);