diff --git a/Geo/GModel.cpp b/Geo/GModel.cpp
index e988c6d8e415e42797c17b87185ea7be2a64a2f8..c4a7d50a6edf8c60d2a42317cc05286a47910efe 100644
--- a/Geo/GModel.cpp
+++ b/Geo/GModel.cpp
@@ -540,13 +540,11 @@ int GModel::mesh(int dimension)
 
 bool GModel::setAllVolumesPositive()
 {
-  std::vector<GEntity*> entities;
-  getEntities(entities);
   bool ok = true;
-  for(std::set<GRegion*,GEntityLessThan>::iterator itReg=regions.begin();
-                                          itReg != regions.end(); ++itReg) {
-    int nbEl = (*itReg)->getNumMeshElements();
-    for (int iEl=0; iEl<nbEl; ++iEl) ok = ok && (*itReg)->getMeshElement(iEl)->setVolumePositive();
+  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());
   }
   return ok;
 }
diff --git a/Mesh/Generator.cpp b/Mesh/Generator.cpp
index ea1153ff9acb6192fae49c8be62e741531658e6d..fba73a065ac05d54a6c137f3c2c93f43d08cf207 100644
--- a/Mesh/Generator.cpp
+++ b/Mesh/Generator.cpp
@@ -671,6 +671,8 @@ 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]);
@@ -802,7 +804,7 @@ void GenerateMesh(GModel *m, int ask)
     if(CTX::instance()->mesh.hoOptimize < 0){
       ElasticAnalogy(GModel::current(), CTX::instance()->mesh.hoThresholdMin, false);
     }
-    else{      
+    else{
       OptHomParameters p;
       p.nbLayers = CTX::instance()->mesh.hoNLayers;
       p.BARRIER_MIN = CTX::instance()->mesh.hoThresholdMin;