diff --git a/Geo/GeomMeshMatcher.cpp b/Geo/GeomMeshMatcher.cpp
index e1bfed7b5b07dc0a4310d0dd4589b347b531bb22..22bdddf500c2090cebd90d095a423396bdf43d1f 100644
--- a/Geo/GeomMeshMatcher.cpp
+++ b/Geo/GeomMeshMatcher.cpp
@@ -567,9 +567,10 @@ int GeomMeshMatcher::forceTomatch(GModel *geom, GModel *mesh, const double TOL)
 }
 
 static void copy_vertices (GVertex *to, GVertex *from, std::map<MVertex*,MVertex*> &_mesh_to_geom){
+  to->deleteMesh();
   if (from) {
-    to->deleteMesh();
-    for (unsigned int i=0;i<from->mesh_vertices.size();i++){
+    //to->deleteMesh();
+    for (unsigned int i=0;i<1;i++){
       MVertex *v_from = from->mesh_vertices[i];
       MVertex *v_to = new MVertex (v_from->x(),v_from->y(),v_from->z(), to);
       to->mesh_vertices.push_back(v_to);
@@ -597,15 +598,6 @@ static void copy_vertices (GEdge* to, GEdge* from, std::map<MVertex*,MVertex*> &
     return;
   }
 
-  if (from->getBeginVertex() == from->getEndVertex()) {
-    MVertex *v_from = from->getBeginVertex()->mesh_vertices[0];
-    double t;
-    GPoint gp = to->closestPoint(SPoint3(v_from->x(),v_from->y(),v_from->z()), t );
-    MEdgeVertex *v_to = new MEdgeVertex (gp.x(),gp.y(),gp.z(), to, gp.u() );
-    to->mesh_vertices.push_back(v_to);
-    _mesh_to_geom[v_from] = v_to;
-  }
-
   for (unsigned int i=0;i<from->mesh_vertices.size();i++){
     MVertex *v_from = from->mesh_vertices[i];
     double t;
@@ -719,7 +711,5 @@ int GeomMeshMatcher::match(GModel *geom, GModel *mesh)
   copy_vertices(geom, mesh, _mesh_to_geom,coresp_v,coresp_e,coresp_f);
   copy_elements(geom, mesh, _mesh_to_geom,coresp_v,coresp_e,coresp_f);
 
-  geom->removeDuplicateMeshVertices(1e-8);
-
   return 1;
 }
diff --git a/Mesh/HighOrder.cpp b/Mesh/HighOrder.cpp
index 7d1a2483a028f4c79b6f7d0322b3b1d384ded60d..b8e0dfe5070265d345a6515ec38cca119256e626 100644
--- a/Mesh/HighOrder.cpp
+++ b/Mesh/HighOrder.cpp
@@ -128,6 +128,7 @@ static bool computeEquidistantParameters(GEdge *ge, double u0, double uN, int N,
     return computeEquidistantParameters0(ge,u0,uN,N,u,underRelax);
   else if (method_for_computing_intermediary_points == 1) // use projection
     return computeEquidistantParameters1(ge,u0,uN,N,u,underRelax);
+  return false;
 }
 
 static double mylength(GFace *gf, int i, double *u, double *v)
@@ -251,6 +252,7 @@ static bool computeEquidistantParameters(GFace *gf, double u0, double uN,
     return computeEquidistantParameters0(gf,u0,uN,v0,vN,N,u,v);
   else if (method_for_computing_intermediary_points == 1) // use projection
     return computeEquidistantParameters1(gf,u0,uN,v0,vN,N,u,v);
+  return false;
 }
 
 
@@ -288,6 +290,7 @@ static void getEdgeVertices(GEdge *ge, MElement *ele, std::vector<MVertex*> &ve,
             if(computeEquidistantParameters(ge, std::min(u0,u1), std::max(u0,u1),
                                             nPts + 2, US, relax))
               break;
+
             relax /= 2.0;
             if(relax < 1.e-2)
               break;
@@ -585,7 +588,7 @@ static void reorientQuadPoints(std::vector<MVertex*> &vtcs, int orientation,
     }
 
     order -= 2;
-    if (start >= vtcs.size()) break;
+    if (start >= (int) vtcs.size()) break;
   }
 }
 
@@ -1331,6 +1334,7 @@ void SetOrderN(GModel *m, int order, bool linear, bool incomplete)
       v.insert(v.begin(), (*it)->triangles.begin(), (*it)->triangles.end());
       v.insert(v.end(), (*it)->quadrangles.begin(), (*it)->quadrangles.end());
       hot.applySmoothingTo(v, (*it));
+      //hot.applySmoothingTo(v, .1,0);
     }
     //    hot.ensureMinimumDistorsion(0.1);
     checkHighOrderTriangles("Final surface mesh", m, bad, worst);