diff --git a/Mesh/meshGFace.cpp b/Mesh/meshGFace.cpp
index e5d2d9329cff7b87005f2e5a0aeebd37ff8a94ac..3546ef6515ec281167a1f05a47a284b004e70640 100644
--- a/Mesh/meshGFace.cpp
+++ b/Mesh/meshGFace.cpp
@@ -1423,224 +1423,6 @@ static bool buildConsecutiveListOfVertices(GFace *gf, GEdgeLoop &gel,
   return true;
 }
 
-
-static void printParamGrid(GFace *gf, std::vector<MVertex*> vert1, std::vector<MVertex*> vert2,
-			   std::vector<MVertex*> e01, std::vector<MVertex*> e10,
-			   std::vector<MVertex*> e23, std::vector<MVertex*> e32,
-			   std::vector<MVertex*> e02, std::vector<MVertex*> e13,
-			   std::vector<MQuadrangle*> quads)
-{
-
-  std::vector<SPoint2> p1,p2;
-  for (unsigned int i = 0; i< vert1.size(); i++){
-    SPoint2 pi;
-    reparamMeshVertexOnFace(vert1[i], gf, pi);
-    p1.push_back(pi);
-  }
-  for (unsigned int j = 0; j< vert2.size(); j++){
-    SPoint2 pj;
-    reparamMeshVertexOnFace(vert2[j], gf, pj);
-    p2.push_back(pj);
-  }
-
-
-  char name[234];
-  sprintf(name,"paramGrid_%d.pos", gf->tag());
-  FILE *f = fopen(name,"w");
-  fprintf(f,"View \"%s\" {\n",name);
-
-  for (unsigned int i = 0; i < p1.size(); i++)
-    fprintf(f,"SP(%g,%g,%g) {%d};\n", p1[i].x(), p1[i].y(), 0.0, i);
-
-  for (unsigned int j = 0; j < p2.size(); j++)
-    fprintf(f,"SP(%g,%g,%g) {%d};\n", p2[j].x(), p2[j].y(), 0.0, 100+j);
-
-  fprintf(f,"};\n");
-  fclose(f);
-
-  char name2[234];
-  sprintf(name2,"paramEdges_%d.pos", gf->tag());
-  FILE *f2 = fopen(name2,"w");
-  fprintf(f2,"View \"%s\" {\n",name2);
-
-  for (unsigned int i = 0; i < e01.size(); i++){
-     SPoint2 pi; reparamMeshVertexOnFace(e01[i], gf, pi);
-    fprintf(f2,"SP(%g,%g,%g) {%d};\n", pi.x(), pi.y(), 0.0, 1);
-  }
-
-  for (unsigned int i = 0; i < e10.size(); i++){
-    SPoint2 pi; reparamMeshVertexOnFace(e10[i], gf, pi);
-    fprintf(f2,"SP(%g,%g,%g) {%d};\n", pi.x(), pi.y(), 0.0, 10);
-  }
-
-  for (unsigned int i = 0; i < e23.size(); i++){
-    SPoint2 pi; reparamMeshVertexOnFace(e23[i], gf, pi);
-    fprintf(f2,"SP(%g,%g,%g) {%d};\n", pi.x(), pi.y(), 0.0, 23);
-  }
-
-  for (unsigned int i = 0; i < e32.size(); i++){
-    SPoint2 pi; reparamMeshVertexOnFace(e32[i], gf, pi);
-    fprintf(f2,"SP(%g,%g,%g) {%d};\n", pi.x(), pi.y(), 0.0, 32);
-  }
-
-  for (unsigned int i = 0; i < e02.size(); i++){
-    SPoint2 pi; reparamMeshVertexOnFace(e02[i], gf, pi);
-    fprintf(f2,"SP(%g,%g,%g) {%d};\n", pi.x(), pi.y(), 0.0, 2);
-  }
-
-  for (unsigned int i = 0; i < e13.size(); i++){
-    SPoint2 pi; reparamMeshVertexOnFace(e13[i], gf, pi);
-    fprintf(f2,"SP(%g,%g,%g) {%d};\n", pi.x(), pi.y(), 0.0, 13);
-  }
-  fprintf(f2,"};\n");
-  fclose(f2);
-
-
-  char name3[234];
-  sprintf(name3,"quad_%d.pos", gf->tag());
-  FILE *f3 = fopen(name3,"w");
-  fprintf(f3,"View \"%s\" {\n",name3);
-  for (unsigned int i = 0; i < quads.size(); i++){
-    quads[i]->writePOS(f3,true,false,false,false,false,false);
-  }
-  fprintf(f3,"};\n");
-  fclose(f3);
-
-
-  return;
-
-}
-static void createRegularTwoCircleGrid (Centerline *center, GFace *gf)
-{
-#if defined(HAVE_ANN)
-  std::list<GEdge*> bedges = gf->edges();
-  std::list<GEdge*>::iterator itb = bedges.begin();
-  std::list<GEdge*>::iterator ite = bedges.end(); ite--;
-  GEdge *ge1 =  (*itb)->getCompound();
-  GEdge *ge2 =  (*ite)->getCompound();
-  int N = ge1->mesh_vertices.size() + 1;
-  int N2 = ge2->mesh_vertices.size() + 1;
-  if (N != N2 || N%2 != 0){
-    Msg::Error("You should have a pair number of points specified in centerline field \n");
-  }
-
-  //vert1 is the outer circle
-  //vert2 is the inner circle
-  //         - - - -
-  //       -         -
-  //     -      -      -
-  //   v0-  v2-   -v3   -v1
-  //     -      -      -
-  //      -          -
-  //         - - - -
-
-  std::vector<MVertex*> vert1, vert2, vert_temp;
-  vert1.push_back(ge1->getBeginVertex()->mesh_vertices[0]);
-  vert2.push_back(ge2->getBeginVertex()->mesh_vertices[0]);
-  for(int i = 0; i < N-1; i++) {
-    vert1.push_back(ge1->mesh_vertices[i]);
-    vert2.push_back(ge2->mesh_vertices[i]);
-  }
-  SPoint2 pv1; reparamMeshVertexOnFace(vert1[0], gf, pv1);
-  SPoint2 pv2; reparamMeshVertexOnFace(vert2[0], gf, pv2);
-  SPoint2 pv1b; reparamMeshVertexOnFace(vert1[1], gf, pv1b);
-  SPoint2 pv2b; reparamMeshVertexOnFace(vert2[1], gf, pv2b);
-  SPoint2 pv1c; reparamMeshVertexOnFace(vert1[2], gf, pv1c);
-  SPoint2 pv2c; reparamMeshVertexOnFace(vert2[2], gf, pv2c);
-  SVector3 vec1(pv1b.x()-pv1.x(),pv1b.y()-pv1.y() , 0.0);
-  SVector3 vec1b(pv1c.x()-pv1b.x(),pv1c.y()-pv1b.y() ,0.0);
-  SVector3 vec2(pv2b.x()-pv2.x(),pv2b.y()-pv2.y() ,0.0);
-  SVector3 vec2b(pv2c.x()-pv2b.x(),pv2c.y()-pv2b.y() , 0.0);
-  int sign2 =  (dot(crossprod(vec1,vec1b),crossprod(vec2,vec2b)) < 0)  ?   -1 : +1 ;
-  double n1 = sqrt(pv1.x()*pv1.x()+pv1.y()*pv1.y());
-  double n2 = sqrt(pv2.x()*pv2.x()+pv2.y()*pv2.y());
-  if (n2 > n1) {
-    vert_temp = vert1;
-    vert1.clear();
-    vert1 = vert2;
-    vert2.clear();
-    vert2 = vert_temp;
-  }
-
-  ANNpointArray nodes = annAllocPts(N, 3);
-  ANNidxArray index  = new ANNidx[1];
-  ANNdistArray dist = new ANNdist[1];
-  for (int ind = 0; ind < N; ind++){
-    SPoint2 pp2; reparamMeshVertexOnFace(vert2[ind], gf, pp2);
-    nodes[ind][0] =  pp2.x();
-    nodes[ind][1] =  pp2.y();
-    nodes[ind][2] =  0.0;
-  }
-  ANNkd_tree *kdtree = new ANNkd_tree(nodes, N, 3);
-  SPoint2 pp1; reparamMeshVertexOnFace(vert1[0], gf, pp1);
-  double xyz[3] = {pp1.x(), pp1.y(),0.0};
-  kdtree->annkSearch(xyz, 1, index, dist);
-  int close_ind = index[0];
-  double length = sqrt((vert1[0]->x()-vert2[close_ind]->x())*(vert1[0]->x()-vert2[close_ind]->x())+
-		       (vert1[0]->y()-vert2[close_ind]->y())*(vert1[0]->y()-vert2[close_ind]->y())+
-		       (vert1[0]->z()-vert2[close_ind]->z())*(vert1[0]->z()-vert2[close_ind]->z()));
-
-  double rad = center->operator()(vert1[0]->x(), vert1[0]->y(), vert1[0]->z());
-  double lc =  2*M_PI*rad/N;
-  int M = length/lc;
-  printf("length =%g  arc=%g  \n", length,  2*M_PI*rad);
-
-  delete kdtree;
-  delete[]index;
-  delete[]dist;
-  annDeallocPts(nodes);
-
-  MVertex *v0 = vert1[0]; SPoint2 p0; reparamMeshVertexOnFace(v0, gf, p0);
-  MVertex *v1 = vert1[N/2]; SPoint2 p1; reparamMeshVertexOnFace(v1, gf, p1);
-  MVertex *v2 = vert2[close_ind]; SPoint2 p2; reparamMeshVertexOnFace(v2, gf, p2);
-  MVertex *v3 = vert2[(close_ind+N/2)%N]; SPoint2 p3; reparamMeshVertexOnFace(v3, gf, p3);
-
-  printf("grid N = %d M = %d\n", N , M);
-  printf("v2 =%d v3=%d \n", close_ind, (close_ind+N/2)%N);
-  std::vector<MVertex*> e01,e10,e23,e32;//edges without first and last vertex
-  for (int i=1;i<N/2-1;i++) e01.push_back(vert1[i]);
-  for (int i=N/2+1;i<N-1;i++) e10.push_back(vert1[i]);
-  for (int i=1;i<N/2-1;i++) e23.push_back(vert2[(close_ind+i)%N]);
-  for (int i=N/2+1;i<N-1;i++) e32.push_back(vert2[(close_ind+i)%N]);
-
-  std::vector<MVertex*> e02 = saturateEdge (gf,p0,p2,M);
-  std::vector<MVertex*> e13 = saturateEdge (gf,p1,p3,M);
-
-  std::vector<MQuadrangle*> q;
-  std::vector<MVertex*> e_inner1 = e23;
-  std::vector<MVertex*> e_inner2 = e32;
-  if (sign2 <0){
-    e_inner1 = e32;
-    e_inner2 = e23;
-  }
-
-  createRegularMesh (gf,
-  		     v0, p0,
-  		     e01, +1,
-  		     v1,p1,
-  		     e13, +1,
-  		     v3,p3,
-		     e_inner1, -sign2,
-  		     v2,p2,
-  		     e02, -1,
-  		     q);
-
-  createRegularMesh (gf,
-  		     v0,p0,
-  		     e02, +1,
-  		     v2,p2,
-  		     e_inner2, -sign2,
-  		     v3,p3,
-  		     e13, -1,
-  		     v1,p1,
-  		     e10, +1,
-  		     q);
-
-  printParamGrid(gf, vert1, vert2, e01,e10,e23,e32,e02,e13, q);
-#endif;
-}
-
->>>>>>> .r12521
 static bool meshGeneratorElliptic(GFace *gf, bool debug = true)
 {
 #if defined(HAVE_ANN)
diff --git a/Mesh/meshGFaceElliptic.cpp b/Mesh/meshGFaceElliptic.cpp
index 9ac94b28829d8b900cd814dbfcdf315b963feb91..a26a58f797aa1d7e25a3bc12338a937a5716e00d 100644
--- a/Mesh/meshGFaceElliptic.cpp
+++ b/Mesh/meshGFaceElliptic.cpp
@@ -496,8 +496,8 @@ bool createRegularTwoCircleGrid (Centerline *center, GFace *gf)
     pe_inner2 = pe23;
   }
 
-  std::vector<MQuadrangle*> quads, smoothQuad;
-  std::vector<MVertex*> newv, smoothv;
+  std::vector<MQuadrangle*> quads, quadS1, quadS2;
+  std::vector<MVertex*> newv, newv1, newv2;
   fullMatrix<SPoint2> uv1, uv2;
   createRegularGrid (gf,
   		     v0, p0,
@@ -510,8 +510,9 @@ bool createRegularTwoCircleGrid (Centerline *center, GFace *gf)
   		     e02, pe02, -1,
   		     quads, newv, uv1);
 
-  printQuads(gf, uv1, quads, 0);
-  ellipticSmoother(uv1, gf, smoothQuad, smoothv);
+  //updateFaceQuads(gf, quads, newv);
+  //printQuads(gf, uv1, quads, 0);
+  ellipticSmoother(uv1, gf, quadS1, newv1);
   
   createRegularGrid (gf,
   		     v0,p0,
@@ -523,11 +524,14 @@ bool createRegularTwoCircleGrid (Centerline *center, GFace *gf)
   		     v1,p1,
   		     e10, pe10, +1,
   		     quads, newv, uv2);
+  
+  ellipticSmoother(uv2, gf, quadS2, newv2);
 
-  //updateFaceQuads(gf, quads, newv);
-  //ellipticSmoother
-
+  quads.clear();
+  for (int i= 0; i< quadS1.size(); i++) quads.push_back(quadS1[i]);
+  for (int i= 0; i< quadS2.size(); i++) quads.push_back(quadS2[i]);
   printParamGrid(gf, vert1, vert2, e01,e10,e23,e32,e02,e13, quads);
+
   return true;
 
 }