diff -pru dillo/src/browser.h dillo.new/src/browser.h
--- dillo/src/browser.h	Fri May 18 22:12:34 2001
+++ dillo.new/src/browser.h	Sat Jun  2 11:45:33 2001
@@ -97,9 +97,7 @@ struct _BrowserWindow
    GtkWidget *openfile_dialog_window;
    GtkWidget *quit_dialog_window;
    GtkWidget *save_dialog_window;
-   GtkWidget *save_dialog_entry;
    GtkWidget *save_link_dialog_window;
-   GtkWidget *save_link_dialog_entry;
    GtkWidget *findtext_dialog_window;
    GtkWidget *findtext_dialog_entry;
 
diff -pru dillo/src/interface.c dillo.new/src/interface.c
--- dillo/src/interface.c	Sat May 26 20:10:13 2001
+++ dillo.new/src/interface.c	Sat Jun  2 12:08:36 2001
@@ -709,9 +709,11 @@ va_list argp;
 
 /*
  * hmm.. have to see where this is from
+ * Called from `destroy' callback in Interface_make_*_dialog
  */
 void Interface_destroy_window(GtkWidget *widget, GtkWidget **window)
 {
+   gtk_widget_destroy(*window);
    *window = NULL;
 }
 
@@ -738,6 +740,31 @@ void a_Interface_quit_all(void)
    g_free(bws);
 }
 
+/*
+ * Make a dialog for choosing files (by calling
+ * gtk_file_selection_*() calls)
+ * This can be used for saving, opening, or whatever, 
+ * just set the correct callbacks
+ */
+static void
+  Interface_make_choose_file_dialog(GtkWidget **DialogWindow, 
+				    char *WmName, char *WmClass, char *WTitle, 
+				    GtkSignalFunc B1CallBack, void *B1CbData)
+{
+   *DialogWindow = gtk_file_selection_new(WTitle);
+   gtk_window_set_modal(GTK_WINDOW(*DialogWindow), FALSE);
+   gtk_window_set_wmclass(GTK_WINDOW(*DialogWindow),
+			  WmName, WmClass);
+   
+   gtk_file_selection_hide_fileop_buttons (GTK_FILE_SELECTION (*DialogWindow)); 
+   gtk_signal_connect(GTK_OBJECT(*DialogWindow), "destroy",
+		      (GtkSignalFunc) Interface_destroy_window, DialogWindow);
+   gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION (*DialogWindow)->ok_button),
+		      "clicked", (GtkSignalFunc) B1CallBack, B1CbData);
+   gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION (*DialogWindow)->cancel_button),
+		      "clicked", (GtkSignalFunc) Interface_destroy_window,
+		      DialogWindow);
+}
 
 /*
  * Get the file URL from the widget and push it to the browser window.
@@ -801,22 +828,12 @@ void a_Interface_entry_open_url(GtkWidge
 void a_Interface_openfile_dialog(BrowserWindow *bw)
 {
    if (!bw->openfile_dialog_window) {
-      bw->openfile_dialog_window = gtk_file_selection_new("Open File");
-      gtk_window_set_wmclass(GTK_WINDOW(bw->openfile_dialog_window),
-                             "openfile_dialog", "Dillo");
-      gtk_signal_connect(
-         GTK_OBJECT(bw->openfile_dialog_window), "destroy",
-         GTK_SIGNAL_FUNC (Interface_destroy_window), 
-         &(bw->openfile_dialog_window));
-      gtk_signal_connect(
-         GTK_OBJECT(GTK_FILE_SELECTION(bw->openfile_dialog_window)->ok_button),
-         "clicked", GTK_SIGNAL_FUNC (Interface_openfile_ok_callback), bw);
-      gtk_signal_connect_object(
-         GTK_OBJECT(GTK_FILE_SELECTION(
-            bw->openfile_dialog_window)->cancel_button),
-         "clicked", (GtkSignalFunc) gtk_widget_hide,
-         GTK_OBJECT(bw->openfile_dialog_window));
+      Interface_make_choose_file_dialog(&(bw->openfile_dialog_window),
+					"openfile_dialog", "Dillo", "Dillo: Open File",
+					(GtkSignalFunc) Interface_openfile_ok_callback, 
+					(void *)bw);
    }
+
    if (!GTK_WIDGET_VISIBLE(bw->openfile_dialog_window))
       gtk_widget_show(bw->openfile_dialog_window);
    else
@@ -934,16 +951,17 @@ void Interface_save_callback(int Op, Cac
 /*
  * Save current page to a local file
  */
-void Interface_entry_save_url(GtkWidget *widget, BrowserWindow *bw)
+void Interface_file_save_url(GtkWidget *widget, BrowserWindow *bw)
 {
    const char *url_str, *name;
-   GtkEntry *entry, *entry_url;
+   GtkFileSelection *choosefile;
+   GtkEntry *entry_url;
    DilloUrl *url;
    FILE *out;
 
-   entry = GTK_ENTRY(bw->save_dialog_entry);
+   choosefile = GTK_FILE_SELECTION(bw->save_dialog_window);
    entry_url = GTK_ENTRY(bw->location);
-   name = gtk_entry_get_text(entry);
+   name = gtk_file_selection_get_filename(choosefile);
    url_str = gtk_entry_get_text(entry_url);
    url = a_Url_new(url_str, NULL, 0, 0);
    
@@ -957,20 +975,19 @@ void Interface_entry_save_url(GtkWidget 
    }
    a_Url_free(url);
 
-   if (bw->save_dialog_window != NULL)
-      gtk_widget_destroy(bw->save_dialog_window);
+   gtk_widget_destroy(bw->save_dialog_window);
 }
 
 /*
  * Save the link-URL to a local file
  */
-void Interface_entry_save_link(GtkWidget *widget, BrowserWindow *bw)
+void Interface_file_save_link(GtkWidget *widget, BrowserWindow *bw)
 {
    const gchar *name;
    const DilloUrl *url;
    FILE *out;
 
-   name = gtk_entry_get_text(GTK_ENTRY(bw->save_link_dialog_entry));
+   name = gtk_file_selection_get_filename(GTK_FILE_SELECTION(bw->save_link_dialog_window));
    url  = bw->menu_popup.info.url;
 
    if ( strlen(name) && (out = fopen(name, "w")) != NULL ) {
@@ -982,8 +999,7 @@ void Interface_entry_save_link(GtkWidget
       a_Cache_open_url(url, Interface_save_callback, Web);
    }
 
-   if (bw->save_link_dialog_window != NULL)
-      gtk_widget_destroy(bw->save_link_dialog_window);
+   gtk_widget_destroy(bw->save_link_dialog_window);
 }
 
 /*
@@ -1009,16 +1025,19 @@ void a_Interface_save_dialog(GtkWidget *
    if (!bw->save_dialog_window) {
       url = a_Url_new(gtk_entry_get_text(GTK_ENTRY(bw->location)), NULL, 0, 0);
       SuggestedName = Interface_make_save_name(url);
-      Interface_make_dialog(&(bw->save_dialog_window), "save_dialog", "Dillo",
-         "Dillo: Save URL as file", &(bw->save_dialog_entry), SuggestedName,
-         "OK", (GtkSignalFunc) Interface_entry_save_url, (void *)bw);
+      Interface_make_choose_file_dialog(&(bw->save_dialog_window),
+	"save_dialog", "Dillo", "Dillo: Save URL as File...",
+	(GtkSignalFunc) Interface_file_save_url, (void *)bw);
+      gtk_file_selection_set_filename(GTK_FILE_SELECTION(bw->save_dialog_window), 
+				      SuggestedName);
       g_free(SuggestedName);
    }
 
    if (!GTK_WIDGET_VISIBLE(bw->save_dialog_window))
       gtk_widget_show(bw->save_dialog_window);
-   else
-      gtk_widget_hide(bw->save_dialog_window);
+   else 
+      /* gtk_widget_hide(bw->save_dialog_window); */
+      gtk_widget_destroy(bw->save_dialog_window);
 }
 
 /*
@@ -1030,17 +1049,21 @@ void a_Interface_save_link_dialog(GtkWid
 
    if (!bw->save_link_dialog_window) {
       SuggestedName = Interface_make_save_name(bw->menu_popup.info.url);
-      Interface_make_dialog(&(bw->save_link_dialog_window),
-         "save_link_dialog", "Dillo", "Dillo: Save link as file",
-         &(bw->save_link_dialog_entry), SuggestedName,
-         "OK", (GtkSignalFunc) Interface_entry_save_link, (void *)bw);
+      Interface_make_choose_file_dialog(&(bw->save_link_dialog_window),
+				"save_link_dialog", "Dillo", 
+				"Dillo: Save link as File...",
+				(GtkSignalFunc) Interface_file_save_link,
+				(void *)bw);
+      gtk_file_selection_set_filename(GTK_FILE_SELECTION(bw->save_link_dialog_window), 
+				      SuggestedName);
       g_free(SuggestedName);
    }
 
    if (!GTK_WIDGET_VISIBLE(bw->save_link_dialog_window))
       gtk_widget_show(bw->save_link_dialog_window);
    else
-      gtk_widget_hide(bw->save_link_dialog_window);
+      /*      gtk_widget_hide(bw->save_link_dialog_window);  */
+      gtk_widget_destroy(bw->save_link_dialog_window);
 }
 
 /*
