diff --git a/Core/Export/PyGenVisitor.cpp b/Core/Export/PyGenVisitor.cpp
index 20566addc98d384b36d050a0b3b002bfc5c52e8f..ea4c3290e4eea8db9e189860c188d1a154b4f98d 100644
--- a/Core/Export/PyGenVisitor.cpp
+++ b/Core/Export/PyGenVisitor.cpp
@@ -38,6 +38,8 @@
 PyGenVisitor::PyGenVisitor(const MultiLayer& multilayer)
     : m_label(new SampleLabelHandler())
 {
+    for( auto mat: multilayer.containedMaterials() )
+        m_label->insertMaterial(mat);
     VisitSampleTreePostorder(multilayer, *this);
 }
 
@@ -204,7 +206,6 @@ void PyGenVisitor::visit(const InterferenceFunction2DParaCrystal* sample)
 
 void PyGenVisitor::visit(const Layer* sample)
 {
-    m_label->insertMaterial(sample->getMaterial());
     m_label->setLabel(sample);
 }
 
@@ -235,7 +236,6 @@ void PyGenVisitor::visit(const MesoCrystal*)
 
 void PyGenVisitor::visit(const Particle* sample)
 {
-    m_label->insertMaterial(sample->getMaterial());
     m_label->setLabel(sample);
 }
 
@@ -342,34 +342,34 @@ std::string PyGenVisitor::defineMaterials() const
     result << indent() << "# Defining Materials\n";
     std::set<std::string> visitedMaterials;
     for (auto it=themap->begin(); it!=themap->end(); ++it) {
-        if (visitedMaterials.find(it->second) == visitedMaterials.end()) {
-            visitedMaterials.insert(it->second);
-            const IMaterial* p_material = it->first;
-            complex_t ri = p_material->getRefractiveIndex();
-            double delta = 1.0 - std::real(ri);
-            double beta = std::imag(ri);
-            if (p_material->isScalarMaterial()) {
-                result << indent() << m_label->getLabel(p_material) <<
-                    " = ba.HomogeneousMaterial(\"" << p_material->getName() <<
-                    "\", " << PyGenTools::printDouble(delta) << ", " <<
-                    PyGenTools::printDouble(beta) << ")\n";
-            } else {
-                const HomogeneousMagneticMaterial* p_mag_material
-                    = dynamic_cast<const HomogeneousMagneticMaterial*>(p_material);
-                if (p_mag_material == 0)
-                    throw Exceptions::RuntimeErrorException(
-                        "PyGenVisitor::defineMaterials: "
-                        "Non scalar material should be of type HomogeneousMagneticMaterial");
-                kvector_t magnetic_field = p_mag_material->getMagneticField();
-                result << indent() << "magnetic_field = kvector_t(" << magnetic_field.x() << ", "
-                       << magnetic_field.y() << ", " << magnetic_field.z() << ", "
-                       << ")\n";
-                result << indent() << m_label->getLabel(p_material)
-                       << " = ba.HomogeneousMagneticMaterial(\"" << p_material->getName();
-                result << "\", " << PyGenTools::printDouble(delta) << ", "
-                       << PyGenTools::printDouble(beta) << ", "
-                       << "magnetic_field)\n";
-            }
+        if (visitedMaterials.find(it->second) != visitedMaterials.end())
+            continue;
+        visitedMaterials.insert(it->second);
+        const IMaterial* p_material = it->first;
+        complex_t ri = p_material->getRefractiveIndex();
+        double delta = 1.0 - std::real(ri);
+        double beta = std::imag(ri);
+        if (p_material->isScalarMaterial()) {
+            result << indent() << m_label->getLabel(p_material) <<
+                " = ba.HomogeneousMaterial(\"" << p_material->getName() <<
+                "\", " << PyGenTools::printDouble(delta) << ", " <<
+                PyGenTools::printDouble(beta) << ")\n";
+        } else {
+            const HomogeneousMagneticMaterial* p_mag_material
+                = dynamic_cast<const HomogeneousMagneticMaterial*>(p_material);
+            if (p_mag_material == 0)
+                throw Exceptions::RuntimeErrorException(
+                    "PyGenVisitor::defineMaterials: "
+                    "Non scalar material should be of type HomogeneousMagneticMaterial");
+            kvector_t magnetic_field = p_mag_material->getMagneticField();
+            result << indent() << "magnetic_field = kvector_t(" << magnetic_field.x() << ", "
+                   << magnetic_field.y() << ", " << magnetic_field.z() << ", "
+                   << ")\n";
+            result << indent() << m_label->getLabel(p_material)
+                   << " = ba.HomogeneousMagneticMaterial(\"" << p_material->getName();
+            result << "\", " << PyGenTools::printDouble(delta) << ", "
+                   << PyGenTools::printDouble(beta) << ", "
+                   << "magnetic_field)\n";
         }
     }
     return result.str();
diff --git a/Core/Export/SampleLabelHandler.cpp b/Core/Export/SampleLabelHandler.cpp
index 9c64fea95943fa13fbb1246b458275ad7867cd8d..ecb3913a9969529a93d61bb7dfd3e4a45e6746f4 100644
--- a/Core/Export/SampleLabelHandler.cpp
+++ b/Core/Export/SampleLabelHandler.cpp
@@ -157,14 +157,11 @@ SampleLabelHandler::rotations_t* SampleLabelHandler::getRotationsMap()
 
 void SampleLabelHandler::insertMaterial(const IMaterial* sample)
 {
-    materials_t::iterator it = m_MaterialLabel.begin();
-    materials_t::const_iterator iEnd = m_MaterialLabel.end();
-    while (it != iEnd) {
+    for (auto it=m_MaterialLabel.begin(); it!=m_MaterialLabel.end(); ++it) {
         if(definesSameMaterial(it->first, sample) ) {
             m_MaterialLabel.insert(sample, it->second);
             return;
         }
-        it++;
     }
     // material not found, do insert
     std::ostringstream label_stream;
diff --git a/Core/Sample/ISample.cpp b/Core/Sample/ISample.cpp
index 6dd705313d2559434260579ae2d99d1dcbebbd4a..91dd411e9a552cb788a79b389bf8ae2660add691 100644
--- a/Core/Sample/ISample.cpp
+++ b/Core/Sample/ISample.cpp
@@ -41,7 +41,7 @@ void insert_material(std::vector<const IMaterial*>& collection, const IMaterial*
 {
     for( auto it: collection )
         if( pEqual(it, material) )
-            return;
+            ; // TEMPreturn;
     collection.push_back( material );
 }