diff --git a/src/nautilus-places-sidebar.c b/src/nautilus-places-sidebar.c
index 95c06eb..d34770a 100644
--- a/src/nautilus-places-sidebar.c
+++ b/src/nautilus-places-sidebar.c
@@ -90,6 +90,8 @@ typedef struct {
 	gboolean mounting;
 	NautilusWindowSlotInfo *go_to_after_mount_slot;
 	NautilusWindowOpenFlags go_to_after_mount_flags;
+
+	GtkTreePath *eject_highlight_path;
 } NautilusPlacesSidebar;
 
 typedef struct {
@@ -118,6 +120,7 @@ enum {
 	PLACES_SIDEBAR_COLUMN_BOOKMARK,
 	PLACES_SIDEBAR_COLUMN_NO_BOOKMARK,
 	PLACES_SIDEBAR_COLUMN_TOOLTIP,
+	PLACES_SIDEBAR_COLUMN_EJECT_ICON,
 	
 	PLACES_SIDEBAR_COLUMN_COUNT
 };
@@ -253,6 +256,7 @@ add_place (NautilusPlacesSidebar *sidebar,
 			    PLACES_SIDEBAR_COLUMN_BOOKMARK, place_type != PLACES_BOOKMARK,
 			    PLACES_SIDEBAR_COLUMN_NO_BOOKMARK, place_type == PLACES_BOOKMARK,
 			    PLACES_SIDEBAR_COLUMN_TOOLTIP, tooltip,
+			    PLACES_SIDEBAR_COLUMN_EJECT_ICON, "media-eject",
 			    -1);
 
 	if (pixbuf != NULL) {
@@ -640,11 +644,10 @@ drive_changed_callback (GVolumeMonitor *volume_monitor,
 }
 
 static gboolean
-clicked_eject_button (NautilusPlacesSidebar *sidebar,
-		      GtkTreePath **path)
+over_eject_button (NautilusPlacesSidebar *sidebar,
+		   GdkEventButton *button_event,
+	 	   GtkTreePath **path)
 {
-	GdkEvent *event = gtk_get_current_event ();
-	GdkEventButton *button_event = (GdkEventButton *) event;
 	GtkTreeViewColumn *column;
 	GtkTextDirection direction;
 	int width, total_width;
@@ -652,8 +655,7 @@ clicked_eject_button (NautilusPlacesSidebar *sidebar,
 
 	*path = NULL;
 
-	if (event->type == GDK_BUTTON_PRESS &&
-	    gtk_tree_view_get_path_at_pos (sidebar->tree_view,
+	if (gtk_tree_view_get_path_at_pos (sidebar->tree_view,
 					   button_event->x, button_event->y,
 					   path, &column, NULL, NULL)) {
 		total_width = 0;
@@ -684,12 +686,28 @@ clicked_eject_button (NautilusPlacesSidebar *sidebar,
 		    button_event->x - total_width <= eject_button_size) {
 			return TRUE;
 		}
-	} else if (event->type == GDK_BUTTON_RELEASE) {
-		g_object_set_data (G_OBJECT (sidebar->tree_view), "myrect", NULL);
 	}
 
-	if (*path != NULL) {
-		gtk_tree_path_free (*path);
+	return FALSE;
+}
+
+static gboolean
+clicked_eject_button (NautilusPlacesSidebar *sidebar,
+		      GtkTreePath **path)
+{
+	GdkEvent *event = gtk_get_current_event ();
+	GdkEventButton *button_event = (GdkEventButton *) event;
+	gboolean ret;
+
+	*path = NULL;
+
+	if (event->type == GDK_BUTTON_PRESS) {
+		ret = over_eject_button (sidebar, button_event, path);
+		if (ret) {
+			return TRUE;
+		}
+	} else if (event->type == GDK_BUTTON_RELEASE) {
+		g_object_set_data (G_OBJECT (sidebar->tree_view), "myrect", NULL);
 	}
 
 	return FALSE;
@@ -2336,6 +2354,68 @@ bookmarks_popup_menu_cb (GtkWidget *widget,
 	return TRUE;
 }
 
+static void
+update_eject_buttons (NautilusPlacesSidebar *sidebar,
+		      GtkTreePath 	    *path)
+{
+	GtkTreeIter iter;
+
+	if (path && sidebar->eject_highlight_path && gtk_tree_path_compare (sidebar->eject_highlight_path, path) == 0) {
+		/* Same path - highlight up to date */
+		gtk_tree_path_free (path);		
+		return;
+	}
+
+	/* Reset last path */
+	if (sidebar->eject_highlight_path) {
+		GValue eject_icon = {0};
+	
+		g_value_init (&eject_icon, G_TYPE_STRING);
+		g_value_set_static_string (&eject_icon, "media-eject");
+
+		gtk_tree_model_get_iter (GTK_TREE_MODEL (sidebar->store), &iter, sidebar->eject_highlight_path);
+		gtk_list_store_set_value (GTK_LIST_STORE (sidebar->store), &iter, PLACES_SIDEBAR_COLUMN_EJECT_ICON, &eject_icon);
+
+		gtk_tree_path_free (sidebar->eject_highlight_path);
+	}
+	
+	/* Update current path */
+	if (path) {
+		GValue eject_icon = {0};
+	
+		g_value_init (&eject_icon, G_TYPE_STRING);
+		g_value_set_static_string (&eject_icon, "gtk-disconnect");
+
+		gtk_tree_model_get_iter (GTK_TREE_MODEL (sidebar->store), &iter, path);
+		gtk_list_store_set_value (GTK_LIST_STORE (sidebar->store), &iter, PLACES_SIDEBAR_COLUMN_EJECT_ICON, &eject_icon);
+	}
+
+	sidebar->eject_highlight_path = path;
+}
+
+static gboolean
+bookmarks_motion_event_cb (GtkWidget             *widget,
+			   GdkEventButton        *event,
+			   NautilusPlacesSidebar *sidebar)
+{
+	GtkTreePath *path;
+	GtkTreeModel *model;
+
+	model = GTK_TREE_MODEL (sidebar->filter_model);
+
+	if (over_eject_button (sidebar, event, &path)) {
+		if (!path) {
+			return FALSE;
+		}
+
+		update_eject_buttons (sidebar, path);
+	} else {
+		update_eject_buttons (sidebar, NULL);
+	}
+
+	return TRUE;
+}
+
 /* Callback used when a button is pressed on the shortcuts list.  
  * We trap button 3 to bring up a popup menu, and button 2 to
  * open in a new tab.
@@ -2485,13 +2565,13 @@ nautilus_places_sidebar_init (NautilusPlacesSidebar *sidebar)
 	cell = gtk_cell_renderer_pixbuf_new ();
 	g_object_set (cell,
 		      "mode", GTK_CELL_RENDERER_MODE_ACTIVATABLE,
-		      "icon-name", "media-eject",
 		      "stock-size", GTK_ICON_SIZE_MENU,
 		      "xpad", EJECT_BUTTON_XPAD,
 		      NULL);
 	gtk_tree_view_column_pack_start (col, cell, FALSE);
 	gtk_tree_view_column_set_attributes (col, cell,
 					     "visible", PLACES_SIDEBAR_COLUMN_EJECT,
+					     "icon-name", PLACES_SIDEBAR_COLUMN_EJECT_ICON,
 					     NULL);
 
 	cell = gtk_cell_renderer_text_new ();
@@ -2534,6 +2614,7 @@ nautilus_places_sidebar_init (NautilusPlacesSidebar *sidebar)
 					     G_TYPE_BOOLEAN,
 					     G_TYPE_BOOLEAN,
 					     G_TYPE_BOOLEAN,
+					     G_TYPE_STRING,
 					     G_TYPE_STRING
 					     );
 
@@ -2588,6 +2669,9 @@ nautilus_places_sidebar_init (NautilusPlacesSidebar *sidebar)
 			  G_CALLBACK (bookmarks_popup_menu_cb), sidebar);
 	g_signal_connect (tree_view, "button-press-event",
 			  G_CALLBACK (bookmarks_button_press_event_cb), sidebar);
+	g_signal_connect (tree_view, "motion-notify-event",
+			  G_CALLBACK (bookmarks_motion_event_cb), sidebar);
+
 
 	eel_gtk_tree_view_set_activate_on_single_click (sidebar->tree_view,
 							TRUE);
