diff --git a/Mesh/Generator.cpp b/Mesh/Generator.cpp
index 5572324de04e564334c3e761d1b9535300b7fbbc..43ca7e2f7a7c9ef229d593bbdcd32224fa9f3c62 100644
--- a/Mesh/Generator.cpp
+++ b/Mesh/Generator.cpp
@@ -364,17 +364,20 @@ static void Mesh1D(GModel *m)
   for(GModel::eiter it = m->firstEdge(); it != m->lastEdge(); ++it)
     (*it)->meshStatistics.status = GEdge::PENDING;
 
-  int nIter = 0;
+  Msg::ResetProgressMeter();
+
+  int nIter = 0, nTot = m->getNumEdges();
   while(1){
     meshGEdge mesher;
-    int nbPending = 0;
+    int nPending = 0;
     for(GModel::eiter it = m->firstEdge(); it != m->lastEdge(); ++it){
       if ((*it)->meshStatistics.status == GEdge::PENDING){
 	mesher(*it);
-	nbPending++;
+	nPending++;
       }
+      if(!nIter) Msg::ProgressMeter(nPending, nTot, "Meshing 1D...");
     }
-    if(!nbPending) break;
+    if(!nPending) break;
     if(nIter++ > 10) break;
   }
 
@@ -424,7 +427,7 @@ static void PrintMesh2dStatistics(GModel *m)
   }
 
   Msg::Info("*** Efficiency index for surface mesh tau=%g ", 100*exp(e_avg/(double)nTotE));
-  
+
   fprintf(statreport,"\t%16s\t%d\t\t%d\t\t", m->getName().c_str(), numFaces, nUnmeshed);
   fprintf(statreport,"%d\t\t%8.7f\t%8.7f\t%8.7f\t%d\t\t%8.7f\t",
           nTotT, avg / (double)nTotT, best, worst, nTotGoodQuality,
@@ -458,24 +461,28 @@ static void Mesh2D(GModel *m)
       else
         f.insert(*it);
 
-    int nIter = 0;
+    Msg::ResetProgressMeter();
+
+    int nIter = 0, nTot = m->getNumFaces();
     while(1){
-      int nbPending = 0;
+      int nPending = 0;
       for(std::set<GFace*>::iterator it = f.begin(); it != f.end(); ++it){
         if ((*it)->meshStatistics.status == GFace::PENDING){
 	  meshGFace mesher (true, CTX::instance()->mesh.multiplePasses);
           mesher(*it);
-          nbPending++;
+          nPending++;
         }
+        if(!nIter) Msg::ProgressMeter(nPending, nTot, "Meshing 2D...");
       }
       for(std::set<GFace*>::iterator it = cf.begin(); it != cf.end(); ++it){
         if ((*it)->meshStatistics.status == GFace::PENDING){
 	  meshGFace mesher (true, CTX::instance()->mesh.multiplePasses);
           mesher(*it);
-          nbPending++;
+          nPending++;
         }
+        if(!nIter) Msg::ProgressMeter(nPending, nTot, "Meshing 2D...");
       }
-      if(!nbPending) break;
+      if(!nPending) break;
       if(nIter++ > 10) break;
     }
   }
@@ -561,7 +568,6 @@ static void Mesh3D(GModel *m)
   double t2 = Cpu();
   CTX::instance()->meshTimer[2] = t2 - t1;
   Msg::StatusBar(2, true, "Done meshing 3D (%g s)", CTX::instance()->meshTimer[2]);
-
 }
 
 void OptimizeMeshNetgen(GModel *m)
@@ -618,7 +624,7 @@ void RecombineMesh(GModel *m)
 
 void GenerateMesh(GModel *m, int ask)
 {
-  //  ProfilerStart("gmsh.prof");
+  // ProfilerStart("gmsh.prof");
   if(CTX::instance()->lock) {
     Msg::Info("I'm busy! Ask me that later...");
     return;
@@ -688,5 +694,5 @@ void GenerateMesh(GModel *m, int ask)
 
   CTX::instance()->lock = 0;
   CTX::instance()->mesh.changed = ENT_ALL;
-  //  ProfilerStop();
+  // ProfilerStop();
 }