diff --git a/Geo/GModel.cpp b/Geo/GModel.cpp
index 88b7ff256dcf99a416b515b8abbe67236475352b..5c522ef45c6c39d473bbc99799f9bc2851b94a2a 100644
--- a/Geo/GModel.cpp
+++ b/Geo/GModel.cpp
@@ -577,8 +577,9 @@ int GModel::adaptMesh(std::vector<int> technique, std::vector<simpleFunction<dou
       nbElemsOld = nbElems;
     }
   }
+  //adapt only upper most dimension
   else{
-
+    
     while(1) {
       Msg::Info("-- adaptMesh ITER =%d ", ITER);
       std::vector<MElement*> elements;
@@ -608,9 +609,6 @@ int GModel::adaptMesh(std::vector<int> technique, std::vector<simpleFunction<dou
         metric->addMetric(technique[imetric], f[imetric], parameters[imetric]);
       }
       fields->setBackgroundField(metric);
-      // int id = fields->newId();
-      // (*fields)[id] = new meshMetric(this, technique, f, parameters);
-      // fields->background_field = id;
 
       if (getDim() == 2){
         for (fiter fit = firstFace(); fit != lastFace(); ++fit){
@@ -632,7 +630,7 @@ int GModel::adaptMesh(std::vector<int> technique, std::vector<simpleFunction<dou
 
       nbElems = getNumMeshElements();
       if (++ITER >= niter) break;
-      if (fabs((double)(nbElems - nbElemsOld)) < 0.01 * nbElemsOld) break;
+      if (ITER > 3 && fabs((double)(nbElems - nbElemsOld)) < 0.01 * nbElemsOld) break;
 
       nbElemsOld = nbElems;
     }
diff --git a/Geo/MVertex.cpp b/Geo/MVertex.cpp
index 5a4f724a8156bb90f18e952d9ede0662d7ea162d..2730f10aeed0ce2f6486ee8d95f9c7c41c7916e0 100644
--- a/Geo/MVertex.cpp
+++ b/Geo/MVertex.cpp
@@ -374,8 +374,8 @@ bool reparamMeshVertexOnFace(MVertex *v, const GFace *gf, SPoint2 &param,
   }
 
   if(v->onWhat()->geomType() == GEntity::DiscreteCurve ||        
-     v->onWhat()->geomType() == GEntity::BoundaryLayerCurve){    
-    param = gf->parFromPoint(SPoint3(v->x(), v->y(), v->z()), onSurface);
+     v->onWhat()->geomType() == GEntity::BoundaryLayerCurve){  
+     param = gf->parFromPoint(SPoint3(v->x(), v->y(), v->z()), onSurface);
     return true;
   }
 
@@ -396,6 +396,11 @@ bool reparamMeshVertexOnFace(MVertex *v, const GFace *gf, SPoint2 &param,
     double t;
     v->getParameter(0, t);
     param = ge->reparamOnFace(gf, t, 1);
+    if(!v->getParameter(0,t)) {
+      Msg::Error("vertex v %p not MedgeVertex", v);
+      Msg::Exit(1);
+      //param = gf->parFromPoint(SPoint3(v->x(), v->y(), v->z()), onSurface);  
+    }
 
     // shout, we are on a seam
     if(ge->isSeam(gf))
@@ -404,8 +409,7 @@ bool reparamMeshVertexOnFace(MVertex *v, const GFace *gf, SPoint2 &param,
   else{
     double uu, vv;
     if(v->onWhat() == gf && v->getParameter(0, uu) && v->getParameter(1, vv)){
-      //printf("%d face %d pos %g %g\n",v->getNum(),gf->tag(),uu,vv);
-      param = SPoint2(uu, vv);
+       param = SPoint2(uu, vv);
     }
     else {
       // brute force!
diff --git a/Mesh/meshGFaceBamg.cpp b/Mesh/meshGFaceBamg.cpp
index dd19a7459e5faeabb8dd710abb046d5cecf61476..5c0498505e0bbf668a50c4b3d65663814cfad009 100644
--- a/Mesh/meshGFaceBamg.cpp
+++ b/Mesh/meshGFaceBamg.cpp
@@ -72,11 +72,12 @@ static void computeMeshMetricsForBamg(GFace *gf, int numV,
 
 void meshGFaceBamg(GFace *gf){
 
-  //Replace edges by their compounds
    std::list<GEdge*> edges = gf->edges();
+   bool hasCompounds  = false;
+
+  //Replace edges by their compounds
    std::set<GEdge*> mySet;
    std::list<GEdge*>::iterator it = edges.begin();
-   bool hasCompounds  = false;
    while(it != edges.end()){
     if((*it)->getCompound()){
       hasCompounds = true;
@@ -120,6 +121,7 @@ void meshGFaceBamg(GFace *gf){
     (*it)->setIndex(index++);
    }
   }
+  //exit(1);
   int  nbFixedVertices = index;
   for(std::set<MVertex*>::iterator it = all.begin(); it!=all.end(); ++it){
     //FIXME : SEAMS should have to be taken into account here !!!
@@ -226,7 +228,7 @@ void meshGFaceBamg(GFace *gf){
     args[16] = CTX::instance()->mesh.anisoMax;
     args[ 7] = CTX::instance()->mesh.smoothRatio;
     //args[ 21] = 90.0;//cutoffrad = 90 degree
-    computeMeshMetricsForBamg (gf, nbVert, bamgMesh->vertices , mm11,mm12,mm22); 
+    computeMeshMetricsForBamg (gf, nbVert, bamgMesh->vertices, mm11,mm12,mm22); 
     
     try{
       refinedBamgMesh = Bamg(bamgMesh, args, mm11, mm12, mm22, false);
diff --git a/Mesh/meshMetric.cpp b/Mesh/meshMetric.cpp
index 242d3a52e7a94c7e63b0b3af4778b4e2dd2c3124..8ba87063ad9318234fa6bc0e152785ca955b3d40 100644
--- a/Mesh/meshMetric.cpp
+++ b/Mesh/meshMetric.cpp
@@ -371,8 +371,8 @@ void meshMetric::computeMetric(){
   //printf("%d elements are considered in the meshMetric \n",(int)_elements.size());
 
   computeValues();
-  //computeHessian_FE();
-  computeHessian_LS(); 
+  computeHessian_FE();
+  //computeHessian_LS(); 
   
   int metricNumber = setOfMetrics.size();