diff --git a/Mesh/Generator.cpp b/Mesh/Generator.cpp
index af49168454648581535fd58770609163b114a059..84a7ac322dc255c3559065e90eba36574a12aa9a 100644
--- a/Mesh/Generator.cpp
+++ b/Mesh/Generator.cpp
@@ -1,4 +1,4 @@
-// $Id: Generator.cpp,v 1.131 2008-01-28 11:05:33 geuzaine Exp $
+// $Id: Generator.cpp,v 1.132 2008-01-28 16:00:19 geuzaine Exp $
 //
 // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle
 //
@@ -403,12 +403,13 @@ void GenerateMesh(int ask)
     std::for_each(m->firstFace(), m->lastFace(), orientMeshGFace());
   
   // Optimize quality
-  if(m->getMeshStatus() == 3 && CTX.mesh.optimize)
-    OptimizeMesh(m);
-  // Optimize quality with netgen
-  if(m->getMeshStatus() == 3 && CTX.mesh.optimize_netgen)
-    OptimizeMeshNetgen(m);
-  
+  for(int i = 0; i < std::max(CTX.mesh.optimize, CTX.mesh.optimize_netgen); i++){
+    if(m->getMeshStatus() == 3 && CTX.mesh.optimize > i)
+      OptimizeMesh(m);
+    if(m->getMeshStatus() == 3 && CTX.mesh.optimize_netgen > i)
+      OptimizeMeshNetgen(m);
+  }
+
   // Create high order elements
   if(m->getMeshStatus() && CTX.mesh.order > 1) 
     SetOrderN(m, CTX.mesh.order, CTX.mesh.second_order_linear,