diff --git a/Common/DefaultOptions.h b/Common/DefaultOptions.h
index c0565aac3baef6126c263afd9bae63c97154db20..8e3c3b17f52d7a36964017883cbdd7af5e6ab76f 100644
--- a/Common/DefaultOptions.h
+++ b/Common/DefaultOptions.h
@@ -64,7 +64,7 @@ StringXString GeneralOptions_String[] = {
 #else
     "emacs %s &" ,
 #endif
-    "System command to launch a text editor (OS-dependent)" },
+    "System command to launch a text editor" },
   { F|S, "TmpFileName" , opt_general_tmp_filename , ".gmsh-tmp" ,
     "Temporary file used by the geometry module" },
 
@@ -74,9 +74,9 @@ StringXString GeneralOptions_String[] = {
 #elif defined(__APPLE__)
     "open %s" ,
 #else
-    "mozilla %s &" ,
+    "if [[ $(ps -e|grep mozilla|grep -v grep) ]]; then mozilla -remote 'openurl(%s)' ; else mozilla %s ; fi &" ,
 #endif
-    "System command to launch a web browser (OS-dependent)" },
+    "System command to launch a web browser" },
 
   { 0, NULL , NULL , NULL , NULL }
 } ;
diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp
index 08da046294a9658a07e9d274f5bf2ed197adb65d..46c2b2fff19e0a1bb6b0994e7c16dbb8877f0811 100644
--- a/Fltk/Callbacks.cpp
+++ b/Fltk/Callbacks.cpp
@@ -1,4 +1,4 @@
-// $Id: Callbacks.cpp,v 1.192 2003-12-03 04:28:18 geuzaine Exp $
+// $Id: Callbacks.cpp,v 1.193 2003-12-03 22:17:49 geuzaine Exp $
 //
 // Copyright (C) 1997-2003 C. Geuzaine, J.-F. Remacle
 //
@@ -1495,11 +1495,36 @@ void help_about_cb(CALLBACK_ARGS)
   WID->create_about_window();
 }
 
+void _replace_multi_format(char *in, char *val, char *out){
+  int i = 0, j = 0;
+
+  out[0] = '\0';
+  while(i < strlen(in)){
+    if(in[i] == '%' && i != strlen(in)-1){
+      if(in[i+1] == 's'){
+	strcat(out, val);
+	i += 2;
+	j += strlen(val);
+      }
+      else{
+	Msg(WARNING, "Skipping unknown format '%%%c' in '%s'", in[i+1], in);
+	i += 2;
+      }
+    }
+    else{
+      out[j] = in[i];
+      out[j+1] = '\0';
+      i++;
+      j++;
+    }
+  }
+  out[j] = '\0';
+}
+
 void help_online_cb(CALLBACK_ARGS)
 {
   char cmd[1000];
-  sprintf(cmd, CTX.web_browser, "http://www.geuz.org/gmsh/doc/texinfo/");
-  Msg(INFO, "Starting web browser '%s'", cmd);
+  _replace_multi_format(CTX.web_browser, "http://www.geuz.org/gmsh/doc/texinfo/", cmd);
   SystemCall(cmd);
 }
 
@@ -1550,8 +1575,7 @@ void geometry_physical_cb(CALLBACK_ARGS)
 void geometry_edit_cb(CALLBACK_ARGS)
 {
   char cmd[1000];
-  sprintf(cmd, CTX.editor, CTX.filename);
-  Msg(INFO, "Starting text editor '%s'", cmd);
+  _replace_multi_format(CTX.editor, CTX.filename, cmd);
   SystemCall(cmd);
 }