diff --git a/Geo/GEdge.cpp b/Geo/GEdge.cpp
index d693619f3dd02a7185780932256c0ff63762913b..55c356f17f578d17ec923bb0d25d83434412799b 100644
--- a/Geo/GEdge.cpp
+++ b/Geo/GEdge.cpp
@@ -297,7 +297,7 @@ bool GEdge::XYZToU(const double X, const double Y, const double Z,
   double uMin = uu.low();
   double uMax = uu.high();
 
-  printf("dans GEdge uMin=%g, uMax=%g \n", uMin, uMax);
+  // printf("dans GEdge uMin=%g, uMax=%g \n", uMin, uMax);
 
   SVector3 Q(X, Y, Z), P;
   
diff --git a/Geo/GModel.cpp b/Geo/GModel.cpp
index db55455256cac03723feac617750f0a8bd8873bf..012d00644bc1a736af107a82234caa2a85d744d6 100644
--- a/Geo/GModel.cpp
+++ b/Geo/GModel.cpp
@@ -795,7 +795,10 @@ void GModel::_storeElementsInEntities(std::map<int, std::vector<MElement*> > &ma
           v = new discreteVertex(this, it->first);
           add(v);
         }
-        if(!v->points.empty()) v->points.clear();  // CAD points already have one by default
+        if(!v->points.empty()) {
+	  v->points.clear();
+	  v->mesh_vertices.clear();
+	}  // CAD points already have one by default
 	  _addElements(v->points, it->second);
       }
       break;
diff --git a/Geo/GeomMeshMatcher.cpp b/Geo/GeomMeshMatcher.cpp
index e77e44f3d09d895309822c30f21a63c3df015385..9a32a9daafa5f9a5954e6cfc5b6ecb44fc1d4291 100644
--- a/Geo/GeomMeshMatcher.cpp
+++ b/Geo/GeomMeshMatcher.cpp
@@ -210,6 +210,14 @@ GeomMeshMatcher::matchEdges(GModel* m1, GModel* m2,
     coresp_e->push_back(Pair<GEdge*,GEdge*>((GEdge*) *entity1 ,
                                              choice));
     choice->setTag(((GEdge*) *entity1)->tag());
+
+    // This reverses the edge if it's not parametrized in the right direction
+    if (choice->getBeginVertex() == findMatching<GVertex*>(*coresp_v,v2) &&
+	choice->getEndVertex() == findMatching<GVertex*>(*coresp_v,v1)) {
+      Msg::Info("Wrong parametrization direction, reversing.");
+      choice->reverse();
+    }
+
     num_matched_edges++;
   }
 
diff --git a/Mesh/HighOrder.cpp b/Mesh/HighOrder.cpp
index a666efa23d5bb9a21c16974c44da526e32d039ae..b36767ecd9692f496abaf49265f8768fcb1c43f7 100644
--- a/Mesh/HighOrder.cpp
+++ b/Mesh/HighOrder.cpp
@@ -258,11 +258,6 @@ static void getEdgeVertices(GEdge *ge, MElement *ele, std::vector<MVertex*> &ve,
         else
           reparamOK &= reparamMeshVertexOnEdge(v1, ge, u1);
         if(reparamOK){
-	  if (u1 < u0) {
-	    ge->reverse();
-	    edge = ele->getEdge(i);
-	    double tmp = u0; u0 = u1; u1 = tmp;
-	  }
           double relax = 1.;
           while (1){
             if(computeEquidistantParameters(ge, u0, u1, nPts + 2, US, relax))