Index: plugins/artdisplay/artdisplay/CoverArtDatabase.py
===================================================================
--- plugins/artdisplay/artdisplay/CoverArtDatabase.py	(revision 4909)
+++ plugins/artdisplay/artdisplay/CoverArtDatabase.py	(working copy)
@@ -25,10 +25,18 @@
 
 from PodcastCoverArtSearch import PodcastCoverArtSearch
 from AmazonCoverArtSearch import AmazonCoverArtSearch
+try:
+	from MusicBrainzCoverArtSearch import MusicBrainzCoverArtSearch
+	python_musicbrainz = True
+except:
+	python_musicbrainz = False
 from LocalCoverArtSearch import LocalCoverArtSearch
 
 ART_SEARCHES_LOCAL = [LocalCoverArtSearch]
-ART_SEARCHES_REMOTE = [PodcastCoverArtSearch, AmazonCoverArtSearch]
+if python_musicbrainz:
+	ART_SEARCHES_REMOTE = [PodcastCoverArtSearch, MusicBrainzCoverArtSearch, AmazonCoverArtSearch]
+else:
+	ART_SEARCHES_REMOTE = [PodcastCoverArtSearch, AmazonCoverArtSearch]
 ART_FOLDER = '~/.gnome2/rhythmbox/covers'
 ART_CACHE_EXTENSION = 'jpg'
 ART_CACHE_FORMAT = 'jpeg'
Index: plugins/artdisplay/artdisplay/Makefile.am
===================================================================
--- plugins/artdisplay/artdisplay/Makefile.am	(revision 4909)
+++ plugins/artdisplay/artdisplay/Makefile.am	(working copy)
@@ -4,6 +4,7 @@
 plugin_PYTHON = 			\
 	PodcastCoverArtSearch.py	\
 	AmazonCoverArtSearch.py		\
+	MusicBrainzCoverArtSearch.py	\
 	LocalCoverArtSearch.py		\
 	CoverArtDatabase.py		\
 	__init__.py
Index: plugins/artdisplay/artdisplay/MusicBrainzCoverArtSearch.py
===================================================================
--- plugins/artdisplay/artdisplay/MusicBrainzCoverArtSearch.py	(revision 0)
+++ plugins/artdisplay/artdisplay/MusicBrainzCoverArtSearch.py	(revision 0)
@@ -0,0 +1,68 @@
+# -*- Mode: python; coding: utf-8; tab-width: 8; indent-tabs-mode: t; -*- 
+#
+# Copyright (C) 2007 - Alex Lancaster
+#
+# This program is free software; you can redistribute it and/or modify
+# 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
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA.
+
+from musicbrainz2.webservice import Query, WebServiceError
+from xml.dom import minidom
+import re
+import locale
+import urllib
+
+import rhythmdb
+
+class Bag: pass
+
+class MusicBrainzCoverArtSearch (object):
+	def __init__ (self, loader):
+		self.searching = False
+		self.cancel = False
+		self.entry = None
+
+	def search (self, db, entry, on_search_completed_callback, *args):
+		self.searching = True
+		self.cancel = False
+		self.entry = entry
+                self.args = args
+		self.on_search_completed_callback = on_search_completed_callback
+
+		mb_albumid = db.entry_get(entry, rhythmdb.PROP_MUSICBRAINZ_ALBUMID)
+
+                if mb_albumid == "":
+                    on_search_completed_callback (self, self.entry, None, *self.args)
+                    return
+
+                try:
+                    query = Query()
+                    asin = query.getReleaseById(mb_albumid).getAsin()
+                except WebServiceError:
+                    on_search_completed_callback (self, self.entry, None, *self.args)
+                    return
+
+                if asin == u'<mblogo>' or asin == u'':
+                    on_search_completed_callback (self, self.entry, None, *self.args)
+                    return
+                else:
+                    image_url = "http://images.amazon.com/images/P/" + asin + ".01.LZZZZZZZ.jpg"
+
+		on_search_completed_callback (self, self.entry, image_url, *self.args)
+
+	def search_next (self):
+		return False
+
+	def get_best_match_urls (self, search_results):
+		# Default to "no match", our results must match our criteria
+		return [search_results]
