diff --git a/src/nautilus-navigation-window-menus.c b/src/nautilus-navigation-window-menus.c
index 774a778..4459bd8 100644
--- a/src/nautilus-navigation-window-menus.c
+++ b/src/nautilus-navigation-window-menus.c
@@ -716,14 +716,18 @@ action_go_to_location_callback (GtkAction *action,
 }			   
 
 static void
-action_search_callback (GtkAction *action,
-			gpointer user_data)
+action_show_hide_search_callback (GtkAction *action,
+			          gpointer user_data)
 {
 	NautilusNavigationWindow *window;
 
 	window = NAUTILUS_NAVIGATION_WINDOW (user_data);
 
-	nautilus_navigation_window_show_search (window);
+	if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action))) {
+		nautilus_navigation_window_show_search (window);
+	} else {
+		nautilus_navigation_window_hide_search (window);
+	}
 }
 
 static void
@@ -794,9 +798,6 @@ static const GtkActionEntry navigation_entries[] = {
   /* name, stock id, label */  { "Edit Bookmarks", NULL, N_("_Edit Bookmarks..."),
                                  "<control>b", N_("Display a window that allows editing the bookmarks in this menu"),
                                  G_CALLBACK (action_edit_bookmarks_callback) },
-  /* name, stock id, label */  { "Search", "gtk-find", N_("_Search for Files..."),
-                                 "<control>F", N_("Locate documents and folders on this computer by name or content"),
-                                 G_CALLBACK (action_search_callback) },
 
 	{ "TabsPrevious", NULL, N_("_Previous Tab"), "<control>Page_Up",
 	  N_("Activate previous tab"),
@@ -833,7 +834,12 @@ static const GtkToggleActionEntry navigation_toggle_entries[] = {
   /* label, accelerator */   N_("St_atusbar"), NULL,
   /* tooltip */              N_("Change the visibility of this window's statusbar"),
                              G_CALLBACK (action_show_hide_statusbar_callback),
-  /* is_active */            TRUE }, 
+  /* is_active */            TRUE },
+  /* name, stock id */     { "Search", "gtk-find",
+  /* label, accelerator */   N_("_Search for Files..."), "<control>F", 
+  /* tooltip */              N_("Toggle the Search Bar to locate documents and folders on this computer by name"),
+                             G_CALLBACK (action_show_hide_search_callback),
+  /* is_active */            FALSE }, 
 };
 
 void 
diff --git a/src/nautilus-navigation-window.c b/src/nautilus-navigation-window.c
index f698dfc..a0c8bef 100644
--- a/src/nautilus-navigation-window.c
+++ b/src/nautilus-navigation-window.c
@@ -753,6 +753,7 @@ hide_temporary_bars (NautilusNavigationWindow *window)
 		} else {
 			nautilus_navigation_window_set_bar_mode (window, NAUTILUS_BAR_NAVIGATION);
 		}
+		nautilus_navigation_window_set_search_button (window, FALSE);
 		window->details->temporary_search_bar = FALSE;
 		success = TRUE;
 	}
@@ -1521,9 +1522,28 @@ nautilus_navigation_window_show_search (NautilusNavigationWindow *window)
 		nautilus_navigation_window_set_bar_mode (window, NAUTILUS_BAR_SEARCH);
 		window->details->temporary_search_bar = TRUE;
 		nautilus_search_bar_clear (NAUTILUS_SEARCH_BAR (window->search_bar));
+		nautilus_search_bar_grab_focus (NAUTILUS_SEARCH_BAR (window->search_bar));	
 	}
-	
-	nautilus_search_bar_grab_focus (NAUTILUS_SEARCH_BAR (window->search_bar));
+}
+
+void
+nautilus_navigation_window_hide_search (NautilusNavigationWindow *window)
+{
+	if (nautilus_navigation_window_search_bar_showing (window)) {
+		if (hide_temporary_bars (window)) {
+                	restore_focus_widget (window);
+        	}
+	}
+}
+
+void
+nautilus_navigation_window_set_search_button (NautilusNavigationWindow *window,
+					      gboolean state)
+{
+	GtkAction *action;	
+
+	action = gtk_action_group_get_action (window->details->navigation_action_group, "Search");
+       gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), state);
 }
 
 /* either called due to slot change, or due to location change in the current slot. */
@@ -1745,6 +1765,7 @@ nautilus_navigation_window_set_bar_mode (NautilusNavigationWindow *window,
 		g_signal_handlers_unblock_by_func (window->details->location_button,
 						   G_CALLBACK (location_button_toggled_cb),
 						   window);
+		nautilus_navigation_window_set_search_button (window, FALSE);
 	}
 }
 
diff --git a/src/nautilus-navigation-window.h b/src/nautilus-navigation-window.h
index e34a978..df86f01 100644
--- a/src/nautilus-navigation-window.h
+++ b/src/nautilus-navigation-window.h
@@ -120,5 +120,8 @@ void     nautilus_navigation_window_back_or_forward      (NautilusNavigationWind
                                                           guint                     distance,
 							  gboolean                  new_tab);
 void     nautilus_navigation_window_show_search          (NautilusNavigationWindow *window);
+void     nautilus_navigation_window_hide_search          (NautilusNavigationWindow *window);
+void     nautilus_navigation_window_set_search_button	  (NautilusNavigationWindow *window,
+							   gboolean		    state);
 
 #endif
