diff --git a/data/rhythmbox.schemas b/data/rhythmbox.schemas
index f925b70..7e9dc34 100644
--- a/data/rhythmbox.schemas
+++ b/data/rhythmbox.schemas
@@ -1215,5 +1215,17 @@
 	  <long>The directory to store lyrics in</long>
 	</locale>
       </schema>
-    </schemalist>
+      <schema>
+      	<key>/schemas/apps/rhythmbox/plugins/artdisplay/image_names</key>
+	<applyto>/apps/rhythmbox/plugins/artdisplay/image_names</applyto>
+	<owner>rhythmbox</owner>
+	<type>list</type>
+	<list_type>string</list_type>
+	<default>[cover,album,albumart,.folder,folder,front]</default>
+	<locale name="C">
+	  <short>The list of image file prefixes to search for</short>
+	  <long>This list represents all the prefixes to search when looking for cover art in the same folder as an album.</long>
+	</locale>
+      </schema>
+   </schemalist>
 </gconfschemafile>
diff --git a/plugins/artdisplay/artdisplay-prefs.glade b/plugins/artdisplay/artdisplay-prefs.glade
new file mode 100644
index 0000000..79ba2c9
--- /dev/null
+++ b/plugins/artdisplay/artdisplay-prefs.glade
@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+<!--*- mode: xml -*-->
+<glade-interface>
+  <widget class="GtkDialog" id="preferences_dialog">
+    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+    <property name="border_width">5</property>
+    <property name="title" translatable="yes">Art Display Preferences</property>
+    <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
+    <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+    <property name="has_separator">False</property>
+    <child internal-child="vbox">
+      <widget class="GtkVBox" id="dialog-vbox1">
+        <property name="visible">True</property>
+        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+        <property name="spacing">2</property>
+        <child>
+          <widget class="GtkNotebook" id="preferences_notebook">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+            <child>
+              <widget class="GtkHBox" id="hbox1">
+                <property name="visible">True</property>
+                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                <property name="spacing">5</property>
+                <child>
+                  <widget class="GtkVBox" id="vbox1">
+                    <property name="visible">True</property>
+                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                    <child>
+                      <widget class="GtkLabel" id="label5">
+                        <property name="visible">True</property>
+                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                        <property name="xalign">0.05000000074505806</property>
+                        <property name="label" translatable="yes">Prefixes:</property>
+                      </widget>
+                      <packing>
+                        <property name="expand">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkTreeView" id="local_prefix_list">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                        <property name="border_width">1</property>
+                        <property name="headers_visible">False</property>
+                      </widget>
+                      <packing>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                  </widget>
+                </child>
+                <child>
+                  <widget class="GtkVButtonBox" id="vbuttonbox1">
+                    <property name="visible">True</property>
+                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                    <property name="spacing">2</property>
+                    <property name="layout_style">GTK_BUTTONBOX_START</property>
+                    <child>
+                      <widget class="GtkButton" id="local_add_button">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">True</property>
+                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                        <property name="label" translatable="yes">gtk-add</property>
+                        <property name="use_stock">True</property>
+                        <property name="response_id">0</property>
+                      </widget>
+                    </child>
+                    <child>
+                      <widget class="GtkButton" id="local_remove_button">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">True</property>
+                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                        <property name="label" translatable="yes">gtk-remove</property>
+                        <property name="use_stock">True</property>
+                        <property name="response_id">0</property>
+                      </widget>
+                      <packing>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                  </widget>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+              </widget>
+            </child>
+            <child>
+              <widget class="GtkLabel" id="label4">
+                <property name="visible">True</property>
+                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                <property name="label" translatable="yes">Local Artwork</property>
+              </widget>
+              <packing>
+                <property name="type">tab</property>
+                <property name="tab_fill">False</property>
+              </packing>
+            </child>
+          </widget>
+          <packing>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child internal-child="action_area">
+          <widget class="GtkHButtonBox" id="dialog-action_area1">
+            <property name="visible">True</property>
+            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+            <property name="layout_style">GTK_BUTTONBOX_END</property>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <widget class="GtkButton" id="ok_button">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                <property name="label" translatable="yes">gtk-ok</property>
+                <property name="use_stock">True</property>
+                <property name="response_id">0</property>
+              </widget>
+              <packing>
+                <property name="position">2</property>
+              </packing>
+            </child>
+          </widget>
+          <packing>
+            <property name="expand">False</property>
+            <property name="pack_type">GTK_PACK_END</property>
+          </packing>
+        </child>
+      </widget>
+    </child>
+  </widget>
+</glade-interface>
diff --git a/plugins/artdisplay/artdisplay/ArtdisplayPreferencesDialog.py b/plugins/artdisplay/artdisplay/ArtdisplayPreferencesDialog.py
new file mode 100755
index 0000000..4efebf0
--- /dev/null
+++ b/plugins/artdisplay/artdisplay/ArtdisplayPreferencesDialog.py
@@ -0,0 +1,105 @@
+# -*- coding: utf-8 -*-
+
+# ArtdisplayPreferencesDialog.py
+#
+# Copyright (C) 2007 - Guillaume Desmottes
+#
+# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+import gobject
+import gtk, gtk.glade
+import gconf, gnome
+
+gconf_keys = { 'local_names' : '/apps/rhythmbox/plugins/artdisplay/image_names' }
+
+class ArtdisplayPreferencesDialog(object):
+	def __init__(self, glade_file):
+		self.gconf = gconf.client_get_default()
+		gladexml = gtk.glade.XML(glade_file)
+		
+		# Configure Local Search Options
+		self.dialog = gladexml.get_widget('preferences_dialog')
+		self.local_prefix_view = gladexml.get_widget('local_prefix_list')
+		self.local_prefix_model = gtk.ListStore(gobject.TYPE_STRING)
+		self.local_prefix_view.set_model(self.local_prefix_model)
+		list_selection = self.local_prefix_view.get_selection()
+		list_selection.set_mode(gtk.SELECTION_SINGLE)
+		list_renderer = gtk.CellRendererText()
+		# In-line Editing
+		list_renderer.set_property('editable', True)
+		list_renderer.connect('edited', self._local_prefix_edited_cb, self.local_prefix_model)
+		
+		list_column = gtk.TreeViewColumn("Prefix", list_renderer,text=0)
+		self.local_prefix_view.append_column(list_column)
+		self.local_prefix_view.set_search_column(0)
+		
+		# Drag and Drop Reordering
+		#self.local_prefix_view.set_reorderable(True) # Allow Drag-and-Drop reprioritizing
+		#self.local_prefix_model.connect('rows-reordered', self._local_prefixes_modified)
+		
+		#GConf Watching
+		self.gconf.add_dir('/apps/rhythmbox/plugins/artdisplay', gconf.CLIENT_PRELOAD_NONE)
+		self.gconf.notify_add(gconf_keys['local_names'], self._local_gconf_updated)
+		self._local_gconf_updated(self.gconf)
+
+		# Local Button Handling
+		add_button = gladexml.get_widget('local_add_button')
+		add_button.connect('clicked', self._local_add_prefix)
+		del_button = gladexml.get_widget('local_remove_button')
+		del_button.connect('clicked', self._local_remove_prefix)
+		# Configure General Window Options
+		self.dialog.connect("response", self.dialog_response)
+
+	def get_dialog (self):
+		return self.dialog
+
+	def dialog_response (self, dialog, response):
+		dialog.hide()
+	
+	# Add the new Entry, but don't update GConf until the entry has been edited.  
+	# Can the new entry be tagged for editing immediately?
+	def _local_add_prefix (self, button, user_data = None):
+		self.local_prefix_model.append(["NewPrefix"])
+	
+	def _local_remove_prefix (self, button, user_data = None):
+		sel = self.local_prefix_view.get_selection()
+		(model, iter) = sel.get_selected()
+		model.remove(iter)
+		self._local_update_gconf()
+		
+		
+	def _local_prefix_edited_cb(self, cell, path, new_text, user_data = None):
+		user_data[path][0] = new_text
+		self._local_update_gconf()
+		
+# _local_prefixes_modified
+# Takes any changes the use has made to the list and replicates it into GConf
+	def _local_update_gconf (self):
+		itr = self.local_prefix_model.get_iter_first()
+		if itr:
+			data = []
+			while itr:
+				data.append(self.local_prefix_model.get_value(itr,0))
+				itr = self.local_prefix_model.iter_next(itr)
+			self.gconf.set_list(gconf_keys['local_names'], gconf.VALUE_STRING, data)
+		else:
+			print "Can not reorder, list is empty."
+
+	def _local_gconf_updated (self, client, *args, **kwargs):
+		self.local_prefix_model.clear()
+		values = self.gconf.get_list(gconf_keys['local_names'], gconf.VALUE_STRING)
+		for value in values:
+			print "Appending " + value + " to liststore."
+			self.local_prefix_model.append([value])
diff --git a/plugins/artdisplay/artdisplay/LocalCoverArtSearch.py b/plugins/artdisplay/artdisplay/LocalCoverArtSearch.py
index 5858d8c..e54e3cf 100644
--- a/plugins/artdisplay/artdisplay/LocalCoverArtSearch.py
+++ b/plugins/artdisplay/artdisplay/LocalCoverArtSearch.py
@@ -21,24 +21,44 @@ import rhythmdb
 import gnomevfs
 import rb
 import gobject
+import gconf
 
-IMAGE_NAMES = ["cover", "album", "albumart", ".folder", "folder"]
+IMAGE_NAMES_DEFAULT = ["cover", "album", "albumart", ".folder", "folder", "front"]
+IMAGE_NAMES = []
 LOAD_DIRECTORY_FLAGS = gnomevfs.FILE_INFO_GET_MIME_TYPE | gnomevfs.FILE_INFO_FORCE_FAST_MIME_TYPE
 ITEMS_PER_NOTIFICATION = 10
 ART_SAVE_NAME = 'Cover.jpg'
 ART_SAVE_FORMAT = 'jpeg'
 ART_SAVE_SETTINGS = {"quality": "100"}
+GCONF_KEY = '/apps/rhythmbox/plugins/artdisplay'
 
 def file_root (f_name):
 	return os.path.splitext (f_name)[0].lower ()
 
 class LocalCoverArtSearch:
 	def __init__ (self, loader):
+                global IMAGE_NAMES
 		self.loader = loader
+                client = gconf.client_get_default()
+                client.add_dir(GCONF_KEY, gconf.CLIENT_PRELOAD_NONE)
+                client.notify_add(GCONF_KEY + '/image_names',self._image_names_change)
+                IMAGE_NAMES = client.get_list(GCONF_KEY + '/image_names', gconf.VALUE_STRING)
+                if len(IMAGE_NAMES) == 0:
+                        print GCONF_KEY + '/image_names not set, setting to default.'
+                        IMAGE_NAMES = IMAGE_NAMES_DEFAULT
+                        client.set_list(GCONF_KEY + '/image_names', gconf.VALUE_STRING, IMAGE_NAMES)
 
+        def _image_names_change(self, client, *args, **kwargs):
+                global IMAGE_NAMES
+                print 'Image Names GConf Key Updated'
+                IMAGE_NAMES = client.get_list(GCONF_KEY + '/image_names', gconf.VALUE_STRING)
+                if len(IMAGE_NAMES) == 0:
+                        IMAGE_NAMES = IMAGE_NAMES_DEFAULT
+                
 	def _load_dir_cb (self, handle, files, exception, (results, on_search_completed_cb, entry, args)):
 		for f in files:
 			if f.mime_type.startswith ("image/") and f.permissions & gnomevfs.PERM_USER_READ:
+                                print "Going to test: " + f.name
 				results.append (f.name)
 		if exception:
 			on_search_completed_cb (self, entry, results, *args)
@@ -64,11 +84,10 @@ class LocalCoverArtSearch:
 		return False
 
 	def get_best_match_urls (self, results):
-		# Compare lower case, without file extension
-		for name in [file_root (self.uri.short_name)] + IMAGE_NAMES:
-			for f_name in results:
-				if file_root (f_name) == name:
-					yield self.uri.parent.append_file_name (f_name).path
+                for result in results:
+                        for name in IMAGE_NAMES:
+                                if name == file_root(result):
+                                        yield self.uri.parent.append_file_name (result).path
 
 	def pixbuf_save (self, plexer, pixbuf, uri):
 		gnomevfs.async.create (uri, plexer.send (), gnomevfs.OPEN_WRITE | gnomevfs.OPEN_TRUNCATE, False, 0644, gnomevfs.PRIORITY_DEFAULT)
diff --git a/plugins/artdisplay/artdisplay/Makefile.am b/plugins/artdisplay/artdisplay/Makefile.am
index 7265f86..b2d37e3 100644
--- a/plugins/artdisplay/artdisplay/Makefile.am
+++ b/plugins/artdisplay/artdisplay/Makefile.am
@@ -2,6 +2,7 @@
 
 plugindir = $(PLUGINDIR)/artdisplay
 plugin_PYTHON = 			\
+	ArtdisplayPreferencesDialog.py	\
 	PodcastCoverArtSearch.py	\
 	AmazonCoverArtSearch.py		\
 	LocalCoverArtSearch.py		\
diff --git a/plugins/artdisplay/artdisplay/__init__.py b/plugins/artdisplay/artdisplay/__init__.py
index acfa986..fd4d3fa 100644
--- a/plugins/artdisplay/artdisplay/__init__.py
+++ b/plugins/artdisplay/artdisplay/__init__.py
@@ -21,7 +21,7 @@ import gtk, gobject
 from warnings import warn
 
 from CoverArtDatabase import CoverArtDatabase
-
+from ArtdisplayPreferencesDialog import ArtdisplayPreferencesDialog
 
 FADE_STEPS = 10
 FADE_TOTAL_TIME = 1000
@@ -445,3 +445,10 @@ class ArtDisplayPlugin (rb.Plugin):
 	def on_set_uri (self, widget, entry, uri):
 		db = self.shell.get_property ("db")
 		self.art_db.set_pixbuf_from_uri (db, entry, uri, self.on_get_pixbuf_completed)
+
+	def create_configure_dialog (self, dialog=None):
+		if not dialog:
+			glade_file = self.find_file("artdisplay-prefs.glade")
+			dialog = ArtdisplayPreferencesDialog (glade_file).get_dialog()
+		dialog.present()
+		return dialog
