diff --git a/Common/Context.h b/Common/Context.h
index aa5600a355e5ed6fb979363d26b50b1652cb7bc6..53219b293b952305b9843a83d1897eb4044d4017 100644
--- a/Common/Context.h
+++ b/Common/Context.h
@@ -90,9 +90,11 @@ public :
                               // locks for r, t and s 
   float quaternion[4];        // the actual quaternion used for "trackball" rotating 
   int useTrackball;           // do or do not use the trackball for rotations 
-
+  double rotation_center[3];  // point around which to rotate the scene
+  double rotation_center_cg;  // rotate around the center of gravity instead of rotation_center[]
   double min[3];              // x, y and z min for the current geometry 
   double max[3];              // x, y and z max for the current geometry 
+  double cg[3];               // "center of gravity" of the current geometry
   double range[3];            // maximum range in the three directions 
   double lc, lc_middle;       // characteristic lengths for the whole problem, 
   double lc_order;            // and never used in mesh generation (->only for geo/post) 
diff --git a/Common/DefaultOptions.h b/Common/DefaultOptions.h
index bc70692420dfc324c8f810200d801746d77f411f..5ac707805851e55853f058847db46757601cdc49 100644
--- a/Common/DefaultOptions.h
+++ b/Common/DefaultOptions.h
@@ -519,6 +519,14 @@ StringXNumber GeneralOptions_Number[] = {
     "Second Euler angle (used if Trackball == 0)" }, 
   { F,   "RotationZ" , opt_general_rotation2 , 0.0 , 
     "Third Euler angle (used if Trackball == 0)" }, 
+  { F|O, "RotationCenterOfGravity" , opt_general_rotation_center_cg , 1. ,
+    "Rotate around the center of gravity instead of (RotationCenterX, RotationCenterY, RotationCenterZ)" },
+  { F,   "RotationCenterX" , opt_general_rotation_center0 , 0.0 , 
+    "X coordinate of the center of rotation" }, 
+  { F,   "RotationCenterY" , opt_general_rotation_center1 , 0.0 , 
+    "Y coordinate of the center of rotation" }, 
+  { F,   "RotationCenterZ" , opt_general_rotation_center2 , 0.0 , 
+    "Z coordinate of the center of rotation" }, 
 
   { F|S, "SaveOptions" , opt_general_options_save, 0. , 
     "Automatically save all current options each time you quit Gmsh?" }, 
diff --git a/Common/Options.cpp b/Common/Options.cpp
index 46f988f8082b69594f6546e364632ff5434e8a46..bd483dc5734752d86b30c2a02713cf9492bb4f0f 100644
--- a/Common/Options.cpp
+++ b/Common/Options.cpp
@@ -1,4 +1,4 @@
-// $Id: Options.cpp,v 1.102 2003-03-21 00:52:35 geuzaine Exp $
+// $Id: Options.cpp,v 1.103 2003-03-26 16:57:06 geuzaine Exp $
 //
 // Copyright (C) 1997-2003 C. Geuzaine, J.-F. Remacle
 //
@@ -108,6 +108,7 @@ void Init_Options(int num)
   CTX.viewport[0] = CTX.viewport[1] = 0;
   CTX.min[0] = CTX.min[1] = CTX.min[2] = 0.0;
   CTX.max[0] = CTX.max[1] = CTX.max[2] = 1.0;
+  CTX.cg[0] = CTX.cg[1] = CTX.cg[2] = 0.0;
   CTX.range[0] = CTX.range[1] = CTX.range[2] = 1.0;
   CTX.vxmin = CTX.vymin = CTX.vxmax = CTX.vymax = 0.;
   CTX.render_mode = GMSH_RENDER;
@@ -1718,6 +1719,27 @@ double opt_general_rotation2(OPT_ARGS_NUM)
   return CTX.r[2];
 }
 
+double opt_general_rotation_center0(OPT_ARGS_NUM)
+{
+  if(action & GMSH_SET)
+    CTX.rotation_center[0] = (int)val;
+  return CTX.rotation_center[0];
+}
+
+double opt_general_rotation_center1(OPT_ARGS_NUM)
+{
+  if(action & GMSH_SET)
+    CTX.rotation_center[1] = (int)val;
+  return CTX.rotation_center[1];
+}
+
+double opt_general_rotation_center2(OPT_ARGS_NUM)
+{
+  if(action & GMSH_SET)
+    CTX.rotation_center[2] = (int)val;
+  return CTX.rotation_center[2];
+}
+
 double opt_general_quaternion0(OPT_ARGS_NUM)
 {
   if(action & GMSH_SET)
@@ -1992,6 +2014,17 @@ double opt_general_trackball(OPT_ARGS_NUM)
   return CTX.useTrackball;
 }
 
+double opt_general_rotation_center_cg(OPT_ARGS_NUM)
+{
+  if(action & GMSH_SET)
+    CTX.rotation_center_cg = (int)val;
+#if defined(HAVE_FLTK)
+  if(WID && (action & GMSH_GUI))
+    WID->gen_butt[15]->value(CTX.rotation_center_cg);
+#endif
+  return CTX.rotation_center_cg;
+}
+
 double opt_general_zoom_factor(OPT_ARGS_NUM)
 {
   if(action & GMSH_SET)
diff --git a/Common/Options.h b/Common/Options.h
index 21caed572889b7f5ecc6b6f87f1dd4ef4e91ce3e..f8e999a660fe622bb16fd08b56ccbdfd4e877030 100644
--- a/Common/Options.h
+++ b/Common/Options.h
@@ -210,6 +210,9 @@ double opt_general_options_save(OPT_ARGS_NUM);
 double opt_general_rotation0(OPT_ARGS_NUM);
 double opt_general_rotation1(OPT_ARGS_NUM);
 double opt_general_rotation2(OPT_ARGS_NUM);
+double opt_general_rotation_center0(OPT_ARGS_NUM);
+double opt_general_rotation_center1(OPT_ARGS_NUM);
+double opt_general_rotation_center2(OPT_ARGS_NUM);
 double opt_general_quaternion0(OPT_ARGS_NUM);
 double opt_general_quaternion1(OPT_ARGS_NUM);
 double opt_general_quaternion2(OPT_ARGS_NUM);
@@ -238,6 +241,7 @@ double opt_general_quadric_subdivisions(OPT_ARGS_NUM);
 double opt_general_double_buffer(OPT_ARGS_NUM);
 double opt_general_alpha_blending(OPT_ARGS_NUM);
 double opt_general_trackball(OPT_ARGS_NUM);
+double opt_general_rotation_center_cg(OPT_ARGS_NUM);
 double opt_general_zoom_factor(OPT_ARGS_NUM);
 double opt_general_default_plugins(OPT_ARGS_NUM);
 double opt_general_clip0(OPT_ARGS_NUM);
diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp
index fd25556a62c8d93c730946998b709ed3ed7a3035..899c1c4d99aa3a1fd31e6ab47cca12b31eaae907 100644
--- a/Fltk/Callbacks.cpp
+++ b/Fltk/Callbacks.cpp
@@ -1,4 +1,4 @@
-// $Id: Callbacks.cpp,v 1.168 2003-03-21 00:52:36 geuzaine Exp $
+// $Id: Callbacks.cpp,v 1.169 2003-03-26 16:57:06 geuzaine Exp $
 //
 // Copyright (C) 1997-2003 C. Geuzaine, J.-F. Remacle
 //
@@ -817,6 +817,7 @@ void general_options_ok_cb(CALLBACK_ARGS)
   opt_general_moving_light(0, GMSH_SET, WID->gen_butt[12]->value());
   opt_general_tooltips(0, GMSH_SET, WID->gen_butt[13]->value());
   opt_general_confirm_overwrite(0, GMSH_SET, WID->gen_butt[14]->value());
+  opt_general_rotation_center_cg(0, GMSH_SET, WID->gen_butt[15]->value());
 
   opt_general_shine(0, GMSH_SET, WID->gen_value[1]->value());
   opt_general_light00(0, GMSH_SET, WID->gen_value[2]->value());
@@ -825,6 +826,9 @@ void general_options_ok_cb(CALLBACK_ARGS)
   opt_general_verbosity(0, GMSH_SET, WID->gen_value[5]->value());
   opt_general_point_size(0, GMSH_SET, WID->gen_value[6]->value());
   opt_general_line_width(0, GMSH_SET, WID->gen_value[7]->value());
+  opt_general_rotation_center0(0, GMSH_SET, WID->gen_value[8]->value());
+  opt_general_rotation_center1(0, GMSH_SET, WID->gen_value[9]->value());
+  opt_general_rotation_center2(0, GMSH_SET, WID->gen_value[10]->value());
 
   opt_general_default_filename(0, GMSH_SET,
                                (char *)WID->gen_input[0]->value());
diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp
index 38b1561f6a650628dc83409c3aa833363be3c331..e4e15f4d6dd8f03500e79df8142539df026ccb7a 100644
--- a/Fltk/GUI.cpp
+++ b/Fltk/GUI.cpp
@@ -1,4 +1,4 @@
-// $Id: GUI.cpp,v 1.232 2003-03-21 00:52:36 geuzaine Exp $
+// $Id: GUI.cpp,v 1.233 2003-03-26 16:57:07 geuzaine Exp $
 //
 // Copyright (C) 1997-2003 C. Geuzaine, J.-F. Remacle
 //
@@ -33,6 +33,9 @@
 // The "Cancel" button, if present, should always be the last (-> at
 // right)
 
+// Don't indent this file
+// *INDENT-OFF*
+
 #include "PluginManager.h"
 #include "Plugin.h"
 
@@ -82,8 +85,6 @@ extern Context_T CTX;
 // We can not use the 'g', 'm' 's' and 'p' mnemonics since they are
 // already defined as global shortcuts (geometry, mesh, solver, post).
 
-// *INDENT-OFF*
-
 Fl_Menu_Item m_menubar_table[] = {
   {"&File", 0, 0, 0, FL_SUBMENU},
     {"&Open...",          FL_CTRL+'o', (Fl_Callback *)file_open_cb, 0},
@@ -344,8 +345,6 @@ static Fl_Menu_Item menu_line_display[] = {
   {0}
 };
 
-// *INDENT-ON*
-
 // Definition of global shortcuts
 
 int GUI::global_shortcuts(int event)
@@ -578,8 +577,7 @@ int GUI::global_shortcuts(int event)
         j = (int)opt_view_intervals_type(i, GMSH_GET, 0);
         opt_view_intervals_type(i, GMSH_SET | GMSH_GUI,
                                 (j == DRAW_POST_ISO) ? DRAW_POST_DISCRETE :
-                                (j ==
-                                 DRAW_POST_DISCRETE) ? DRAW_POST_CONTINUOUS :
+                                (j == DRAW_POST_DISCRETE) ? DRAW_POST_CONTINUOUS :
                                 DRAW_POST_ISO);
       }
     }
@@ -750,11 +748,9 @@ void GUI::add_post_plugins(Fl_Menu_Button * button, int iView)
     GMSH_Plugin *p = (*it).second;
     if(p->getType() == GMSH_Plugin::GMSH_POST_PLUGIN) {
       p->getName(name);
-      std::pair < int, GMSH_Plugin * >*pair =
-        new std::pair < int, GMSH_Plugin * >(iView, p);
+      std::pair < int, GMSH_Plugin * >*pair = new std::pair < int, GMSH_Plugin * >(iView, p);
       sprintf(menuname, "Plugins/%s...", name);
-      button->add(menuname, 0, (Fl_Callback *) view_options_plugin_cb,
-                  (void *)(pair), 0);
+      button->add(menuname, 0, (Fl_Callback *) view_options_plugin_cb, (void *)(pair), 0);
       p->dialogBox = 0;
     }
   }
@@ -828,15 +824,12 @@ void GUI::create_menu_window(int argc, char **argv)
     m_push_butt[i] = new Fl_Button(0, y + i * BH, width, BH);
     m_push_butt[i]->hide();
 
-    m_toggle_butt[i] =
-      new Fl_Light_Button(0, y + i * BH, width - (fontsize + 4), BH);
+    m_toggle_butt[i] = new Fl_Light_Button(0, y + i * BH, width - (fontsize + 4), BH);
     m_toggle_butt[i]->callback(view_toggle_cb, (void *)i);
     m_toggle_butt[i]->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE | FL_ALIGN_CLIP);
     m_toggle_butt[i]->hide();
 
-    m_toggle2_butt[i] =
-      new Fl_Button(width - (fontsize + 4), y + i * BH, (fontsize + 4), BH,
-                    "@#>");
+    m_toggle2_butt[i] = new Fl_Button(width - (fontsize + 4), y + i * BH, (fontsize + 4), BH, "@#>");
     m_toggle2_butt[i]->labeltype(FL_SYMBOL_LABEL);
     m_toggle2_butt[i]->labelsize(11);
     m_toggle2_butt[i]->align(FL_ALIGN_CENTER);
@@ -845,49 +838,30 @@ void GUI::create_menu_window(int argc, char **argv)
     m_toggle2_butt[i]->tooltip("Show view option menu");
 #endif
 
-    m_popup_butt[i] =
-      new Fl_Menu_Button(width - (fontsize + 4), y + i * BH, (fontsize + 4),
-                         BH);
+    m_popup_butt[i] = new Fl_Menu_Button(width - (fontsize + 4), y + i * BH, (fontsize + 4), BH);
     m_popup_butt[i]->type(Fl_Menu_Button::POPUP123);
 
-    m_popup2_butt[i] =
-      new Fl_Menu_Button(0, y + i * BH, width - (fontsize + 4), BH);
+    m_popup2_butt[i] = new Fl_Menu_Button(0, y + i * BH, width - (fontsize + 4), BH);
     m_popup2_butt[i]->type(Fl_Menu_Button::POPUP3);
 
     for(int j = 0; j < 2; j++) {
       Fl_Menu_Button *pop = j ? m_popup2_butt[i] : m_popup_butt[i];
-      pop->add("Reload/View", 0,
-               (Fl_Callback *) view_reload_cb, (void *)i, 0);
-      pop->add("Reload/All views", 0,
-               (Fl_Callback *) view_reload_all_cb, (void *)i, 0);
-      pop->add("Reload/All visible views", 0,
-               (Fl_Callback *) view_reload_visible_cb, (void *)i, 0);
-      pop->add("Remove/View", FL_Delete,
-               (Fl_Callback *) view_remove_cb, (void *)i, 0);
-      pop->add("Remove/All views", 0,
-               (Fl_Callback *) view_remove_all_cb, (void *)i, 0);
-      pop->add("Remove/All visible views", 0,
-               (Fl_Callback *) view_remove_visible_cb, (void *)i, 0);
-      pop->add("Remove/All invisible views", 0,
-               (Fl_Callback *) view_remove_invisible_cb, (void *)i, 0);
-      pop->add("Duplicate/View without options", 0,
-               (Fl_Callback *) view_duplicate_cb, (void *)i, 0);
-      pop->add("Duplicate/View with options", 0,
-               (Fl_Callback *) view_duplicate_with_options_cb, (void *)i, 0);
-      pop->add("Combine/All views", 0,
-               (Fl_Callback *) view_merge_all_cb, (void *)i, 0);
-      pop->add("Combine/All visible views", 0,
-               (Fl_Callback *) view_merge_visible_cb, (void *)i, 0);
-      pop->add("Save as/ASCII view...", 0,
-               (Fl_Callback *) view_save_ascii_cb, (void *)i, 0);
-      pop->add("Save as/Binary view...", 0,
-               (Fl_Callback *) view_save_binary_cb, (void *)i, 0);
+      pop->add("Reload/View", 0, (Fl_Callback *) view_reload_cb, (void *)i, 0);
+      pop->add("Reload/All views", 0, (Fl_Callback *) view_reload_all_cb, (void *)i, 0);
+      pop->add("Reload/All visible views", 0, (Fl_Callback *) view_reload_visible_cb, (void *)i, 0);
+      pop->add("Remove/View", FL_Delete, (Fl_Callback *) view_remove_cb, (void *)i, 0);
+      pop->add("Remove/All views", 0, (Fl_Callback *) view_remove_all_cb, (void *)i, 0);
+      pop->add("Remove/All visible views", 0, (Fl_Callback *) view_remove_visible_cb, (void *)i, 0);
+      pop->add("Remove/All invisible views", 0, (Fl_Callback *) view_remove_invisible_cb, (void *)i, 0);
+      pop->add("Duplicate/View without options", 0, (Fl_Callback *) view_duplicate_cb, (void *)i, 0);
+      pop->add("Duplicate/View with options", 0, (Fl_Callback *) view_duplicate_with_options_cb, (void *)i, 0);
+      pop->add("Combine/All views", 0, (Fl_Callback *) view_merge_all_cb, (void *)i, 0);
+      pop->add("Combine/All visible views", 0, (Fl_Callback *) view_merge_visible_cb, (void *)i, 0);
+      pop->add("Save as/ASCII view...", 0, (Fl_Callback *) view_save_ascii_cb, (void *)i, 0);
+      pop->add("Save as/Binary view...", 0, (Fl_Callback *) view_save_binary_cb, (void *)i, 0);
       add_post_plugins(pop, i);
-      pop->add("Apply as background mesh", 0,
-               (Fl_Callback *) view_applybgmesh_cb, (void *)i,
-               FL_MENU_DIVIDER);
-      pop->add("Options...", 'o', (Fl_Callback *) view_options_cb, (void *)i,
-               0);
+      pop->add("Apply as background mesh", 0, (Fl_Callback *) view_applybgmesh_cb, (void *)i, FL_MENU_DIVIDER);
+      pop->add("Options...", 'o', (Fl_Callback *) view_options_cb, (void *)i, 0);
       pop->hide();
     }
   }
@@ -1049,7 +1023,7 @@ void GUI::create_graphic_window(int argc, char **argv)
   }
 
   int sh = 2 * fontsize - 4;    // status bar height
-  int sw = fontsize + 4;        //status button width
+  int sw = fontsize + 4;        // status button width
   int width = CTX.viewport[2] - CTX.viewport[0];
   int glheight = CTX.viewport[3] - CTX.viewport[1];
   int height = glheight + sh;
@@ -1073,8 +1047,7 @@ void GUI::create_graphic_window(int argc, char **argv)
   g_status_butt[2] = new Fl_Button(x, glheight + 2, sw, sh - 4, "Z");
   x += sw;
   g_status_butt[2]->callback(status_xyz1p_cb, (void *)2);
-  g_status_butt[3] =
-    new Fl_Button(x, glheight + 2, 2 * fontsize, sh - 4, "1:1");
+  g_status_butt[3] = new Fl_Button(x, glheight + 2, 2 * fontsize, sh - 4, "1:1");
   x += 2 * fontsize;
   g_status_butt[3]->callback(status_xyz1p_cb, (void *)3);
   g_status_butt[4] = new Fl_Button(x, glheight + 2, sw, sh - 4, "?");
@@ -1096,16 +1069,12 @@ void GUI::create_graphic_window(int argc, char **argv)
   for(i = 0; i < 7; i++) {
     g_status_butt[i]->box(FL_FLAT_BOX);
     g_status_butt[i]->selection_color(FL_WHITE);
-    g_status_butt[i]->
-      align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE | FL_ALIGN_CLIP);
+    g_status_butt[i]->align(FL_ALIGN_CENTER | FL_ALIGN_INSIDE | FL_ALIGN_CLIP);
   }
 
   g_status_label[0] = new Fl_Box(x, glheight + 2, (width - x) / 3, sh - 4);
-  g_status_label[1] =
-    new Fl_Box(x + (width - x) / 3, glheight + 2, (width - x) / 3, sh - 4);
-  g_status_label[2] =
-    new Fl_Box(x + 2 * (width - x) / 3, glheight + 2, (width - x) / 3 - 2,
-               sh - 4);
+  g_status_label[1] = new Fl_Box(x + (width - x) / 3, glheight + 2, (width - x) / 3, sh - 4);
+  g_status_label[2] = new Fl_Box(x + 2 * (width - x) / 3, glheight + 2, (width - x) / 3 - 2, sh - 4);
   for(i = 0; i < 3; i++) {
     g_status_label[i]->box(FL_FLAT_BOX);
     g_status_label[i]->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE | FL_ALIGN_CLIP);
@@ -1334,27 +1303,21 @@ void GUI::create_option_window()
   // Buttons
 
   {
-    Fl_Return_Button *o =
-      new Fl_Return_Button(width - 3 * BB - 3 * WB, height - BH - WB, BB, BH,
-                           "Apply");
+    Fl_Return_Button *o = new Fl_Return_Button(width - 3 * BB - 3 * WB, height - BH - WB, BB, BH, "Apply");
     o->callback(options_ok_cb);
   }
   {
-    Fl_Button *o =
-      new Fl_Button(width - 2 * BB - 2 * WB, height - BH - WB, BB, BH,
-                    "Save");
+    Fl_Button *o = new Fl_Button(width - 2 * BB - 2 * WB, height - BH - WB, BB, BH, "Save");
     o->callback(options_save_cb);
   }
   {
-    Fl_Button *o =
-      new Fl_Button(width - BB - WB, height - BH - WB, BB, BH, "Cancel");
+    Fl_Button *o = new Fl_Button(width - BB - WB, height - BH - WB, BB, BH, "Cancel");
     o->callback(cancel_cb, (void *)opt_window);
   }
 
   // Selection browser
 
-  opt_browser =
-    new Fl_Hold_Browser(WB, WB, BROWSERW - WB, height - 3 * WB - BH);
+  opt_browser = new Fl_Hold_Browser(WB, WB, BROWSERW - WB, height - 3 * WB - BH);
   reset_option_browser();
   opt_browser->callback(options_browser_cb);
   opt_browser->value(1);
@@ -1370,121 +1333,87 @@ void GUI::create_option_window()
   {
     Fl_Tabs *o = new Fl_Tabs(WB, WB, width - 2 * WB, height - 2 * WB);
     {
-      Fl_Group *o =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH,
-                     "Display");
-      gen_butt[0] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 1 * BH, BW, BH,
-                            "Show moving axes");
-      gen_butt[1] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 2 * BH, BW, BH,
-                            "Show small axes");
-      gen_butt[2] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 3 * BH, BW, BH,
-                            "Enable fast redraw");
-      gen_butt[3] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 4 * BH, BW, BH,
-                            "Enable double buffering");
-      gen_butt[4] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 5 * BH, BW, BH,
-                            "Use display lists");
-      gen_butt[5] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 6 * BH, BW, BH,
-                            "Enable alpha blending");
-      gen_butt[6] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 7 * BH, BW, BH,
-                            "Use trackball rotation mode");
+      Fl_Group *o = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Display");
+
+      gen_butt[13] = new Fl_Check_Button(2 * WB, 2 * WB + 1 * BH, BW, BH, "Show tooltips");
+      gen_butt[13]->type(FL_TOGGLE_BUTTON);
+      gen_butt[13]->down_box(TOGGLE_BOX);
+      gen_butt[13]->selection_color(TOGGLE_COLOR);
+
+      gen_butt[0] = new Fl_Check_Button(2 * WB, 2 * WB + 2 * BH, BW, BH, "Show moving axes");
+      gen_butt[1] = new Fl_Check_Button(2 * WB, 2 * WB + 3 * BH, BW, BH, "Show small axes");
+      gen_butt[2] = new Fl_Check_Button(2 * WB, 2 * WB + 4 * BH, BW, BH, "Enable fast redraw");
+      gen_butt[3] = new Fl_Check_Button(2 * WB, 2 * WB + 5 * BH, BW, BH, "Enable double buffering");
+      gen_butt[4] = new Fl_Check_Button(2 * WB, 2 * WB + 6 * BH, BW, BH, "Use display lists");
+      gen_butt[5] = new Fl_Check_Button(2 * WB, 2 * WB + 7 * BH, BW, BH, "Enable alpha blending");
+      gen_butt[6] = new Fl_Check_Button(2 * WB, 2 * WB + 8 * BH, BW, BH, "Use trackball rotation mode");
       for(i = 0; i < 7; i++) {
         gen_butt[i]->type(FL_TOGGLE_BUTTON);
         gen_butt[i]->down_box(TOGGLE_BOX);
         gen_butt[i]->selection_color(TOGGLE_COLOR);
       }
 
-      gen_butt[13] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 8 * BH, BW, BH, "Show tooltips");
-      gen_butt[13]->type(FL_TOGGLE_BUTTON);
-      gen_butt[13]->down_box(TOGGLE_BOX);
-      gen_butt[13]->selection_color(TOGGLE_COLOR);
+      gen_butt[15] = new Fl_Check_Button(2 * WB, 2 * WB + 9 * BH, BW, BH, "Rotate around center of gravity");
+      gen_butt[15]->type(FL_TOGGLE_BUTTON);
+      gen_butt[15]->down_box(TOGGLE_BOX);
+      gen_butt[15]->selection_color(TOGGLE_COLOR);
 
+      gen_value[8] = new Fl_Value_Input(2 * WB, 2 * WB + 10 * BH, IW / 3, BH);
+      gen_value[9] = new Fl_Value_Input(2 * WB + IW / 3, 2 * WB + 10 * BH, IW / 3, BH);
+      gen_value[10] = new Fl_Value_Input(2 * WB + 2 * IW / 3, 2 * WB + 10 * BH, IW / 3, BH, "Rotation center");
+      gen_value[10]->align(FL_ALIGN_RIGHT);
       o->end();
     }
     {
-      Fl_Group *o =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH,
-                     "Output");
-      gen_butt[7] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 1 * BH, BW, BH,
-                            "Print messages on terminal");
-      gen_butt[8] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 2 * BH, BW, BH,
-                            "Save session information on exit");
-      gen_butt[9] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 3 * BH, BW, BH,
-                            "Save options on exit");
+      Fl_Group *o = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Output");
+      gen_butt[7] = new Fl_Check_Button(2 * WB, 2 * WB + 1 * BH, BW, BH, "Print messages on terminal");
+      gen_butt[8] = new Fl_Check_Button(2 * WB, 2 * WB + 2 * BH, BW, BH, "Save session information on exit");
+      gen_butt[9] = new Fl_Check_Button(2 * WB, 2 * WB + 3 * BH, BW, BH, "Save options on exit");
       for(i = 7; i < 10; i++) {
         gen_butt[i]->type(FL_TOGGLE_BUTTON);
         gen_butt[i]->down_box(TOGGLE_BOX);
         gen_butt[i]->selection_color(TOGGLE_COLOR);
       }
 
-      gen_butt[14] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 4 * BH, BW, BH,
-                            "Ask confirmation before overwriting files");
+      gen_butt[14] = new Fl_Check_Button(2 * WB, 2 * WB + 4 * BH, BW, BH, "Ask confirmation before overwriting files");
       gen_butt[14]->type(FL_TOGGLE_BUTTON);
       gen_butt[14]->down_box(TOGGLE_BOX);
       gen_butt[14]->selection_color(TOGGLE_COLOR);
 
-      gen_value[5] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 5 * BH, IW, BH,
-                           "Message verbosity");
+      gen_value[5] = new Fl_Value_Input(2 * WB, 2 * WB + 5 * BH, IW, BH, "Message verbosity");
       gen_value[5]->minimum(0);
       gen_value[5]->maximum(10);
       gen_value[5]->step(1);
       gen_value[5]->align(FL_ALIGN_RIGHT);
-      gen_input[0] =
-        new Fl_Input(2 * WB, 2 * WB + 6 * BH, IW, BH, "Default file name");
-      gen_input[1] =
-        new Fl_Input(2 * WB, 2 * WB + 7 * BH, IW, BH, "Temporary file");
-      gen_input[2] =
-        new Fl_Input(2 * WB, 2 * WB + 8 * BH, IW, BH, "Error file");
-      gen_input[3] =
-        new Fl_Input(2 * WB, 2 * WB + 9 * BH, IW, BH, "Option file");
-      gen_input[4] =
-        new Fl_Input(2 * WB, 2 * WB + 10 * BH, IW, BH, "Text editor command");
+      gen_input[0] = new Fl_Input(2 * WB, 2 * WB + 6 * BH, IW, BH, "Default file name");
+      gen_input[1] = new Fl_Input(2 * WB, 2 * WB + 7 * BH, IW, BH, "Temporary file");
+      gen_input[2] = new Fl_Input(2 * WB, 2 * WB + 8 * BH, IW, BH, "Error file");
+      gen_input[3] = new Fl_Input(2 * WB, 2 * WB + 9 * BH, IW, BH, "Option file");
+      gen_input[4] = new Fl_Input(2 * WB, 2 * WB + 10 * BH, IW, BH, "Text editor command");
       for(i = 0; i < 5; i++) {
         gen_input[i]->align(FL_ALIGN_RIGHT);
       }
 
-      Fl_Button *b0 =
-        new Fl_Button(width - 2 * BB - 2 * WB, 2 * WB + 9 * BH, 2 * BB, BH,
-                      "Restore default options");
+      Fl_Button *b0 = new Fl_Button(width - 2 * BB - 2 * WB, 2 * WB + 9 * BH, 2 * BB, BH, "Restore default options");
       b0->callback(options_restore_defaults_cb);
 
       o->end();
     }
     {
-      Fl_Group *o =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH,
-                     "Aspect");
+      Fl_Group *o = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Aspect");
       o->hide();
-      gen_butt[10] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 1 * BH, BW, BH,
-                            "Orthographic projection");
-      gen_butt[11] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 2 * BH, BW, BH,
-                            "Perspective projection");
+      gen_butt[10] = new Fl_Check_Button(2 * WB, 2 * WB + 1 * BH, BW, BH, "Orthographic projection");
+      gen_butt[11] = new Fl_Check_Button(2 * WB, 2 * WB + 2 * BH, BW, BH, "Perspective projection");
       for(i = 10; i < 12; i++) {
         gen_butt[i]->type(FL_RADIO_BUTTON);
         gen_butt[i]->down_box(RADIO_BOX);
         gen_butt[i]->selection_color(RADIO_COLOR);
       }
-      gen_value[6] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Point size");
+      gen_value[6] = new Fl_Value_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Point size");
       gen_value[6]->minimum(0.1);
       gen_value[6]->maximum(50);
       gen_value[6]->step(0.1);
-      gen_value[7] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "Line width");
+      gen_value[7] = new Fl_Value_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "Line width");
       gen_value[7]->minimum(0.1);
       gen_value[7]->maximum(50);
       gen_value[7]->step(0.1);
@@ -1494,71 +1423,50 @@ void GUI::create_option_window()
       o->end();
     }
     {
-      Fl_Group *o =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH,
-                     "Colors");
+      Fl_Group *o = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Colors");
       o->hide();
-      gen_value[0] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 1 * BH, IW, BH,
-                           "Predefined color scheme");
+      gen_value[0] = new Fl_Value_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Predefined color scheme");
       gen_value[0]->minimum(0);
       gen_value[0]->maximum(2);
       gen_value[0]->step(1);
       gen_value[0]->align(FL_ALIGN_RIGHT);
       gen_value[0]->callback(general_options_color_scheme_cb);
 
-      Fl_Scroll *s =
-        new Fl_Scroll(2 * WB, 3 * WB + 2 * BH, IW + 20,
-                      height - 5 * WB - 2 * BH);
+      Fl_Scroll *s = new Fl_Scroll(2 * WB, 3 * WB + 2 * BH, IW + 20, height - 5 * WB - 2 * BH);
       i = 0;
       while(GeneralOptions_Color[i].str) {
-        gen_col[i] =
-          new Fl_Button(2 * WB, 3 * WB + (2 + i) * BH, IW, BH,
-                        GeneralOptions_Color[i].str);
-        gen_col[i]->callback(color_cb,
-                             (void *)GeneralOptions_Color[i].function);
+        gen_col[i] = new Fl_Button(2 * WB, 3 * WB + (2 + i) * BH, IW, BH, GeneralOptions_Color[i].str);
+        gen_col[i]->callback(color_cb, (void *)GeneralOptions_Color[i].function);
         i++;
       }
       s->end();
       o->end();
     }
     {
-      Fl_Group *o =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH,
-                     "Light");
+      Fl_Group *o = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Light");
       o->hide();
-      gen_value[1] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 1 * BH, IW, BH,
-                           "Material shininess");
+      gen_value[1] = new Fl_Value_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Material shininess");
       gen_value[1]->minimum(0);
       gen_value[1]->maximum(10);
       gen_value[1]->step(0.1);
-      gen_butt[12] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 2 * BH, BW, BH, "Moving light");
+      gen_value[1]->align(FL_ALIGN_RIGHT);
+      gen_butt[12] = new Fl_Check_Button(2 * WB, 2 * WB + 2 * BH, BW, BH, "Moving light");
       gen_butt[12]->type(FL_TOGGLE_BUTTON);
       gen_butt[12]->down_box(TOGGLE_BOX);
       gen_butt[12]->selection_color(TOGGLE_COLOR);
-      gen_value[2] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 3 * BH, IW, BH,
-                           "Light position X");
+      gen_value[2] = new Fl_Value_Input(2 * WB, 2 * WB + 3 * BH, IW/3, BH);
       gen_value[2]->minimum(-1);
       gen_value[2]->maximum(1);
       gen_value[2]->step(0.01);
-      gen_value[3] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 4 * BH, IW, BH,
-                           "Light position Y");
+      gen_value[3] = new Fl_Value_Input(2 * WB + IW / 3, 2 * WB + 3 * BH, IW/3, BH);
       gen_value[3]->minimum(-1);
       gen_value[3]->maximum(1);
       gen_value[3]->step(0.01);
-      gen_value[4] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 5 * BH, IW, BH,
-                           "Light position Z");
+      gen_value[4] = new Fl_Value_Input(2 * WB + 2 * IW / 3, 2 * WB + 3 * BH, IW/3, BH, "Light position");
       gen_value[4]->minimum(-1);
       gen_value[4]->maximum(1);
       gen_value[4]->step(0.01);
-      for(i = 1; i < 5; i++) {
-        gen_value[i]->align(FL_ALIGN_RIGHT);
-      }
+      gen_value[4]->align(FL_ALIGN_RIGHT);
       o->end();
     }
     o->end();
@@ -1572,59 +1480,35 @@ void GUI::create_option_window()
   {
     Fl_Tabs *o = new Fl_Tabs(WB, WB, width - 2 * WB, height - 2 * WB);
     {
-      Fl_Group *o =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH,
-                     "General");
+      Fl_Group *o = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "General");
       o->hide();
-      geo_butt[8] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 1 * BH, BW, BH,
-                            "Auto coherence (suppress duplicates)");
+      geo_butt[8] = new Fl_Check_Button(2 * WB, 2 * WB + 1 * BH, BW, BH, "Auto coherence (suppress duplicates)");
       geo_butt[8]->type(FL_TOGGLE_BUTTON);
       geo_butt[8]->down_box(TOGGLE_BOX);
       geo_butt[8]->selection_color(TOGGLE_COLOR);
       o->end();
     }
     {
-      Fl_Group *o =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH,
-                     "Visibility");
-      geo_butt[0] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 1 * BH, BW / 2 - WB, BH,
-                            "Points");
-      geo_butt[1] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 2 * BH, BW / 2 - WB, BH,
-                            "Curves");
-      geo_butt[2] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 3 * BH, BW / 2 - WB, BH,
-                            "Surfaces");
-      geo_butt[3] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 4 * BH, BW / 2 - WB, BH,
-                            "Volumes");
-      geo_butt[4] =
-        new Fl_Check_Button(width / 2, 2 * WB + 1 * BH, BW / 2 - WB, BH,
-                            "Point numbers");
-      geo_butt[5] =
-        new Fl_Check_Button(width / 2, 2 * WB + 2 * BH, BW / 2 - WB, BH,
-                            "Curve numbers");
-      geo_butt[6] =
-        new Fl_Check_Button(width / 2, 2 * WB + 3 * BH, BW / 2 - WB, BH,
-                            "Surface numbers");
-      geo_butt[7] =
-        new Fl_Check_Button(width / 2, 2 * WB + 4 * BH, BW / 2 - WB, BH,
-                            "Volume numbers");
+      Fl_Group *o = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Visibility");
+      geo_butt[0] = new Fl_Check_Button(2 * WB, 2 * WB + 1 * BH, BW / 2 - WB, BH, "Points");
+      geo_butt[1] = new Fl_Check_Button(2 * WB, 2 * WB + 2 * BH, BW / 2 - WB, BH, "Curves");
+      geo_butt[2] = new Fl_Check_Button(2 * WB, 2 * WB + 3 * BH, BW / 2 - WB, BH, "Surfaces");
+      geo_butt[3] = new Fl_Check_Button(2 * WB, 2 * WB + 4 * BH, BW / 2 - WB, BH, "Volumes");
+      geo_butt[4] = new Fl_Check_Button(width / 2, 2 * WB + 1 * BH, BW / 2 - WB, BH, "Point numbers");
+      geo_butt[5] = new Fl_Check_Button(width / 2, 2 * WB + 2 * BH, BW / 2 - WB, BH, "Curve numbers");
+      geo_butt[6] = new Fl_Check_Button(width / 2, 2 * WB + 3 * BH, BW / 2 - WB, BH, "Surface numbers");
+      geo_butt[7] = new Fl_Check_Button(width / 2, 2 * WB + 4 * BH, BW / 2 - WB, BH, "Volume numbers");
       for(i = 0; i < 8; i++) {
         geo_butt[i]->type(FL_TOGGLE_BUTTON);
         geo_butt[i]->down_box(TOGGLE_BOX);
         geo_butt[i]->selection_color(TOGGLE_COLOR);
       }
 
-      geo_value[0] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 5 * BH, IW, BH, "Normals");
+      geo_value[0] = new Fl_Value_Input(2 * WB, 2 * WB + 5 * BH, IW, BH, "Normals");
       geo_value[0]->minimum(0);
       geo_value[0]->maximum(100);
       geo_value[0]->step(0.1);
-      geo_value[1] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 6 * BH, IW, BH, "Tangents");
+      geo_value[1] = new Fl_Value_Input(2 * WB, 2 * WB + 6 * BH, IW, BH, "Tangents");
       geo_value[1]->minimum(0);
       geo_value[1]->maximum(100);
       geo_value[1]->step(0.1);
@@ -1634,36 +1518,28 @@ void GUI::create_option_window()
       o->end();
     }
     {
-      Fl_Group *o =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH,
-                     "Aspect");
+      Fl_Group *o = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Aspect");
       o->hide();
-      geo_value[3] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Point size");
+      geo_value[3] = new Fl_Value_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Point size");
       geo_value[3]->minimum(0.1);
       geo_value[3]->maximum(50);
       geo_value[3]->step(0.1);
 
-      geo_value[5] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 2 * BH, IW, BH,
-                           "Highlighted point size");
+      geo_value[5] = new Fl_Value_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Highlighted point size");
       geo_value[5]->minimum(0.1);
       geo_value[5]->maximum(50);
       geo_value[5]->step(0.1);
 
-      geo_choice[0] =
-        new Fl_Choice(2 * WB, 2 * WB + 3 * BH, IW, BH, "Point display");
+      geo_choice[0] = new Fl_Choice(2 * WB, 2 * WB + 3 * BH, IW, BH, "Point display");
       geo_choice[0]->menu(menu_point_display);
       geo_choice[0]->align(FL_ALIGN_RIGHT);
 
-      geo_value[4] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "Line width");
+      geo_value[4] = new Fl_Value_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "Line width");
       geo_value[4]->minimum(0.1);
       geo_value[4]->maximum(50);
       geo_value[4]->step(0.1);
 
-      geo_choice[1] =
-        new Fl_Choice(2 * WB, 2 * WB + 5 * BH, IW, BH, "Line display");
+      geo_choice[1] = new Fl_Choice(2 * WB, 2 * WB + 5 * BH, IW, BH, "Line display");
       geo_choice[1]->menu(menu_line_display);
       geo_choice[1]->align(FL_ALIGN_RIGHT);
 
@@ -1673,28 +1549,20 @@ void GUI::create_option_window()
       o->end();
     }
     {
-      Fl_Group *o =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH,
-                     "Colors");
+      Fl_Group *o = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Colors");
       o->hide();
-      geo_value[2] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 1 * BH, IW, BH,
-                           "Predefined color scheme");
+      geo_value[2] = new Fl_Value_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Predefined color scheme");
       geo_value[2]->minimum(0);
       geo_value[2]->maximum(2);
       geo_value[2]->step(1);
       geo_value[2]->align(FL_ALIGN_RIGHT);
       geo_value[2]->callback(geometry_options_color_scheme_cb);
 
-      Fl_Scroll *s = new Fl_Scroll(2 * WB, 3 * WB + 2 * BH, IW + 20,
-                                   height - 5 * WB - 2 * BH);
+      Fl_Scroll *s = new Fl_Scroll(2 * WB, 3 * WB + 2 * BH, IW + 20, height - 5 * WB - 2 * BH);
       i = 0;
       while(GeometryOptions_Color[i].str) {
-        geo_col[i] =
-          new Fl_Button(2 * WB, 3 * WB + (2 + i) * BH, IW, BH,
-                        GeometryOptions_Color[i].str);
-        geo_col[i]->callback(color_cb,
-                             (void *)GeometryOptions_Color[i].function);
+        geo_col[i] = new Fl_Button(2 * WB, 3 * WB + (2 + i) * BH, IW, BH, GeometryOptions_Color[i].str);
+        geo_col[i]->callback(color_cb, (void *)GeometryOptions_Color[i].function);
         i++;
       }
       s->end();
@@ -1711,32 +1579,22 @@ void GUI::create_option_window()
   {
     Fl_Tabs *o = new Fl_Tabs(WB, WB, width - 2 * WB, height - 2 * WB);
     {
-      Fl_Group *o =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH,
-                     "General");
+      Fl_Group *o = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "General");
       o->hide();
 
-      mesh_value[0] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 1 * BH, IW, BH,
-                           "Number of smoothing steps");
+      mesh_value[0] = new Fl_Value_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Number of smoothing steps");
       mesh_value[0]->minimum(0);
       mesh_value[0]->maximum(100);
       mesh_value[0]->step(1);
-      mesh_value[1] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 2 * BH, IW, BH,
-                           "Mesh scaling factor");
+      mesh_value[1] = new Fl_Value_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Mesh scaling factor");
       mesh_value[1]->minimum(0.001);
       mesh_value[1]->maximum(1000);
       mesh_value[1]->step(0.001);
-      mesh_value[2] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 3 * BH, IW, BH,
-                           "Characteristic length factor");
+      mesh_value[2] = new Fl_Value_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Characteristic length factor");
       mesh_value[2]->minimum(0.001);
       mesh_value[2]->maximum(1000);
       mesh_value[2]->step(0.001);
-      mesh_value[3] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 4 * BH, IW, BH,
-                           "Random perturbation factor");
+      mesh_value[3] = new Fl_Value_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "Random perturbation factor");
       mesh_value[3]->minimum(1.e-6);
       mesh_value[3]->maximum(1.e-1);
       mesh_value[3]->step(1.e-6);
@@ -1744,17 +1602,13 @@ void GUI::create_option_window()
         mesh_value[i]->align(FL_ALIGN_RIGHT);
       }
 
-      mesh_butt[3] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 5 * BH, BW, BH,
-                            "Second order elements");
+      mesh_butt[3] = new Fl_Check_Button(2 * WB, 2 * WB + 5 * BH, BW, BH, "Second order elements");
       mesh_butt[3]->deactivate();       //2nd order elements do not work. Disable the graphical option.
       mesh_butt[3]->type(FL_TOGGLE_BUTTON);
       mesh_butt[3]->down_box(TOGGLE_BOX);
       mesh_butt[3]->selection_color(TOGGLE_COLOR);
 
-      mesh_butt[5] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 6 * BH, BW, BH,
-                            "Constrain background mesh");
+      mesh_butt[5] = new Fl_Check_Button(2 * WB, 2 * WB + 6 * BH, BW, BH, "Constrain background mesh");
       mesh_butt[5]->type(FL_TOGGLE_BUTTON);
       mesh_butt[5]->down_box(TOGGLE_BOX);
       mesh_butt[5]->selection_color(TOGGLE_COLOR);
@@ -1762,19 +1616,12 @@ void GUI::create_option_window()
       o->end();
     }
     {
-      Fl_Group *o =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "2D");
+      Fl_Group *o = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "2D");
       o->hide();
 
-      mesh_butt[0] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 1 * BH, BW, BH,
-                            "Isotropic algorithm");
-      mesh_butt[1] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 2 * BH, BW, BH,
-                            "Isotropic algorithm (Triangle)");
-      mesh_butt[2] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 3 * BH, BW, BH,
-                            "Anisotropic algorithm");
+      mesh_butt[0] = new Fl_Check_Button(2 * WB, 2 * WB + 1 * BH, BW, BH, "Isotropic algorithm");
+      mesh_butt[1] = new Fl_Check_Button(2 * WB, 2 * WB + 2 * BH, BW, BH, "Isotropic algorithm (Triangle)");
+      mesh_butt[2] = new Fl_Check_Button(2 * WB, 2 * WB + 3 * BH, BW, BH, "Anisotropic algorithm");
       for(i = 0; i < 3; i++) {
         mesh_butt[i]->type(FL_RADIO_BUTTON);
         mesh_butt[i]->down_box(RADIO_BOX);
@@ -1783,8 +1630,7 @@ void GUI::create_option_window()
 #if !defined(HAVE_TRIANGLE)
       mesh_butt[1]->deactivate();
 #endif
-      mesh_butt[4] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 4 * BH, BW, BH, "Interactive");
+      mesh_butt[4] = new Fl_Check_Button(2 * WB, 2 * WB + 4 * BH, BW, BH, "Interactive");
       mesh_butt[4]->type(FL_TOGGLE_BUTTON);
       mesh_butt[4]->down_box(TOGGLE_BOX);
       mesh_butt[4]->selection_color(TOGGLE_COLOR);
@@ -1792,33 +1638,15 @@ void GUI::create_option_window()
       o->end();
     }
     {
-      Fl_Group *o =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH,
-                     "Visibility");
-      mesh_butt[6] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 1 * BH, BW / 2 - WB, BH,
-                            "Points");
-      mesh_butt[7] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 2 * BH, BW / 2 - WB, BH,
-                            "Lines");
-      mesh_butt[8] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 3 * BH, BW / 2 - WB, BH,
-                            "Surfaces");
-      mesh_butt[9] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 4 * BH, BW / 2 - WB, BH,
-                            "Volumes");
-      mesh_butt[10] =
-        new Fl_Check_Button(width / 2, 2 * WB + 1 * BH, BW / 2 - WB, BH,
-                            "Point numbers");
-      mesh_butt[11] =
-        new Fl_Check_Button(width / 2, 2 * WB + 2 * BH, BW / 2 - WB, BH,
-                            "Line numbers");
-      mesh_butt[12] =
-        new Fl_Check_Button(width / 2, 2 * WB + 3 * BH, BW / 2 - WB, BH,
-                            "Surface numbers");
-      mesh_butt[13] =
-        new Fl_Check_Button(width / 2, 2 * WB + 4 * BH, BW / 2 - WB, BH,
-                            "Volume numbers");
+      Fl_Group *o = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Visibility");
+      mesh_butt[6] = new Fl_Check_Button(2 * WB, 2 * WB + 1 * BH, BW / 2 - WB, BH, "Points");
+      mesh_butt[7] = new Fl_Check_Button(2 * WB, 2 * WB + 2 * BH, BW / 2 - WB, BH, "Lines");
+      mesh_butt[8] = new Fl_Check_Button(2 * WB, 2 * WB + 3 * BH, BW / 2 - WB, BH, "Surfaces");
+      mesh_butt[9] = new Fl_Check_Button(2 * WB, 2 * WB + 4 * BH, BW / 2 - WB, BH, "Volumes");
+      mesh_butt[10] = new Fl_Check_Button(width / 2, 2 * WB + 1 * BH, BW / 2 - WB, BH, "Point numbers");
+      mesh_butt[11] = new Fl_Check_Button(width / 2, 2 * WB + 2 * BH, BW / 2 - WB, BH, "Line numbers");
+      mesh_butt[12] = new Fl_Check_Button(width / 2, 2 * WB + 3 * BH, BW / 2 - WB, BH, "Surface numbers");
+      mesh_butt[13] = new Fl_Check_Button(width / 2, 2 * WB + 4 * BH, BW / 2 - WB, BH, "Volume numbers");
       for(i = 6; i < 14; i++) {
         mesh_butt[i]->type(FL_TOGGLE_BUTTON);
         mesh_butt[i]->down_box(TOGGLE_BOX);
@@ -1828,20 +1656,15 @@ void GUI::create_option_window()
       mesh_value[4]->minimum(0);
       mesh_value[4]->maximum(1);
       mesh_value[4]->step(0.001);
-      mesh_value[5] =
-        new Fl_Value_Input(2 * WB + IW / 2, 2 * WB + 5 * BH, IW / 2, BH,
-                           "Quality range");
+      mesh_value[5] = new Fl_Value_Input(2 * WB + IW / 2, 2 * WB + 5 * BH, IW / 2, BH, "Quality range");
       mesh_value[5]->minimum(0);
       mesh_value[5]->maximum(1);
       mesh_value[5]->step(0.001);
 
       mesh_value[6] = new Fl_Value_Input(2 * WB, 2 * WB + 6 * BH, IW / 2, BH);
-      mesh_value[7] =
-        new Fl_Value_Input(2 * WB + IW / 2, 2 * WB + 6 * BH, IW / 2, BH,
-                           "Size range");
+      mesh_value[7] = new Fl_Value_Input(2 * WB + IW / 2, 2 * WB + 6 * BH, IW / 2, BH, "Size range");
 
-      mesh_value[8] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 7 * BH, IW, BH, "Normals");
+      mesh_value[8] = new Fl_Value_Input(2 * WB, 2 * WB + 7 * BH, IW, BH, "Normals");
       mesh_value[8]->minimum(0);
       mesh_value[8]->maximum(100);
       mesh_value[8]->step(0.1);
@@ -1849,8 +1672,7 @@ void GUI::create_option_window()
         mesh_value[i]->align(FL_ALIGN_RIGHT);
       }
 
-      mesh_value[13] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 8 * BH, IW, BH, "Tangents");
+      mesh_value[13] = new Fl_Value_Input(2 * WB, 2 * WB + 8 * BH, IW, BH, "Tangents");
       mesh_value[13]->minimum(0);
       mesh_value[13]->maximum(100);
       mesh_value[13]->step(0.1);
@@ -1859,34 +1681,25 @@ void GUI::create_option_window()
       o->end();
     }
     {
-      Fl_Group *o =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH,
-                     "Aspect");
+      Fl_Group *o = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Aspect");
       o->hide();
-      mesh_butt[14] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 1 * BH, BW, BH, "Wireframe");
-      mesh_butt[15] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 2 * BH, BW, BH, "Hidden lines");
-      mesh_butt[16] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 3 * BH, BW, BH, "Solid");
+      mesh_butt[14] = new Fl_Check_Button(2 * WB, 2 * WB + 1 * BH, BW, BH, "Wireframe");
+      mesh_butt[15] = new Fl_Check_Button(2 * WB, 2 * WB + 2 * BH, BW, BH, "Hidden lines");
+      mesh_butt[16] = new Fl_Check_Button(2 * WB, 2 * WB + 3 * BH, BW, BH, "Solid");
       for(i = 14; i < 17; i++) {
         mesh_butt[i]->type(FL_RADIO_BUTTON);
         mesh_butt[i]->down_box(RADIO_BOX);
         mesh_butt[i]->selection_color(RADIO_COLOR);
       }
-      mesh_value[9] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 4 * BH, IW, BH,
-                           "Explode elements");
+      mesh_value[9] = new Fl_Value_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "Explode elements");
       mesh_value[9]->minimum(0);
       mesh_value[9]->maximum(1);
       mesh_value[9]->step(0.01);
-      mesh_value[10] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 5 * BH, IW, BH, "Point size");
+      mesh_value[10] = new Fl_Value_Input(2 * WB, 2 * WB + 5 * BH, IW, BH, "Point size");
       mesh_value[10]->minimum(0.1);
       mesh_value[10]->maximum(50);
       mesh_value[10]->step(0.1);
-      mesh_value[11] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 7 * BH, IW, BH, "Line width");
+      mesh_value[11] = new Fl_Value_Input(2 * WB, 2 * WB + 7 * BH, IW, BH, "Line width");
       mesh_value[11]->minimum(0.1);
       mesh_value[11]->maximum(50);
       mesh_value[11]->step(0.1);
@@ -1894,48 +1707,36 @@ void GUI::create_option_window()
         mesh_value[i]->align(FL_ALIGN_RIGHT);
       }
 
-      mesh_choice[0] =
-        new Fl_Choice(2 * WB, 2 * WB + 6 * BH, IW, BH, "Point display");
+      mesh_choice[0] = new Fl_Choice(2 * WB, 2 * WB + 6 * BH, IW, BH, "Point display");
       mesh_choice[0]->menu(menu_point_display);
       mesh_choice[0]->align(FL_ALIGN_RIGHT);
 
-      mesh_choice[1] =
-        new Fl_Choice(2 * WB, 2 * WB + 8 * BH, IW, BH, "Line display");
+      mesh_choice[1] = new Fl_Choice(2 * WB, 2 * WB + 8 * BH, IW, BH, "Line display");
       mesh_choice[1]->menu(menu_line_display);
       mesh_choice[1]->align(FL_ALIGN_RIGHT);
 
       o->end();
     }
     {
-      Fl_Group *o =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH,
-                     "Colors");
+      Fl_Group *o = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Colors");
       o->hide();
-      mesh_butt[17] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 1 * BH, BW, BH,
-                            "Switch color by entity");
+      mesh_butt[17] = new Fl_Check_Button(2 * WB, 2 * WB + 1 * BH, BW, BH, "Switch color by entity");
       mesh_butt[17]->type(FL_TOGGLE_BUTTON);
       mesh_butt[17]->down_box(TOGGLE_BOX);
       mesh_butt[17]->selection_color(TOGGLE_COLOR);
 
-      mesh_value[12] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 2 * BH, IW, BH,
-                           "Predefined color scheme");
+      mesh_value[12] = new Fl_Value_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Predefined color scheme");
       mesh_value[12]->minimum(0);
       mesh_value[12]->maximum(2);
       mesh_value[12]->step(1);
       mesh_value[12]->align(FL_ALIGN_RIGHT);
       mesh_value[12]->callback(mesh_options_color_scheme_cb);
 
-      Fl_Scroll *s = new Fl_Scroll(2 * WB, 3 * WB + 3 * BH, IW + 20,
-                                   height - 5 * WB - 3 * BH);
+      Fl_Scroll *s = new Fl_Scroll(2 * WB, 3 * WB + 3 * BH, IW + 20, height - 5 * WB - 3 * BH);
       i = 0;
       while(MeshOptions_Color[i].str) {
-        mesh_col[i] =
-          new Fl_Button(2 * WB, 3 * WB + (3 + i) * BH, IW, BH,
-                        MeshOptions_Color[i].str);
-        mesh_col[i]->callback(color_cb,
-                              (void *)MeshOptions_Color[i].function);
+        mesh_col[i] = new Fl_Button(2 * WB, 3 * WB + (3 + i) * BH, IW, BH, MeshOptions_Color[i].str);
+        mesh_col[i]->callback(color_cb, (void *)MeshOptions_Color[i].function);
         i++;
       }
       s->end();
@@ -1952,16 +1753,12 @@ void GUI::create_option_window()
   {
     Fl_Tabs *o = new Fl_Tabs(WB, WB, width - 2 * WB, height - 2 * WB);
     {
-      Fl_Group *o =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH,
-                     "Solver");
-
-      Fl_Box *text =
-        new Fl_Box(FL_NO_BOX, 2 * WB, 3 * WB + 1 * BH, width - 4 * WB, 2 * BH,
-                   "There are no global solver options available yet.\n\n"
-                   "To define your own solver interface, edit the option file.");
-      text->
-        align(FL_ALIGN_LEFT | FL_ALIGN_TOP | FL_ALIGN_INSIDE | FL_ALIGN_WRAP);
+      Fl_Group *o = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Solver");
+
+      Fl_Box *text = new Fl_Box(FL_NO_BOX, 2 * WB, 3 * WB + 1 * BH, width - 4 * WB, 2 * BH,
+				"There are no global solver options available yet.\n\n"
+				"To define your own solver interface, edit the option file.");
+      text->align(FL_ALIGN_LEFT | FL_ALIGN_TOP | FL_ALIGN_INSIDE | FL_ALIGN_WRAP);
       o->end();
     }
     o->end();
@@ -1971,71 +1768,42 @@ void GUI::create_option_window()
 
   // Post-processing options
 
-  post_window =
-    new Fl_Window(BROWSERW, 0, width, height, "Post-processing options");
+  post_window = new Fl_Window(BROWSERW, 0, width, height, "Post-processing options");
   post_window->hide();
   {
     Fl_Tabs *o = new Fl_Tabs(WB, WB, width - 2 * WB, height - 2 * WB);
     {
-      Fl_Group *o =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH,
-                     "Views");
-      post_butt[0] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 1 * BH, BW, BH,
-                            "Independent views");
-      post_butt[1] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 2 * BH, BW, BH,
-                            "Apply next changes to all visible views");
-      post_butt[2] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 3 * BH, BW, BH,
-                            "Apply next changes to all views");
-      post_butt[3] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 4 * BH, BW, BH,
-                            "Force same options for all visible views");
-      post_butt[4] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 5 * BH, BW, BH,
-                            "Force same options for all views");
+      Fl_Group *o = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Views");
+      post_butt[0] = new Fl_Check_Button(2 * WB, 2 * WB + 1 * BH, BW, BH, "Independent views");
+      post_butt[1] = new Fl_Check_Button(2 * WB, 2 * WB + 2 * BH, BW, BH, "Apply next changes to all visible views");
+      post_butt[2] = new Fl_Check_Button(2 * WB, 2 * WB + 3 * BH, BW, BH, "Apply next changes to all views");
+      post_butt[3] = new Fl_Check_Button(2 * WB, 2 * WB + 4 * BH, BW, BH, "Force same options for all visible views");
+      post_butt[4] = new Fl_Check_Button(2 * WB, 2 * WB + 5 * BH, BW, BH, "Force same options for all views");
       for(i = 0; i < 5; i++) {
         post_butt[i]->type(FL_RADIO_BUTTON);
         post_butt[i]->down_box(RADIO_BOX);
         post_butt[i]->selection_color(RADIO_COLOR);
       }
-      /*
-         Fl_Box *text =  new Fl_Box(FL_NO_BOX, 2*WB, 3*WB+6*BH, width-4*WB, 2*BH,
-         "Individual view options are available "
-         "by clicking on the arrow next to each "
-         "view button in the post-processing menu");
-         text->align(FL_ALIGN_LEFT|FL_ALIGN_TOP|FL_ALIGN_INSIDE|FL_ALIGN_WRAP);
-       */
       o->end();
     }
     {
-      Fl_Group *o =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH,
-                     "Smoothing");
-      post_butt[5] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 1 * BH, BW, BH,
-                            "Smooth views during merge");
+      Fl_Group *o = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Smoothing");
+      post_butt[5] = new Fl_Check_Button(2 * WB, 2 * WB + 1 * BH, BW, BH, "Smooth views during merge");
       post_butt[5]->type(FL_TOGGLE_BUTTON);
       post_butt[5]->down_box(TOGGLE_BOX);
       post_butt[5]->selection_color(TOGGLE_COLOR);
       o->end();
     }
     {
-      Fl_Group *o =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH,
-                     "Animation");
+      Fl_Group *o = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Animation");
       o->hide();
-      post_value[0] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Delay");
+      post_value[0] = new Fl_Value_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Delay");
       post_value[0]->minimum(0);
       post_value[0]->maximum(10);
       post_value[0]->step(0.01);
       post_value[0]->align(FL_ALIGN_RIGHT);
 
-      post_butt[6] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 2 * BH, BW, BH,
-                            "Cycle through views instead of time steps");
+      post_butt[6] = new Fl_Check_Button(2 * WB, 2 * WB + 2 * BH, BW, BH, "Cycle through views instead of time steps");
       post_butt[6]->type(FL_TOGGLE_BUTTON);
       post_butt[6]->down_box(TOGGLE_BOX);
       post_butt[6]->selection_color(TOGGLE_COLOR);
@@ -2064,19 +1832,11 @@ void GUI::create_option_window()
     Fl_Tabs *o = new Fl_Tabs(WB, WB, width - 2 * WB, height - 2 * WB);
     // General
     {
-      Fl_Group *o =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH,
-                     "General");
-
-      view_butt[1] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 1 * BH, BW / 2 - WB, BH,
-                            "3D view");
-      view_butt[2] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 2 * BH, BW / 2 - WB, BH,
-                            "2D space table");
-      view_butt[3] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 3 * BH, BW / 2 - WB, BH,
-                            "2D time table");
+      Fl_Group *o = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "General");
+
+      view_butt[1] = new Fl_Check_Button(2 * WB, 2 * WB + 1 * BH, BW / 2 - WB, BH, "3D view");
+      view_butt[2] = new Fl_Check_Button(2 * WB, 2 * WB + 2 * BH, BW / 2 - WB, BH, "2D space table");
+      view_butt[3] = new Fl_Check_Button(2 * WB, 2 * WB + 3 * BH, BW / 2 - WB, BH, "2D time table");
       for(i = 1; i <= 3; i++) {
         view_butt[i]->type(FL_RADIO_BUTTON);
         view_butt[i]->down_box(RADIO_BOX);
@@ -2092,54 +1852,34 @@ void GUI::create_option_window()
       }
 
       int sw = (int)(1.5 * fontsize);
-      view_butt_rep[0] =
-        new Fl_Repeat_Button(2 * WB, 2 * WB + 6 * BH, sw, BH, "-");
+      view_butt_rep[0] = new Fl_Repeat_Button(2 * WB, 2 * WB + 6 * BH, sw, BH, "-");
       //no set_changed since has its own callback
-      view_butt_rep[1] =
-        new Fl_Repeat_Button(2 * WB + IW - sw, 2 * WB + 6 * BH, sw, BH, "+");
+      view_butt_rep[1] = new Fl_Repeat_Button(2 * WB + IW - sw, 2 * WB + 6 * BH, sw, BH, "+");
       //no set_changed since has its own callback
-      view_value[50] =
-        new Fl_Value_Input(2 * WB + sw, 2 * WB + 6 * BH, IW - 2 * sw, BH);
+      view_value[50] = new Fl_Value_Input(2 * WB + sw, 2 * WB + 6 * BH, IW - 2 * sw, BH);
       view_value[50]->align(FL_ALIGN_RIGHT);
       view_value[50]->minimum(0);
       view_value[50]->maximum(0);
       view_value[50]->step(1);
       //no set_changed since has its own callback
-      Fl_Box *a =
-        new Fl_Box(2 * WB + IW, 2 * WB + 6 * BH, IW / 2, BH, "Step");
+      Fl_Box *a = new Fl_Box(2 * WB + IW, 2 * WB + 6 * BH, IW / 2, BH, "Step");
       a->box(FL_NO_BOX);
       a->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE);
 
-      view_value[20] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 7 * BH, IW / 2, BH);
-      view_value[21] =
-        new Fl_Value_Input(2 * WB + IW / 2, 2 * WB + 7 * BH, IW / 2, BH,
-                           "Position");
-      view_value[22] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 8 * BH, IW / 2, BH);
-      view_value[23] =
-        new Fl_Value_Input(2 * WB + IW / 2, 2 * WB + 8 * BH, IW / 2, BH,
-                           "Size");
+      view_value[20] = new Fl_Value_Input(2 * WB, 2 * WB + 7 * BH, IW / 2, BH);
+      view_value[21] = new Fl_Value_Input(2 * WB + IW / 2, 2 * WB + 7 * BH, IW / 2, BH, "Position");
+      view_value[22] = new Fl_Value_Input(2 * WB, 2 * WB + 8 * BH, IW / 2, BH);
+      view_value[23] = new Fl_Value_Input(2 * WB + IW / 2, 2 * WB + 8 * BH, IW / 2, BH, "Size");
       for(i = 20; i <= 23; i++) {
         view_value[i]->align(FL_ALIGN_RIGHT);
         view_value[i]->callback(set_changed_cb, 0);
       }
 
-      view_butt[8] =
-        new Fl_Check_Button(width / 2, 2 * WB + 1 * BH, BW / 2 - WB, BH,
-                            "Show time");
-      view_butt[5] =
-        new Fl_Check_Button(width / 2, 2 * WB + 2 * BH, BW / 2 - WB, BH,
-                            "Show annotations");
-      view_butt[4] =
-        new Fl_Check_Button(width / 2, 2 * WB + 3 * BH, BW / 2 - WB, BH,
-                            "Show scale");
-      view_butt[6] =
-        new Fl_Check_Button(width / 2, 2 * WB + 4 * BH, BW / 2 - WB, BH,
-                            "Transparent scale");
-      view_butt[7] =
-        new Fl_Check_Button(width / 2, 2 * WB + 5 * BH, BW / 2 - WB, BH,
-                            "Auto position");
+      view_butt[8] = new Fl_Check_Button(width / 2, 2 * WB + 1 * BH, BW / 2 - WB, BH, "Show time");
+      view_butt[5] = new Fl_Check_Button(width / 2, 2 * WB + 2 * BH, BW / 2 - WB, BH, "Show annotations");
+      view_butt[4] = new Fl_Check_Button(width / 2, 2 * WB + 3 * BH, BW / 2 - WB, BH, "Show scale");
+      view_butt[6] = new Fl_Check_Button(width / 2, 2 * WB + 4 * BH, BW / 2 - WB, BH, "Transparent scale");
+      view_butt[7] = new Fl_Check_Button(width / 2, 2 * WB + 5 * BH, BW / 2 - WB, BH, "Auto position");
       for(i = 4; i <= 8; i++) {
         view_butt[i]->type(FL_TOGGLE_BUTTON);
         view_butt[i]->down_box(TOGGLE_BOX);
@@ -2151,37 +1891,27 @@ void GUI::create_option_window()
     }
     // 3D
     {
-      view_3d =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "3D");
+      view_3d = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "3D");
       view_3d->hide();
 
-      view_butt[10] =
-        new Fl_Check_Button(width / 2, 2 * WB + 1 * BH, BW / 2 - WB, BH,
-                            "Show elements");
-      view_butt[11] =
-        new Fl_Check_Button(width / 2, 2 * WB + 2 * BH, BW / 2 - WB, BH,
-                            "Enable lighting");
-      view_butt[12] =
-        new Fl_Check_Button(width / 2, 2 * WB + 3 * BH, BW / 2 - WB, BH,
-                            "Smooth normals");
+      view_butt[10] = new Fl_Check_Button(width / 2, 2 * WB + 1 * BH, BW / 2 - WB, BH,"Show elements");
+      view_butt[11] = new Fl_Check_Button(width / 2, 2 * WB + 2 * BH, BW / 2 - WB, BH, "Enable lighting");
+      view_butt[12] = new Fl_Check_Button(width / 2, 2 * WB + 3 * BH, BW / 2 - WB, BH, "Smooth normals");
       for(i = 10; i <= 12; i++) {
         view_butt[i]->type(FL_TOGGLE_BUTTON);
         view_butt[i]->down_box(TOGGLE_BOX);
         view_butt[i]->selection_color(TOGGLE_COLOR);
         view_butt[i]->callback(set_changed_cb, 0);
       }
-      view_value[10] =
-        new Fl_Value_Input(width / 2, 2 * WB + 4 * BH, IW, BH, "Angle");
+      view_value[10] = new Fl_Value_Input(width / 2, 2 * WB + 4 * BH, IW, BH, "Angle");
       view_value[10]->minimum(0.);
       view_value[10]->step(1.);
       view_value[10]->maximum(180.);
-      view_value[11] =
-        new Fl_Value_Input(width / 2, 2 * WB + 5 * BH, IW, BH, "Boundary");
+      view_value[11] = new Fl_Value_Input(width / 2, 2 * WB + 5 * BH, IW, BH, "Boundary");
       view_value[11]->minimum(0);
       view_value[11]->step(1);
       view_value[11]->maximum(3);
-      view_value[12] =
-        new Fl_Value_Input(width / 2, 2 * WB + 6 * BH, IW, BH, "Explode");
+      view_value[12] = new Fl_Value_Input(width / 2, 2 * WB + 6 * BH, IW, BH, "Explode");
       view_value[12]->minimum(0.);
       view_value[12]->step(0.01);
       view_value[12]->maximum(1.);
@@ -2190,39 +1920,17 @@ void GUI::create_option_window()
         view_value[i]->callback(set_changed_cb, 0);
       }
 
-      view_butt[13] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 1 * BH, BW / 2 - WB, BH,
-                            "Show points");
-      view_butt[14] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 2 * BH, BW / 2 - WB, BH,
-                            "Show lines");
-      view_butt[15] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 3 * BH, BW / 2 - WB, BH,
-                            "Show triangles");
-      view_butt[16] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 4 * BH, BW / 2 - WB, BH,
-                            "Show quadrangles");
-      view_butt[17] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 5 * BH, BW / 2 - WB, BH,
-                            "Show tetrahedra");
-      view_butt[18] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 6 * BH, BW / 2 - WB, BH,
-                            "Show hexahedra");
-      view_butt[19] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 7 * BH, BW / 2 - WB, BH,
-                            "Show prisms");
-      view_butt[20] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 8 * BH, BW / 2 - WB, BH,
-                            "Show pyramids");
-      view_butt[21] =
-        new Fl_Check_Button(width / 2, 2 * WB + 7 * BH, BW / 2 - WB, BH,
-                            "Show scalar values");
-      view_butt[22] =
-        new Fl_Check_Button(width / 2, 2 * WB + 8 * BH, BW / 2 - WB, BH,
-                            "Show vector values");
-      view_butt[23] =
-        new Fl_Check_Button(width / 2, 2 * WB + 9 * BH, BW / 2 - WB, BH,
-                            "Show tensor values");
+      view_butt[13] = new Fl_Check_Button(2 * WB, 2 * WB + 1 * BH, BW / 2 - WB, BH, "Show points");
+      view_butt[14] = new Fl_Check_Button(2 * WB, 2 * WB + 2 * BH, BW / 2 - WB, BH, "Show lines");
+      view_butt[15] = new Fl_Check_Button(2 * WB, 2 * WB + 3 * BH, BW / 2 - WB, BH, "Show triangles");
+      view_butt[16] = new Fl_Check_Button(2 * WB, 2 * WB + 4 * BH, BW / 2 - WB, BH, "Show quadrangles");
+      view_butt[17] = new Fl_Check_Button(2 * WB, 2 * WB + 5 * BH, BW / 2 - WB, BH, "Show tetrahedra");
+      view_butt[18] = new Fl_Check_Button(2 * WB, 2 * WB + 6 * BH, BW / 2 - WB, BH, "Show hexahedra");
+      view_butt[19] = new Fl_Check_Button(2 * WB, 2 * WB + 7 * BH, BW / 2 - WB, BH, "Show prisms");
+      view_butt[20] = new Fl_Check_Button(2 * WB, 2 * WB + 8 * BH, BW / 2 - WB, BH, "Show pyramids");
+      view_butt[21] = new Fl_Check_Button(width / 2, 2 * WB + 7 * BH, BW / 2 - WB, BH, "Show scalar values");
+      view_butt[22] = new Fl_Check_Button(width / 2, 2 * WB + 8 * BH, BW / 2 - WB, BH, "Show vector values");
+      view_butt[23] = new Fl_Check_Button(width / 2, 2 * WB + 9 * BH, BW / 2 - WB, BH, "Show tensor values");
       for(i = 13; i <= 23; i++) {
         view_butt[i]->type(FL_TOGGLE_BUTTON);
         view_butt[i]->down_box(TOGGLE_BOX);
@@ -2234,28 +1942,22 @@ void GUI::create_option_window()
     }
     // 2D
     {
-      view_2d =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "2D");
+      view_2d = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "2D");
       view_2d->hide();
 
-      view_input[2] =
-        new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Abscissa name");
+      view_input[2] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Abscissa name");
       view_input[2]->align(FL_ALIGN_RIGHT);
       view_input[2]->callback(set_changed_cb, 0);
 
-      view_input[3] =
-        new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Abscissa format");
+      view_input[3] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Abscissa format");
       view_input[3]->align(FL_ALIGN_RIGHT);
       view_input[3]->callback(set_changed_cb, 0);
 
-      view_value[25] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 3 * BH, IW, BH,
-                           "Abscissa points");
+      view_value[25] = new Fl_Value_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Abscissa points");
       view_value[25]->minimum(0.);
       view_value[25]->step(1);
       view_value[25]->maximum(256);
-      view_value[26] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "Grid mode");
+      view_value[26] = new Fl_Value_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "Grid mode");
       view_value[26]->minimum(0.);
       view_value[26]->step(1);
       view_value[26]->maximum(3);
@@ -2268,13 +1970,10 @@ void GUI::create_option_window()
     }
     // Range
     {
-      view_range =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH,
-                     "Range");
+      view_range = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Range");
       view_range->hide();
 
-      view_value[30] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Intervals");
+      view_value[30] = new Fl_Value_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Intervals");
       view_value[30]->align(FL_ALIGN_RIGHT);
       view_value[30]->minimum(1);
       view_value[30]->maximum(256);
@@ -2288,23 +1987,19 @@ void GUI::create_option_window()
         {"Numeric values", 0, 0, 0},
         {0}
       };
-      view_choice[0] =
-        new Fl_Choice(2 * WB, 2 * WB + 2 * BH, IW, BH, "Intervals type");
+      view_choice[0] = new Fl_Choice(2 * WB, 2 * WB + 2 * BH, IW, BH, "Intervals type");
       view_choice[0]->menu(menu_iso);
       view_choice[0]->align(FL_ALIGN_RIGHT);
       view_choice[0]->callback(set_changed_cb, 0);
 
-      view_butt[34] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 3 * BH, IW, BH, "Custom range");
+      view_butt[34] = new Fl_Check_Button(2 * WB, 2 * WB + 3 * BH, IW, BH, "Custom range");
       view_butt[34]->type(FL_TOGGLE_BUTTON);
       view_butt[34]->down_box(TOGGLE_BOX);
       view_butt[34]->selection_color(TOGGLE_COLOR);
       //no set_changed since customrange has its own callback
 
-      view_value[31] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "Minimum");
-      view_value[32] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 5 * BH, IW, BH, "Maximum");
+      view_value[31] = new Fl_Value_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "Minimum");
+      view_value[32] = new Fl_Value_Input(2 * WB, 2 * WB + 5 * BH, IW, BH, "Maximum");
       for(i = 31; i <= 32; i++) {
         view_value[i]->align(FL_ALIGN_RIGHT);
         view_value[i]->callback(set_changed_cb, 0);
@@ -2316,15 +2011,12 @@ void GUI::create_option_window()
         {"Double logarithmic", 0, 0, 0},
         {0}
       };
-      view_choice[1] =
-        new Fl_Choice(2 * WB, 2 * WB + 6 * BH, IW, BH, "Scale");
+      view_choice[1] = new Fl_Choice(2 * WB, 2 * WB + 6 * BH, IW, BH, "Scale");
       view_choice[1]->menu(menu_scale);
       view_choice[1]->align(FL_ALIGN_RIGHT);
       view_choice[1]->callback(set_changed_cb, 0);
 
-      view_butt[38] =
-        new Fl_Check_Button(2 * WB, 2 * WB + 7 * BH, IW, BH,
-                            "Saturate values");
+      view_butt[38] = new Fl_Check_Button(2 * WB, 2 * WB + 7 * BH, IW, BH, "Saturate values");
       view_butt[38]->type(FL_TOGGLE_BUTTON);
       view_butt[38]->down_box(TOGGLE_BOX);
       view_butt[38]->selection_color(TOGGLE_COLOR);
@@ -2334,22 +2026,14 @@ void GUI::create_option_window()
     }
     // Offset and Raise
     {
-      Fl_Group *o =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH,
-                     "Offset");
+      Fl_Group *o = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Offset");
       o->hide();
-      view_value[40] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "X offset");
-      view_value[41] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Y offset");
-      view_value[42] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Z offset");
-      view_value[43] =
-        new Fl_Value_Input(width / 2, 2 * WB + 1 * BH, IW, BH, "X raise");
-      view_value[44] =
-        new Fl_Value_Input(width / 2, 2 * WB + 2 * BH, IW, BH, "Y raise");
-      view_value[45] =
-        new Fl_Value_Input(width / 2, 2 * WB + 3 * BH, IW, BH, "Z raise");
+      view_value[40] = new Fl_Value_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "X offset");
+      view_value[41] = new Fl_Value_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Y offset");
+      view_value[42] = new Fl_Value_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Z offset");
+      view_value[43] = new Fl_Value_Input(width / 2, 2 * WB + 1 * BH, IW, BH, "X raise");
+      view_value[44] = new Fl_Value_Input(width / 2, 2 * WB + 2 * BH, IW, BH, "Y raise");
+      view_value[45] = new Fl_Value_Input(width / 2, 2 * WB + 3 * BH, IW, BH, "Z raise");
       for(i = 40; i <= 45; i++) {
         view_value[i]->align(FL_ALIGN_RIGHT);
         view_value[i]->callback(set_changed_cb, 0);
@@ -2358,45 +2042,37 @@ void GUI::create_option_window()
     }
     // Aspect
     {
-      Fl_Group *o =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH,
-                     "Aspect");
+      Fl_Group *o = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Aspect");
       o->hide();
 
-      view_value[61] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Point size");
+      view_value[61] = new Fl_Value_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Point size");
       view_value[61]->minimum(0.1);
       view_value[61]->maximum(50);
       view_value[61]->step(0.1);
       view_value[61]->align(FL_ALIGN_RIGHT);
       view_value[61]->callback(set_changed_cb, 0);
 
-      view_choice[5] =
-        new Fl_Choice(2 * WB, 2 * WB + 2 * BH, IW, BH, "Point display");
+      view_choice[5] = new Fl_Choice(2 * WB, 2 * WB + 2 * BH, IW, BH, "Point display");
       view_choice[5]->menu(menu_point_display);
       view_choice[5]->align(FL_ALIGN_RIGHT);
       view_choice[5]->callback(set_changed_cb, 0);
 
-      view_value[62] =
-        new Fl_Value_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Line width");
+      view_value[62] = new Fl_Value_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Line width");
       view_value[62]->minimum(0.1);
       view_value[62]->maximum(50);
       view_value[62]->step(0.1);
       view_value[62]->align(FL_ALIGN_RIGHT);
       view_value[62]->callback(set_changed_cb, 0);
 
-      view_choice[6] =
-        new Fl_Choice(2 * WB, 2 * WB + 4 * BH, IW, BH, "Line display");
+      view_choice[6] = new Fl_Choice(2 * WB, 2 * WB + 4 * BH, IW, BH, "Line display");
       view_choice[6]->menu(menu_line_display);
       view_choice[6]->align(FL_ALIGN_RIGHT);
       view_choice[6]->callback(set_changed_cb, 0);
 
       {
-        view_vector =
-          new Fl_Group(2 * WB, 2 * WB + 4 * BH, width / 2, 5 * BH, 0);
+        view_vector = new Fl_Group(2 * WB, 2 * WB + 4 * BH, width / 2, 5 * BH, 0);
 
-        view_value[60] =
-          new Fl_Value_Input(2 * WB, 2 * WB + 5 * BH, IW, BH, "Vector size");
+        view_value[60] = new Fl_Value_Input(2 * WB, 2 * WB + 5 * BH, IW, BH, "Vector size");
         view_value[60]->minimum(0);
         view_value[60]->align(FL_ALIGN_RIGHT);
         view_value[60]->callback(set_changed_cb, 0);
@@ -2409,8 +2085,7 @@ void GUI::create_option_window()
           {"Displacement", 0, 0, 0},
           {0}
         };
-        view_choice[2] =
-          new Fl_Choice(2 * WB, 2 * WB + 6 * BH, IW, BH, "Vector display");
+        view_choice[2] = new Fl_Choice(2 * WB, 2 * WB + 6 * BH, IW, BH, "Vector display");
         view_choice[2]->menu(menu_vectype);
         view_choice[2]->align(FL_ALIGN_RIGHT);
         view_choice[2]->callback(set_changed_cb, 0);
@@ -2420,8 +2095,7 @@ void GUI::create_option_window()
           {"Vertex centered", 0, 0, 0},
           {0}
         };
-        view_choice[3] =
-          new Fl_Choice(2 * WB, 2 * WB + 7 * BH, IW, BH, "Vector location");
+        view_choice[3] = new Fl_Choice(2 * WB, 2 * WB + 7 * BH, IW, BH, "Vector location");
         view_choice[3]->menu(menu_vecloc);
         view_choice[3]->align(FL_ALIGN_RIGHT);
         view_choice[3]->callback(set_changed_cb, 0);
@@ -2431,8 +2105,7 @@ void GUI::create_option_window()
           //{"Eigenvectors", 0, 0, 0}, //not implemented yet
           {0}
         };
-        view_choice[4] =
-          new Fl_Choice(2 * WB, 2 * WB + 8 * BH, IW, BH, "Tensor display");
+        view_choice[4] = new Fl_Choice(2 * WB, 2 * WB + 8 * BH, IW, BH, "Tensor display");
         view_choice[4]->menu(menu_tensor);
         view_choice[4]->align(FL_ALIGN_RIGHT);
         view_choice[4]->callback(set_changed_cb, 0);
@@ -2444,12 +2117,9 @@ void GUI::create_option_window()
     }
     // Colors
     {
-      Fl_Group *o =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB, "Colors");
+      Fl_Group *o = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB, "Colors");
       o->hide();
-      view_colorbar_window =
-        new Colorbar_Window(2 * WB, 2 * WB + BH, width - 4 * WB,
-                            height - 4 * WB - BH);
+      view_colorbar_window = new Colorbar_Window(2 * WB, 2 * WB + BH, width - 4 * WB, height - 4 * WB - BH);
       view_colorbar_window->end();
       //no set_changed since colorbarwindow has its own callbacks
       o->end();
@@ -2621,94 +2291,56 @@ void GUI::create_statistics_window()
   {
     Fl_Tabs *o = new Fl_Tabs(WB, WB, width - 2 * WB, height - 3 * WB - BH);
     {
-      Fl_Group *o =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH,
-                     "Geometry");
+      Fl_Group *o = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH, "Geometry");
       o->hide();
-      stat_value[num++] =
-        new Fl_Output(2 * WB, 2 * WB + 1 * BH, IW, BH, "Points");
-      stat_value[num++] =
-        new Fl_Output(2 * WB, 2 * WB + 2 * BH, IW, BH, "Curves");
-      stat_value[num++] =
-        new Fl_Output(2 * WB, 2 * WB + 3 * BH, IW, BH, "Surfaces");
-      stat_value[num++] =
-        new Fl_Output(2 * WB, 2 * WB + 4 * BH, IW, BH, "Volumes");
+      stat_value[num++] = new Fl_Output(2 * WB, 2 * WB + 1 * BH, IW, BH, "Points");
+      stat_value[num++] = new Fl_Output(2 * WB, 2 * WB + 2 * BH, IW, BH, "Curves");
+      stat_value[num++] = new Fl_Output(2 * WB, 2 * WB + 3 * BH, IW, BH, "Surfaces");
+      stat_value[num++] = new Fl_Output(2 * WB, 2 * WB + 4 * BH, IW, BH, "Volumes");
       o->end();
     }
     {
-      Fl_Group *o =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH,
-                     "Mesh");
-      stat_value[num++] =
-        new Fl_Output(2 * WB, 2 * WB + 1 * BH, IW, BH, "Nodes on curves");
-      stat_value[num++] =
-        new Fl_Output(2 * WB, 2 * WB + 2 * BH, IW, BH, "Nodes on surfaces");
-      stat_value[num++] =
-        new Fl_Output(2 * WB, 2 * WB + 3 * BH, IW, BH, "Nodes in volumes");
-      stat_value[num++] =
-        new Fl_Output(2 * WB, 2 * WB + 4 * BH, IW, BH, "Triangles");
-      stat_value[num++] =
-        new Fl_Output(2 * WB, 2 * WB + 5 * BH, IW, BH, "Quadrangles");
-      stat_value[num++] =
-        new Fl_Output(2 * WB, 2 * WB + 6 * BH, IW, BH, "Tetrahedra");
-      stat_value[num++] =
-        new Fl_Output(2 * WB, 2 * WB + 7 * BH, IW, BH, "Hexahedra");
-      stat_value[num++] =
-        new Fl_Output(2 * WB, 2 * WB + 8 * BH, IW, BH, "Prisms");
-      stat_value[num++] =
-        new Fl_Output(2 * WB, 2 * WB + 9 * BH, IW, BH, "Pyramids");
-
-      stat_value[num++] =
-        new Fl_Output(2 * WB, 2 * WB + 10 * BH, IW, BH, "Time for 1D mesh");
-      stat_value[num++] =
-        new Fl_Output(2 * WB, 2 * WB + 11 * BH, IW, BH, "Time for 2D mesh");
-      stat_value[num++] =
-        new Fl_Output(2 * WB, 2 * WB + 12 * BH, IW, BH, "Time for 3D mesh");
-
-      stat_value[num++] =
-        new Fl_Output(2 * WB, 2 * WB + 13 * BH, IW, BH, "Gamma factor");
-      stat_value[num++] =
-        new Fl_Output(2 * WB, 2 * WB + 14 * BH, IW, BH, "Eta factor");
-      stat_value[num++] =
-        new Fl_Output(2 * WB, 2 * WB + 15 * BH, IW, BH, "Rho factor");
-
-      Fl_Button *b0 =
-        new Fl_Button(width - BB - 2 * WB, 2 * WB + 13 * BH, BB, BH, "Graph");
+      Fl_Group *o = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH, "Mesh");
+      stat_value[num++] = new Fl_Output(2 * WB, 2 * WB + 1 * BH, IW, BH, "Nodes on curves");
+      stat_value[num++] = new Fl_Output(2 * WB, 2 * WB + 2 * BH, IW, BH, "Nodes on surfaces");
+      stat_value[num++] = new Fl_Output(2 * WB, 2 * WB + 3 * BH, IW, BH, "Nodes in volumes");
+      stat_value[num++] = new Fl_Output(2 * WB, 2 * WB + 4 * BH, IW, BH, "Triangles");
+      stat_value[num++] = new Fl_Output(2 * WB, 2 * WB + 5 * BH, IW, BH, "Quadrangles");
+      stat_value[num++] = new Fl_Output(2 * WB, 2 * WB + 6 * BH, IW, BH, "Tetrahedra");
+      stat_value[num++] = new Fl_Output(2 * WB, 2 * WB + 7 * BH, IW, BH, "Hexahedra");
+      stat_value[num++] = new Fl_Output(2 * WB, 2 * WB + 8 * BH, IW, BH, "Prisms");
+      stat_value[num++] = new Fl_Output(2 * WB, 2 * WB + 9 * BH, IW, BH, "Pyramids");
+
+      stat_value[num++] = new Fl_Output(2 * WB, 2 * WB + 10 * BH, IW, BH, "Time for 1D mesh");
+      stat_value[num++] = new Fl_Output(2 * WB, 2 * WB + 11 * BH, IW, BH, "Time for 2D mesh");
+      stat_value[num++] = new Fl_Output(2 * WB, 2 * WB + 12 * BH, IW, BH, "Time for 3D mesh");
+
+      stat_value[num++] = new Fl_Output(2 * WB, 2 * WB + 13 * BH, IW, BH, "Gamma factor");
+      stat_value[num++] = new Fl_Output(2 * WB, 2 * WB + 14 * BH, IW, BH, "Eta factor");
+      stat_value[num++] = new Fl_Output(2 * WB, 2 * WB + 15 * BH, IW, BH, "Rho factor");
+
+      Fl_Button *b0 = new Fl_Button(width - BB - 2 * WB, 2 * WB + 13 * BH, BB, BH, "Graph");
       b0->callback(statistics_histogram_cb, (void *)0);
-      Fl_Button *b1 =
-        new Fl_Button(width - BB - 2 * WB, 2 * WB + 14 * BH, BB, BH, "Graph");
+      Fl_Button *b1 = new Fl_Button(width - BB - 2 * WB, 2 * WB + 14 * BH, BB, BH, "Graph");
       b1->callback(statistics_histogram_cb, (void *)1);
-      Fl_Button *b2 =
-        new Fl_Button(width - BB - 2 * WB, 2 * WB + 15 * BH, BB, BH, "Graph");
+      Fl_Button *b2 = new Fl_Button(width - BB - 2 * WB, 2 * WB + 15 * BH, BB, BH, "Graph");
       b2->callback(statistics_histogram_cb, (void *)2);
 
       o->end();
     }
     {
-      Fl_Group *o =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH,
-                     "Post-processing");
+      Fl_Group *o = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH, "Post-processing");
       o->hide();
-      stat_value[num++] =
-        new Fl_Output(2 * WB, 2 * WB + 1 * BH, IW, BH, "Views");
-      stat_value[num++] =
-        new Fl_Output(2 * WB, 2 * WB + 2 * BH, IW, BH, "Visible points");
-      stat_value[num++] =
-        new Fl_Output(2 * WB, 2 * WB + 3 * BH, IW, BH, "Visible lines");
-      stat_value[num++] =
-        new Fl_Output(2 * WB, 2 * WB + 4 * BH, IW, BH, "Visible triangles");
-      stat_value[num++] =
-        new Fl_Output(2 * WB, 2 * WB + 5 * BH, IW, BH, "Visible quadrangles");
-      stat_value[num++] =
-        new Fl_Output(2 * WB, 2 * WB + 6 * BH, IW, BH, "Visible tetrahedra");
-      stat_value[num++] =
-        new Fl_Output(2 * WB, 2 * WB + 7 * BH, IW, BH, "Visible hexahedra");
-      stat_value[num++] =
-        new Fl_Output(2 * WB, 2 * WB + 8 * BH, IW, BH, "Visible prisms");
-      stat_value[num++] =
-        new Fl_Output(2 * WB, 2 * WB + 9 * BH, IW, BH, "Visible pyramids");
-      stat_value[num++] =
-        new Fl_Output(2 * WB, 2 * WB + 10 * BH, IW, BH, "Visible strings");
+      stat_value[num++] = new Fl_Output(2 * WB, 2 * WB + 1 * BH, IW, BH, "Views");
+      stat_value[num++] = new Fl_Output(2 * WB, 2 * WB + 2 * BH, IW, BH, "Visible points");
+      stat_value[num++] = new Fl_Output(2 * WB, 2 * WB + 3 * BH, IW, BH, "Visible lines");
+      stat_value[num++] = new Fl_Output(2 * WB, 2 * WB + 4 * BH, IW, BH, "Visible triangles");
+      stat_value[num++] = new Fl_Output(2 * WB, 2 * WB + 5 * BH, IW, BH, "Visible quadrangles");
+      stat_value[num++] = new Fl_Output(2 * WB, 2 * WB + 6 * BH, IW, BH, "Visible tetrahedra");
+      stat_value[num++] = new Fl_Output(2 * WB, 2 * WB + 7 * BH, IW, BH, "Visible hexahedra");
+      stat_value[num++] = new Fl_Output(2 * WB, 2 * WB + 8 * BH, IW, BH, "Visible prisms");
+      stat_value[num++] = new Fl_Output(2 * WB, 2 * WB + 9 * BH, IW, BH, "Visible pyramids");
+      stat_value[num++] = new Fl_Output(2 * WB, 2 * WB + 10 * BH, IW, BH, "Visible strings");
       o->end();
     }
     o->end();
@@ -2720,14 +2352,11 @@ void GUI::create_statistics_window()
   }
 
   {
-    Fl_Return_Button *o =
-      new Fl_Return_Button(width - 2 * BB - 2 * WB, height - BH - WB, BB, BH,
-                           "Update");
+    Fl_Return_Button *o = new Fl_Return_Button(width - 2 * BB - 2 * WB, height - BH - WB, BB, BH, "Update");
     o->callback(statistics_update_cb);
   }
   {
-    Fl_Button *o =
-      new Fl_Button(width - BB - WB, height - BH - WB, BB, BH, "Cancel");
+    Fl_Button *o = new Fl_Button(width - BB - WB, height - BH - WB, BB, BH, "Cancel");
     o->callback(cancel_cb, (void *)stat_window);
   }
 
@@ -2828,29 +2457,21 @@ void GUI::set_statistics()
     p[9] += v->NbT2 + v->NbT3;
     if(v->Visible) {
       if(v->DrawPoints)
-        p[10] += (v->DrawScalars ? v->NbSP : 0) +
-          (v->DrawVectors ? v->NbVP : 0) + (v->DrawTensors ? v->NbTP : 0);
+        p[10] += (v->DrawScalars ? v->NbSP : 0) + (v->DrawVectors ? v->NbVP : 0) + (v->DrawTensors ? v->NbTP : 0);
       if(v->DrawLines)
-        p[11] += (v->DrawScalars ? v->NbSL : 0) +
-          (v->DrawVectors ? v->NbVL : 0) + (v->DrawTensors ? v->NbTL : 0);
+        p[11] += (v->DrawScalars ? v->NbSL : 0) + (v->DrawVectors ? v->NbVL : 0) + (v->DrawTensors ? v->NbTL : 0);
       if(v->DrawTriangles)
-        p[12] += (v->DrawScalars ? v->NbST : 0) +
-          (v->DrawVectors ? v->NbVT : 0) + (v->DrawTensors ? v->NbTT : 0);
+        p[12] += (v->DrawScalars ? v->NbST : 0) + (v->DrawVectors ? v->NbVT : 0) + (v->DrawTensors ? v->NbTT : 0);
       if(v->DrawQuadrangles)
-        p[13] += (v->DrawScalars ? v->NbSQ : 0) +
-          (v->DrawVectors ? v->NbVQ : 0) + (v->DrawTensors ? v->NbTQ : 0);
+        p[13] += (v->DrawScalars ? v->NbSQ : 0) + (v->DrawVectors ? v->NbVQ : 0) + (v->DrawTensors ? v->NbTQ : 0);
       if(v->DrawTetrahedra)
-        p[14] += (v->DrawScalars ? v->NbSS : 0) +
-          (v->DrawVectors ? v->NbVS : 0) + (v->DrawTensors ? v->NbTS : 0);
+        p[14] += (v->DrawScalars ? v->NbSS : 0) + (v->DrawVectors ? v->NbVS : 0) + (v->DrawTensors ? v->NbTS : 0);
       if(v->DrawHexahedra)
-        p[15] += (v->DrawScalars ? v->NbSH : 0) +
-          (v->DrawVectors ? v->NbVH : 0) + (v->DrawTensors ? v->NbTH : 0);
+        p[15] += (v->DrawScalars ? v->NbSH : 0) + (v->DrawVectors ? v->NbVH : 0) + (v->DrawTensors ? v->NbTH : 0);
       if(v->DrawPrisms)
-        p[16] += (v->DrawScalars ? v->NbSI : 0) +
-          (v->DrawVectors ? v->NbVI : 0) + (v->DrawTensors ? v->NbTI : 0);
+        p[16] += (v->DrawScalars ? v->NbSI : 0) + (v->DrawVectors ? v->NbVI : 0) + (v->DrawTensors ? v->NbTI : 0);
       if(v->DrawPyramids)
-        p[17] += (v->DrawScalars ? v->NbSY : 0) +
-          (v->DrawVectors ? v->NbVY : 0) + (v->DrawTensors ? v->NbTY : 0);
+        p[17] += (v->DrawScalars ? v->NbSY : 0) + (v->DrawVectors ? v->NbVY : 0) + (v->DrawTensors ? v->NbTY : 0);
       if(v->DrawStrings)
         p[18] += v->NbT2 + v->NbT3;
     }
@@ -2932,12 +2553,9 @@ PluginDialogBox *GUI::create_plugin_window(GMSH_Plugin * p)
   pdb->main_window->label(nbuffer);
 
   {
-    Fl_Tabs *o =
-      new Fl_Tabs(WB, WB, width - 2 * WB, height - 3 * WB - 1 * BH);
+    Fl_Tabs *o = new Fl_Tabs(WB, WB, width - 2 * WB, height - 3 * WB - 1 * BH);
     {
-      Fl_Group *g =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH,
-                     "Options");
+      Fl_Group *g = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH, "Options");
 
       if(n > 20)
         Msg(GERROR, "Plugin has too many parameters");
@@ -2945,8 +2563,7 @@ PluginDialogBox *GUI::create_plugin_window(GMSH_Plugin * p)
       for(int i = 0; i < n; i++) {
         StringXNumber *sxn;
         sxn = p->GetOption(i);
-        pdb->view_value[i] =
-          new Fl_Value_Input(2 * WB, 2 * WB + (i + 1) * BH, IW, BH, sxn->str);
+        pdb->view_value[i] = new Fl_Value_Input(2 * WB, 2 * WB + (i + 1) * BH, IW, BH, sxn->str);
         pdb->view_value[i]->align(FL_ALIGN_RIGHT);
         pdb->view_value[i]->value(sxn->def);
       }
@@ -2954,12 +2571,9 @@ PluginDialogBox *GUI::create_plugin_window(GMSH_Plugin * p)
       g->end();
     }
     {
-      Fl_Group *g =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH,
-                     "About");
+      Fl_Group *g = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH, "About");
 
-      Fl_Browser *o = new Fl_Browser(2 * WB, 2 * WB + 1 * BH, width - 4 * WB,
-                                     height - 5 * WB - 2 * BH);
+      Fl_Browser *o = new Fl_Browser(2 * WB, 2 * WB + 1 * BH, width - 4 * WB, height - 5 * WB - 2 * BH);
 
       o->add("");
       add_multiline_in_browser(o, "@c@b@.", namep);
@@ -2974,12 +2588,9 @@ PluginDialogBox *GUI::create_plugin_window(GMSH_Plugin * p)
     o->end();
   }
 
-  pdb->run_button =
-    new Fl_Return_Button(width - 2 * BB - 2 * WB, height - BH - WB, BB, BH,
-                         "Run");
+  pdb->run_button = new Fl_Return_Button(width - 2 * BB - 2 * WB, height - BH - WB, BB, BH, "Run");
 
-  Fl_Button *cancel =
-    new Fl_Button(width - BB - WB, height - BH - WB, BB, BH, "Cancel");
+  Fl_Button *cancel = new Fl_Button(width - BB - WB, height - BH - WB, BB, BH, "Cancel");
   cancel->callback(cancel_cb, (void *)pdb->main_window);
 
   pdb->main_window->resizable(new Fl_Box(2 * WB, 2 * WB + BH, 10, 10));
@@ -3018,20 +2629,15 @@ void GUI::create_message_window()
   msg_browser->callback(message_copy_cb);
 
   {
-    Fl_Return_Button *o =
-      new Fl_Return_Button(width - 3 * BB - 3 * WB, height - BH - WB, BB, BH,
-                           "Save");
+    Fl_Return_Button *o = new Fl_Return_Button(width - 3 * BB - 3 * WB, height - BH - WB, BB, BH, "Save");
     o->callback(message_save_cb);
   }
   {
-    Fl_Button *o =
-      new Fl_Button(width - 2 * BB - 2 * WB, height - BH - WB, BB, BH,
-                    "Clear");
+    Fl_Button *o = new Fl_Button(width - 2 * BB - 2 * WB, height - BH - WB, BB, BH, "Clear");
     o->callback(message_clear_cb);
   }
   {
-    Fl_Button *o =
-      new Fl_Button(width - BB - WB, height - BH - WB, BB, BH, "Cancel");
+    Fl_Button *o = new Fl_Button(width - BB - WB, height - BH - WB, BB, BH, "Cancel");
     o->callback(cancel_cb, (void *)msg_window);
   }
 
@@ -3132,14 +2738,10 @@ void GUI::create_visibility_window()
   vis_type = new Fl_Choice(1 * WB, 1 * WB + 0 * BH, brw / 3, BH);
   vis_type->menu(type_table);
 
-  vis_browser_mode =
-    new Fl_Choice(2 * WB + (brw - 2 * WB) / 3, 1 * WB + 0 * BH,
-                  (brw - 2 * WB) / 3, BH);
+  vis_browser_mode = new Fl_Choice(2 * WB + (brw - 2 * WB) / 3, 1 * WB + 0 * BH, (brw - 2 * WB) / 3, BH);
   vis_browser_mode->menu(browser_mode_table);
 
-  vis_butt[0] =
-    new Fl_Check_Button(3 * WB + 2 * (brw - 2 * WB) / 3, 1 * WB + 0 * BH,
-                        (brw - 2 * WB) / 3, BH, "Recursive");
+  vis_butt[0] = new Fl_Check_Button(3 * WB + 2 * (brw - 2 * WB) / 3, 1 * WB + 0 * BH, (brw - 2 * WB) / 3, BH, "Recursive");
   vis_butt[0]->type(FL_TOGGLE_BUTTON);
   vis_butt[0]->down_box(TOGGLE_BOX);
   vis_butt[0]->selection_color(TOGGLE_COLOR);
@@ -3148,56 +2750,39 @@ void GUI::create_visibility_window()
   Fl_Button *o0 = new Fl_Button(1 * WB, 2 * WB + 1 * BH, cols[0], BH, "*");
   o0->callback(visibility_sort_cb, (void *)0);
 
-  Fl_Button *o1 =
-    new Fl_Button(1 * WB + cols[0], 2 * WB + 1 * BH, cols[1], BH, "Type");
-  //Fl_Box *a = new Fl_Box(FL_NO_BOX, 1*WB+15+cols[0]-15-20, 2*WB+1*BH, 15, BH, "@#UpArrow");
-  //a->labeltype(FL_SYMBOL_LABEL);
+  Fl_Button *o1 = new Fl_Button(1 * WB + cols[0], 2 * WB + 1 * BH, cols[1], BH, "Type");
   o1->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE);
   o1->callback(visibility_sort_cb, (void *)1);
 
-  Fl_Button *o2 =
-    new Fl_Button(1 * WB + cols[0] + cols[1], 2 * WB + 1 * BH, cols[2], BH,
-                  "Number");
+  Fl_Button *o2 = new Fl_Button(1 * WB + cols[0] + cols[1], 2 * WB + 1 * BH, cols[2], BH, "Number");
   o2->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE);
   o2->callback(visibility_sort_cb, (void *)2);
 
-  Fl_Button *o3 =
-    new Fl_Button(1 * WB + cols[0] + cols[1] + cols[2], 2 * WB + 1 * BH,
-                  cols[3], BH, "Name");
+  Fl_Button *o3 = new Fl_Button(1 * WB + cols[0] + cols[1] + cols[2], 2 * WB + 1 * BH, cols[3], BH, "Name");
   o3->align(FL_ALIGN_LEFT | FL_ALIGN_INSIDE);
   o3->callback(visibility_sort_cb, (void *)3);
 
-  vis_browser =
-    new Fl_Browser(1 * WB, 2 * WB + 2 * BH, brw, height - 5 * WB - 4 * BH);
+  vis_browser = new Fl_Browser(1 * WB, 2 * WB + 2 * BH, brw, height - 5 * WB - 4 * BH);
   vis_browser->textfont(FL_COURIER);
   vis_browser->type(FL_MULTI_BROWSER);
   vis_browser->column_widths(cols);
 
-  vis_window->
-    resizable(new
-              Fl_Box(width - 3 * WB - 2 * BB - 10, 3 * WB + 2 * BH + 10, 10,
-                     10));
+  vis_window->resizable(new Fl_Box(width - 3 * WB - 2 * BB - 10, 3 * WB + 2 * BH + 10, 10, 10));
   vis_window->size_range(width, 5 * BH + 5 * WB);
 
-  vis_input =
-    new Fl_Input(1 * WB, height - 2 * WB - 2 * BH, (brw - 2 * WB) / 3, BH);
+  vis_input = new Fl_Input(1 * WB, height - 2 * WB - 2 * BH, (brw - 2 * WB) / 3, BH);
   vis_input->callback(visibility_number_cb);
   vis_input->when(FL_WHEN_ENTER_KEY | FL_WHEN_NOT_CHANGED);
 
-  vis_input_mode =
-    new Fl_Choice(2 * WB + (brw - 2 * WB) / 3, height - 2 * WB - 2 * BH,
-                  (brw - 2 * WB) / 3, BH);
+  vis_input_mode = new Fl_Choice(2 * WB + (brw - 2 * WB) / 3, height - 2 * WB - 2 * BH, (brw - 2 * WB) / 3, BH);
   vis_input_mode->menu(input_mode_table);
 
   {
-    Fl_Return_Button *o =
-      new Fl_Return_Button(width - 2 * BB - 2 * WB, height - BH - WB, BB, BH,
-                           "Apply");
+    Fl_Return_Button *o = new Fl_Return_Button(width - 2 * BB - 2 * WB, height - BH - WB, BB, BH, "Apply");
     o->callback(visibility_ok_cb);
   }
   {
-    Fl_Button *o =
-      new Fl_Button(width - BB - WB, height - BH - WB, BB, BH, "Cancel");
+    Fl_Button *o = new Fl_Button(width - BB - WB, height - BH - WB, BB, BH, "Cancel");
     o->callback(cancel_cb, (void *)vis_window);
   }
 
@@ -3229,8 +2814,7 @@ void GUI::create_about_window()
   }
 
   {
-    Fl_Browser *o =
-      new Fl_Browser(WB + 80, WB, width - 2 * WB - 80, height - 3 * WB - BH);
+    Fl_Browser *o = new Fl_Browser(WB + 80, WB, width - 2 * WB - 80, height - 3 * WB - BH);
     o->add("");
     o->add("@c@b@.Gmsh");
     o->add("@c@.A three-dimensional finite element mesh generator");
@@ -3246,13 +2830,11 @@ void GUI::create_about_window()
     o->add("@c@.Please send all questions and bug reports to");
     o->add("@c@b@.gmsh@geuz.org");
     o->add("");
-    sprintf(buffer, "@c@.Version: %d.%d.%d", GMSH_MAJOR_VERSION,
-            GMSH_MINOR_VERSION, GMSH_PATCH_VERSION);
+    sprintf(buffer, "@c@.Version: %d.%d.%d", GMSH_MAJOR_VERSION, GMSH_MINOR_VERSION, GMSH_PATCH_VERSION);
     o->add(buffer);
     sprintf(buffer, "@c@.License: GNU General Public License");
     o->add(buffer);
-    sprintf(buffer, "@c@.Graphical user interface toolkit: FLTK %d.%d.%d",
-            FL_MAJOR_VERSION, FL_MINOR_VERSION, FL_PATCH_VERSION);
+    sprintf(buffer, "@c@.Graphical user interface toolkit: FLTK %d.%d.%d", FL_MAJOR_VERSION, FL_MINOR_VERSION, FL_PATCH_VERSION);
     o->add(buffer);
     sprintf(buffer, "@c@.Build OS: %s", GMSH_OS);
     o->add(buffer);
@@ -3270,14 +2852,12 @@ void GUI::create_about_window()
   }
 
   {
-    Fl_Button *o =
-      new Fl_Button(width - 2*BB - 2*WB, height - BH - WB, BB, BH, "License");
+    Fl_Button *o = new Fl_Button(width - 2*BB - 2*WB, height - BH - WB, BB, BH, "License");
     o->callback(help_license_cb);
   }
 
   {
-    Fl_Return_Button *o =
-      new Fl_Return_Button(width - BB - WB, height - BH - WB, BB, BH, "OK");
+    Fl_Return_Button *o = new Fl_Return_Button(width - BB - WB, height - BH - WB, BB, BH, "OK");
     o->callback(cancel_cb, (void *)about_window);
   }
 
@@ -3307,165 +2887,102 @@ void GUI::create_geometry_context_window(int num)
   int width = 31 * fontsize;
   int height = 5 * WB + 9 * BH;
 
-  context_geometry_window =
-    new Fl_Window(width, height, "Contextual geometry definitions");
+  context_geometry_window = new Fl_Window(width, height, "Contextual geometry definitions");
   context_geometry_window->box(WINDOW_BOX);
   {
     Fl_Tabs *o = new Fl_Tabs(WB, WB, width - 2 * WB, height - 3 * WB - BH);
     // 0: Parameter
     {
-      g[0] =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH,
-                     "Parameter");
-      context_geometry_input[0] =
-        new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Name");
-      context_geometry_input[1] =
-        new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Value");
+      g[0] = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH, "Parameter");
+      context_geometry_input[0] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Name");
+      context_geometry_input[1] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Value");
       for(i = 0; i < 2; i++) {
         context_geometry_input[i]->align(FL_ALIGN_RIGHT);
       }
       {
-        Fl_Return_Button *o =
-          new Fl_Return_Button(width - BB - 2 * WB, 2 * WB + 7 * BH, BB, BH,
-                               "Add");
+        Fl_Return_Button *o = new Fl_Return_Button(width - BB - 2 * WB, 2 * WB + 7 * BH, BB, BH, "Add");
         o->callback(con_geometry_define_parameter_cb);
       }
       g[0]->end();
     }
     // 1: Point
     {
-      g[1] =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH,
-                     "Point");
-      context_geometry_input[2] =
-        new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "X coordinate");
-      context_geometry_input[3] =
-        new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Y coordinate");
-      context_geometry_input[4] =
-        new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Z coordinate");
-      context_geometry_input[5] =
-        new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH,
-                     "Characteristic length");
+      g[1] = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH, "Point");
+      context_geometry_input[2] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "X coordinate");
+      context_geometry_input[3] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Y coordinate");
+      context_geometry_input[4] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Z coordinate");
+      context_geometry_input[5] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "Characteristic length");
       for(i = 2; i < 6; i++) {
         context_geometry_input[i]->align(FL_ALIGN_RIGHT);
       }
       {
-        Fl_Return_Button *o =
-          new Fl_Return_Button(width - BB - 2 * WB, 2 * WB + 7 * BH, BB, BH,
-                               "Add");
+        Fl_Return_Button *o = new Fl_Return_Button(width - BB - 2 * WB, 2 * WB + 7 * BH, BB, BH, "Add");
         o->callback(con_geometry_define_point_cb);
       }
       g[1]->end();
     }
     // 2: Translation
     {
-      g[2] =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH,
-                     "Translation");
-      context_geometry_input[6] =
-        new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "X component");
-      context_geometry_input[7] =
-        new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Y component");
-      context_geometry_input[8] =
-        new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Z component");
+      g[2] = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH, "Translation");
+      context_geometry_input[6] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "X component");
+      context_geometry_input[7] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Y component");
+      context_geometry_input[8] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Z component");
       for(i = 6; i < 9; i++) {
         context_geometry_input[i]->align(FL_ALIGN_RIGHT);
       }
       {
-        Fl_Return_Button *o =
-          new Fl_Return_Button(width - BB - 2 * WB, 2 * WB + 7 * BH, BB, BH,
-                               "Set");
+        Fl_Return_Button *o = new Fl_Return_Button(width - BB - 2 * WB, 2 * WB + 7 * BH, BB, BH, "Set");
         o->callback(con_geometry_define_translation_cb);
       }
       g[2]->end();
     }
     // 3: Rotation
     {
-      g[3] =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH,
-                     "Rotation");
-      context_geometry_input[9] =
-        new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH,
-                     "X coordinate of an axis point");
-      context_geometry_input[10] =
-        new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH,
-                     "Y coordinate of an axis point");
-      context_geometry_input[11] =
-        new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH,
-                     "Z coordinate of an axis point");
-      context_geometry_input[12] =
-        new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH,
-                     "X component of direction");
-      context_geometry_input[13] =
-        new Fl_Input(2 * WB, 2 * WB + 5 * BH, IW, BH,
-                     "Y component of direction");
-      context_geometry_input[14] =
-        new Fl_Input(2 * WB, 2 * WB + 6 * BH, IW, BH,
-                     "Z component of direction");
-      context_geometry_input[15] =
-        new Fl_Input(2 * WB, 2 * WB + 7 * BH, IW, BH, "Angle in radians");
+      g[3] = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH, "Rotation");
+      context_geometry_input[9] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "X coordinate of an axis point");
+      context_geometry_input[10] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Y coordinate of an axis point");
+      context_geometry_input[11] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Z coordinate of an axis point");
+      context_geometry_input[12] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "X component of direction");
+      context_geometry_input[13] = new Fl_Input(2 * WB, 2 * WB + 5 * BH, IW, BH, "Y component of direction");
+      context_geometry_input[14] = new Fl_Input(2 * WB, 2 * WB + 6 * BH, IW, BH, "Z component of direction");
+      context_geometry_input[15] = new Fl_Input(2 * WB, 2 * WB + 7 * BH, IW, BH, "Angle in radians");
       for(i = 9; i < 16; i++) {
         context_geometry_input[i]->align(FL_ALIGN_RIGHT);
       }
       {
-        Fl_Return_Button *o =
-          new Fl_Return_Button(width - BB - 2 * WB, 2 * WB + 7 * BH, BB, BH,
-                               "Set");
+        Fl_Return_Button *o = new Fl_Return_Button(width - BB - 2 * WB, 2 * WB + 7 * BH, BB, BH, "Set");
         o->callback(con_geometry_define_rotation_cb);
       }
       g[3]->end();
     }
     // 4: Scale
     {
-      g[4] =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH,
-                     "Scale");
-      context_geometry_input[16] =
-        new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH,
-                     "X component of direction");
-      context_geometry_input[17] =
-        new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH,
-                     "Y component of direction");
-      context_geometry_input[18] =
-        new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH,
-                     "Z component of direction");
-      context_geometry_input[19] =
-        new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "Factor");
+      g[4] = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH, "Scale");
+      context_geometry_input[16] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "X component of direction");
+      context_geometry_input[17] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Y component of direction");
+      context_geometry_input[18] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "Z component of direction");
+      context_geometry_input[19] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "Factor");
       for(i = 16; i < 20; i++) {
         context_geometry_input[i]->align(FL_ALIGN_RIGHT);
       }
       {
-        Fl_Return_Button *o =
-          new Fl_Return_Button(width - BB - 2 * WB, 2 * WB + 7 * BH, BB, BH,
-                               "Set");
+        Fl_Return_Button *o = new Fl_Return_Button(width - BB - 2 * WB, 2 * WB + 7 * BH, BB, BH, "Set");
         o->callback(con_geometry_define_scale_cb);
       }
       g[4]->end();
     }
     // 5: Symmetry
     {
-      g[5] =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH,
-                     "Symmetry");
-      context_geometry_input[20] =
-        new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH,
-                     "1st plane equation coefficient");
-      context_geometry_input[21] =
-        new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH,
-                     "2nd plane equation coefficient");
-      context_geometry_input[22] =
-        new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH,
-                     "3rd plane equation coefficient");
-      context_geometry_input[23] =
-        new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH,
-                     "4th plane equation coefficient");
+      g[5] = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH, "Symmetry");
+      context_geometry_input[20] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "1st plane equation coefficient");
+      context_geometry_input[21] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "2nd plane equation coefficient");
+      context_geometry_input[22] = new Fl_Input(2 * WB, 2 * WB + 3 * BH, IW, BH, "3rd plane equation coefficient");
+      context_geometry_input[23] = new Fl_Input(2 * WB, 2 * WB + 4 * BH, IW, BH, "4th plane equation coefficient");
       for(i = 20; i < 24; i++) {
         context_geometry_input[i]->align(FL_ALIGN_RIGHT);
       }
       {
-        Fl_Return_Button *o =
-          new Fl_Return_Button(width - BB - 2 * WB, 2 * WB + 7 * BH, BB, BH,
-                               "Set");
+        Fl_Return_Button *o = new Fl_Return_Button(width - BB - 2 * WB, 2 * WB + 7 * BH, BB, BH, "Set");
         o->callback(con_geometry_define_symmetry_cb);
       }
       g[5]->end();
@@ -3474,8 +2991,7 @@ void GUI::create_geometry_context_window(int num)
   }
 
   {
-    Fl_Button *o =
-      new Fl_Button(width - BB - WB, height - BH - WB, BB, BH, "Cancel");
+    Fl_Button *o = new Fl_Button(width - BB - WB, height - BH - WB, BB, BH, "Cancel");
     o->callback(cancel_cb, (void *)context_geometry_window);
   }
 
@@ -3484,8 +3000,7 @@ void GUI::create_geometry_context_window(int num)
   g[num]->show();
 
   if(CTX.center_windows)
-    context_geometry_window->position(m_window->x() + m_window->w() / 2 -
-                                      width / 2,
+    context_geometry_window->position(m_window->x() + m_window->w() / 2 - width / 2,
                                       m_window->y() + 9 * BH - height / 2);
   context_geometry_window->end();
   context_geometry_window->show();
@@ -3510,34 +3025,25 @@ void GUI::create_mesh_context_window(int num)
   int width = 31 * fontsize;
   int height = 5 * WB + 5 * BH;
 
-  context_mesh_window =
-    new Fl_Window(width, height, "Contextual mesh definitions");
+  context_mesh_window = new Fl_Window(width, height, "Contextual mesh definitions");
   context_mesh_window->box(WINDOW_BOX);
   {
     Fl_Tabs *o = new Fl_Tabs(WB, WB, width - 2 * WB, height - 3 * WB - BH);
     // 0: Characteristic length
     {
-      g[0] =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH,
-                     "Characteristic length");
-      context_mesh_input[0] =
-        new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Value");
+      g[0] = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH, "Characteristic length");
+      context_mesh_input[0] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Value");
       context_mesh_input[0]->align(FL_ALIGN_RIGHT);
       {
-        Fl_Return_Button *o =
-          new Fl_Return_Button(width - BB - 2 * WB, 2 * WB + 3 * BH, BB, BH,
-                               "Set");
+        Fl_Return_Button *o = new Fl_Return_Button(width - BB - 2 * WB, 2 * WB + 3 * BH, BB, BH, "Set");
         o->callback(con_mesh_define_length_cb);
       }
       g[0]->end();
     }
     // 1: Transfinite line
     {
-      g[1] =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH,
-                     "Transfinite line");
-      context_mesh_input[1] =
-        new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Number of points");
+      g[1] = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH, "Transfinite line");
+      context_mesh_input[1] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Number of points");
       context_mesh_input[2] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH);
       for(i = 1; i < 3; i++) {
         context_mesh_input[i]->align(FL_ALIGN_RIGHT);
@@ -3547,29 +3053,21 @@ void GUI::create_mesh_context_window(int num)
         {"Bump", 0, 0, 0},
         {0}
       };
-      context_mesh_choice[0] =
-        new Fl_Choice(2 * WB + IW, 2 * WB + 2 * BH, IW, BH);
+      context_mesh_choice[0] = new Fl_Choice(2 * WB + IW, 2 * WB + 2 * BH, IW, BH);
       context_mesh_choice[0]->menu(menu_trsf_mesh);
       {
-        Fl_Return_Button *o =
-          new Fl_Return_Button(width - BB - 2 * WB, 2 * WB + 3 * BH, BB, BH,
-                               "Set");
+        Fl_Return_Button *o = new Fl_Return_Button(width - BB - 2 * WB, 2 * WB + 3 * BH, BB, BH, "Set");
         o->callback(con_mesh_define_transfinite_line_cb);
       }
       g[1]->end();
     }
     // 2: Transfinite volume
     {
-      g[2] =
-        new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH,
-                     "Transfinite volume");
-      context_mesh_input[3] =
-        new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Volume number");
+      g[2] = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH, "Transfinite volume");
+      context_mesh_input[3] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Volume number");
       context_mesh_input[3]->align(FL_ALIGN_RIGHT);
       {
-        Fl_Return_Button *o =
-          new Fl_Return_Button(width - BB - 2 * WB, 2 * WB + 3 * BH, BB, BH,
-                               "Set");
+        Fl_Return_Button *o = new Fl_Return_Button(width - BB - 2 * WB, 2 * WB + 3 * BH, BB, BH, "Set");
         o->callback(con_mesh_define_transfinite_volume_cb);
       }
       g[2]->end();
@@ -3578,8 +3076,7 @@ void GUI::create_mesh_context_window(int num)
   }
 
   {
-    Fl_Button *o =
-      new Fl_Button(width - BB - WB, height - BH - WB, BB, BH, "Cancel");
+    Fl_Button *o = new Fl_Button(width - BB - WB, height - BH - WB, BB, BH, "Cancel");
     o->callback(cancel_cb, (void *)context_mesh_window);
   }
 
@@ -3588,8 +3085,7 @@ void GUI::create_mesh_context_window(int num)
   g[num]->show();
 
   if(CTX.center_windows)
-    context_mesh_window->position(m_window->x() + m_window->w() / 2 -
-                                  width / 2,
+    context_mesh_window->position(m_window->x() + m_window->w() / 2 - width / 2,
                                   m_window->y() + 9 * BH - height / 2);
   context_mesh_window->end();
   context_mesh_window->show();
@@ -3622,36 +3118,25 @@ void GUI::create_solver_window(int num)
     newrow = 1;
 
   int width = 5 * BBS + 6 * WB;
-  int height =
-    (8 + SINFO[num].nboptions + newrow) * WB + (6 + SINFO[num].nboptions +
-                                                newrow) * BH;
+  int height = (8 + SINFO[num].nboptions + newrow) * WB + (6 + SINFO[num].nboptions + newrow) * BH;
   if(height < 7 * WB + 7 * BH)
     height = 7 * WB + 7 * BH;   //minimum height required by Options tab
 
   solver[num].window = new Fl_Window(width, height);
   solver[num].window->box(WINDOW_BOX);
   {
-    Fl_Tabs *o = new Fl_Tabs(WB, WB, width - 2 * WB,
-                             height - (3 + newrow) * WB - (1 + newrow) * BH);
+    Fl_Tabs *o = new Fl_Tabs(WB, WB, width - 2 * WB, height - (3 + newrow) * WB - (1 + newrow) * BH);
     {
-      g[0] =
-        new Fl_Group(WB, WB + BH, width - 2 * WB,
-                     height - (3 + newrow) * WB - (2 + newrow) * BH,
-                     "General");
-
-      solver[num].input[0] =
-        new Fl_Input(2 * WB, 2 * WB + 1 * BH, LL, BH, "Problem");
-      Fl_Button *b1 =
-        new Fl_Button(2 * WB, 3 * WB + 2 * BH, BB, BH, "Choose");
+      g[0] = new Fl_Group(WB, WB + BH, width - 2 * WB, height - (3 + newrow) * WB - (2 + newrow) * BH, "General");
+
+      solver[num].input[0] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, LL, BH, "Problem");
+      Fl_Button *b1 = new Fl_Button(2 * WB, 3 * WB + 2 * BH, BB, BH, "Choose");
       b1->callback(solver_file_open_cb, (void *)num);
-      Fl_Button *b2 =
-        new Fl_Button(3 * WB + BB, 3 * WB + 2 * BH, BB, BH, "Edit");
+      Fl_Button *b2 = new Fl_Button(3 * WB + BB, 3 * WB + 2 * BH, BB, BH, "Edit");
       b2->callback(solver_file_edit_cb, (void *)num);
 
-      solver[num].input[1] =
-        new Fl_Input(2 * WB, 4 * WB + 3 * BH, LL, BH, "Mesh");
-      Fl_Button *b3 =
-        new Fl_Button(2 * WB, 5 * WB + 4 * BH, BB, BH, "Choose");
+      solver[num].input[1] = new Fl_Input(2 * WB, 4 * WB + 3 * BH, LL, BH, "Mesh");
+      Fl_Button *b3 = new Fl_Button(2 * WB, 5 * WB + 4 * BH, BB, BH, "Choose");
       b3->callback(solver_choose_mesh_cb, (void *)num);
 
       for(i = 0; i < 2; i++) {
@@ -3659,35 +3144,23 @@ void GUI::create_solver_window(int num)
       }
 
       for(i = 0; i < SINFO[num].nboptions; i++) {
-        solver[num].choice[i] =
-          new Fl_Choice(2 * WB, (6 + i) * WB + (5 + i) * BH, LL, BH,
-                        SINFO[num].option_name[i]);
+        solver[num].choice[i] = new Fl_Choice(2 * WB, (6 + i) * WB + (5 + i) * BH, LL, BH, SINFO[num].option_name[i]);
         solver[num].choice[i]->align(FL_ALIGN_RIGHT);
       }
 
       g[0]->end();
     }
     {
-      g[1] =
-        new Fl_Group(WB, WB + BH, width - 2 * WB,
-                     height - (3 + newrow) * WB - (2 + newrow) * BH,
-                     "Options");
+      g[1] = new Fl_Group(WB, WB + BH, width - 2 * WB, height - (3 + newrow) * WB - (2 + newrow) * BH, "Options");
 
-      solver[num].input[2] =
-        new Fl_Input(2 * WB, 2 * WB + 1 * BH, LL, BH, "Executable");
+      solver[num].input[2] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, LL, BH, "Executable");
       solver[num].input[2]->align(FL_ALIGN_RIGHT);
       Fl_Button *b = new Fl_Button(2 * WB, 3 * WB + 2 * BH, BB, BH, "Choose");
       b->callback(solver_choose_executable_cb, (void *)num);
 
-      solver[num].butt[2] =
-        new Fl_Check_Button(2 * WB, 4 * WB + 3 * BH, LL, BH,
-                            "Client/server connection");
-      solver[num].butt[0] =
-        new Fl_Check_Button(2 * WB, 4 * WB + 4 * BH, LL, BH,
-                            "Automatic message display");
-      solver[num].butt[1] =
-        new Fl_Check_Button(2 * WB, 4 * WB + 5 * BH, LL, BH,
-                            "Automatic view merge");
+      solver[num].butt[2] = new Fl_Check_Button(2 * WB, 4 * WB + 3 * BH, LL, BH, "Client/server connection");
+      solver[num].butt[0] = new Fl_Check_Button(2 * WB, 4 * WB + 4 * BH, LL, BH, "Automatic message display");
+      solver[num].butt[1] = new Fl_Check_Button(2 * WB, 4 * WB + 5 * BH, LL, BH, "Automatic view merge");
       for(i = 0; i < 3; i++) {
         solver[num].butt[i]->type(FL_TOGGLE_BUTTON);
         solver[num].butt[i]->down_box(TOGGLE_BOX);
@@ -3695,32 +3168,24 @@ void GUI::create_solver_window(int num)
       }
 
       {
-        Fl_Return_Button *o = new Fl_Return_Button(width - 2 * BB - 3 * WB,
-                                                   height - (3 +
-                                                             newrow) * WB -
-                                                   (2 + newrow) * BH, BB, BH,
-                                                   "Apply");
+        Fl_Return_Button *o = new Fl_Return_Button(width - 2 * BB - 3 * WB, 
+						   height - (3 + newrow) * WB - (2 + newrow) * BH, 
+						   BB, BH, "Apply");
         o->callback(solver_ok_cb, (void *)num);
       }
       {
         Fl_Button *o = new Fl_Button(width - BB - 2 * WB,
-                                     height - (3 + newrow) * WB - (2 +
-                                                                   newrow) *
-                                     BH,
-                                     BB, BH, "Save");
+                                     height - (3 + newrow) * WB - (2 + newrow) * BH,
+				     BB, BH, "Save");
         o->callback(options_save_cb);
       }
       g[1]->end();
     }
     {
-      g[2] =
-        new Fl_Group(WB, WB + BH, width - 2 * WB,
-                     height - (3 + newrow) * WB - (2 + newrow) * BH, "About");
+      g[2] = new Fl_Group(WB, WB + BH, width - 2 * WB, height - (3 + newrow) * WB - (2 + newrow) * BH, "About");
 
       Fl_Browser *o = new Fl_Browser(2 * WB, 2 * WB + 1 * BH, width - 4 * WB,
-                                     height - (5 + newrow) * WB - (2 +
-                                                                   newrow) *
-                                     BH);
+                                     height - (5 + newrow) * WB - (2 + newrow) * BH);
       o->add("");
       add_multiline_in_browser(o, "@c@b@.", SINFO[num].name);
       o->add("");
@@ -3737,32 +3202,25 @@ void GUI::create_solver_window(int num)
     if(strlen(SINFO[num].button_name[i])) {
       arg[num][i][0] = num;
       arg[num][i][1] = i;
-      solver[num].command[nb] =
-        new Fl_Button(width - (1 + nb + 2 * !newrow) * BBS -
-                      (1 + nb + 2 * !newrow) * WB,
-                      height - (1 + newrow) * BH - (1 + newrow) * WB, BBS, BH,
-                      SINFO[num].button_name[i]);
-      solver[num].command[nb]->callback(solver_command_cb,
-                                        (void *)arg[num][i]);
+      solver[num].command[nb] = new Fl_Button(width - (1 + nb + 2 * !newrow) * BBS - (1 + nb + 2 * !newrow) * WB,
+					      height - (1 + newrow) * BH - (1 + newrow) * WB, BBS, BH,
+					      SINFO[num].button_name[i]);
+      solver[num].command[nb]->callback(solver_command_cb, (void *)arg[num][i]);
       nb++;
     }
   }
 
   {
-    Fl_Button *o =
-      new Fl_Button(width - 2 * BBS - 2 * WB, height - BH - WB, BBS, BH,
-                    "Kill");
+    Fl_Button *o = new Fl_Button(width - 2 * BBS - 2 * WB, height - BH - WB, BBS, BH, "Kill");
     o->callback(solver_kill_cb, (void *)num);
   }
   {
-    Fl_Button *o =
-      new Fl_Button(width - BBS - WB, height - BH - WB, BBS, BH, "Cancel");
+    Fl_Button *o = new Fl_Button(width - BBS - WB, height - BH - WB, BBS, BH, "Cancel");
     o->callback(cancel_cb, (void *)solver[num].window);
   }
 
   if(CTX.center_windows)
-    solver[num].window->position(m_window->x() + m_window->w() / 2 -
-                                 width / 2,
+    solver[num].window->position(m_window->x() + m_window->w() / 2 - width / 2,
                                  m_window->y() + 9 * BH - height / 2);
   solver[num].window->end();
 }
diff --git a/Geo/MinMax.cpp b/Geo/MinMax.cpp
index 7db11770086d492e38079d37c549a1c4cae48b39..278123c92a8bb2abcd80179d67d66a7b00902645 100644
--- a/Geo/MinMax.cpp
+++ b/Geo/MinMax.cpp
@@ -1,4 +1,4 @@
-// $Id: MinMax.cpp,v 1.12 2003-03-21 00:52:38 geuzaine Exp $
+// $Id: MinMax.cpp,v 1.13 2003-03-26 16:57:07 geuzaine Exp $
 //
 // Copyright (C) 1997-2003 C. Geuzaine, J.-F. Remacle
 //
@@ -36,6 +36,10 @@ void minmax(void *a, void *b)
   CTX.max[1] = (CTX.max[1] > v->Pos.Y) ? CTX.max[1] : v->Pos.Y;
   CTX.min[2] = (CTX.min[2] < v->Pos.Z) ? CTX.min[2] : v->Pos.Z;
   CTX.max[2] = (CTX.max[2] > v->Pos.Z) ? CTX.max[2] : v->Pos.Z;
+
+  CTX.cg[0] += v->Pos.X;
+  CTX.cg[1] += v->Pos.Y;
+  CTX.cg[2] += v->Pos.Z;
 }
 
 void CalculateMinMax(Tree_T * t, double *bbox)
@@ -44,6 +48,10 @@ void CalculateMinMax(Tree_T * t, double *bbox)
   double frac;
   int exp;
 
+  CTX.cg[0] = 0.0;
+  CTX.cg[1] = 0.0;
+  CTX.cg[2] = 0.0;
+
   if(!Tree_Nbr(t)) {
     if(!bbox || (bbox[0] > bbox[1])) {  //the bbox is wrong
       CTX.min[0] = CTX.min[1] = CTX.min[2] = -1.;
@@ -59,6 +67,10 @@ void CalculateMinMax(Tree_T * t, double *bbox)
       CTX.max[1] = bbox[3];
       CTX.min[2] = bbox[4];
       CTX.max[2] = bbox[5];
+
+      CTX.cg[0] = (CTX.min[0] + CTX.max[0])/2.;
+      CTX.cg[1] = (CTX.min[1] + CTX.max[1])/2.;
+      CTX.cg[2] = (CTX.min[2] + CTX.max[2])/2.;
     }
   }
   else {
@@ -67,6 +79,10 @@ void CalculateMinMax(Tree_T * t, double *bbox)
     CTX.min[1] = CTX.max[1] = v->Pos.Y;
     CTX.min[2] = CTX.max[2] = v->Pos.Z;
     Tree_Action(t, minmax);
+    int nb = Tree_Nbr(t);
+    CTX.cg[0] /= nb;
+    CTX.cg[1] /= nb;
+    CTX.cg[2] /= nb;
   }
 
   CTX.range[0] = CTX.max[0] - CTX.min[0];
diff --git a/Graphics/Draw.cpp b/Graphics/Draw.cpp
index e4e63f027bec1f762d1374a4033bb62649d2e1f3..bc7beb42c3f7c9e7078e2707615615dad8ce36c3 100644
--- a/Graphics/Draw.cpp
+++ b/Graphics/Draw.cpp
@@ -1,4 +1,4 @@
-// $Id: Draw.cpp,v 1.41 2003-03-24 20:44:09 geuzaine Exp $
+// $Id: Draw.cpp,v 1.42 2003-03-26 16:57:07 geuzaine Exp $
 //
 // Copyright (C) 1997-2003 C. Geuzaine, J.-F. Remacle
 //
@@ -202,8 +202,22 @@ void InitPosition(void)
   glScaled(CTX.s[0], CTX.s[1], CTX.s[2]);
   glTranslated(CTX.t[0], CTX.t[1], CTX.t[2]);
 
+  if(CTX.rotation_center_cg)
+    glTranslated(CTX.cg[0], CTX.cg[1], CTX.cg[2]);
+  else
+    glTranslated(CTX.rotation_center[0],
+		 CTX.rotation_center[1],
+		 CTX.rotation_center[2]);
+  
   CTX.buildRotmatrix();
   glMultMatrixf(&(CTX.rot[0][0]));
+
+  if(CTX.rotation_center_cg)
+    glTranslated(-CTX.cg[0], -CTX.cg[1], -CTX.cg[2]);
+  else
+    glTranslated(-CTX.rotation_center[0],
+		 -CTX.rotation_center[1],
+		 -CTX.rotation_center[2]);
 }
 
 // Replot
diff --git a/Makefile b/Makefile
index be9a62eb091426e1e5effd3bbd7e9b90237637e3..bfe9273cbe7cd83313789e50bc42b178ce0d2d67 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile,v 1.277 2003-03-21 00:52:34 geuzaine Exp $
+# $Id: Makefile,v 1.278 2003-03-26 16:57:06 geuzaine Exp $
 #
 # Copyright (C) 1997-2003 C. Geuzaine, J.-F. Remacle
 #
@@ -22,7 +22,7 @@
 include variables
 
 GMSH_MAJOR_VERSION = 1
-GMSH_MINOR_VERSION = 42
+GMSH_MINOR_VERSION = 43
 GMSH_PATCH_VERSION = 0
 
 GMSH_VERSION_FILE = Common/GmshVersion.h
diff --git a/doc/VERSIONS b/doc/VERSIONS
index 846d7e86bf6f6984c8aee811653b17c3ad5fa357..cdafcc20b8f07b503071532acb790df2b1936174 100644
--- a/doc/VERSIONS
+++ b/doc/VERSIONS
@@ -1,6 +1,8 @@
-$Id: VERSIONS,v 1.136 2003-03-25 22:54:01 geuzaine Exp $
+$Id: VERSIONS,v 1.137 2003-03-26 16:57:07 geuzaine Exp $
 
-New in 1.43: fixed solver interface problem on Mac OS X;
+New in 1.43: fixed solver interface problem on Mac OS X; new option to
+specify the interactive rotation center (default is center of
+gravity);
 
 New in 1.42: suppressed the automatic addition of a ".geo" extension
 if the file given on the command line is not recognized; added missing
@@ -15,7 +17,7 @@ New in 1.39: removed all non-free routines; more build system work;
 implemented Von-Mises tensor display for all element types; fixed
 small GUI bugs;
 
-New in 1.38: fixed custom range selection for 3D iso graphs; New build
+New in 1.38: fixed custom range selection for 3D iso graphs; new build
 system based on autoconf; new image reading code to import bitmaps as
 post-processing views;
 
diff --git a/doc/gmsh.html b/doc/gmsh.html
index f4203985647538bd56263b4e6843bd6eec46a997..df806441c1db38f51b9ff3e80d7a5c6430915ac2 100644
--- a/doc/gmsh.html
+++ b/doc/gmsh.html
@@ -26,7 +26,7 @@ generator with built-in pre- and post-processing facilities</h1>
 <p>
 <h3 align="center">Christophe Geuzaine and Jean-Fran�ois Remacle</h3>
 <p>
-<h3 align=center>Version <a href="doc/VERSIONS">1.42</a>, 18 March 2003</h3>
+<h3 align=center>Version <a href="doc/VERSIONS">1.43</a>, ?? April 2003</h3>
 <p>
 <center>
   <a href="#Description">Description</a> |
@@ -199,11 +199,11 @@ available for Windows, Linux and Mac OS X. The tutorial and demo files
 are included in the archives.
 
 <ul>
-<li><a href="/gmsh/bin/Windows/gmsh-1.42.0-Windows.zip">Windows zip archive (95/98/NT/2000/XP)</a>
-<li><a href="/gmsh/bin/Linux/gmsh-1.42.0-1.i386.rpm">Linux RPM (i386, Red Hat >= 6.2 and compatible)</a>
-<li><a href="/gmsh/bin/Linux/gmsh-1.42.0-Linux.tgz">Linux tarball (i386, glibc 2.1)</a> 
-<li><a href="/gmsh/bin/MacOSX/gmsh-1.42.0-MacOSX.tgz">Mac OS X tarball (Mac OS X 10.2)</a>
-<li><a href="/gmsh/src/gmsh-1.42.0-source.tgz">Source tarball (all platforms)</a>
+<li><a href="/gmsh/bin/Windows/gmsh-1.43.0-Windows.zip">Windows zip archive (95/98/NT/2000/XP)</a>
+<li><a href="/gmsh/bin/Linux/gmsh-1.43.0-1.i386.rpm">Linux RPM (i386, Red Hat >= 6.2 and compatible)</a>
+<li><a href="/gmsh/bin/Linux/gmsh-1.43.0-Linux.tgz">Linux tarball (i386, glibc 2.1)</a> 
+<li><a href="/gmsh/bin/MacOSX/gmsh-1.43.0-MacOSX.tgz">Mac OS X tarball (Mac OS X 10.2)</a>
+<li><a href="/gmsh/src/gmsh-1.43.0-source.tgz">Source tarball (all platforms)</a>
     <a href="#build-footnote" name="build-footmark"><sup>2</sup></a>
 </ul>