diff --git a/Geo/GEdge.cpp b/Geo/GEdge.cpp
index bc07fcf05ffacf66ba915f01ebe35fa94388ebd0..d693619f3dd02a7185780932256c0ff63762913b 100644
--- a/Geo/GEdge.cpp
+++ b/Geo/GEdge.cpp
@@ -39,6 +39,17 @@ void GEdge::deleteMesh()
   lines.clear();
 }
 
+void GEdge::reverse()
+{
+  GVertex* tmp=v0;
+  v0=v1;
+  v1=tmp;
+  for (std::vector<MLine*>::iterator line = lines.begin();
+       line != lines.end();
+       line++)
+    (*line)->revert();
+}
+
 unsigned int GEdge::getNumMeshElements()
 { 
   return lines.size();
diff --git a/Geo/GEdge.h b/Geo/GEdge.h
index 074408fa2462df3742db5ec9f5bc7e0bb737ecc3..2818522761da1d6277b9afd1b12b8268afa6d7ed 100644
--- a/Geo/GEdge.h
+++ b/Geo/GEdge.h
@@ -45,7 +45,7 @@ class GEdge : public GEntity {
   GVertex *getBeginVertex() const { return v0; }
   GVertex *getEndVertex() const { return v1; }
 
-  void swapVertices() {GVertex* tmp=v0; v0=v1; v1=tmp;}
+  void reverse();
 
   // add/delete a face bounded by this edge
   void addFace(GFace *f);
diff --git a/Mesh/HighOrder.cpp b/Mesh/HighOrder.cpp
index eecf866a62143a2ae9963675e78f198528dc6155..a666efa23d5bb9a21c16974c44da526e32d039ae 100644
--- a/Mesh/HighOrder.cpp
+++ b/Mesh/HighOrder.cpp
@@ -259,10 +259,9 @@ static void getEdgeVertices(GEdge *ge, MElement *ele, std::vector<MVertex*> &ve,
           reparamOK &= reparamMeshVertexOnEdge(v1, ge, u1);
         if(reparamOK){
 	  if (u1 < u0) {
-	    ge->swapVertices();
-	    double tmp = u0;
-	    u0 = u1;
-	    u1 = tmp;
+	    ge->reverse();
+	    edge = ele->getEdge(i);
+	    double tmp = u0; u0 = u1; u1 = tmp;
 	  }
           double relax = 1.;
           while (1){