diff -rN -u -p old-bb/plugins/audioscrobbler/rb-lastfm-source.c new-bb/plugins/audioscrobbler/rb-lastfm-source.c
--- old-bb/plugins/audioscrobbler/rb-lastfm-source.c	2007-03-03 10:53:17.000000000 +1000
+++ new-bb/plugins/audioscrobbler/rb-lastfm-source.c	2007-03-03 10:53:17.000000000 +1000
@@ -73,6 +73,8 @@
 #define RB_LASTFM_VERSION "1.1.1"
 #define EXTRA_URI_ENCODE_CHARS	"&+"
 
+#define LAST_FM_NO_COVER_IMAGE "http://static.last.fm/depth/catalogue/noimage/cover_med.gif"
+
 
 static void rb_lastfm_source_class_init (RBLastfmSourceClass *klass);
 static void rb_lastfm_source_init (RBLastfmSource *source);
@@ -1153,6 +1155,7 @@ rb_lastfm_source_metadata_cb (SoupMessag
 	char **pieces;
 	int p;
 	RhythmDBEntry *entry;
+	gboolean found_cover;
 
 	entry = rb_shell_player_get_playing_entry (source->priv->shell_player);
 	if (entry == NULL || rhythmdb_entry_get_entry_type (entry) != source->priv->entry_type) {
@@ -1166,6 +1169,7 @@ rb_lastfm_source_metadata_cb (SoupMessag
 
 	g_strstrip (body);
 	pieces = g_strsplit (body, "\n", 0);
+	found_cover = FALSE;
 
 	for (p = 0; pieces[p] != NULL; p++) {
 		gchar **values;
@@ -1186,6 +1190,22 @@ rb_lastfm_source_metadata_cb (SoupMessag
 			rb_streaming_source_set_streaming_title (RB_STREAMING_SOURCE (source), values[1]);
 		} else if (strcmp (values[0], "albumcover_small") == 0) {
 		} else if (strcmp (values[0], "albumcover_medium") == 0) {
+			GValue v = {0,};
+
+			rb_debug ("albumcover -> %s", values[1]);
+			if (strcmp (values[1], LAST_FM_NO_COVER_IMAGE) == 0) {
+				rb_debug ("ignoring last.fm's no cover image");
+			} else {
+				g_value_init (&v, G_TYPE_STRING);
+				g_value_set_string (&v, values[1]);
+				rhythmdb_emit_entry_extra_metadata_notify (source->priv->db,
+									   entry,
+									   "rb:coverArt-uri",
+									   &v);
+				g_value_unset (&v);
+				found_cover = TRUE;
+			}
+
 		} else if (strcmp (values[0], "albumcover_large") == 0) {
 		} else if (strcmp (values[0], "trackprogress") == 0) {
 		} else if (strcmp (values[0], "trackduration") == 0) {
@@ -1203,6 +1223,19 @@ rb_lastfm_source_metadata_cb (SoupMessag
 	g_strfreev (pieces);
 	g_free (body);
 
+	if (found_cover == FALSE) {
+		GValue v = {0,};
+
+		/* art display plugin treats an empty URI as meaning 'no cover art' */
+		g_value_init (&v, G_TYPE_STRING);
+		g_value_set_string (&v, "");
+		rhythmdb_emit_entry_extra_metadata_notify (source->priv->db,
+							   entry,
+							   "rb:coverArt-uri",
+							   &v);
+		g_value_unset (&v);
+	}
+
 	source->priv->status = OK;
 	rb_source_notify_status_changed (RB_SOURCE (source));
 }

diff -rN -u -p old-bb/plugins/artdisplay/artdisplay/__init__.py new-bb/plugins/artdisplay/artdisplay/__init__.py
--- old-bb/plugins/artdisplay/artdisplay/__init__.py	2007-03-03 10:53:17.000000000 +1000
+++ new-bb/plugins/artdisplay/artdisplay/__init__.py	2007-03-03 10:53:17.000000000 +1000
@@ -1,4 +1,4 @@
-# -*- Mode: python; coding: utf-8; tab-width: 8; indent-tabs-mode: t; -*- 
+# -*- Mode: python; coding: utf-8; tab-width: 8; indent-tabs-mode: t; -*-
 #
 # Copyright (C) 2006 - James Livingston
 #
@@ -6,7 +6,7 @@
 # it under the terms of the GNU General Public License as published by
 # the Free Software Foundation; either version 2, or (at your option)
 # any later version.
-# 
+#
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
@@ -239,7 +239,7 @@ class ArtDisplayWidget (FadingImage):
 		self.set_padding (0, 5)
 		self.current_entry, self.working = None, False
 		self.current_pixbuf, self.current_uri = None, None
-	
+
 	def set (self, entry, pixbuf, uri, working):
 		self.current_entry = entry
 		self.current_pixbuf = pixbuf
@@ -250,7 +250,7 @@ class ArtDisplayWidget (FadingImage):
 class ArtDisplayPlugin (rb.Plugin):
 	def __init__ (self):
 		rb.Plugin.__init__ (self)
-		
+
 	def activate (self, shell):
 		self.shell = shell
 		sp = shell.get_player ()
@@ -265,7 +265,7 @@ class ArtDisplayPlugin (rb.Plugin):
 		self.art_db = CoverArtDatabase ()
 		self.current_entry, self.current_pixbuf = None, None
 		self.playing_entry_changed (sp, sp.get_playing_entry ())
-	
+
 	def deactivate (self, shell):
 		self.shell = None
 		sp = shell.get_player ()
@@ -306,7 +306,7 @@ class ArtDisplayPlugin (rb.Plugin):
 		self.art_widget.set (entry, pixbuf, uri, False)
 		if pixbuf:
 			db = self.shell.get_property ("db")
-			# This might be from a playing-changed signal, 
+			# This might be from a playing-changed signal,
 			# in which case consumers won't be ready yet.
 			def idle_emit_art():
 				db.emit_entry_extra_metadata_notify (entry, "rb:coverArt", pixbuf)
@@ -328,8 +328,14 @@ class ArtDisplayPlugin (rb.Plugin):
 		self.art_widget.set (entry, metadata, None, False)
 
 	def cover_art_uri_notify (self, db, entry, field, metadata):
-		if entry != self.current_entry or not metadata:
+		if entry != self.current_entry:
 			return
+
+		if not metadata:
+			print "got no-cover-art notification"
+			self.art_widget.set (entry, None, None, False)
+			return
+
 		uri = str (metadata)
 		def loader_cb (data):
 			if data and len (data) >= 1000:
@@ -342,5 +348,7 @@ class ArtDisplayPlugin (rb.Plugin):
 							self.on_get_pixbuf_completed (entry, pixbuf, uri)
 				except GError:
 					pass
+
+		print "got cover art URI notification: %s" % (uri)
 		rb.Loader().get_url (uri, loader_cb)
 

