diff --git a/Geo/GModel.cpp b/Geo/GModel.cpp
index c4a7d50a6edf8c60d2a42317cc05286a47910efe..466a04c8e1e14b116e73581ebc9f1ec28506703f 100644
--- a/Geo/GModel.cpp
+++ b/Geo/GModel.cpp
@@ -541,11 +541,10 @@ int GModel::mesh(int dimension)
 bool GModel::setAllVolumesPositive()
 {
   bool ok = true;
-  for(riter it = regions.begin(); it != regions.end(); ++it) {
-    int nbEl = (*it)->getNumMeshElements();
-    for (int iEl = 0; iEl < nbEl; ++iEl)
-      ok = (ok && (*it)->getMeshElement(iEl)->setVolumePositive());
-  }
+  for(riter it = regions.begin(); it != regions.end(); ++it)
+    for (int i = 0; i < (*it)->getNumMeshElements(); ++i)
+      if(!(*it)->getMeshElement(i)->setVolumePositive())
+        ok = false;
   return ok;
 }
 
diff --git a/Mesh/Generator.cpp b/Mesh/Generator.cpp
index fba73a065ac05d54a6c137f3c2c93f43d08cf207..d2753f1db59fffd8e47731a195c2f2494e25d8de 100644
--- a/Mesh/Generator.cpp
+++ b/Mesh/Generator.cpp
@@ -671,8 +671,6 @@ static void Mesh3D(GModel *m)
     }
   }
 
-  m->setAllVolumesPositive();
-
   double t2 = Cpu();
   CTX::instance()->meshTimer[2] = t2 - t1;
   Msg::StatusBar(true, "Done meshing 3D (%g s)", CTX::instance()->meshTimer[2]);
@@ -784,6 +782,8 @@ void GenerateMesh(GModel *m, int ask)
     }
   }
 
+  m->setAllVolumesPositive();
+
   // Subdivide into quads or hexas
   if(m->getMeshStatus() == 2 && CTX::instance()->mesh.algoSubdivide == 1)
     RefineMesh(m, CTX::instance()->mesh.secondOrderLinear, true);