diff --git a/Fltk/classificationEditor.cpp b/Fltk/classificationEditor.cpp
index 1d37eaeb43665f2b1c4b6877d80e9e6a8edf99aa..10e610a5123e474c0e4b2c0d952341df57389b69 100644
--- a/Fltk/classificationEditor.cpp
+++ b/Fltk/classificationEditor.cpp
@@ -383,7 +383,7 @@ static void class_color_cb(Fl_Widget* w, void* data)
     for (std::map<std::pair<int, int>, GEdge*>::iterator it = newEdges.begin() ; it != newEdges.end() ; ++it){
 
       GEdge *ge = it->second;
-      printf("new edge with tag %d \n", ge->tag());
+      printf("NEW edge with tag  = %d \n", ge->tag());
 
       std::list<MLine*> segments;
       for (int i=0; i < ge->lines.size(); i++){
@@ -391,7 +391,8 @@ static void class_color_cb(Fl_Widget* w, void* data)
       }
 
       //for each actual GEdge
-      while (! segments.empty()) {
+      while (!segments.empty()) {
+
 	std::vector<MLine*> myLines;
 	std::list<MLine*>::iterator it = segments.begin();
 
@@ -401,7 +402,7 @@ static void class_color_cb(Fl_Widget* w, void* data)
 	segments.erase(it);
 	it++;
 
-	printf("***candidate mline %d %d of size \n", vB->getNum(), vE->getNum(), segments.size());
+	//printf("***candidate mline %d %d of size %d \n", vB->getNum(), vE->getNum(), segments.size());
 
    	for (int i=0; i<2; i++) {
 
@@ -409,19 +410,24 @@ static void class_color_cb(Fl_Widget* w, void* data)
 	  for (std::list<MLine*>::iterator it = segments.begin() ; it != segments.end(); ++it){	
 	    MVertex *v1 = (*it)->getVertex(0);
 	    MVertex *v2 = (*it)->getVertex(1);
-	    printf("mline %d %d \n", v1->getNum(), v2->getNum());
-
+	    //printf("mline %d %d \n", v1->getNum(), v2->getNum());
+	    
+	    std::list<MLine*>::iterator itp;
 	    if ( v1 == vE  ){
-	      printf("->push back this mline \n");
+	      //printf("->push back this mline \n");
 	      myLines.push_back(*it);
-	      segments.erase(it);
+	      itp = it;
+	      it++;
+	      segments.erase(itp);
 	      vE = v2;
 	      i = -1;
 	    }
 	    else if ( v2 == vE){
-	      printf("->push back this mline \n");
+	      //printf("->push back this mline \n");
 	      myLines.push_back(*it);
-	      segments.erase(it);
+	      itp = it;
+	      it++;
+	      segments.erase(itp);
 	      vE = v1;
 	      i=-1;
 	    }
@@ -431,20 +437,20 @@ static void class_color_cb(Fl_Widget* w, void* data)
 
 	  if (segments.empty()) break;
 
-	  printf("not found VB=%d vE=%d\n", vB->getNum(), vE->getNum());
+	  //printf("not found VB=%d vE=%d\n", vB->getNum(), vE->getNum());
 	  MVertex *temp = vB;
 	  vB = vE;
 	  vE = temp;
-	  printf("not found VB=%d vE=%d\n", vB->getNum(), vE->getNum());
+	  //printf("not found VB=%d vE=%d\n", vB->getNum(), vE->getNum());
 
 	}
 	
- 	printf("************ CANDIDATE NEW EDGE \n");
- 	for (std::vector<MLine*>::iterator it = myLines.begin() ; it != myLines.end() ; ++it){
- 	  MVertex *v1 = (*it)->getVertex(0);
- 	  MVertex *v2 = (*it)->getVertex(1);
- 	  printf("Line %d %d \n", v1->getNum(), v2->getNum());
- 	}
+//  	printf("************ CANDIDATE NEW EDGE \n");
+//  	for (std::vector<MLine*>::iterator it = myLines.begin() ; it != myLines.end() ; ++it){
+//  	  MVertex *v1 = (*it)->getVertex(0);
+//  	  MVertex *v2 = (*it)->getVertex(1);
+//  	  printf("Line %d %d \n", v1->getNum(), v2->getNum());
+//  	}
 	GEdge *newGe = new discreteEdge(GModel::current(), maxEdgeNum() + 1, 0, 0);
 	newGe->lines.insert(newGe->lines.end(), myLines.begin(), myLines.end());
 	GModel::current()->add(newGe);
diff --git a/Geo/GFaceCompound.cpp b/Geo/GFaceCompound.cpp
index b119c0814de48487171ae27a43cbdb6de0da19cf..2f8e8cb6880c5b53061d979bf64dfce618b32c09 100644
--- a/Geo/GFaceCompound.cpp
+++ b/Geo/GFaceCompound.cpp
@@ -259,17 +259,22 @@ void GFaceCompound::getBoundingEdges()
 	GVertex *v1 = (*it)->getBeginVertex();
 	GVertex *v2 = (*it)->getEndVertex();
 	
+	std::set<GEdge*>::iterator itp;
 	if ( v1 == vE  ){
 	  printf("boundary add edge=%d \n", (*it)->tag());
 	  _loop.push_back(*it);
-	  _unique.erase(it);
+	  itp = it;
+	  it++;
+	  _unique.erase(itp);
 	  vE = v2;
 	  i = -1;
 	}
 	else if ( v2 == vE){
 	  printf("boundary add edge=%d \n", (*it)->tag());
 	  _loop.push_back(*it);
-	  _unique.erase(it);
+	  itp = it;
+	  it++;
+	  _unique.erase(itp);
 	  vE = v1;
 	  i=-1;
 	}
diff --git a/Geo/GModel.cpp b/Geo/GModel.cpp
index bf7301a226531c6ab5c05f2eda7dd1cf174b1112..631f6c243a7a437b8753c66c9d20d2a523bd2434 100644
--- a/Geo/GModel.cpp
+++ b/Geo/GModel.cpp
@@ -1092,17 +1092,22 @@ void GModel::createTopologyFromMesh()
 	    MVertex *v2 = (*it).getVertex(1);
 	    //printf("mline %d %d size=%d\n", v1->getNum(), v2->getNum(), myEdges.size());
 
+	    std::vector<MEdge>::iterator itp;
 	    if ( v1 == vE  ){
 	      //printf("->v1 = vE push back this mline \n");
 	      myLines.push_back(*it);
-	      myEdges.erase(it);
+	      itp = it;
+	      it++;
+	      myEdges.erase(itp);
 	      vE = v2;
 	      i = -1;
 	    }
 	    else if ( v2 == vE){
 	      //printf("->v2 = VE push back this mline \n");
 	      myLines.push_back(*it);
-	      myEdges.erase(it);
+	      itp = it;
+	      it++;
+	      myEdges.erase(itp);
 	      vE = v1;
 	      i=-1;
 	    }