diff -u -r nautilus-2.27.4.orig/eel/eel-stock-dialogs.c nautilus-2.27.4/eel/eel-stock-dialogs.c
--- nautilus-2.27.4.orig/eel/eel-stock-dialogs.c	2009-06-24 16:00:11.000000000 +0200
+++ nautilus-2.27.4/eel/eel-stock-dialogs.c	2009-07-29 23:49:39.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 nautilus-2.27.4.orig/src/nautilus-location-dialog.c nautilus-2.27.4/src/nautilus-location-dialog.c
--- nautilus-2.27.4.orig/src/nautilus-location-dialog.c	2009-06-24 16:00:12.000000000 +0200
+++ nautilus-2.27.4/src/nautilus-location-dialog.c	2009-07-30 00:02:41.000000000 +0200
@@ -77,7 +79,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_from_dialog (dialog->details->window, location);
 	g_object_unref (location);
 	g_free (user_location);
 }
diff -u -r nautilus-2.27.4.orig/src/nautilus-window.c nautilus-2.27.4/src/nautilus-window.c
--- nautilus-2.27.4.orig/src/nautilus-window.c	2009-06-24 16:00:12.000000000 +0200
+++ nautilus-2.27.4/src/nautilus-window.c	2009-07-29 23:49:39.000000000 +0200
@@ -225,10 +225,20 @@
 }
 
 void
+nautilus_window_go_to_from_dialog (NautilusWindow *window, GFile *location)
+{
+	g_return_if_fail (NAUTILUS_IS_WINDOW (window));
+
+	window->details->active_slot->dialog_source_window = window;
+	nautilus_window_slot_go_to (window->details->active_slot, location, FALSE);
+}
+
+void
 nautilus_window_go_to (NautilusWindow *window, GFile *location)
 {
 	g_return_if_fail (NAUTILUS_IS_WINDOW (window));
 
+	window->details->active_slot->dialog_source_window = NULL;
 	nautilus_window_slot_go_to (window->details->active_slot, location, FALSE);
 }
 
diff -u -r nautilus-2.27.4.orig/src/nautilus-window.h nautilus-2.27.4/src/nautilus-window.h
--- nautilus-2.27.4.orig/src/nautilus-window.h	2009-06-24 16:00:12.000000000 +0200
+++ nautilus-2.27.4/src/nautilus-window.h	2009-07-29 23:49:39.000000000 +0200
@@ -136,6 +136,8 @@
 
 void             nautilus_window_go_to                (NautilusWindow    *window,
                                                        GFile             *location);
+void             nautilus_window_go_to_from_dialog    (NautilusWindow    *window,
+                                                       GFile             *location);
 void             nautilus_window_go_to_with_selection (NautilusWindow    *window,
                                                        GFile             *location,
                                                        GList             *new_selection);
diff -u -r nautilus-2.27.4.orig/src/nautilus-window-manage-views.c nautilus-2.27.4/src/nautilus-window-manage-views.c
--- nautilus-2.27.4.orig/src/nautilus-window-manage-views.c	2009-06-24 16:00:12.000000000 +0200
+++ nautilus-2.27.4/src/nautilus-window-manage-views.c	2009-07-29 23:49:39.000000000 +0200
@@ -31,6 +31,7 @@
 #include "nautilus-actions.h"
 #include "nautilus-application.h"
 #include "nautilus-location-bar.h"
+#include "nautilus-location-dialog.h"
 #include "nautilus-search-bar.h"
 #include "nautilus-pathbar.h"
 #include "nautilus-main.h"
@@ -626,6 +627,8 @@
 		g_object_unref (old_location);
 	}
 
+        target_slot->dialog_source_window = slot->dialog_source_window;
+
         begin_location_change (target_slot, location, new_selection,
                                NAUTILUS_LOCATION_CHANGE_STANDARD, 0, NULL);
 }
@@ -1855,6 +1858,17 @@
 }
 
 static void
+error_message_response_callback (GtkDialog *dialog,
+		   		 int response_id,
+		   		 gpointer data)
+{
+	GtkWidget *location_dialog;
+
+	location_dialog = GTK_WIDGET (data);
+	gtk_widget_show (location_dialog);
+}
+
+static void
 display_view_selection_failure (NautilusWindow *window, NautilusFile *file,
 				GFile *location, GError *error)
 {
@@ -1952,6 +1966,26 @@
 	
 	dialog = eel_show_error_dialog (error_message, detail_message, NULL);
 	
+	if (window->details->active_slot->dialog_source_window) {
+		GtkWidget *ldialog;
+		const char *initial;
+		initial = g_file_get_uri (location);
+
+		ldialog = nautilus_location_dialog_new (window->details->active_slot->dialog_source_window);
+		if (initial != NULL) {
+			nautilus_location_dialog_set_location (NAUTILUS_LOCATION_DIALOG (ldialog),
+							       initial);
+		}
+		g_free (initial);
+		
+		g_signal_connect (dialog,
+				  "response",
+				  G_CALLBACK (error_message_response_callback),
+				  ldialog);
+
+		window->details->active_slot->dialog_source_window = NULL;
+	}
+
 	g_free (uri_for_display);
 	g_free (error_message);
 	g_free (detail_message);
diff -u -r nautilus-2.27.4.orig/src/nautilus-window-slot.h nautilus-2.27.4/src/nautilus-window-slot.h
--- nautilus-2.27.4.orig/src/nautilus-window-slot.h	2009-06-24 16:00:12.000000000 +0200
+++ nautilus-2.27.4/src/nautilus-window-slot.h	2009-07-29 23:49:39.000000000 +0200
@@ -106,6 +106,8 @@
 	GCancellable *mount_cancellable;
 	GError *mount_error;
 	gboolean tried_mount;
+	
+	NautilusWindow *dialog_source_window;
 
 	GCancellable *find_mount_cancellable;
 };
