diff -u -r orig/nautilus-2.27.92/eel/eel-stock-dialogs.c nautilus-2.27.92/eel/eel-stock-dialogs.c
--- orig/nautilus-2.27.92/eel/eel-stock-dialogs.c	2009-05-23 20:13:29.000000000 +0200
+++ nautilus-2.27.92/eel/eel-stock-dialogs.c	2009-09-12 15:00:55.000000000 +0200
@@ -395,7 +395,7 @@
 	}
 	gtk_widget_show (GTK_WIDGET (dialog));
 
-	g_signal_connect (dialog, "response",
+	g_signal_connect_after (dialog, "response",
 			  G_CALLBACK (gtk_object_destroy), NULL);
 
 	return dialog;
diff -u -r orig/nautilus-2.27.92/src/nautilus-application.c nautilus-2.27.92/src/nautilus-application.c
--- orig/nautilus-2.27.92/src/nautilus-application.c	2009-08-18 16:27:33.000000000 +0200
+++ nautilus-2.27.92/src/nautilus-application.c	2009-09-12 15:02:55.000000000 +0200
@@ -722,7 +722,7 @@
 			nautilus_window_go_home (window);
 		} else {
 			location = g_file_new_for_uri (uri);
-			nautilus_window_go_to (window, location);
+			nautilus_window_go_to (window, location, NULL, NULL);
 			g_object_unref (location);
 		}
 	} else {
@@ -1552,7 +1552,7 @@
 		window = nautilus_application_create_navigation_window (application, 
 									NULL, 
 									gdk_screen_get_default ());
-		nautilus_window_go_to (window, location);
+		nautilus_window_go_to (window, location, NULL, NULL);
 
 	} else {
 		nautilus_application_present_spatial_window (application, 
diff -u -r orig/nautilus-2.27.92/src/nautilus-bookmarks-window.c nautilus-2.27.92/src/nautilus-bookmarks-window.c
--- orig/nautilus-2.27.92/src/nautilus-bookmarks-window.c	2009-04-20 12:57:20.000000000 +0200
+++ nautilus-2.27.92/src/nautilus-bookmarks-window.c	2009-09-12 15:01:59.000000000 +0200
@@ -563,7 +563,7 @@
 	}
 
 	if (NAUTILUS_IS_NAVIGATION_WINDOW (user_data)) {
-		nautilus_window_go_to (NAUTILUS_WINDOW (user_data), location);
+		nautilus_window_go_to (NAUTILUS_WINDOW (user_data), location, NULL, NULL);
 	} else if (NAUTILUS_IS_SPATIAL_WINDOW (user_data)) {
 		window = nautilus_application_present_spatial_window (application, 
 								      NULL,
@@ -575,7 +575,7 @@
 			window = nautilus_application_create_navigation_window (application, 
 										NULL,
 										screen);
-			nautilus_window_go_to (window, location);
+			nautilus_window_go_to (window, location, NULL, NULL);
 		} else {
 			window = nautilus_application_present_spatial_window (application, 
 									      NULL,
diff -u -r orig/nautilus-2.27.92/src/nautilus-connect-server-dialog-nonmain.c nautilus-2.27.92/src/nautilus-connect-server-dialog-nonmain.c
--- orig/nautilus-2.27.92/src/nautilus-connect-server-dialog-nonmain.c	2009-04-20 12:57:20.000000000 +0200
+++ nautilus-2.27.92/src/nautilus-connect-server-dialog-nonmain.c	2009-09-12 15:01:38.000000000 +0200
@@ -42,7 +42,7 @@
 		window = nautilus_application_create_navigation_window (application,
 									NULL,
 									gtk_widget_get_screen (widget));
-		nautilus_window_go_to (window, location);
+		nautilus_window_go_to (window, location, NULL, NULL);
 	} else {
 		nautilus_application_present_spatial_window (application,
 							     NULL,
diff -u -r orig/nautilus-2.27.92/src/nautilus-desktop-window.c nautilus-2.27.92/src/nautilus-desktop-window.c
--- orig/nautilus-2.27.92/src/nautilus-desktop-window.c	2009-04-20 12:57:20.000000000 +0200
+++ nautilus-2.27.92/src/nautilus-desktop-window.c	2009-09-12 15:02:31.000000000 +0200
@@ -89,7 +89,7 @@
 	
 	NAUTILUS_SPATIAL_WINDOW (window)->affect_spatial_window_on_next_location_change = TRUE;
 	location = g_file_new_for_uri (EEL_DESKTOP_URI);
-	nautilus_window_go_to (NAUTILUS_WINDOW (window), location);
+	nautilus_window_go_to (NAUTILUS_WINDOW (window), location, NULL, NULL);
 	g_object_unref (location);
 }
 
diff -u -r orig/nautilus-2.27.92/src/nautilus-location-bar.c nautilus-2.27.92/src/nautilus-location-bar.c
--- orig/nautilus-2.27.92/src/nautilus-location-bar.c	2009-04-20 12:57:20.000000000 +0200
+++ nautilus-2.27.92/src/nautilus-location-bar.c	2009-09-12 15:04:20.000000000 +0200
@@ -182,7 +182,7 @@
 		for (i = 1; names[i] != NULL; ++i) {
 			new_window = nautilus_application_create_navigation_window (application, NULL, screen);
 			location = g_file_new_for_uri (names[i]);
-			nautilus_window_go_to (new_window, location);
+			nautilus_window_go_to (new_window, location, NULL, NULL);
 			g_object_unref (location);
 		}
 	}
diff -u -r orig/nautilus-2.27.92/src/nautilus-location-dialog.c nautilus-2.27.92/src/nautilus-location-dialog.c
--- orig/nautilus-2.27.92/src/nautilus-location-dialog.c	2009-06-15 10:05:58.000000000 +0200
+++ nautilus-2.27.92/src/nautilus-location-dialog.c	2009-09-13 12:58:44.000000000 +0200
@@ -70,6 +70,21 @@
 }
 
 static void
+open_cb (NautilusWindow *window, const char *error_message, gpointer data)
+{
+	NautilusLocationDialog *dialog;
+
+	dialog = NAUTILUS_LOCATION_DIALOG (data);
+	if (error_message == NULL) {
+		/* everything is fine, kill the window */
+		gtk_widget_destroy (GTK_WIDGET (dialog));
+	} else {
+		/* display the window again */
+		gtk_widget_show (GTK_WIDGET (dialog));
+	}
+}
+
+static void
 open_current_location (NautilusLocationDialog *dialog)
 {
 	GFile *location;
@@ -77,7 +92,7 @@
 	
 	user_location = gtk_editable_get_chars (GTK_EDITABLE (dialog->details->entry), 0, -1);
 	location = g_file_parse_name (user_location);
-	nautilus_window_go_to (dialog->details->window, location);
+	nautilus_window_go_to (dialog->details->window, location, open_cb, dialog);
 	g_object_unref (location);
 	g_free (user_location);
 }
@@ -92,7 +107,7 @@
 	switch (response_id) {
 	case RESPONSE_OPEN :
 		open_current_location (dialog);
-		gtk_widget_destroy (GTK_WIDGET (dialog));
+		gtk_widget_hide (GTK_WIDGET (dialog));
 		break;
 	case GTK_RESPONSE_NONE :
 	case GTK_RESPONSE_DELETE_EVENT :
diff -u -r orig/nautilus-2.27.92/src/nautilus-navigation-window.c nautilus-2.27.92/src/nautilus-navigation-window.c
--- orig/nautilus-2.27.92/src/nautilus-navigation-window.c	2009-08-17 15:24:11.000000000 +0200
+++ nautilus-2.27.92/src/nautilus-navigation-window.c	2009-09-12 15:05:06.000000000 +0200
@@ -647,7 +647,7 @@
 	if (i >= 0) {
 		nautilus_navigation_window_back_or_forward (window, TRUE, i, FALSE);
 	} else {
-		nautilus_window_go_to (NAUTILUS_WINDOW (window), location);
+		nautilus_window_go_to (NAUTILUS_WINDOW (window), location, NULL, NULL);
 	}
 }
 
@@ -781,7 +781,7 @@
 	}
 
 	location = g_file_new_for_uri (uri);
-	nautilus_window_go_to (NAUTILUS_WINDOW (window), location);
+	nautilus_window_go_to (NAUTILUS_WINDOW (window), location, NULL, NULL);
 	g_object_unref (location);
 }
 
@@ -1496,7 +1496,7 @@
 		g_object_unref (query);
 	}
 	
-	nautilus_window_go_to (window, location);
+	nautilus_window_go_to (window, location, NULL, NULL);
 	
 	nautilus_directory_unref (directory);
 	g_object_unref (location);
diff -u -r orig/nautilus-2.27.92/src/nautilus-places-sidebar.c nautilus-2.27.92/src/nautilus-places-sidebar.c
--- orig/nautilus-2.27.92/src/nautilus-places-sidebar.c	2009-07-14 13:08:11.000000000 +0200
+++ nautilus-2.27.92/src/nautilus-places-sidebar.c	2009-09-12 15:05:32.000000000 +0200
@@ -1477,7 +1477,7 @@
 				new = nautilus_application_create_navigation_window (cur->application,
 										     NULL,
 										     gtk_window_get_screen (GTK_WINDOW (cur)));
-				nautilus_window_go_to (new, location);
+				nautilus_window_go_to (new, location, NULL, NULL);
 			}
 		}
 
@@ -1558,7 +1558,7 @@
 			new = nautilus_application_create_navigation_window (cur->application,
 									     NULL,
 									     gtk_window_get_screen (GTK_WINDOW (cur)));
-			nautilus_window_go_to (new, location);
+			nautilus_window_go_to (new, location, NULL, NULL);
 		}
 		g_object_unref (location);
 		g_free (uri);
diff -u -r orig/nautilus-2.27.92/src/nautilus-spatial-window.c nautilus-2.27.92/src/nautilus-spatial-window.c
--- orig/nautilus-2.27.92/src/nautilus-spatial-window.c	2009-08-17 15:24:11.000000000 +0200
+++ nautilus-2.27.92/src/nautilus-spatial-window.c	2009-09-12 15:06:12.000000000 +0200
@@ -915,7 +915,7 @@
 
 	uri = nautilus_search_directory_generate_new_uri ();
 	f = g_file_new_for_uri (uri);
-	nautilus_window_go_to (window, f);
+	nautilus_window_go_to (window, f, NULL, NULL);
 	g_object_unref (f);
 	g_free (uri);
 }
diff -u -r orig/nautilus-2.27.92/src/nautilus-window.c nautilus-2.27.92/src/nautilus-window.c
--- orig/nautilus-2.27.92/src/nautilus-window.c	2009-04-20 12:57:20.000000000 +0200
+++ nautilus-2.27.92/src/nautilus-window.c	2009-09-12 20:20:14.000000000 +0200
@@ -225,10 +225,15 @@
 }
 
 void
-nautilus_window_go_to (NautilusWindow *window, GFile *location)
+nautilus_window_go_to (NautilusWindow *window, 
+		       GFile *location, 
+		       NautilusWindowGotoCallback callback,
+		       gpointer userdata)
 {
 	g_return_if_fail (NAUTILUS_IS_WINDOW (window));
 
+	window->details->active_slot->open_callback = callback;
+	window->details->active_slot->open_callback_userdata = userdata;
 	nautilus_window_slot_go_to (window->details->active_slot, location, FALSE);
 }
 
diff -u -r orig/nautilus-2.27.92/src/nautilus-window.h nautilus-2.27.92/src/nautilus-window.h
--- orig/nautilus-2.27.92/src/nautilus-window.h	2009-05-23 20:13:30.000000000 +0200
+++ nautilus-2.27.92/src/nautilus-window.h	2009-09-13 12:58:00.000000000 +0200
@@ -76,6 +76,10 @@
 	NAUTILUS_WINDOW_OPEN_SLOT_APPEND = 1
 };
 
+typedef void (* NautilusWindowGotoCallback) (NautilusWindow *window,
+                                             const char *error_message,
+                                             gpointer userdata);
+
 typedef struct NautilusWindowDetails NautilusWindowDetails;
 
 typedef struct {
@@ -135,7 +139,9 @@
 							  NautilusView      *view);
 
 void             nautilus_window_go_to                (NautilusWindow    *window,
-                                                       GFile             *location);
+                                                       GFile             *location,
+                                                       NautilusWindowGotoCallback callback,
+                                                       gpointer          cb_userdata);
 void             nautilus_window_go_to_with_selection (NautilusWindow    *window,
                                                        GFile             *location,
                                                        GList             *new_selection);
diff -u -r orig/nautilus-2.27.92/src/nautilus-window-manage-views.c nautilus-2.27.92/src/nautilus-window-manage-views.c
--- orig/nautilus-2.27.92/src/nautilus-window-manage-views.c	2009-07-14 13:15:16.000000000 +0200
+++ nautilus-2.27.92/src/nautilus-window-manage-views.c	2009-09-13 12:59:57.000000000 +0200
@@ -613,6 +613,9 @@
 		}
 	}
 
+	target_slot->open_callback = slot->open_callback;
+	target_slot->open_callback_userdata = slot->open_callback_userdata;
+
         if ((!do_load_location) ||
 	    (target_window == window && target_slot == slot &&
 	     old_location && g_file_equal (old_location, location))) {
@@ -1106,6 +1109,15 @@
 		}
 		create_content_view (slot, view_id);
 		g_free (view_id);
+		if (window->details->active_slot->open_callback) {
+			window->details->active_slot->open_callback (
+					window, 
+					NULL, 
+					window->details->active_slot->open_callback_userdata);
+		}	
+		window->details->active_slot->open_callback = NULL;
+		window->details->active_slot->open_callback_userdata = NULL;
+
 	} else {
 		display_view_selection_failure (window, file,
 						location, error);
@@ -1855,6 +1867,26 @@
 }
 
 static void
+error_message_response_callback (GtkDialog *dialog,
+				 int response_id,
+				 gpointer data)
+{
+	NautilusWindow *window;
+	NautilusWindowGotoCallback callback;
+	char *error_message;
+	gpointer userdata;
+
+	error_message = g_object_get_data (G_OBJECT (dialog), "cb_error");
+	callback = g_object_get_data (G_OBJECT (dialog), "cb_function");
+	userdata = g_object_get_data (G_OBJECT (dialog), "cb_userdata");
+
+	if (callback) {
+		callback (NULL, error_message, userdata);
+	}
+	g_free (error_message);
+}
+
+static void
 display_view_selection_failure (NautilusWindow *window, NautilusFile *file,
 				GFile *location, GError *error)
 {
@@ -1952,12 +1984,28 @@
 	
 	dialog = eel_show_error_dialog (error_message, detail_message, NULL);
 	
+	g_signal_connect (dialog,
+			  "response",
+			  G_CALLBACK (error_message_response_callback),
+			  NULL);
+
+	g_object_set_data (G_OBJECT (dialog), 
+			   "cb_error", 
+			   error_message);
+	g_object_set_data (G_OBJECT (dialog),
+			   "cb_function", 
+			   window->details->active_slot->open_callback);
+	g_object_set_data (G_OBJECT (dialog),
+			   "cb_userdata", 
+			   window->details->active_slot->open_callback_userdata);
+
+	window->details->active_slot->open_callback = NULL;
+	window->details->active_slot->open_callback_userdata = NULL;
+
 	g_free (uri_for_display);
-	g_free (error_message);
 	g_free (detail_message);
 }
 
-
 void
 nautilus_window_slot_stop_loading (NautilusWindowSlot *slot)
 {
diff -u -r orig/nautilus-2.27.92/src/nautilus-window-slot.h nautilus-2.27.92/src/nautilus-window-slot.h
--- orig/nautilus-2.27.92/src/nautilus-window-slot.h	2009-04-20 12:57:20.000000000 +0200
+++ nautilus-2.27.92/src/nautilus-window-slot.h	2009-09-12 20:37:12.000000000 +0200
@@ -107,6 +107,9 @@
 	GError *mount_error;
 	gboolean tried_mount;
 
+	NautilusWindowGotoCallback open_callback;
+	gpointer open_callback_userdata;
+
 	GCancellable *find_mount_cancellable;
 };
 
