diff --git a/App/src/DrawHelper.cpp b/App/src/DrawHelper.cpp
index d7e618b0f7a9da6f540d9555e09e5bd37deaded6..38afcc969bc2dd3b5790d8d3e63bab4e5cfa6786 100644
--- a/App/src/DrawHelper.cpp
+++ b/App/src/DrawHelper.cpp
@@ -18,7 +18,6 @@
 #include "MultiLayer.h"
 #include "Utils.h"
 #include "Lattice.h"
-#include "LayerDecorator.h"
 #include "MesoCrystal.h"
 #include "Crystal.h"
 #include "LatticeBasis.h"
diff --git a/App/src/StandardSamples.cpp b/App/src/StandardSamples.cpp
index 8eeea50a6ca95e5aa44b9d6cbf8190ff2d1d240c..7fade17d8448844987197a0fa06fc5eb9b364c46 100644
--- a/App/src/StandardSamples.cpp
+++ b/App/src/StandardSamples.cpp
@@ -21,7 +21,6 @@
 #include "FormFactors.h"
 #include "ParticleDecoration.h"
 #include "InterferenceFunctionNone.h"
-#include "LayerDecorator.h"
 #include "Lattice.h"
 #include "LatticeBasis.h"
 #include "Crystal.h"
@@ -368,8 +367,9 @@ ISample *StandardSamples::IsGISAXS7_morphology()
         (new Particle(n_particle, ff10), m10, pos10, 0.5);
     particle_decoration.addParticleInfo(particle_info10);
 
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
-    p_multi_layer->addLayer(air_layer_decorator);
+    air_layer.setDecoration(particle_decoration);
+
+    p_multi_layer->addLayer(air_layer);
     return p_multi_layer;
 }
 
@@ -401,9 +401,10 @@ ISample *StandardSamples::IsGISAXS8_2DDL_lattice()
         (new Particle(n_particle, new FormFactorCylinder
                       (5*Units::nanometer, 5*Units::nanometer)));
     particle_decoration.addInterferenceFunction(p_interference_function);
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
 
-    p_multi_layer->addLayer(air_layer_decorator);
+    air_layer.setDecoration(particle_decoration);
+
+    p_multi_layer->addLayer(air_layer);
     p_multi_layer->addLayer(substrate_layer);
     return p_multi_layer;
 }
@@ -436,9 +437,10 @@ ISample *StandardSamples::IsGISAXS8_2DDL_lattice2()
         (new Particle(n_particle, new FormFactorCylinder
                       (5*Units::nanometer, 5*Units::nanometer)));
     particle_decoration.addInterferenceFunction(p_interference_function);
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
 
-    p_multi_layer->addLayer(air_layer_decorator);
+    air_layer.setDecoration(particle_decoration);
+
+    p_multi_layer->addLayer(air_layer);
     p_multi_layer->addLayer(substrate_layer);
     return p_multi_layer;
 }
@@ -465,9 +467,10 @@ ISample *StandardSamples::IsGISAXS10_CylindersParacrystal1D()
                       (5*Units::nanometer, 5*Units::nanometer)));
     particle_decoration.addInterferenceFunction(p_interference_function);
     //    particle_decoration.setTotalParticleSurfaceDensity(1.0/(20.0*Units::nanometer*20.0*Units::nanometer));
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
 
-    p_multi_layer->addLayer(air_layer_decorator);
+    air_layer.setDecoration(particle_decoration);
+
+    p_multi_layer->addLayer(air_layer);
     p_multi_layer->addLayer(substrate_layer);
     return p_multi_layer;
 }
@@ -492,9 +495,10 @@ ISample *StandardSamples::IsGISAXS11_CoreShellParticles()
     ParticleCoreShell particle(shell_particle, core_particle, core_position);
     ParticleDecoration particle_decoration(particle.clone());
     particle_decoration.addInterferenceFunction(new InterferenceFunctionNone());
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
 
-    p_multi_layer->addLayer(air_layer_decorator);
+    air_layer.setDecoration(particle_decoration);
+
+    p_multi_layer->addLayer(air_layer);
     return p_multi_layer;
 }
 
@@ -521,9 +525,10 @@ ISample *StandardSamples::IsGISAXS14_LayeredSpheresOnGradedInterface()
         (new Particle(n_particle, new FormFactorSphere
                       (5*Units::nanometer, 5.*2.0*Units::nanometer)));
     particle_decoration.addInterferenceFunction(p_interference_function);
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
 
-    p_multi_layer->addLayer(air_layer_decorator);
+    air_layer.setDecoration(particle_decoration);
+
+    p_multi_layer->addLayer(air_layer);
     p_multi_layer->addLayer(substrate_layer);
 
     return p_multi_layer;
@@ -562,8 +567,10 @@ ISample *StandardSamples::IsGISAXS15_SSCA()
     std::cout << "Number of replacements: " << nbr_replacements << std::endl;
 
     particle_decoration.addInterferenceFunction(p_interference_function);
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
-    p_multi_layer->addLayer(air_layer_decorator);
+
+    air_layer.setDecoration(particle_decoration);
+
+    p_multi_layer->addLayer(air_layer);
     return p_multi_layer;
 }
 
@@ -616,9 +623,10 @@ ISample *StandardSamples::MesoCrystal1()
     particle_decoration.addParticle(meso.clone(), 0.0, 0.5);
     particle_decoration.addParticle(meso2.clone(), 0.0, 0.5);
     particle_decoration.addInterferenceFunction(p_interference_function);
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
 
-    p_multi_layer->addLayer(air_layer_decorator);
+    air_layer.setDecoration(particle_decoration);
+
+    p_multi_layer->addLayer(air_layer);
     p_multi_layer->addLayer(substrate_layer);
     return p_multi_layer;
 
@@ -683,9 +691,11 @@ ISample *StandardSamples::MesoCrystal2()
     particle_decoration.addParticle(meso_crystal, 0.2*Units::micrometer);
     particle_decoration.setTotalParticleSurfaceDensity(surface_density);
     particle_decoration.addInterferenceFunction(p_interference_function);
-    LayerDecorator avg_layer_decorator(avg_layer, particle_decoration);
+
+    avg_layer.setDecoration(particle_decoration);
+
     p_multi_layer->addLayer(air_layer);
-    p_multi_layer->addLayer(avg_layer_decorator);
+    p_multi_layer->addLayer(avg_layer);
     p_multi_layer->addLayer(substrate_layer);
     return p_multi_layer;
 
@@ -714,8 +724,10 @@ ISample *StandardSamples::FormFactor_Box()
                                         5*Units::nanometer)));
     particle_decoration.addInterferenceFunction
         (new InterferenceFunctionNone());
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
-    p_multi_layer->addLayer(air_layer_decorator);
+
+    air_layer.setDecoration(particle_decoration);
+
+    p_multi_layer->addLayer(air_layer);
     p_multi_layer->addLayer(substrate_layer);
     return p_multi_layer;
 }
@@ -743,8 +755,10 @@ ISample *StandardSamples::FormFactor_Cone()
                                          Units::deg2rad(54.73 ))));
     particle_decoration.addInterferenceFunction
         (new InterferenceFunctionNone());
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
-    p_multi_layer->addLayer(air_layer_decorator);
+
+    air_layer.setDecoration(particle_decoration);
+
+    p_multi_layer->addLayer(air_layer);
     p_multi_layer->addLayer(substrate_layer);
     return p_multi_layer;
 }
@@ -771,8 +785,10 @@ ISample *StandardSamples::FormFactor_Sphere()
                                            5*Units::nanometer)));
     particle_decoration.addInterferenceFunction
 (new InterferenceFunctionNone());
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
-    p_multi_layer->addLayer(air_layer_decorator);
+
+    air_layer.setDecoration(particle_decoration);
+
+    p_multi_layer->addLayer(air_layer);
     p_multi_layer->addLayer(substrate_layer);
     return p_multi_layer;
 }
@@ -801,8 +817,10 @@ ISample *StandardSamples::FormFactor_Ellipsoid()
                                               Units::deg2rad(54.73 ))));
     particle_decoration.addInterferenceFunction
         (new InterferenceFunctionNone());
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
-    p_multi_layer->addLayer(air_layer_decorator);
+
+    air_layer.setDecoration(particle_decoration);
+
+    p_multi_layer->addLayer(air_layer);
     p_multi_layer->addLayer(substrate_layer);
     return p_multi_layer;
 }
@@ -829,8 +847,10 @@ ISample *StandardSamples::FormFactor_FullSpheroid()
                                                  7*Units::nanometer )));
     particle_decoration.addInterferenceFunction
         (new InterferenceFunctionNone());
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
-    p_multi_layer->addLayer(air_layer_decorator);
+
+    air_layer.setDecoration(particle_decoration);
+
+    p_multi_layer->addLayer(air_layer);
     p_multi_layer->addLayer(substrate_layer);
     return p_multi_layer;
 }
@@ -858,8 +878,10 @@ ISample *StandardSamples::FormFactor_HemiSpheroid()
                                                  2*Units::nanometer)));
     particle_decoration.addInterferenceFunction
         (new InterferenceFunctionNone());
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
-    p_multi_layer->addLayer(air_layer_decorator);
+
+    air_layer.setDecoration(particle_decoration);
+
+    p_multi_layer->addLayer(air_layer);
     p_multi_layer->addLayer(substrate_layer);
     return p_multi_layer;
 }
@@ -887,8 +909,10 @@ ISample *StandardSamples::FormFactor_Parallelpiped()
     ParticleDecoration particle_decoration(particle.clone());
     particle_decoration.addInterferenceFunction
         (new InterferenceFunctionNone());
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
-    p_multi_layer->addLayer(air_layer_decorator);
+
+    air_layer.setDecoration(particle_decoration);
+
+    p_multi_layer->addLayer(air_layer);
     return p_multi_layer;
 }
 
@@ -915,9 +939,11 @@ ISample *StandardSamples::FormFactor_Cylinder()
     ParticleDecoration particle_decoration(particle.clone());
     particle_decoration.addInterferenceFunction
         (new InterferenceFunctionNone());
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
 
-    p_multi_layer->addLayer(air_layer_decorator);
+    air_layer.setDecoration(particle_decoration);
+
+
+    p_multi_layer->addLayer(air_layer);
     return p_multi_layer;
 }
 
@@ -944,9 +970,10 @@ ISample *StandardSamples::FormFactor_Pyramid()
                                             Units::deg2rad(54.73 ) ) ) );
     particle_decoration.addInterferenceFunction
         (new InterferenceFunctionNone());
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
 
-    p_multi_layer->addLayer(air_layer_decorator);
+    air_layer.setDecoration(particle_decoration);
+
+    p_multi_layer->addLayer(air_layer);
     p_multi_layer->addLayer(substrate_layer);
     return p_multi_layer;
 }
@@ -973,9 +1000,10 @@ ISample *StandardSamples::FormFactor_Prism3()
                                            5*Units::nanometer)));
     particle_decoration.addInterferenceFunction
         (new InterferenceFunctionNone());
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
 
-    p_multi_layer->addLayer(air_layer_decorator);
+    air_layer.setDecoration(particle_decoration);
+
+    p_multi_layer->addLayer(air_layer);
     p_multi_layer->addLayer(substrate_layer);
     return p_multi_layer;
 }
@@ -1001,9 +1029,10 @@ ISample *StandardSamples::FormFactor_FullSphere()
                        new FormFactorFullSphere(5*Units::nanometer ) ) );
      particle_decoration.addInterferenceFunction
          (new InterferenceFunctionNone());
-     LayerDecorator air_layer_decorator(air_layer, particle_decoration);
 
-     p_multi_layer->addLayer(air_layer_decorator);
+     air_layer.setDecoration(particle_decoration);
+
+     p_multi_layer->addLayer(air_layer);
      p_multi_layer->addLayer(substrate_layer);
      return p_multi_layer;
 }
diff --git a/App/src/TestDetectorResolution.cpp b/App/src/TestDetectorResolution.cpp
index 6a13b97683893562676ee45afd31c753926c2e66..5cd4aa0cc7f45827ce402f4ad973215b49a82da8 100644
--- a/App/src/TestDetectorResolution.cpp
+++ b/App/src/TestDetectorResolution.cpp
@@ -21,7 +21,6 @@
 #include "Simulation.h"
 #include "MultiLayer.h"
 #include "MaterialManager.h"
-#include "LayerDecorator.h"
 #include "MathFunctions.h"
 #include "ResolutionFunction2DSimple.h"
 
@@ -73,9 +72,10 @@ void TestDetectorResolution::initializeSample()
                      new FormFactorCylinder(5*Units::nanometer,
                                             5*Units::nanometer)));
     particle_decoration.addInterferenceFunction(p_interference_funtion);
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
 
-    p_multi_layer->addLayer(air_layer_decorator);
+    air_layer.setDecoration(particle_decoration);
+
+    p_multi_layer->addLayer(air_layer);
     p_multi_layer->addLayer(substrate_layer);
     mp_sample = p_multi_layer;
 }
diff --git a/App/src/TestFittingModule1.cpp b/App/src/TestFittingModule1.cpp
index 988aa9f02d77858ff450516ce434d6f89e738099..9fa45e36baeb4e605664450982c9ce7a2a6f9a2e 100644
--- a/App/src/TestFittingModule1.cpp
+++ b/App/src/TestFittingModule1.cpp
@@ -25,7 +25,6 @@
 #include "InterferenceFunction1DParaCrystal.h"
 #include "InterferenceFunctionNone.h"
 #include "IsGISAXSTools.h"
-#include "LayerDecorator.h"
 #include "MaterialManager.h"
 #include "MathFunctions.h"
 #include "MinimizerFactory.h"
@@ -121,8 +120,10 @@ void TestFittingModule1::initializeSample1()
     ParticleDecoration particle_decoration( new Particle(n_particle,
             new FormFactorCylinder(5*Units::nanometer, 5*Units::nanometer)));
     particle_decoration.addInterferenceFunction(new InterferenceFunctionNone());
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
-    p_multi_layer->addLayer(air_layer_decorator);
+
+    air_layer.setDecoration(particle_decoration);
+
+    p_multi_layer->addLayer(air_layer);
     mp_sample = p_multi_layer;
 
     // defining parameters for minimization
@@ -163,9 +164,10 @@ void TestFittingModule1::initializeSample2()
     particle_decoration.addParticle(new Particle(n_particle, new FormFactorCylinder(cylinder_height, cylinder_radius)),0.0, 0.2);
     particle_decoration.addParticle(new Particle(n_particle, new FormFactorPrism3(prism3_height, prism3_half_side)), 0.0, 0.8);
     particle_decoration.addInterferenceFunction(new InterferenceFunctionNone());
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
 
-    p_multi_layer->addLayer(air_layer_decorator);
+    air_layer.setDecoration(particle_decoration);
+
+    p_multi_layer->addLayer(air_layer);
     p_multi_layer->addLayer(substrate_layer);
 
     mp_sample = p_multi_layer;
diff --git a/App/src/TestFittingModule2.cpp b/App/src/TestFittingModule2.cpp
index 0a945ecee3d9a2bd1ccdd93de807da3237d8bda2..0c73396687dcc2b18dddf429506afb9109181a7a 100644
--- a/App/src/TestFittingModule2.cpp
+++ b/App/src/TestFittingModule2.cpp
@@ -27,7 +27,6 @@
 #include "InterferenceFunction1DParaCrystal.h"
 #include "InterferenceFunctionNone.h"
 #include "IsGISAXSTools.h"
-#include "LayerDecorator.h"
 #include "MaterialManager.h"
 #include "MathFunctions.h"
 #include "MinimizerFactory.h"
@@ -340,9 +339,10 @@ ISample *TestFittingModule2::SampleBuilder::buildSample() const
                                           m_prism3_half_side)),
         0.0, 1.0 - m_cylinder_ratio);
     particle_decoration.addInterferenceFunction(new InterferenceFunctionNone());
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
 
-    p_multi_layer->addLayer(air_layer_decorator);
+    air_layer.setDecoration(particle_decoration);
+
+    p_multi_layer->addLayer(air_layer);
     p_multi_layer->addLayer(substrate_layer);
 
     return p_multi_layer;
diff --git a/App/src/TestFittingModule3.cpp b/App/src/TestFittingModule3.cpp
index c5fcba934311ddfea2c7a897e9e8f1766bbb3244..3aa40f68872ac855e52a35d5aa5ed65c1b919c4e 100644
--- a/App/src/TestFittingModule3.cpp
+++ b/App/src/TestFittingModule3.cpp
@@ -24,7 +24,6 @@
 #include "InterferenceFunction1DParaCrystal.h"
 #include "InterferenceFunctionNone.h"
 #include "IsGISAXSTools.h"
-#include "LayerDecorator.h"
 #include "MaterialManager.h"
 #include "MathFunctions.h"
 #include "MinimizerFactory.h"
@@ -128,8 +127,10 @@ void TestFittingModule3::initializeSample()
     particle_decoration.addParticle(new Particle(n_particle, new FormFactorCylinder(cylinder_height, cylinder_radius)),0.0, 0.2);
     particle_decoration.addParticle(new Particle(n_particle, new FormFactorPrism3(prism3_height, prism3_half_side)), 0.0, 0.8);
     particle_decoration.addInterferenceFunction(new InterferenceFunctionNone());
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
-    p_multi_layer->addLayer(air_layer_decorator);
+
+    air_layer.setDecoration(particle_decoration);
+
+    p_multi_layer->addLayer(air_layer);
     p_multi_layer->addLayer(substrate_layer);
     m_sample = p_multi_layer;
 }
diff --git a/App/src/TestIsGISAXS12.cpp b/App/src/TestIsGISAXS12.cpp
index c421b61af8a5b800d07404eb411eb9ebe2ce7d5c..fcad0c8cf2d227b07ef9aa31d0c8f75db64add20 100644
--- a/App/src/TestIsGISAXS12.cpp
+++ b/App/src/TestIsGISAXS12.cpp
@@ -24,7 +24,6 @@
 #include "IsGISAXSData.h"
 #include "IsGISAXSTools.h"
 #include "Layer.h"
-#include "LayerDecorator.h"
 #include "MaterialManager.h"
 #include "MathFunctions.h"
 #include "MinimizerFactory.h"
@@ -519,9 +518,9 @@ ISample *TestIsGISAXS12::TestSampleBuilder::buildSample() const
     builder.setPrototype(cylinder2,"/Particle/FormFactorCylinder/radius", par2, particle_probability2);
     builder.plantParticles(particle_decoration);
 
-    // making layer holding all whose nano particles
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
-    p_multi_layer->addLayer(air_layer_decorator);
+    air_layer.setDecoration(particle_decoration);
+
+    p_multi_layer->addLayer(air_layer);
 
     Layer substrate_layer;
     substrate_layer.setMaterial(substrate_material);
diff --git a/App/src/TestIsGISAXS13.cpp b/App/src/TestIsGISAXS13.cpp
index 6445d51c2a59027c5a12b913069874fe87423e62..2ec6832c9127c078887028716e7cf4b640b19bc8 100644
--- a/App/src/TestIsGISAXS13.cpp
+++ b/App/src/TestIsGISAXS13.cpp
@@ -23,7 +23,6 @@
 #include "IsGISAXSData.h"
 #include "IsGISAXSTools.h"
 #include "Layer.h"
-#include "LayerDecorator.h"
 #include "MaterialManager.h"
 #include "MathFunctions.h"
 #include "MinimizerFactory.h"
diff --git a/App/src/TestIsGISAXS5.cpp b/App/src/TestIsGISAXS5.cpp
index a48b86f57168f1c6facc0f6f27cdf8e7d83ec809..44bce3ad91d4a116664b9792579a768995db4170 100644
--- a/App/src/TestIsGISAXS5.cpp
+++ b/App/src/TestIsGISAXS5.cpp
@@ -24,7 +24,6 @@
 #include "IsGISAXSData.h"
 #include "IsGISAXSTools.h"
 #include "Layer.h"
-#include "LayerDecorator.h"
 #include "MaterialManager.h"
 #include "MathFunctions.h"
 #include "MinimizerFactory.h"
@@ -303,8 +302,9 @@ ISample *TestIsGISAXS5::SampleBuilder::buildSample() const
     builder.plantParticles(particle_decoration);
 
     // making layer holding all whose nano particles
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
-    p_multi_layer->addLayer(air_layer_decorator);
+    air_layer.setDecoration(particle_decoration);
+
+    p_multi_layer->addLayer(air_layer);
 
     Layer substrate_layer;
     substrate_layer.setMaterial(substrate_material);
diff --git a/App/src/TestMesoCrystal1.cpp b/App/src/TestMesoCrystal1.cpp
index fc90f678de84708c19322f75d753b36f563ec8ef..9c278539975a399af6cae4565a5ebc3bd5ed1276 100644
--- a/App/src/TestMesoCrystal1.cpp
+++ b/App/src/TestMesoCrystal1.cpp
@@ -20,7 +20,6 @@
 #include "Simulation.h"
 #include "MultiLayer.h"
 #include "MaterialManager.h"
-#include "LayerDecorator.h"
 #include "ParticleDecoration.h"
 #include "MesoCrystal.h"
 #include "Crystal.h"
@@ -231,12 +230,13 @@ ISample* TestMesoCrystal1::SampleBuilder::buildSample() const
 
     particle_decoration.setTotalParticleSurfaceDensity(surface_density);
     particle_decoration.addInterferenceFunction(p_interference_funtion);
-    LayerDecorator avg_layer_decorator(avg_layer, particle_decoration);
+
+    avg_layer.setDecoration(particle_decoration);
 
     LayerRoughness roughness(m_roughness, 0.3, 500.0*Units::nanometer);
 
     p_multi_layer->addLayer(air_layer);
-    p_multi_layer->addLayer(avg_layer_decorator);
+    p_multi_layer->addLayer(avg_layer);
     p_multi_layer->addLayerWithTopRoughness(substrate_layer, roughness);
 
 //    std::cout << "Average layer index: " << n_avg << std::endl;
diff --git a/App/src/TestMesoCrystal2.cpp b/App/src/TestMesoCrystal2.cpp
index 8ecb161b531399abef93da225ee27846d02459fb..4b5354a5cb60f975cbccdca83c4b9714c2790035 100644
--- a/App/src/TestMesoCrystal2.cpp
+++ b/App/src/TestMesoCrystal2.cpp
@@ -26,7 +26,6 @@
 #include "InterferenceFunctionNone.h"
 #include "IsGISAXSTools.h"
 #include "LatticeBasis.h"
-#include "LayerDecorator.h"
 #include "MaterialManager.h"
 #include "MathFunctions.h"
 #include "MesoCrystal.h"
@@ -603,12 +602,13 @@ ISample* TestMesoCrystal2::SampleBuilder::buildSample() const
 
     particle_decoration.setTotalParticleSurfaceDensity(surface_density);
     particle_decoration.addInterferenceFunction(p_interference_funtion);
-    LayerDecorator avg_layer_decorator(avg_layer, particle_decoration);
+
+    avg_layer.setDecoration(particle_decoration);
 
     LayerRoughness roughness(m_roughness, 0.3, 500.0*Units::nanometer);
 
     p_multi_layer->addLayer(air_layer);
-    p_multi_layer->addLayer(avg_layer_decorator);
+    p_multi_layer->addLayer(avg_layer);
     p_multi_layer->addLayerWithTopRoughness(substrate_layer, roughness);
 
 //    std::cout << "Average layer index: " << n_avg << std::endl;
diff --git a/App/src/TestMiscellaneous.cpp b/App/src/TestMiscellaneous.cpp
index 3f7f41aabdc47070fb30a30d7d916f8e41888700..fe8db6678908af44c63030643262f3374da15c4f 100644
--- a/App/src/TestMiscellaneous.cpp
+++ b/App/src/TestMiscellaneous.cpp
@@ -24,7 +24,6 @@
 #include "Simulation.h"
 #include "IsGISAXSTools.h"
 #include "Lattice.h"
-#include "LayerDecorator.h"
 #include "MesoCrystal.h"
 #include "Crystal.h"
 #include "LatticeBasis.h"
diff --git a/App/src/TestRootTree.cpp b/App/src/TestRootTree.cpp
index 49480877efca930908dd82ac44ff974b8aca8536..b0b957f458c5888177055fd499cbf5525261b120 100644
--- a/App/src/TestRootTree.cpp
+++ b/App/src/TestRootTree.cpp
@@ -18,7 +18,6 @@
 #include "MaterialManager.h"
 #include "ParticleDecoration.h"
 #include "Particle.h"
-#include "LayerDecorator.h"
 #include "Simulation.h"
 #include "FormFactors.h"
 #include "Units.h"
@@ -425,10 +424,11 @@ void TestRootTree::initializeMesoCrystal(
 
     particle_decoration.setTotalParticleSurfaceDensity(surface_density);
     particle_decoration.addInterferenceFunction(p_interference_funtion);
-    LayerDecorator avg_layer_decorator(avg_layer, particle_decoration);
+
+    avg_layer.setDecoration(particle_decoration);
 
     p_multi_layer->addLayer(air_layer);
-    p_multi_layer->addLayer(avg_layer_decorator);
+    p_multi_layer->addLayer(avg_layer);
     p_multi_layer->addLayer(substrate_layer);
     mp_sample = p_multi_layer;
 }
diff --git a/Core/Algorithms/inc/LayerDecoratorDWBASimulation.h b/Core/Algorithms/inc/LayerDecoratorDWBASimulation.h
index 233514d3622bb2bc9c26bf120f5c8980e7ea755e..ada2ef4646193823ef4ab1452bcb0d7ac4c76adc 100644
--- a/Core/Algorithms/inc/LayerDecoratorDWBASimulation.h
+++ b/Core/Algorithms/inc/LayerDecoratorDWBASimulation.h
@@ -20,14 +20,14 @@
 #include "DiffuseDWBASimulation.h"
 #include "IInterferenceFunctionStrategy.h"
 
-class LayerDecorator;
+class Layer;
 
 //! Calculates scattering cross sections in DWBA for a layer with particles in/on it
 
 class LayerDecoratorDWBASimulation : public LayerDWBASimulation
 {
  public:
-    LayerDecoratorDWBASimulation(const LayerDecorator *p_layer_decorator);
+    LayerDecoratorDWBASimulation(const Layer *p_layer_decorator);
     virtual ~LayerDecoratorDWBASimulation();
 
     LayerDecoratorDWBASimulation *clone() const
@@ -40,7 +40,7 @@ class LayerDecoratorDWBASimulation : public LayerDWBASimulation
 
     virtual void run();
  protected:
-    LayerDecorator *mp_layer_decorator;
+    Layer *mp_layer;
     DiffuseDWBASimulation *mp_diffuseDWBA;
 
  private:
diff --git a/Core/Algorithms/inc/StrategyBuilder.h b/Core/Algorithms/inc/StrategyBuilder.h
index 7568cf959cd7125ef5e927b95504371913a82692..b3e231f2654fd33706c1a42cba68cfac8a63ea43 100644
--- a/Core/Algorithms/inc/StrategyBuilder.h
+++ b/Core/Algorithms/inc/StrategyBuilder.h
@@ -24,24 +24,22 @@
 class FormFactorInfo;
 class IInterferenceFunction;
 class IInterferenceFunctionStrategy;
-class LayerDecorator;
+class Layer;
 class Simulation;
 class IDoubleToPairOfComplexMap;
 class ParticleInfo;
 class IFormFactor;
 
-//! Methods to generate a simulation strategy from a LayerDecorator and SimulationParameters
+//! Methods to generate a simulation strategy for decorated Layer SimulationParameters
 
 class LayerDecoratorStrategyBuilder
 {
- public:
-    /* out-of-place implementation required due to LayerDecorator */
+public:
     LayerDecoratorStrategyBuilder(
-        const LayerDecorator& decorated_layer,
+        const Layer& decorated_layer,
         const Simulation& simulation,
         const SimulationParameters& sim_params);
 
-    /* out-of-place implementation required due to LayerDecorator */
     virtual ~LayerDecoratorStrategyBuilder();
 
     //! Sets R and T coefficient map for DWBA simulation
@@ -50,12 +48,14 @@ class LayerDecoratorStrategyBuilder
 
     //! Creates a strategy object which is able to calculate the scattering for fixed k_f
     virtual IInterferenceFunctionStrategy *createStrategy();
- protected:
-    LayerDecorator *mp_layer_decorator;         //!< decorated layer
+
+protected:
+    Layer *mp_layer_decorator;         //!< decorated layer
     Simulation *mp_simulation;                  //!< simulation
     SimulationParameters m_sim_params;          //!< simulation parameters
     IDoubleToPairOfComplexMap *mp_RT_function;  //!< R and T coefficients for DWBA
- private:
+
+private:
     //! collect the formfactor info of all particles in the decoration and decorate
     //! these for DWBA when needed
     void collectFormFactorInfos();
@@ -73,9 +73,10 @@ class LayerDecoratorStrategyBuilder
     SafePointerVector<IInterferenceFunction> m_ifs;
 };
 
+
 class FormFactorInfo : public ICloneable
 {
- public:
+public:
     FormFactorInfo()
         : mp_ff(0), m_pos_x(0.0), m_pos_y(0.0), m_abundance(0.0) {}
     ~FormFactorInfo();
diff --git a/Core/Algorithms/src/LayerDecoratorDWBASimulation.cpp b/Core/Algorithms/src/LayerDecoratorDWBASimulation.cpp
index 1b97b889cd83713acc18867b4793a6beb33d2b06..7ffc825f958016b997404554ba34704d7377cbc4 100644
--- a/Core/Algorithms/src/LayerDecoratorDWBASimulation.cpp
+++ b/Core/Algorithms/src/LayerDecoratorDWBASimulation.cpp
@@ -14,20 +14,21 @@
 // ************************************************************************** //
 
 #include "LayerDecoratorDWBASimulation.h"
-#include "LayerDecorator.h"
+//#include "LayerDecorator.h"
+#include "Layer.h"
 #include "FormFactors.h"
 #include "MessageService.h"
 
 LayerDecoratorDWBASimulation::LayerDecoratorDWBASimulation(
-    const LayerDecorator *p_layer_decorator)
+    const Layer *p_layer)
 {
-    mp_layer_decorator = p_layer_decorator->clone();
-    mp_diffuseDWBA = mp_layer_decorator->createDiffuseDWBASimulation();
+    mp_layer = p_layer->clone();
+    mp_diffuseDWBA = mp_layer->createDiffuseDWBASimulation();
 }
 
 LayerDecoratorDWBASimulation::~LayerDecoratorDWBASimulation()
 {
-    delete mp_layer_decorator;
+    delete mp_layer;
     delete mp_diffuseDWBA;
 }
 
@@ -55,7 +56,7 @@ IInterferenceFunctionStrategy
     *LayerDecoratorDWBASimulation::createAndInitStrategy() const
 {
     LayerDecoratorStrategyBuilder builder(
-        *mp_layer_decorator, *mp_simulation, m_sim_params);
+        *mp_layer, *mp_simulation, m_sim_params);
     if (mp_RT_function)
         builder.setReflectionTransmissionFunction(*mp_RT_function);
     IInterferenceFunctionStrategy *p_strategy = builder.createStrategy();
@@ -67,8 +68,8 @@ LayerDecoratorDWBASimulation::createDWBAFormFactors() const
 {
     msglog(MSG::DEBUG) << "LayerDecoratorDWBASimulation::create...()";
     std::vector<IFormFactor*> result;
-    const IDecoration *p_decoration = mp_layer_decorator->getDecoration();
-    complex_t n_layer = mp_layer_decorator->getRefractiveIndex();
+    const IDecoration *p_decoration = mp_layer->getDecoration();
+    complex_t n_layer = mp_layer->getRefractiveIndex();
     size_t number_of_particles = p_decoration->getNumberOfParticles();
     for (size_t particle_index =
             0; particle_index<number_of_particles; ++particle_index) {
@@ -109,7 +110,7 @@ void LayerDecoratorDWBASimulation::calculateCoherentIntensity(
     msglog(MSG::DEBUG) << "LayerDecoratorDWBASimulation::calculateCoh...()";
     double wavelength = getWaveLength();
     double total_surface_density =
-        mp_layer_decorator->getTotalParticleSurfaceDensity();
+        mp_layer->getTotalParticleSurfaceDensity();
 
     cvector_t k_ij = m_ki;
     k_ij.setZ(-mp_kz_function->evaluate(-m_alpha_i));
diff --git a/Core/Algorithms/src/StrategyBuilder.cpp b/Core/Algorithms/src/StrategyBuilder.cpp
index 03e7f4b3b724d05869532ff126181a99522cfc28..d420ed4169c2211d88e8c3a70ba3b3fa88845bc0 100644
--- a/Core/Algorithms/src/StrategyBuilder.cpp
+++ b/Core/Algorithms/src/StrategyBuilder.cpp
@@ -15,7 +15,7 @@
 // ************************************************************************** //
 
 #include "StrategyBuilder.h"
-#include "LayerDecorator.h"
+#include "Layer.h"
 #include "Simulation.h"
 #include "IDoubleToComplexFunction.h"
 #include "InterferenceFunctions.h"
@@ -26,7 +26,7 @@
 #include <cmath>
 
 LayerDecoratorStrategyBuilder::LayerDecoratorStrategyBuilder(
-        const LayerDecorator& decorated_layer, const Simulation& simulation,
+        const Layer& decorated_layer, const Simulation& simulation,
         const SimulationParameters& sim_params)
   : mp_layer_decorator(decorated_layer.clone())
   , mp_simulation(simulation.clone())
diff --git a/Core/Core.pro b/Core/Core.pro
index 7a42368f8d04203d0106ef6f88885bc8bb41f475..944aaff175525b5dbe2cb23932cf511da722d789 100644
--- a/Core/Core.pro
+++ b/Core/Core.pro
@@ -112,7 +112,6 @@ SOURCES += \
     Samples/src/Lattice.cpp \
     Samples/src/LatticeBasis.cpp \
     Samples/src/Layer.cpp \
-    Samples/src/LayerDecorator.cpp \
     Samples/src/LayerInterface.cpp \
     Samples/src/LayerRoughness.cpp \
     Samples/src/MaterialManager.cpp \
@@ -284,7 +283,6 @@ HEADERS += \
     Samples/inc/Lattice2DIFParameters.h \
     Samples/inc/LatticeBasis.h \
     Samples/inc/Layer.h \
-    Samples/inc/LayerDecorator.h \
     Samples/inc/LayerInterface.h \
     Samples/inc/LayerRoughness.h \
     Samples/inc/MaterialManager.h \
diff --git a/Core/PythonAPI/inc/PythonCoreList.h b/Core/PythonAPI/inc/PythonCoreList.h
index db28eea6eaee11b9e628159c0d5e72c550efdbcd..73aa060f44de066e7fdfb374b230024ece11900d 100644
--- a/Core/PythonAPI/inc/PythonCoreList.h
+++ b/Core/PythonAPI/inc/PythonCoreList.h
@@ -53,7 +53,6 @@
 #include "Lattice2DIFParameters.h"
 #include "LatticeBasis.h"
 #include "Layer.h"
-#include "LayerDecorator.h"
 #include "LayerRoughness.h"
 #include "MathFunctions.h"
 #include "MaterialManager.h"
diff --git a/Core/Samples/inc/ICompositeSample.h b/Core/Samples/inc/ICompositeSample.h
index 173a24ee782e0d1f1452c0794fadd3790256b007..d5867c0a9bf160307e1582d8d1edbaf22cb6800b 100644
--- a/Core/Samples/inc/ICompositeSample.h
+++ b/Core/Samples/inc/ICompositeSample.h
@@ -22,23 +22,7 @@
 
 //! Interface to equip ISample with a tree structure.
 
-//! As of March 2013, this is the base class for
-//! - IClustered Particle
-//!   - Crystal
-//! - IDecoration
-//!   - ParticleDecoration
-//! - Layer
-//!   - LayerDecorator
-//! - LayerInterface
-//! - MultiLayer
-//! - Particle
-//!   - LatticeBasis
-//!   - MesoCrystal
-//!   - ParticleCoreShell
-//! - ParticleInfo
-//!   - DiffuseParticleInfo
-//!   - PositionParticleInfo
-//!
+
 class BA_CORE_API_ ICompositeSample : public ISample
 {
  public:
diff --git a/Core/Samples/inc/ISampleVisitor.h b/Core/Samples/inc/ISampleVisitor.h
index 84932cb948311831bca3aa60fe2074bd570b2211..257adc86590aae189175060db7ab1299dc35d88e 100644
--- a/Core/Samples/inc/ISampleVisitor.h
+++ b/Core/Samples/inc/ISampleVisitor.h
@@ -22,7 +22,6 @@ class ISample;
 class MultiLayer;
 class Layer;
 class LayerInterface;
-class LayerDecorator;
 class ParticleDecoration;
 class ParticleInfo;
 class Particle;
@@ -49,7 +48,6 @@ public:
     virtual void visit(const ISample *) { throw NotImplementedException("ISampleVisitor::visit(ISample *)"); }
     virtual void visit(const MultiLayer *) { throw NotImplementedException("ISampleVisitor::visit(MultiLayer *)"); }
     virtual void visit(const Layer *) { throw NotImplementedException("ISampleVisitor::visit(Layer *)"); }
-    virtual void visit(const LayerDecorator *) { throw NotImplementedException("ISampleVisitor::visit(LayerDecorator *)"); }
     virtual void visit(const LayerInterface *) { throw NotImplementedException("ISampleVisitor::visit(LayerInterface *)"); }
     virtual void visit(const ParticleDecoration *) { throw NotImplementedException("ISampleVisitor::visit(ParticleDecoration *)"); }
     virtual void visit(const ParticleInfo *) { throw NotImplementedException("ISampleVisitor::visit(ParticleInfo *)"); }
diff --git a/Core/Samples/inc/Layer.h b/Core/Samples/inc/Layer.h
index 15762495db2f839acb1a9a0c8057fa1a1658edb8..7c0180a8829712793d71e93d680c7f605718404e 100644
--- a/Core/Samples/inc/Layer.h
+++ b/Core/Samples/inc/Layer.h
@@ -21,6 +21,8 @@
 #include "IMaterial.h"
 #include "HomogeneousMaterial.h"
 #include "LayerDWBASimulation.h"
+#include "ParticleDecoration.h"
+#include "LayerDecoratorDWBASimulation.h"
 
 //! A Layer with thickness and pointer to the material
 
@@ -28,16 +30,12 @@ class BA_CORE_API_ Layer : public ICompositeSample
 {
  public:
     //! Constructs empty layer.
-    Layer() : mp_material(0), m_thickness(0)
-    {
-        setName("Layer");
-        init_parameters();
-    }
+    Layer();
 
     //! Constructs layer made of _material_ with _thickness_ in nanometers.
     Layer(const IMaterial* material, double thickness=0);
 
-    virtual ~Layer() {}
+    virtual ~Layer();
 
     virtual Layer *clone() const { return new Layer(*this); }
 
@@ -62,11 +60,22 @@ class BA_CORE_API_ Layer : public ICompositeSample
     //! Returns refractive index of the layer's material.
     virtual complex_t getRefractiveIndex() const;
 
-    //! Returns false (override is important for polymorphism of LayerDecorator).
-    virtual bool hasDWBASimulation() const { return false; }
+    //! sets particle decoration
+    void setDecoration(IDecoration *decoration) { delete mp_decoration; mp_decoration = decoration; }
+    void setDecoration(const IDecoration &decoration) { delete mp_decoration; mp_decoration = decoration.clone(); }
+
+    //! returns particle decoration
+    const IDecoration* getDecoration() const { return mp_decoration; }
+
+    //! Returns true if decoration is present
+    virtual bool hasDWBASimulation() const { return (mp_decoration ? true : false); }
+
+    //! creates and return LayerDWBASimulation in the case of present decoration
+    virtual LayerDWBASimulation *createDWBASimulation() const;
+
+    virtual DiffuseDWBASimulation *createDiffuseDWBASimulation() const;
 
-    //! Returns zero pointer (override is important for polymorphism of LayerDecorator).
-    virtual LayerDWBASimulation *createDWBASimulation() const { return 0; }
+    virtual double getTotalParticleSurfaceDensity() const;
 
  protected:
     Layer(const Layer& other);
@@ -76,6 +85,7 @@ class BA_CORE_API_ Layer : public ICompositeSample
     void print(std::ostream& ostr) const;
 
     const IMaterial* mp_material;    //!< pointer to the material
+    IDecoration *mp_decoration;      //!< particle decoration
     double m_thickness;              //!< layer thickness in nanometers
 };
 
@@ -86,6 +96,14 @@ inline complex_t Layer::getRefractiveIndex() const
     return (material ? material->getRefractiveIndex() : complex_t(0,0));
 }
 
+inline double Layer::getTotalParticleSurfaceDensity() const
+{
+    if (mp_decoration) {
+        return mp_decoration->getTotalParticleSurfaceDensity();
+    }
+    return 0.0;
+}
+
 
 #endif // LAYER_H
 
diff --git a/Core/Samples/inc/LayerDecorator.h b/Core/Samples/inc/LayerDecorator.h
deleted file mode 100644
index d28fb70292888b084e5d6635945668a91998deeb..0000000000000000000000000000000000000000
--- a/Core/Samples/inc/LayerDecorator.h
+++ /dev/null
@@ -1,129 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Samples/inc/LayerDecorator.h
-//! @brief     Defines class LayerDecorator.
-//!
-//! @homepage  http://apps.jcns.fz-juelich.de/BornAgain
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2013
-//! @authors   Scientific Computing Group at MLZ Garching
-//! @authors   C. Durniak, G. Pospelov, W. Van Herck, J. Wuttke
-//
-// ************************************************************************** //
-
-#ifndef LAYERDECORATOR_H_
-#define LAYERDECORATOR_H_
-
-#include "WinDllMacros.h"
-#include "Layer.h"
-#include "ParticleDecoration.h"
-#include "LayerDecoratorDWBASimulation.h"
-
-//! Combines a Layer with an IDecoration.
-
-class BA_CORE_API_ LayerDecorator : public Layer
-{
- public:
-    //! Constructs LayerDecorator object by cloning _layer_ and _decoration_.
-    LayerDecorator(const Layer& layer, const IDecoration& decoration);
-    virtual ~LayerDecorator();
-
-    virtual LayerDecorator *clone() const;
-
-    //! calls the ISampleVisitor's visit method
-    virtual void accept(ISampleVisitor *visitor) const { visitor->visit(this); }
-
-    //! Sets _thickness_ in nanometers.
-    virtual void setThickness(double thickness);
-
-    //! Returns thickness in nanometers.
-    virtual double getThickness() const;
-
-    //! Sets _material_.
-    virtual void setMaterial(const IMaterial* material);
-
-    //! Sets _material_ and _thickness_ in nanometers.
-    virtual void setMaterial(const IMaterial* material, double thickness);
-
-    //! Returns material
-    const virtual IMaterial* getMaterial() const;
-
-    //! Returns refractive index.
-    virtual complex_t getRefractiveIndex() const;
-
-    virtual void init_parameters();
-
-    const Layer* getDecoratedLayer() const { return mp_decorated_layer; }
-
-    const IDecoration* getDecoration() const { return mp_decoration; }
-
-    virtual bool hasDWBASimulation() const { return true; }
-
-    virtual LayerDecoratorDWBASimulation *createDWBASimulation() const
-    { return new LayerDecoratorDWBASimulation(this); }
-
-    virtual DiffuseDWBASimulation *createDiffuseDWBASimulation() const;
-
-    virtual double getTotalParticleSurfaceDensity() const;
-
- protected:
-    //! Constructs a new object by cloning _other_'s layer and decoration.
-    LayerDecorator(const LayerDecorator& other);
-
-    Layer *mp_decorated_layer;
-    IDecoration *mp_decoration;
-
- private:
-    void print(std::ostream& ostr) const;
-};
-
-
-inline LayerDecorator *LayerDecorator::clone() const
-{
-    return new LayerDecorator(*this);
-}
-
-inline void LayerDecorator::setThickness(double thickness)
-{
-    mp_decorated_layer->setThickness(thickness);
-}
-
-inline double LayerDecorator::getThickness() const
-{
-    return mp_decorated_layer->getThickness();
-}
-
-inline void LayerDecorator::setMaterial(const IMaterial* material)
-{
-    mp_decorated_layer->setMaterial(material);
-}
-
-inline void LayerDecorator::setMaterial(const IMaterial* material, double thickness)
-{
-    mp_decorated_layer->setMaterial(material, thickness);
-}
-
-inline const IMaterial* LayerDecorator::getMaterial() const
-{
-    return mp_decorated_layer->getMaterial();
-}
-
-inline complex_t LayerDecorator::getRefractiveIndex() const
-{
-    return mp_decorated_layer->getRefractiveIndex();
-}
-
-inline double LayerDecorator::getTotalParticleSurfaceDensity() const
-{
-    if (mp_decoration) {
-        return mp_decoration->getTotalParticleSurfaceDensity();
-    }
-    return 0.;
-}
-
-
-#endif /* LAYERDECORATOR_H_ */
-
-
diff --git a/Core/Samples/inc/Samples.h b/Core/Samples/inc/Samples.h
index 21ebbbf337670152602b7143cbd9f286aea2604e..24323147de93d64506fb0ae3b17d60234c483864 100644
--- a/Core/Samples/inc/Samples.h
+++ b/Core/Samples/inc/Samples.h
@@ -19,7 +19,6 @@
 #include "Crystal.h"
 #include "MaterialManager.h"
 #include "Layer.h"
-#include "LayerDecorator.h"
 #include "LayerInterface.h"
 #include "MultiLayer.h"
 #include "Particle.h"
diff --git a/Core/Samples/src/Layer.cpp b/Core/Samples/src/Layer.cpp
index f78b17c104dd5603d0449bce6fc4df1a300dc077..97951050d2d2c7662ff43107bee1f4166cdf1101 100644
--- a/Core/Samples/src/Layer.cpp
+++ b/Core/Samples/src/Layer.cpp
@@ -18,8 +18,19 @@
 #include <iomanip>
 
 
+Layer::Layer()
+    : mp_material(0)
+    , mp_decoration(0)
+    , m_thickness(0)
+{
+    setName("Layer");
+    init_parameters();
+}
+
+
 Layer::Layer(const IMaterial* material, double thickness)
-    : m_thickness(thickness)
+    : mp_decoration(0)
+    , m_thickness(thickness)
 {
     setName("Layer");
     setMaterial(material);
@@ -30,12 +41,20 @@ Layer::Layer(const IMaterial* material, double thickness)
 Layer::Layer(const Layer& other) : ICompositeSample()
 {
     mp_material = other.mp_material;
+    mp_decoration = 0;
+    if(other.getDecoration()) mp_decoration = other.getDecoration()->clone();
     m_thickness = other.m_thickness;
     setName(other.getName());
     init_parameters();
 }
 
 
+Layer::~Layer()
+{
+    delete mp_decoration;
+}
+
+
 void Layer::init_parameters()
 {
     clearParameterPool();
@@ -76,3 +95,40 @@ void Layer::print(std::ostream& ostr) const
 }
 
 
+LayerDWBASimulation *Layer::createDWBASimulation() const
+{
+    if(mp_decoration) {
+        return new LayerDecoratorDWBASimulation(this);
+    }
+    return 0;
+}
+
+
+DiffuseDWBASimulation* Layer::createDiffuseDWBASimulation() const
+{
+    DiffuseDWBASimulation *p_sim = new DiffuseDWBASimulation;
+    size_t nbr_particles = mp_decoration->getNumberOfParticles();
+    double particle_density = mp_decoration->getTotalParticleSurfaceDensity();
+    for (size_t i=0; i<nbr_particles; ++i) {
+        const ParticleInfo *p_info = mp_decoration->getParticleInfo(i);
+        std::vector<DiffuseParticleInfo *> *p_diffuse_nps =
+                p_info->getParticle()->createDiffuseParticleInfo(*p_info);
+        if (p_diffuse_nps) {
+            for (size_t j=0; j<p_diffuse_nps->size(); ++j) {
+                DiffuseParticleInfo *p_diff_info = (*p_diffuse_nps)[j];
+                p_diff_info->setNumberPerMeso(
+                    particle_density * p_info->getAbundance() *
+                    p_diff_info->getNumberPerMeso());
+                p_sim->addParticleInfo((*p_diffuse_nps)[j]);
+            }
+            delete p_diffuse_nps;
+            break; // TODO: remove this break (this necessitates the creation of a phi-averaged mesocrystal class generating only one nanoparticle for diffuse calculations)
+        }
+    }
+    if (p_sim->getSize()>0) {
+        p_sim->setRefractiveIndex(getRefractiveIndex());
+        return p_sim;
+    }
+    delete p_sim;
+    return 0;
+}
diff --git a/Core/Samples/src/LayerDecorator.cpp b/Core/Samples/src/LayerDecorator.cpp
deleted file mode 100644
index 8fae10b8e6330da17d91db26dbd61370c5273565..0000000000000000000000000000000000000000
--- a/Core/Samples/src/LayerDecorator.cpp
+++ /dev/null
@@ -1,89 +0,0 @@
-// ************************************************************************** //
-//
-//  BornAgain: simulate and fit scattering at grazing incidence
-//
-//! @file      Samples/src/LayerDecorator.cpp
-//! @brief     Implements class LayerDecorator.
-//!
-//! @homepage  http://apps.jcns.fz-juelich.de/BornAgain
-//! @license   GNU General Public License v3 or higher (see COPYING)
-//! @copyright Forschungszentrum Jülich GmbH 2013
-//! @authors   Scientific Computing Group at MLZ Garching
-//! @authors   C. Durniak, G. Pospelov, W. Van Herck, J. Wuttke
-//
-// ************************************************************************** //
-
-#include "LayerDecorator.h"
-
-
-LayerDecorator::LayerDecorator(const Layer& layer, const IDecoration& decoration)
-    : mp_decorated_layer(layer.clone()), mp_decoration(decoration.clone())
-{
-    setName("LayerDecorator");
-    registerChild(mp_decorated_layer);
-    registerChild(mp_decoration);
-    init_parameters();
-}
-
-
-LayerDecorator::LayerDecorator(const LayerDecorator& other)
-    : Layer(other)
-{
-    mp_decorated_layer = other.getDecoratedLayer()->clone();
-    mp_decoration = other.getDecoration()->clone();
-    setName("LayerDecorator");
-    registerChild(mp_decorated_layer);
-    registerChild(mp_decoration);
-    init_parameters();
-}
-
-
-LayerDecorator::~LayerDecorator()
-{
-    delete mp_decorated_layer;
-    delete mp_decoration;
-}
-
-
-void LayerDecorator::init_parameters()
-{
-    clearParameterPool();
-}
-
-
-DiffuseDWBASimulation* LayerDecorator::createDiffuseDWBASimulation() const
-{
-    DiffuseDWBASimulation *p_sim = new DiffuseDWBASimulation;
-    size_t nbr_particles = mp_decoration->getNumberOfParticles();
-    double particle_density = mp_decoration->getTotalParticleSurfaceDensity();
-    for (size_t i=0; i<nbr_particles; ++i) {
-        const ParticleInfo *p_info = mp_decoration->getParticleInfo(i);
-        std::vector<DiffuseParticleInfo *> *p_diffuse_nps =
-                p_info->getParticle()->createDiffuseParticleInfo(*p_info);
-        if (p_diffuse_nps) {
-            for (size_t j=0; j<p_diffuse_nps->size(); ++j) {
-                DiffuseParticleInfo *p_diff_info = (*p_diffuse_nps)[j];
-                p_diff_info->setNumberPerMeso(
-                    particle_density * p_info->getAbundance() *
-                    p_diff_info->getNumberPerMeso());
-                p_sim->addParticleInfo((*p_diffuse_nps)[j]);
-            }
-            delete p_diffuse_nps;
-            break; // TODO: remove this break (this necessitates the creation of a phi-averaged mesocrystal class generating only one nanoparticle for diffuse calculations)
-        }
-    }
-    if (p_sim->getSize()>0) {
-        p_sim->setRefractiveIndex(getRefractiveIndex());
-        return p_sim;
-    }
-    delete p_sim;
-    return 0;
-}
-
-void LayerDecorator::print(std::ostream& ostr) const
-{
-    Layer::print(ostr);
-    ostr << "-->LayerDecorator{" << *mp_decoration << "}";
-}
-
-
diff --git a/Core/StandardSamples/IsGISAXS01Builder.cpp b/Core/StandardSamples/IsGISAXS01Builder.cpp
index f30e3d97622a99203017d7e5cc470277823f5449..1bd91710529c25cae24039e94e2404b52b9a99c3 100644
--- a/Core/StandardSamples/IsGISAXS01Builder.cpp
+++ b/Core/StandardSamples/IsGISAXS01Builder.cpp
@@ -1,7 +1,6 @@
 #include "IsGISAXS01Builder.h"
 #include "MultiLayer.h"
 #include "ParticleDecoration.h"
-#include "LayerDecorator.h"
 #include "MaterialManager.h"
 #include "FormFactorCylinder.h"
 #include "FormFactorPrism3.h"
@@ -56,9 +55,10 @@ ISample *IsGISAXS01Builder::buildSample() const
                 0.0, 1.0-m_cylinder_weight);
     particle_decoration.addInterferenceFunction(new InterferenceFunctionNone());
 
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
+    //LayerDecorator air_layer_decorator(air_layer, particle_decoration);
+    air_layer.setDecoration(particle_decoration);
 
-    multi_layer->addLayer(air_layer_decorator);
+    multi_layer->addLayer(air_layer);
     multi_layer->addLayer(substrate_layer);
     return multi_layer;
 }
diff --git a/Core/StandardSamples/IsGISAXS02Builder.cpp b/Core/StandardSamples/IsGISAXS02Builder.cpp
index 8a139788dc71ca23ec12e2df9b6899f3959623e8..273bb3207a7e42e06ef630e576b529c2643d4711 100644
--- a/Core/StandardSamples/IsGISAXS02Builder.cpp
+++ b/Core/StandardSamples/IsGISAXS02Builder.cpp
@@ -1,7 +1,6 @@
 #include "IsGISAXS02Builder.h"
 #include "MultiLayer.h"
 #include "ParticleDecoration.h"
-#include "LayerDecorator.h"
 #include "MaterialManager.h"
 #include "FormFactorCylinder.h"
 #include "FormFactorPrism3.h"
@@ -74,9 +73,10 @@ ISample *IsGISAXS02Builder::buildSample() const
     builder.plantParticles(particle_decoration);
 
     particle_decoration.addInterferenceFunction(new InterferenceFunctionNone());
-    // making layer holding all whose nano particles
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
-    multi_layer->addLayer(air_layer_decorator);
+
+    air_layer.setDecoration(particle_decoration);
+
+    multi_layer->addLayer(air_layer);
 
     return multi_layer;
 }
diff --git a/Core/StandardSamples/IsGISAXS03Builder.cpp b/Core/StandardSamples/IsGISAXS03Builder.cpp
index 524ad7b48f5619e3aa0a27863b96503c6f42e2c6..abc08aabe62f3497de4429594285faebc3a82484 100644
--- a/Core/StandardSamples/IsGISAXS03Builder.cpp
+++ b/Core/StandardSamples/IsGISAXS03Builder.cpp
@@ -1,7 +1,6 @@
 #include "IsGISAXS03Builder.h"
 #include "MultiLayer.h"
 #include "ParticleDecoration.h"
-#include "LayerDecorator.h"
 #include "MaterialManager.h"
 #include "FormFactorCylinder.h"
 #include "FormFactorPrism3.h"
@@ -47,8 +46,9 @@ ISample *IsGISAXS03DWBABuilder::buildSample() const
     ParticleDecoration particle_decoration( new Particle(n_particle, new FormFactorCylinder(m_height, m_radius)));
     particle_decoration.addInterferenceFunction(new InterferenceFunctionNone());
 
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
-    multi_layer->addLayer(air_layer_decorator);
+    air_layer.setDecoration(particle_decoration);
+
+    multi_layer->addLayer(air_layer);
     multi_layer->addLayer(substrate_layer);
 
     return multi_layer;
@@ -89,8 +89,9 @@ ISample *IsGISAXS03BABuilder::buildSample() const
     complex_t n_particle(1.0-6e-4, 2e-8);
     ParticleDecoration particle_decoration( new Particle(n_particle, new FormFactorCylinder(m_height, m_radius)));
     particle_decoration.addInterferenceFunction(new InterferenceFunctionNone());
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
-    multi_layer->addLayer(air_layer_decorator);
+
+    air_layer.setDecoration(particle_decoration);
+    multi_layer->addLayer(air_layer);
 
     return multi_layer;
 }
@@ -141,9 +142,10 @@ ISample *IsGISAXS03BASizeBuilder::buildSample() const
     builder.setPrototype(nano_particle,"/Particle/FormFactorCylinder/radius", par);
     builder.plantParticles(particle_decoration);
     particle_decoration.addInterferenceFunction(new InterferenceFunctionNone());
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
 
-    multi_layer->addLayer(air_layer_decorator);
+    air_layer.setDecoration(particle_decoration);
+
+    multi_layer->addLayer(air_layer);
 
     return multi_layer;
 }
diff --git a/Core/StandardSamples/IsGISAXS04Builder.cpp b/Core/StandardSamples/IsGISAXS04Builder.cpp
index e72f88d16441990ac80fafd70a1e2a72daeb6cd4..b0905b93e7933fb812a49656548ca0d56b6f1939 100644
--- a/Core/StandardSamples/IsGISAXS04Builder.cpp
+++ b/Core/StandardSamples/IsGISAXS04Builder.cpp
@@ -1,7 +1,6 @@
 #include "IsGISAXS04Builder.h"
 #include "MultiLayer.h"
 #include "ParticleDecoration.h"
-#include "LayerDecorator.h"
 #include "MaterialManager.h"
 #include "InterferenceFunction1DParaCrystal.h"
 #include "InterferenceFunction2DParaCrystal.h"
@@ -46,9 +45,10 @@ ISample *IsGISAXS04Para1DBuilder::buildSample() const
     IInterferenceFunction *p_interference_function = new InterferenceFunction1DParaCrystal(m_corr_peak_distance,m_corr_width, m_corr_length);
     ParticleDecoration particle_decoration( new Particle(n_particle, new FormFactorCylinder(m_cylinder_height, m_cylinder_radius)));
     particle_decoration.addInterferenceFunction(p_interference_function);
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
 
-    multi_layer->addLayer(air_layer_decorator);
+    air_layer.setDecoration(particle_decoration);
+
+    multi_layer->addLayer(air_layer);
     multi_layer->addLayer(substrate_layer);
 
     return multi_layer;
@@ -101,9 +101,10 @@ ISample *IsGISAXS04Para2DBuilder::buildSample() const
     p_interference_function->setProbabilityDistributions(pdf, pdf);
     ParticleDecoration particle_decoration( new Particle(n_particle, new FormFactorCylinder(m_cylinder_height, m_cylinder_radius)));
     particle_decoration.addInterferenceFunction(p_interference_function);
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
 
-    multi_layer->addLayer(air_layer_decorator);
+    air_layer.setDecoration(particle_decoration);
+
+    multi_layer->addLayer(air_layer);
     multi_layer->addLayer(substrate_layer);
 
     return multi_layer;
diff --git a/Core/StandardSamples/IsGISAXS06Builder.cpp b/Core/StandardSamples/IsGISAXS06Builder.cpp
index 4fc51f8676b4bd5208e94bf4b82b4425bded1f7d..93bc2e8b54421720b384e29fe562505542af6733 100644
--- a/Core/StandardSamples/IsGISAXS06Builder.cpp
+++ b/Core/StandardSamples/IsGISAXS06Builder.cpp
@@ -1,7 +1,6 @@
 #include "IsGISAXS06Builder.h"
 #include "MultiLayer.h"
 #include "ParticleDecoration.h"
-#include "LayerDecorator.h"
 #include "FormFactorCylinder.h"
 #include "Simulation.h"
 #include "Units.h"
@@ -58,9 +57,10 @@ ISample *IsGISAXS06Lattice1Builder::buildSample() const
     particle_decoration.addParticleInfo(particle_info);
 
     particle_decoration.addInterferenceFunction(p_interference_function);
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
 
-    multi_layer->addLayer(air_layer_decorator);
+    air_layer.setDecoration(particle_decoration);
+
+    multi_layer->addLayer(air_layer);
     multi_layer->addLayer(substrate_layer);
 
     return multi_layer;
@@ -113,9 +113,10 @@ ISample *IsGISAXS06Lattice2Builder::buildSample() const
     particle_decoration.addParticleInfo(particle_info);
 
     particle_decoration.addInterferenceFunction(p_interference_function);
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
 
-    multi_layer->addLayer(air_layer_decorator);
+    air_layer.setDecoration(particle_decoration);
+
+    multi_layer->addLayer(air_layer);
     multi_layer->addLayer(substrate_layer);
 
     return multi_layer;
@@ -166,9 +167,10 @@ ISample *IsGISAXS06Lattice3Builder::buildSample() const
         new Particle(n_particle, ff_cyl.clone()), position, 1.0);
     particle_decoration.addParticleInfo(particle_info);
     particle_decoration.addInterferenceFunction(p_interference_function);
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
 
-    multi_layer->addLayer(air_layer_decorator);
+    air_layer.setDecoration(particle_decoration);
+
+    multi_layer->addLayer(air_layer);
     multi_layer->addLayer(substrate_layer);
 
     return multi_layer;
@@ -228,9 +230,10 @@ ISample *IsGISAXS06Lattice4Builder::buildSample() const
     particle_decoration.addParticleInfo(particle_info);
 
     particle_decoration.addInterferenceFunction(p_interference_function);
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
 
-    p_multi_layer->addLayer(air_layer_decorator);
+    air_layer.setDecoration(particle_decoration);
+
+    p_multi_layer->addLayer(air_layer);
     p_multi_layer->addLayer(substrate_layer);
     return p_multi_layer;
 
diff --git a/Core/StandardSamples/IsGISAXS09Builder.cpp b/Core/StandardSamples/IsGISAXS09Builder.cpp
index 961615b36fa0c60a7c37dfb2bc8b8d9c04c57438..2c12bb0e520c65b8b70e14bf16f62f1715f8a977 100644
--- a/Core/StandardSamples/IsGISAXS09Builder.cpp
+++ b/Core/StandardSamples/IsGISAXS09Builder.cpp
@@ -1,7 +1,6 @@
 #include "IsGISAXS09Builder.h"
 #include "FormFactorPyramid.h"
 #include "InterferenceFunctionNone.h"
-#include "LayerDecorator.h"
 #include "MaterialManager.h"
 #include "MultiLayer.h"
 #include "ParticleDecoration.h"
@@ -50,8 +49,9 @@ ISample *IsGISAXS09Builder::buildSample() const
 
     particle_decoration.addInterferenceFunction(new InterferenceFunctionNone());
 
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
-    multi_layer->addLayer(air_layer_decorator);
+    air_layer.setDecoration(particle_decoration);
+
+    multi_layer->addLayer(air_layer);
     multi_layer->addLayer(substrate_layer);
 
     return multi_layer;
@@ -106,8 +106,9 @@ ISample *IsGISAXS09RotatedBuilder::buildSample() const
     particle_decoration.addParticle(pyramid, transform);
     particle_decoration.addInterferenceFunction(new InterferenceFunctionNone());
 
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
-    multi_layer->addLayer(air_layer_decorator);
+    air_layer.setDecoration(particle_decoration);
+
+    multi_layer->addLayer(air_layer);
     multi_layer->addLayer(substrate_layer);
 
 
diff --git a/Core/Tools/inc/SamplePrintVisitor.h b/Core/Tools/inc/SamplePrintVisitor.h
index 77029abf5bc423bc87bdc97d413d0a5693fc413f..f4388bafa4c8513ce1feb37e3b211cd4932a9d8e 100644
--- a/Core/Tools/inc/SamplePrintVisitor.h
+++ b/Core/Tools/inc/SamplePrintVisitor.h
@@ -13,7 +13,6 @@ public:
     void visit(const ISample *sample);
     void visit(const MultiLayer *sample);
     void visit(const Layer *sample);
-    void visit(const LayerDecorator *sample);
     void visit(const LayerInterface *sample);
     void visit(const ParticleDecoration *sample);
     void visit(const ParticleInfo *sample);
diff --git a/Core/Tools/src/SamplePrintVisitor.cpp b/Core/Tools/src/SamplePrintVisitor.cpp
index 4edecd8f629666adb4d4af4fc0f58c88f8034f6b..b2b5e6130ce86d1097b67ab05d5dae906a246c4f 100644
--- a/Core/Tools/src/SamplePrintVisitor.cpp
+++ b/Core/Tools/src/SamplePrintVisitor.cpp
@@ -2,7 +2,6 @@
 #include "ISample.h"
 #include "FormFactors.h"
 #include "MultiLayer.h"
-#include "LayerDecorator.h"
 #include "ParticleDecoration.h"
 #include "Particle.h"
 #include "InterferenceFunction1DParaCrystal.h"
@@ -52,6 +51,7 @@ void SamplePrintVisitor::visit(const Layer *sample)
 }
 
 
+/*
 void SamplePrintVisitor::visit(const LayerDecorator *sample)
 {
     assert(sample);
@@ -69,7 +69,7 @@ void SamplePrintVisitor::visit(const LayerDecorator *sample)
 
     goBack();
 }
-
+*/
 
 void SamplePrintVisitor::visit(const LayerInterface *sample)
 {
diff --git a/Doc/UserManual/UserManual.pdf b/Doc/UserManual/UserManual.pdf
index 0eed5704e5fbbb3103926630873ffd6085647c4f..687115dafc8a2ab2fab10abd1df8aac576a24dcf 100644
Binary files a/Doc/UserManual/UserManual.pdf and b/Doc/UserManual/UserManual.pdf differ
diff --git a/Doc/UserManual/UserManual.tex b/Doc/UserManual/UserManual.tex
index 4817f7389fb800859a5dbf56ffcc99d7c2925bf8..9de3acd59f13d59ba061fe69c8eda1d3ce3024de 100644
--- a/Doc/UserManual/UserManual.tex
+++ b/Doc/UserManual/UserManual.tex
@@ -127,8 +127,6 @@ BornAgain - simulating and fitting X-ray and neutron scattering at grazing incid
 
 \author{Scientific Computing Group at FRM-II}
 
-
-
 \usepackage{eso-pic}
 \newcommand\BackgroundPic{%
 \put(0,0){%
diff --git a/Tests/FunctionalTests/TestCore/IsGISAXS06/IsGISAXS06.cpp b/Tests/FunctionalTests/TestCore/IsGISAXS06/IsGISAXS06.cpp
index f73596b961692ef4d4ee9dafd3849470b8a8cebf..2d3a7bc005dabfac7faeb29342cc1e98a9db93ac 100644
--- a/Tests/FunctionalTests/TestCore/IsGISAXS06/IsGISAXS06.cpp
+++ b/Tests/FunctionalTests/TestCore/IsGISAXS06/IsGISAXS06.cpp
@@ -1,7 +1,6 @@
 #include "IsGISAXS06.h"
 #include "MultiLayer.h"
 #include "ParticleDecoration.h"
-#include "LayerDecorator.h"
 #include "FormFactorCylinder.h"
 #include "Simulation.h"
 #include "Units.h"
diff --git a/Tests/FunctionalTests/TestCore/IsGISAXS07/IsGISAXS07.cpp b/Tests/FunctionalTests/TestCore/IsGISAXS07/IsGISAXS07.cpp
index 926c2c723a7a1ca6f8bfaae60d1a79bac9b65c75..7013480447399259073246f3a6d5f075b18c59a3 100644
--- a/Tests/FunctionalTests/TestCore/IsGISAXS07/IsGISAXS07.cpp
+++ b/Tests/FunctionalTests/TestCore/IsGISAXS07/IsGISAXS07.cpp
@@ -4,7 +4,6 @@
 #include "MaterialManager.h"
 #include "FormFactorBox.h"
 #include "ParticleDecoration.h"
-#include "LayerDecorator.h"
 #include "Simulation.h"
 #include "OutputDataIOFactory.h"
 #include "PositionParticleInfo.h"
@@ -91,8 +90,8 @@ void FunctionalTests::IsGISAXS07::run()
     PositionParticleInfo particle_info10(new Particle(n_particle, ff10), m10, pos10, 0.5);
     particle_decoration.addParticleInfo(particle_info10);
 
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
-    multi_layer.addLayer(air_layer_decorator);
+    air_layer.setDecoration(particle_decoration);
+    multi_layer.addLayer(air_layer);
 
     // ---------------------
     // building simulation
diff --git a/Tests/FunctionalTests/TestCore/IsGISAXS08/IsGISAXS08.cpp b/Tests/FunctionalTests/TestCore/IsGISAXS08/IsGISAXS08.cpp
index e285ff511b413650f2f9507eb6aca51bbba0abcb..a4909f77e47c5dfc298d3d17e7121eacdab5ea10 100644
--- a/Tests/FunctionalTests/TestCore/IsGISAXS08/IsGISAXS08.cpp
+++ b/Tests/FunctionalTests/TestCore/IsGISAXS08/IsGISAXS08.cpp
@@ -1,7 +1,6 @@
 #include "IsGISAXS08.h"
 #include "MultiLayer.h"
 #include "ParticleDecoration.h"
-#include "LayerDecorator.h"
 #include "ParticleBuilder.h"
 #include "InterferenceFunction2DParaCrystal.h"
 #include "FormFactorCylinder.h"
@@ -54,9 +53,10 @@ void FunctionalTests::IsGISAXS08::run2DDL()
     ParticleDecoration particle_decoration( new Particle(n_particle,
             new FormFactorCylinder(5*Units::nanometer, 5*Units::nanometer)));
     particle_decoration.addInterferenceFunction(p_interference_function);
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
 
-    multi_layer.addLayer(air_layer_decorator);
+    air_layer.setDecoration(particle_decoration);
+
+    multi_layer.addLayer(air_layer);
     multi_layer.addLayer(substrate_layer);
 
     // building simulation
@@ -99,9 +99,10 @@ void FunctionalTests::IsGISAXS08::run2DDL2()
     ParticleDecoration particle_decoration( new Particle(n_particle,
             new FormFactorCylinder(5*Units::nanometer, 5*Units::nanometer)));
     particle_decoration.addInterferenceFunction(p_interference_function);
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
 
-    multi_layer.addLayer(air_layer_decorator);
+    air_layer.setDecoration(particle_decoration);
+
+    multi_layer.addLayer(air_layer);
     multi_layer.addLayer(substrate_layer);
 
     // building simulation
diff --git a/Tests/FunctionalTests/TestCore/IsGISAXS10/IsGISAXS10.cpp b/Tests/FunctionalTests/TestCore/IsGISAXS10/IsGISAXS10.cpp
index 461fea1c6e3a71ad1271adba29b1067904050bee..49832bade974f7003c6f2a67f86cfe4647e9c8f3 100644
--- a/Tests/FunctionalTests/TestCore/IsGISAXS10/IsGISAXS10.cpp
+++ b/Tests/FunctionalTests/TestCore/IsGISAXS10/IsGISAXS10.cpp
@@ -1,7 +1,6 @@
 #include "IsGISAXS10.h"
 #include "FormFactorCylinder.h"
 #include "InterferenceFunction1DParaCrystal.h"
-#include "LayerDecorator.h"
 #include "MaterialManager.h"
 #include "MultiLayer.h"
 #include "OutputDataIOFactory.h"
@@ -42,9 +41,9 @@ void FunctionalTests::IsGISAXS10::run()
             new FormFactorCylinder(5*Units::nanometer, 5*Units::nanometer)));
     particle_decoration.addInterferenceFunction(p_interference_function);
 
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
+    air_layer.setDecoration(particle_decoration);
 
-    multi_layer.addLayer(air_layer_decorator);
+    multi_layer.addLayer(air_layer);
     multi_layer.addLayer(substrate_layer);
 
     // building simulation
diff --git a/Tests/FunctionalTests/TestCore/IsGISAXS11/IsGISAXS11.cpp b/Tests/FunctionalTests/TestCore/IsGISAXS11/IsGISAXS11.cpp
index 6eacd5a005806a64197fd9c77089948b22ad51c1..497f8049457223c423055f2ea1fc7e453375cabb 100644
--- a/Tests/FunctionalTests/TestCore/IsGISAXS11/IsGISAXS11.cpp
+++ b/Tests/FunctionalTests/TestCore/IsGISAXS11/IsGISAXS11.cpp
@@ -1,7 +1,6 @@
 #include "IsGISAXS11.h"
 #include "FormFactorParallelepiped.h"
 #include "InterferenceFunctionNone.h"
-#include "LayerDecorator.h"
 #include "MaterialManager.h"
 #include "MultiLayer.h"
 #include "OutputDataIOFactory.h"
@@ -44,9 +43,10 @@ void FunctionalTests::IsGISAXS11::run()
     ParticleCoreShell particle(shell_particle, core_particle, core_position);
     ParticleDecoration particle_decoration(particle.clone());
     particle_decoration.addInterferenceFunction(new InterferenceFunctionNone());
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
 
-    multi_layer.addLayer(air_layer_decorator);
+    air_layer.setDecoration(particle_decoration);
+
+    multi_layer.addLayer(air_layer);
 
     // building simulation
     Simulation simulation;
diff --git a/Tests/FunctionalTests/TestCore/IsGISAXS15/IsGISAXS15.cpp b/Tests/FunctionalTests/TestCore/IsGISAXS15/IsGISAXS15.cpp
index 67adc58d08e621ba59a7cea74e61546f8bc7ebc1..6616cccc0409ddb360c6973227d2b02f71f071f5 100644
--- a/Tests/FunctionalTests/TestCore/IsGISAXS15/IsGISAXS15.cpp
+++ b/Tests/FunctionalTests/TestCore/IsGISAXS15/IsGISAXS15.cpp
@@ -1,7 +1,6 @@
 #include "IsGISAXS15.h"
 #include "MultiLayer.h"
 #include "ParticleDecoration.h"
-#include "LayerDecorator.h"
 #include "ParticleBuilder.h"
 #include "InterferenceFunction1DParaCrystal.h"
 #include "FormFactorCylinder.h"
@@ -52,8 +51,10 @@ void FunctionalTests::IsGISAXS15::run()
     p_parameters->fixRatioBetweenParameters("height", "radius", 1.0);
 
     particle_decoration.addInterferenceFunction(p_interference_function);
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
-    multi_layer.addLayer(air_layer_decorator);
+
+    air_layer.setDecoration(particle_decoration);
+
+    multi_layer.addLayer(air_layer);
 
    // building simulation
     Simulation simulation;
diff --git a/Tests/FunctionalTests/TestCore/MesoCrystal1/SampleBuilder.cpp b/Tests/FunctionalTests/TestCore/MesoCrystal1/SampleBuilder.cpp
index 483efcba3b9559faca4ee26abf27110fa8474bf9..8486a43d6ade2815dfb149fbd137e7e141e92da9 100644
--- a/Tests/FunctionalTests/TestCore/MesoCrystal1/SampleBuilder.cpp
+++ b/Tests/FunctionalTests/TestCore/MesoCrystal1/SampleBuilder.cpp
@@ -6,7 +6,6 @@
 #include "Crystal.h"
 #include "MesoCrystal.h"
 #include "ParticleDecoration.h"
-#include "LayerDecorator.h"
 #include "Units.h"
 #include "MaterialManager.h"
 #include "FormFactorSphereGaussianRadius.h"
@@ -86,12 +85,13 @@ ISample* SampleBuilder::buildSample() const
 
     particle_decoration.setTotalParticleSurfaceDensity(surface_density);
     particle_decoration.addInterferenceFunction(p_interference_funtion);
-    LayerDecorator avg_layer_decorator(avg_layer, particle_decoration);
+
+    avg_layer.setDecoration(particle_decoration);
 
     LayerRoughness roughness(m_roughness, 0.3, 500.0*Units::nanometer);
 
     p_multi_layer->addLayer(air_layer);
-    p_multi_layer->addLayer(avg_layer_decorator);
+    p_multi_layer->addLayer(avg_layer);
     p_multi_layer->addLayerWithTopRoughness(substrate_layer, roughness);
 
     return p_multi_layer;
diff --git a/Tests/FunctionalTests/TestFit/TestFit01/TestFit01.cpp b/Tests/FunctionalTests/TestFit/TestFit01/TestFit01.cpp
index 0bf98b94ec6aa771745deecbc781b1eda0dd54bd..b4c456b49f15426cb406f2d7d981e938bdc8fb99 100644
--- a/Tests/FunctionalTests/TestFit/TestFit01/TestFit01.cpp
+++ b/Tests/FunctionalTests/TestFit/TestFit01/TestFit01.cpp
@@ -2,7 +2,6 @@
 #include "MaterialManager.h"
 #include "MessageService.h"
 #include "MultiLayer.h"
-#include "LayerDecorator.h"
 #include "ParticleDecoration.h"
 #include "InterferenceFunctions.h"
 #include "FormFactorCylinder.h"
@@ -117,8 +116,10 @@ ISample *TestFit01::buildSample()
     complex_t n_particle(1.0-6e-4, 2e-8);
     ParticleDecoration particle_decoration( new Particle(n_particle, new FormFactorCylinder(m_cylinder_height, m_cylinder_radius)));
     particle_decoration.addInterferenceFunction(new InterferenceFunctionNone());
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
-    multi_layer->addLayer(air_layer_decorator);
+
+    air_layer.setDecoration(particle_decoration);
+
+    multi_layer->addLayer(air_layer);
     return multi_layer;
 }
 
diff --git a/Tests/FunctionalTests/TestFit/TestFit02/SampleBuilder.cpp b/Tests/FunctionalTests/TestFit/TestFit02/SampleBuilder.cpp
index 1317e42b505fc8f5f9172a201408ec4334627dcb..c996ecea4478fa8d671157601b38dde03752da30 100644
--- a/Tests/FunctionalTests/TestFit/TestFit02/SampleBuilder.cpp
+++ b/Tests/FunctionalTests/TestFit/TestFit02/SampleBuilder.cpp
@@ -1,6 +1,5 @@
 #include "SampleBuilder.h"
 #include "MultiLayer.h"
-#include "LayerDecorator.h"
 #include "ParticleDecoration.h"
 #include "InterferenceFunctions.h"
 #include "FormFactorCylinder.h"
@@ -54,8 +53,10 @@ ISample *SampleBuilder::buildSample() const
     particle_decoration.addParticle(new Particle(n_particle, new FormFactorCylinder(m_cylinder_height, m_cylinder_radius)),0.0, m_cylinder_ratio);
     particle_decoration.addParticle(new Particle(n_particle, new FormFactorPrism3(m_prism3_height, m_prism3_half_side)), 0.0, 1.0 - m_cylinder_ratio);
     particle_decoration.addInterferenceFunction(new InterferenceFunctionNone());
-    LayerDecorator air_layer_decorator(air_layer, particle_decoration);
-    multi_layer->addLayer(air_layer_decorator);
+
+    air_layer.setDecoration(particle_decoration);
+
+    multi_layer->addLayer(air_layer);
     multi_layer->addLayer(substrate_layer);
     return multi_layer;
 }
diff --git a/dev-tools/python-bindings/MakePyCore.py b/dev-tools/python-bindings/MakePyCore.py
index a1f51c606f4d5d20e2a156e261e4120bbc611ce2..f7b8b5b2a58747cd6f73656c2c880283aad0c092 100644
--- a/dev-tools/python-bindings/MakePyCore.py
+++ b/dev-tools/python-bindings/MakePyCore.py
@@ -85,7 +85,7 @@ include_classes = [
 "Lattice2DIFParameters",
 "LatticeBasis",
 "Layer",
-"LayerDecorator",
+#"LayerDecorator",
 "LayerInterface",
 "LayerRoughness",
 "MaterialManager",
diff --git a/shared.pri b/shared.pri
index b7e1937aa875952ad040126628aed149d36567f1..8e044455a20645a562ccaacd37071cc0428dd38b 100644
--- a/shared.pri
+++ b/shared.pri
@@ -126,7 +126,8 @@ win32 {
 isEmpty(BOOST_LIB): message("Can't find" $${BOOST_LIBFILES} "in" $${BOOST_LIB_LOCATIONS})
 INCLUDEPATH *=  $${BOOST_INCLUDE}
 LIBS *= -L$${BOOST_LIB}
-LIBS += -lboost_program_options -lboost_iostreams -lboost_system -lboost_filesystem -lboost_regex -lboost_thread -lz
+LIBS += -lboost_program_options -lboost_iostreams -lboost_system -lboost_filesystem -lboost_regex -lboost_thread
+#LIBS += -lboost_program_options -lboost_iostreams -lboost_system -lboost_filesystem -lboost_regex -lboost_thread -lz
 # checking special case when system doesn't have libboost_thread library but have libboost_thread-mt
 !win32 {
   NumberOfSuchFiles=$$system(ls $${BOOST_LIB}/libboost_thread-mt* 2> /dev/null | wc -l)