diff --git a/plugins/grilo/rb-grilo-source.c b/plugins/grilo/rb-grilo-source.c
index 62f7766..c7bbc95 100644
--- a/plugins/grilo/rb-grilo-source.c
+++ b/plugins/grilo/rb-grilo-source.c
@@ -74,6 +74,8 @@ static void rb_grilo_source_constructed (GObject *object);
 static void impl_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
 static void impl_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
 
+static void start_media_browse (RBGriloSource *source, GrlSupportedOps op_type, GrlMedia *container, GtkTreeIter *container_iter, guint limit);
+
 static void browser_selection_changed_cb (GtkTreeSelection *selection, RBGriloSource *source);
 static void browser_row_expanded_cb (GtkTreeView *tree_view, GtkTreeIter *iter, GtkTreePath *path, RBGriloSource *source);
 static void scroll_adjust_changed_cb (GtkAdjustment *adjustment, RBGriloSource *source);
@@ -117,6 +119,7 @@ struct _RBGriloSourcePrivate
 	guint maybe_expand_idle;
 
 	/* current media browse operation */
+	GrlSupportedOps media_browse_op_type;
 	guint media_browse_op;
 	char *search_text;
 	GrlMedia *media_browse_container;
@@ -751,9 +754,14 @@ grilo_browse_cb (GrlSource *grilo_source, guint operation_id, GrlMedia *media, g
 				maybe_expand_container (source);
 			}
 
-		} else if (source->priv->browse_got_results && source->priv->browse_container == NULL) {
-			/* get all top-level containers */
-			browse_next (source);
+		} else if (source->priv->browse_container == NULL) {
+			if (source->priv->browse_got_results) {
+				/* get all top-level containers */
+				browse_next (source);
+			} else if (source->priv->browse_got_media) {
+				/* if there's media in the root, show it */
+				start_media_browse (source, GRL_OP_BROWSE, NULL, NULL, CONTAINER_MAX_TRACKS);
+			}
 		}
 	}
 }
@@ -883,7 +891,7 @@ media_browse_next (RBGriloSource *source)
 		  source->priv->media_browse_position);
 
 	source->priv->media_browse_got_results = FALSE;
-	if (source->priv->media_browse_container != NULL) {
+	if (source->priv->media_browse_op_type == GRL_OP_BROWSE) {
 		options = make_operation_options (source,
 						  GRL_OP_BROWSE,
 						  source->priv->media_browse_position);
@@ -894,7 +902,7 @@ media_browse_next (RBGriloSource *source)
 					   options,
 					   (GrlSourceResultCb) grilo_media_browse_cb,
 					   source);
-	} else {
+	} else if (source->priv->media_browse_op_type == GRL_OP_SEARCH) {
 		options = make_operation_options (source,
 						  GRL_OP_SEARCH,
 						  source->priv->media_browse_position);
@@ -905,11 +913,13 @@ media_browse_next (RBGriloSource *source)
 					   options,
 					   (GrlSourceResultCb) grilo_media_browse_cb,
 					   source);
+	} else {
+		g_assert_not_reached ();
 	}
 }
 
 static void
-start_media_browse (RBGriloSource *source, GrlMedia *container, GtkTreeIter *container_iter, guint limit)
+start_media_browse (RBGriloSource *source, GrlSupportedOps op_type, GrlMedia *container, GtkTreeIter *container_iter, guint limit)
 {
 	rb_debug ("starting media browse for %s",
 		  grl_source_get_name (source->priv->grilo_source));
@@ -930,6 +940,7 @@ start_media_browse (RBGriloSource *source, GrlMedia *container, GtkTreeIter *con
 	source->priv->media_browse_position = 0;
 	source->priv->media_browse_limit = limit;
 	source->priv->media_browse_got_containers = FALSE;
+	source->priv->media_browse_op_type = op_type;
 
 	if (source->priv->query_model != NULL) {
 		g_object_unref (source->priv->query_model);
@@ -1000,7 +1011,7 @@ browser_selection_changed_cb (GtkTreeSelection *selection, RBGriloSource *source
 		expand_from_marker (source, &iter);
 	} else if (container_type != CONTAINER_NO_MEDIA) {
 		/* fetch media directly under this container */
-		start_media_browse (source, container, &iter, CONTAINER_MAX_TRACKS);
+		start_media_browse (source, GRL_OP_BROWSE, container, &iter, CONTAINER_MAX_TRACKS);
 	} else {
 		/* clear the track list? */
 	}
@@ -1135,7 +1146,7 @@ search_cb (RBSearchEntry *search, const char *text, RBGriloSource *source)
 
 	gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (source->priv->browser_view)));
 
-	start_media_browse (source, NULL, NULL, CONTAINER_MAX_TRACKS);
+	start_media_browse (source, GRL_OP_SEARCH, NULL, NULL, CONTAINER_MAX_TRACKS);
 }
 
 static void
