Index: bindings/python/rb.defs
===================================================================
--- bindings/python/rb.defs	(revision 4817)
+++ bindings/python/rb.defs	(working copy)
@@ -362,6 +362,26 @@
   )
 )
 
+(define-method add_widget
+  (of-object "RBShell")
+  (c-name "rb_shell_add_widget")
+  (return-type "none")
+  (parameters
+    '("GtkWidget*" "widget")
+    '("RBShellUILocation" "location")
+  )
+)
+
+(define-method remove_widget
+  (of-object "RBShell")
+  (c-name "rb_shell_remove_widget")
+  (return-type "none")
+  (parameters
+    '("GtkWidget*" "widget")
+    '("RBShellUILocation" "location")
+  )
+)
+
 ;; From ../../shell/rb-shell-player.h
 
 (define-function rb_shell_player_error_quark
@@ -609,6 +629,36 @@
   )
 )
 
+(define-enum ShellPlayerUILocation
+  (in-module "RB")
+  (c-name "RBShellPlayerUILocation")
+  (gtype-id "RB_TYPE_SHELL_PLAYER_UI_LOCATION")
+  (values
+    '("start" "RB_SHELL_UI_LOCATION_START")
+    '("end" "RB_SHELL_UI_LOCATION_END")
+  )
+)
+
+(define-method add_widget
+  (of-object "RBShellPlayer")
+  (c-name "rb_shell_player_add_widget")
+  (return-type "none")
+  (parameters
+    '("GtkWidget*" "widget")
+    '("RBShellPlayerUILocation" "location")
+  )
+)
+
+(define-method remove_widget
+  (of-object "RBShellPlayer")
+  (c-name "rb_shell_player_remove_widget")
+  (return-type "none")
+  (parameters
+    '("GtkWidget*" "widget")
+    '("RBShellPlayerUILocation" "location")
+  )
+)
+
 ;; From ../../sources/rb-source.h
 
 (define-function rb_source_get_type
@@ -1110,26 +1160,6 @@
   )
 )
 
-(define-method add_widget
-  (of-object "RBShell")
-  (c-name "rb_shell_add_widget")
-  (return-type "none")
-  (parameters
-    '("GtkWidget*" "widget")
-    '("RBShellUILocation" "location")
-  )
-)
-
-(define-method remove_widget
-  (of-object "RBShell")
-  (c-name "rb_shell_remove_widget")
-  (return-type "none")
-  (parameters
-    '("GtkWidget*" "widget")
-    '("RBShellUILocation" "location")
-  )
-)
-
 (define-method set_playing_source
   (of-object "RBSourceList")
   (c-name "rb_sourcelist_set_playing_source")
Index: shell/rb-shell.c
===================================================================
--- shell/rb-shell.c	(revision 4817)
+++ shell/rb-shell.c	(working copy)
@@ -3521,7 +3521,7 @@ rb_shell_druid_response_cb (GtkDialog *d
 	gtk_widget_destroy (GTK_WIDGET (druid));
 }
 
-static GtkBox*
+static GtkBox *
 rb_shell_get_box_for_ui_location (RBShell *shell, RBShellUILocation location)
 {
 	GtkBox *box = NULL;
Index: shell/rb-shell-player.c
===================================================================
--- shell/rb-shell-player.c	(revision 4817)
+++ shell/rb-shell-player.c	(working copy)
@@ -184,6 +184,8 @@ struct RBShellPlayerPrivate
 
 	RBHeader *header_widget;
 	RBStatusbar *statusbar_widget;
+	GtkWidget *box_start;
+	GtkWidget *box_end;
 
 	guint gconf_play_order_id;
 	guint gconf_song_position_slider_visibility_id;
@@ -465,6 +467,13 @@ rb_shell_player_constructor (GType type,
 	player = RB_SHELL_PLAYER (G_OBJECT_CLASS (rb_shell_player_parent_class)->
 			constructor (type, n_construct_properties, construct_properties));
 
+	player->priv->box_start = gtk_hbox_new (FALSE, 6);
+	player->priv->box_end = gtk_hbox_new (FALSE, 6);
+	gtk_box_pack_start (GTK_BOX (player), player->priv->box_start, FALSE, FALSE, 0);
+	gtk_box_pack_end (GTK_BOX (player), player->priv->box_end, FALSE, FALSE, 0);
+	gtk_widget_show (player->priv->box_start);
+	gtk_widget_show (player->priv->box_end);
+
 	player->priv->header_widget = rb_header_new (player, player->priv->db);
 	gtk_widget_show (GTK_WIDGET (player->priv->header_widget));
 	gtk_box_pack_start (GTK_BOX (player), GTK_WIDGET (player->priv->header_widget), TRUE, TRUE, 0);
@@ -2934,3 +2943,74 @@ rb_shell_player_error_get_type (void)
 
 	return etype;
 }
+
+GType
+rb_shell_player_ui_location_get_type (void)
+{
+	static GType etype = 0;
+
+	if (etype == 0)	{
+		static const GEnumValue values[] = {
+			ENUM_ENTRY (RB_SHELL_PLAYER_UI_LOCATION_START, "Start"),
+			ENUM_ENTRY (RB_SHELL_PLAYER_UI_LOCATION_END, "End"),
+			{ 0, 0, 0 }
+		};
+
+		etype = g_enum_register_static ("RBShellPlayerUILocation", values);
+	}
+
+	return etype;
+}
+
+static GtkBox *
+rb_shell_player_get_box_for_ui_location (RBShellPlayer          *shell_player,
+					 RBShellPlayerUILocation location)
+{
+	GtkBox *box = NULL;
+
+	switch (location) {
+	case RB_SHELL_PLAYER_UI_LOCATION_START:
+		box = GTK_BOX (shell_player->priv->box_start);
+		break;
+	case RB_SHELL_PLAYER_UI_LOCATION_END:
+		box = GTK_BOX (shell_player->priv->box_end);
+		break;
+	default:
+		g_assert_not_reached ();
+		break;
+	}
+
+	return box;
+}
+
+void
+rb_shell_player_add_widget (RBShellPlayer          *shell_player,
+			    GtkWidget              *widget,
+			    RBShellPlayerUILocation location)
+{
+	GtkBox *box;
+
+	g_return_if_fail (RB_IS_SHELL_PLAYER (shell_player));
+	g_return_if_fail (widget != NULL);
+
+	box = rb_shell_player_get_box_for_ui_location (shell_player, location);
+	if (box != NULL) {
+		gtk_box_pack_start (box, widget, FALSE, TRUE, 0);
+	}
+}
+
+void
+rb_shell_player_remove_widget (RBShellPlayer          *shell_player,
+			       GtkWidget              *widget,
+			       RBShellPlayerUILocation location)
+{
+	GtkBox *box;
+
+	g_return_if_fail (RB_IS_SHELL_PLAYER (shell_player));
+	g_return_if_fail (widget != NULL);
+
+	box = rb_shell_player_get_box_for_ui_location (shell_player, location);
+	if (box != NULL) {
+		gtk_container_remove (GTK_CONTAINER (box), widget);
+	}
+}
Index: shell/rb-shell-player.h
===================================================================
--- shell/rb-shell-player.h	(revision 4817)
+++ shell/rb-shell-player.h	(working copy)
@@ -41,6 +41,15 @@ G_BEGIN_DECLS
 
 typedef enum
 {
+	RB_SHELL_PLAYER_UI_LOCATION_START,
+	RB_SHELL_PLAYER_UI_LOCATION_END
+} RBShellPlayerUILocation;
+
+GType rb_shell_player_ui_location_get_type (void);
+#define RB_TYPE_SHELL_PLAYER_UI_LOCATION (rb_shell_player_ui_location_get_type ())
+
+typedef enum
+{
 	RB_SHELL_PLAYER_ERROR_PLAYLIST_PARSE_ERROR,
 	RB_SHELL_PLAYER_ERROR_END_OF_PLAYLIST,
 	RB_SHELL_PLAYER_ERROR_NOT_PLAYING,
@@ -155,6 +164,14 @@ gboolean		rb_shell_player_get_mute	(RBSh
 							 gboolean *mute,
 							 GError **error);
 
+void 		        rb_shell_player_add_widget      (RBShellPlayer *player,
+                                                         GtkWidget *widget,
+                                                         RBShellPlayerUILocation location);
+void 		        rb_shell_player_remove_widget   (RBShellPlayer *player,
+                                                         GtkWidget *widget,
+                                                         RBShellPlayerUILocation location);
+
+
 G_END_DECLS
 
 #endif /* __RB_SHELL_PLAYER_H */
Index: plugins/artdisplay/artdisplay/__init__.py
===================================================================
--- plugins/artdisplay/artdisplay/__init__.py	(revision 4817)
+++ plugins/artdisplay/artdisplay/__init__.py	(working copy)
@@ -152,7 +152,7 @@ class FadingImage (gtk.Misc):
 		return False
 
 	def size_request (self, widget, requisition):
-		requisition.width, requisition.height = -1, self.size
+		requisition.width, requisition.height = self.size, self.size
 
 	def expose (self, widget, event):
 		if not self.ensure_merged_pixbuf ():
@@ -261,7 +261,7 @@ class ArtDisplayPlugin (rb.Plugin):
 		self.eemn_art_id = db.connect_after ('entry-extra-metadata-notify::rb:coverArt', self.cover_art_notify)
 		self.eemn_art_uri_id = db.connect_after ('entry-extra-metadata-notify::rb:coverArt-uri', self.cover_art_uri_notify)
 		self.art_widget = ArtDisplayWidget (self.find_file (ART_MISSING_ICON + ".svg"))
-		shell.add_widget (self.art_widget, rb.SHELL_UI_LOCATION_SIDEBAR)
+		sp.add_widget (self.art_widget, rb.SHELL_PLAYER_UI_LOCATION_START)
 		self.art_db = CoverArtDatabase ()
 		self.current_entry, self.current_pixbuf = None, None
 		self.playing_entry_changed (sp, sp.get_playing_entry ())
@@ -275,7 +275,7 @@ class ArtDisplayPlugin (rb.Plugin):
 		db.disconnect (self.eemr_art_id)
 		db.disconnect (self.eemn_art_id)
 		db.disconnect (self.eemn_art_uri_id)
-		shell.remove_widget (self.art_widget, rb.SHELL_UI_LOCATION_SIDEBAR)
+		sp.remove_widget (self.art_widget, rb.SHELL_PLAYER_UI_LOCATION_START)
 		self.art_widget.disconnect_handlers ()
 		self.art_widget = None
 		self.art_db = None
Index: widgets/rb-header.c
===================================================================
--- widgets/rb-header.c	(revision 4817)
+++ widgets/rb-header.c	(working copy)
@@ -96,7 +96,7 @@ enum
 	PROP_SEEKABLE,
 };
 
-#define TITLE_MARKUP(xTITLE) g_markup_printf_escaped ("<big><b>%s</b></big>", xTITLE)
+#define TITLE_MARKUP(xTITLE) g_markup_printf_escaped ("<big><b>%s</b></big>\n", xTITLE)
 #define ALBUM_MARKUP(xALBUM) g_markup_printf_escaped (" %s <i>%s</i>", _("from"), xALBUM)
 #define ARTIST_MARKUP(xARTIST) g_markup_printf_escaped (" %s <i>%s</i>", _("by"), xARTIST)
 #define STREAM_MARKUP(xSTREAM) g_markup_printf_escaped (" (%s)", xSTREAM)
@@ -179,7 +179,7 @@ rb_header_init (RBHeader *header)
  	gtk_label_set_use_markup (GTK_LABEL (header->priv->song), TRUE);
  	gtk_label_set_selectable (GTK_LABEL (header->priv->song), TRUE);
 	gtk_label_set_ellipsize (GTK_LABEL (header->priv->song), PANGO_ELLIPSIZE_END);
-	gtk_misc_set_alignment (GTK_MISC (header->priv->song), 0.0, 0.0);
+	gtk_misc_set_alignment (GTK_MISC (header->priv->song), 0.0, 0.5);
 	gtk_box_pack_start (GTK_BOX (hbox), header->priv->song, TRUE, TRUE, 0);
 	gtk_widget_show (header->priv->song);
 
