diff --git a/Common/CommandLine.cpp b/Common/CommandLine.cpp
index 7666c410ad91db252bf11222aedf17944677d57d..3ee3efec3d68692baa24415102472d5cc362dff6 100644
--- a/Common/CommandLine.cpp
+++ b/Common/CommandLine.cpp
@@ -232,6 +232,7 @@ std::vector<std::pair<std::string, std::string> > GetShortcutsUsage(const std::s
   s.push_back(mp("Alt+z",          "Set Z view"));
   s.push_back(mp("Alt+Shift+a",    "Hide/show small axes"));
   s.push_back(mp("Alt+Shift+b",    "Hide/show mesh volume faces"));
+  s.push_back(mp("Alt+Shift+c",    "Loop through predefined colormaps"));
   s.push_back(mp("Alt+Shift+d",    "Hide/show mesh surface faces"));
   s.push_back(mp("Alt+Shift+l",    "Hide/show mesh lines"));
   s.push_back(mp("Alt+Shift+p",    "Hide/show mesh points"));
diff --git a/Common/Options.cpp b/Common/Options.cpp
index ff2cafc5d4768118d7f1ace98cc48b57ca103b69..61b072cf0280042d257176522fffb4dd23c4fe3a 100644
--- a/Common/Options.cpp
+++ b/Common/Options.cpp
@@ -8703,7 +8703,10 @@ double opt_view_colormap_number(OPT_ARGS_NUM)
 #if defined(HAVE_POST)
   GET_VIEWo(0.);
   if(action & GMSH_SET) {
-    opt->colorTable.ipar[COLORTABLE_NUMBER] = (int)val;
+    int n = (int)val;
+    if(n < 0) n = 23;
+    if(n > 23) n = 0;
+    opt->colorTable.ipar[COLORTABLE_NUMBER] = n;
     ColorTable_Recompute(&opt->colorTable);
     if(view) view->setChanged(true);
   }
diff --git a/Fltk/FlGui.cpp b/Fltk/FlGui.cpp
index 01cad21ee66d6c1f039e233362d62398d82c277b..921ed9f2ddc47f5b1f989433d512afaa33b6fe3e 100644
--- a/Fltk/FlGui.cpp
+++ b/Fltk/FlGui.cpp
@@ -688,6 +688,13 @@ int FlGui::testGlobalShortcuts(int event)
       (0, GMSH_SET | GMSH_GUI, opt_general_color_scheme(0, GMSH_GET, 0) + 1);
     status = 2;
   }
+  else if(Fl::test_shortcut(FL_ALT + FL_SHIFT + 'c')) {
+    for(unsigned int i = 0; i < PView::list.size(); i++)
+      if(opt_view_visible(i, GMSH_GET, 0))
+        opt_view_colormap_number
+          (i, GMSH_SET | GMSH_GUI, opt_view_colormap_number(i, GMSH_GET, 0) + 1);
+    status = 2;
+  }
   else if(Fl::test_shortcut(FL_ALT + 'w')) {
     opt_geometry_light
       (0, GMSH_SET | GMSH_GUI, !opt_geometry_light(0, GMSH_GET, 0));
diff --git a/Fltk/colorbarWindow.cpp b/Fltk/colorbarWindow.cpp
index b31f25cdfe60660607681e72715d3381eabf2d9e..476697ca75e5fb5bb25e865e5d51d11011b606b9 100644
--- a/Fltk/colorbarWindow.cpp
+++ b/Fltk/colorbarWindow.cpp
@@ -192,14 +192,14 @@ void colorbarWindow::redraw_range(int a, int b)
   int xx0 = 6, xx1 = 11 * fh, yy0 = 10;
   if(help_flag) {
     i = 0;
-    fl_draw("0, 1, 3, ...", xx0, yy0 + (i + 1) * fh);
+    fl_draw("0, 1, 2, 3, ..., 9", xx0, yy0 + (i + 1) * fh);
     fl_draw("Select predefined colormap 0...9", xx1, yy0 + (i + 1) * fh);
     i++;
-    fl_draw("Ctrl+0, Ctrl+1, ...", xx0, yy0 + (i + 1) * fh);
+    fl_draw("Ctrl+0, ..., Ctrl+9", xx0, yy0 + (i + 1) * fh);
     fl_draw("Select predefined colormap 10...19", xx1, yy0 + (i + 1) * fh);
     i++;
-    fl_draw("F1, F2, F3, ...", xx0, yy0 + (i + 1) * fh);
-    fl_draw("Select predefined colormap 20...", xx1, yy0 + (i + 1) * fh);
+    fl_draw("F1, ..., F4", xx0, yy0 + (i + 1) * fh);
+    fl_draw("Select predefined colormap 20...23", xx1, yy0 + (i + 1) * fh);
     i++;
     fl_draw("mouse1", xx0, yy0 + (i + 1) * fh);
     fl_draw("Draw red or hue channel", xx1, yy0 + (i + 1) * fh);
@@ -466,7 +466,8 @@ int colorbarWindow::handle(int event)
       ct->ipar[COLORTABLE_SWAP] = !ct->ipar[COLORTABLE_SWAP];
       compute = 1;
     }
-    else if(Fl::test_shortcut(FL_CTRL + 'i')) {
+    else if(Fl::test_shortcut(FL_CTRL + 'i') ||
+            Fl::test_shortcut(FL_META + 'i')) {
       ct->ipar[COLORTABLE_INVERT] = !ct->ipar[COLORTABLE_INVERT];
       compute = 1;
     }
@@ -476,7 +477,8 @@ int colorbarWindow::handle(int event)
         ct->dpar[COLORTABLE_BETA] = 1.0;
       compute = 1;
     }
-    else if(Fl::test_shortcut(FL_CTRL + 'b')) {
+    else if(Fl::test_shortcut(FL_CTRL + 'b') ||
+            Fl::test_shortcut(FL_META + 'b')) {
       ct->dpar[COLORTABLE_BETA] -= 0.05;
       if(ct->dpar[COLORTABLE_BETA] < -1.0)
         ct->dpar[COLORTABLE_BETA] = -1.0;
@@ -488,7 +490,8 @@ int colorbarWindow::handle(int event)
         ct->dpar[COLORTABLE_ALPHA] = 0.0;
       compute = 1;
     }
-    else if(Fl::test_shortcut(FL_CTRL + 'a')) {
+    else if(Fl::test_shortcut(FL_CTRL + 'a') ||
+            Fl::test_shortcut(FL_META + 'a')) {
       ct->dpar[COLORTABLE_ALPHA] += 0.05;
       if(ct->dpar[COLORTABLE_ALPHA] > 1.0)
         ct->dpar[COLORTABLE_ALPHA] = 1.0;
@@ -498,7 +501,8 @@ int colorbarWindow::handle(int event)
       ct->dpar[COLORTABLE_ALPHAPOW] += 0.05;
       compute = 1;
     }
-    else if(Fl::test_shortcut(FL_CTRL + 'p')) {
+    else if(Fl::test_shortcut(FL_CTRL + 'p') ||
+            Fl::test_shortcut(FL_META + 'p')) {
       ct->dpar[COLORTABLE_ALPHAPOW] -= 0.05;
       compute = 1;
     }
@@ -506,7 +510,8 @@ int colorbarWindow::handle(int event)
       ct->dpar[COLORTABLE_BIAS] -= 0.05;
       compute = 1;
     }
-    else if(Fl::test_shortcut(FL_CTRL + FL_Left)) {
+    else if(Fl::test_shortcut(FL_CTRL + FL_Left) ||
+            Fl::test_shortcut(FL_META + FL_Left)) {
       ct->ipar[COLORTABLE_ROTATION] += 5;
       if(ct->ipar[COLORTABLE_ROTATION] > ct->size - 1)
         ct->ipar[COLORTABLE_ROTATION] -= ct->size - 1;
@@ -516,7 +521,8 @@ int colorbarWindow::handle(int event)
       ct->dpar[COLORTABLE_BIAS] += 0.05;
       compute = 1;
     }
-    else if(Fl::test_shortcut(FL_CTRL + FL_Right)) {
+    else if(Fl::test_shortcut(FL_CTRL + FL_Right) ||
+            Fl::test_shortcut(FL_META + FL_Right)) {
       ct->ipar[COLORTABLE_ROTATION] -= 5;
       if(ct->ipar[COLORTABLE_ROTATION] < -(ct->size - 1))
         ct->ipar[COLORTABLE_ROTATION] += ct->size - 1;
@@ -557,7 +563,7 @@ int colorbarWindow::handle(int event)
       move_marker = 1;
 
     // determine which curve to modify
-    if(Fl::event_state(FL_CTRL))
+    if(Fl::event_state(FL_CTRL) || Fl::event_state(FL_META))
       p4 = 1;
     else if(ibut == 1 && !Fl::event_state(FL_SHIFT)
             && !Fl::event_state(FL_ALT))