diff --git a/Core/Algorithms/src/Experiment.cpp b/Core/Algorithms/src/Experiment.cpp
index 38ede4bfbcae8b58c9d1b9fdda30892fefa244d3..c8d6e65fd0127f919b6fc1d1ead0e35e37e479f8 100644
--- a/Core/Algorithms/src/Experiment.cpp
+++ b/Core/Algorithms/src/Experiment.cpp
@@ -11,7 +11,7 @@ Experiment::Experiment()
     init_parameters();
 }
 
-Experiment::Experiment(const Experiment &other) : IParameterized(other)
+Experiment::Experiment(const Experiment &other) : IParameterized(other), ICloneable()
     , mp_sample(0)
     , mp_sample_builder(0)
     , m_is_normalized(false)
diff --git a/Core/PythonAPI/inc/IDecoration.pypp.h b/Core/PythonAPI/inc/IDecoration.pypp.h
new file mode 100644
index 0000000000000000000000000000000000000000..833c9f470bd6389ad9eb270e135ee3f5a7ac0dad
--- /dev/null
+++ b/Core/PythonAPI/inc/IDecoration.pypp.h
@@ -0,0 +1,8 @@
+// This file has been generated by Py++.
+
+#ifndef IDecoration_hpp__pyplusplus_wrapper
+#define IDecoration_hpp__pyplusplus_wrapper
+
+void register_IDecoration_class();
+
+#endif//IDecoration_hpp__pyplusplus_wrapper
diff --git a/Core/PythonAPI/src/IDecoration.pypp.cpp b/Core/PythonAPI/src/IDecoration.pypp.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..5d087b5af67278586b7cf797de522305e09b3ca7
--- /dev/null
+++ b/Core/PythonAPI/src/IDecoration.pypp.cpp
@@ -0,0 +1,254 @@
+// This file has been generated by Py++.
+
+#include "Macros.h"
+GCC_DIAG_OFF(unused-parameter);
+GCC_DIAG_OFF(missing-field-initializers);
+#include "boost/python.hpp"
+#include "boost/python/suite/indexing/vector_indexing_suite.hpp"
+GCC_DIAG_ON(unused-parameter);
+GCC_DIAG_ON(missing-field-initializers);
+#include "BasicVector3D.h"
+#include "Experiment.h"
+#include "FormFactorCrystal.h"
+#include "FormFactorCylinder.h"
+#include "FormFactorDecoratorDebyeWaller.h"
+#include "FormFactorFullSphere.h"
+#include "FormFactorGauss.h"
+#include "FormFactorLorentz.h"
+#include "FormFactorPrism3.h"
+#include "FormFactorPyramid.h"
+#include "FormFactorSphereGaussianRadius.h"
+#include "GISASExperiment.h"
+#include "HomogeneousMaterial.h"
+#include "ICloneable.h"
+#include "IClusteredParticles.h"
+#include "ICompositeSample.h"
+#include "IDecoration.h"
+#include "IFormFactor.h"
+#include "IFormFactorBorn.h"
+#include "IFormFactorDecorator.h"
+#include "IInterferenceFunction.h"
+#include "InterferenceFunctionNone.h"
+#include "InterferenceFunction1DParaCrystal.h"
+#include "IMaterial.h"
+#include "IParameterized.h"
+#include "ISample.h"
+#include "ISampleBuilder.h"
+#include "ISelectionRule.h"
+#include "ISingleton.h"
+#include "Lattice.h"
+#include "LatticeBasis.h"
+#include "Layer.h"
+#include "LayerDecorator.h"
+#include "LayerRoughness.h"
+#include "MaterialManager.h"
+#include "MesoCrystal.h"
+#include "MultiLayer.h"
+#include "Particle.h"
+#include "Crystal.h"
+#include "ParticleDecoration.h"
+#include "OpticalFresnel.h"
+#include "ParameterPool.h"
+#include "ParticleInfo.h"
+#include "DiffuseParticleInfo.h"
+#include "PythonOutputData.h"
+#include "PythonPlusplusHelper.h"
+#include "RealParameterWrapper.h"
+#include "Transform3D.h"
+#include "Units.h"
+#include "Types.h"
+#include "IDecoration.pypp.h"
+
+namespace bp = boost::python;
+
+struct IDecoration_wrapper : IDecoration, bp::wrapper< IDecoration > {
+
+    IDecoration_wrapper( )
+    : IDecoration( )
+      , bp::wrapper< IDecoration >(){
+        // null constructor
+    
+    }
+
+    virtual ::IDecoration * clone(  ) const {
+        bp::override func_clone = this->get_override( "clone" );
+        return func_clone(  );
+    }
+
+    virtual ::IInterferenceFunctionStrategy * createStrategy( ::std::vector< IFormFactor* > const & form_factors ) const {
+        bp::override func_createStrategy = this->get_override( "createStrategy" );
+        return func_createStrategy( boost::ref(form_factors) );
+    }
+
+    virtual ::size_t getNumberOfParticles(  ) const {
+        bp::override func_getNumberOfParticles = this->get_override( "getNumberOfParticles" );
+        return func_getNumberOfParticles(  );
+    }
+
+    virtual ::ParticleInfo const * getParticleInfo( ::size_t index ) const {
+        bp::override func_getParticleInfo = this->get_override( "getParticleInfo" );
+        return func_getParticleInfo( index );
+    }
+
+    virtual bool areParametersChanged(  ) {
+        if( bp::override func_areParametersChanged = this->get_override( "areParametersChanged" ) )
+            return func_areParametersChanged(  );
+        else{
+            return this->IParameterized::areParametersChanged(  );
+        }
+    }
+    
+    bool default_areParametersChanged(  ) {
+        return IParameterized::areParametersChanged( );
+    }
+
+    virtual ::ParameterPool * createParameterTree(  ) const  {
+        if( bp::override func_createParameterTree = this->get_override( "createParameterTree" ) )
+            return func_createParameterTree(  );
+        else{
+            return this->IParameterized::createParameterTree(  );
+        }
+    }
+    
+    ::ParameterPool * default_createParameterTree(  ) const  {
+        return IParameterized::createParameterTree( );
+    }
+
+    virtual ::ICompositeSample * getCompositeSample(  ) {
+        if( bp::override func_getCompositeSample = this->get_override( "getCompositeSample" ) )
+            return func_getCompositeSample(  );
+        else{
+            return this->ICompositeSample::getCompositeSample(  );
+        }
+    }
+    
+    ::ICompositeSample * default_getCompositeSample(  ) {
+        return ICompositeSample::getCompositeSample( );
+    }
+
+    virtual ::ICompositeSample const * getCompositeSample(  ) const  {
+        if( bp::override func_getCompositeSample = this->get_override( "getCompositeSample" ) )
+            return func_getCompositeSample(  );
+        else{
+            return this->ICompositeSample::getCompositeSample(  );
+        }
+    }
+    
+    ::ICompositeSample const * default_getCompositeSample(  ) const  {
+        return ICompositeSample::getCompositeSample( );
+    }
+
+    virtual void printParameters(  ) const  {
+        if( bp::override func_printParameters = this->get_override( "printParameters" ) )
+            func_printParameters(  );
+        else{
+            this->IParameterized::printParameters(  );
+        }
+    }
+    
+    void default_printParameters(  ) const  {
+        IParameterized::printParameters( );
+    }
+
+    virtual void print_structure(  ) {
+        if( bp::override func_print_structure = this->get_override( "print_structure" ) )
+            func_print_structure(  );
+        else{
+            this->ISample::print_structure(  );
+        }
+    }
+    
+    void default_print_structure(  ) {
+        ISample::print_structure( );
+    }
+
+    virtual void setParametersAreChanged(  ) {
+        if( bp::override func_setParametersAreChanged = this->get_override( "setParametersAreChanged" ) )
+            func_setParametersAreChanged(  );
+        else{
+            this->IParameterized::setParametersAreChanged(  );
+        }
+    }
+    
+    void default_setParametersAreChanged(  ) {
+        IParameterized::setParametersAreChanged( );
+    }
+
+    virtual ::size_t size(  ) const  {
+        if( bp::override func_size = this->get_override( "size" ) )
+            return func_size(  );
+        else{
+            return this->ICompositeSample::size(  );
+        }
+    }
+    
+    ::size_t default_size(  ) const  {
+        return ICompositeSample::size( );
+    }
+
+};
+
+void register_IDecoration_class(){
+
+    bp::class_< IDecoration_wrapper, bp::bases< ICompositeSample >, boost::noncopyable >( "IDecoration", bp::init< >() )    
+        .def( 
+            "clone"
+            , bp::pure_virtual( (::IDecoration * ( ::IDecoration::* )(  ) const)(&::IDecoration::clone) )
+            , bp::return_value_policy< bp::manage_new_object >() )    
+        .def( 
+            "createStrategy"
+            , bp::pure_virtual( (::IInterferenceFunctionStrategy * ( ::IDecoration::* )( ::std::vector< IFormFactor* > const & ) const)(&::IDecoration::createStrategy) )
+            , ( bp::arg("form_factors") )
+            , bp::return_value_policy< bp::manage_new_object >() )    
+        .def( 
+            "getNumberOfParticles"
+            , bp::pure_virtual( (::size_t ( ::IDecoration::* )(  ) const)(&::IDecoration::getNumberOfParticles) ) )    
+        .def( 
+            "getParticleInfo"
+            , bp::pure_virtual( (::ParticleInfo const * ( ::IDecoration::* )( ::size_t ) const)(&::IDecoration::getParticleInfo) )
+            , ( bp::arg("index") )
+            , bp::return_value_policy< bp::reference_existing_object >() )    
+        .def( 
+            "getTotalParticleSurfaceDensity"
+            , (double ( ::IDecoration::* )(  ) const)( &::IDecoration::getTotalParticleSurfaceDensity ) )    
+        .def( 
+            "setTotalParticleSurfaceDensity"
+            , (void ( ::IDecoration::* )( double ) )( &::IDecoration::setTotalParticleSurfaceDensity )
+            , ( bp::arg("surface_density") ) )    
+        .def( 
+            "areParametersChanged"
+            , (bool ( ::IParameterized::* )(  ) )(&::IParameterized::areParametersChanged)
+            , (bool ( IDecoration_wrapper::* )(  ) )(&IDecoration_wrapper::default_areParametersChanged) )    
+        .def( 
+            "createParameterTree"
+            , (::ParameterPool * ( ::IParameterized::* )(  ) const)(&::IParameterized::createParameterTree)
+            , (::ParameterPool * ( IDecoration_wrapper::* )(  ) const)(&IDecoration_wrapper::default_createParameterTree)
+            , bp::return_value_policy< bp::manage_new_object >() )    
+        .def( 
+            "getCompositeSample"
+            , (::ICompositeSample * ( ::ICompositeSample::* )(  ) )(&::ICompositeSample::getCompositeSample)
+            , (::ICompositeSample * ( IDecoration_wrapper::* )(  ) )(&IDecoration_wrapper::default_getCompositeSample)
+            , bp::return_value_policy< bp::reference_existing_object >() )    
+        .def( 
+            "getCompositeSample"
+            , (::ICompositeSample const * ( ::ICompositeSample::* )(  ) const)(&::ICompositeSample::getCompositeSample)
+            , (::ICompositeSample const * ( IDecoration_wrapper::* )(  ) const)(&IDecoration_wrapper::default_getCompositeSample)
+            , bp::return_value_policy< bp::reference_existing_object >() )    
+        .def( 
+            "printParameters"
+            , (void ( ::IParameterized::* )(  ) const)(&::IParameterized::printParameters)
+            , (void ( IDecoration_wrapper::* )(  ) const)(&IDecoration_wrapper::default_printParameters) )    
+        .def( 
+            "print_structure"
+            , (void ( ::ISample::* )(  ) )(&::ISample::print_structure)
+            , (void ( IDecoration_wrapper::* )(  ) )(&IDecoration_wrapper::default_print_structure) )    
+        .def( 
+            "setParametersAreChanged"
+            , (void ( ::IParameterized::* )(  ) )(&::IParameterized::setParametersAreChanged)
+            , (void ( IDecoration_wrapper::* )(  ) )(&IDecoration_wrapper::default_setParametersAreChanged) )    
+        .def( 
+            "size"
+            , (::size_t ( ::ICompositeSample::* )(  ) const)(&::ICompositeSample::size)
+            , (::size_t ( IDecoration_wrapper::* )(  ) const)(&IDecoration_wrapper::default_size) );
+
+}
diff --git a/Core/Tools/src/ParameterPool.cpp b/Core/Tools/src/ParameterPool.cpp
index 112234b8b165807ff9a8418ad922dccbac1901da..704ff2fa1e80a6945f61ecb6edf7029a36755c3d 100644
--- a/Core/Tools/src/ParameterPool.cpp
+++ b/Core/Tools/src/ParameterPool.cpp
@@ -165,7 +165,7 @@ int ParameterPool::setMatchedParametersValue(const std::string &wildcards, doubl
 /* ************************************************************************* */
 void ParameterPool::print(std::ostream &ostr) const
 {
-    const int number_of_pars_in_line(4);
+    const size_t number_of_pars_in_line(4);
     if( m_map.size() ) {
         // printing in one line
         if(m_map.size() < number_of_pars_in_line) {
diff --git a/Tests/UnitTests/TestCore/TestCore b/Tests/UnitTests/TestCore/TestCore
index 4586bdfc98205864be5e87deb9ed9583c63d6c89..df121322af315d29a8359e4742bc24a05f97e136 100755
Binary files a/Tests/UnitTests/TestCore/TestCore and b/Tests/UnitTests/TestCore/TestCore differ
diff --git a/shared.pri b/shared.pri
index c5199e9c5e9ca2a49783b7135bc04ca8aa29ecc1..aff348993cbe198e7f2459cff75f64eafd8e4073 100644
--- a/shared.pri
+++ b/shared.pri
@@ -116,6 +116,11 @@ CONFIG(GPERFTOOLS) {
   LIBS += -L/opt/local/lib -lprofiler -ltcmalloc
 }
 
+CONFIG+=PEDANTIC
+CONFIG(PEDANTIC) {
+  QMAKE_CXXFLAGS_RELEASE += -Weffc++
+  QMAKE_CXXFLAGS_DEBUG += -Weffc++
+}
 
 
 # hints