Index: sources/rb-playlist-source.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/sources/rb-playlist-source.c,v
retrieving revision 1.62
diff -u -r1.62 rb-playlist-source.c
--- sources/rb-playlist-source.c	29 Jul 2005 03:53:43 -0000	1.62
+++ sources/rb-playlist-source.c	1 Aug 2005 21:52:46 -0000
@@ -901,6 +901,10 @@
 		}
 	}
 
+	/* poll the query model until it finishes handling the entries */
+	while (rhythmdb_query_model_poll (source->priv->model, NULL))
+		;
+
 	return RB_SOURCE (source);
 }
 
Index: shell/rb-shell.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/shell/rb-shell.c,v
retrieving revision 1.307
diff -u -r1.307 rb-shell.c
--- shell/rb-shell.c	29 Jul 2005 14:53:10 -0000	1.307
+++ shell/rb-shell.c	1 Aug 2005 21:52:50 -0000
@@ -336,6 +336,7 @@
 
 	RhythmDB *db;
 	char *pending_entry;
+	gboolean play_when_loaded;
 
 	RBShellPlayer *player_shell;
 	RBShellClipboard *clipboard_shell;
@@ -1793,6 +1794,9 @@
 	rb_shell_sync_selected_source (shell);
 	shell->priv->load_complete = TRUE;
 
+	if (shell->priv->play_when_loaded)
+		rb_shell_player_playpause (shell->priv->player_shell, TRUE);
+
 	GDK_THREADS_LEAVE ();
 
 	return FALSE;
@@ -2305,8 +2309,13 @@
 static void
 rb_shell_play_impl (RBRemoteProxy *proxy)
 {
-	RBShellPlayer *player = RB_SHELL (proxy)->priv->player_shell;
-	rb_shell_player_playpause (player, TRUE);
+	RBShell *shell = RB_SHELL (proxy);
+	RBShellPlayer *player = shell->priv->player_shell;
+
+	if (shell->priv->load_complete)
+		rb_shell_player_playpause (player, TRUE);
+	else
+		shell->priv->play_when_loaded = TRUE;
 }
 
 static void
