diff -Naur rhythmbox/widgets/rb-header.c rhythmbox-album_icon/widgets/rb-header.c
--- rhythmbox/widgets/rb-header.c	2003-12-16 16:36:46.000000000 +0100
+++ rhythmbox-album_icon/widgets/rb-header.c	2004-02-05 19:55:35.000000000 +0100
@@ -30,6 +30,7 @@
 #include <gtk/gtktooltips.h>
 #include <config.h>
 #include <libgnome/gnome-i18n.h>
+#include <libgnomevfs/gnome-vfs.h>
 #include <string.h>
 
 #include "rb-song-display-box.h"
@@ -39,6 +40,7 @@
 #include "rb-ellipsizing-label.h"
 #include "rb-preferences.h"
 #include "eel-gconf-extensions.h"
+#include "rb-file-helpers.h"
 
 static void rb_header_class_init (RBHeaderClass *klass);
 static void rb_header_init (RBHeader *player);
@@ -74,10 +76,11 @@
 
 	char *title;
 	char *urltext, *urllink;
-
+	char *album_icon_uri;
+	
 	RBPlayer *mmplayer;
 
-	GtkWidget *image;
+	GtkWidget *album_icon;
 	GtkWidget *song;
 
 	GtkWidget *timeframe;
@@ -115,6 +118,7 @@
 	PROP_TITLE,
 	PROP_URLTEXT,
 	PROP_URLLINK,
+	PROP_ALBUM_ICON_URI,
 };
 
 static GObjectClass *parent_class = NULL;
@@ -124,6 +128,18 @@
 #define ALBUM_INFO_URL(xALBUM)   g_strdup_printf ("http://www.allmusic.com/cg/amg.dll?p=amg&opt1=2&sql=%s", xALBUM);
 #define ARTIST_INFO_URL(xARTIST) g_strdup_printf ("http://www.allmusic.com/cg/amg.dll?p=amg&opt1=1&sql=%s", xARTIST);
 
+static const char *valid_cover_names[] = {
+	"cover.jpg",
+	"cover.gif",
+	"cover.png",
+	"cover.jpeg",
+	"cover.JPG",
+	"cover.GIF",
+	"cover.PNG",
+	NULL
+};
+
+
 GType
 rb_header_get_type (void)
 {
@@ -205,7 +221,13 @@
 							      "urllink",
 							      NULL,
 							      G_PARAM_READWRITE));
-
+	g_object_class_install_property (object_class,
+					 PROP_ALBUM_ICON_URI,
+					 g_param_spec_string ("album_icon_uri",
+							      "album_icon_uri",
+							      "album_icon_uri",
+							      NULL,
+							      G_PARAM_READWRITE));
 }
 
 static void
@@ -215,6 +237,7 @@
 	 * The children in this widget look like this:
 	 * RBHeader
 	 *   GtkHBox
+	 *     GtkImage     (priv->album_icon)
 	 *     GtkVBox
 	 *       GtkAlignment
 	 *         GtkVBox
@@ -243,10 +266,8 @@
 
 	hbox = gtk_hbox_new (FALSE, 10);
 
-#if 0
-	player->priv->image = gtk_image_new ();
-	gtk_box_pack_start (GTK_BOX (hbox), player->priv->image, FALSE, TRUE, 0);
-#endif
+	player->priv->album_icon = gtk_image_new ();
+	gtk_box_pack_start (GTK_BOX (hbox), player->priv->album_icon, FALSE, TRUE, 0);
 
 	vbox = gtk_vbox_new (FALSE, 5);
 
@@ -377,6 +398,11 @@
 		g_free (player->priv->urllink);
 		player->priv->urllink = g_value_dup_string (value);
 		break;
+	case PROP_ALBUM_ICON_URI:
+		if (player->priv->album_icon_uri) 
+			g_free (player->priv->album_icon_uri);
+		player->priv->album_icon_uri = g_value_dup_string (value);
+		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 		break;
@@ -410,6 +436,9 @@
 	case PROP_URLLINK:
 		g_value_set_string (value, player->priv->urllink);
 		break;
+	case PROP_ALBUM_ICON_URI:
+		g_value_set_string (value, player->priv->album_icon_uri);
+		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 		break;
@@ -442,6 +471,12 @@
 	g_object_set (G_OBJECT (player), "title", title, NULL);
 }
 
+void
+rb_header_set_album_icon_uri (RBHeader *player, const char *uri)
+{
+	g_object_set (G_OBJECT (player), "album_icon_uri", uri, NULL);
+}
+
 static long
 rb_header_get_duration (RBHeader *player)
 {
@@ -457,6 +492,125 @@
 	return -1;
 }
 
+static char*
+rb_header_find_local_album_icon(const char *location)
+{
+	char *cover_uri = NULL;
+	char *canonical, *slash = NULL;
+	GnomeVFSFileInfo *info;
+	int i;
+
+	if (rb_uri_is_iradio(location))
+		return NULL;
+	
+	if (!(canonical = gnome_vfs_unescape_string_for_display (location)))
+		return NULL;
+	
+	/* Find last slash in uri, and cut string behind it */
+	if (!(slash = strrchr(canonical, '/')))
+		return NULL;
+	slash[1] = '\0';
+
+	info = gnome_vfs_file_info_new ();
+
+	for (i = 0; valid_cover_names[i] != NULL; i++) {
+		int flags = GNOME_VFS_FILE_INFO_DEFAULT | 
+						GNOME_VFS_FILE_INFO_GET_MIME_TYPE;
+		
+		cover_uri = g_strconcat (canonical, valid_cover_names[i], NULL);
+		
+		if (GNOME_VFS_OK == gnome_vfs_get_file_info (cover_uri, info, flags)) {
+			gboolean tests = TRUE;
+				
+			if (info->size > 1024 * 200) tests = FALSE;
+			if (info->type != GNOME_VFS_FILE_TYPE_REGULAR) tests = FALSE;
+			if (tests) break;
+		}
+		g_free (cover_uri);
+		cover_uri = NULL;
+	}				
+	gnome_vfs_file_info_unref (info);
+	g_free (canonical);
+	
+	return cover_uri;
+}	
+
+static void 
+rb_header_album_icon_area_prepared_cb (GdkPixbufLoader *loader,
+										gpointer data)
+{
+	RBHeader *player = (RBHeader*)data;
+	GdkPixbuf *pixbuf;
+	
+	if ((pixbuf = gdk_pixbuf_loader_get_pixbuf (loader))) {
+		gtk_image_set_from_pixbuf (GTK_IMAGE (player->priv->album_icon), pixbuf);
+		gdk_pixbuf_unref (pixbuf);
+	} else 
+		gtk_image_set_from_stock (GTK_IMAGE (player->priv->album_icon), RB_STOCK_ALBUM, GTK_ICON_SIZE_DIALOG);
+}
+		
+static void		
+rb_header_album_icon_size_prepared_cb (GdkPixbufLoader *loader,
+										gint width,
+										gint height,
+										gpointer data)
+{
+	int dwidth = 0, dheight = 0;
+	
+	gtk_icon_size_lookup (GTK_ICON_SIZE_DIALOG, &dwidth, &dheight);
+	gdk_pixbuf_loader_set_size(loader, dwidth, dheight);
+}
+		
+static void
+rb_header_sync_album_icon (RBHeader *player, const char *location) 
+{
+	char *cover_uri;
+	
+	if (!location) {
+		gtk_image_set_from_stock (GTK_IMAGE (player->priv->album_icon), RB_STOCK_ALBUM, GTK_ICON_SIZE_DIALOG);
+		return;
+	}
+
+	/* Maybe implement a rb_header_find_remote_album_icon later? */
+	cover_uri = rb_header_find_local_album_icon(location);
+
+	/* Check if the uri has changed. If not, don't do anything :-) */
+	if (player->priv->album_icon_uri) {
+		if (cover_uri) {
+			if (!strcmp(cover_uri, player->priv->album_icon_uri)) 
+				return;
+		}
+	} else {
+		if (!cover_uri) 
+			return;
+	}
+	
+	rb_header_set_album_icon_uri (player, cover_uri);
+	/*g_print ("%s\n", cover_uri);*/
+	
+	if (cover_uri) {
+		gsize size;
+		char *data;
+
+		if (GNOME_VFS_OK == gnome_vfs_read_entire_file (cover_uri, &size, &data)) {
+			GdkPixbufLoader *loader;
+			
+			loader = gdk_pixbuf_loader_new ();
+			g_signal_connect (G_OBJECT (loader), "area-prepared", 
+									G_CALLBACK (rb_header_album_icon_area_prepared_cb), player);
+			g_signal_connect (G_OBJECT (loader), "size-prepared", 
+									G_CALLBACK (rb_header_album_icon_size_prepared_cb), NULL);
+			if (!gdk_pixbuf_loader_write (loader, data, size, NULL)) 
+				gtk_image_set_from_stock (GTK_IMAGE (player->priv->album_icon), RB_STOCK_ALBUM, GTK_ICON_SIZE_DIALOG);
+			 else 
+				gdk_pixbuf_loader_close (loader, NULL);
+			g_free (data);
+		}
+		g_free (cover_uri);
+	} else 
+		gtk_image_set_from_stock (GTK_IMAGE (player->priv->album_icon), RB_STOCK_ALBUM, GTK_ICON_SIZE_DIALOG);
+ }
+
 void
 rb_header_sync (RBHeader *player)
 {
@@ -469,6 +623,7 @@
 		gboolean have_duration = rb_header_get_duration (player) > 0;
 		const char *album; 
 		const char *artist; 
+		const char *location = NULL;
 		GtkTooltips *artist_href_tips, *album_href_tips;
 
 		rhythmdb_read_lock (player->priv->db);
@@ -480,9 +635,14 @@
 		artist = rhythmdb_entry_get_string (player->priv->db,
 						    player->priv->entry,
 						    RHYTHMDB_PROP_ARTIST);
+		location = rhythmdb_entry_get_string (player->priv->db, 
+							player->priv->entry, 
+							RHYTHMDB_PROP_LOCATION);
 
 		rhythmdb_read_unlock (player->priv->db);
 
+		rb_header_sync_album_icon (player, location);
+		
 		escaped = g_markup_escape_text (song, -1);
 		tmp = SONG_MARKUP (escaped);
 		g_free (escaped);
@@ -492,6 +652,7 @@
 		rb_header_set_show_artist_album (player, (album != NULL && artist != NULL)
 						 && (strlen (album) > 0 && strlen (artist) > 0));
 
+
 		if (player->priv->displaybox_shown)
 		{
 			g_return_if_fail (album != NULL);
@@ -567,14 +728,8 @@
 		rb_header_set_urldata (player, NULL, NULL);
 		rb_header_set_show_artist_album (player, FALSE);
 		rb_header_set_show_timeline (player, FALSE);
+		gtk_image_set_from_stock (GTK_IMAGE (player->priv->album_icon), RB_STOCK_ALBUM, GTK_ICON_SIZE_DIALOG);
 	}
-
-#if 0
-	if (pixbuf != NULL)
-		gtk_image_set_from_pixbuf (GTK_IMAGE (player->priv->image), pixbuf);
-	else
-		gtk_image_set_from_stock (GTK_IMAGE (player->priv->image), RB_STOCK_ALBUM, GTK_ICON_SIZE_DIALOG);
-#endif
 }
 
 void
diff -Naur rhythmbox/widgets/rb-header.h rhythmbox-album_icon/widgets/rb-header.h
--- rhythmbox/widgets/rb-header.h	2003-12-16 16:36:46.000000000 +0100
+++ rhythmbox-album_icon/widgets/rb-header.h	2004-02-05 19:55:35.000000000 +0100
@@ -61,6 +61,9 @@
 void		rb_header_set_title		(RBHeader *player,
 						 const char *title);
 
+void		rb_header_set_album_icon_uri (RBHeader *player,
+						 const char *uri);
+
 void		rb_header_set_show_artist_album	(RBHeader *player,
 						 gboolean show);
 
