diff --git a/Unix/CbFile.cpp b/Unix/CbFile.cpp
index 103a5026c08c5919aee59e428bcc09eb06d851e7..8561bf29ce3a814bf8a57b10f20ebdc7a4576030 100644
--- a/Unix/CbFile.cpp
+++ b/Unix/CbFile.cpp
@@ -1,4 +1,4 @@
-/* $Id: CbFile.cpp,v 1.15 2000-12-21 08:02:06 geuzaine Exp $ */
+/* $Id: CbFile.cpp,v 1.16 2000-12-21 14:53:10 geuzaine Exp $ */
 
 #include <unistd.h>
 
@@ -25,8 +25,6 @@ extern XContext_T  XCTX;
 extern Widgets_T   WID;
 extern Mesh        M;
 
-static int WARNING_OVERRIDE = 0;
-
 /* ------------------------------------------------------------------------ */
 /*  C r e a t e I m a g e                                                   */
 /* ------------------------------------------------------------------------ */
@@ -36,11 +34,10 @@ void SaveToDisk (char *FileName, Widget warning,
   FILE    *fp ;
   static char KeepFileName[256];
 
-  if(!WARNING_OVERRIDE){
+  if(FileName){
     fp = fopen(FileName,"r");
     if(fp) {      
       XtManageChild(warning);
-      WARNING_OVERRIDE = 1;
       strcpy(KeepFileName,FileName);
       fclose(fp);
       return;
@@ -51,8 +48,6 @@ void SaveToDisk (char *FileName, Widget warning,
   }
 
   function(KeepFileName, CTX.print.format);
-
-  WARNING_OVERRIDE = 0;
 }
 
 void CreateFile (char *name, int format) {
@@ -112,7 +107,6 @@ void CreateFile (char *name, int format) {
   case FORMAT_XPM :
     if(!(fp = fopen(name,"wb"))) {
       Msg(WARNING, "Unable to Open File '%s'", name); 
-      WARNING_OVERRIDE = 0;
       return;
     }
     Window_Dump(XCTX.display, XCTX.scrnum, XtWindow(WID.G.glw), fp);    
@@ -124,7 +118,6 @@ void CreateFile (char *name, int format) {
   case FORMAT_JPEG :
     if(!(fp = fopen(name,"wb"))) {
       Msg(WARNING, "Unable to Open File '%s'", name); 
-      WARNING_OVERRIDE = 0;
       return;
     }
     Replot();
@@ -139,7 +132,6 @@ void CreateFile (char *name, int format) {
     // have to replot for filling again buffer ...
     if(!(fp = fopen(name,"wb"))) {
       Msg(WARNING, "Unable to Open File '%s'", name); 
-      WARNING_OVERRIDE = 0;
       return;
     }
     Replot();
@@ -153,7 +145,6 @@ void CreateFile (char *name, int format) {
   case FORMAT_PPM :
     if(!(fp = fopen(name,"wb"))) {
       Msg(WARNING, "Unable to Open File '%s'", name); 
-      WARNING_OVERRIDE = 0;
       return;
     }
     Replot();
@@ -171,7 +162,6 @@ void CreateFile (char *name, int format) {
     case 0 : // Bitmap EPS
       if(!(fp = fopen(name,"w"))) {
 	Msg(WARNING, "Unable to Open File '%s'", name); 
-	WARNING_OVERRIDE = 0;
 	return;
       }
       if(!(tmp = fopen(tmpFileName,"w"))){
@@ -192,7 +182,6 @@ void CreateFile (char *name, int format) {
     default : // Vector EPS
       if(!(fp = fopen(name,"w"))) {
 	Msg(WARNING, "Unable to Open File '%s'", name); 
-	WARNING_OVERRIDE = 0;
 	return;
       }
       CTX.print.gl_fonts = 0;
@@ -234,10 +223,14 @@ void CreateFile (char *name, int format) {
 void FileCb(Widget w, XtPointer client_data, XtPointer call_data){
   char      *c;
   XmString  xms;
-  
-  if((long int)client_data == FILE_SAVE_MESH){
+
+  switch ((long int)client_data) {
+  case FILE_SAVE_MESH :
     Print_Mesh(&M, NULL, CTX.mesh.format); 
     return;
+  case FILE_SAVE_AS_OVERWRITE :
+    SaveToDisk(NULL, WID.ED.saveAsDialog, CreateFile);
+    return;
   }
 
   XtVaGetValues(w, XmNtextString, &xms, NULL);
@@ -247,7 +240,6 @@ void FileCb(Widget w, XtPointer client_data, XtPointer call_data){
   switch ((long int)client_data) {
   case FILE_LOAD_GEOM       : OpenProblem(c); Init(); Draw(); break;
   case FILE_LOAD_POST       : MergeProblem(c); ColorBarRedraw(); Init(); Draw(); break;
-  case FILE_CANCEL          : WARNING_OVERRIDE = 0; break;
   case FILE_SAVE_AS         : SaveToDisk(c, WID.ED.saveAsDialog, CreateFile); break;
   case FILE_SAVE_OPTIONS_AS : Print_Context(c); break;
   default :
diff --git a/Unix/CbFile.h b/Unix/CbFile.h
index 0a410237cb5cb419a628d5b84bfb5e1a0f350f53..ad634dbaa9d685bef32635a9d39cb209cb5bec14 100644
--- a/Unix/CbFile.h
+++ b/Unix/CbFile.h
@@ -1,4 +1,4 @@
-/* $Id: CbFile.h,v 1.6 2000-12-20 12:17:13 geuzaine Exp $ */
+/* $Id: CbFile.h,v 1.7 2000-12-21 14:53:10 geuzaine Exp $ */
 #ifndef _CB_FILE_H_
 #define _CB_FILE_H_
 
@@ -6,7 +6,7 @@
 #define  FILE_LOAD_POST                         302
 #define  FILE_SAVE_MESH                         303
 #define  FILE_SAVE_AS                           304
-#define  FILE_SAVE_OPTIONS_AS                   305
-#define  FILE_CANCEL                            306
+#define  FILE_SAVE_AS_OVERWRITE                 305
+#define  FILE_SAVE_OPTIONS_AS                   306
 
 #endif
diff --git a/Unix/Register.cpp b/Unix/Register.cpp
index df30134ee886a13ccab2647ae8b7e6636add9e71..f823d3ff19c66955564deba5f0ef96a173d716cd 100644
--- a/Unix/Register.cpp
+++ b/Unix/Register.cpp
@@ -1,4 +1,4 @@
-/* $Id: Register.cpp,v 1.16 2000-12-21 08:02:06 geuzaine Exp $ */
+/* $Id: Register.cpp,v 1.17 2000-12-21 14:53:10 geuzaine Exp $ */
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -121,8 +121,7 @@ void RegisterCallbacks_C(Widgets_T *w){
 
 void RegisterCallbacks_ED(Widgets_T *w){
 
-  register_ok_cb     (w->ED.saveAsDialog, FileCb, FILE_SAVE_AS);
-  register_cancel_cb (w->ED.saveAsDialog, FileCb, FILE_CANCEL);
+  register_ok_cb     (w->ED.saveAsDialog, FileCb,   FILE_SAVE_AS_OVERWRITE);
 
 }
 
diff --git a/Unix/Widgets.cpp b/Unix/Widgets.cpp
index 5824ece389bd6f57dc7c3f0015a3d67a3562ee0d..8715b120d5d2502ddbf16115596a5ce36833d19d 100644
--- a/Unix/Widgets.cpp
+++ b/Unix/Widgets.cpp
@@ -1,4 +1,4 @@
-/* $Id: Widgets.cpp,v 1.22 2000-12-21 08:02:06 geuzaine Exp $ */
+/* $Id: Widgets.cpp,v 1.23 2000-12-21 14:53:10 geuzaine Exp $ */
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -562,6 +562,7 @@ void CreateWidgets_ED(Widgets_T *w){
   i=0 ;
   XtSetArg(arg[i], XmNdialogTitle, XmStringCreateSimple("Warning")); i++;
   XtSetArg(arg[i], XmNmessageString, XmStringCreateSimple("File exists")); i++;
+  XtSetArg(arg[i], XmNautoUnmanage, True); i++;
   w->ED.saveAsDialog = XmCreateWarningDialog(w->M.shell, "EDsaveAsDialog", arg, i);
 
   tmp = XmMessageBoxGetChild(w->ED.saveAsDialog, XmDIALOG_HELP_BUTTON);