diff --git a/Geo/GFace.cpp b/Geo/GFace.cpp
index 563843c90aebe26048752a2eb0d30aba4a873a00..1333a3ba868dcffa5e3c9338b0d2ca7cc5338927 100644
--- a/Geo/GFace.cpp
+++ b/Geo/GFace.cpp
@@ -878,7 +878,8 @@ SPoint2 GFace::parFromPoint(const SPoint3 &p, bool onSurface) const
 GPoint GFace::closestPoint(const SPoint3 &queryPoint, const double initialGuess[2]) const
 {
   Msg::Error("Closest point not implemented for this type of surface");
-  return GPoint(0, 0, 0);
+  SPoint2 p = parFromPoint(queryPoint, false);
+  return point(p);
 }
 
 bool GFace::containsParam(const SPoint2 &pt) const
diff --git a/Geo/GFaceCompound.cpp b/Geo/GFaceCompound.cpp
index 37b4bbc87841f82e5a7f42d81529fd7fe6869831..2221cd6887d499210f675a82cc59dd2cd27cd165 100644
--- a/Geo/GFaceCompound.cpp
+++ b/Geo/GFaceCompound.cpp
@@ -1019,14 +1019,14 @@ SPoint2 GFaceCompound::getCoordinates(MVertex *v) const
         vR = ge->mesh_vertices[j];
         vR->getParameter(0,tR);
         if(!vR->getParameter(0,tR)) {
-          Msg::Error("vertex vr %p not MedgeVertex \n", vR);
+          Msg::Error("vertex vr %p not MedgeVertex", vR);
           Msg::Exit(1);
         }
         if(tLoc > tL && tLoc < tR){
           found = true;
           itR = coordinates.find(vR);
           if(itR == coordinates.end()){
-            Msg::Error("vertex %p (%g %g %g) not found\n", vR, vR->x(), vR->y(), vR->z());
+            Msg::Error("vertex %p (%g %g %g) not found", vR, vR->x(), vR->y(), vR->z());
             Msg::Exit(1);
           }
           break;
diff --git a/Mesh/highOrderTools.cpp b/Mesh/highOrderTools.cpp
index f017ceeeffd70e6616d8837adf0bc4749fba41a0..2de0dd41beb4221774c2c794c7780eca18acac35 100644
--- a/Mesh/highOrderTools.cpp
+++ b/Mesh/highOrderTools.cpp
@@ -112,8 +112,8 @@ static void getDistordedElements(const std::vector<MElement*> &v,
 }
 
 static void addOneLayer(const std::vector<MElement*> &v, 
-                 std::vector<MElement*> &d,
-                 std::vector<MElement*> &layer)
+                        std::vector<MElement*> &d,
+                        std::vector<MElement*> &layer)
 {
   std::set<MVertex*> all;
   for (unsigned int i = 0; i < d.size(); i++){
diff --git a/Mesh/meshGFaceDelaunayInsertion.cpp b/Mesh/meshGFaceDelaunayInsertion.cpp
index d166913081869e9ab61ecbd61c9dd856f387e1bc..12b11684f80d7cd91e3b2f28fb21f11edeea5e0e 100644
--- a/Mesh/meshGFaceDelaunayInsertion.cpp
+++ b/Mesh/meshGFaceDelaunayInsertion.cpp
@@ -912,10 +912,105 @@ void bowyerWatsonFrontal(GFace *gf)
   transferDataStructure(gf, AllTris, Us, Vs); 
 } 
 
-void addBoundaryLayers(GFace *gf) {
-  // first compute the distance function u on the existing mesh
-  // then compute the dual function v that has gradients orthogonal everywhere
-  // build a set of points in the boundary layer
-  // connect everybody with delaunay 
+// give it a try : add one quad layer on the
+  /*
+void addOneLayerOnContour(GFace *gf, GVertex *gv){
+, int nbLayers, double hplus, double factor){
+  // for each vertex
+  std::map<MVertex*,std::vector<MVertex*> >layers;
+  std::vector<MQuadrangle*> newQuads;
+  std::vector<MTriangle*> newTris;
+
+  std::list<GEdgeLoop>::iterator it = gf->edgeLoops.begin();
+  for (; it != gf->edgeLoops.end(); ++it){
+    bool found = false;
+    std::list<GEdge*> ed;
+    for (GEdgeLoop::iter it2 = it->begin(); it2 != it->end(); ++it2){
+      if (it2->ge->getBeginVertex() == gv || it2->ge->getEndVertex() == gv) {
+	found = true;
+      }
+      ed.push_back(it2->ge);
+    }
+    // we found an edge loop with the GVertex that was specified
+    if (found){
+      // compute model vertices that will produce fans
+      for (GEdgeLoop::iter it2 = it->begin(); it2 != it->end(); ++it2){
+	GEdgeLoop::iter it3 = it2; ++it3;
+	GVertex *gv = it2->getEndVertex();
+	GEdgeSigned *before,*after = *it2;
+	if (it3 == it->end()){
+	  before = *(it->begin());
+	}
+	else{
+	  before = *it2;
+	}
+      }
+
+      for (std::list<GEdge*>::iterator it = ed.begin(); it != ed.end(); ++it){
+	GEdge *ge = *it;
+	for (int i=0;i<ge->lines.size();i++){
+	  SPoint2 p[2];
+	  reparamMeshEdgeOnFace ( ge->lines[i]->getVertex(0), ge->lines[i]->getVertex(1),gf,p[0],p[1]);
+	  MVertex *vd[2];
+	  for (int j=0;j<2;j++){
+	    MVertex *v = ge->lines[i]->getVertex(j);
+	    std::map<MVertex*,MVertex*>::iterator itv = duplicates.find(v);
+	    if (itv == duplicates.end()){
+	      vd[j] = new MFaceVertex(v->x(),v->y(),v->z(),gf,p[j].x(),p[j].y());
+	      duplicates[v] = vd[j];
+	      gf->mesh_vertices.push_back(vd[j]);
+	    }
+	    else
+	      vd[j] = itv->second;
+	  }
+	  newQuads.push_back(new MQuadrangle(ge->lines[i]->getVertex(0), ge->lines[i]->getVertex(1),vd[1],vd[0]));
+	}
+      }
+      for (int i=0;i<gf->quadrangles.size();i++){
+	MQuadrangle *q = gf->quadrangles[i];
+	MVertex *vs[4];
+	for (int j=0;j<4;j++){
+	  MVertex *v = q->getVertex(j);
+	  std::map<MVertex*,MVertex*>::iterator itv = duplicates.find(v);
+	  if (itv == duplicates.end()){
+	    vs[j] = v;
+	  }
+	  else{
+	    vs[j] = itv->second;
+	  }
+	}
+	newQuads.push_back(new MQuadrangle(vs[0],vs[1],vs[2],vs[3]));
+	delete q;
+      }
+      for (int i=0;i<gf->triangles.size();i++){
+	MTriangle *t = gf->triangles[i];
+	MVertex *vs[3];
+	for (int j=0;j<3;j++){
+	  MVertex *v = t->getVertex(j);
+	  std::map<MVertex*,MVertex*>::iterator itv = duplicates.find(v);
+	  if (itv == duplicates.end()){
+	    vs[j] = v;
+	  }
+	  else{
+	    vs[j] = itv->second;
+	  }
+	}
+	newTris.push_back(new MTriangle(vs[0],vs[1],vs[2]));
+	delete t;
+      }
 
+      gf->triangles = newTris;
+      gf->quadrangles = newQuads;
+    }
+  }
+}
+*/
+
+void addBoundaryLayers(GFace *gf)
+{
+  if (backgroundMesh::current()){
+  }
+  // first compute the cross field if it is not computed yet
+  // start from a selection of edges and create points in the boundary layer
+  // connect everybody with delaunay 
 }
diff --git a/Mesh/meshGFaceOptimize.cpp b/Mesh/meshGFaceOptimize.cpp
index 911f522b669c0bfea356af8fe8ed2a35d891df68..4b052b64714e77bdf0c73944e918d66b1b95924c 100644
--- a/Mesh/meshGFaceOptimize.cpp
+++ b/Mesh/meshGFaceOptimize.cpp
@@ -1920,100 +1920,6 @@ void recombineIntoQuads(GFace *gf,
   Msg::Info("Simple recombination algorithm completed (%g s)", t2 - t1);
 }
 
-// give it a try : add one quad layer on the
-  /*
-void addOneLayerOnContour(GFace *gf, GVertex *gv){
-, int nbLayers, double hplus, double factor){
-  // for each vertex
-  std::map<MVertex*,std::vector<MVertex*> >layers;
-  std::vector<MQuadrangle*> newQuads;
-  std::vector<MTriangle*> newTris;
-
-  std::list<GEdgeLoop>::iterator it = gf->edgeLoops.begin();
-  for (; it != gf->edgeLoops.end(); ++it){
-    bool found = false;
-    std::list<GEdge*> ed;
-    for (GEdgeLoop::iter it2 = it->begin(); it2 != it->end(); ++it2){
-      if (it2->ge->getBeginVertex() == gv || it2->ge->getEndVertex() == gv) {
-	found = true;
-      }
-      ed.push_back(it2->ge);
-    }
-    // we found an edge loop with the GVertex that was specified
-    if (found){
-      // compute model vertices that will produce fans
-      for (GEdgeLoop::iter it2 = it->begin(); it2 != it->end(); ++it2){
-	GEdgeLoop::iter it3 = it2; ++it3;
-	GVertex *gv = it2->getEndVertex();
-	GEdgeSigned *before,*after = *it2;
-	if (it3 == it->end()){
-	  before = *(it->begin());
-	}
-	else{
-	  before = *it2;
-	}
-      }
-
-      for (std::list<GEdge*>::iterator it = ed.begin(); it != ed.end(); ++it){
-	GEdge *ge = *it;
-	for (int i=0;i<ge->lines.size();i++){
-	  SPoint2 p[2];
-	  reparamMeshEdgeOnFace ( ge->lines[i]->getVertex(0), ge->lines[i]->getVertex(1),gf,p[0],p[1]);
-	  MVertex *vd[2];
-	  for (int j=0;j<2;j++){
-	    MVertex *v = ge->lines[i]->getVertex(j);
-	    std::map<MVertex*,MVertex*>::iterator itv = duplicates.find(v);
-	    if (itv == duplicates.end()){
-	      vd[j] = new MFaceVertex(v->x(),v->y(),v->z(),gf,p[j].x(),p[j].y());
-	      duplicates[v] = vd[j];
-	      gf->mesh_vertices.push_back(vd[j]);
-	    }
-	    else
-	      vd[j] = itv->second;
-	  }
-	  newQuads.push_back(new MQuadrangle(ge->lines[i]->getVertex(0), ge->lines[i]->getVertex(1),vd[1],vd[0]));
-	}
-      }
-      for (int i=0;i<gf->quadrangles.size();i++){
-	MQuadrangle *q = gf->quadrangles[i];
-	MVertex *vs[4];
-	for (int j=0;j<4;j++){
-	  MVertex *v = q->getVertex(j);
-	  std::map<MVertex*,MVertex*>::iterator itv = duplicates.find(v);
-	  if (itv == duplicates.end()){
-	    vs[j] = v;
-	  }
-	  else{
-	    vs[j] = itv->second;
-	  }
-	}
-	newQuads.push_back(new MQuadrangle(vs[0],vs[1],vs[2],vs[3]));
-	delete q;
-      }
-      for (int i=0;i<gf->triangles.size();i++){
-	MTriangle *t = gf->triangles[i];
-	MVertex *vs[3];
-	for (int j=0;j<3;j++){
-	  MVertex *v = t->getVertex(j);
-	  std::map<MVertex*,MVertex*>::iterator itv = duplicates.find(v);
-	  if (itv == duplicates.end()){
-	    vs[j] = v;
-	  }
-	  else{
-	    vs[j] = itv->second;
-	  }
-	}
-	newTris.push_back(new MTriangle(vs[0],vs[1],vs[2]));
-	delete t;
-      }
-
-      gf->triangles = newTris;
-      gf->quadrangles = newQuads;
-    }
-  }
-}
-*/
-
 void quadsToTriangles(GFace *gf, double minqual = -10000.)
 {
   std::vector<MQuadrangle*> qds;