diff --git a/Mesh/HighOrder.cpp b/Mesh/HighOrder.cpp
index 97431605d842a21c809b4fc80db247c30362ca9e..692be877de7a472b8b734d60912541e894fac969 100644
--- a/Mesh/HighOrder.cpp
+++ b/Mesh/HighOrder.cpp
@@ -26,12 +26,6 @@
 
 #define SQU(a)      ((a)*(a))
 
-static bool mappingIsInvertible(MTetrahedron *e)
-{
-  if (e->getPolynomialOrder() == 1) return true;
-  if (e->getPolynomialOrder() == 1) return e->distoShapeMeasure() > 0;
-}
-
 // The aim here is to build a polynomial representation that consist
 // in polynomial segments of equal length
 
@@ -536,7 +530,7 @@ static void reorientQuadPoints(std::vector<MVertex*> &vtcs, int orientation,
 	else if (p1 == 0 && p2 == 3){
           for (int i = 4+4*nbP-1; i >= 4+3*nbP; i--) tmp[index++] = vtcs[i];
         }
-	else printf("ouuls\n");
+	else Msg::Error("ouuls");
       }	
       for (int i=0;i<index;i++)vtcs[start+4+i] = tmp[i];      
       start += (4+index);
@@ -856,8 +850,6 @@ static void setHighOrder(GRegion *gr, edgeContainer &edgeVertices,
                          int nPts = 1, highOrderSmoother *displ2D = 0,
                          highOrderSmoother *displ3D = 0)
 {
-  int nbCorr = 0;
-  
   std::vector<MTetrahedron*> tetrahedra2;
   for(unsigned int i = 0; i < gr->tetrahedra.size(); i++){
     MTetrahedron *t = gr->tetrahedra[i];
@@ -871,33 +863,18 @@ static void setHighOrder(GRegion *gr, edgeContainer &edgeVertices,
     else{
       getFaceVertices(gr, t, vf, faceVertices, edgeVertices, linear, nPts);
       ve.insert(ve.end(), vf.begin(), vf.end());     
-      MTetrahedronN incpl(t->getVertex(0), t->getVertex(1), t->getVertex(2), t->getVertex(3),
-                          ve, nPts + 1);
+      MTetrahedronN incpl(t->getVertex(0), t->getVertex(1), t->getVertex(2), 
+                          t->getVertex(3), ve, nPts + 1);
       getRegionVertices(gr, &incpl, t, vr, linear, nPts); 
       ve.insert(ve.end(), vr.begin(), vr.end());
       MTetrahedron* n = new MTetrahedronN(t->getVertex(0), t->getVertex(1), 
                                           t->getVertex(2), t->getVertex(3), ve, nPts + 1);
-      if (!mappingIsInvertible(n)){
-        Msg::Warning("Found invalid curved volume element (# %d in list)", i);
-      }
       tetrahedra2.push_back(n);
     }
     delete t;
   }
   gr->tetrahedra = tetrahedra2;
 
-  std::vector<int> invalid;
-  if (nbCorr != 0) {
-    for(unsigned int i = 0; i < gr->tetrahedra.size(); i++)
-      if (!mappingIsInvertible(gr->tetrahedra[i])) invalid.push_back(i);
-    if (invalid.size()) {
-      Msg::Warning("We have %d invalid elements remaining", (int)invalid.size());
-      std::vector<int>::iterator iIter = invalid.begin();
-      for (; iIter != invalid.end(); ++iIter)
-        Msg::Warning("%d", *iIter);
-    }
-  }
-  
   std::vector<MHexahedron*> hexahedra2;
   for(unsigned int i = 0; i < gr->hexahedra.size(); i++){
     MHexahedron *h = gr->hexahedra[i];
@@ -928,14 +905,14 @@ static void setHighOrder(GRegion *gr, edgeContainer &edgeVertices,
     else {
       getFaceVertices(gr, h, vf, faceVertices, edgeVertices, linear, nPts);
       ve.insert(ve.end(), vf.begin(), vf.end());     
-      MHexahedronN incpl(h->getVertex(0), h->getVertex(1), h->getVertex(2), h->getVertex(3),
-			 h->getVertex(4), h->getVertex(5), h->getVertex(6), h->getVertex(7),
-			 ve, nPts + 1);
+      MHexahedronN incpl(h->getVertex(0), h->getVertex(1), h->getVertex(2),
+                         h->getVertex(3), h->getVertex(4), h->getVertex(5),
+                         h->getVertex(6), h->getVertex(7), ve, nPts + 1);
       getRegionVertices(gr, &incpl, h, vr, linear, nPts); 
       ve.insert(ve.end(), vr.begin(), vr.end());
-      MHexahedron* n = new MHexahedronN(h->getVertex(0), h->getVertex(1), h->getVertex(2), h->getVertex(3),
-                                        h->getVertex(4), h->getVertex(5), h->getVertex(6), h->getVertex(7),
-                                        ve, nPts + 1);
+      MHexahedron* n = new MHexahedronN(h->getVertex(0), h->getVertex(1), h->getVertex(2), 
+                                        h->getVertex(3), h->getVertex(4), h->getVertex(5),
+                                        h->getVertex(6), h->getVertex(7), ve, nPts + 1);
       hexahedra2.push_back(n);     
     }
     delete h;
@@ -1226,8 +1203,8 @@ void SetOrderN(GModel *m, int order, bool linear, bool incomplete)
   // we do that model face by model face
   std::vector<MElement*> bad;
   double worst;
-  // printJacobians(m, "smoothness_b.pos");
 
+  // printJacobians(m, "smoothness_b.pos");
   // m->writeMSH("RAW.msh");
 
   if (displ2D){
@@ -1253,10 +1230,9 @@ void SetOrderN(GModel *m, int order, bool linear, bool incomplete)
   if(displ2D) delete displ2D;
   if(displ3D) delete displ3D;
 
-  //  printJacobians(m, "smoothness.pos");
-  
   double t2 = Cpu();
 
+  // printJacobians(m, "smoothness.pos");
   // m->writeMSH("SMOOTHED.msh");
 
   if (!linear){
diff --git a/Mesh/highOrderTools.cpp b/Mesh/highOrderTools.cpp
index ea884c357ece57e0a21819ff511f9ed732b1230c..f017ceeeffd70e6616d8837adf0bc4749fba41a0 100644
--- a/Mesh/highOrderTools.cpp
+++ b/Mesh/highOrderTools.cpp
@@ -160,7 +160,8 @@ double highOrderTools::applySmoothingTo(GFace *gf, double tres, bool mixed)
 }
 
 
-void highOrderTools::ensureMinimumDistorsion (double threshold){
+void highOrderTools::ensureMinimumDistorsion (double threshold)
+{
   std::vector<MElement*> v;
   if (_dim == 2){
     for (GModel::fiter fit = _gm->firstFace(); fit != _gm->lastFace(); ++fit) {
@@ -663,20 +664,18 @@ double highOrderTools::apply_incremental_displacement (double max_incr,
 }
 
 // uncurve elements that are invalid
-void highOrderTools::ensureMinimumDistorsion (std::vector<MElement*> &all, 
-					      double threshold){
-  int num = 0;
-  while(1){
+void highOrderTools::ensureMinimumDistorsion(std::vector<MElement*> &all, 
+                                             double threshold)
+{
+  for(int tries = 0; tries < 100; tries++){
     double minD;
     std::vector<MElement*> disto;
     getDistordedElements(all, threshold, disto, minD);    
-    //    if (num == disto.size())break;
-    if (!disto.size())break;
-    num = disto.size();
-    Msg::Info("Fixing %d bad curved elements (worst disto %g)",disto.size(),minD);
-    for (int i=0;i<disto.size();i++){
-      ensureMinimumDistorsion(disto[i],threshold);
-    } 
+    if (disto.empty()) break;
+    Msg::Info("Fixing %d bad curved elements (worst disto %g)", disto.size(), minD);
+    for (int i = 0; i < disto.size(); i++){
+      ensureMinimumDistorsion(disto[i], threshold);
+    }
   }
 }