diff --git a/contrib/HighOrderMeshOptimizer/OptHomRun.cpp b/contrib/HighOrderMeshOptimizer/OptHomRun.cpp
index 7999af6218105707840cec91d7e5daf714a35ab2..cd62cfd66716300918b6dfce64b1b0d29f59de94 100644
--- a/contrib/HighOrderMeshOptimizer/OptHomRun.cpp
+++ b/contrib/HighOrderMeshOptimizer/OptHomRun.cpp
@@ -675,7 +675,7 @@ void HighOrderMeshOptimizer(GModel *gm, OptHomParameters &p)
     else
       optimizeOneByOne(vertex2elements, element2entity, badasses, p, samples);
     if (p.numBlobs) periodicity.fixPeriodicity();
-  } while (p.numBlobs);
+  } while (p.SUCCESS == 1 && p.numBlobs);
 
   if (p.SUCCESS == 1)
     Msg::Info("Optimization succeeded");