--- a/src/drawing.c	2012-09-08 18:05:56.000000000 +0700
+++ b/src/drawing.c	2012-09-07 22:55:04.000000000 +0700
@@ -409,58 +409,6 @@
     gdk_gc_set_clip_rectangle(drawing->gc, &rect);
 }
 
-gboolean
-drawing_prompt_to_save(gpaint_drawing *drawing)
-{
-    gboolean cancel = FALSE;
-    debug_fn();
-    
-    if (drawing->modified)
-    {
-        GtkWidget *dialog;
-        gint result;
-        dialog = gtk_message_dialog_new(
-               GTK_WINDOW(drawing->top_level), 
-               GTK_DIALOG_MODAL, 
-               GTK_MESSAGE_WARNING, 
-               GTK_BUTTONS_NONE, 
-               _("Do you want to save the changes you made to \"%s\"?\nYour changes will be lost if you don't save them."),
-               drawing->filename->str);
-#ifdef GTK_STOCK_DISCARD
-        gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_DISCARD,GTK_RESPONSE_NO);
-#else
-        gtk_dialog_add_button(GTK_DIALOG(dialog), _("Close _without Saving"), GTK_RESPONSE_NO);
-#endif /* !GTK_STOCK_DISCARD */
-        gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
-        gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_SAVE, GTK_RESPONSE_YES);
-        
-        result = gtk_dialog_run(GTK_DIALOG(dialog));
-        gtk_widget_destroy(GTK_WIDGET(dialog));
-        while (gtk_events_pending())
-        {
-           gtk_main_iteration();
-        }
-
-        switch (result)
-        {
-            case GTK_RESPONSE_YES:
-                if (drawing_save(drawing))
-                {
-                    cancel = FALSE;
-                }
-                else
-                {
-                    cancel = TRUE;
-                }
-                break;
-            case GTK_RESPONSE_CANCEL:
-                cancel = TRUE;
-                break;
-         }
-    }
-    return cancel;
-}
-
 void
 drawing_rotate(gpaint_drawing *drawing, int degrees)
 {
--- a/src/drawing.h	2012-09-08 18:05:56.000000000 +0700
+++ b/src/drawing.h	2012-09-07 22:55:34.000000000 +0700
@@ -57,7 +57,6 @@
 gpaint_image *drawing_create_image(gpaint_drawing *drawing);
 void drawing_clear(gpaint_drawing *drawing);
 void drawing_clear_selection(gpaint_drawing *drawing, gpaint_point_array *points);
-gboolean drawing_prompt_to_save(gpaint_drawing *drawing);
 void drawing_rotate(gpaint_drawing *drawing, int degrees);
 
 #endif
--- a/src/file.c	2007-09-10 16:33:17.000000000 +0700
+++ b/src/file.c	2012-09-07 22:57:12.000000000 +0700
@@ -125,7 +125,7 @@
     g_string_free(filename, TRUE);
 }
 
-void
+int
 file_save_as_dialog(gpaint_canvas *canvas)
 {
     GtkWidget *dialog;
@@ -160,10 +160,77 @@
         {
             gtk_main_iteration();
         }
-        drawing_save_as(canvas->drawing, filename);
+        return drawing_save_as(canvas->drawing, filename);
     } else {
         gtk_widget_destroy(GTK_WIDGET(dialog));
+        return FALSE;
+    }
+}
+
+int
+file_prompt_to_save(gpaint_canvas *canvas)
+{
+    int cancel = FALSE;
+    debug_fn();
+    
+    if (canvas->drawing->modified)
+    {
+        GtkWidget *dialog;
+        gint result;
+        dialog = gtk_message_dialog_new(
+               GTK_WINDOW(canvas->drawing->top_level), 
+               GTK_DIALOG_MODAL, 
+               GTK_MESSAGE_WARNING, 
+               GTK_BUTTONS_NONE, 
+               _("Do you want to save the changes you made to \"%s\"?\nYour changes will be lost if you don't save them."),
+               canvas->drawing->filename->str);
+#ifdef GTK_STOCK_DISCARD
+        gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_DISCARD,GTK_RESPONSE_NO);
+#else
+        gtk_dialog_add_button(GTK_DIALOG(dialog), _("Close _without Saving"), GTK_RESPONSE_NO);
+#endif /* !GTK_STOCK_DISCARD */
+        gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
+        gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_SAVE, GTK_RESPONSE_YES);
+        
+        result = gtk_dialog_run(GTK_DIALOG(dialog));
+        gtk_widget_destroy(GTK_WIDGET(dialog));
+        while (gtk_events_pending())
+        {
+           gtk_main_iteration();
+        }
+
+        switch (result)
+        {
+            case GTK_RESPONSE_YES:
+                if (canvas->drawing->untitled)
+                {
+                    if(file_save_as_dialog(canvas))
+                    {
+                        cancel = FALSE;
+                    }
+                    else
+                    {
+                        cancel = TRUE;
+                    }
+                }
+                else
+                {
+                    if(drawing_save(canvas->drawing))
+                    {
+                        cancel = FALSE;
+                    }
+                    else
+                    {
+                        cancel = TRUE;
+                    }
+                }
+                break;
+            case GTK_RESPONSE_CANCEL:
+                cancel = TRUE;
+                break;
+         }
     }
+    return cancel;
 }
 
 void
--- a/src/file.h	2007-08-27 03:21:02.000000000 +0700
+++ b/src/file.h	2012-09-07 22:53:30.000000000 +0700
@@ -23,7 +23,8 @@
 #ifndef __FILE_H__
 #define __FILE_H__
 
-void file_save_as_dialog(gpaint_canvas *canvas);
+int file_save_as_dialog(gpaint_canvas *canvas);
+int file_prompt_to_save(gpaint_canvas *canvas);
 void file_open_dialog(gpaint_canvas *canvas);
 void file_new_dialog(gpaint_canvas *canvas);
 
--- a/src/main.c	2012-09-08 18:05:56.000000000 +0700
+++ b/src/main.c	2012-09-07 22:54:59.000000000 +0700
@@ -32,6 +32,7 @@
 #include "canvas.h"
 #include "tool_palette.h"
 #include "util.h"
+#include "file.h"
 
 
 static GList *window_list = 0;
@@ -137,7 +138,7 @@
     debug_fn();
     canvas = canvas_lookup(widget);
     canvas_commit_change(canvas);
-    cancel_exit = drawing_prompt_to_save(canvas->drawing);
+    cancel_exit = file_prompt_to_save(canvas);
     debug1("cancel_exit is %d", cancel_exit);
 
     /* When this function returns FALSE, the delete-event signal 
@@ -237,7 +238,7 @@
     debug1("top_level_widget=%p", top_level_widget);
     canvas_commit_change(canvas);
     
-    cancel_exit = drawing_prompt_to_save(canvas->drawing);
+    cancel_exit = file_prompt_to_save(canvas);
     debug1("cancel_exit is %d", cancel_exit);
 
     if (!cancel_exit)
@@ -311,7 +312,7 @@
         widget = GTK_WIDGET(node->data);
         canvas = canvas_lookup(widget);
         canvas_commit_change(canvas);
-        if (!drawing_prompt_to_save(canvas->drawing))
+        if (!file_prompt_to_save(canvas))
         {
             gtk_widget_destroy(widget);
         }
--- a/src/menu.c	2012-09-08 18:05:56.000000000 +0700
+++ b/src/menu.c	2012-09-07 22:58:25.000000000 +0700
@@ -121,7 +121,7 @@
     gpaint_canvas *canvas = canvas_lookup(GTK_WIDGET(menuitem));
     /* Give the user a chance to save their work before we create
      * a new drawing! */
-    if (!drawing_prompt_to_save(canvas->drawing))
+    if (!file_prompt_to_save(canvas))
     {
         file_new_dialog(canvas);
     }
@@ -133,7 +133,7 @@
 {
     gpaint_canvas *canvas = canvas_lookup(GTK_WIDGET(menuitem));
     canvas_begin_busy_cursor(canvas);
-    if (!drawing_prompt_to_save(canvas->drawing))
+    if (!file_prompt_to_save(canvas))
     {
         file_open_dialog(canvas);
     }
@@ -146,7 +146,7 @@
 {
     gpaint_canvas *canvas = canvas_lookup(GTK_WIDGET(button));
     canvas_begin_busy_cursor(canvas);
-    if (!drawing_prompt_to_save(canvas->drawing))
+    if (!file_prompt_to_save(canvas))
     {
         file_open_dialog(canvas);
     }
@@ -247,7 +247,7 @@
 
     /* Give the user a chance to save their work before we create
      * a new drawing! */
-    if (!drawing_prompt_to_save(canvas->drawing))
+    if (!file_prompt_to_save(canvas))
     {
         file_new_dialog(canvas);
     }
@@ -404,7 +404,7 @@
     gpaint_canvas *canvas = canvas_lookup(GTK_WIDGET(menuitem));
     /* Give the user a chance to save their work before we create
      * a new drawing! */
-    if (!drawing_prompt_to_save(canvas->drawing))
+    if (!file_prompt_to_save(canvas))
     {
         gpaint_drawing *drawing = drawing_new_from_desktop(canvas->drawing_area, canvas->gc);
         if (drawing)
