--- old-bb/configure.ac	2007-05-05 13:09:18.000000000 +1000
+++ new-bb/configure.ac	2007-05-05 13:09:18.000000000 +1000
@@ -913,16 +913,24 @@
 data/icons/Makefile
 data/icons/16x16/Makefile
 data/icons/16x16/actions/Makefile
+data/icons/16x16/apps/Makefile
 data/icons/16x16/places/Makefile
+data/icons/16x16/status/Makefile
 data/icons/22x22/Makefile
 data/icons/22x22/actions/Makefile
+data/icons/22x22/apps/Makefile
 data/icons/22x22/places/Makefile
+data/icons/22x22/status/Makefile
 data/icons/32x32/Makefile
 data/icons/32x32/actions/Makefile
+data/icons/32x32/apps/Makefile
 data/icons/32x32/places/Makefile
+data/icons/32x32/status/Makefile
 data/icons/scalable/Makefile
 data/icons/scalable/actions/Makefile
+data/icons/scalable/apps/Makefile
 data/icons/scalable/places/Makefile
+data/icons/scalable/status/Makefile
 sources/Makefile
 corelib/Makefile
 plugins/Makefile
diff -rN -u old-bb/data/art/Makefile.am new-bb/data/art/Makefile.am
--- old-bb/data/art/Makefile.am	2007-05-05 13:09:18.000000000 +1000
+++ new-bb/data/art/Makefile.am	2007-05-05 13:09:18.000000000 +1000
@@ -1,12 +1,6 @@
 ## arch-tag: Automake rules for included art
 
 art_DATA =  \
-	   rhythmbox-tray-icon.png     \
-	   rhythmbox-set-star.png      \
-	   rhythmbox-unset-star.png    \
-	   rhythmbox-no-star.png       \
-	   rhythmbox-podcast.png       \
-	   media-eject.png             \
 	   about-logo.png
 
 

diff -rN -u old-bb/data/icons/16x16/actions/Makefile.am new-bb/data/icons/16x16/actions/Makefile.am
--- old-bb/data/icons/16x16/actions/Makefile.am	2007-05-05 13:09:18.000000000 +1000
+++ new-bb/data/icons/16x16/actions/Makefile.am	2007-05-05 13:09:18.000000000 +1000
@@ -5,11 +5,12 @@
 iconsdir = $(themedir)/$(size)/$(context)
 
 icons_DATA = \
-	internet-radio-new.png
+	internet-radio-new.png 		\
+	media-eject.png
 
 noinst_DATA = \
 	internet-radio-new.xcf
 
 EXTRA_DIST = \
 	$(icons_DATA)	\
-	$(noinst_DATA)
\ No newline at end of file
+	$(noinst_DATA)
diff -rN -u old-bb/data/icons/16x16/apps/Makefile.am new-bb/data/icons/16x16/apps/Makefile.am
--- old-bb/data/icons/16x16/apps/Makefile.am	1970-01-01 10:00:00.000000000 +1000
+++ new-bb/data/icons/16x16/apps/Makefile.am	2007-05-05 13:09:18.000000000 +1000
@@ -0,0 +1,15 @@
+themedir = $(pkgdatadir)/icons/hicolor
+size = 16x16
+context = apps
+
+iconsdir = $(themedir)/$(size)/$(context)
+
+icons_DATA = \
+	rhythmbox.png
+
+noinst_DATA = \
+	rhythmbox.svg
+
+EXTRA_DIST = \
+	$(icons_DATA)	\
+	$(noinst_DATA)
diff -rN -u old-bb/data/icons/16x16/Makefile.am new-bb/data/icons/16x16/Makefile.am
--- old-bb/data/icons/16x16/Makefile.am	2007-05-05 13:09:18.000000000 +1000
+++ new-bb/data/icons/16x16/Makefile.am	2007-05-05 13:09:18.000000000 +1000
@@ -1 +1 @@
-SUBDIRS = actions places
\ No newline at end of file
+SUBDIRS = actions apps places status
diff -rN -u old-bb/data/icons/16x16/status/Makefile.am new-bb/data/icons/16x16/status/Makefile.am
--- old-bb/data/icons/16x16/status/Makefile.am	1970-01-01 10:00:00.000000000 +1000
+++ new-bb/data/icons/16x16/status/Makefile.am	2007-05-05 13:09:18.000000000 +1000
@@ -0,0 +1,18 @@
+themedir = $(pkgdatadir)/icons/hicolor
+size = 16x16
+context = status
+
+iconsdir = $(themedir)/$(size)/$(context)
+
+icons_DATA = \
+	rhythmbox-notplaying.png	\
+	rhythmbox-set-star.png		\
+	rhythmbox-unset-star.png	\
+	rhythmbox-no-star.png
+
+noinst_DATA = \
+	rhythmbox-notplaying.svg
+
+EXTRA_DIST = \
+	$(icons_DATA)	\
+	$(noinst_DATA)
diff -rN -u old-bb/data/icons/22x22/apps/Makefile.am new-bb/data/icons/22x22/apps/Makefile.am
--- old-bb/data/icons/22x22/apps/Makefile.am	1970-01-01 10:00:00.000000000 +1000
+++ new-bb/data/icons/22x22/apps/Makefile.am	2007-05-05 13:09:18.000000000 +1000
@@ -0,0 +1,15 @@
+themedir = $(pkgdatadir)/icons/hicolor
+size = 22x22
+context = apps
+
+iconsdir = $(themedir)/$(size)/$(context)
+
+icons_DATA = \
+	rhythmbox.png
+
+noinst_DATA = \
+	rhythmbox.svg
+
+EXTRA_DIST = \
+	$(icons_DATA)	\
+	$(noinst_DATA)
diff -rN -u old-bb/data/icons/22x22/Makefile.am new-bb/data/icons/22x22/Makefile.am
--- old-bb/data/icons/22x22/Makefile.am	2007-05-05 13:09:18.000000000 +1000
+++ new-bb/data/icons/22x22/Makefile.am	2007-05-05 13:09:18.000000000 +1000
@@ -1 +1 @@
-SUBDIRS = actions places
\ No newline at end of file
+SUBDIRS = actions apps places status
diff -rN -u old-bb/data/icons/22x22/status/Makefile.am new-bb/data/icons/22x22/status/Makefile.am
--- old-bb/data/icons/22x22/status/Makefile.am	1970-01-01 10:00:00.000000000 +1000
+++ new-bb/data/icons/22x22/status/Makefile.am	2007-05-05 13:09:18.000000000 +1000
@@ -0,0 +1,15 @@
+themedir = $(pkgdatadir)/icons/hicolor
+size = 22x22
+context = status
+
+iconsdir = $(themedir)/$(size)/$(context)
+
+icons_DATA = \
+	rhythmbox-notplaying.png
+
+noinst_DATA = \
+	rhythmbox-notplaying.svg
+
+EXTRA_DIST = \
+	$(icons_DATA)	\
+	$(noinst_DATA)
diff -rN -u old-bb/data/icons/32x32/apps/Makefile.am new-bb/data/icons/32x32/apps/Makefile.am
--- old-bb/data/icons/32x32/apps/Makefile.am	1970-01-01 10:00:00.000000000 +1000
+++ new-bb/data/icons/32x32/apps/Makefile.am	2007-05-05 13:09:18.000000000 +1000
@@ -0,0 +1,15 @@
+themedir = $(pkgdatadir)/icons/hicolor
+size = 32x32
+context = apps
+
+iconsdir = $(themedir)/$(size)/$(context)
+
+icons_DATA = \
+	rhythmbox.png
+
+noinst_DATA = \
+	rhythmbox.svg
+
+EXTRA_DIST = \
+	$(icons_DATA)	\
+	$(noinst_DATA)
diff -rN -u old-bb/data/icons/32x32/Makefile.am new-bb/data/icons/32x32/Makefile.am
--- old-bb/data/icons/32x32/Makefile.am	2007-05-05 13:09:18.000000000 +1000
+++ new-bb/data/icons/32x32/Makefile.am	2007-05-05 13:09:18.000000000 +1000
@@ -1 +1 @@
-SUBDIRS = actions places
\ No newline at end of file
+SUBDIRS = actions apps places status
diff -rN -u old-bb/data/icons/32x32/status/Makefile.am new-bb/data/icons/32x32/status/Makefile.am
--- old-bb/data/icons/32x32/status/Makefile.am	1970-01-01 10:00:00.000000000 +1000
+++ new-bb/data/icons/32x32/status/Makefile.am	2007-05-05 13:09:18.000000000 +1000
@@ -0,0 +1,15 @@
+themedir = $(pkgdatadir)/icons/hicolor
+size = 32x32
+context = status
+
+iconsdir = $(themedir)/$(size)/$(context)
+
+icons_DATA = \
+	rhythmbox-notplaying.png
+
+noinst_DATA = \
+	rhythmbox-notplaying.svg
+
+EXTRA_DIST = \
+	$(icons_DATA)	\
+	$(noinst_DATA)
diff -rN -u old-bb/data/icons/scalable/apps/Makefile.am new-bb/data/icons/scalable/apps/Makefile.am
--- old-bb/data/icons/scalable/apps/Makefile.am	1970-01-01 10:00:00.000000000 +1000
+++ new-bb/data/icons/scalable/apps/Makefile.am	2007-05-05 13:09:18.000000000 +1000
@@ -0,0 +1,14 @@
+themedir = $(pkgdatadir)/icons/hicolor
+size = scalable
+context = apps
+
+iconsdir = $(themedir)/$(size)/$(context)
+
+icons_DATA = \
+	rhythmbox.svg
+
+noinst_DATA =
+
+EXTRA_DIST = \
+	$(icons_DATA)	\
+	$(noinst_DATA)
diff -rN -u old-bb/data/icons/scalable/Makefile.am new-bb/data/icons/scalable/Makefile.am
--- old-bb/data/icons/scalable/Makefile.am	2007-05-05 13:09:18.000000000 +1000
+++ new-bb/data/icons/scalable/Makefile.am	2007-05-05 13:09:18.000000000 +1000
@@ -1 +1 @@
-SUBDIRS = actions places
\ No newline at end of file
+SUBDIRS = actions apps places status
diff -rN -u old-bb/data/icons/scalable/status/Makefile.am new-bb/data/icons/scalable/status/Makefile.am
--- old-bb/data/icons/scalable/status/Makefile.am	1970-01-01 10:00:00.000000000 +1000
+++ new-bb/data/icons/scalable/status/Makefile.am	2007-05-05 13:09:18.000000000 +1000
@@ -0,0 +1,14 @@
+themedir = $(pkgdatadir)/icons/hicolor
+size = scalable
+context = status
+
+iconsdir = $(themedir)/$(size)/$(context)
+
+icons_DATA = \
+	rhythmbox-notplaying.svg
+
+noinst_DATA =
+
+EXTRA_DIST = \
+	$(icons_DATA)	\
+	$(noinst_DATA)

--- old-bb/lib/Makefile.am	2007-05-05 13:09:18.000000000 +1000
+++ new-bb/lib/Makefile.am	2007-05-05 13:09:18.000000000 +1000
@@ -60,34 +60,22 @@
 	@GLIB_GENMARSHAL@ --prefix=rb_marshal $(srcdir)/rb-marshal.list --header > rb-marshal.h
 
 # inline icons
-rhythmbox-set-star-inline.h: $(top_srcdir)/data/art/rhythmbox-set-star.png
+rhythmbox-set-star-inline.h: $(top_srcdir)/data/icons/16x16/status/rhythmbox-set-star.png
 	@GDK_PIXBUF_CSOURCE@ --raw --name=rhythmbox_set_star_inline $< > $@
 
-rhythmbox-unset-star-inline.h: $(top_srcdir)/data/art/rhythmbox-unset-star.png
+rhythmbox-unset-star-inline.h: $(top_srcdir)/data/icons/16x16/status/rhythmbox-unset-star.png
 	@GDK_PIXBUF_CSOURCE@ --raw --name=rhythmbox_unset_star_inline $< > $@
 
-rhythmbox-no-star-inline.h: $(top_srcdir)/data/art/rhythmbox-no-star.png
+rhythmbox-no-star-inline.h: $(top_srcdir)/data/icons/16x16/status/rhythmbox-no-star.png
 	@GDK_PIXBUF_CSOURCE@ --raw --name=rhythmbox_no_star_inline $< > $@
 
-rhythmbox-podcast-inline.h: $(top_srcdir)/data/art/rhythmbox-podcast.png
-	@GDK_PIXBUF_CSOURCE@ --raw --name=rhythmbox_podcast_inline $< > $@
-
-rhythmbox-tray-icon-inline.h: $(top_srcdir)/data/art/rhythmbox-tray-icon.png
-	@GDK_PIXBUF_CSOURCE@ --raw --name=rhythmbox_tray_icon_inline $< > $@
-
-media-eject-inline.h: $(top_srcdir)/data/art/media-eject.png
-	@GDK_PIXBUF_CSOURCE@ --raw --name=media_eject_inline $< > $@
-
 
 BUILT_SOURCES += 				\
 	rb-marshal.c 				\
 	rb-marshal.h 				\
 	rhythmbox-set-star-inline.h		\
 	rhythmbox-unset-star-inline.h		\
-	rhythmbox-no-star-inline.h		\
-	rhythmbox-podcast-inline.h		\
-	rhythmbox-tray-icon-inline.h		\
-	media-eject-inline.h
+	rhythmbox-no-star-inline.h
 
 librb_la_SOURCES += $(BUILT_SOURCES)
 

--- old-bb/lib/rb-stock-icons.c	2007-05-05 13:09:18.000000000 +1000
+++ new-bb/lib/rb-stock-icons.c	2007-05-05 13:09:18.000000000 +1000
@@ -35,55 +35,30 @@
 #include "rhythmbox-set-star-inline.h"
 #include "rhythmbox-unset-star-inline.h"
 #include "rhythmbox-no-star-inline.h"
-#include "rhythmbox-podcast-inline.h"
-#include "rhythmbox-tray-icon-inline.h"
-#include "media-eject-inline.h"
 
 typedef struct {
 	const guint8 *data;
 	const char *name;
 } RBInlineIconData;
 
-static GtkIconFactory *factory = NULL;
-
 const char RB_APP_ICON[] = "rhythmbox";
-const char RB_STOCK_TRAY_ICON[] = "rhythmbox-tray-icon";
+const char RB_STOCK_TRAY_ICON_PLAYING[] = "rhythmbox";
+const char RB_STOCK_TRAY_ICON_NOT_PLAYING[] = "rhythmbox-notplaying";
 const char RB_STOCK_SET_STAR[] = "rhythmbox-set-star";
 const char RB_STOCK_UNSET_STAR[] = "rhythmbox-unset-star";
 const char RB_STOCK_NO_STAR[] = "rhythmbox-no-star";
-const char RB_STOCK_PODCAST[] = "rhythmbox-podcast";
+const char RB_STOCK_PODCAST[] = "library-podcast";
 const char RB_STOCK_BROWSER[] = "stock_music-library";
+const char RB_STOCK_PLAYLIST[] = "playlist";
+const char RB_STOCK_AUTO_PLAYLIST[] = "playlist-automatic";
 const char GNOME_MEDIA_SHUFFLE[] = "stock_shuffle";
 const char GNOME_MEDIA_REPEAT[] = "stock_repeat";
-const char GNOME_MEDIA_PLAYLIST[] = "stock_playlist";
-const char GNOME_MEDIA_AUTO_PLAYLIST[] = "stock_smart-playlist";
 const char GNOME_MEDIA_EJECT[] = "media-eject";
 
 static RBInlineIconData inline_icons[] = {
 	{ rhythmbox_set_star_inline, RB_STOCK_SET_STAR },
 	{ rhythmbox_unset_star_inline, RB_STOCK_UNSET_STAR },
-	{ rhythmbox_no_star_inline, RB_STOCK_NO_STAR },
-	{ rhythmbox_podcast_inline, RB_STOCK_PODCAST },
-	{ rhythmbox_tray_icon_inline, RB_STOCK_TRAY_ICON },
-	{ media_eject_inline, GNOME_MEDIA_EJECT }
-};
-
-static const char* icons[] =
-{
-	/* Rhythmbox custom icons */
-	RB_STOCK_TRAY_ICON,
-	RB_STOCK_SET_STAR,
-	RB_STOCK_UNSET_STAR,
-	RB_STOCK_PODCAST,
-	RB_STOCK_NO_STAR,
-
-	/* gnome-icon-theme icons */
-	GNOME_MEDIA_SHUFFLE,
-	GNOME_MEDIA_REPEAT,
-	GNOME_MEDIA_PLAYLIST,
-	GNOME_MEDIA_AUTO_PLAYLIST,
-	GNOME_MEDIA_EJECT,
-	RB_STOCK_BROWSER
+	{ rhythmbox_no_star_inline, RB_STOCK_NO_STAR }
 };
 
 void
@@ -94,24 +69,18 @@
 	int icon_size;
 	char *dot_icon_dir;
 
-	g_return_if_fail (factory == NULL);
-
-	factory = gtk_icon_factory_new ();
-	gtk_icon_factory_add_default (factory);
-
-	/* we should really add all the sizes */
-	gtk_icon_size_lookup (GTK_ICON_SIZE_LARGE_TOOLBAR, &icon_size, NULL);
-
 	/* add our icon search paths */
 	dot_icon_dir = g_build_filename (rb_dot_dir (), "icons", NULL);
 	gtk_icon_theme_append_search_path (theme, dot_icon_dir);
 	g_free (dot_icon_dir);
 
 	gtk_icon_theme_append_search_path (theme, SHARE_DIR G_DIR_SEPARATOR_S "icons");
-
-
+#ifdef SHARE_UNINSTALLED_DIR
+	gtk_icon_theme_append_search_path (theme, SHARE_UNINSTALLED_DIR G_DIR_SEPARATOR_S "icons");
+#endif
 
 	/* add inline icons */
+	gtk_icon_size_lookup (GTK_ICON_SIZE_LARGE_TOOLBAR, &icon_size, NULL);
 	for (i = 0; i < (int) G_N_ELEMENTS (inline_icons); i++) {
 		GdkPixbuf *pixbuf;
 
@@ -125,76 +94,11 @@
 						 icon_size,
 						 pixbuf);
 	}
-
-	for (i = 0; i < (int) G_N_ELEMENTS (icons); i++) {
-		GtkIconSet *icon_set;
-		GdkPixbuf *pixbuf;
-
-		pixbuf = gtk_icon_theme_load_icon (theme,
-						   icons[i],
-						   icon_size,
-						   0,
-						   NULL);
-		if (pixbuf == NULL) {
-			char *fn;
-			const char *path;
-
-			fn = g_strconcat (icons[i], ".png", NULL);
-			path = rb_file (fn);
-			if (path != NULL) {
-				pixbuf = gdk_pixbuf_new_from_file (path, NULL);
-			}
-			g_free (fn);
-		}
-
-		if (pixbuf) {
-			icon_set = gtk_icon_set_new_from_pixbuf (pixbuf);
-			gtk_icon_factory_add (factory, icons[i], icon_set);
-			gtk_icon_set_unref (icon_set);
-
-			g_object_unref (G_OBJECT (pixbuf));
-		} else {
-			g_warning ("Unable to load icon %s", icons[i]);
-		}
-	}
-
-	/* register the app icon as a builtin if the theme can't find it */
-	if (!gtk_icon_theme_has_icon (theme, RB_APP_ICON)) {
-		int i;
-		GdkPixbuf *pixbuf;
-		char *path;
-		static char *search_paths[] = {
-#ifdef SHARE_UNINSTALLED_DIR
-			SHARE_UNINSTALLED_DIR "/",
-#endif
-			DATADIR "/icons/hicolor/48x48/apps/",
-		};
-
-		for (i = 0; i < (int) G_N_ELEMENTS (search_paths); i++) {
-			path = g_strconcat (search_paths[i], RB_APP_ICON, ".png", NULL);
-			if (g_file_test (path, G_FILE_TEST_EXISTS) == TRUE)
-				break;
-			g_free (path);
-			path = NULL;
-		}
-
-		if (path) {
-			pixbuf = gdk_pixbuf_new_from_file (path, NULL);
-			if (pixbuf) {
-				gtk_icon_theme_add_builtin_icon (RB_APP_ICON, icon_size, pixbuf);
-			}
-		}
-		g_free (path);
-	}
 }
 
-
 void
 rb_stock_icons_shutdown (void)
 {
-	g_return_if_fail (factory != NULL);
-
-	gtk_icon_factory_remove_default (factory);
-
-	g_object_unref (G_OBJECT (factory));
+	/* do nothing */
 }
+

--- old-bb/lib/rb-stock-icons.h	2007-05-05 13:09:18.000000000 +1000
+++ new-bb/lib/rb-stock-icons.h	2007-05-05 13:09:18.000000000 +1000
@@ -25,16 +25,17 @@
 
 G_BEGIN_DECLS
 
-extern const char RB_STOCK_TRAY_ICON[];
+extern const char RB_STOCK_TRAY_ICON_PLAYING[];
+extern const char RB_STOCK_TRAY_ICON_NOT_PLAYING[];
 extern const char RB_STOCK_SET_STAR[];
 extern const char RB_STOCK_UNSET_STAR[];
 extern const char RB_STOCK_NO_STAR[];
 extern const char RB_STOCK_PODCAST[];
 extern const char RB_STOCK_BROWSER[];
+extern const char RB_STOCK_PLAYLIST[];
+extern const char RB_STOCK_AUTO_PLAYLIST[];
 extern const char GNOME_MEDIA_SHUFFLE[];
 extern const char GNOME_MEDIA_REPEAT[];
-extern const char GNOME_MEDIA_PLAYLIST[];
-extern const char GNOME_MEDIA_AUTO_PLAYLIST[];
 extern const char GNOME_MEDIA_EJECT[];
 
 void	rb_stock_icons_init	(void);

--- old-bb/shell/rb-tray-icon.c	2007-05-05 13:09:18.000000000 +1000
+++ new-bb/shell/rb-tray-icon.c	2007-05-05 13:09:18.000000000 +1000
@@ -93,6 +93,8 @@
 	GtkUIManager *ui_manager;
 	GtkActionGroup *actiongroup;
 
+	GtkWidget *playing_image;
+	GtkWidget *not_playing_image;
 	GtkWidget *ebox;
 
 	GtkWidget *tooltip;
@@ -182,8 +184,6 @@
 static void
 rb_tray_icon_init (RBTrayIcon *icon)
 {
-	GtkWidget *image;
-
 	rb_debug ("setting up tray icon");
 
 	icon->priv = RB_TRAY_ICON_GET_PRIVATE (icon);
@@ -211,9 +211,14 @@
 	g_signal_connect_object (G_OBJECT (icon->priv->ebox), "drag_data_received",
 				 G_CALLBACK (rb_tray_icon_drop_cb), icon, 0);
 
-	image = gtk_image_new_from_stock (RB_STOCK_TRAY_ICON,
-					  GTK_ICON_SIZE_SMALL_TOOLBAR);
-	gtk_container_add (GTK_CONTAINER (icon->priv->ebox), image);
+	icon->priv->playing_image = gtk_image_new_from_icon_name (RB_STOCK_TRAY_ICON_PLAYING,
+								  GTK_ICON_SIZE_SMALL_TOOLBAR);
+	icon->priv->not_playing_image = gtk_image_new_from_icon_name (RB_STOCK_TRAY_ICON_NOT_PLAYING,
+								      GTK_ICON_SIZE_SMALL_TOOLBAR);
+	g_object_ref (icon->priv->playing_image);
+	g_object_ref (icon->priv->not_playing_image);
+
+	gtk_container_add (GTK_CONTAINER (icon->priv->ebox), icon->priv->not_playing_image);
 
 	gtk_container_add (GTK_CONTAINER (icon), icon->priv->ebox);
 	gtk_widget_show_all (GTK_WIDGET (icon->priv->ebox));
@@ -267,6 +272,16 @@
 		tray->priv->shell_player = NULL;
 	}
 
+	if (tray->priv->playing_image != NULL) {
+		g_object_unref (tray->priv->playing_image);
+		tray->priv->playing_image = NULL;
+	}
+
+	if (tray->priv->not_playing_image != NULL) {
+		g_object_unref (tray->priv->not_playing_image);
+		tray->priv->not_playing_image = NULL;
+	}
+
 	if (tray->priv->actiongroup != NULL) {
 		if (tray->priv->ui_manager != NULL) {
 			gtk_ui_manager_remove_action_group (tray->priv->ui_manager,
@@ -298,7 +313,7 @@
 	if (tray->priv->tooltip_unhide_id > 0)
 		g_source_remove (tray->priv->tooltip_unhide_id);
 	gtk_object_destroy (GTK_OBJECT (tray->priv->tooltip));
- 
+
 	G_OBJECT_CLASS (rb_tray_icon_parent_class)->finalize (object);
 }
 
@@ -327,6 +342,22 @@
 }
 
 static void
+rb_tray_icon_playing_changed_cb (RBShellPlayer *player, gboolean playing, RBTrayIcon *tray)
+{
+	GtkWidget *image;
+
+	if (playing)
+		image = tray->priv->playing_image;
+	else
+		image = tray->priv->not_playing_image;
+
+	gtk_container_remove (GTK_CONTAINER (tray->priv->ebox),
+			      gtk_bin_get_child (GTK_BIN (tray->priv->ebox)));
+	gtk_container_add (GTK_CONTAINER (tray->priv->ebox), image);
+	gtk_widget_show_all (GTK_WIDGET (tray->priv->ebox));
+}
+
+static void
 rb_tray_icon_set_property (GObject *object,
 			   guint prop_id,
 			   const GValue *value,
@@ -345,6 +376,10 @@
 		g_object_get (tray->priv->shell,
 			      "shell-player", &tray->priv->shell_player,
 			      NULL);
+		g_signal_connect_object (tray->priv->shell_player,
+					 "playing-changed",
+					 G_CALLBACK (rb_tray_icon_playing_changed_cb),
+					 tray, 0);
 		rb_tray_icon_sync_action (NULL, FALSE, tray);
 		break;
 	case PROP_UI_MANAGER:

--- old-bb/shell/rb-playlist-manager.c	2007-05-05 13:09:18.000000000 +1000
+++ new-bb/shell/rb-playlist-manager.c	2007-05-05 13:09:18.000000000 +1000
@@ -130,10 +130,10 @@
 	/* Submenu of Music */
 	{ "Playlist", NULL, N_("_Playlist") },
 
-	{ "MusicPlaylistNewPlaylist", GNOME_MEDIA_PLAYLIST, N_("_New Playlist"), "<control>N",
+	{ "MusicPlaylistNewPlaylist", RB_STOCK_PLAYLIST, N_("_New Playlist"), "<control>N",
 	  N_("Create a new playlist"),
 	  G_CALLBACK (rb_playlist_manager_cmd_new_playlist) },
-	{ "MusicPlaylistNewAutomaticPlaylist", GNOME_MEDIA_AUTO_PLAYLIST, N_("New _Automatic Playlist..."), NULL,
+	{ "MusicPlaylistNewAutomaticPlaylist", RB_STOCK_AUTO_PLAYLIST, N_("New _Automatic Playlist..."), NULL,
 	  N_("Create a new automatically updating playlist"),
 	  G_CALLBACK (rb_playlist_manager_cmd_new_automatic_playlist) },
 	{ "MusicPlaylistLoadPlaylist", NULL, N_("_Load from File..."), NULL,

--- old-bb/plugins/daap/rb-daap-plugin.c	2007-05-05 13:09:18.000000000 +1000
+++ new-bb/plugins/daap/rb-daap-plugin.c	2007-05-05 13:09:18.000000000 +1000
@@ -378,7 +363,7 @@
 
 	theme = gtk_icon_theme_get_default ();
 
-	gtk_icon_size_lookup (GTK_ICON_SIZE_LARGE_TOOLBAR, &size, NULL);
+	gtk_icon_size_lookup (RB_SOURCE_ICON_SIZE, &size, NULL);
 	plugin->priv->daap_share_pixbuf =
 		gtk_icon_theme_load_icon (theme, "gnome-fs-network", size, 0, NULL);
 
--- old-bb/plugins/iradio/rb-iradio-source.c	2007-05-05 13:09:18.000000000 +1000
+++ new-bb/plugins/iradio/rb-iradio-source.c	2007-05-05 13:09:18.000000000 +1000
@@ -218,7 +218,7 @@
 
 	gtk_container_add (GTK_CONTAINER (source), source->priv->vbox);
 
-	gtk_icon_size_lookup (GTK_ICON_SIZE_LARGE_TOOLBAR, &size, NULL);
+	gtk_icon_size_lookup (RB_SOURCE_ICON_SIZE, &size, NULL);
 	pixbuf = gtk_icon_theme_load_icon (gtk_icon_theme_get_default (),
 					   IRADIO_SOURCE_ICON,
 					   size,

diff -rN -u old-bb/sources/rb-auto-playlist-source.c new-bb/sources/rb-auto-playlist-source.c
--- old-bb/sources/rb-auto-playlist-source.c	2007-05-05 13:09:18.000000000 +1000
+++ new-bb/sources/rb-auto-playlist-source.c	2007-05-05 13:09:18.000000000 +1000
@@ -140,9 +140,9 @@
 	if (playlist_pixbuf == NULL) {
 		gint size;
 
-		gtk_icon_size_lookup (GTK_ICON_SIZE_LARGE_TOOLBAR, &size, NULL);
+		gtk_icon_size_lookup (RB_SOURCE_ICON_SIZE, &size, NULL);
 		playlist_pixbuf = gtk_icon_theme_load_icon (gtk_icon_theme_get_default (),
-							    GNOME_MEDIA_AUTO_PLAYLIST,
+							    RB_STOCK_AUTO_PLAYLIST,
 							    size,
 							    0, NULL);
 		if (playlist_pixbuf) {
diff -rN -u old-bb/sources/rb-import-errors-source.c new-bb/sources/rb-import-errors-source.c
--- old-bb/sources/rb-import-errors-source.c	2007-05-05 13:09:18.000000000 +1000
+++ new-bb/sources/rb-import-errors-source.c	2007-05-05 13:09:18.000000000 +1000
@@ -90,7 +90,7 @@
 
 	source->priv = G_TYPE_INSTANCE_GET_PRIVATE (source, RB_TYPE_IMPORT_ERRORS_SOURCE, RBImportErrorsSourcePrivate);
 
-	gtk_icon_size_lookup (GTK_ICON_SIZE_LARGE_TOOLBAR, &size, NULL);
+	gtk_icon_size_lookup (RB_SOURCE_ICON_SIZE, &size, NULL);
 	pixbuf = gtk_icon_theme_load_icon (gtk_icon_theme_get_default (),
 					   GTK_STOCK_DIALOG_ERROR,
 					   size,
diff -rN -u old-bb/sources/rb-library-source.c new-bb/sources/rb-library-source.c
--- old-bb/sources/rb-library-source.c	2007-05-05 13:09:18.000000000 +1000
+++ new-bb/sources/rb-library-source.c	2007-05-05 13:09:18.000000000 +1000
@@ -331,7 +331,7 @@
 
 	entry_type = RHYTHMDB_ENTRY_TYPE_SONG;
 
-	gtk_icon_size_lookup (GTK_ICON_SIZE_LARGE_TOOLBAR, &size, NULL);
+	gtk_icon_size_lookup (RB_SOURCE_ICON_SIZE, &size, NULL);
 	icon = gtk_icon_theme_load_icon (gtk_icon_theme_get_default (),
 					 "audio-x-generic",
 					 size,
diff -rN -u old-bb/sources/rb-missing-files-source.c new-bb/sources/rb-missing-files-source.c
--- old-bb/sources/rb-missing-files-source.c	2007-05-05 13:09:18.000000000 +1000
+++ new-bb/sources/rb-missing-files-source.c	2007-05-05 13:09:18.000000000 +1000
@@ -111,7 +111,7 @@
 
 	source->priv = G_TYPE_INSTANCE_GET_PRIVATE (source, RB_TYPE_MISSING_FILES_SOURCE, RBMissingFilesSourcePrivate);
 
-	gtk_icon_size_lookup (GTK_ICON_SIZE_LARGE_TOOLBAR, &size, NULL);
+	gtk_icon_size_lookup (RB_SOURCE_ICON_SIZE, &size, NULL);
 	pixbuf = gtk_icon_theme_load_icon (gtk_icon_theme_get_default (),
 					   GTK_STOCK_MISSING_IMAGE,
 					   size,
diff -rN -u old-bb/sources/rb-podcast-source.c new-bb/sources/rb-podcast-source.c
--- old-bb/sources/rb-podcast-source.c	2007-05-05 13:09:18.000000000 +1000
+++ new-bb/sources/rb-podcast-source.c	2007-05-05 13:09:18.000000000 +1000
@@ -379,7 +379,6 @@
 rb_podcast_source_init (RBPodcastSource *source)
 {
 	GdkPixbuf *pixbuf;
-	GdkPixbuf *scaled = NULL;
 	gint       size;
 
 	source->priv = RB_PODCAST_SOURCE_GET_PRIVATE (source);
@@ -390,29 +389,16 @@
 
 	gtk_container_add (GTK_CONTAINER (source), source->priv->vbox);
 
-	gtk_icon_size_lookup (GTK_ICON_SIZE_LARGE_TOOLBAR, &size, NULL);
+	gtk_icon_size_lookup (RB_SOURCE_ICON_SIZE, &size, NULL);
 	pixbuf = gtk_icon_theme_load_icon (gtk_icon_theme_get_default (),
 					   RB_STOCK_PODCAST,
 					   size,
 					   0, NULL);
 
 	if (pixbuf != NULL) {
-		/* we only have this icon as a 48x48 bitmap, so it helps to
-		 * scale it to the right size.  otherwise the sourcelist gets
-		 * a bit uneven.
-		 */
-		gtk_icon_size_lookup (GTK_ICON_SIZE_LARGE_TOOLBAR, &size, NULL);
-		scaled = gdk_pixbuf_scale_simple (pixbuf, size, size, GDK_INTERP_BILINEAR);
-
-		rb_source_set_pixbuf (RB_SOURCE (source), scaled);
-	}
-
-	if (pixbuf != NULL) {
+		rb_source_set_pixbuf (RB_SOURCE (source), pixbuf);
 		g_object_unref (pixbuf);
 	}
-	if (scaled != NULL) {
-		g_object_unref (scaled);
-	}
 }
 
 static void
diff -rN -u old-bb/sources/rb-removable-media-source.c new-bb/sources/rb-removable-media-source.c
--- old-bb/sources/rb-removable-media-source.c	2007-05-05 13:09:18.000000000 +1000
+++ new-bb/sources/rb-removable-media-source.c	2007-05-05 13:09:18.000000000 +1000
@@ -151,7 +151,7 @@
 
 	icon_name = gnome_vfs_volume_get_icon (volume);
 	theme = gtk_icon_theme_get_default ();
-	gtk_icon_size_lookup (GTK_ICON_SIZE_LARGE_TOOLBAR, &size, NULL);
+	gtk_icon_size_lookup (RB_SOURCE_ICON_SIZE, &size, NULL);
 	pixbuf = gtk_icon_theme_load_icon (theme, icon_name, size, 0, NULL);
 	g_free (icon_name);
 
diff -rN -u old-bb/sources/rb-source.h new-bb/sources/rb-source.h
--- old-bb/sources/rb-source.h	2007-05-05 13:09:18.000000000 +1000
+++ new-bb/sources/rb-source.h	2007-05-05 13:09:18.000000000 +1000
@@ -49,6 +49,8 @@
 #define RB_IS_SOURCE_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), RB_TYPE_SOURCE))
 #define RB_SOURCE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), RB_TYPE_SOURCE, RBSourceClass))
 
+#define RB_SOURCE_ICON_SIZE	GTK_ICON_SIZE_LARGE_TOOLBAR
+
 typedef struct _RBSourceClass	RBSourceClass;
 typedef struct _RBSource		RBSource;
 typedef struct _RBSourcePrivate	RBSourcePrivate;
diff -rN -u old-bb/sources/rb-static-playlist-source.c new-bb/sources/rb-static-playlist-source.c
--- old-bb/sources/rb-static-playlist-source.c	2007-05-05 13:09:18.000000000 +1000
+++ new-bb/sources/rb-static-playlist-source.c	2007-05-05 13:09:18.000000000 +1000
@@ -153,9 +153,9 @@
 {
 	if (playlist_pixbuf == NULL) {
 		gint size;
-		gtk_icon_size_lookup (GTK_ICON_SIZE_LARGE_TOOLBAR, &size, NULL);
+		gtk_icon_size_lookup (RB_SOURCE_ICON_SIZE, &size, NULL);
 		playlist_pixbuf = gtk_icon_theme_load_icon (gtk_icon_theme_get_default (),
-							    GNOME_MEDIA_PLAYLIST,
+							    RB_STOCK_PLAYLIST,
 							    size,
 							    0, NULL);
 		if (playlist_pixbuf) {

--- old-bb/widgets/rb-rating-helper.c	2007-05-05 13:09:18.000000000 +1000
+++ new-bb/widgets/rb-rating-helper.c	2007-05-05 13:09:18.000000000 +1000
@@ -35,12 +35,12 @@
 void
 rb_rating_pixbufs_free (RBRatingPixbufs *pixbufs)
 {
-	if (pixbufs->pix_star)
-		g_object_unref (G_OBJECT (pixbufs->pix_star));
-	if (pixbufs->pix_dot)
-		g_object_unref (G_OBJECT (pixbufs->pix_dot));
-	if (pixbufs->pix_blank)
-		g_object_unref (G_OBJECT (pixbufs->pix_blank));
+	if (pixbufs->pix_star != NULL)
+		g_object_unref (pixbufs->pix_star);
+	if (pixbufs->pix_dot != NULL)
+		g_object_unref (pixbufs->pix_dot);
+	if (pixbufs->pix_blank != NULL)
+		g_object_unref (pixbufs->pix_blank);
 }
 
 void
@@ -59,53 +59,40 @@
 RBRatingPixbufs *
 rb_rating_pixbufs_new (void)
 {
-	GtkWidget *dummy;
 	RBRatingPixbufs *pixbufs;
+	GtkIconTheme *theme;
+	gint width;
 
 	pixbufs = g_new0 (RBRatingPixbufs, 1);
 	if (pixbufs == NULL) {
 		return NULL;
 	}
 
-	dummy = gtk_label_new (NULL);
-	pixbufs->pix_star = gtk_widget_render_icon (dummy,
-						    RB_STOCK_SET_STAR,
-						    GTK_ICON_SIZE_MENU,
-						    NULL);
-	if (pixbufs->pix_star == NULL) {
-		goto error;
-	}
-
-	pixbufs->pix_dot = gtk_widget_render_icon (dummy,
-						   RB_STOCK_UNSET_STAR,
-						   GTK_ICON_SIZE_MENU,
-						   NULL);
-	if (pixbufs->pix_dot == NULL) {
-		goto error;
-	}
+	theme = gtk_icon_theme_get_default ();
+	gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, NULL, &width);
 
-	pixbufs->pix_blank = gtk_widget_render_icon (dummy,
-						     RB_STOCK_NO_STAR,
-						     GTK_ICON_SIZE_MENU,
+	pixbufs->pix_star = gtk_icon_theme_load_icon (theme,
+						      RB_STOCK_SET_STAR,
+						      width,
+						      0,
+						      NULL);
+	pixbufs->pix_dot = gtk_icon_theme_load_icon (theme,
+						     RB_STOCK_UNSET_STAR,
+						     width,
+						     0,
 						     NULL);
-	if (pixbufs->pix_blank == NULL) {
-		goto error;
+	pixbufs->pix_blank = gtk_icon_theme_load_icon (theme,
+						       RB_STOCK_NO_STAR,
+						       width,
+						       0,
+						       NULL);
+	if (pixbufs->pix_star != NULL &&
+	    pixbufs->pix_dot != NULL &&
+	    pixbufs->pix_blank != NULL) {
+		return pixbufs;
 	}
 
-	gtk_widget_destroy (dummy);
-	return pixbufs;
-
- error:
-	if (pixbufs->pix_star != NULL) {
-		g_object_unref (G_OBJECT (pixbufs->pix_star));
-	}
-	if (pixbufs->pix_dot != NULL) {
-		g_object_unref (G_OBJECT (pixbufs->pix_dot));
-	}
-	if (pixbufs->pix_blank != NULL) {
-		g_object_unref (G_OBJECT (pixbufs->pix_blank));
-	}
-	gtk_widget_destroy (dummy);
+	rb_rating_pixbufs_free (pixbufs);
 	g_free (pixbufs);
 	return NULL;
 }

