diff --git a/Common/Options.cpp b/Common/Options.cpp
index a487afb6f11481b13bbd4329e199e82a36c1cc9b..d755fa0faa171200622c240ad9241b8d9aff21be 100644
--- a/Common/Options.cpp
+++ b/Common/Options.cpp
@@ -1,4 +1,4 @@
-// $Id: Options.cpp,v 1.165 2004-06-08 02:10:32 geuzaine Exp $
+// $Id: Options.cpp,v 1.166 2004-06-12 18:34:31 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -76,20 +76,33 @@ void Init_Options_Safe(int num)
 void Init_Options(int num)
 {
   char *tmp;
+  int ok = 1;
 
   // Home directory
   if((tmp = getenv("GMSH_HOME")))
     strcpy(CTX.home_dir, tmp);
-  else if((tmp = getenv("HOME")))
+  else if((tmp = getenv("HOME"))){
     strcpy(CTX.home_dir, tmp);
-  else if((tmp = getenv("TMP")))
-    strcpy(CTX.home_dir, tmp);
-  else if((tmp = getenv("TEMP")))
-    strcpy(CTX.home_dir, tmp);
-  else
-    strcpy(CTX.home_dir, "");
+#if defined(WIN32)
+    // old windows systems (e.g. win98) define incorrect HOME variables
+    if(!strcmp(CTX.home_dir, "/"))
+      ok = 0;
+#endif
+  }
+  else{
+    ok = 0;
+  }
+  if(!ok){
+    if((tmp = getenv("TMP")))
+      strcpy(CTX.home_dir, tmp);
+    else if((tmp = getenv("TEMP")))
+      strcpy(CTX.home_dir, tmp);
+    else
+      strcpy(CTX.home_dir, "");
+  }
 
-  if(strlen(CTX.home_dir))
+  int len = strlen(CTX.home_dir);
+  if(len && CTX.home_dir[len-1] != '/')
     strcat(CTX.home_dir, "/");
 
   // Reference view storing default options
@@ -796,10 +809,6 @@ char *opt_general_tmp_filename(OPT_ARGS_STR)
     strcpy(CTX.tmprc_filename, CTX.home_dir);
     strcat(CTX.tmprc_filename, CTX.tmp_filename);
   }
-#if defined(HAVE_FLTK)
-  if(WID && (action & GMSH_GUI))
-    WID->gen_input[1]->value(CTX.tmp_filename);
-#endif
   return CTX.tmp_filename;
 }
 
@@ -810,10 +819,6 @@ char *opt_general_error_filename(OPT_ARGS_STR)
     strcpy(CTX.errorrc_filename, CTX.home_dir);
     strcat(CTX.errorrc_filename, CTX.error_filename);
   }
-#if defined(HAVE_FLTK)
-  if(WID && (action & GMSH_GUI))
-    WID->gen_input[2]->value(CTX.error_filename);
-#endif
   return CTX.error_filename;
 }
 
@@ -834,10 +839,6 @@ char *opt_general_options_filename(OPT_ARGS_STR)
     strcpy(CTX.optionsrc_filename, CTX.home_dir);
     strcat(CTX.optionsrc_filename, CTX.options_filename);
   }
-#if defined(HAVE_FLTK)
-  if(WID && (action & GMSH_GUI))
-    WID->gen_input[3]->value(CTX.options_filename);
-#endif
   return CTX.options_filename;
 }
 
@@ -847,7 +848,7 @@ char *opt_general_editor(OPT_ARGS_STR)
     CTX.editor = val;
 #if defined(HAVE_FLTK)
   if(WID && (action & GMSH_GUI))
-    WID->gen_input[4]->value(CTX.editor);
+    WID->gen_input[1]->value(CTX.editor);
 #endif
   return CTX.editor;
 }
@@ -858,7 +859,7 @@ char *opt_general_web_browser(OPT_ARGS_STR)
     CTX.web_browser = val;
 #if defined(HAVE_FLTK)
   if(WID && (action & GMSH_GUI))
-    WID->gen_input[5]->value(CTX.web_browser);
+    WID->gen_input[2]->value(CTX.web_browser);
 #endif
   return CTX.web_browser;
 }
diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp
index 10f0d7e29febfb4a32748ea7cc17191fe67b894b..2520552ccb2ba840d848708d3b805ccbbaff3ab2 100644
--- a/Fltk/Callbacks.cpp
+++ b/Fltk/Callbacks.cpp
@@ -1,4 +1,4 @@
-// $Id: Callbacks.cpp,v 1.246 2004-06-04 02:07:06 geuzaine Exp $
+// $Id: Callbacks.cpp,v 1.247 2004-06-12 18:34:31 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -885,11 +885,8 @@ void general_options_ok_cb(CALLBACK_ARGS)
   opt_general_graphics_fontsize(0, GMSH_SET, WID->gen_value[12]->value());
 
   opt_general_default_filename(0, GMSH_SET, (char *)WID->gen_input[0]->value());
-  opt_general_tmp_filename(0, GMSH_SET, (char *)WID->gen_input[1]->value());
-  opt_general_error_filename(0, GMSH_SET, (char *)WID->gen_input[2]->value());
-  opt_general_options_filename(0, GMSH_SET, (char *)WID->gen_input[3]->value());
-  opt_general_editor(0, GMSH_SET, (char *)WID->gen_input[4]->value());
-  opt_general_web_browser(0, GMSH_SET, (char *)WID->gen_input[5]->value());
+  opt_general_editor(0, GMSH_SET, (char *)WID->gen_input[1]->value());
+  opt_general_web_browser(0, GMSH_SET, (char *)WID->gen_input[2]->value());
 
   int val;
   switch (WID->gen_choice[0]->value()) {
@@ -1348,26 +1345,6 @@ void help_short_cb(CALLBACK_ARGS)
 {
   // *INDENT-OFF*
   Msg(DIRECT, " ");
-  Msg(DIRECT, "Mouse:");
-  Msg(DIRECT, " ");
-  Msg(DIRECT, "  move                - highlight the elementary geometrical entity");
-  Msg(DIRECT, "                        currently under the mouse pointer and display");
-  Msg(DIRECT, "                        its properties in the status bar");
-  Msg(DIRECT, "                      - size a rubber zoom started with "XX"+Left button");
-  Msg(DIRECT, "  Left button         - rotate");
-  Msg(DIRECT, "                      - accept a rubber zoom started with "XX"+Left button"); 
-  Msg(DIRECT, "  "XX"+Left button     start (anisotropic) rubber zoom"); 
-  Msg(DIRECT, "  Middle button       - zoom (isotropic)");
-  Msg(DIRECT, "                      - cancel a rubber zoom");
-  Msg(DIRECT, "  "XX"+Middle button  orthogonalize display"); 
-  Msg(DIRECT, "  Right button        - pan");
-  Msg(DIRECT, "                      - cancel a rubber zoom");
-  Msg(DIRECT, "                      - pop up menu on post-processing view button");
-  Msg(DIRECT, "  "XX"+Right button   reset to default viewpoint");   
-  Msg(DIRECT, " ");   
-  Msg(DIRECT, "  For a 2 button mouse, Middle button = Shift+Left button");
-  Msg(DIRECT, "  For a 1 button mouse, Middle button = Shift+Left button, Right button = Alt+Left button");
-  Msg(DIRECT, " ");
   Msg(DIRECT, "Menu bar shortcuts:");
   Msg(DIRECT, " ");
   Msg(DIRECT, "  <             go back to previous context");
@@ -1429,6 +1406,34 @@ void help_short_cb(CALLBACK_ARGS)
   WID->create_message_window();
 }
 
+void help_mouse_cb(CALLBACK_ARGS)
+{
+  // *INDENT-OFF*
+  Msg(DIRECT, " ");
+  Msg(DIRECT, "Mouse:");
+  Msg(DIRECT, " ");
+  Msg(DIRECT, "  move                - highlight the elementary geometrical entity");
+  Msg(DIRECT, "                        currently under the mouse pointer and display");
+  Msg(DIRECT, "                        its properties in the status bar");
+  Msg(DIRECT, "                      - size a rubber zoom started with "XX"+Left button");
+  Msg(DIRECT, "  Left button         - rotate");
+  Msg(DIRECT, "                      - accept a rubber zoom started with "XX"+Left button"); 
+  Msg(DIRECT, "  "XX"+Left button     start (anisotropic) rubber zoom"); 
+  Msg(DIRECT, "  Middle button       - zoom (isotropic)");
+  Msg(DIRECT, "                      - cancel a rubber zoom");
+  Msg(DIRECT, "  "XX"+Middle button  orthogonalize display"); 
+  Msg(DIRECT, "  Right button        - pan");
+  Msg(DIRECT, "                      - cancel a rubber zoom");
+  Msg(DIRECT, "                      - pop up menu on post-processing view button");
+  Msg(DIRECT, "  "XX"+Right button   reset to default viewpoint");   
+  Msg(DIRECT, " ");   
+  Msg(DIRECT, "  For a 2 button mouse, Middle button = Shift+Left button");
+  Msg(DIRECT, "  For a 1 button mouse, Middle button = Shift+Left button, Right button = Alt+Left button");
+  Msg(DIRECT, " ");
+  // *INDENT-ON*
+  WID->create_message_window();
+}
+
 #undef XX
 
 void help_command_line_cb(CALLBACK_ARGS)
diff --git a/Fltk/Callbacks.h b/Fltk/Callbacks.h
index b1a63dae8200b2f9ec9e629bdfb654051b9eb744..a635d0eecd364840d279a78bbfe4dd461e1c2782 100644
--- a/Fltk/Callbacks.h
+++ b/Fltk/Callbacks.h
@@ -154,6 +154,7 @@ void visibility_ok_cb(CALLBACK_ARGS) ;
 // Help Menu
 
 void help_short_cb(CALLBACK_ARGS) ;
+void help_mouse_cb(CALLBACK_ARGS) ;
 void help_command_line_cb(CALLBACK_ARGS) ;
 void help_online_cb(CALLBACK_ARGS) ;
 void help_license_cb(CALLBACK_ARGS) ;
diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp
index f628834eea7a76190389ad617d06ec1692ecd4da..4238f1e42389c19bfff8fb1ec3b0b136dc1c174b 100644
--- a/Fltk/GUI.cpp
+++ b/Fltk/GUI.cpp
@@ -1,4 +1,4 @@
-// $Id: GUI.cpp,v 1.315 2004-06-08 00:30:21 geuzaine Exp $
+// $Id: GUI.cpp,v 1.316 2004-06-12 18:34:31 geuzaine Exp $
 //
 // Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 //
@@ -89,6 +89,7 @@ Fl_Menu_Item m_menubar_table[] = {
     {0},
   {"&Help", 0, 0, 0, FL_SUBMENU},
     {"&Current options...",      0, (Fl_Callback *)status_xyz1p_cb, (void*)5},
+    {"M&ouse...",                0, (Fl_Callback *)help_mouse_cb, 0},
     {"S&hortcuts...",            0, (Fl_Callback *)help_short_cb, 0},
     {"C&ommand line options...", 0, (Fl_Callback *)help_command_line_cb, 0, FL_MENU_DIVIDER},
     {"On&line documentation",    0, (Fl_Callback *)help_online_cb, 0, FL_MENU_DIVIDER},
@@ -119,6 +120,7 @@ Fl_Menu_Item m_sys_menubar_table[] = {
     {0},
   {"Help",0,0,0,FL_SUBMENU},
     {"Current Options...",      0, (Fl_Callback *)status_xyz1p_cb, (void*)5},
+    {"Mouse...",                0, (Fl_Callback *)help_mouse_cb, 0},
     {"Shortcuts...",            0, (Fl_Callback *)help_short_cb, 0},
     {"Command Line Options...", 0, (Fl_Callback *)help_command_line_cb, 0, FL_MENU_DIVIDER},
     {"Online Documentation",    0, (Fl_Callback *)help_online_cb, 0, FL_MENU_DIVIDER},
@@ -1456,10 +1458,10 @@ void GUI::create_option_window()
 
       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[2] = new Fl_Check_Button(2 * WB, 2 * WB + 4 * BH, BW, BH, "Draw simplified model while rotating, panning and zooming");
       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 fake transparency");
-      gen_butt[5] = new Fl_Check_Button(2 * WB, 2 * WB + 7 * BH, BW, BH, "Use trackball rotation mode");
+      gen_butt[4] = new Fl_Check_Button(2 * WB, 2 * WB + 6 * BH, BW, BH, "Use fake transparency mode");
+      gen_butt[5] = new Fl_Check_Button(2 * WB, 2 * WB + 7 * BH, BW, BH, "Use trackball rotation mode instead of Euler angles");
       for(i = 0; i < 6; i++) {
         gen_butt[i]->type(FL_TOGGLE_BUTTON);
         gen_butt[i]->down_box(TOGGLE_BOX);
@@ -1486,13 +1488,16 @@ void GUI::create_option_window()
       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");
+      gen_butt[9] = new Fl_Check_Button(2 * WB, 2 * WB + 3 * BH, BW/2-WB, 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);
       }
 
+      Fl_Button *b0 = new Fl_Button(width / 2, 2 * WB + 3 * BH, 2 * BB, BH, "Restore default options");
+      b0->callback(options_restore_defaults_cb);
+
       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);
@@ -1504,23 +1509,15 @@ void GUI::create_option_window()
       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");
-      for(i = 0; i < 4; 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");
-      b0->callback(options_restore_defaults_cb);
+      gen_input[0]->align(FL_ALIGN_RIGHT);
 
       o->end();
     }
     {
       Fl_Group *o = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Helpers");
-      gen_input[4] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Text editor command");
-      gen_input[5] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Web browser command");
-      for(i = 4; i < 6; i++) {
+      gen_input[1] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, IW, BH, "Text editor command");
+      gen_input[2] = new Fl_Input(2 * WB, 2 * WB + 2 * BH, IW, BH, "Web browser command");
+      for(i = 1; i <= 2; i++) {
         gen_input[i]->align(FL_ALIGN_RIGHT);
       }
       o->end();
@@ -1635,7 +1632,7 @@ void GUI::create_option_window()
     {
       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 duplicate entities)");
       geo_butt[8]->type(FL_TOGGLE_BUTTON);
       geo_butt[8]->down_box(TOGGLE_BOX);
       geo_butt[8]->selection_color(TOGGLE_COLOR);
diff --git a/configure b/configure
index f454c1cae198a0383df078ab7b10474a5135fe67..f91e58457b38d384fb85579571bfba3ee1cc7354 100755
--- a/configure
+++ b/configure
@@ -3170,7 +3170,9 @@ GMSH_DIRS="Common DataStr Geo Mesh Numeric Parallel Parser Plugin"
 if test "x$enable_gui" != "xno"; then
 
   GMSH_DIRS="${GMSH_DIRS} Graphics Fltk"
-  GMSH_LIBS="-Llib -lGmshFltk -lGmshParser -lGmshGraphics -lGmshMesh -lGmshGeo -lGmshNumeric -lGmshCommon -lGmshDataStr -lGmshPlugin -lGmshParallel"
+  GMSH_LIBS="-Llib -lGmshFltk -lGmshParser -lGmshGraphics -lGmshMesh -lGmshGeo"
+  GMSH_LIBS="${GMSH_LIBS} -lGmshNumeric -lGmshCommon -lGmshDataStr -lGmshPlugin"
+  GMSH_LIBS="${GMSH_LIBS} -lGmshParallel"
   FLAGS="-DHAVE_FLTK ${FLAGS}"
 
   if test "x${FLTK_PREFIX}" != "x" ; then
@@ -3478,7 +3480,8 @@ fi
 else
 
   GMSH_DIRS="${GMSH_DIRS} Box"
-  GMSH_LIBS="-Llib -lGmshBox -lGmshParser -lGmshMesh -lGmshGeo -lGmshNumeric -lGmshPlugin -lGmshCommon -lGmshDataStr -lGmshParallel"
+  GMSH_LIBS="-Llib -lGmshBox -lGmshParser -lGmshMesh -lGmshGeo -lGmshNumeric"
+  GMSH_LIBS="${GMSH_LIBS} -lGmshPlugin -lGmshCommon -lGmshDataStr -lGmshParallel"
 
 fi
 
@@ -5300,4 +5303,3 @@ echo "- OS    : $UNAME"
 echo "- OPTIM : $OPTIM"
 echo "- FLAGS : $FLAGS"
 echo "********************************************************************"
-
diff --git a/configure.in b/configure.in
index c2008c066cc4eca2461477ba06fbd2b70d9c83cb..ed200de6cdb0801dacb7b374bfcff12a497393d9 100644
--- a/configure.in
+++ b/configure.in
@@ -1,4 +1,4 @@
-dnl $Id: configure.in,v 1.52 2004-05-12 06:05:52 geuzaine Exp $
+dnl $Id: configure.in,v 1.53 2004-06-12 18:34:31 geuzaine Exp $
 dnl
 dnl Copyright (C) 1997-2004 C. Geuzaine, J.-F. Remacle
 dnl
@@ -129,7 +129,9 @@ dnl Choose blackbox or GUI version
 if test "x$enable_gui" != "xno"; then
 
   GMSH_DIRS="${GMSH_DIRS} Graphics Fltk"
-  GMSH_LIBS="-Llib -lGmshFltk -lGmshParser -lGmshGraphics -lGmshMesh -lGmshGeo -lGmshNumeric -lGmshCommon -lGmshDataStr -lGmshPlugin -lGmshParallel"
+  GMSH_LIBS="-Llib -lGmshFltk -lGmshParser -lGmshGraphics -lGmshMesh -lGmshGeo"
+  GMSH_LIBS="${GMSH_LIBS} -lGmshNumeric -lGmshCommon -lGmshDataStr -lGmshPlugin"
+  GMSH_LIBS="${GMSH_LIBS} -lGmshParallel"
   FLAGS="-DHAVE_FLTK ${FLAGS}"
 
   if test "x${FLTK_PREFIX}" != "x" ; then
@@ -206,7 +208,8 @@ if test "x$enable_gui" != "xno"; then
 else
 
   GMSH_DIRS="${GMSH_DIRS} Box"
-  GMSH_LIBS="-Llib -lGmshBox -lGmshParser -lGmshMesh -lGmshGeo -lGmshNumeric -lGmshPlugin -lGmshCommon -lGmshDataStr -lGmshParallel"
+  GMSH_LIBS="-Llib -lGmshBox -lGmshParser -lGmshMesh -lGmshGeo -lGmshNumeric"
+  GMSH_LIBS="${GMSH_LIBS} -lGmshPlugin -lGmshCommon -lGmshDataStr -lGmshParallel"
 
 fi
 
@@ -395,4 +398,3 @@ echo "- OS    : $UNAME"
 echo "- OPTIM : $OPTIM"
 echo "- FLAGS : $FLAGS"
 echo "********************************************************************"
-