diff --git a/modules/mol/mm/src/topology_creator.cc b/modules/mol/mm/src/topology_creator.cc
index 71401b50b14f3873690f2227214fd32b51ad68d0..d21526c2428ae47b01c28e658d1d32bd7a85462a 100644
--- a/modules/mol/mm/src/topology_creator.cc
+++ b/modules/mol/mm/src/topology_creator.cc
@@ -652,6 +652,7 @@ TopologyPtr TopologyCreator::Create(const ost::mol::EntityHandle& handle,
 
   if(settings->add_dihedrals){
     //handle dihedrals
+    std::set<Index<4> > dihedrals_to_delete;
     for(uint i = 0; i < top->GetNumResidues(); ++i){
       interaction_list = building_blocks[i]->GetDihedrals();
       for(std::vector<MMInteractionPtr>::iterator j = interaction_list.begin();
@@ -681,7 +682,8 @@ TopologyPtr TopologyCreator::Create(const ost::mol::EntityHandle& handle,
             ss << "defines dihedral, that doesn't exist!";
             throw ost::Error(ss.str());
           }
-          dihedrals.erase(dihedral_index);
+          
+          dihedrals_to_delete.insert(dihedral_index);
           //only periodic dihedrals are supported... 
           parameters = (*j)->GetParam();
           top->AddPeriodicDihedral(one,two,three,four,
@@ -689,6 +691,11 @@ TopologyPtr TopologyCreator::Create(const ost::mol::EntityHandle& handle,
         }
       }
     }
+    
+    for(std::set<Index<4> >::iterator i = dihedrals_to_delete.begin();
+        i != dihedrals_to_delete.end(); ++i){
+      dihedrals.erase(*i);
+    }
 
     //add pointers of dihedrals definitions, that are not already parametrized
     //in the building blocks
@@ -726,6 +733,7 @@ TopologyPtr TopologyCreator::Create(const ost::mol::EntityHandle& handle,
 
   if(settings->add_impropers){
     //handle impropers
+    std::set<Index<4> > impropers_to_delete;
     for(uint i = 0; i < building_blocks.size(); ++i){
       interaction_list = building_blocks[i]->GetImpropers();
       for(std::vector<MMInteractionPtr>::iterator j = interaction_list.begin();
@@ -740,7 +748,7 @@ TopologyPtr TopologyCreator::Create(const ost::mol::EntityHandle& handle,
           uint three = top->GetAtomIndex(i, interaction_atom_names[2]);
           uint four = top->GetAtomIndex(i, interaction_atom_names[3]);
           Index<4> improper_index(one,two,three,four);
-          impropers.erase(improper_index);
+          impropers_to_delete.insert(improper_index);
           parameters = (*j)->GetParam();
           switch((*j)->GetFuncType()){
             case PeriodicImproper:{
@@ -760,6 +768,12 @@ TopologyPtr TopologyCreator::Create(const ost::mol::EntityHandle& handle,
         }
       }
     }
+    
+    for(std::set<Index<4> >::iterator i = impropers_to_delete.begin();
+        i != impropers_to_delete.end(); ++i){
+      impropers.erase(*i);
+    }
+    
     //add pointers of improper definitions, that are not already parametrized
     //in the building blocks