diff --git a/contrib/HighOrderMeshOptimizer/OptHOM.cpp b/contrib/HighOrderMeshOptimizer/OptHOM.cpp
index 27520bd4c4b5fe24f523a8bf2dc6827db8730cae..7c677ea5d1c38a2e409850e1b43888e5eb7ac5bf 100644
--- a/contrib/HighOrderMeshOptimizer/OptHOM.cpp
+++ b/contrib/HighOrderMeshOptimizer/OptHOM.cpp
@@ -277,15 +277,16 @@ int OptHOM::optimize(double weightFixed, double weightFree, double b_min, double
   evalObjGrad(x, initObj, gradObj);
 
 
-//  std::cout << "Start optimizing " << mesh.nEl() << " elements (" << mesh.nVert() << " vertices, "
-//            << mesh.nFV() << " free vertices, " << mesh.nPC() << " variables) with barrier = " << barrier << std::endl;
+  std::cout << "Start optimizing " << mesh.nEl() << " elements (" << mesh.nVert() << " vertices, "
+            << mesh.nFV() << " free vertices, " << mesh.nPC() << " variables) with min. barrier = " << barrier_min
+            << " and max. barrier = " << barrier_max << std::endl;
 
   int ITER = 0;
   while (minJac < barrier_min) {
     OptimPass(x, gradObj, itMax);
     jacBar = (minJac > 0.) ? 0.9*minJac : 1.1*minJac;
     setBarrierTerm(jacBar);
-    if (ITER ++ > 5) break;
+    if (ITER ++ > 10) break;
   }
 
   //  for (int i = 0; i<3; i++) {
diff --git a/contrib/HighOrderMeshOptimizer/OptHomRun.cpp b/contrib/HighOrderMeshOptimizer/OptHomRun.cpp
index af13664aa191bd585d37ecf239675e6e27ee2f62..46fffaaebe1fad33207c5afec52edadbfbe5d1a2 100644
--- a/contrib/HighOrderMeshOptimizer/OptHomRun.cpp
+++ b/contrib/HighOrderMeshOptimizer/OptHomRun.cpp
@@ -496,23 +496,36 @@ void HighOrderMeshOptimizer (GModel *gm, OptHomParameters &p)
   else if (p.dim == 3) {
     for (GModel::riter itr = gm->firstRegion(); itr != gm->lastRegion(); ++itr) {
       if (p.onlyVisible && !(*itr)->getVisibility())continue;
+      int ITER = 0;
+      Msg::Info("Model region %4d is considered",(*itr)->tag());
+      p.SUCCESS = true;
+      while (1){
       std::vector<MTetrahedron*> tets = (*itr)->tetrahedra;
       std::set<MVertex*> toFix;
 
       if (p.filter == 1) toFix = filter3D_boundaryLayer(*itr, p.nbLayers, p.BARRIER_MIN, p.BARRIER_MAX, p.DistanceFactor);
       else toFix = filter3D(*itr, p.nbLayers, p.BARRIER_MIN);
 
-      OptHOM *temp = new OptHOM(*itr, toFix, method);
-      double distMaxBND, distAvgBND, minJac, maxJac;
-      temp->recalcJacDist();
-      temp->getJacDist(minJac, maxJac, distMaxBND, distAvgBND);
-      //      temp->mesh.writeMSH("initial.msh");
-      //      printf("--> Mesh Loaded for GRegion %d :  minJ %12.5E -- maxJ %12.5E\n", (*itr)->tag(), minJac, maxJac);
-      if (minJac > p.BARRIER_MIN  && maxJac < p.BARRIER_MAX) continue;
-      p.SUCCESS = temp->optimize(p.weightFixed, p.weightFree, p.BARRIER_MIN, p.BARRIER_MAX, samples, p.itMax);
-      temp->getJacDist(p.minJac, p.maxJac, distMaxBND, distAvgBND);
-      temp->mesh.updateGEntityPositions();
-      (*itr)->tetrahedra = tets;
+//      if ((*itr)->tetrahedra.size() > 0) {
+        OptHOM *temp = new OptHOM(*itr, toFix, method);
+        double distMaxBND, distAvgBND, minJac, maxJac;
+        temp->recalcJacDist();
+        temp->getJacDist(minJac, maxJac, distMaxBND, distAvgBND);
+        if (minJac < 1.e2)Msg::Info("Optimizing a blob of %4d elements  minJ %12.5E -- maxJ %12.5E",(*itr)->getNumMeshElements(), minJac, maxJac);
+        (*itr)->tetrahedra = tets;
+        std::ostringstream ossI;
+        ossI << "initial_" << (*itr)->tag() << "ITER_" << ITER << ".msh";
+        temp->mesh.writeMSH(ossI.str().c_str());
+        if (minJac > p.BARRIER_MIN  && maxJac < p.BARRIER_MAX) break;
+        p.SUCCESS = temp->optimize(p.weightFixed, p.weightFree, p.BARRIER_MIN, p.BARRIER_MAX, samples, p.itMax);
+        temp->getJacDist(p.minJac, p.maxJac, distMaxBND, distAvgBND);
+        temp->mesh.updateGEntityPositions();
+        if (!p.SUCCESS) break;
+//      }
+      ITER ++;
+      }
+      Msg::Info("Model region %4d is done (%d subdomains were computed) SUCCESS %1d",(*itr)->tag(),ITER,p.SUCCESS);
+      Msg::Info("----------------------------------------------------------------");
       //      temp->mesh.writeMSH("final.msh");
     }
   }