diff --git a/Common/Context.h b/Common/Context.h
index cb658e7f5effac4ff2fe18cc0295c2cd2788a314..fd6ddabd3abe4eeddb6c9e05efeed70bc9d9b5f2 100644
--- a/Common/Context.h
+++ b/Common/Context.h
@@ -42,6 +42,8 @@ public :
   int  terminal;              // show we print to the terminal console?
   char *editor;               // text editor command (with included '%s')
   char home_dir[256];         // the home directory
+  char *theme;                // GUI theme
+  int  tooltips;              // show tootips in GUI?
 
   int position[2];            // position of the menu window on the screen
   int gl_position[2];         // position of the graphic window on the screen
diff --git a/Common/DefaultOptions.h b/Common/DefaultOptions.h
index db02fbeeb5e92386cab458b19b9010434ce8d724..3b2ebde643d644994a2e29ef6f6e453a93744d59 100644
--- a/Common/DefaultOptions.h
+++ b/Common/DefaultOptions.h
@@ -35,6 +35,8 @@ StringXString GeneralOptions_String[] = {
   { F|O, "TextEditor" , opt_general_editor , "emacs %s &" ,
 #endif
     "System command to launch a text editor" },
+  { F|O,   "Theme" , opt_general_theme , "" ,
+    "Graphical user interface theme (try e.g. plastic)" },
   { F|S, "TmpFileName" , opt_general_tmp_filename , ".gmsh-tmp" ,
     "Temporary file (created in your home directory)" },
 
@@ -393,7 +395,7 @@ StringXNumber GeneralOptions_Number[] = {
   { F|O, "FastRedraw" , opt_general_fast_redraw , 1. ,
     "Fast redraw (no mesh or view display) when moving the model" },
   { F|S, "FontSize" , opt_general_fontsize , 12. , 
-    "Size of the font in the graphical user interface" }, 
+    "Size of the font in the graphical user interface" },
 
   { F|S, "GraphicsFontSize" , opt_general_graphics_fontsize , 11. , 
     "Size of the font in the graphic window" }, 
@@ -513,6 +515,8 @@ StringXNumber GeneralOptions_Number[] = {
   { F|O, "Terminal" , opt_general_terminal , 1. ,
 #endif
     "Should information be printed on the terminal (if available)?" },
+  { F|O, "Tooltips" , opt_general_tooltips , 1. ,
+    "Show tooltips in the graphical user interface" },
   { F|O, "Trackball" , opt_general_trackball , 1. ,
     "Use trackball rotation mode" },
   { F,   "TrackballQuaternion0" , opt_general_quaternion0 , 0.0 , 
diff --git a/Common/GetOptions.cpp b/Common/GetOptions.cpp
index 8c0a0bc06849e582378a5a84fa2a4821af54f80a..557468dbb8d0aaa392f610e114fabe715d65c100 100644
--- a/Common/GetOptions.cpp
+++ b/Common/GetOptions.cpp
@@ -1,4 +1,4 @@
-// $Id: GetOptions.cpp,v 1.45 2002-01-21 18:49:17 geuzaine Exp $
+// $Id: GetOptions.cpp,v 1.46 2002-03-31 00:50:39 geuzaine Exp $
 
 #include <unistd.h>
 #include "Gmsh.h"
@@ -68,6 +68,7 @@ void Print_Usage(char *name){
   Msg(DIRECT, "Display options:");    
   Msg(DIRECT, "  -nodb                 disable double buffering");
   Msg(DIRECT, "  -fontsize int         specify the font size for the GUI (default: 12)");
+  Msg(DIRECT, "  -theme string         specify GUI theme");
   Msg(DIRECT, "  -alpha                enable alpha blending");
   Msg(DIRECT, "  -notrack              don't use trackball mode for rotations");
   Msg(DIRECT, "  -display string       specify display");
@@ -471,6 +472,17 @@ void Get_Options (int argc, char *argv[], int *nbfiles) {
           exit(1);
         }
       }
+      else if(!strcmp(argv[i]+1, "theme")){
+        i++;
+        if(argv[i]!=NULL){
+	  CTX.theme = argv[i];
+          i++;
+	}
+        else {    
+          fprintf(stderr, ERROR_STR "Missing argument\n");
+          exit(1);
+        }
+      }
       else if(!strcmp(argv[i]+1, "display")){
         i++;
         if(argv[i]!=NULL){
diff --git a/Common/Options.cpp b/Common/Options.cpp
index 94ec9f4afa37db1e5449d1744b7545789bbf0f03..54abe96cbf45d255a29622b01fd8da16b8c824d2 100644
--- a/Common/Options.cpp
+++ b/Common/Options.cpp
@@ -1,4 +1,4 @@
-// $Id: Options.cpp,v 1.76 2002-03-12 19:07:32 geuzaine Exp $
+// $Id: Options.cpp,v 1.77 2002-03-31 00:50:39 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -510,6 +510,10 @@ char * opt_general_editor(OPT_ARGS_STR){
 #endif
   return CTX.editor;
 }
+char * opt_general_theme(OPT_ARGS_STR){
+  if(action & GMSH_SET) CTX.theme = val;
+  return CTX.theme;
+}
 
 char * opt_solver_name(OPT_ARGS_STR){
 #ifdef _FLTK
@@ -857,8 +861,16 @@ char * opt_view_format(OPT_ARGS_STR){
 }
 char * opt_view_filename(OPT_ARGS_STR){
   GET_VIEW(NULL) ;
-  if(action & GMSH_SET)
+  if(action & GMSH_SET){
     strcpy(v->FileName, val);
+#ifdef _FLTK
+#if !((FL_MAJOR_VERSION == 1) && (FL_MINOR_VERSION == 0))
+    if(WID && num<NB_BUTT_MAX){
+      WID->m_toggle_butt[num]->tooltip(v->FileName);
+    }
+#endif
+#endif
+  }
   return v->FileName;
 }
 char * opt_view_abscissa_name(OPT_ARGS_STR){
@@ -1052,6 +1064,22 @@ double opt_general_terminal(OPT_ARGS_NUM){
 #endif
   return CTX.terminal;
 }
+double opt_general_tooltips(OPT_ARGS_NUM){
+  if(action & GMSH_SET){
+    CTX.tooltips = (int)val;
+#ifdef _FLTK
+#if !((FL_MAJOR_VERSION == 1) && (FL_MINOR_VERSION == 0))
+    if(CTX.tooltips) Fl_Tooltip::enable();
+    else  Fl_Tooltip::disable();
+#endif
+#endif
+  }
+#ifdef _FLTK
+  if(WID && (action & GMSH_GUI))
+    WID->gen_butt[13]->value(CTX.tooltips);
+#endif
+  return CTX.tooltips;
+}
 double opt_general_orthographic(OPT_ARGS_NUM){
   if(action & GMSH_SET) 
     CTX.ortho = (int)val;
@@ -2761,8 +2789,8 @@ double opt_print_gif_transparent(OPT_ARGS_NUM){
 
 #ifdef _FLTK
 
-#if (FL_MAJOR_VERSION == 1) && (FL_MINOR_VERSION == 1)
-#define contrast fl_contrast
+#if (FL_MAJOR_VERSION == 1) && (FL_MINOR_VERSION == 0)
+#define fl_contrast contrast
 #endif
 
 #define CCC(col,but)							\
@@ -2771,7 +2799,7 @@ double opt_print_gif_transparent(OPT_ARGS_NUM){
 			       UNPACK_GREEN(col)*FL_NUM_GREEN/256,	\
 			       UNPACK_BLUE(col)*FL_NUM_BLUE/256);	\
     (but)->color(c);							\
-    (but)->labelcolor(contrast(FL_BLACK,c));				\
+    (but)->labelcolor(fl_contrast(FL_BLACK,c));				\
     (but)->redraw();							\
   }
 
diff --git a/Common/Options.h b/Common/Options.h
index 1c5779519c365727a91b65e434ecc784ca786a30..a2b4819fc6d56f51f86915b09e8191622241f054 100644
--- a/Common/Options.h
+++ b/Common/Options.h
@@ -24,6 +24,7 @@ char * opt_general_error_filename(OPT_ARGS_STR);
 char * opt_general_session_filename(OPT_ARGS_STR);
 char * opt_general_options_filename(OPT_ARGS_STR);
 char * opt_general_editor(OPT_ARGS_STR);
+char * opt_general_theme(OPT_ARGS_STR);
 char * opt_solver_name(OPT_ARGS_STR);
 char * opt_solver_name0(OPT_ARGS_STR);
 char * opt_solver_name1(OPT_ARGS_STR);
@@ -199,6 +200,7 @@ double opt_general_shine(OPT_ARGS_NUM);
 double opt_general_color_scheme(OPT_ARGS_NUM);
 double opt_general_verbosity(OPT_ARGS_NUM);
 double opt_general_terminal(OPT_ARGS_NUM);
+double opt_general_tooltips(OPT_ARGS_NUM);
 double opt_general_orthographic(OPT_ARGS_NUM);
 double opt_general_fast_redraw(OPT_ARGS_NUM);
 double opt_general_axes(OPT_ARGS_NUM);
diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp
index ccfd32559c5fd1f3b710a3e43c04510eaf1cbb3c..2dc17948076cce72c27067f6c810ed8d928c042e 100644
--- a/Fltk/Callbacks.cpp
+++ b/Fltk/Callbacks.cpp
@@ -1,4 +1,4 @@
-// $Id: Callbacks.cpp,v 1.112 2002-03-12 19:07:32 geuzaine Exp $
+// $Id: Callbacks.cpp,v 1.113 2002-03-31 00:50:39 geuzaine Exp $
 
 #include <sys/types.h>
 #include <signal.h>
@@ -24,18 +24,71 @@
 
 using namespace std;
 
-#if (FL_MAJOR_VERSION == 1) && (FL_MINOR_VERSION == 1)
-#include <FL/Fl_File_Chooser.H>
-#else
-#include <FL/fl_file_chooser.H>
-#endif
-
 #include <errno.h>
 
 extern GUI       *WID;
 extern Mesh      *THEM;
 extern Context_T  CTX;
 
+// File chooser (re)definitions
+
+#if (FL_MAJOR_VERSION == 1) && (FL_MINOR_VERSION == 0)
+
+#include <FL/fl_file_chooser.H>
+
+static char *fn = NULL;
+
+int file_chooser(int multi, const char* message, const char* pat){
+  char *fn = fl_file_chooser(message,pat,NULL);
+  if(fn) return 1;
+  else return 0;
+}
+
+char* file_chooser_get_name(int num){
+  return fn;
+}
+
+#else
+
+#include <FL/filename.H>
+#include <FL/Fl_File_Chooser.H>
+
+static Fl_File_Chooser *fc = NULL;
+
+int file_chooser(int multi, const char* message, const char* pat){
+  if (!fc) {
+    fc = new Fl_File_Chooser(".", pat, multi ? Fl_File_Chooser::MULTI : 
+			     Fl_File_Chooser::CREATE, message);
+  }
+  else {
+    if (fc->value() && 
+	fc->filter() != pat && 
+	(!pat || !fc->filter() || strcmp(pat, fc->filter()))) {
+      // if pattern is different, remove name but leave old directory:
+      char* p = (char *)fc->value();
+      const char* q = fl_filename_name(p);
+      int i;
+      if (q == NULL) i = 0;
+      else i = strlen(q);
+      p[i] = 0;
+    }
+    fc->type(multi ? Fl_File_Chooser::MULTI : Fl_File_Chooser::CREATE);
+    fc->filter(pat);
+    fc->label(message);
+  }
+  fc->show();
+
+  while (fc->shown()) Fl::wait();
+
+  return fc->count();
+}
+
+char* file_chooser_get_name(int num){
+  return (char*)fc->value(num);
+}
+
+#endif
+
 // Compatibility/local routines
 
 int AddViewInUI(int i, char *Name, int Num){
@@ -208,11 +261,9 @@ void status_cancel_cb(CALLBACK_ARGS){
 // File Menu
 
 void file_open_cb(CALLBACK_ARGS) {
-  char *newfile;
   int n = List_Nbr(CTX.post.list);
-  newfile = fl_file_chooser("Open file", "*", NULL);
-  if (newfile != NULL) {
-    OpenProblem(newfile); 
+  if(file_chooser(0,"Open file", "*")){
+    OpenProblem(file_chooser_get_name(1)); 
     Draw(); 
   }
   if(n != List_Nbr(CTX.post.list))
@@ -220,11 +271,11 @@ void file_open_cb(CALLBACK_ARGS) {
 }
 
 void file_merge_cb(CALLBACK_ARGS) {
-  char *newfile;
   int n = List_Nbr(CTX.post.list);
-  newfile = fl_file_chooser("Merge file", "*", NULL);
-  if (newfile != NULL) {
-    MergeProblem(newfile); 
+  int f = file_chooser(1,"Merge file(s)", "*");
+  if (f) {
+    for(int i=1; i<=f; i++)
+      MergeProblem(file_chooser_get_name(i)); 
     Draw(); 
   }
   if(n != List_Nbr(CTX.post.list))
@@ -232,143 +283,128 @@ void file_merge_cb(CALLBACK_ARGS) {
 }
 
 void file_save_as_auto_cb(CALLBACK_ARGS) {
-  char *newfile;
-  if((newfile = fl_file_chooser("Save file by extension", "*", NULL)))
-    CreateOutputFile(newfile, CTX.print.format = FORMAT_AUTO); 
+  if(file_chooser(0,"Save file by extension", "*"))
+    CreateOutputFile(file_chooser_get_name(1), CTX.print.format = FORMAT_AUTO); 
 }
 
 void file_save_as_geo_cb(CALLBACK_ARGS) {
-  char *newfile;
-  if((newfile = fl_file_chooser("Save GEO file", "*", NULL)))
-    CreateOutputFile(newfile, CTX.print.format = FORMAT_GEO); 
+  if(file_chooser(0,"Save GEO file", "*"))
+    CreateOutputFile(file_chooser_get_name(1), CTX.print.format = FORMAT_GEO); 
 }
 
 void file_save_as_geo_options_cb(CALLBACK_ARGS) {
-  char *newfile;
-  if((newfile = fl_file_chooser("Save option file", "*", NULL)))
-    CreateOutputFile(newfile, CTX.print.format = FORMAT_OPT); 
+  if(file_chooser(0,"Save option file", "*"))
+    CreateOutputFile(file_chooser_get_name(1), CTX.print.format = FORMAT_OPT); 
 }
 
 void file_save_as_msh_cb(CALLBACK_ARGS) {
-  char *newfile;
-  if((newfile = fl_file_chooser("Save MSH file", "*", NULL)))
-    CreateOutputFile(newfile, CTX.print.format = CTX.mesh.format = FORMAT_MSH); 
+  if(file_chooser(0,"Save MSH file", "*"))
+    CreateOutputFile(file_chooser_get_name(1), 
+		     CTX.print.format = CTX.mesh.format = FORMAT_MSH); 
 }
 void file_save_as_msh_all_cb(CALLBACK_ARGS) {
-  char *newfile;
-  if((newfile = fl_file_chooser("Save MSH file (no physicals)", "*", NULL))){
+  if(file_chooser(0,"Save MSH file (no physicals)", "*")){
     int all = CTX.mesh.save_all;
     CTX.mesh.save_all = 1;
-    CreateOutputFile(newfile, CTX.print.format = CTX.mesh.format = FORMAT_MSH); 
+    CreateOutputFile(file_chooser_get_name(1),
+		     CTX.print.format = CTX.mesh.format = FORMAT_MSH); 
     CTX.mesh.save_all = all;
   }
 }
 void file_save_as_unv_cb(CALLBACK_ARGS) {
-  char *newfile;
-  if((newfile = fl_file_chooser("Save UNV file", "*", NULL)))
-    CreateOutputFile(newfile, CTX.print.format = CTX.mesh.format = FORMAT_UNV); 
+  if(file_chooser(0,"Save UNV file", "*"))
+    CreateOutputFile(file_chooser_get_name(1),
+		     CTX.print.format = CTX.mesh.format = FORMAT_UNV); 
 }
 void file_save_as_gref_cb(CALLBACK_ARGS) {
-  char *newfile;
-  if((newfile = fl_file_chooser("Save GREF file", "*", NULL)))
-    CreateOutputFile(newfile, CTX.print.format = CTX.mesh.format = FORMAT_GREF); 
+  if(file_chooser(0,"Save GREF file", "*"))
+    CreateOutputFile(file_chooser_get_name(1),
+		     CTX.print.format = CTX.mesh.format = FORMAT_GREF); 
 }
 void file_save_as_ps_simple_cb(CALLBACK_ARGS) {
-  char *newfile;
-  if((newfile = fl_file_chooser("Save PS file", "*", NULL))){
+  if(file_chooser(0,"Save PS file", "*")){
     int old = CTX.print.eps_quality;
     CTX.print.eps_quality = 1; 
-    CreateOutputFile(newfile, CTX.print.format = FORMAT_PS); 
+    CreateOutputFile(file_chooser_get_name(1), CTX.print.format = FORMAT_PS); 
     CTX.print.eps_quality = old; 
   }
 }
 void file_save_as_ps_accurate_cb(CALLBACK_ARGS) {
-  char *newfile;
-  if((newfile = fl_file_chooser("Save PS file", "*", NULL))){
+  if(file_chooser(0,"Save PS file", "*")){
     int old = CTX.print.eps_quality;
     CTX.print.eps_quality = 2; 
-    CreateOutputFile(newfile, CTX.print.format = FORMAT_PS); 
+    CreateOutputFile(file_chooser_get_name(1), CTX.print.format = FORMAT_PS); 
     CTX.print.eps_quality = old; 
   }
 }
 void file_save_as_pstex_simple_cb(CALLBACK_ARGS) {
-  char *newfile;
-  if((newfile = fl_file_chooser("Save LaTeX file (PS part)", "*", NULL))){
+  if(file_chooser(0,"Save LaTeX file (PS part)", "*")){
     int old = CTX.print.eps_quality;
     CTX.print.eps_quality = 1; 
-    CreateOutputFile(newfile, CTX.print.format = FORMAT_PSTEX); 
+    CreateOutputFile(file_chooser_get_name(1), CTX.print.format = FORMAT_PSTEX); 
     CTX.print.eps_quality = old; 
   }
 }
 void file_save_as_pstex_accurate_cb(CALLBACK_ARGS) {
-  char *newfile;
-  if((newfile = fl_file_chooser("Save LaTeX file (PS part)", "*", NULL))){
+  if(file_chooser(0,"Save LaTeX file (PS part)", "*")){
     int old = CTX.print.eps_quality;
     CTX.print.eps_quality = 2; 
-    CreateOutputFile(newfile, CTX.print.format = FORMAT_PSTEX); 
+    CreateOutputFile(file_chooser_get_name(1), CTX.print.format = FORMAT_PSTEX); 
     CTX.print.eps_quality = old; 
   }
 }
 void file_save_as_jpegtex_cb(CALLBACK_ARGS) {
-  char *newfile;
-  if((newfile = fl_file_chooser("Save LaTeX file (Jpeg part)", "*", NULL)))
-    CreateOutputFile(newfile, CTX.print.format = FORMAT_JPEGTEX); 
+  if(file_chooser(0,"Save LaTeX file (Jpeg part)", "*"))
+    CreateOutputFile(file_chooser_get_name(1), CTX.print.format = FORMAT_JPEGTEX); 
 }
 void file_save_as_tex_cb(CALLBACK_ARGS) {
-  char *newfile;
-  if((newfile = fl_file_chooser("Save LaTeX file (TeX part)", "*", NULL)))
-    CreateOutputFile(newfile, CTX.print.format = FORMAT_TEX); 
+  if(file_chooser(0,"Save LaTeX file (TeX part)", "*"))
+    CreateOutputFile(file_chooser_get_name(1), CTX.print.format = FORMAT_TEX); 
 }
 void file_save_as_jpeg_cb(CALLBACK_ARGS) {
-  char *newfile;
-  if((newfile = fl_file_chooser("Save JPEG file", "*", NULL)))
-    CreateOutputFile(newfile, CTX.print.format = FORMAT_JPEG); 
+  if(file_chooser(0,"Save JPEG file", "*"))
+    CreateOutputFile(file_chooser_get_name(1), CTX.print.format = FORMAT_JPEG); 
 }
 void file_save_as_gif_cb(CALLBACK_ARGS) {
-  char *newfile;
-  if((newfile = fl_file_chooser("Save GIF file", "*", NULL))){
+  if(file_chooser(0,"Save GIF file", "*")){
     int dither = CTX.print.gif_dither;
     int transp = CTX.print.gif_transparent;
     CTX.print.gif_dither = 0;
     CTX.print.gif_transparent = 0;
-    CreateOutputFile(newfile, CTX.print.format = FORMAT_GIF); 
+    CreateOutputFile(file_chooser_get_name(1), CTX.print.format = FORMAT_GIF); 
     CTX.print.gif_dither = dither;
     CTX.print.gif_transparent = transp;
   }
 }
 void file_save_as_gif_dithered_cb(CALLBACK_ARGS) {
-  char *newfile;
-  if((newfile = fl_file_chooser("Save GIF file", "*", NULL))){
+  if(file_chooser(0,"Save GIF file", "*")){
     int dither = CTX.print.gif_dither;
     int transp = CTX.print.gif_transparent;
     CTX.print.gif_dither = 1; 
     CTX.print.gif_transparent = 0; 
-    CreateOutputFile(newfile, CTX.print.format = FORMAT_GIF); 
+    CreateOutputFile(file_chooser_get_name(1), CTX.print.format = FORMAT_GIF); 
     CTX.print.gif_dither = dither;
     CTX.print.gif_transparent = transp;
   }
 }
 void file_save_as_gif_transparent_cb(CALLBACK_ARGS) {
-  char *newfile;
-  if((newfile = fl_file_chooser("Save GIF file", "*", NULL))){
+  if(file_chooser(0,"Save GIF file", "*")){
     int dither = CTX.print.gif_dither;
     int transp = CTX.print.gif_transparent;
     CTX.print.gif_dither = 0;
     CTX.print.gif_transparent = 1; 
-    CreateOutputFile(newfile, CTX.print.format = FORMAT_GIF);
+    CreateOutputFile(file_chooser_get_name(1), CTX.print.format = FORMAT_GIF);
     CTX.print.gif_dither = dither;
     CTX.print.gif_transparent = transp;
   }
 }
 void file_save_as_ppm_cb(CALLBACK_ARGS) {
-  char *newfile;
-  if((newfile = fl_file_chooser("Save PPM file", "*", NULL)))
-    CreateOutputFile(newfile, CTX.print.format = FORMAT_PPM); 
+  if(file_chooser(0,"Save PPM file", "*"))
+    CreateOutputFile(file_chooser_get_name(1), CTX.print.format = FORMAT_PPM); 
 }
 void file_save_as_yuv_cb(CALLBACK_ARGS) {
-  char *newfile;
-  if((newfile = fl_file_chooser("Save YUV file", "*", NULL)))
-    CreateOutputFile(newfile, CTX.print.format = FORMAT_YUV); 
+  if(file_chooser(0,"Save YUV file", "*"))
+    CreateOutputFile(file_chooser_get_name(1), CTX.print.format = FORMAT_YUV); 
 }
 
 void file_quit_cb(CALLBACK_ARGS) {
@@ -401,6 +437,7 @@ void opt_general_ok_cb(CALLBACK_ARGS){
   opt_general_options_save(0, GMSH_SET, WID->gen_butt[9]->value());
   opt_general_orthographic(0, GMSH_SET, WID->gen_butt[10]->value());
   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_shine(0, GMSH_SET, WID->gen_value[1]->value());
   opt_general_light00(0, GMSH_SET, WID->gen_value[2]->value());
@@ -557,9 +594,8 @@ void opt_message_clear_cb(CALLBACK_ARGS) {
   WID->msg_browser->clear();
 }
 void opt_message_save_cb(CALLBACK_ARGS) {
-  char *newfile;
-  if((newfile = fl_file_chooser("Save messages", "*", NULL)))
-    WID->save_message(newfile); 
+  if(file_chooser(0,"Save messages", "*"))
+    WID->save_message(file_chooser_get_name(1)); 
 }
 void opt_save_cb(CALLBACK_ARGS) {
   Print_Options(0,GMSH_OPTIONSRC, CTX.optionsrc_filename); 
@@ -567,7 +603,7 @@ void opt_save_cb(CALLBACK_ARGS) {
 
 // Option Visibility Menu
 
-#if (FL_MAJOR_VERSION == 2) //disabled for fltk 2 at the moment
+#if (FL_MAJOR_VERSION == 2) // disabled for fltk 2 at the moment
 void select_vis_browser(int mode){}
 void opt_visibility_cb(CALLBACK_ARGS) {}
 void opt_visibility_ok_cb(CALLBACK_ARGS) {}
@@ -1649,14 +1685,13 @@ void solver_cb(CALLBACK_ARGS){
   WID->create_solver_window(num);
 }
 void solver_file_open_cb(CALLBACK_ARGS){
-  char *newfile, tmp[256];
+  char tmp[256];
   int num = (int)data;
   sprintf(tmp, "*%s", SINFO[num].extension);
-  newfile = fl_file_chooser("Open problem definition file", tmp, NULL);
-  if (newfile != NULL){
-    WID->solver[num].input[0]->value(newfile);
+  if (file_chooser(0,"Open problem definition file", tmp)){
+    WID->solver[num].input[0]->value(file_chooser_get_name(1));
     if(SINFO[num].nboptions){
-      sprintf(tmp, "%s %s", SINFO[num].option_command, newfile);
+      sprintf(tmp, "%s %s", SINFO[num].option_command, file_chooser_get_name(1));
       Solver(num, tmp);
     }
   }
@@ -1669,10 +1704,9 @@ void solver_file_edit_cb(CALLBACK_ARGS){
   system(cmd);
 }
 void solver_choose_mesh_cb(CALLBACK_ARGS){
-  char *newfile;
   int num = (int)data;
-  newfile = fl_file_chooser("Open mesh file", "*.[Mm][Ss][Hh]", NULL);
-  if (newfile != NULL) WID->solver[num].input[1]->value(newfile);
+  if(file_chooser(0,"Open mesh file", "*.[Mm][Ss][Hh]"))
+    WID->solver[num].input[1]->value(file_chooser_get_name(1));
 }
 int nbs(char *str){
   int i, nb=0;
@@ -1725,14 +1759,15 @@ void solver_kill_cb(CALLBACK_ARGS){
   SINFO[num].pid = -1;
 }
 void solver_choose_executable_cb(CALLBACK_ARGS){
-  char *newfile;
   int num = (int)data;
+  if(file_chooser(0,"Choose executable", 
 #if defined(WIN32)
-  newfile = fl_file_chooser("Choose executable", "*.[Ee][Xx][Ee]", NULL);
+		  "*.[Ee][Xx][Ee]"
 #else
-  newfile = fl_file_chooser("Choose executable", "*", NULL);
+                  "*"
 #endif
-  if (newfile != NULL) WID->solver[num].input[2]->value(newfile);
+		  ))
+    WID->solver[num].input[2]->value(file_chooser_get_name(1));
 }
 void solver_ok_cb(CALLBACK_ARGS){
   int num = (int)data;
@@ -1845,15 +1880,15 @@ void view_remove_cb(CALLBACK_ARGS){
 }
 
 void view_save_ascii_cb(CALLBACK_ARGS){
-  char *newfile;
-  if((newfile = fl_file_chooser("Save view in ASCII format", "*", NULL)))
-    Write_View(0, (Post_View*)List_Pointer(CTX.post.list,(long int)data), newfile); 
+  if(file_chooser(0,"Save view in ASCII format", "*"))
+    Write_View(0, (Post_View*)List_Pointer(CTX.post.list,(long int)data), 
+	       file_chooser_get_name(1)); 
 }
 
 void view_save_binary_cb(CALLBACK_ARGS){
-  char *newfile;
-  if((newfile = fl_file_chooser("Save view in binary format", "*", NULL)))
-    Write_View(1, (Post_View*)List_Pointer(CTX.post.list,(long int)data), newfile); 
+  if(file_chooser(0,"Save view in binary format", "*"))
+    Write_View(1, (Post_View*)List_Pointer(CTX.post.list,(long int)data),
+	       file_chooser_get_name(1)); 
 }
 
 static void _duplicate_view(int num, int options){
diff --git a/Fltk/Colorbar_Window.cpp b/Fltk/Colorbar_Window.cpp
index 9c12383afa5521b9bd93c944e1f0a0df5988e555..ec2f17999e4d998845ea51634e3e04991391b9bd 100644
--- a/Fltk/Colorbar_Window.cpp
+++ b/Fltk/Colorbar_Window.cpp
@@ -1,4 +1,4 @@
-// $Id: Colorbar_Window.cpp,v 1.20 2002-02-14 17:22:06 geuzaine Exp $
+// $Id: Colorbar_Window.cpp,v 1.21 2002-03-31 00:50:39 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -13,8 +13,8 @@ extern Context_T  CTX;
 #define UNDEFINED   0
 #define EPS         1.e-10
 
-#if (FL_MAJOR_VERSION == 1) && (FL_MINOR_VERSION == 1)
-#define contrast fl_contrast
+#if (FL_MAJOR_VERSION == 1) && (FL_MINOR_VERSION == 0)
+#define fl_contrast contrast
 #endif
 
 // This file defines the Colorbar_Window class (subclass of Fl_Window)
@@ -221,7 +221,7 @@ void Colorbar_Window::redraw_range(int a, int b){
      x = index_to_x(i);
      y = intensity_to_y(UNPACK_ALPHA(ct->table[i]));
      if (i!=a){
-       fl_color(contrast(FL_BLACK,color_bg));
+       fl_color(fl_contrast(FL_BLACK,color_bg));
        fl_line(px,py,x,y);
      }
      px = x;  py = y;
@@ -242,7 +242,7 @@ void Colorbar_Window::redraw_range(int a, int b){
 
    // print colortable mode and help
    fl_font(FL_HELVETICA, font_height);
-   fl_color(contrast(FL_BLACK,color_bg));
+   fl_color(fl_contrast(FL_BLACK,color_bg));
    int xx0=10, xx1=13*font_height, yy0=10;
    if (help_flag){
      i = 0;
@@ -298,7 +298,7 @@ void Colorbar_Window::redraw_marker(){
   
   // draw marker below color wedge
   x = index_to_x(marker_pos);
-  fl_color(contrast(FL_BLACK,color_bg));   
+  fl_color(fl_contrast(FL_BLACK,color_bg));   
   fl_line(x, marker_y, x, marker_y+marker_height);
   fl_line(x, marker_y, x-3, marker_y+6);
   fl_line(x, marker_y, x+3, marker_y+6);
diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp
index c8a45fadef085dcff253339edf0b017ef0ac9abb..e90cc090d48e579d0b7694e455968182ac83bc5f 100644
--- a/Fltk/GUI.cpp
+++ b/Fltk/GUI.cpp
@@ -1,8 +1,7 @@
-// $Id: GUI.cpp,v 1.160 2002-03-21 21:59:05 geuzaine Exp $
+// $Id: GUI.cpp,v 1.161 2002-03-31 00:50:39 geuzaine Exp $
 
 // To make the interface as visually consistent as possible, please:
 // - use the IW, BB, BH, BW and WB values
-// - use CTX.fontsize for font sizes
 // - examine what's already done before adding something new...
 
 #include "PluginManager.h"
@@ -24,18 +23,18 @@
 #include "OpenFile.h"
 #include "GetOptions.h"
 
-#if (FL_MAJOR_VERSION == 1) && (FL_MINOR_VERSION == 1)
-#define WINDOW_BOX FL_FLAT_BOX
-#define TOGGLE_BOX FL_DOWN_BOX
-#define TOGGLE_COLOR FL_BLACK
-#define RADIO_BOX  FL_ROUND_DOWN_BOX
-#define RADIO_COLOR FL_BLACK
-#else
+#if (FL_MAJOR_VERSION == 1) && (FL_MINOR_VERSION == 0)
 #define WINDOW_BOX FL_FLAT_BOX
 #define TOGGLE_BOX FL_DOWN_BOX
 #define TOGGLE_COLOR FL_YELLOW
 #define RADIO_BOX  FL_DIAMOND_DOWN_BOX
 #define RADIO_COLOR FL_YELLOW
+#else
+#define WINDOW_BOX FL_FLAT_BOX
+#define TOGGLE_BOX FL_DOWN_BOX
+#define TOGGLE_COLOR FL_BLACK
+#define RADIO_BOX  FL_ROUND_DOWN_BOX
+#define RADIO_COLOR FL_BLACK
 #endif
 
 #define IW  (10*CTX.fontsize) // input field width
@@ -543,6 +542,7 @@ int GUI::arrow_shortcuts(){
 GUI::GUI(int argc, char **argv) {
   int i;
 
+  // initialize static windows
   m_window = NULL;
   g_window = NULL;
   gen_window = NULL;
@@ -558,17 +558,25 @@ GUI::GUI(int argc, char **argv) {
   context_geometry_window = NULL;
   context_mesh_window = NULL;
 
+  // set X display
   if(strlen(CTX.display)) Fl::display(CTX.display);
+
+  // add global shortcuts
   Fl::add_handler(SetGlobalShortcut);
 
-#ifdef __APPLE__
-  Fl::scheme("plastic");
+  // set default font size
+  FL_NORMAL_SIZE = CTX.fontsize;
+
+  // handle themes and tooltip font size
+#if !((FL_MAJOR_VERSION == 1) && (FL_MINOR_VERSION == 0))
+  if(strlen(CTX.theme)) Fl::scheme(CTX.theme);
+  Fl_Tooltip::size(CTX.fontsize);
 #endif
 
-  // Fl::visible_focus(0); 
-  // we could use that to prohibit all default fltk navigation. It is
-  // not necessary anymore, since I added the correct handlers for the
-  // graphic and the colorbar window...
+  // disable default fltk keyboard navigation. It is not necessary
+  // anymore, since correct handlers for the graphic and the colorbar
+  // window have been added.
+  // Fl::visible_focus(0);
 
   // All static windows are contructed (even if some are not
   // displayed) since the shortcuts should be valid even for hidden
@@ -670,7 +678,6 @@ void GUI::create_menu_window(int argc, char **argv){
   
   m_menu_bar = new Fl_Menu_Bar(0,0,width,BH); 
   m_menu_bar->menu(m_menubar_table);
-  m_menu_bar->textsize(CTX.fontsize);
   m_menu_bar->box(FL_UP_BOX);
   m_menu_bar->global();
   
@@ -692,20 +699,22 @@ void GUI::create_menu_window(int argc, char **argv){
   m_navig_butt[1]->box(FL_FLAT_BOX);
   m_navig_butt[1]->selection_color(FL_WHITE);
   m_navig_butt[1]->callback(mod_forward_cb);
+
+#if !((FL_MAJOR_VERSION == 1) && (FL_MINOR_VERSION == 0))
+  m_navig_butt[0]->tooltip("Go back in menu history");
+  m_navig_butt[1]->tooltip("Go forward in menu history");
+#endif
   
   m_module_butt = new Fl_Choice(19,y,width-24,BH);
   m_module_butt->menu(m_module_table);
-  m_module_butt->textsize(CTX.fontsize);
   m_module_butt->box(FL_THIN_DOWN_BOX);
   
   y = MH ;
   
   for(i=0; i<NB_BUTT_MAX; i++){
     m_push_butt[i] = new Fl_Button(0,y+i*BH,width,BH); 
-    m_push_butt[i]->labelsize(CTX.fontsize);
     m_push_butt[i]->hide();
     m_toggle_butt[i] = new Fl_Light_Button(0,y+i*BH,width,BH); 
-    m_toggle_butt[i]->labelsize(CTX.fontsize); 
     m_toggle_butt[i]->callback(view_toggle_cb, (void*)i);
     m_toggle_butt[i]->hide();
     m_popup_butt[i] = new Fl_Menu_Button(0,y+i*BH,width,BH);
@@ -737,7 +746,6 @@ void GUI::create_menu_window(int argc, char **argv){
 			 (Fl_Callback *)view_applybgmesh_cb, (void*)i, FL_MENU_DIVIDER);
     m_popup_butt[i]->add("Options...", 0,
 			 (Fl_Callback *)view_options_cb, (void*)i, 0);
-    m_popup_butt[i]->textsize(CTX.fontsize);
     m_popup_butt[i]->hide();
   }
   
@@ -899,32 +907,25 @@ void GUI::create_graphic_window(int argc, char **argv){
   
   g_status_butt[0] = new Fl_Button(x,glheight+2,sw,sh-4,"X"); x+=sw;
   g_status_butt[0]->callback(status_xyz1p_cb, (void*)0);
-  //g_status_butt[0]->tooltip("Set X view");
   g_status_butt[1] = new Fl_Button(x,glheight+2,sw,sh-4,"Y"); x+=sw;
   g_status_butt[1]->callback(status_xyz1p_cb, (void*)1);
-  //g_status_butt[1]->tooltip("Set Y view");
   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[2]->tooltip("Set Z view");
   g_status_butt[3] = new Fl_Button(x,glheight+2,2*CTX.fontsize,sh-4,"1:1"); x+=2*CTX.fontsize;
   g_status_butt[3]->callback(status_xyz1p_cb, (void*)3);
-  //g_status_butt[3]->tooltip("Set unit scale");
   g_status_butt[4] = new Fl_Button(x,glheight+2,sw,sh-4,"?"); x+=sw;
   g_status_butt[4]->callback(status_xyz1p_cb, (void*)4);
-  //g_status_butt[4]->tooltip("Show current options");
   g_status_butt[5] = new Fl_Button(x,glheight+2,sw,sh-4); x+=sw;
   g_status_butt[5]->callback(status_rewind_cb);
   rewind_bmp = new Fl_Bitmap(rewind_bits,rewind_width,rewind_height);
   rewind_bmp->label(g_status_butt[5]);
   g_status_butt[5]->deactivate();
-  //g_status_butt[5]->tooltip("Play/pause animation");
   g_status_butt[6] = new Fl_Button(x,glheight+2,sw,sh-4); x+=sw;
   g_status_butt[6]->callback(status_play_cb);
   start_bmp = new Fl_Bitmap(start_bits,start_width,start_height);
   start_bmp->label(g_status_butt[6]);
   stop_bmp = new Fl_Bitmap(stop_bits,stop_width,stop_height);
   g_status_butt[6]->deactivate();
-  //g_status_butt[6]->tooltip("Play/pause animation");
 
   /*
   g_status_butt[7] = new Fl_Button(x,glheight+2,sw,sh-4); x+=sw;
@@ -936,7 +937,6 @@ 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]->labelsize(CTX.fontsize);
     g_status_butt[i]->align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE|FL_ALIGN_CLIP);
   }
   
@@ -945,9 +945,19 @@ void GUI::create_graphic_window(int argc, char **argv){
   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]->labelsize(CTX.fontsize);
     g_status_label[i]->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE|FL_ALIGN_CLIP);
   }
+
+
+#if !((FL_MAJOR_VERSION == 1) && (FL_MINOR_VERSION == 0))
+  g_status_butt[0]->tooltip("Set X view (Y=Z=0)");
+  g_status_butt[1]->tooltip("Set Y view (X=Z=0)");
+  g_status_butt[2]->tooltip("Set Z view (X=Y=0)");
+  g_status_butt[3]->tooltip("Set unit scale");
+  g_status_butt[4]->tooltip("Show current options");
+  g_status_butt[5]->tooltip("Rewind animation");
+  g_status_butt[6]->tooltip("Play/pause animation");
+#endif
   
   g_window->resizable(new Fl_Box(x,0,width-x,glheight));
   
@@ -1053,7 +1063,6 @@ void GUI::create_general_options_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, "Display");
-      o->labelsize(CTX.fontsize);
       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");
@@ -1064,29 +1073,29 @@ void GUI::create_general_options_window(){
       for(i=0 ; i<7 ; i++){
 	gen_butt[i]->type(FL_TOGGLE_BUTTON);
 	gen_butt[i]->down_box(TOGGLE_BOX);
-	gen_butt[i]->labelsize(CTX.fontsize);
 	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);
+
       o->end();
     }
     { 
       Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Output");
-      o->labelsize(CTX.fontsize);
       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]->labelsize(CTX.fontsize);
 	gen_butt[i]->selection_color(TOGGLE_COLOR);
       }
       gen_value[5] = new Fl_Value_Input(2*WB, 2*WB+4*BH, IW, BH, "Message verbosity");
       gen_value[5]->minimum(0); 
       gen_value[5]->maximum(10); 
       gen_value[5]->step(1);
-      gen_value[5]->labelsize(CTX.fontsize);
-      gen_value[5]->textsize(CTX.fontsize);
       gen_value[5]->align(FL_ALIGN_RIGHT);
       gen_input[0] = new Fl_Input(2*WB, 2*WB+5*BH, IW, BH, "Default file name");
       gen_input[1] = new Fl_Input(2*WB, 2*WB+6*BH, IW, BH, "Temporary file");
@@ -1094,22 +1103,18 @@ void GUI::create_general_options_window(){
       gen_input[3] = new Fl_Input(2*WB, 2*WB+8*BH, IW, BH, "Option file");
       gen_input[4] = new Fl_Input(2*WB, 2*WB+9*BH, IW, BH, "Text editor command");
       for(i=0 ; i<5 ; i++){
-	gen_input[i]->labelsize(CTX.fontsize);
-	gen_input[i]->textsize(CTX.fontsize);
 	gen_input[i]->align(FL_ALIGN_RIGHT);
       }
       o->end();
     }
     { 
       Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Aspect");
-      o->labelsize(CTX.fontsize);
       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");
       for(i=10 ; i<12 ; i++){
 	gen_butt[i]->type(FL_RADIO_BUTTON);
 	gen_butt[i]->down_box(RADIO_BOX);
-	gen_butt[i]->labelsize(CTX.fontsize);
 	gen_butt[i]->selection_color(RADIO_COLOR);
       }
       gen_value[6] = new Fl_Value_Input(2*WB, 2*WB+3*BH, IW, BH, "Point size");
@@ -1121,22 +1126,17 @@ void GUI::create_general_options_window(){
       gen_value[7]->maximum(50);
       gen_value[7]->step(0.1);
       for(i=6 ; i<= 7 ; i++){
-	gen_value[i]->labelsize(CTX.fontsize);
-	gen_value[i]->textsize(CTX.fontsize);
 	gen_value[i]->align(FL_ALIGN_RIGHT);
       }
       o->end();
     }
     { 
       Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Colors");
-      o->labelsize(CTX.fontsize);
       o->hide();
       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]->labelsize(CTX.fontsize);
-      gen_value[0]->textsize(CTX.fontsize);
       gen_value[0]->align(FL_ALIGN_RIGHT);
       gen_value[0]->callback(opt_general_color_scheme_cb);
       
@@ -1145,7 +1145,6 @@ void GUI::create_general_options_window(){
       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]->labelsize(CTX.fontsize);
 	i++;
       }
       s->end();
@@ -1153,7 +1152,6 @@ void GUI::create_general_options_window(){
     }
     { 
       Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Light");
-      o->labelsize(CTX.fontsize);
       o->hide();
       gen_value[1] = new Fl_Value_Input(2*WB, 2*WB+1*BH, IW, BH, "Material shininess");
       gen_value[1]->minimum(0); 
@@ -1162,7 +1160,6 @@ void GUI::create_general_options_window(){
       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]->labelsize(CTX.fontsize);
       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]->minimum(-1); 
@@ -1177,8 +1174,6 @@ void GUI::create_general_options_window(){
       gen_value[4]->maximum(1); 
       gen_value[4]->step(0.01);
       for(i=1 ; i<5 ; i++){
-	gen_value[i]->labelsize(CTX.fontsize);
-	gen_value[i]->textsize(CTX.fontsize);
 	gen_value[i]->align(FL_ALIGN_RIGHT);
       }
       o->end();
@@ -1188,12 +1183,10 @@ void GUI::create_general_options_window(){
   
   { 
     Fl_Return_Button* o = new Fl_Return_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "OK");
-    o->labelsize(CTX.fontsize);
     o->callback(opt_general_ok_cb);
   }
   { 
     Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel");
-    o->labelsize(CTX.fontsize);
     o->callback(cancel_cb, (void*)gen_window);
   }
   
@@ -1225,18 +1218,15 @@ void GUI::create_geometry_options_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, "General");
-      o->labelsize(CTX.fontsize);
       o->hide();
       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]->labelsize(CTX.fontsize);
       geo_butt[8]->selection_color(TOGGLE_COLOR);
       o->end();
     }
     { 
       Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Visibility");
-      o->labelsize(CTX.fontsize);
       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");
@@ -1248,7 +1238,6 @@ void GUI::create_geometry_options_window(){
       for(i=0 ; i<8 ; i++){
 	geo_butt[i]->type(FL_TOGGLE_BUTTON);
 	geo_butt[i]->down_box(TOGGLE_BOX);
-	geo_butt[i]->labelsize(CTX.fontsize);
 	geo_butt[i]->selection_color(TOGGLE_COLOR);
       }
       
@@ -1261,15 +1250,12 @@ void GUI::create_geometry_options_window(){
       geo_value[1]->maximum(100);
       geo_value[1]->step(0.1);
       for(i=0 ; i<2 ; i++){
-	geo_value[i]->labelsize(CTX.fontsize);
-	geo_value[i]->textsize(CTX.fontsize);
 	geo_value[i]->align(FL_ALIGN_RIGHT);
       }
       o->end();
     }
     { 
       Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Aspect");
-      o->labelsize(CTX.fontsize);
       o->hide();
       geo_value[3] = new Fl_Value_Input(2*WB, 2*WB+1*BH, IW, BH, "Point size");
       geo_value[3]->minimum(0.1);
@@ -1280,22 +1266,17 @@ void GUI::create_geometry_options_window(){
       geo_value[4]->maximum(50);
       geo_value[4]->step(0.1);
       for(i=3 ; i<= 4 ; i++){
-	geo_value[i]->labelsize(CTX.fontsize);
-	geo_value[i]->textsize(CTX.fontsize);
 	geo_value[i]->align(FL_ALIGN_RIGHT);
       }
       o->end();
     }
     { 
       Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Colors");
-      o->labelsize(CTX.fontsize);
       o->hide();
       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]->labelsize(CTX.fontsize);
-      geo_value[2]->textsize(CTX.fontsize);
       geo_value[2]->align(FL_ALIGN_RIGHT);
       geo_value[2]->callback(opt_geometry_color_scheme_cb);
       
@@ -1304,7 +1285,6 @@ void GUI::create_geometry_options_window(){
       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]->labelsize(CTX.fontsize);
 	i++;
       }
       s->end();
@@ -1315,12 +1295,10 @@ void GUI::create_geometry_options_window(){
   
   { 
     Fl_Return_Button* o = new Fl_Return_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "OK");
-    o->labelsize(CTX.fontsize);
     o->callback(opt_geometry_ok_cb);
   }
   { 
     Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel");
-    o->labelsize(CTX.fontsize);
     o->callback(cancel_cb, (void*)geo_window);
   }
   
@@ -1352,7 +1330,6 @@ void GUI::create_mesh_options_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, "General");
-      o->labelsize(CTX.fontsize);
       o->hide();
       
       mesh_value[0] = new Fl_Value_Input(2*WB, 2*WB+1*BH, IW, BH, "Number of smoothing steps");
@@ -1372,8 +1349,6 @@ void GUI::create_mesh_options_window(){
       mesh_value[3]->maximum(1.e-1); 
       mesh_value[3]->step(1.e-6);
       for(i = 0 ; i<4 ; i++){
-	mesh_value[i]->labelsize(CTX.fontsize);
-	mesh_value[i]->textsize(CTX.fontsize);
 	mesh_value[i]->align(FL_ALIGN_RIGHT);
       }
       
@@ -1381,20 +1356,17 @@ void GUI::create_mesh_options_window(){
       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]->labelsize(CTX.fontsize);
       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]->type(FL_TOGGLE_BUTTON);
       mesh_butt[5]->down_box(TOGGLE_BOX);
-      mesh_butt[5]->labelsize(CTX.fontsize);
       mesh_butt[5]->selection_color(TOGGLE_COLOR);
 
       o->end();
     }
     { 
       Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "2D");
-      o->labelsize(CTX.fontsize);
       o->hide();
       
       mesh_butt[0] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Old isotropic algorithm");
@@ -1403,20 +1375,17 @@ void GUI::create_mesh_options_window(){
       for(i=0 ; i<3 ; i++){
 	mesh_butt[i]->type(FL_RADIO_BUTTON);
 	mesh_butt[i]->down_box(RADIO_BOX);
-	mesh_butt[i]->labelsize(CTX.fontsize);
 	mesh_butt[i]->selection_color(RADIO_COLOR);
       }
       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]->labelsize(CTX.fontsize);
       mesh_butt[4]->selection_color(TOGGLE_COLOR);
 
       o->end();
     }
     { 
       Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Visibility");
-      o->labelsize(CTX.fontsize);
       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");
@@ -1428,7 +1397,6 @@ void GUI::create_mesh_options_window(){
       for(i=6 ; i<14 ; i++){
 	mesh_butt[i]->type(FL_TOGGLE_BUTTON);
 	mesh_butt[i]->down_box(TOGGLE_BOX);
-	mesh_butt[i]->labelsize(CTX.fontsize);
 	mesh_butt[i]->selection_color(TOGGLE_COLOR);
       }
       mesh_value[4] = new Fl_Value_Input(2*WB, 2*WB+5*BH, IW/2, BH);
@@ -1448,8 +1416,6 @@ void GUI::create_mesh_options_window(){
       mesh_value[8]->maximum(100);
       mesh_value[8]->step(0.1);
       for(i=4 ; i<9 ; i++){
-	mesh_value[i]->labelsize(CTX.fontsize);
-	mesh_value[i]->textsize(CTX.fontsize);
 	mesh_value[i]->align(FL_ALIGN_RIGHT);
       }
 
@@ -1457,15 +1423,12 @@ void GUI::create_mesh_options_window(){
       mesh_value[13]->minimum(0); 
       mesh_value[13]->maximum(100);
       mesh_value[13]->step(0.1);
-      mesh_value[13]->labelsize(CTX.fontsize);
-      mesh_value[13]->textsize(CTX.fontsize);
       mesh_value[13]->align(FL_ALIGN_RIGHT);
 
       o->end();
     }
     { 
       Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Aspect");
-      o->labelsize(CTX.fontsize);
       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");
@@ -1473,7 +1436,6 @@ void GUI::create_mesh_options_window(){
       for(i=14 ; i<17 ; i++){
 	mesh_butt[i]->type(FL_RADIO_BUTTON);
 	mesh_butt[i]->down_box(RADIO_BOX);
-	mesh_butt[i]->labelsize(CTX.fontsize);
 	mesh_butt[i]->selection_color(RADIO_COLOR);
       }
       mesh_value[9] = new Fl_Value_Input(2*WB, 2*WB+4*BH, IW, BH, "Explode elements");
@@ -1489,28 +1451,22 @@ void GUI::create_mesh_options_window(){
       mesh_value[11]->maximum(50);
       mesh_value[11]->step(0.1);
       for(i=9 ; i<= 11 ; i++){
-	mesh_value[i]->labelsize(CTX.fontsize);
-	mesh_value[i]->textsize(CTX.fontsize);
 	mesh_value[i]->align(FL_ALIGN_RIGHT);
       }
       o->end();
     }
     { 
       Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Colors");
-      o->labelsize(CTX.fontsize);
       o->hide();
       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]->labelsize(CTX.fontsize);
       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]->minimum(0); 
       mesh_value[12]->maximum(2); 
       mesh_value[12]->step(1);
-      mesh_value[12]->labelsize(CTX.fontsize);
-      mesh_value[12]->textsize(CTX.fontsize);
       mesh_value[12]->align(FL_ALIGN_RIGHT);
       mesh_value[12]->callback(opt_mesh_color_scheme_cb);
       
@@ -1519,7 +1475,6 @@ void GUI::create_mesh_options_window(){
       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]->labelsize(CTX.fontsize);
 	i++;
       }
       s->end();
@@ -1530,12 +1485,10 @@ void GUI::create_mesh_options_window(){
   
   { 
     Fl_Return_Button* o = new Fl_Return_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "OK");
-    o->labelsize(CTX.fontsize);
     o->callback(opt_mesh_ok_cb);
   }
   { 
     Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel");
-    o->labelsize(CTX.fontsize);
     o->callback(cancel_cb, (void*)mesh_window);
   }
   
@@ -1565,19 +1518,16 @@ void GUI::create_solver_options_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, "Solvers");
-      o->labelsize(CTX.fontsize);
 
       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);
-      text->labelsize(CTX.fontsize);
       /*
 	int BW = width-4*WB;
 	solver_butt[0] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Use Unix sockets");
 	solver_butt[0]->type(FL_TOGGLE_BUTTON);
 	solver_butt[0]->down_box(TOGGLE_BOX);
-	solver_butt[0]->labelsize(CTX.fontsize);
 	solver_butt[0]->selection_color(TOGGLE_COLOR);
       */
       o->end();
@@ -1587,12 +1537,10 @@ void GUI::create_solver_options_window(){
   
   { 
     Fl_Return_Button* o = new Fl_Return_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "OK");
-    o->labelsize(CTX.fontsize);
     o->callback(opt_solver_ok_cb);
   }
   { 
     Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel");
-    o->labelsize(CTX.fontsize);
     o->callback(cancel_cb, (void*)solver_window);
   }
   
@@ -1625,7 +1573,6 @@ void GUI::create_post_options_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, "Views");
-      o->labelsize(CTX.fontsize);
       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");
@@ -1634,7 +1581,6 @@ void GUI::create_post_options_window(){
       for(i=0 ; i<5 ; i++){
 	post_butt[i]->type(FL_RADIO_BUTTON);
 	post_butt[i]->down_box(RADIO_BOX);
-	post_butt[i]->labelsize(CTX.fontsize);
 	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,
@@ -1642,35 +1588,28 @@ void GUI::create_post_options_window(){
 				 "by right-clicking on each view button "
 				 "in the post-processing menu");
       text->align(FL_ALIGN_LEFT|FL_ALIGN_TOP|FL_ALIGN_INSIDE|FL_ALIGN_WRAP);
-      text->labelsize(CTX.fontsize);
       o->end();
     }
     { 
       Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Smoothing");
-      o->labelsize(CTX.fontsize);
       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]->labelsize(CTX.fontsize);
       post_butt[5]->selection_color(TOGGLE_COLOR);
       o->end();
     }
     { 
       Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Animation");
-      o->labelsize(CTX.fontsize);
       o->hide();
       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]->labelsize(CTX.fontsize);
-      post_value[0]->textsize(CTX.fontsize);
       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]->type(FL_TOGGLE_BUTTON);
       post_butt[6]->down_box(TOGGLE_BOX);
-      post_butt[6]->labelsize(CTX.fontsize);
       post_butt[6]->selection_color(TOGGLE_COLOR);
       o->end();
     }
@@ -1679,12 +1618,10 @@ void GUI::create_post_options_window(){
   
   { 
     Fl_Return_Button* o = new Fl_Return_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "OK");
-    o->labelsize(CTX.fontsize);
     o->callback(opt_post_ok_cb);
   }
   { 
     Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel");
-    o->labelsize(CTX.fontsize);
     o->callback(cancel_cb, (void*)post_window);
   }
   
@@ -1716,7 +1653,6 @@ 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");
-      o->labelsize(CTX.fontsize);
       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");
@@ -1726,7 +1662,6 @@ void GUI::create_statistics_window(){
     }
     { 
       Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Mesh");
-      o->labelsize(CTX.fontsize);
       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");
@@ -1746,20 +1681,16 @@ void GUI::create_statistics_window(){
       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->labelsize(CTX.fontsize);
       b0->callback(opt_statistics_histogram_cb, (void*)0);
       Fl_Button* b1 = new Fl_Button(width-BB-2*WB, 2*WB+14*BH, BB, BH, "Graph");
-      b1->labelsize(CTX.fontsize);
       b1->callback(opt_statistics_histogram_cb, (void*)1);
       Fl_Button* b2 = new Fl_Button(width-BB-2*WB, 2*WB+15*BH, BB, BH, "Graph");
-      b2->labelsize(CTX.fontsize);
       b2->callback(opt_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");
-      o->labelsize(CTX.fontsize);
       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");
@@ -1773,20 +1704,16 @@ void GUI::create_statistics_window(){
   }
   
   for(i=0 ; i<num ; i++){
-    stat_value[i]->labelsize(CTX.fontsize);
-    stat_value[i]->textsize(CTX.fontsize);
     stat_value[i]->align(FL_ALIGN_RIGHT);
     stat_value[i]->value(0);
   }
   
   { 
     Fl_Button* o = new Fl_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "Update");
-    o->labelsize(CTX.fontsize);
     o->callback(opt_statistics_update_cb);
   }
   { 
     Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel");
-    o->labelsize(CTX.fontsize);
     o->callback(cancel_cb, (void*)stat_window);
   }
   
@@ -1919,7 +1846,6 @@ PluginDialogBox * GUI::create_plugin_window(GMSH_Plugin *p){
     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");
-      g->labelsize(CTX.fontsize);
 
       if(n > 20)Msg(GERROR, "Plugin has too many parameters");
       
@@ -1927,8 +1853,6 @@ PluginDialogBox * GUI::create_plugin_window(GMSH_Plugin *p){
 	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]->labelsize(CTX.fontsize);
-	pdb->view_value[i]->textsize(CTX.fontsize);
 	pdb->view_value[i]->align(FL_ALIGN_RIGHT);
 	pdb->view_value[i]->value(sxn->def);
       }
@@ -1937,7 +1861,6 @@ PluginDialogBox * GUI::create_plugin_window(GMSH_Plugin *p){
     }
     { 
       Fl_Group *g = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "About");
-      g->labelsize(CTX.fontsize);
 
       Fl_Browser *o = new Fl_Browser(2*WB, 2*WB+1*BH, width-4*WB, height-5*WB-2*BH);
 
@@ -1948,7 +1871,6 @@ PluginDialogBox * GUI::create_plugin_window(GMSH_Plugin *p){
       o->add("");
       add_multiline_in_browser(o, "Author(s): ", author);
       add_multiline_in_browser(o, "Copyright: ", copyright);
-      o->textsize(CTX.fontsize);
       
       g->end();
     }
@@ -1956,11 +1878,9 @@ PluginDialogBox * GUI::create_plugin_window(GMSH_Plugin *p){
   }
 
   Fl_Button* cancel = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Close");
-  cancel->labelsize(CTX.fontsize);
   cancel->callback(cancel_cb, (void*)pdb->main_window);
 
   pdb->run_button = new Fl_Return_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "Run");
-  pdb->run_button->labelsize(CTX.fontsize);
 
   pdb->main_window->resizable(new Fl_Box(2*WB,2*WB+BH,10,10));
 
@@ -1994,21 +1914,17 @@ void GUI::create_message_window(){
   
   msg_browser = new Fl_Browser(WB, WB, width-2*WB, height-3*WB-BH);
   msg_browser->textfont(FL_COURIER);
-  msg_browser->textsize(CTX.fontsize);
   
   { 
     Fl_Return_Button* o = new Fl_Return_Button(width-3*BB-3*WB, height-BH-WB, BB, BH, "Save");
-    o->labelsize(CTX.fontsize);
     o->callback(opt_message_save_cb);
   }
   { 
     Fl_Button* o = new Fl_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "Clear");
-    o->labelsize(CTX.fontsize);
     o->callback(opt_message_clear_cb);
   }
   { 
     Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel");
-    o->labelsize(CTX.fontsize);
     o->callback(cancel_cb, (void*)msg_window);
   }
   
@@ -2099,43 +2015,35 @@ 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_type->textsize(CTX.fontsize);
   
   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_browser_mode->textsize(CTX.fontsize);
   
   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]->labelsize(CTX.fontsize);
   vis_butt[0]->selection_color(TOGGLE_COLOR);
   vis_butt[0]->value(1);
 
   Fl_Button* o0 = new Fl_Button(1*WB, 2*WB+1*BH, cols[0], BH, "*");
-  o0->labelsize(CTX.fontsize);
   o0->callback(opt_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);
-  o1->labelsize(CTX.fontsize);
   o1->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
   o1->callback(opt_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");
-  o2->labelsize(CTX.fontsize);
   o2->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
   o2->callback(opt_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");
-  o3->labelsize(CTX.fontsize);
   o3->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
   o3->callback(opt_visibility_sort_cb, (void*)3);
 
   vis_browser = new Fl_Browser(1*WB, 2*WB+2*BH, brw, height-5*WB-4*BH);
   vis_browser->textfont(FL_COURIER);
-  vis_browser->textsize(CTX.fontsize);
   vis_browser->type(FL_MULTI_BROWSER);
   vis_browser->column_widths(cols);
 
@@ -2143,23 +2051,18 @@ void GUI::create_visibility_window(){
   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->labelsize(CTX.fontsize);
-  vis_input->textsize(CTX.fontsize);
   vis_input->callback(opt_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->menu(input_mode_table);
-  vis_input_mode->textsize(CTX.fontsize);
   
   { 
     Fl_Return_Button* o = new Fl_Return_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "OK");
-    o->labelsize(CTX.fontsize);
     o->callback(opt_visibility_ok_cb);
   }
   { 
     Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel");
-    o->labelsize(CTX.fontsize);
     o->callback(cancel_cb, (void*)vis_window);
   }
 
@@ -2215,12 +2118,10 @@ void GUI::create_about_window(){
     sprintf(buffer, "@c@.Packaged by: %s", GMSH_PACKAGER); o->add(buffer);
     o->add("");
     o->add("@c@.Visit http://www.geuz.org/gmsh/ for more information");
-    o->textsize(CTX.fontsize);
   }
   
   { 
     Fl_Return_Button* o = new Fl_Return_Button(width-BB-WB, height-BH-WB, BB, BH, "OK");
-    o->labelsize(CTX.fontsize);
     o->callback(cancel_cb, (void*)about_window);
   }
   
@@ -2263,7 +2164,6 @@ void GUI::create_view_options_window(int num){
     // General
     { 
       Fl_Group *o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "General");
-      o->labelsize(CTX.fontsize);
       
       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");
@@ -2271,7 +2171,6 @@ void GUI::create_view_options_window(int num){
       for(i=1 ; i<=3 ; i++){
 	view_butt[i]->type(FL_RADIO_BUTTON);
 	view_butt[i]->down_box(RADIO_BOX);
-	view_butt[i]->labelsize(CTX.fontsize);
 	view_butt[i]->selection_color(RADIO_COLOR);
 	view_butt[i]->callback(set_changed_cb, 0);
       }
@@ -2279,22 +2178,16 @@ void GUI::create_view_options_window(int num){
       view_input[0] = new Fl_Input(2*WB, 2*WB+4*BH, IW, BH, "Name");
       view_input[1] = new Fl_Input(2*WB, 2*WB+5*BH, IW, BH, "Format");
       for(i=0 ; i<=1 ; i++){
-	view_input[i]->labelsize(CTX.fontsize);
-	view_input[i]->textsize(CTX.fontsize);
 	view_input[i]->align(FL_ALIGN_RIGHT);
 	view_input[i]->callback(set_changed_cb, 0);
       }
 
       int sw=(int)(1.5*CTX.fontsize);
       view_butt_rep[0] = new Fl_Repeat_Button(2*WB, 2*WB+6*BH, sw, BH, "-");
-      view_butt_rep[0]->labelsize(CTX.fontsize);
       //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]->labelsize(CTX.fontsize);
       //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]->labelsize(CTX.fontsize);
-      view_value[50]->textsize(CTX.fontsize);
       view_value[50]->align(FL_ALIGN_RIGHT);
       view_value[50]->minimum(0); 
       view_value[50]->maximum(0); 
@@ -2302,7 +2195,6 @@ void GUI::create_view_options_window(int num){
       //no set_changed since has its own callback
       Fl_Box *a = new Fl_Box(2*WB+IW, 2*WB+6*BH, IW/2, BH, "Time step");
       a->box(FL_NO_BOX);
-      a->labelsize(CTX.fontsize);
       a->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
 
 
@@ -2311,8 +2203,6 @@ void GUI::create_view_options_window(int num){
       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]->labelsize(CTX.fontsize);
-	view_value[i]->textsize(CTX.fontsize);
 	view_value[i]->align(FL_ALIGN_RIGHT);
 	view_value[i]->callback(set_changed_cb, 0);
       }
@@ -2326,7 +2216,6 @@ void GUI::create_view_options_window(int num){
       for(i=4 ; i<=8 ; i++){
 	view_butt[i]->type(FL_TOGGLE_BUTTON);
 	view_butt[i]->down_box(TOGGLE_BOX);
-	view_butt[i]->labelsize(CTX.fontsize);
 	view_butt[i]->selection_color(TOGGLE_COLOR);
 	view_butt[i]->callback(set_changed_cb, 0);
       }
@@ -2337,7 +2226,6 @@ void GUI::create_view_options_window(int num){
     // 3D
     { 
       view_3d = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "3D");
-      view_3d->labelsize(CTX.fontsize);
       view_3d->hide();
       
       view_butt[10] = new Fl_Check_Button(width/2, 2*WB+1*BH, BW/2-WB, BH, "Show elements");
@@ -2346,7 +2234,6 @@ void GUI::create_view_options_window(int num){
       for(i=10 ; i<=12 ; i++){
 	view_butt[i]->type(FL_TOGGLE_BUTTON);
 	view_butt[i]->down_box(TOGGLE_BOX);
-	view_butt[i]->labelsize(CTX.fontsize);
 	view_butt[i]->selection_color(TOGGLE_COLOR);
 	view_butt[i]->callback(set_changed_cb, 0);
       }
@@ -2363,8 +2250,6 @@ void GUI::create_view_options_window(int num){
       view_value[12]->step(0.01); 
       view_value[12]->maximum(1.); 
       for(i=10 ; i<=12 ; i++){
-	view_value[i]->labelsize(CTX.fontsize);
-	view_value[i]->textsize(CTX.fontsize);
 	view_value[i]->align(FL_ALIGN_RIGHT);
 	view_value[i]->callback(set_changed_cb, 0);
       }
@@ -2379,7 +2264,6 @@ void GUI::create_view_options_window(int num){
       for(i=13 ; i<=19 ; i++){
 	view_butt[i]->type(FL_TOGGLE_BUTTON);
 	view_butt[i]->down_box(TOGGLE_BOX);
-	view_butt[i]->labelsize(CTX.fontsize);
 	view_butt[i]->selection_color(TOGGLE_COLOR);
 	view_butt[i]->callback(set_changed_cb, 0);
       }
@@ -2389,12 +2273,9 @@ void GUI::create_view_options_window(int num){
     // 2D
     { 
       view_2d = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "2D");
-      view_2d->labelsize(CTX.fontsize);
       view_2d->hide();
       
       view_input[2] = new Fl_Input(2*WB, 2*WB+1*BH, IW, BH, "Abscissa name");
-      view_input[2]->labelsize(CTX.fontsize);
-      view_input[2]->textsize(CTX.fontsize);
       view_input[2]->align(FL_ALIGN_RIGHT);
       view_input[2]->callback(set_changed_cb, 0);
       
@@ -2407,8 +2288,6 @@ void GUI::create_view_options_window(int num){
       view_value[26]->step(1); 
       view_value[26]->maximum(3); 
       for(i=25 ; i<=26 ; i++){
-	view_value[i]->labelsize(CTX.fontsize);
-	view_value[i]->textsize(CTX.fontsize);
 	view_value[i]->align(FL_ALIGN_RIGHT);
 	view_value[i]->callback(set_changed_cb, 0);
       }
@@ -2418,12 +2297,9 @@ void GUI::create_view_options_window(int num){
     // Range
     { 
       view_range = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Range");
-      view_range->labelsize(CTX.fontsize);
       view_range->hide();
       
       view_value[30] = new Fl_Value_Input(2*WB, 2*WB+1*BH, IW, BH, "Intervals");
-      view_value[30]->labelsize(CTX.fontsize);
-      view_value[30]->textsize(CTX.fontsize);
       view_value[30]->align(FL_ALIGN_RIGHT);
       view_value[30]->minimum(1); 
       view_value[30]->maximum(256); 
@@ -2439,7 +2315,6 @@ void GUI::create_view_options_window(int num){
 	for(i=30 ; i<=33 ; i++){
 	  view_butt[i]->type(FL_RADIO_BUTTON);
 	  view_butt[i]->down_box(RADIO_BOX);
-	  view_butt[i]->labelsize(CTX.fontsize);
 	  view_butt[i]->selection_color(RADIO_COLOR);
 	  view_butt[i]->callback(set_changed_cb, 0);
 	}
@@ -2449,15 +2324,12 @@ void GUI::create_view_options_window(int num){
       view_butt[34] = new Fl_Check_Button(width/2, 2*WB+1*BH, BW/2-WB, BH, "Custom range");
       view_butt[34]->type(FL_TOGGLE_BUTTON);
       view_butt[34]->down_box(TOGGLE_BOX);
-      view_butt[34]->labelsize(CTX.fontsize);
       view_butt[34]->selection_color(TOGGLE_COLOR);
       //no set_changed since customrange has its own callback
       
       view_value[31] = new Fl_Value_Input(width/2, 2*WB+3*BH, IW, BH, "Minimum");
       view_value[32] = new Fl_Value_Input(width/2, 2*WB+4*BH, IW, BH, "Maximum");
       for(i=31 ; i<=32 ; i++){
-	view_value[i]->labelsize(CTX.fontsize);
-	view_value[i]->textsize(CTX.fontsize);
 	view_value[i]->align(FL_ALIGN_RIGHT);
 	view_value[i]->callback(set_changed_cb, 0);
       }
@@ -2470,7 +2342,6 @@ void GUI::create_view_options_window(int num){
 	for(i=35 ; i<=37 ; i++){
 	  view_butt[i]->type(FL_RADIO_BUTTON);
 	  view_butt[i]->down_box(RADIO_BOX);
-	  view_butt[i]->labelsize(CTX.fontsize);
 	  view_butt[i]->selection_color(RADIO_COLOR);
 	  view_butt[i]->callback(set_changed_cb, 0);
 	}
@@ -2480,7 +2351,6 @@ void GUI::create_view_options_window(int num){
       view_butt[38] = new Fl_Check_Button(width/2, 2*WB+2*BH, BW/2-WB, BH, "Saturate values");
       view_butt[38]->type(FL_TOGGLE_BUTTON);
       view_butt[38]->down_box(TOGGLE_BOX);
-      view_butt[38]->labelsize(CTX.fontsize);
       view_butt[38]->selection_color(TOGGLE_COLOR);
       view_butt[38]->callback(set_changed_cb, 0);
       
@@ -2489,7 +2359,6 @@ void GUI::create_view_options_window(int num){
     // Offset and Raise
     { 
       Fl_Group *o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Offset");
-      o->labelsize(CTX.fontsize);
       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");
@@ -2498,8 +2367,6 @@ void GUI::create_view_options_window(int num){
       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]->labelsize(CTX.fontsize);
-	view_value[i]->textsize(CTX.fontsize);
 	view_value[i]->align(FL_ALIGN_RIGHT);
 	view_value[i]->callback(set_changed_cb, 0);
       }	
@@ -2508,7 +2375,6 @@ void GUI::create_view_options_window(int num){
     // Aspect
     { 
       Fl_Group *o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Aspect");
-      o->labelsize(CTX.fontsize);
       o->hide();
       
       {
@@ -2536,7 +2402,6 @@ void GUI::create_view_options_window(int num){
 	for(i=60 ; i<=67 ; i++){
 	  view_butt[i]->type(FL_RADIO_BUTTON);
 	  view_butt[i]->down_box(RADIO_BOX);
-	  view_butt[i]->labelsize(CTX.fontsize);
 	  view_butt[i]->selection_color(RADIO_COLOR);
 	  view_butt[i]->callback(set_changed_cb, 0);
 	}
@@ -2555,8 +2420,6 @@ void GUI::create_view_options_window(int num){
       view_value[62]->maximum(50);
       view_value[62]->step(0.1);
       for(i=60 ; i<=62 ; i++){
-	view_value[i]->labelsize(CTX.fontsize);
-	view_value[i]->textsize(CTX.fontsize);
 	view_value[i]->align(FL_ALIGN_RIGHT);
 	view_value[i]->callback(set_changed_cb, 0);
       }
@@ -2566,7 +2429,6 @@ void GUI::create_view_options_window(int num){
     // Colors
     { 
       Fl_Group *o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Colors");
-      o->labelsize(CTX.fontsize);
       o->hide();
       view_colorbar_window = new Colorbar_Window(2*WB, 2*WB+1*BH,
 						 width-4*WB, height-5*WB-2*BH);
@@ -2579,11 +2441,9 @@ void GUI::create_view_options_window(int num){
   
   { 
     view_ok = new Fl_Return_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "OK");
-    view_ok->labelsize(CTX.fontsize);
   }
   { 
     Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel");
-    o->labelsize(CTX.fontsize);
     o->callback(cancel_cb, (void*)view_window);
   }
   
@@ -2752,17 +2612,13 @@ void GUI::create_geometry_context_window(int num){
     // 0: Parameter
     { 
       g[0] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Parameter");
-      g[0]->labelsize(CTX.fontsize);
       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]->labelsize(CTX.fontsize);
-	context_geometry_input[i]->textsize(CTX.fontsize);
 	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");
-	o->labelsize(CTX.fontsize);
 	o->callback(con_geometry_define_parameter_cb);
       }
       g[0]->end();
@@ -2770,19 +2626,15 @@ void GUI::create_geometry_context_window(int num){
     // 1: Point
     { 
       g[1] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Point");
-      g[1]->labelsize(CTX.fontsize);
       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]->labelsize(CTX.fontsize);
-	context_geometry_input[i]->textsize(CTX.fontsize);
 	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");
-	o->labelsize(CTX.fontsize);
 	o->callback(con_geometry_define_point_cb);
       }
       g[1]->end();
@@ -2790,18 +2642,14 @@ void GUI::create_geometry_context_window(int num){
     // 2: Translation
     { 
       g[2] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Translation");
-      g[2]->labelsize(CTX.fontsize);
       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]->labelsize(CTX.fontsize);
-	context_geometry_input[i]->textsize(CTX.fontsize);
 	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");
-	o->labelsize(CTX.fontsize);
 	o->callback(con_geometry_define_translation_cb);
       }
       g[2]->end();
@@ -2809,7 +2657,6 @@ void GUI::create_geometry_context_window(int num){
     // 3: Rotation
     { 
       g[3] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Rotation");
-      g[3]->labelsize(CTX.fontsize);
       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");
@@ -2818,13 +2665,10 @@ void GUI::create_geometry_context_window(int num){
       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]->labelsize(CTX.fontsize);
-	context_geometry_input[i]->textsize(CTX.fontsize);
 	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");
-	o->labelsize(CTX.fontsize);
 	o->callback(con_geometry_define_rotation_cb);
       }
       g[3]->end();
@@ -2832,19 +2676,15 @@ void GUI::create_geometry_context_window(int num){
     // 4: Scale
     { 
       g[4] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Scale");
-      g[4]->labelsize(CTX.fontsize);
       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]->labelsize(CTX.fontsize);
-	context_geometry_input[i]->textsize(CTX.fontsize);
 	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");
-	o->labelsize(CTX.fontsize);
 	o->callback(con_geometry_define_scale_cb);
       }
       g[4]->end();
@@ -2852,19 +2692,15 @@ void GUI::create_geometry_context_window(int num){
     // 5: Symmetry
     { 
       g[5] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Symmetry");
-      g[5]->labelsize(CTX.fontsize);
       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]->labelsize(CTX.fontsize);
-	context_geometry_input[i]->textsize(CTX.fontsize);
 	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");
-	o->labelsize(CTX.fontsize);
 	o->callback(con_geometry_define_symmetry_cb);
       }
       g[5]->end();
@@ -2874,7 +2710,6 @@ void GUI::create_geometry_context_window(int num){
   
   { 
     Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel");
-    o->labelsize(CTX.fontsize);
     o->callback(cancel_cb, (void*)context_geometry_window);
   }
   
@@ -2913,14 +2748,10 @@ void GUI::create_mesh_context_window(int num){
     // 0: Characteristic length
     { 
       g[0] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Characteristic length");
-      g[0]->labelsize(CTX.fontsize);
       context_mesh_input[0] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, "Value");
-      context_mesh_input[0]->labelsize(CTX.fontsize);
-      context_mesh_input[0]->textsize(CTX.fontsize);
       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");
-	o->labelsize(CTX.fontsize);
 	o->callback(con_mesh_define_length_cb);
       }
       g[0]->end();
@@ -2928,17 +2759,13 @@ void GUI::create_mesh_context_window(int num){
     // 1: Transfinite line
     { 
       g[1] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Transfinite line");
-      g[1]->labelsize(CTX.fontsize);
       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, "Distribution");
       for(i=1 ; i<3 ; i++){
-	context_mesh_input[i]->labelsize(CTX.fontsize);
-	context_mesh_input[i]->textsize(CTX.fontsize);
 	context_mesh_input[i]->align(FL_ALIGN_RIGHT);
       }
       { 
 	Fl_Return_Button* o = new Fl_Return_Button(width-BB-2*WB, 2*WB+3*BH, BB, BH, "Set");
-	o->labelsize(CTX.fontsize);
 	o->callback(con_mesh_define_transfinite_line_cb);
       }
       g[1]->end();
@@ -2946,14 +2773,10 @@ void GUI::create_mesh_context_window(int num){
     // 2: Transfinite volume
     { 
       g[2] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Transfinite volume");
-      g[2]->labelsize(CTX.fontsize);
       context_mesh_input[3] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, "Volume number");
-      context_mesh_input[3]->labelsize(CTX.fontsize);
-      context_mesh_input[3]->textsize(CTX.fontsize);
       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");
-	o->labelsize(CTX.fontsize);
 	o->callback(con_mesh_define_transfinite_line_cb);
       }
       g[2]->end();
@@ -2963,7 +2786,6 @@ void GUI::create_mesh_context_window(int num){
   
   { 
     Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel");
-    o->labelsize(CTX.fontsize);
     o->callback(cancel_cb, (void*)context_mesh_window);
   }
   
@@ -3010,32 +2832,24 @@ void GUI::create_solver_window(int num){
     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");
-      g[0]->labelsize(CTX.fontsize);
       
       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);
-      b1->labelsize(CTX.fontsize);
       Fl_Button *b2 = new Fl_Button(3*WB+BB, 3*WB+2*BH, BB, BH, "Edit");
       b2->callback(solver_file_edit_cb, (void*)num);
-      b2->labelsize(CTX.fontsize);
 
       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);
-      b3->labelsize(CTX.fontsize);
 
       for(i=0 ; i<2 ; i++){
-	solver[num].input[i]->labelsize(CTX.fontsize);
-	solver[num].input[i]->textsize(CTX.fontsize);
 	solver[num].input[i]->align(FL_ALIGN_RIGHT);
       }
 
       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]->textsize(CTX.fontsize);
-	solver[num].choice[i]->labelsize(CTX.fontsize);
 	solver[num].choice[i]->align(FL_ALIGN_RIGHT);
       }
 
@@ -3043,15 +2857,11 @@ void GUI::create_solver_window(int num){
     }
     { 
       g[1] = new Fl_Group(WB, WB+BH, width-2*WB, height-(3+newrow)*WB-(2+newrow)*BH, "Options");
-      g[1]->labelsize(CTX.fontsize);
       
       solver[num].input[2] = new Fl_Input(2*WB, 2*WB+1*BH, LL, BH, "Executable");
-      solver[num].input[2]->labelsize(CTX.fontsize);
-      solver[num].input[2]->textsize(CTX.fontsize);
       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);
-      b->labelsize(CTX.fontsize);
       
       solver[num].butt[2] = new Fl_Check_Button(2*WB, 4*WB+3*BH, LL, BH, 
 						"Client/server connection");
@@ -3062,24 +2872,20 @@ void GUI::create_solver_window(int num){
       for(i=0 ; i<3 ; i++){
 	solver[num].butt[i]->type(FL_TOGGLE_BUTTON);
 	solver[num].butt[i]->down_box(TOGGLE_BOX);
-	solver[num].butt[i]->labelsize(CTX.fontsize);
 	solver[num].butt[i]->selection_color(TOGGLE_COLOR);
       }
       
       Fl_Return_Button* o = new Fl_Return_Button(width-BB-2*WB, 
 						 height-(3+newrow)*WB-(2+newrow)*BH, BB, BH, "OK");
-      o->labelsize(CTX.fontsize);
       o->callback(solver_ok_cb, (void*)num);
       
       g[1]->end();
     }
     { 
       g[2] = new Fl_Group(WB, WB+BH, width-2*WB, height-(3+newrow)*WB-(2+newrow)*BH, "About");
-      g[2]->labelsize(CTX.fontsize);
       
       Fl_Browser *o = new Fl_Browser(2*WB, 2*WB+1*BH, width-4*WB,
 				     height-(5+newrow)*WB-(2+newrow)*BH);
-      o->textsize(CTX.fontsize);
       o->add("");
       add_multiline_in_browser(o, "@c@b@.", SINFO[num].name);
       o->add("");
@@ -3101,19 +2907,16 @@ void GUI::create_solver_window(int num){
 					      BB, BH,
 					      SINFO[num].button_name[i]);
       solver[num].command[nb]->callback(solver_command_cb,(void*)arg[num][i]);
-      solver[num].command[nb]->labelsize(CTX.fontsize);
       nb++;
     }
   }
   
   { 
     Fl_Button* o = new Fl_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "Kill");
-    o->labelsize(CTX.fontsize);
     o->callback(solver_kill_cb, (void*)num);
   }
   { 
     Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel");
-    o->labelsize(CTX.fontsize);
     o->callback(cancel_cb, (void*)solver[num].window);
   }
   
diff --git a/Fltk/GUI.h b/Fltk/GUI.h
index 9da8e84eb54fed73f831088cce6093e2595e5520..a9cd9f824248428a92933ba51f7690873a9052db 100644
--- a/Fltk/GUI.h
+++ b/Fltk/GUI.h
@@ -26,6 +26,10 @@
 #include <FL/Fl_Color_Chooser.H>
 #include <FL/fl_ask.H>
 
+#if !((FL_MAJOR_VERSION == 1) && (FL_MINOR_VERSION == 0))
+#include <FL/Fl_Tooltip.H>
+#endif
+
 #include "Opengl_Window.h"
 #include "Colorbar_Window.h"
 
diff --git a/Graphics/Draw.cpp b/Graphics/Draw.cpp
index 6a190703db50f1d5bf7c9ba19d498f39fea29ca6..f07ea63d3bf5050a7e5f2f872e31256229a6aae4 100644
--- a/Graphics/Draw.cpp
+++ b/Graphics/Draw.cpp
@@ -1,4 +1,4 @@
-// $Id: Draw.cpp,v 1.28 2001-10-30 14:27:47 geuzaine Exp $
+// $Id: Draw.cpp,v 1.29 2002-03-31 00:50:39 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -24,10 +24,10 @@ void Draw3d(void){
     glEnable(GL_ALPHA);
   }
   else{
+#if 0
+    // Rigorously, this could be disabled. But it seems to perturb the
+    // font rendering on Windows (and Mac?)
     glDisable(GL_BLEND);
-#ifndef WIN32
-    // Merde de bug dans les nouvelles dll opengl Windows (ATI Rage
-    // Mobility, NVIDIA, etc.)
     glDisable(GL_ALPHA);
 #endif
   }
diff --git a/Graphics/gl2ps.cpp b/Graphics/gl2ps.cpp
index 56b71619500a04fc6ba447ad2e94d51870bf1226..ba9cea241f84a0a689bfdf629a34a6e418c325f0 100644
--- a/Graphics/gl2ps.cpp
+++ b/Graphics/gl2ps.cpp
@@ -2,7 +2,7 @@
  * GL2PS, an OpenGL to PostScript Printing Library
  * Copyright (C) 1999-2002  Christophe Geuzaine 
  *
- * $Id: gl2ps.cpp,v 1.38 2002-03-08 22:12:41 geuzaine Exp $
+ * $Id: gl2ps.cpp,v 1.39 2002-03-31 00:50:39 geuzaine Exp $
  *
  * E-mail: geuz@geuz.org
  * URL: http://www.geuz.org/gl2ps/
@@ -851,8 +851,8 @@ GLvoid gl2psAddPolyPrimitive(GLshort type, GLshort numverts,
 	prim->verts[1].xyz[2] -= 1.;
       }
       else{
-	prim->verts[0].xyz[2] -= 0.1;
-	prim->verts[1].xyz[2] -= 0.1;
+	prim->verts[0].xyz[2] -= 0.05;
+	prim->verts[1].xyz[2] -= 0.05;
       }
     }
   }
diff --git a/Plugin/Plugin.cpp b/Plugin/Plugin.cpp
index 009f49146499402c6489abba15e2a0cdb0c71945..2b7945c35a6e64b5ff0e1d8158355d73b61fc639 100644
--- a/Plugin/Plugin.cpp
+++ b/Plugin/Plugin.cpp
@@ -1,4 +1,4 @@
-// $Id: Plugin.cpp,v 1.23 2002-03-26 22:11:33 geuzaine Exp $
+// $Id: Plugin.cpp,v 1.24 2002-03-31 00:50:39 geuzaine Exp $
 
 #include <map>
 #ifndef _NODLL
@@ -126,11 +126,11 @@ void GMSH_PluginManager::RegisterDefaultPlugins(){
 
 #ifdef _FLTK
   char *homeplugins = getenv ("GMSHPLUGINSHOME");
-  if(!homeplugins)return;
-#if (FL_MAJOR_VERSION == 1) && (FL_MINOR_VERSION == 1)
-  int nbFiles = fl_filename_list(homeplugins,&list);
-#else
+  if(!homeplugins) return;
+#if (FL_MAJOR_VERSION == 1) && (FL_MINOR_VERSION == 0)
   int nbFiles = filename_list(homeplugins,&list);
+#else
+  int nbFiles = fl_filename_list(homeplugins,&list);
 #endif
   if(nbFiles <= 0)  return;
   for(int i=0;i<nbFiles;i++){