Index: src/plugins/properties/bacon-video-widget-properties.c
===================================================================
--- src/plugins/properties/bacon-video-widget-properties.c	(revision 5959)
+++ src/plugins/properties/bacon-video-widget-properties.c	(working copy)
@@ -80,6 +80,8 @@
 struct BaconVideoWidgetPropertiesPrivate
 {
 	GtkBuilder *xml;
+	GdkPixbuf *cover;
+	int cover_width, cover_height;
 	int time;
 };
 
@@ -145,6 +147,11 @@
 	bacon_video_widget_properties_from_time (props, 0);
 	/* Comment */
 	bacon_video_widget_properties_set_label (props, "comment", "");
+	/* Cover */
+	item = GTK_WIDGET (gtk_builder_get_object (props->priv->xml, "cover_label"));
+	gtk_widget_hide (item);
+	item = GTK_WIDGET (gtk_builder_get_object (props->priv->xml, "cover_image"));
+	gtk_widget_hide (item);
 
 	/* Dimensions */
 	bacon_video_widget_properties_set_label (props, "dimensions", _("N/A"));
@@ -194,6 +201,7 @@
 	GValue value = { 0, };
 	gboolean has_type;
 	BaconVideoWidget *bvw;
+	gpointer cover;
 
 	g_return_if_fail (BACON_IS_VIDEO_WIDGET_PROPERTIES (props));
 	g_return_if_fail (BACON_IS_VIDEO_WIDGET (widget));
@@ -213,6 +221,29 @@
 			g_value_get_int (&value) * 1000);
 	g_value_unset (&value);
 
+	bacon_video_widget_get_metadata (BACON_VIDEO_WIDGET (bvw),
+			BVW_INFO_COVER, &value);
+	cover = g_value_get_object (&value);
+	props->priv->cover_width = -1;
+	props->priv->cover_height = -1;
+	if (cover != NULL) {
+		props->priv->cover = gdk_pixbuf_copy (GDK_PIXBUF (cover));
+
+		item = GTK_WIDGET (gtk_builder_get_object (props->priv->xml, "cover_label"));
+		gtk_widget_show (item);
+		item = GTK_WIDGET (gtk_builder_get_object (props->priv->xml, "cover_event_box"));
+		gtk_widget_set_size_request (item, 50, 50);
+		gtk_widget_show_all (item);
+	}
+	else {
+		props->priv->cover = NULL;
+		item = GTK_WIDGET (gtk_builder_get_object (props->priv->xml, "cover_label"));
+		gtk_widget_hide (item);
+		item = GTK_WIDGET (gtk_builder_get_object (props->priv->xml, "cover_image"));
+		gtk_widget_hide (item);
+	}
+	g_value_unset (&value);
+
 	/* Video */
 	item = GTK_WIDGET (gtk_builder_get_object (props->priv->xml, "video"));
 	bacon_video_widget_get_metadata (BACON_VIDEO_WIDGET (bvw),
@@ -277,15 +308,62 @@
 		bacon_video_widget_properties_set_label (props, "album", album);
 }
 
+static void
+on_cover_label_show (GtkWidget *widget, BaconVideoWidgetProperties *props)
+{
+	GtkWidget *item;
+	if (props->priv->cover == NULL)	{
+		gtk_widget_hide (widget);
+		item = GTK_WIDGET (gtk_builder_get_object (props->priv->xml, "cover_image"));
+		gtk_widget_hide (item);
+	}
+}
+
+static void
+on_cover_size_allocate (GtkWidget     *widget, GtkAllocation *allocation,
+			BaconVideoWidgetProperties *props)
+{
+	if (props->priv->cover != NULL && (allocation->width != props->priv->cover_width ||
+			allocation->height != props->priv->cover_height)) {
+
+		GdkPixbuf *cover_resized = gdk_pixbuf_scale_simple (GDK_PIXBUF (props->priv->cover),
+							allocation->width, allocation->height,
+							GDK_INTERP_BILINEAR);
+
+		gtk_image_set_from_pixbuf (GTK_IMAGE (gtk_builder_get_object (props->priv->xml, "cover_image")),
+				cover_resized);
+
+		g_object_unref (cover_resized);
+		props->priv->cover_height = allocation->height;
+		props->priv->cover_width = allocation->width;
+	}
+}
+
+static gboolean
+on_cover_button_press (GtkWidget      *widget, GdkEventButton *event,
+			BaconVideoWidgetProperties *props)
+{
+	GtkWidget *dialog, *content_area;
+	dialog = gtk_dialog_new_with_buttons ("Cover", NULL, GTK_DIALOG_DESTROY_WITH_PARENT,
+                                         GTK_STOCK_OK, GTK_RESPONSE_NONE, NULL);
+	content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
+	gtk_container_add (GTK_CONTAINER (content_area), gtk_image_new_from_pixbuf (props->priv->cover));
+
+	g_signal_connect_swapped (dialog, "response", G_CALLBACK (gtk_widget_destroy), dialog);
+
+	gtk_widget_show_all (dialog);
+}
+
 GtkWidget*
 bacon_video_widget_properties_new (void)
 {
 	BaconVideoWidgetProperties *props;
 	GtkBuilder *xml;
 	GtkWidget *vbox;
+	GtkWidget *item;
 	GtkSizeGroup *group;
 	const char *labels[] = { "title_label", "artist_label", "album_label",
-			"year_label", "duration_label", "comment_label",
+			"year_label", "duration_label", "comment_label", "cover_label",
 			"dimensions_label", "vcodec_label", "framerate_label",
 			"vbitrate_label", "abitrate_label", "acodec_label",
 			"samplerate_label", "channels_label" };
@@ -305,6 +383,7 @@
 			(BACON_TYPE_VIDEO_WIDGET_PROPERTIES, NULL));
 
 	props->priv->xml = xml;
+	props->priv->cover = NULL;
 	vbox = GTK_WIDGET (gtk_builder_get_object (props->priv->xml, "vbox1"));
 	gtk_box_pack_start (GTK_BOX (props), vbox, FALSE, FALSE, 0);
 
@@ -312,6 +391,13 @@
 
 	group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
 
+	item = GTK_WIDGET (gtk_builder_get_object (props->priv->xml, "cover_label"));
+	g_signal_connect (item, "show", on_cover_label_show, props);
+
+	item = GTK_WIDGET (gtk_builder_get_object (props->priv->xml, "cover_event_box"));
+	g_signal_connect (item, "size-allocate", on_cover_size_allocate, props);
+	g_signal_connect (item, "button-press-event", on_cover_button_press, props);
+
 	for (i = 0; i < G_N_ELEMENTS (labels); i++) {
 		gtk_size_group_add_widget (group,
 					   GTK_WIDGET (gtk_builder_get_object (xml, labels[i])));
Index: data/properties.ui
===================================================================
--- data/properties.ui	(revision 5959)
+++ data/properties.ui	(working copy)
@@ -438,6 +438,54 @@
 		  <property name="y_options"/>
 		</packing>
 	      </child>
+
+	      <child>
+		<object class="GtkLabel" id="cover_label">
+		  <property name="label" translatable="yes">Cover:</property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">True</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0</property>
+		  <property name="yalign">0</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		  <accessibility>
+		    <relation target="cover_image" type="label-for"/>
+		  </accessibility>
+		</object>
+		<packing>
+		  <property name="left_attach">0</property>
+		  <property name="right_attach">1</property>
+		  <property name="top_attach">5</property>
+		  <property name="bottom_attach">6</property>
+		  <property name="x_options">fill</property>
+		  <property name="y_options"/>
+		</packing>
+	      </child>
+
+	      <child>
+		<object class="GtkEventBox" id="cover_event_box">
+		  <child>
+		    <object class="GtkImage" id="cover_image">
+                      <property name="stock">gtk-none</property>
+   	 	    </object>
+		  </child>
+	 	</object>
+		<packing>
+		  <property name="left_attach">1</property>
+		  <property name="right_attach">2</property>
+		  <property name="top_attach">5</property>
+		  <property name="bottom_attach">6</property>
+		  <property name="x_options">fill</property>
+		  <property name="y_options"/>
+		</packing>
+	      </child>
 	    </object>
 	  </child>
 	</object>
