diff --git a/Geo/GFace.h b/Geo/GFace.h
index f1ca7c23220da3a6ceb2d1266d82b1f7a514947e..111a53adf09d32b9d5a1754dadd6ba0e4df55fcc 100644
--- a/Geo/GFace.h
+++ b/Geo/GFace.h
@@ -89,6 +89,8 @@ public:
   // add embedded vertices/edges
   void addEmbeddedVertex(GVertex *v) { embedded_vertices.insert(v); }
   void addEmbeddedEdge(GEdge *e) { embedded_edges.push_back(e); }
+  // FIXME DEBUG
+  void clearEmbeddedEdges() { embedded_edges.clear(); }
 
   // delete the edge from the face (the edge is supposed to be a free
   // edge in the face, not part of any edge loops--use with caution!)
@@ -327,7 +329,6 @@ public:
   std::vector<SPoint2> stl_vertices_uv;
   std::vector<SPoint3> stl_vertices_xyz;
   std::vector<SVector3> stl_normals;
-  std::vector<SVector3> stl_curvatures;
   std::vector<int> stl_triangles;
 
   // a vertex array containing a geometrical representation of the
@@ -362,8 +363,7 @@ public:
   std::vector<SVector3> storage3; // sizes and directions storage
   std::vector<double> storage4; // sizes and directions storage
 
-  virtual bool reorder(const int elementType,
-                       const std::vector<std::size_t> &ordering);
+  virtual bool reorder(const int elementType, const std::vector<std::size_t> &ordering);
 };
 
 #endif
diff --git a/Geo/GModelParametrize.cpp b/Geo/GModelParametrize.cpp
deleted file mode 100644
index bbd18693916c155c76da270586591391f18b8123..0000000000000000000000000000000000000000
--- a/Geo/GModelParametrize.cpp
+++ /dev/null
@@ -1,393 +0,0 @@
-// Gmsh - Copyright (C) 1997-2019 C. Geuzaine, J.-F. Remacle
-//
-// See the LICENSE.txt file for license information. Please report all
-// issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
-
-#include <vector>
-#include <set>
-#include <map>
-#include <stack>
-#include "GmshConfig.h"
-#include "GModel.h"
-#include "GFace.h"
-#include "discreteFace.h"
-#include "discreteEdge.h"
-#include "MTriangle.h"
-#include "MEdge.h"
-#include "GEdge.h"
-#include "MLine.h"
-#include "Context.h"
-#include "GmshMessage.h"
-#include "GModelParametrize.h"
-
-#if defined(HAVE_MESH)
-#include "meshPartition.h"
-#endif
-
-#if defined(HAVE_HXT)
-extern "C" {
-#include "hxt_mesh.h"
-#include "hxt_edge.h"
-#include "hxt_mean_values.h"
-}
-
-static HXTStatus gmsh2hxt(GFace *gf, HXTMesh **pm,
-                          std::map<MVertex *, int> &v2c,
-                          std::vector<MVertex *> &c2v)
-{
-  HXTContext *context;
-  hxtContextCreate(&context);
-  HXTMesh *m;
-  HXT_CHECK(hxtMeshCreate(context, &m));
-  std::set<MVertex *> all;
-  for(size_t i = 0; i < gf->triangles.size(); i++) {
-    all.insert(gf->triangles[i]->getVertex(0));
-    all.insert(gf->triangles[i]->getVertex(1));
-    all.insert(gf->triangles[i]->getVertex(2));
-  }
-  m->vertices.num = m->vertices.size = all.size();
-  HXT_CHECK(
-    hxtAlignedMalloc(&m->vertices.coord, 4 * m->vertices.num * sizeof(double)));
-
-  size_t count = 0;
-  c2v.resize(all.size());
-  for(std::set<MVertex *>::iterator it = all.begin(); it != all.end(); it++) {
-    m->vertices.coord[4 * count + 0] = (*it)->x();
-    m->vertices.coord[4 * count + 1] = (*it)->y();
-    m->vertices.coord[4 * count + 2] = (*it)->z();
-    m->vertices.coord[4 * count + 3] = 0.0;
-    v2c[*it] = count;
-    c2v[count++] = *it;
-  }
-  all.clear();
-
-  m->triangles.num = m->triangles.size = gf->triangles.size();
-  HXT_CHECK(hxtAlignedMalloc(&m->triangles.node,
-                             (m->triangles.num) * 3 * sizeof(uint32_t)));
-  HXT_CHECK(hxtAlignedMalloc(&m->triangles.colors,
-                             (m->triangles.num) * sizeof(uint16_t)));
-  for(size_t i = 0; i < gf->triangles.size(); i++) {
-    m->triangles.node[3 * i + 0] = v2c[gf->triangles[i]->getVertex(0)];
-    m->triangles.node[3 * i + 1] = v2c[gf->triangles[i]->getVertex(1)];
-    m->triangles.node[3 * i + 2] = v2c[gf->triangles[i]->getVertex(2)];
-    m->triangles.colors[i] = gf->tag();
-  }
-
-  m->lines.num = m->lines.size = 0;
-
-  *pm = m;
-  return HXT_STATUS_OK;
-}
-
-HXTStatus computeDiscreteCurvatures(GModel *gm, std::map<MVertex* , std::pair<SVector3, SVector3> > &C ){
-  C.clear();
-  
-  for(GModel::fiter it = gm->firstFace(); it != gm->lastFace(); ++it) {
-    HXTMesh *m;
-    HXTEdges *edges;
-    double *nodalCurvatures;
-    double *crossField;
-    std::map<MVertex *, int> v2c;
-    std::vector<MVertex *> c2v;
-    gmsh2hxt(*it, &m, v2c, c2v);
-    HXT_CHECK(hxtEdgesCreate(m, &edges));
-    HXT_CHECK(hxtCurvatureRusinkiewicz(m, &nodalCurvatures, &crossField, edges, false));
-    for (size_t i=0;i<m->vertices.num;i++){
-      MVertex *v = c2v[i];
-      double *c = &nodalCurvatures[6*i];
-      SVector3 cMax (c[0],c[1],c[2]);
-      SVector3 cMin (c[3],c[4],c[5]);
-      std::pair<SVector3, SVector3> out = std::make_pair(cMax,cMin);
-      C.insert(std::make_pair(v,out));
-    }    
-    HXT_CHECK(hxtEdgesDelete(&edges));
-    HXT_CHECK(hxtFree(&nodalCurvatures));
-    HXT_CHECK(hxtFree(&crossField));
-    HXT_CHECK(hxtMeshDelete(&m));    
-  }
-  return HXT_STATUS_OK;  
-}
-
-
-void parametrizeAllGEdge(GModel *gm)
-{
-  for(GModel::eiter it = gm->firstEdge(); it != gm->lastEdge(); ++it) {
-    discreteEdge *de = dynamic_cast<discreteEdge *>(*it);
-    if (de) de->createGeometry();
-  }
-}
-
-int parametrizeAllGFace(GModel *gm,  std::map<MVertex* , std::pair<SVector3, SVector3> > *C)
-{
-  int result = 0;
-  for(GModel::fiter it = gm->firstFace(); it != gm->lastFace(); ++it) {
-    discreteFace *df = dynamic_cast<discreteFace *>(*it);
-    if(df) result += parametrizeGFace(df,C);
-  }
-  return result;
-}
-
-int parametrizeGFace(discreteFace *gf,  std::map<MVertex* , std::pair<SVector3, SVector3> > *C)
-{
-  int n = 1;
-  if(gf->triangles.empty()) return 0;
-  HXT_CHECK(hxtInitializeLinearSystems(&n, NULL));
-  HXTMesh *m;
-  HXTMeanValues *param;
-  HXTEdges *edges;
-  std::map<MVertex *, int> v2c;
-  std::vector<MVertex *> c2v;
-  gmsh2hxt(gf, &m, v2c, c2v);
-  //  double *nodalCurvatures;
-  //  double *crossField;
-  //  printf("A %d triangles\n",m->triangles.num);
-  HXT_CHECK(hxtEdgesCreate(m, &edges));
-  HXT_CHECK(hxtMeanValuesCreate(edges, &param));
-  HXT_CHECK(hxtMeanValuesCompute(param));
-  double *uvc = NULL;
-  int nv, ne;
-  HXT_CHECK(hxtMeanValuesGetData(param, NULL, NULL, &uvc, &nv, &ne,1));
-  gf->stl_vertices_uv.clear();
-  gf->stl_vertices_uv.resize(nv);
-  gf->stl_vertices_xyz.clear();
-  gf->stl_vertices_xyz.resize(nv);
-  gf->stl_curvatures.clear();
-  if (C) gf->stl_curvatures.resize(2*nv);
-  gf->stl_normals.clear();
-  gf->stl_normals.resize(nv);
-
-  for(int iv = 0; iv < nv; iv++) {
-    if (C){
-      MVertex *v = c2v[iv];
-      std::map<MVertex* , std::pair<SVector3, SVector3> >::iterator it = C->find(v);
-      if (it == C->end())Msg::Error("POINT %d NOT FOUND FOR COMPUTING CURVATURES",v->getNum());
-      //      printf("%g %g %g\n",it->second.first.x(),it->second.first.y(),it->second.first.z());
-      gf->stl_curvatures[2*iv] = it->second.first;
-      gf->stl_curvatures[2*iv+1] = it->second.second;
-    }
-    gf->stl_vertices_uv[iv]  = SPoint2(uvc[2*iv],uvc[2*iv+1]);
-
-    gf->stl_vertices_xyz[iv] =
-      SPoint3(m->vertices.coord[4 * iv + 0], m->vertices.coord[4 * iv + 1],
-              m->vertices.coord[4 * iv + 2]);
-    gf->stl_normals[iv] = SVector3(1, 0, 0);
-  }
-  gf->stl_triangles.clear();
-  gf->stl_triangles.resize(3 * ne);
-  for(int ie = 0; ie < ne; ie++) {
-    gf->stl_triangles[3 * ie + 0] = m->triangles.node[3 * ie + 0];
-    gf->stl_triangles[3 * ie + 1] = m->triangles.node[3 * ie + 1];
-    gf->stl_triangles[3 * ie + 2] = m->triangles.node[3 * ie + 2];
-  }
-  //  printf("A\n");
-  gf->fillVertexArray(false);
-  HXT_CHECK(hxtMeshDelete(&m));
-  HXT_CHECK(hxtEdgesDelete(&edges));
-  HXT_CHECK(hxtFree(&uvc));
-  //  printf("B\n");
-  return 0;
-}
-#else
-int parametrizeGFace(GFace *gf,  std::map<std::pair<MVertex*,GFace*> , std::pair<SVector3, SVector3> > *C)
-{
-  Msg::Error("Gmsh should be compiled against HXT for being able to compute "
-             "discrete parametrizations");
-  return -1;
-}
-#endif
-
-int isTriangulationParametrizable(const std::vector<MTriangle *> &t, int Nmax,
-                                  double ar)
-{
-  int XX = (int)t.size();
-  if(XX > Nmax) return XX / Nmax + 1;
-  std::set<MVertex *> v;
-  std::map<MEdge, int, Less_Edge> e;
-  double surf = 0;
-  for(size_t i = 0; i < t.size(); ++i) {
-    surf += t[i]->getVolume();
-    for(int j = 0; j < 3; j++) {
-      v.insert(t[i]->getVertex(j));
-      std::map<MEdge, int, Less_Edge>::iterator it = e.find(t[i]->getEdge(j));
-      if(it == e.end())
-        e[t[i]->getEdge(j)] = 1;
-      else
-        it->second++;
-    }
-  }
-  std::map<MEdge, int, Less_Edge>::iterator it = e.begin();
-  std::vector<MEdge> _bnd;
-  for(; it != e.end(); ++it){
-    if(it->second == 1) _bnd.push_back(it->first);
-  }
-
-  std::vector<std::vector<MVertex *> > vs;
-  if(!SortEdgeConsecutive(_bnd, vs)) {
-    // we have vertices adjacent to more than 2 model edges
-    //    FILE *f = fopen("bug.pos","w");
-    //    fprintf(f,"View\"\"{\n");
-    //    for (size_t i=0;i<t.size();i++){      
-    //      fprintf(f,"ST(%g,%g,%g,%g,%g,%g,%g,%g,%g){%d,%d,%d};\n",
-    //	      t[i]->getVertex(0)->x(),t[i]->getVertex(0)->y(),t[i]->getVertex(0)->z(),
-    //	      t[i]->getVertex(1)->x(),t[i]->getVertex(1)->y(),t[i]->getVertex(1)->z(),
-    //	      t[i]->getVertex(2)->x(),t[i]->getVertex(2)->y(),t[i]->getVertex(2)->z(),
-    //	      t[i]->getVertex(0)->getNum(),t[i]->getVertex(1)->getNum(),t[i]->getVertex(2)->getNum());
-    //    }
-    //    fprintf(f,"};\n");
-    //    fclose(f);
-    //    getchar();
-    return 2;
-  }
-  double lmax = 0;
-  for(size_t i = 0; i < vs.size(); i++) {
-    double li = 0;
-    for(size_t j = 1; j < vs[i].size(); j++) {
-      li += distance(vs[i][j], vs[i][j - 1]);
-    }
-    lmax = std::max(li, lmax);
-  }
-
-  if(ar * lmax * lmax < 2 * M_PI * surf) { return 4; }
-
-  int poincare =
-    t.size() - (2 * (v.size() - 1) - _bnd.size() + 2 * (vs.size() - 1));
-  return poincare <= 0 ? 1 : 2;
-}
-
-void makeMLinesUnique(std::vector<MLine *> &v)
-{
-  std::sort(v.begin(), v.end(), compareMLinePtr());
-  v.erase(std::unique(v.begin(), v.end(), equalMLinePtr()), v.end());
-}
-
-void computeEdgeCut(GModel *gm, std::vector<MLine *> &cut,
-                    int max_elems_per_cut)
-{
-  GModel m;
-
-  // ----------------------------------------------------------------------------------
-  // STUPID FIX !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-  for(GModel::fiter it = gm->firstFace(); it != gm->lastFace(); ++it) {
-    std::vector<MTriangle*> aa;
-    for(size_t i = 0; i < (*it)->triangles.size(); i++){
-      if ((*it)->triangles[i]->getVertex(0) == (*it)->triangles[i]->getVertex(1) ||
-	  (*it)->triangles[i]->getVertex(0) == (*it)->triangles[i]->getVertex(2) ||
-	  (*it)->triangles[i]->getVertex(1) == (*it)->triangles[i]->getVertex(2)){
-	//	printf("TRIANGLE BAD %d %d %d\n",(*it)->triangles[i]->getVertex(0)->getNum()
-	//	       ,(*it)->triangles[i]->getVertex(1)->getNum()
-	//	       ,(*it)->triangles[i]->getVertex(2)->getNum());
-      }
-      else aa.push_back((*it)->triangles[i]);      
-    }
-    (*it)->triangles = aa;
-  }
-  // END STUPID FIX !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-  // ----------------------------------------------------------------------------------
-  
-  for(GModel::fiter it = gm->firstFace(); it != gm->lastFace(); ++it) {
-    int part = 0;
-    if((*it)->triangles.empty()) continue;
-    std::vector<MVertex *> verts = (*it)->mesh_vertices;
-    std::map<MTriangle *, int> global;
-    std::map<MEdge, int, Less_Edge> cuts;
-    std::stack<std::vector<MTriangle *> > partitions;
-    partitions.push((*it)->triangles);
-    (*it)->triangles.clear();
-
-    while(!partitions.empty()) {
-      (*it)->triangles = partitions.top();
-      (*it)->mesh_vertices.clear();
-      std::set<MVertex *> vs;
-      for(size_t i = 0; i < (*it)->triangles.size(); ++i) {
-        for(size_t j = 0; j < 3; ++j)
-          vs.insert((*it)->triangles[i]->getVertex(j));
-      }
-      (*it)->mesh_vertices.insert((*it)->mesh_vertices.begin(), vs.begin(),
-                                  vs.end());
-      partitions.pop();
-      int np =
-        isTriangulationParametrizable((*it)->triangles, max_elems_per_cut, 5.0);
-      if(np == 1) {
-        for(size_t i = 0; i < (*it)->triangles.size(); i++)
-          global[(*it)->triangles[i]] = part;
-        part++;
-      }
-      else {
-#if defined(HAVE_MESH)
-        int *p = new int[(*it)->triangles.size()];
-        if(!PartitionFace(*it, np, p)) {
-          std::vector<MTriangle *> t[1000];
-          for(size_t i = 0; i < (*it)->triangles.size(); i++)
-            t[(*it)->triangles[i]->getPartition()].push_back(
-              (*it)->triangles[i]);
-          for(int i = 0; i < np; i++) { partitions.push(t[i]); }
-        }
-        delete[] p;
-#else
-        Msg::Error("Partitioning surface requires Mesh module");
-#endif
-      }
-    }
-    (*it)->triangles.clear();
-    std::map<MTriangle *, int>::iterator it2 = global.begin();
-    for(; it2 != global.end(); ++it2) {
-      MTriangle *t = it2->first;
-      (*it)->triangles.push_back(t);
-      for(int i = 0; i < 3; i++) {
-        MEdge ed = t->getEdge(i);
-        std::map<MEdge, int, Less_Edge>::iterator it3 = cuts.find(ed);
-        if(it3 == cuts.end())
-          cuts[ed] = it2->second;
-        else {
-          if(it3->second != it2->second)
-            cut.push_back(new MLine(ed.getVertex(0), ed.getVertex(1)));
-        }
-      }
-    }
-    (*it)->mesh_vertices = verts;
-  }
-  makeMLinesUnique(cut);
-}
-
-void computeNonManifoldEdges(GModel *gm, std::vector<MLine *> &cut,
-                             bool addBoundary)
-{
-  std::map<MEdge, int, Less_Edge> m;
-  for(GModel::fiter it = gm->firstFace(); it != gm->lastFace(); ++it) {
-    for(size_t i = 0; i < (*it)->triangles.size(); i++) {
-      for(int j = 0; j < 3; j++) {
-        std::map<MEdge, int, Less_Edge>::iterator it2 =
-          m.find((*it)->triangles[i]->getEdge(j));
-        if(it2 == m.end())
-          m[(*it)->triangles[i]->getEdge(j)] = 1;
-        else
-          it2->second++;
-      }
-    }
-  }
-  {
-    int countNM = 0, countBND = 0;
-    std::map<MEdge, int, Less_Edge>::iterator it = m.begin();
-    for(; it != m.end(); ++it) {
-      if(it->second > 2) {
-        cut.push_back(
-          new MLine(it->first.getVertex(0), it->first.getVertex(1)));
-        countNM++;
-      }
-      if(addBoundary && it->second == 1) {
-        cut.push_back(
-          new MLine(it->first.getVertex(0), it->first.getVertex(1)));
-        countBND++;
-      }
-    }
-    if(countNM + countBND > 0)
-      Msg::Info(
-        "Model has %d non manifold mesh edges and %d boundary mesh edges",
-        countNM, countBND);
-  }
-  makeMLinesUnique(cut);
-}
-
-// todo...
-void detectPlanarFaces (GModel *gm, std::vector<MLine *> &cut){
-}
diff --git a/Geo/GModelParametrize.h b/Geo/GModelParametrize.h
deleted file mode 100644
index 22b93922d80fb8043222ff7b60f7046cf226a7c2..0000000000000000000000000000000000000000
--- a/Geo/GModelParametrize.h
+++ /dev/null
@@ -1,21 +0,0 @@
-// Gmsh - Copyright (C) 1997-2019 C. Geuzaine, J.-F. Remacle
-//
-// See the LICENSE.txt file for license information. Please report all
-// issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
-
-#ifndef GMODEL_PARAMETRIZE_H
-#define GMODEL_PARAMETRIZE_H
-
-int isTriangulationParametrizable(const std::vector<MTriangle *> &t, int Nmax,
-                                  double ar);
-int isTriangulationParametrizable(const std::vector<MTriangle *> &t);
-void computeEdgeCut(GModel *gm, std::vector<MLine *> &cut,
-                    int max_elems_per_cut);
-void computeNonManifoldEdges(GModel *gm, std::vector<MLine *> &cut,
-                             bool addBoundary);
-int parametrizeAllGFace(GModel *gm,  std::map<MVertex* , std::pair<SVector3, SVector3> > *C=NULL);
-void parametrizeAllGEdge(GModel *gm);
-int parametrizeGFace(discreteFace *gf,  std::map<MVertex* , std::pair<SVector3, SVector3> > *C=NULL);
-HXTStatus computeDiscreteCurvatures(GModel *gm, std::map<MVertex* , std::pair<SVector3, SVector3> > &C );
-
-#endif
diff --git a/Mesh/BDS.cpp b/Mesh/BDS.cpp
index f8ee62b17876f0bed476e70b430859c2e6859b76..8c5ac7de56fdade3de3acd379f70601049dbab58 100644
--- a/Mesh/BDS.cpp
+++ b/Mesh/BDS.cpp
@@ -1362,12 +1362,12 @@ static inline bool getOrderedNeighboringVertices (BDS_Point *p,
   if (p->iD == CHECK){
     for (size_t i = 0 ; i < ts.size() ; i++){
       BDS_Point *pts[4];
-      ts[i]->getNodes(pts);
-      //printf("TR %d : %d %d %d\n",i,pts[0]->iD,pts[1]->iD,pts[2]->iD);
+      ts[i]->getNodes(pts);      
+      printf("TR %d : %d %d %d\n",i,pts[0]->iD,pts[1]->iD,pts[2]->iD);
     }
   }
 
-  if (ts.empty())return false;
+  if (ts.empty())return false;  
   while (1){
     bool found = false;
     for (size_t i = 0 ; i < ts.size() ; i++){
@@ -1398,11 +1398,11 @@ static inline bool getOrderedNeighboringVertices (BDS_Point *p,
 	}
       }
     }
-
+    
     if (nbg.size() == ts.size()) break;
     if (!found) return false;
   }
-
+  
   if (p->iD == CHECK){
     printf("FINALLY : ");
     for (size_t i=0;i< nbg.size() ;i++){
@@ -1447,7 +1447,7 @@ static inline void getCentroidUV (const BDS_Point *p, GFace *gf,
     factSum += fact;
     U += kernel[i].x()*fact;
     V += kernel[i].y()*fact;
-    LC += lc[i]*fact;
+    LC += lc[i]*fact;    
   }
   U /= factSum;
   V /= factSum;
@@ -1488,16 +1488,16 @@ static inline void computeSomeKindOfKernel (const BDS_Point *p,
 					    std::vector<double> &lc,
 					    int check){
 
-
+  
   FILE *f = NULL;
   if (p->iD == check) f = fopen("kernel.pos","w");
-
+  
   SPoint2 pp (p->u,p->v);
   if (p->iD == check){
     fprintf(f,"View \"kernel\"{\n");
     fprintf(f,"SP(%g,%g,0){2};\n",p->u,p->v);
   }
-
+  
   double  ll = p->lc();
   kernel.clear();
   lc.clear();
@@ -1512,7 +1512,7 @@ static inline void computeSomeKindOfKernel (const BDS_Point *p,
     }
     else if (nbg[(i+1)%nbg.size()]->degenerated){
       kernel.push_back(SPoint2 (nbg[i]->u,nbg[i]->v));
-      kernel.push_back(SPoint2 (nbg[i]->u,nbg[(i+1)%nbg.size()]->v));
+      kernel.push_back(SPoint2 (nbg[i]->u,nbg[(i+1)%nbg.size()]->v));      
       lc.push_back(nbg[i]->lc());
       lc.push_back(nbg[i]->lc());
     }
@@ -1552,7 +1552,7 @@ static inline void computeSomeKindOfKernel (const BDS_Point *p,
     lc[i] = lc_now;
   }
 
-
+  
   if (p->iD == check){
     //    for (size_t i = 0; i<kernel.size();i++){
     //      fprintf(f,"SL(%g,%g,0,%g,%g,0){3,3};\n",kernel[i].x(),kernel[i].y(),kernel[(i+1)%nbg.size()].x(),kernel[(i+1)%nbg.size()].y());
@@ -1570,8 +1570,8 @@ static inline void getGradientTutteEnergy (const BDS_Point *p,
 					   double dEduv[2]){
   // X = X0 + dX/dU (U-U0)
   // E = \sum_i (X-X_i)^2 = \sum_i (U-U_i)^T G (U-U_i)
-  // dE/dU = G \sum_i  (U-U_i)
-
+  // dE/dU = G \sum_i  (U-U_i)  
+  
   Pair<SVector3, SVector3> d = gf->firstDer(SPoint2 (p->u,p->v));
   double G11 = dot (d.left(),d.left());
   double G12 = dot (d.left(),d.right());
@@ -1655,7 +1655,7 @@ static inline bool minimizeTutteEnergyProj (BDS_Point *p,
   if (p->iD == check){
     printf("%g %g %d\n",p->u,p->v,validityOfCavity (p, nbg));
   }
-
+  
   if (validityOfCavity (p, nbg)){
     p->X = gp.x(); p->Y = gp.y(); p->Z = gp.z();
     double E_moved = getTutteEnergy (p, nbg, RATIO) ;
@@ -1663,7 +1663,7 @@ static inline bool minimizeTutteEnergyProj (BDS_Point *p,
       return true;
     }
   }
-
+  
   p->X = oldX; p->Y = oldY; p->Z = oldZ; p->u = oldU; p->v = oldV;
   return false;
 }
@@ -1683,9 +1683,9 @@ static inline bool minimizeTutteEnergyParam (BDS_Point *p,
   double E_moved  = getTutteEnergy (p, nbg, RATIO2);
 
   if (p->iD == check)printf("%g vs %g\n",E_unmoved ,E_moved);
-
+  
   if (E_moved < E_unmoved ) {
-    p->u = U; p->v = V;
+    p->u = U; p->v = V; 
     if (!validityOfCavity (p, nbg)){
       p->X = oldX; p->Y = oldY; p->Z = oldZ; p->u = oldU; p->v = oldV;
       return false;
@@ -1708,7 +1708,7 @@ bool BDS_Mesh::smooth_point_centroid(BDS_Point *p, GFace *gf, double threshold)
   }
 
   int CHECK = -1;
-
+  
   std::vector<BDS_Point *> nbg;
   std::vector<double> lc;
   std::vector<SPoint2> kernel;
@@ -1721,14 +1721,14 @@ bool BDS_Mesh::smooth_point_centroid(BDS_Point *p, GFace *gf, double threshold)
   if (RATIO > threshold)return false;
 
   computeSomeKindOfKernel (p,nbg,kernel,lc, CHECK);
-
-  if (! minimizeTutteEnergyParam ( p,E_unmoved, RATIO,nbg,kernel,lc,gf, CHECK)){
-    if ( ! minimizeTutteEnergyProj (p,E_unmoved, RATIO,nbg,kernel,lc,gf, CHECK)) {
+  
+  if (! minimizeTutteEnergyParam ( p,E_unmoved, RATIO,nbg,kernel,lc,gf, CHECK)){ 
+    if ( ! minimizeTutteEnergyProj (p,E_unmoved, RATIO,nbg,kernel,lc,gf, CHECK)) {      
       //      __COUNT3++;
       return false;
     }
     else{
-      p->config_modified = true;
+      p->config_modified = true;      
       E_unmoved  = getTutteEnergy (p, nbg, RATIO);
       minimizeTutteEnergyProj (p,E_unmoved, RATIO,nbg,kernel,lc,gf, CHECK);
       //      __COUNT2++;
@@ -1740,5 +1740,7 @@ bool BDS_Mesh::smooth_point_centroid(BDS_Point *p, GFace *gf, double threshold)
   }
 
   return true;
-
+  
 }
+
+
diff --git a/Mesh/meshGFaceBDS.cpp b/Mesh/meshGFaceBDS.cpp
index 4c322e01f597bc7f5398080ec2adca2959690bdb..2cc3a1e8c83b36b6b22f184d71087374f7e00867 100644
--- a/Mesh/meshGFaceBDS.cpp
+++ b/Mesh/meshGFaceBDS.cpp
@@ -82,7 +82,7 @@ static inline double computeEdgeLinearLength(BDS_Point *p1, BDS_Point *p2, GFace
 static double computeEdgeLinearLength(BDS_Edge *e, GFace *f)
 {
   // FIXME !!!
-  return
+  return 
     f->geomType() == GEntity::Plane ?
     e->length() :
     computeEdgeLinearLength(e->p1, e->p2, f);
@@ -283,7 +283,7 @@ static void getDegeneracy(BDS_Mesh &m, std::vector<BDS_Point*> &deg)
   while(itp != m.points.end()) {
     if ((*itp)->degenerated)deg.push_back(*itp);
     itp++;
-  }
+  }  
 }
 
 static void setDegeneracy(std::vector<BDS_Point*> &deg, bool d){
@@ -292,12 +292,12 @@ static void setDegeneracy(std::vector<BDS_Point*> &deg, bool d){
 
 static int validitiyOfGeodesics(GFace *gf, BDS_Mesh &m)
 {
-  std::vector< BDS_Edge *> degenerated;
+  std::vector< BDS_Edge *> degenerated; 
   for (size_t i=0;i< m.edges.size();i++){
     BDS_Edge *e = m.edges[i];
     if (!e->deleted && e->p1->degenerated + e->p2->degenerated == 1)degenerated.push_back(e);
   }
-  std::vector< BDS_Edge *> toSplit;
+  std::vector< BDS_Edge *> toSplit; 
   for (size_t i=0;i< degenerated.size();i++){
     BDS_Edge *ed = degenerated[i];
     double u3[2] = {ed->p1->degenerated ? ed->p2->u : ed->p1->u,ed->p1->v};
@@ -312,7 +312,7 @@ static int validitiyOfGeodesics(GFace *gf, BDS_Mesh &m)
 	double rp1 = robustPredicates::orient2d(u1, u2, u3);
 	double rp2 = robustPredicates::orient2d(u1, u2, u4);
 	double rq1 = robustPredicates::orient2d(u3, u4, u1);
-	double rq2 = robustPredicates::orient2d(u3, u4, u2);
+	double rq2 = robustPredicates::orient2d(u3, u4, u2);	
 	if(rp1*rp2<0 && rq1*rq2<0){
 	  //	  printf("%d %d -- %d %d\n",ed->p1->iD,ed->p2->iD,e->p1->iD,e->p2->iD);
 	  toSplit.push_back(ed);
@@ -481,7 +481,7 @@ void collapseEdgePass(GFace *gf, BDS_Mesh &m, double MINE_, int MAXNP,
       count++;
       double lone1 = 0.;
       bool collapseP1Allowed = true;
-
+      
       double lone2 = 0.;
       bool collapseP2Allowed = false;
       if(e->p2->iD > MAXNP) {
@@ -526,7 +526,7 @@ void smoothVertexPass(GFace *gf, BDS_Mesh &m, int &nb_smooth, bool q, double thr
   //  __COUNT2=0;
   //  __COUNT3=0;
   double t1 = Cpu();
-
+  
   for (int i=0; i<1;i++){
     std::set<BDS_Point *, PointLessThan>::iterator itp = m.points.begin();
     while(itp != m.points.end()) {
@@ -547,6 +547,48 @@ void smoothVertexPass(GFace *gf, BDS_Mesh &m, int &nb_smooth, bool q, double thr
   //  printf("%d %d %d smooth \n",__COUNT1, __COUNT2, __COUNT3);
 }
 
+static void CHECK_STRANGE(const char *c, BDS_Mesh &m)
+{
+  return;
+#if 0
+  int strange = 0;
+  for (size_t i=0;i<m.triangles.size();++i){
+    BDS_Point *pts[4];
+    m.triangles[i]->getNodes(pts);
+    double surface_triangle_param(BDS_Point *p1, BDS_Point *p2, BDS_Point *p3);
+    if (pts[0]->degenerated+pts[1]->degenerated+pts[2]->degenerated <= 1){
+      if (fabs(surface_triangle_param(pts[0],pts[1],pts[2]))<1.e-8){
+	strange ++;
+      }
+    }
+  }
+  if (strange) printf("strange(%s) = %d\n",c,strange);
+
+  return;
+  for (size_t int i=0;i<m.triangles.size();++i){
+    BDS_Point *pts[4];
+    m.triangles[i]->getNodes(pts);
+    if (pts[0] == pts[1] ||
+	pts[0] == pts[2] ||
+	pts[1] == pts[2]){
+      strange ++;
+    }
+  }
+
+  return;
+  strange = 0;
+  std::set<BDS_Point*,PointLessThan>::iterator itp = m.points.begin();
+  while (itp != m.points.end()){
+    if ((*itp)->g && (*itp)->g->classif_degree == 2){
+      std::vector<BDS_Face*> t = (*itp)->getTriangles();
+      if (t.size() == 2)strange++;//printf("vertex %d \n",(*itp)->iD);
+    }
+    ++itp;
+  }
+  printf("strange(%s) = %d\n",c,strange);
+#endif
+}
+
 static void computeNodalSizes(
   GFace *gf, BDS_Mesh &m,
   std::map<BDS_Point *, MVertex *, PointLessThan> *recoverMap)
@@ -652,7 +694,7 @@ void modifyInitialMeshToRemoveDegeneracies(
       it->first->degenerated = true;
     }
   }
-  for(size_t i = 0; i < degenerated_edges.size(); i++) {
+  for(size_t i = 0; i < degenerated_edges.size(); i++) {    
     m.collapse_edge_parametric(degenerated_edges[i], degenerated_edges[i]->p1,
                                true);
     recoverMap->erase(degenerated_edges[i]->p1);
@@ -717,9 +759,9 @@ void refineMeshBDS(GFace *gf, BDS_Mesh &m, const int NIT,
       setDegeneracy(deg,false);
     }
     else setDegeneracy(deg,true);
-
+    
     //    printf("degeneracy %d\n",nbSplit);
-
+    
     // we count the number of local mesh modifs.
     int nb_split = 0;
     int nb_smooth = 0;
@@ -742,7 +784,7 @@ void refineMeshBDS(GFace *gf, BDS_Mesh &m, const int NIT,
     //        outputScalarField(m.triangles, "splitsmooth.pos", 1, gf);
 
 
-
+    
     swapEdgePass(gf, m, nb_swap,t_sw);
     smoothVertexPass(gf, m, nb_smooth, false,.5,t_sm);
 
@@ -766,6 +808,8 @@ void refineMeshBDS(GFace *gf, BDS_Mesh &m, const int NIT,
       collapseEdgePass(gf, m, .45, MAXNP, nb_collaps,t_col);
       smoothVertexPass(gf, m, nb_smooth, false,.5,t_sm);
     }
+    
+    //    CHECK_STRANGE("smmooth", m);
 
     m.cleanup();
 
@@ -785,7 +829,7 @@ void refineMeshBDS(GFace *gf, BDS_Mesh &m, const int NIT,
     }
     if((minL > MINE_ && maxL < MAXE_) || IT > (abs(NIT))) break;
 
-
+    
     IT++;
     Msg::Debug(" iter %3d minL %8.3f/%8.3f maxL %8.3f/%8.3f -- Small/Large/Total (%6d/%6d/%6d): "
                "%6d splits, %6d swaps, %6d collapses, %6d moves",
@@ -867,7 +911,7 @@ void refineMeshBDS(GFace *gf, BDS_Mesh &m, const int NIT,
   }
 
   setDegeneracy(deg,true);
-
+  
   double t_total = t_spl + t_sw + t_col + t_sm;
   if(!t_total) t_total = 1.e-6;
   Msg::Debug(" ---------------------------------------");
diff --git a/contrib/hxt/hxt_mean_values.c b/contrib/hxt/hxt_mean_values.c
index adb2c4761018432884624790c8a097c581380c7b..375b7b226b18bff8faae9491de39bb04c8da828c 100644
--- a/contrib/hxt/hxt_mean_values.c
+++ b/contrib/hxt/hxt_mean_values.c
@@ -34,10 +34,7 @@ HXTStatus hxtMeanValuesCreate(HXTEdges *edges, HXTMeanValues **meanValues)
 
   // be moved into parametrization?
   HXTBoundaries *boundaries;
-    printf("1 %d %d %d\n",mesh->triangles.node[0],mesh->triangles.node[1],mesh->triangles.node[2]);
-    printf("1 %d %d %d\n",mesh->triangles.node[3],mesh->triangles.node[4],mesh->triangles.node[5]);
   HXT_CHECK(hxtEdgesSetBoundaries(edges, &boundaries));
-    printf("2\n");
   map->boundaries = boundaries;
 
 
@@ -55,7 +52,7 @@ HXTStatus hxtMeanValuesCreate(HXTEdges *edges, HXTMeanValues **meanValues)
     }
   }
 
-  HXT_CHECK(hxtMalloc(&map->hole,(nBoundaries+1)*sizeof(int)));
+  HXT_CHECK(hxtMalloc(&map->hole,(nBoundaries-1)*sizeof(int)));
   int c = 0;
   for(int i=0; i<nBoundaries; i++)
     if(i!=map->boundary){
@@ -85,12 +82,11 @@ HXTStatus hxtMeanValuesCompute(HXTMeanValues *meanValues){
     HXT_CHECK(hxtBoundariesGetNumberOfEdgesOfLineLoop(meanValues->boundaries,meanValues->hole[i],&c));
     nby += c;
   }
-  
-#ifdef __FILLERGAP_
+
   uint32_t *fillergap;
   HXT_CHECK(hxtMalloc(&fillergap, 3*(nTriangles+nby)*sizeof(uint32_t)));
   memcpy(fillergap, mesh->triangles.node, 3*nTriangles*sizeof(uint32_t));
-  
+
   int s=0;
   for(int i=0; i<meanValues->nHoles; i++){
     uint32_t *cedgs;
@@ -104,27 +100,20 @@ HXTStatus hxtMeanValuesCompute(HXTMeanValues *meanValues){
     }
     s += n_;
   }
-#endif // __FILLERGAP_
-  
   /*
     for(int i=0; i<nTriangles+nby; i++)
     printf("tri %d (nby=%d) \t %u %u %u\n",i,nby,fillergap[3*i+0],fillergap[3*i+1],fillergap[3*i+2]);
   */
-  
+
   HXTLinearSystem *sys;
-  
-#ifdef __FILLERGAP_
+
   HXT_CHECK(hxtLinearSystemCreateLU(&sys,nTriangles+nby,3,1,fillergap));
-#else
-  HXT_CHECK(hxtLinearSystemCreateLU(&sys,nTriangles,3,1,mesh->triangles.node));
-#endif
-  
-  
+
   uint32_t *flag;
   HXT_CHECK(hxtMalloc(&flag,nNodes*sizeof(uint32_t)));
   for(uint32_t ii=0; ii<nNodes; ii++)
     flag[ii] = 0;
-  
+
   /* boundary conditions */
   double *uv = meanValues->uv;
   int n;
@@ -141,28 +130,28 @@ HXTStatus hxtMeanValuesCompute(HXTMeanValues *meanValues){
     uv[2*edges->node[2*edges_ll[i]+0]+1] = sin(angle);
     currentLength += hxtEdgesLength(meanValues->initialEdges, edges_ll[i]);
   }
-  
+
   double *U, *V, *Urhs, *Vrhs;
   //printf("allocation: %d\n",nNodes+meanValues->nHoles);
   HXT_CHECK( hxtMalloc(&U,(nNodes+meanValues->nHoles)*sizeof(double)) );
   HXT_CHECK( hxtMalloc(&V,(nNodes+meanValues->nHoles)*sizeof(double)) );
   HXT_CHECK( hxtMalloc(&Urhs,(nNodes+meanValues->nHoles)*sizeof(double)) );
   HXT_CHECK( hxtMalloc(&Vrhs,(nNodes+meanValues->nHoles)*sizeof(double)) );
-  
-  
+
+
   // init linear system
   HXT_CHECK(hxtLinearSystemZeroMatrix(sys));
   for(uint32_t i=0; i<(nNodes+meanValues->nHoles); i++){
     Urhs[i] = 0.;
     Vrhs[i] = 0.;
   }
-  
+
   // setting linear system
   for(uint32_t ie=0; ie<edges->numEdges; ie++){
 
     int ik[2] = {-1,-1};
     uint64_t *tri = edges->edg2tri + 2*ie;
-    
+
     // gather local edge index
     for(int it=0; it<2; it++){
       if(tri[it]==(uint64_t)-1)
@@ -174,21 +163,21 @@ HXTStatus hxtMeanValuesCompute(HXTMeanValues *meanValues){
         }
       }
     }
-    
+
     for(int ij=0; ij<2; ij++){
-      
+
       uint32_t v0 = edges->node[2*ie+ij];
       uint32_t v1 = edges->node[2*ie+(1-ij)];
-      
+
       if (flag[v0]==1){//boundary nodes/conditons
-	HXT_CHECK(hxtLinearSystemSetMatrixRowIdentity(sys,v0,0));
+        HXT_CHECK(hxtLinearSystemSetMatrixRowIdentity(sys,v0,0));
         HXT_CHECK(hxtLinearSystemSetRhsEntry(sys,Urhs, v0,0, uv[2*v0+0]));
         HXT_CHECK(hxtLinearSystemSetRhsEntry(sys,Vrhs, v0,0, uv[2*v0+1]));
       }
       else {// inner node
-	double e[3] = {mesh->vertices.coord[4*v1+0]-mesh->vertices.coord[4*v0+0],mesh->vertices.coord[4*v1+1]-mesh->vertices.coord[4*v0+1],mesh->vertices.coord[4*v1+2]-mesh->vertices.coord[4*v0+2]};
-	double ne = sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2]);
-	
+        double e[3] = {mesh->vertices.coord[4*v1+0]-mesh->vertices.coord[4*v0+0],mesh->vertices.coord[4*v1+1]-mesh->vertices.coord[4*v0+1],mesh->vertices.coord[4*v1+2]-mesh->vertices.coord[4*v0+2]};
+        double ne = sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2]);
+
         uint32_t vLeft = mesh->triangles.node[3*tri[0] + (ik[0]+2)%3];
         double a[3] = {mesh->vertices.coord[4*vLeft+0]-mesh->vertices.coord[4*v0+0],mesh->vertices.coord[4*vLeft+1]-mesh->vertices.coord[4*v0+1],mesh->vertices.coord[4*vLeft+2]-mesh->vertices.coord[4*v0+2]};
         double na = sqrt(a[0]*a[0]+a[1]*a[1]+a[2]*a[2]);
@@ -210,9 +199,9 @@ HXTStatus hxtMeanValuesCompute(HXTMeanValues *meanValues){
       }
     }
   }// end for int ie
-  
 
-#ifdef __FILLERGAP_
+
+
   // holes are filled somehow
   for(int i=0; i<meanValues->nHoles; i++){
 
@@ -269,8 +258,6 @@ HXTStatus hxtMeanValuesCompute(HXTMeanValues *meanValues){
     HXT_CHECK(hxtFree(&c));
     HXT_CHECK(hxtFree(&d));
   }
-#endif
-  
   HXT_CHECK(hxtLinearSystemSolve(sys,Urhs,U));
   HXT_CHECK(hxtLinearSystemSolve(sys,Vrhs,V));
   for(uint32_t i=0; i<nNodes; i++){
@@ -278,9 +265,7 @@ HXTStatus hxtMeanValuesCompute(HXTMeanValues *meanValues){
     uv[2*i+1] = V[i] ;
   }
 
-#ifdef __FILLERGAP_
   HXT_CHECK(hxtFree(&fillergap));
-#endif
   HXT_CHECK(hxtFree(&flag));
   HXT_CHECK(hxtFree(&U));
   HXT_CHECK(hxtFree(&V));
@@ -320,7 +305,7 @@ HXTStatus hxtMeanValueAspectRatio(HXTMeanValues *meanValues, int *aspectRatio)
 
 
 
-HXTStatus hxtMeanValuesGetData(HXTMeanValues *mv, uint64_t **global,uint32_t **gn, double **uv, int *nv, int *ne, int onlyuv){
+HXTStatus hxtMeanValuesGetData(HXTMeanValues *mv, uint64_t **global,uint32_t **gn, double **uv, int *nv, int *ne){
 
   *nv = mv->initialEdges->edg2mesh->vertices.num;
   *ne = mv->initialEdges->edg2mesh->triangles.num;
@@ -333,7 +318,7 @@ HXTStatus hxtMeanValuesGetData(HXTMeanValues *mv, uint64_t **global,uint32_t **g
       uv_[iv] = mv->uv[iv];
     *uv=uv_;
   }
-  if (onlyuv) return HXT_STATUS_OK;
+  //  return HXT_STATUS_OK;
 
   uint64_t *global_;
   HXT_CHECK(hxtMalloc(&global_,(*ne)*sizeof(uint64_t)));
diff --git a/contrib/hxt/hxt_mean_values.h b/contrib/hxt/hxt_mean_values.h
index fcbf246ffc23ba277128d423d68c264abba0abb1..c2415b000a3cd69ab7e1b333baf0cc6e42933ea2 100644
--- a/contrib/hxt/hxt_mean_values.h
+++ b/contrib/hxt/hxt_mean_values.h
@@ -11,7 +11,7 @@ HXTStatus hxtMeanValuesCreate(HXTEdges *edges, HXTMeanValues **meanValues);
 HXTStatus hxtMeanValuesDelete(HXTMeanValues **meanValues);
 HXTStatus hxtMeanValuesCompute(HXTMeanValues *meanValues);
 HXTStatus hxtMeanValueAspectRatio(HXTMeanValues *meanValues, int *aspectRatio);
-HXTStatus hxtMeanValuesGetData(HXTMeanValues *mv, uint64_t **global, uint32_t **gn, double **uv, int *nv, int *ne, int onlyuv);
+HXTStatus hxtMeanValuesGetData(HXTMeanValues *mv, uint64_t **global, uint32_t **gn, double **uv, int *nv, int *ne);
 HXTStatus hxtMeanValuesWrite(HXTMeanValues *meanValues, const char* filename);
 HXTStatus hxtMeanValuesWriteParamMesh(HXTMeanValues *meanValues, const char* filename);
 
diff --git a/contrib/hxt/hxt_parametrization.c b/contrib/hxt/hxt_parametrization.c
index 36d4a37920ee608ed6525561d1dc3613db9977f4..9f1ec807f3344c2a7f517041d158215f2bcf8219 100644
--- a/contrib/hxt/hxt_parametrization.c
+++ b/contrib/hxt/hxt_parametrization.c
@@ -10,7 +10,7 @@
 
 int* colors; //gives colors of elements: colors[i] = color of i-th element
 int* nNodes; //gives  lower index of int* nodes for a color: nNodes[i] = first node index of i-th color
-int* nodes; //gives the global index of initial 'mesh': nodes[i] = if i=nNodes[c]+k, gives the global index of k-th node of c-th color
+int* nodes; //gives the global index of initial 'mesh': nodes[i] = if i=nNodes[c]+k, gives the global index of k-th node of c-th color 
 double* uv; //give the uv param coordinates of a local node: uv[2*i+p] = u/v component of the global k-node of the c-th color
 
  */
@@ -29,9 +29,9 @@ static HXTStatus hxtVectorInit(HXTVector **vecptr){
 
 
   HXT_CHECK(hxtMalloc(vecptr,sizeof(HXTVector)));
-
+  
   HXTVector *new = *vecptr;
-
+  
   new->ptr = NULL;
   new->last = -1;
   new->length = 0;
@@ -43,7 +43,7 @@ static HXTStatus hxtVectorInit(HXTVector **vecptr){
 static HXTStatus hxtVectorFree(HXTVector **vecptr){
 
   HXTVector *vector = *vecptr;
-
+  
   HXT_CHECK(hxtFree(&vector->ptr));
 
   HXT_CHECK(hxtFree(vecptr));
@@ -60,7 +60,7 @@ static HXTStatus hxtVectorPushBack(HXTVector *vector, void *object){
   if(i+1 >= length){
     if(length==0)
       length=1;
-    HXT_CHECK(hxtRealloc(&vector->ptr,2*(length)*sizeof(void *)));
+    HXT_CHECK(hxtRealloc(&vector->ptr,2*(length)*sizeof(void *)));  
     vector->length = 2*length;
   }
   vector->ptr[i+1] = object;
@@ -87,10 +87,10 @@ static HXTStatus hxtDoubleLongestEdge(HXTEdges *e, int tri, double *l)
 {
   uint32_t *ed = &e->tri2edg[3*tri];
   *l=0;
-
+  
   for(int i=0; i<3; i++){
     uint64_t *tr= &e->edg2tri[2*ed[i]];
-
+    
     if(tr[1]==(uint64_t)-1)
       continue;
 
@@ -107,7 +107,7 @@ static HXTStatus hxtLongestEdge(HXTEdges *edges, int tri,int *ie,int comp)
   *ie=comp;
   for(int i=0; i<3; i++){
     uint64_t *tr= &edges->edg2tri[2*ed[i]];
-
+    
     if(tr[1]==(uint64_t)-1)
       continue;
 
@@ -136,7 +136,7 @@ static HXTStatus hxtLongestEdgeBisection(HXTEdges *edges,int nrefinements)
     HXTMesh *m = edges->edg2mesh;
 
 
-
+    
     uint64_t *flag=NULL;
     HXT_CHECK(hxtMalloc(&flag,m->triangles.num*sizeof(uint64_t)));
     for(uint64_t it=0; it<m->triangles.num; it++){
@@ -167,7 +167,7 @@ static HXTStatus hxtLongestEdgeBisection(HXTEdges *edges,int nrefinements)
             break;
           }
         }
-        do{
+        do{       
           HXT_CHECK(hxtLongestEdge(e,ti,&ei,ej));
           tj = e->edg2tri[2*ei+0]==ti ? e->edg2tri[2*ei+1] : e->edg2tri[2*ei+0];
           HXT_CHECK(hxtLongestEdge(e,tj,&ej,ei));
@@ -272,10 +272,10 @@ static HXTStatus hxtLongestEdgeBisection(HXTEdges *edges,int nrefinements)
             if(t_[0]==tj)
               t_[0] = ttj;
             else
-              t_[1] = ttj;
+              t_[1] = ttj;    
 
           }
-        }//end for
+        }//end for      
         e->numEdges +=3;
         if(e->numEdges > maxEdg){
           maxEdg *= 2;
@@ -285,7 +285,7 @@ static HXTStatus hxtLongestEdgeBisection(HXTEdges *edges,int nrefinements)
         }
         e->node[2*ei+1] = m->vertices.num-1;
         e->edg2tri[2*ei+0] = ti;
-        e->edg2tri[2*ei+1] = ttj;
+        e->edg2tri[2*ei+1] = ttj;       
         e->node[2*e0+0] = m->vertices.num-1;
         e->node[2*e0+1] = nj;
         e->edg2tri[2*e0+0] = tti;
@@ -321,8 +321,8 @@ static HXTStatus hxtLongestEdgeBisection(HXTEdges *edges,int nrefinements)
 
   }//end refinement
 
-
-
+ 
+  
 
   return HXT_STATUS_OK;
 }
@@ -331,29 +331,29 @@ static HXTStatus hxtPartitioning(HXTEdges *edges,int *part, int nPartitions,HXTV
 {
 
   HXTMesh *mesh = edges->edg2mesh;
-
+  
   uint32_t *flagVertices;
   HXT_CHECK(hxtMalloc(&flagVertices,mesh->vertices.num*sizeof(uint32_t)));
   for(int p = 0; p<nPartitions; p++){
     HXTMesh *msh=NULL;
     HXT_CHECK(hxtMeshCreate(mesh->ctx,&msh));
 
-
+    
     for(uint32_t iv=0; iv<mesh->vertices.num; iv++)
       flagVertices[iv] = -1;
-
+    
     uint32_t cv = 0;
     uint64_t ce = 0;
-    for(uint64_t ie=0; ie<mesh->triangles.num; ie++){
+    for(uint64_t ie=0; ie<mesh->triangles.num; ie++){      
       if(part[ie]==p){
         for(int jv=0; jv<3; jv++){
           uint32_t current = mesh->triangles.node[3*ie+jv];
           if(flagVertices[current] == (uint32_t)-1)
-            flagVertices[current] = cv++;
+            flagVertices[current] = cv++;         
         }
         ce++;
       }
-    }
+    }    
     /*
       printf("------------stat \t part %d---------------\n",p);
       printf("\t number of vertices:%u\n",cv);
@@ -368,13 +368,13 @@ static HXTStatus hxtPartitioning(HXTEdges *edges,int *part, int nPartitions,HXTV
         msh->vertices.coord[4*current+0] = mesh->vertices.coord[4*iv+0];
         msh->vertices.coord[4*current+1] = mesh->vertices.coord[4*iv+1];
         msh->vertices.coord[4*current+2] = mesh->vertices.coord[4*iv+2];
-        msh->vertices.coord[4*current+3] = mesh->vertices.coord[4*iv+3];
+        msh->vertices.coord[4*current+3] = mesh->vertices.coord[4*iv+3];        
       }
-    }
+    }   
 
     msh->triangles.num = ce;
     //<
-    uint64_t *global;
+    uint64_t *global;    
     HXT_CHECK(hxtMalloc(&global,ce*sizeof(uint64_t)));
     //>
     HXT_CHECK( hxtAlignedMalloc(&msh->triangles.node,ce*3*sizeof(uint32_t)) );
@@ -418,8 +418,8 @@ static HXTStatus hxtCheckConnectivity(HXTEdges *e,HXTVector *partitions)
 
   uint64_t *idx = NULL;
   HXT_CHECK(hxtMalloc(&idx,(m->triangles.num+1)*sizeof(uint64_t)));
-
-
+  
+  
   int count = 0;
   flag[0] = count;
   queue[0] = 0;
@@ -440,8 +440,8 @@ static HXTStatus hxtCheckConnectivity(HXTEdges *e,HXTVector *partitions)
           last++;
           idx[iq+1]++;
           flag[next] = (int) count;
-        }
-      }
+        }       
+      }      
     }
     count++;
     goOn = 0;
@@ -451,7 +451,7 @@ static HXTStatus hxtCheckConnectivity(HXTEdges *e,HXTVector *partitions)
         iq=last;
         queue[last] = i;
         last++;
-        flag[i] = count;
+        flag[i] = count;        
         break;
       }
   }
@@ -461,8 +461,8 @@ static HXTStatus hxtCheckConnectivity(HXTEdges *e,HXTVector *partitions)
   for(uint64_t i=0; i<m->triangles.num; i++){
     uint32_t *refVert = &m->triangles.node[3*queue[i]];
     for(uint64_t j=idx[i]+flag[queue[i]]; j<idx[i+1]+flag[queue[i]]; j++){
-
-      int cond = 0;
+      
+      int cond = 0; 
       uint32_t *checkVert = &m->triangles.node[3*queue[j]];
       for(int ii=0; ii<3; ii++){
         for(int jj=0; jj<3; jj++){
@@ -474,7 +474,7 @@ static HXTStatus hxtCheckConnectivity(HXTEdges *e,HXTVector *partitions)
         if(cond==1)
           break;
       }//end for ii
-      if(cond==0){
+      if(cond==0){      
         printf("Unconsistent orientation \t %lu (%u %u %u) ; (%u %u)-(%u %u)-(%u %u) [%d] ~ %lu (%u %u %u) ; (%u %u)-(%u %u)-(%u %u) [%d].\n",queue[i],refVert[0],refVert[1],refVert[2],e->node[2*e->tri2edg[3*queue[i]+0]+0],e->node[2*e->tri2edg[3*queue[i]+0]+1],e->node[2*e->tri2edg[3*queue[i]+1]+0],e->node[2*e->tri2edg[3*queue[i]+1]+1],e->node[2*e->tri2edg[3*queue[i]+2]+0],e->node[2*e->tri2edg[3*queue[i]+2]+1],flag[queue[i]],queue[j],checkVert[0],checkVert[1],checkVert[2],e->node[2*e->tri2edg[3*queue[j]+0]+0],e->node[2*e->tri2edg[3*queue[j]+0]+1],e->node[2*e->tri2edg[3*queue[j]+1]+0],e->node[2*e->tri2edg[3*queue[j]+1]+1],e->node[2*e->tri2edg[3*queue[j]+2]+0],e->node[2*e->tri2edg[3*queue[j]+2]+1],flag[queue[j]]);
         uint64_t temp = m->triangles.node[3*queue[j]+0];
         m->triangles.node[3*queue[j]+0] = m->triangles.node[3*queue[j]+1];
@@ -484,9 +484,9 @@ static HXTStatus hxtCheckConnectivity(HXTEdges *e,HXTVector *partitions)
         e->tri2edg[3*queue[j]+2] = te;
 
         printf("Consistent (?) orientation \t %lu (%u %u %u) ; (%u %u)-(%u %u)-(%u %u) [%d] ~ %lu (%u %u %u) ; (%u %u)-(%u %u)-(%u %u) [%d].\n",queue[i],refVert[0],refVert[1],refVert[2],e->node[2*e->tri2edg[3*queue[i]+0]+0],e->node[2*e->tri2edg[3*queue[i]+0]+1],e->node[2*e->tri2edg[3*queue[i]+1]+0],e->node[2*e->tri2edg[3*queue[i]+1]+1],e->node[2*e->tri2edg[3*queue[i]+2]+0],e->node[2*e->tri2edg[3*queue[i]+2]+1],flag[queue[i]],queue[j],checkVert[0],checkVert[1],checkVert[2],e->node[2*e->tri2edg[3*queue[j]+0]+0],e->node[2*e->tri2edg[3*queue[j]+0]+1],e->node[2*e->tri2edg[3*queue[j]+1]+0],e->node[2*e->tri2edg[3*queue[j]+1]+1],e->node[2*e->tri2edg[3*queue[j]+2]+0],e->node[2*e->tri2edg[3*queue[j]+2]+1],flag[queue[j]]);
-
+        
       }//end if cond==0
-    }//end for j
+    }//end for j 
   }//end for i
 
   if (partitions!=NULL)
@@ -500,10 +500,10 @@ static HXTStatus hxtSplitEdges(HXTEdges *edges,int nPartitions,HXTVector *partit
 {
 
   HXTMesh *mesh = edges->edg2mesh;
-
+  
   uint32_t *tri2edg = edges->tri2edg;
-  uint64_t *edg2tri = edges->edg2tri;
-
+  uint64_t *edg2tri = edges->edg2tri; 
+  
   HXTBoundaries *boundaries;
   HXT_CHECK(hxtEdgesSetBoundaries(edges, &boundaries));
   int nbedg;
@@ -511,42 +511,42 @@ static HXTStatus hxtSplitEdges(HXTEdges *edges,int nPartitions,HXTVector *partit
 
   int nVertex = (int) mesh->triangles.num;
   int nEdge = (int) (edges->numEdges) - nbedg;
-
+  
   int *idx=NULL;
   HXT_CHECK(hxtMalloc(&idx,(nVertex+1)*sizeof(int)));
   int *nbh=NULL;
   HXT_CHECK(hxtMalloc(&nbh, 2*nEdge*sizeof(int)));
   int *weights=NULL;
   HXT_CHECK(hxtMalloc(&weights,2*nEdge*sizeof(int)));
-
+  
   idx[0] = 0;
   for(int i=0; i<nVertex; i++){// triangle by triangle
     uint32_t *current = &tri2edg[3*i];
     int temp = 0;
-    for(int j=0; j<3; j++){
+    for(int j=0; j<3; j++){      
       uint64_t *local = &edg2tri[2*current[j]];
       if(local[1]==(uint64_t)-1)
         continue;
-      else{
+      else{             
         nbh[idx[i]+temp] = i == (int) local[0] ? (int) local[1] : (int) local[0];
         weights[idx[i]+temp] = (int) (hxtEdgesLength(edges,current[j])+1);
         temp++;
       }
     }
-
+    
     idx[i+1] = idx[i] + temp;
   }
 
-
-  // only for k-way
+  
+  // only for k-way  
   idx_t options[METIS_NOPTIONS];
   METIS_SetDefaultOptions(options);
   options[METIS_OPTION_NCUTS] = nPartitions;
   //options[METIS_OPTION_MINCONN] = 1;
   //options[METIS_OPTION_CCORDER] = 1;
-  options[METIS_OPTION_CONTIG] = 1;
+  options[METIS_OPTION_CONTIG] = 1;  
   //options[METIS_OPTION_DBGLVL] = 1;
-
+  
   int edgeCut;
   int *part;
   HXT_CHECK(hxtMalloc(&part,nVertex*sizeof(int)));
@@ -559,7 +559,7 @@ static HXTStatus hxtSplitEdges(HXTEdges *edges,int nPartitions,HXTVector *partit
   HXT_CHECK(hxtFree(&idx));
 
   HXT_CHECK(hxtPartitioning(edges,part,nPartitions,partitions));
-
+  
   return HXT_STATUS_OK;
 }
 
@@ -571,9 +571,9 @@ static HXTStatus hxtCuttingProcess(HXTEdges *edges, int ar, int bool, HXTVector
   HXT_CHECK(hxtBoundariesGetNumberOfLineLoops(boundaries,&nll));
   int g = (edges->numEdges - edges->edg2mesh->vertices.num - edges->edg2mesh->triangles.num + 2 - nll)/2;
   HXT_CHECK(hxtBoundariesGetSeamPoint(boundaries,&seamPoint));
-
+  
   HXTVector *toSplit;
-  HXT_CHECK(hxtVectorInit(&toSplit));
+  HXT_CHECK(hxtVectorInit(&toSplit));  
   if(seamPoint!=0 || ar==0 || g!=0 || nll == 0)
     HXT_CHECK(hxtVectorPushBack(toSplit,edges));
   else
@@ -583,7 +583,7 @@ static HXTStatus hxtCuttingProcess(HXTEdges *edges, int ar, int bool, HXTVector
     HXT_CHECK(hxtVectorInit(&split));
     HXTEdges *beingSplitted = (HXTEdges*) toSplit->ptr[i];
     HXT_CHECK(hxtSplitEdges(beingSplitted,2,split));
-    if(bool>0){
+    if(bool>0){     
       HXT_CHECK(hxtMeshDelete(&beingSplitted->edg2mesh));
       HXT_CHECK(hxtEdgesDelete(&beingSplitted));
     }
@@ -606,7 +606,7 @@ static HXTStatus hxtCuttingProcess(HXTEdges *edges, int ar, int bool, HXTVector
   }
   HXT_CHECK(hxtVectorFree(&toSplit));
   // free boundaries
-
+  
   return HXT_STATUS_OK;
 }
 
@@ -624,7 +624,7 @@ HXTStatus hxtParametrizationCreate(HXTMesh *mesh, int nrefinements, HXTParametri
   //  printf("checking connectivity ...\n");
   HXT_CHECK(hxtCheckConnectivity(param0->edges,NULL));
   //  HXT_CHECK(hxtLongestEdgeBisection(param0->edges,nrefinements));
-
+  
   HXTEdges *edges=NULL;
   HXT_CHECK(hxtEdgesCreate(initialMesh, &edges));
   uint64_t *global;
@@ -634,43 +634,43 @@ HXTStatus hxtParametrizationCreate(HXTMesh *mesh, int nrefinements, HXTParametri
   edges->global = global;
   param0->edges->global = global;
 
-  HXTVector *connect;
-  HXT_CHECK(hxtVectorInit(&connect));
+  HXTVector *connect;  
+  HXT_CHECK(hxtVectorInit(&connect));  
   HXT_CHECK(hxtCheckConnectivity(edges,connect));
 
   //  printf("connectivity is done\n");
-
+  
   HXTVector *toparam;
   HXT_CHECK(hxtVectorInit(&toparam));
   for(int i=0; i<connect->last+1; i++){
     HXT_CHECK(hxtCuttingProcess(connect->ptr[i],1,0,toparam));
   }
-  //printf("initial cutting process is done, %d\n",  param0->n);
+  printf("initial cutting process is done, %d\n",  param0->n);
   //  return HXT_STATUS_OK;
-
-
+  
+  
   HXTVector *atlas;
   HXT_CHECK(hxtVectorInit(&atlas));
   for(int i=0; i<toparam->last+1; i++){
     HXTMeanValues *param;
     HXTEdges *current = (HXTEdges *)(toparam->ptr[i]);
     HXT_CHECK(hxtMeanValuesCreate(current,&param));
-    HXT_CHECK(hxtMeanValuesCompute(param));
+    HXT_CHECK(hxtMeanValuesCompute(param));        
     int ar = 0;
     HXT_CHECK(hxtMeanValueAspectRatio(param,&ar));
-
+    
     if (0 && ar==0)
       HXT_CHECK(hxtCuttingProcess(current,ar,toparam->last,toparam));
     else
       HXT_CHECK(hxtVectorPushBack(atlas,param));
   }
   hxtVectorFree(&toparam);
-
+  
   param0->n = atlas->last+1;
   HXT_CHECK(hxtMalloc(&param0->maps,param0->n*sizeof(HXTMeanValues*)));
-  for(int i=0; i<param0->n; i++)
+  for(int i=0; i<param0->n; i++)    
     param0->maps[i] = (HXTMeanValues *) atlas->ptr[i];
-
+  
   HXT_CHECK(hxtVectorFree(&atlas));
   return HXT_STATUS_OK;
 }
@@ -688,7 +688,7 @@ HXTStatus hxtParametrizationCompute(HXTParametrization *parametrization, int **_
 
   int *colors=NULL, *nNodes=NULL, *nodes=NULL;
   double *uv=NULL;
-
+  
   *m = parametrization->edges->edg2mesh;
   int Ncolors = parametrization->n;
   *nc=Ncolors;
@@ -699,33 +699,33 @@ HXTStatus hxtParametrizationCompute(HXTParametrization *parametrization, int **_
   for(int c=0; c<Ncolors; c++){
 
     uint64_t *global=NULL;
-    int nv, ne;
-    HXT_CHECK(hxtMeanValuesGetData(parametrization->maps[c],&global, NULL, NULL, &nv,&ne,0));
+    int nv, ne;    
+    HXT_CHECK(hxtMeanValuesGetData(parametrization->maps[c],&global, NULL, NULL, &nv,&ne));
     nNodes[c+1] = nNodes[c]+nv;
 
     for(int ie=0; ie<ne; ie++)
       colors[global[ie]] = c;
-
+    
     HXT_CHECK(hxtFree(&global));
-
+    
   }
 
-
+  
   HXT_CHECK(hxtMalloc(&uv,2*nNodes[Ncolors]*sizeof(double)));//
   HXT_CHECK(hxtMalloc(&nodes,nNodes[Ncolors]*sizeof(int)));
   for(int it=0; it<nNodes[Ncolors]; it++)
     nodes[it] = -1;
-
+  
   for(int c=0; c<Ncolors; c++){
 
     uint64_t *global=NULL;
     uint32_t *gn=NULL;
     double *uvc=NULL;
-    int nv, ne;
-    HXT_CHECK(hxtMeanValuesGetData(parametrization->maps[c],&global, &gn, &uvc, &nv,&ne,0));
+    int nv, ne;    
+    HXT_CHECK(hxtMeanValuesGetData(parametrization->maps[c],&global, &gn, &uvc, &nv,&ne));
     for(int iv=0; iv<2*nv; iv++)
       uv[2*nNodes[c]+iv] = uvc[iv];
-
+    
     for(int ie=0; ie<ne; ie++){
       for(int kk=0; kk<3; kk++){
         int gvn = (int) parametrization->edges->edg2mesh->triangles.node[3*global[ie]+kk];
@@ -738,7 +738,7 @@ HXTStatus hxtParametrizationCompute(HXTParametrization *parametrization, int **_
     HXT_CHECK(hxtFree(&uvc));
   }
 
-
+  
   *_colors_=colors;
   *_nNodes_=nNodes;
   *_nodes_=nodes;
@@ -748,7 +748,7 @@ HXTStatus hxtParametrizationCompute(HXTParametrization *parametrization, int **_
 }
 
 HXTStatus hxtParametrizationWrite(HXTParametrization *parametrization, const char *filename)
-{
+{  
 
   return HXT_STATUS_OK;
 }