diff --git a/libnautilus-private/nautilus-icon-container.c b/libnautilus-private/nautilus-icon-container.c
index ba95bec..b95d874 100644
--- a/libnautilus-private/nautilus-icon-container.c
+++ b/libnautilus-private/nautilus-icon-container.c
@@ -6539,6 +6539,33 @@ nautilus_icon_container_is_empty (NautilusIconContainer *container)
 	return container->details->icons == NULL;
 }
 
+gboolean
+nautilus_icon_container_selection_is_in_first_column (NautilusIconContainer *container)
+{
+	NautilusIcon *selected_icon, *icon;
+	GList *selection, *first, *l;
+	double minx = 1024;
+
+	selection = nautilus_icon_container_get_selected_icons (container);
+
+	/* The condition is never true if there are no selected items or
+	 * multiple selected items */
+	if (g_list_length (selection) != 1)
+		return FALSE;
+
+	first = g_list_first (selection);
+	selected_icon = (NautilusIcon *) first->data;
+
+	for (l = container->details->icons; l != NULL; l = l->next) {
+		icon = (NautilusIcon *) l->data;
+		minx = MIN (minx, icon->x);
+	}
+
+	g_list_free (selection);
+
+	return selected_icon->x == minx;
+}
+
 NautilusIconData *
 nautilus_icon_container_get_first_visible_icon (NautilusIconContainer *container)
 {
diff --git a/libnautilus-private/nautilus-icon-container.h b/libnautilus-private/nautilus-icon-container.h
index 711a591..15c37af 100644
--- a/libnautilus-private/nautilus-icon-container.h
+++ b/libnautilus-private/nautilus-icon-container.h
@@ -256,6 +256,7 @@ void              nautilus_icon_container_reveal                        (Nautilu
 									 NautilusIconData       *data);
 gboolean          nautilus_icon_container_is_empty                      (NautilusIconContainer  *container);
 NautilusIconData *nautilus_icon_container_get_first_visible_icon        (NautilusIconContainer  *container);
+gboolean          nautilus_icon_container_selection_is_in_first_column  (NautilusIconContainer *container);
 void              nautilus_icon_container_scroll_to_icon                (NautilusIconContainer  *container,
 									 NautilusIconData       *data);
 
diff --git a/src/nautilus-icon-view.c b/src/nautilus-icon-view.c
index 28a1176..1839ec7 100644
--- a/src/nautilus-icon-view.c
+++ b/src/nautilus-icon-view.c
@@ -66,6 +66,7 @@
 #include <unistd.h>
 
 #include "nautilus-audio-mime-types.h"
+#include "nautilus-navigation-window.h"
 
 #define POPUP_PATH_ICON_APPEARANCE		"/selection/Icon Appearance Items"
 
@@ -2630,6 +2631,26 @@ nautilus_icon_view_update_click_mode (NautilusIconView *icon_view)
 }
 
 static gboolean
+key_press_event_cb (GtkWidget *widget, GdkEventKey *event, NautilusIconView *icon_view)
+{
+	NautilusIconContainer *container;
+	NautilusWindow *window;
+
+	if (event->keyval == GDK_KEY_Left) {
+		window = nautilus_view_get_nautilus_window (NAUTILUS_VIEW (icon_view));
+		if (nautilus_window_get_window_type (window) == NAUTILUS_WINDOW_NAVIGATION) {
+			container = get_icon_container (icon_view);
+			if (nautilus_icon_container_selection_is_in_first_column (container)) {
+				nautilus_navigation_window_set_focus_on_sidebar (NAUTILUS_NAVIGATION_WINDOW (window));
+				return TRUE;
+			}
+		}
+	}
+
+	return FALSE;
+}
+
+static gboolean
 get_stored_layout_timestamp (NautilusIconContainer *container,
 			     NautilusIconData *icon_data,
 			     time_t *timestamp,
@@ -2753,6 +2774,9 @@ create_icon_container (NautilusIconView *icon_view)
 				 G_CALLBACK (nautilus_view_update_menus), icon_view,
 				 G_CONNECT_SWAPPED);
 
+	g_signal_connect_object (icon_container, "key_press_event",
+				 G_CALLBACK (key_press_event_cb), icon_view, 0);
+
 	g_signal_connect_object (icon_container, "get_stored_layout_timestamp",
 				 G_CALLBACK (get_stored_layout_timestamp), icon_view, 0);
 	g_signal_connect_object (icon_container, "store_layout_timestamp",
diff --git a/src/nautilus-navigation-window.c b/src/nautilus-navigation-window.c
index 869d6a8..01b741d 100644
--- a/src/nautilus-navigation-window.c
+++ b/src/nautilus-navigation-window.c
@@ -1143,3 +1143,29 @@ nautilus_navigation_window_split_view_showing (NautilusNavigationWindow *window)
 {
 	return g_list_length (NAUTILUS_WINDOW (window)->details->panes) > 1;
 }
+
+void
+nautilus_navigation_window_set_focus_on_sidebar (NautilusNavigationWindow *window)
+{
+	g_assert (NAUTILUS_IS_NAVIGATION_WINDOW (window));
+
+	/* only move the focus to the sidebar when it is shown */
+	if (nautilus_navigation_window_sidebar_showing (window)) {
+		GtkContainer *container;
+		GList *children, *first;
+		GtkWidget *sidebar;
+
+		container = GTK_CONTAINER (window->details->sidebar);
+		children = gtk_container_get_children (container);
+
+		first = g_list_first (children);
+
+		sidebar = GTK_WIDGET (first->data);
+		if (NAUTILUS_IS_PLACES_SIDEBAR (sidebar)) {
+			nautilus_places_sidebar_grab_focus (sidebar);
+		}
+
+		g_list_free (children);
+	}
+}
+
diff --git a/src/nautilus-navigation-window.h b/src/nautilus-navigation-window.h
index c3a0c90..6fd250c 100644
--- a/src/nautilus-navigation-window.h
+++ b/src/nautilus-navigation-window.h
@@ -97,6 +97,7 @@ void     nautilus_navigation_window_restore_focus_widget (NautilusNavigationWind
 void     nautilus_navigation_window_split_view_on        (NautilusNavigationWindow *window);
 void     nautilus_navigation_window_split_view_off       (NautilusNavigationWindow *window);
 gboolean nautilus_navigation_window_split_view_showing   (NautilusNavigationWindow *window);
+void     nautilus_navigation_window_set_focus_on_sidebar (NautilusNavigationWindow *window);
 
 gboolean nautilus_navigation_window_is_in_temporary_navigation_bar (GtkWidget *widget,
 				NautilusNavigationWindow *window);
diff --git a/src/nautilus-places-sidebar.c b/src/nautilus-places-sidebar.c
index 7929492..a05e318 100644
--- a/src/nautilus-places-sidebar.c
+++ b/src/nautilus-places-sidebar.c
@@ -51,6 +51,7 @@
 #include "nautilus-places-sidebar.h"
 #include "nautilus-window.h"
 #include "nautilus-window-slot.h"
+#include "nautilus-view.h"
 
 #define DEBUG_FLAG NAUTILUS_DEBUG_PLACES
 #include <libnautilus-private/nautilus-debug.h>
@@ -2400,6 +2401,16 @@ empty_trash_cb (GtkMenuItem           *item,
 	nautilus_file_operations_empty_trash (GTK_WIDGET (sidebar->window));
 }
 
+static void
+move_focus_to_active_slot (NautilusPlacesSidebar *sidebar)
+{
+	NautilusWindowSlot *slot;
+
+	slot = nautilus_window_get_active_slot (sidebar->window);
+
+	nautilus_view_grab_focus (slot->content_view);
+}
+
 /* Handler for GtkWidget::key-press-event on the shortcuts list */
 static gboolean
 bookmarks_key_press_event_cb (GtkWidget             *widget,
@@ -2415,6 +2426,13 @@ bookmarks_key_press_event_cb (GtkWidget             *widget,
       return eject_or_unmount_selection (sidebar);
   }
 
+  if ((event->keyval == GDK_KEY_Right ||
+       event->keyval == GDK_KEY_KP_Right) &&
+      (event->state & modifiers) == 0) {
+      move_focus_to_active_slot (sidebar);
+      return TRUE;
+  }
+
   if ((event->keyval == GDK_KEY_Delete
       || event->keyval == GDK_KEY_KP_Delete)
       && (event->state & modifiers) == 0) {
@@ -2903,6 +2921,18 @@ heading_cell_renderer_func (GtkTreeViewColumn *column,
 	}
 }
 
+void
+nautilus_places_sidebar_grab_focus (GtkWidget *widget)
+{
+	NautilusPlacesSidebar *sidebar;
+
+	sidebar = NAUTILUS_PLACES_SIDEBAR (widget);
+
+	if (sidebar != NULL && sidebar->tree_view != NULL) {
+		gtk_widget_grab_focus (GTK_WIDGET (sidebar->tree_view));
+	}
+}
+
 static void
 nautilus_places_sidebar_init (NautilusPlacesSidebar *sidebar)
 {
diff --git a/src/nautilus-places-sidebar.h b/src/nautilus-places-sidebar.h
index 470b825..d832da8 100644
--- a/src/nautilus-places-sidebar.h
+++ b/src/nautilus-places-sidebar.h
@@ -46,5 +46,6 @@
 GType nautilus_places_sidebar_get_type (void);
 GtkWidget * nautilus_places_sidebar_new (NautilusWindow *window);
 
+void nautilus_places_sidebar_grab_focus (GtkWidget *sidebar);
 
 #endif
