diff --git a/Common/DefaultOptions.h b/Common/DefaultOptions.h
index 4fc98a964c5070ac8be8c78efed005ffdb184770..2fc15bd402eb060a517cb43747f4dc730d524517 100644
--- a/Common/DefaultOptions.h
+++ b/Common/DefaultOptions.h
@@ -556,6 +556,8 @@ StringXNumber GeneralOptions_Number[] = {
     "Polygon offset factor (offset = factor * DZ + r * units)" },
   { F|O, "PolygonOffsetUnits" , opt_general_polygon_offset_units , 1. ,
     "Polygon offset units (offset = factor * DZ + r * units)" },
+  { F|O, "ProgressMeterStep" , opt_general_progress_meter_step , 20. ,
+    "Increment (in percent) of the progress meter bar" },
 
   { F|O, "QuadricSubdivisions" , opt_general_quadric_subdivisions, 6. ,
     "Number of subdivisions used to draw points or lines as spheres or cylinders" },
diff --git a/Common/GmshMessage.cpp b/Common/GmshMessage.cpp
index 9e6ec77266fb76899e70e5ca0bf00ae7352b6820..e31a3029e8cb0db723dec378ddf3e854cf8d7ddd 100644
--- a/Common/GmshMessage.cpp
+++ b/Common/GmshMessage.cpp
@@ -447,7 +447,8 @@ void Msg::Debug(const char *fmt, ...)
 
 void Msg::ProgressMeter(int n, int N, bool log, const char *fmt, ...)
 {
-  if(_commRank || _verbosity < 4) return;
+  if(_commRank || _verbosity < 4 ||
+     _progressMeterStep <= 0 || _progressMeterStep >= 100) return;
 
   double percent = 100. * (double)n/(double)N;
 
diff --git a/Common/GmshMessage.h b/Common/GmshMessage.h
index 2ddd4f0bd86011ef12282a183e1d249eb6ab4133..629fe3716cdd86c950117f3a6c0589d3ea40fe7b 100644
--- a/Common/GmshMessage.h
+++ b/Common/GmshMessage.h
@@ -70,7 +70,8 @@ class Msg {
   static void StatusBar(int num, bool log, const char *fmt, ...);
   static void Debug(const char *fmt, ...);
   static void ProgressMeter(int n, int N, bool log, const char *fmt, ...);
-  static void SetProgressMeterStep(int step){ _progressMeterStep = (step > 0) ? step : 1; }
+  static void SetProgressMeterStep(int step){ _progressMeterStep = step; }
+  static int GetProgressMeterStep(){ return _progressMeterStep; }
   static void ResetProgressMeter(){ if(!_commRank) _progressMeterCurrent = 0; }
   static double &Timer(std::string str){ return _timers[str]; }
   static void PrintTimers();
diff --git a/Common/OpenFile.h b/Common/OpenFile.h
index abecb416b891eb2a9a99c80284b224479dd4c0fe..e0060625a09a748688bb302f8972bef840a8c12f 100644
--- a/Common/OpenFile.h
+++ b/Common/OpenFile.h
@@ -8,8 +8,8 @@
 
 #include <string>
 
-int ParseFile(const std::string & fileName, bool close, bool warnIfMissing=false);
-void ParseString(const std::string & str);
+int ParseFile(const std::string &fileName, bool close, bool warnIfMissing=false);
+void ParseString(const std::string &str);
 void OpenProject(const std::string &filename);
 void OpenProjectMacFinder(const char *fileName);
 int MergeFile(const std::string &fileName, bool warnIfMissing=false);
diff --git a/Common/Options.cpp b/Common/Options.cpp
index 09991224f11e6d11dfff805a90dddc8ebbd4d126..7c10d9e7bbc0a654385493551ded8a4cb4908f69 100644
--- a/Common/Options.cpp
+++ b/Common/Options.cpp
@@ -2363,6 +2363,14 @@ double opt_general_verbosity(OPT_ARGS_NUM)
   return Msg::GetVerbosity();
 }
 
+double opt_general_progress_meter_step(OPT_ARGS_NUM)
+{
+  if(action & GMSH_SET){
+    Msg::SetProgressMeterStep((int)val);
+  }
+  return Msg::GetProgressMeterStep();
+}
+
 double opt_general_nopopup(OPT_ARGS_NUM)
 {
   if(action & GMSH_SET)
diff --git a/Common/Options.h b/Common/Options.h
index 782a6c2acaa8b2bafc68e8b2686e96ce1cf1220b..6663634df9c78230df90abf5b92f4d2c2d878328 100644
--- a/Common/Options.h
+++ b/Common/Options.h
@@ -168,6 +168,7 @@ double opt_general_background_gradient(OPT_ARGS_NUM);
 double opt_general_background_image_position0(OPT_ARGS_NUM);
 double opt_general_background_image_position1(OPT_ARGS_NUM);
 double opt_general_verbosity(OPT_ARGS_NUM);
+double opt_general_progress_meter_step(OPT_ARGS_NUM);
 double opt_general_nopopup(OPT_ARGS_NUM);
 double opt_general_non_modal_windows(OPT_ARGS_NUM);
 double opt_general_terminal(OPT_ARGS_NUM);