Index: code/commands/file-tasks/task-save.cpp
===================================================================
--- code/commands/file-tasks/task-save.cpp (revision 9f4b8f3ece3417860ae4c8b806d68279e05a3ec4)
+++ code/commands/file-tasks/task-save.cpp (revision 3da60b7045c13b5d6d3156113bd36d2b7390e552)
@@ -29,12 +29,21 @@
 	m_document(&document)
 {
+	get_folder().signal_document_removed().connect(
+		sigc::mem_fun( *this, &TaskSave::on_document_removed));
+}
+
+void Gobby::TaskSave::run() {
+	if(!m_document)
+	{
+		finish();
+		return;
+	}
+
 	m_file_dialog.signal_response().connect(sigc::mem_fun(
 		*this, &TaskSave::on_response));
-	get_folder().signal_document_removed().connect(
-		sigc::mem_fun( *this, &TaskSave::on_document_removed));
 
 	const DocumentInfoStorage::Info* info =
 		get_document_info_storage().get_info(
-			document.get_info_storage_key());
+			m_document->get_info_storage_key());
 
 	if(info != NULL && !info->uri.empty())
@@ -45,5 +54,5 @@
 	{
 		m_file_dialog.set_current_name(
-			document.get_title());
+			m_document->get_title());
 	}
 
@@ -77,4 +86,9 @@
 	// The document we are about to save was removed.
 	if(m_document == &document)
-		finish();
+	{
+		if(m_running)
+			finish();
+		else
+			m_document = NULL;
+	}
 }
