Index: data/glade/general-prefs.glade
===================================================================
RCS file: /cvs/gnome/rhythmbox/data/glade/general-prefs.glade,v
retrieving revision 1.11
diff -u -b -u -p -r1.11 general-prefs.glade
--- data/glade/general-prefs.glade	5 Nov 2005 05:03:17 -0000	1.11
+++ data/glade/general-prefs.glade	15 Nov 2005 00:44:04 -0000
@@ -135,7 +135,7 @@
 			  <child>
 			    <widget class="GtkTable" id="table1">
 			      <property name="visible">True</property>
-			      <property name="n_rows">5</property>
+			      <property name="n_rows">6</property>
 			      <property name="n_columns">2</property>
 			      <property name="homogeneous">True</property>
 			      <property name="row_spacing">6</property>
@@ -294,6 +294,52 @@
 				  <property name="right_attach">1</property>
 				  <property name="top_attach">4</property>
 				  <property name="bottom_attach">5</property>
+				  <property name="x_options">fill</property>
+				  <property name="y_options"></property>
+				</packing>
+			      </child>
+
+			      <child>
+				<widget class="GtkCheckButton" id="quality_check">
+				  <property name="visible">True</property>
+				  <property name="can_focus">True</property>
+				  <property name="label" translatable="yes">_Quality</property>
+				  <property name="use_underline">True</property>
+				  <property name="relief">GTK_RELIEF_NORMAL</property>
+				  <property name="focus_on_click">True</property>
+				  <property name="active">False</property>
+				  <property name="inconsistent">False</property>
+				  <property name="draw_indicator">True</property>
+				  <signal name="toggled" handler="rb_shell_preferences_column_check_changed_cb" last_modification_time="Fri, 02 May 2003 04:26:32 GMT"/>
+				</widget>
+				<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"></property>
+				</packing>
+			      </child>
+
+			      <child>
+				<widget class="GtkCheckButton" id="mime_type_check">
+				  <property name="visible">True</property>
+				  <property name="can_focus">True</property>
+				  <property name="label" translatable="yes">T_ype</property>
+				  <property name="use_underline">True</property>
+				  <property name="relief">GTK_RELIEF_NORMAL</property>
+				  <property name="focus_on_click">True</property>
+				  <property name="active">False</property>
+				  <property name="inconsistent">False</property>
+				  <property name="draw_indicator">True</property>
+				  <signal name="toggled" handler="rb_shell_preferences_column_check_changed_cb" last_modification_time="Fri, 02 May 2003 04:26:32 GMT"/>
+				</widget>
+				<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"></property>
 				</packing>
Index: data/glade/song-info.glade
===================================================================
RCS file: /cvs/gnome/rhythmbox/data/glade/song-info.glade,v
retrieving revision 1.35
diff -u -b -u -p -r1.35 song-info.glade
--- data/glade/song-info.glade	5 Nov 2005 05:03:17 -0000	1.35
+++ data/glade/song-info.glade	15 Nov 2005 00:44:04 -0000
@@ -460,7 +460,7 @@
 	<widget class="GtkTable" id="song_info_additional">
 	  <property name="border_width">12</property>
 	  <property name="visible">True</property>
-	  <property name="n_rows">10</property>
+	  <property name="n_rows">11</property>
 	  <property name="n_columns">2</property>
 	  <property name="homogeneous">False</property>
 	  <property name="row_spacing">6</property>
@@ -637,9 +637,58 @@
 	  </child>
 
 	  <child>
-	    <widget class="GtkLabel" id="location_label">
+	    <widget class="GtkEntry" id="song_info_name">
 	      <property name="visible">True</property>
-	      <property name="label" translatable="yes">Location:</property>
+	      <property name="can_focus">True</property>
+	      <property name="editable">False</property>
+	      <property name="visibility">True</property>
+	      <property name="max_length">0</property>
+	      <property name="text" translatable="yes"></property>
+	      <property name="has_frame">True</property>
+	      <property name="invisible_char">*</property>
+	      <property name="activates_default">False</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">1</property>
+	      <property name="right_attach">2</property>
+	      <property name="top_attach">0</property>
+	      <property name="bottom_attach">1</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="rating_label">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">_Rating:</property>
+	      <property name="use_underline">True</property>
+	      <property name="use_markup">False</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>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">0</property>
+	      <property name="right_attach">1</property>
+	      <property name="top_attach">10</property>
+	      <property name="bottom_attach">11</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label119">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes"></property>
 	      <property name="use_underline">False</property>
 	      <property name="use_markup">False</property>
 	      <property name="justify">GTK_JUSTIFY_LEFT</property>
@@ -649,21 +698,25 @@
 	      <property name="yalign">0.5</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>
 	    </widget>
 	    <packing>
 	      <property name="left_attach">0</property>
 	      <property name="right_attach">1</property>
-	      <property name="top_attach">4</property>
-	      <property name="bottom_attach">5</property>
+	      <property name="top_attach">9</property>
+	      <property name="bottom_attach">10</property>
 	      <property name="x_options">fill</property>
 	      <property name="y_options"></property>
 	    </packing>
 	  </child>
 
 	  <child>
-	    <widget class="GtkLabel" id="label117">
+	    <widget class="GtkLabel" id="play_count_label">
 	      <property name="visible">True</property>
-	      <property name="label" translatable="yes"></property>
+	      <property name="label" translatable="yes">Play count:</property>
 	      <property name="use_underline">False</property>
 	      <property name="use_markup">False</property>
 	      <property name="justify">GTK_JUSTIFY_LEFT</property>
@@ -673,12 +726,16 @@
 	      <property name="yalign">0.5</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>
 	    </widget>
 	    <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="top_attach">8</property>
+	      <property name="bottom_attach">9</property>
 	      <property name="x_options">fill</property>
 	      <property name="y_options"></property>
 	    </packing>
@@ -697,35 +754,42 @@
 	      <property name="yalign">0.5</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>
 	    </widget>
 	    <packing>
 	      <property name="left_attach">0</property>
 	      <property name="right_attach">1</property>
-	      <property name="top_attach">6</property>
-	      <property name="bottom_attach">7</property>
+	      <property name="top_attach">7</property>
+	      <property name="bottom_attach">8</property>
 	      <property name="x_options">fill</property>
 	      <property name="y_options"></property>
 	    </packing>
 	  </child>
 
 	  <child>
-	    <widget class="GtkLabel" id="song_info_lastplayed">
+	    <widget class="GtkLabel" id="label117">
 	      <property name="visible">True</property>
-	      <property name="can_focus">True</property>
 	      <property name="label" translatable="yes"></property>
 	      <property name="use_underline">False</property>
 	      <property name="use_markup">False</property>
 	      <property name="justify">GTK_JUSTIFY_LEFT</property>
 	      <property name="wrap">False</property>
-	      <property name="selectable">True</property>
+	      <property name="selectable">False</property>
 	      <property name="xalign">0</property>
 	      <property name="yalign">0.5</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>
 	    </widget>
 	    <packing>
-	      <property name="left_attach">1</property>
-	      <property name="right_attach">2</property>
+	      <property name="left_attach">0</property>
+	      <property name="right_attach">1</property>
 	      <property name="top_attach">6</property>
 	      <property name="bottom_attach">7</property>
 	      <property name="x_options">fill</property>
@@ -734,9 +798,9 @@
 	  </child>
 
 	  <child>
-	    <widget class="GtkLabel" id="play_count_label">
+	    <widget class="GtkLabel" id="location_label">
 	      <property name="visible">True</property>
-	      <property name="label" translatable="yes">Play count:</property>
+	      <property name="label" translatable="yes">Location:</property>
 	      <property name="use_underline">False</property>
 	      <property name="use_markup">False</property>
 	      <property name="justify">GTK_JUSTIFY_LEFT</property>
@@ -746,44 +810,51 @@
 	      <property name="yalign">0.5</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>
 	    </widget>
 	    <packing>
 	      <property name="left_attach">0</property>
 	      <property name="right_attach">1</property>
-	      <property name="top_attach">7</property>
-	      <property name="bottom_attach">8</property>
+	      <property name="top_attach">5</property>
+	      <property name="bottom_attach">6</property>
 	      <property name="x_options">fill</property>
 	      <property name="y_options"></property>
 	    </packing>
 	  </child>
 
 	  <child>
-	    <widget class="GtkLabel" id="song_info_playcount">
+	    <widget class="GtkLabel" id="type_label">
 	      <property name="visible">True</property>
-	      <property name="can_focus">True</property>
-	      <property name="label" translatable="yes"></property>
+	      <property name="label" translatable="yes">Type:</property>
 	      <property name="use_underline">False</property>
 	      <property name="use_markup">False</property>
 	      <property name="justify">GTK_JUSTIFY_LEFT</property>
 	      <property name="wrap">False</property>
-	      <property name="selectable">True</property>
+	      <property name="selectable">False</property>
 	      <property name="xalign">0</property>
 	      <property name="yalign">0.5</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>
 	    </widget>
 	    <packing>
-	      <property name="left_attach">1</property>
-	      <property name="right_attach">2</property>
-	      <property name="top_attach">7</property>
-	      <property name="bottom_attach">8</property>
+	      <property name="left_attach">0</property>
+	      <property name="right_attach">1</property>
+	      <property name="top_attach">4</property>
+	      <property name="bottom_attach">5</property>
 	      <property name="x_options">fill</property>
 	      <property name="y_options"></property>
 	    </packing>
 	  </child>
 
 	  <child>
-	    <widget class="GtkLabel" id="label119">
+	    <widget class="GtkLabel" id="label120">
 	      <property name="visible">True</property>
 	      <property name="label" translatable="yes"></property>
 	      <property name="use_underline">False</property>
@@ -795,30 +866,39 @@
 	      <property name="yalign">0.5</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>
 	    </widget>
 	    <packing>
-	      <property name="left_attach">0</property>
-	      <property name="right_attach">1</property>
-	      <property name="top_attach">8</property>
-	      <property name="bottom_attach">9</property>
+	      <property name="left_attach">1</property>
+	      <property name="right_attach">2</property>
+	      <property name="top_attach">9</property>
+	      <property name="bottom_attach">10</property>
 	      <property name="x_options">fill</property>
 	      <property name="y_options"></property>
 	    </packing>
 	  </child>
 
 	  <child>
-	    <widget class="GtkLabel" id="label120">
+	    <widget class="GtkLabel" id="song_info_playcount">
 	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
 	      <property name="label" translatable="yes"></property>
 	      <property name="use_underline">False</property>
 	      <property name="use_markup">False</property>
 	      <property name="justify">GTK_JUSTIFY_LEFT</property>
 	      <property name="wrap">False</property>
-	      <property name="selectable">False</property>
+	      <property name="selectable">True</property>
 	      <property name="xalign">0</property>
 	      <property name="yalign">0.5</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>
 	    </widget>
 	    <packing>
 	      <property name="left_attach">1</property>
@@ -831,28 +911,36 @@
 	  </child>
 
 	  <child>
-	    <widget class="GtkEntry" id="song_info_location">
+	    <widget class="GtkLabel" id="song_info_lastplayed">
 	      <property name="visible">True</property>
 	      <property name="can_focus">True</property>
-	      <property name="editable">False</property>
-	      <property name="visibility">True</property>
-	      <property name="max_length">0</property>
-	      <property name="text" translatable="yes"></property>
-	      <property name="has_frame">True</property>
-	      <property name="invisible_char">*</property>
-	      <property name="activates_default">False</property>
+	      <property name="label" translatable="yes"></property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">True</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</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>
 	    </widget>
 	    <packing>
 	      <property name="left_attach">1</property>
 	      <property name="right_attach">2</property>
-	      <property name="top_attach">4</property>
-	      <property name="bottom_attach">5</property>
+	      <property name="top_attach">7</property>
+	      <property name="bottom_attach">8</property>
+	      <property name="x_options">fill</property>
 	      <property name="y_options"></property>
 	    </packing>
 	  </child>
 
 	  <child>
-	    <widget class="GtkEntry" id="song_info_name">
+	    <widget class="GtkEntry" id="song_info_location">
 	      <property name="visible">True</property>
 	      <property name="can_focus">True</property>
 	      <property name="editable">False</property>
@@ -866,31 +954,36 @@
 	    <packing>
 	      <property name="left_attach">1</property>
 	      <property name="right_attach">2</property>
-	      <property name="top_attach">0</property>
-	      <property name="bottom_attach">1</property>
+	      <property name="top_attach">5</property>
+	      <property name="bottom_attach">6</property>
 	      <property name="y_options"></property>
 	    </packing>
 	  </child>
 
 	  <child>
-	    <widget class="GtkLabel" id="rating_label">
+	    <widget class="GtkLabel" id="song_info_type">
 	      <property name="visible">True</property>
-	      <property name="label" translatable="yes">_Rating:</property>
-	      <property name="use_underline">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label" translatable="yes"></property>
+	      <property name="use_underline">False</property>
 	      <property name="use_markup">False</property>
 	      <property name="justify">GTK_JUSTIFY_LEFT</property>
 	      <property name="wrap">False</property>
-	      <property name="selectable">False</property>
+	      <property name="selectable">True</property>
 	      <property name="xalign">0</property>
-	      <property name="yalign">0</property>
+	      <property name="yalign">0.5</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>
 	    </widget>
 	    <packing>
-	      <property name="left_attach">0</property>
-	      <property name="right_attach">1</property>
-	      <property name="top_attach">9</property>
-	      <property name="bottom_attach">10</property>
+	      <property name="left_attach">1</property>
+	      <property name="right_attach">2</property>
+	      <property name="top_attach">4</property>
+	      <property name="bottom_attach">5</property>
 	      <property name="x_options">fill</property>
 	      <property name="y_options"></property>
 	    </packing>
@@ -909,8 +1002,8 @@
 	    <packing>
 	      <property name="left_attach">1</property>
 	      <property name="right_attach">2</property>
-	      <property name="top_attach">9</property>
-	      <property name="bottom_attach">10</property>
+	      <property name="top_attach">10</property>
+	      <property name="bottom_attach">11</property>
 	      <property name="x_options">fill</property>
 	      <property name="y_options">fill</property>
 	    </packing>
Index: shell/rb-shell-preferences.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/shell/rb-shell-preferences.c,v
retrieving revision 1.48
diff -u -b -u -p -r1.48 rb-shell-preferences.c
--- shell/rb-shell-preferences.c	5 Nov 2005 05:03:18 -0000	1.48
+++ shell/rb-shell-preferences.c	15 Nov 2005 00:44:05 -0000
@@ -93,47 +93,18 @@ struct RBShellPreferencesPrivate
 	GtkWidget *first_seen_check;
 	GtkWidget *quality_check;
 	GtkWidget *year_check;
+	GtkWidget *mime_type_check;
 
 	gboolean loading;
 };
 
-static GObjectClass *parent_class = NULL;
-
-GType
-rb_shell_preferences_get_type (void)
-{
-	static GType rb_shell_preferences_type = 0;
-
-	if (rb_shell_preferences_type == 0)
-	{
-		static const GTypeInfo our_info =
-		{
-			sizeof (RBShellPreferencesClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) rb_shell_preferences_class_init,
-			NULL,
-			NULL,
-			sizeof (RBShellPreferences),
-			0,
-			(GInstanceInitFunc) rb_shell_preferences_init
-		};
-
-		rb_shell_preferences_type = g_type_register_static (GTK_TYPE_DIALOG,
-							            "RBShellPreferences",
-							            &our_info, 0);
-	}
-
-	return rb_shell_preferences_type;
-}
+G_DEFINE_TYPE (RBShellPreferences, rb_shell_preferences, GTK_TYPE_DIALOG)
 
 static void
 rb_shell_preferences_class_init (RBShellPreferencesClass *klass)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-	parent_class = g_type_class_peek_parent (klass);
-
 	object_class->finalize = rb_shell_preferences_finalize;
 }
 
@@ -234,6 +205,8 @@ rb_shell_preferences_init (RBShellPrefer
 		glade_xml_get_widget (xml, "year_check");
 	shell_preferences->priv->first_seen_check =
 		glade_xml_get_widget (xml, "first_seen_check");
+	shell_preferences->priv->mime_type_check =
+		glade_xml_get_widget (xml, "mime_type_check");
 
 	gtk_notebook_append_page (GTK_NOTEBOOK (shell_preferences->priv->notebook),
 				  glade_xml_get_widget (xml, "general_vbox"),
@@ -262,7 +235,7 @@ rb_shell_preferences_finalize (GObject *
 
 	g_free (shell_preferences->priv);
 
-	G_OBJECT_CLASS (parent_class)->finalize (object);
+	G_OBJECT_CLASS (rb_shell_preferences_parent_class)->finalize (object);
 }
 
 static void
@@ -486,9 +459,10 @@ rb_shell_preferences_column_check_change
 		colname = "RHYTHMDB_PROP_LAST_PLAYED";
 	else if (butt == GTK_CHECK_BUTTON (shell_preferences->priv->year_check))
 		colname = "RHYTHMDB_PROP_DATE";
-	else if (shell_preferences->priv->quality_check
-		 && butt == GTK_CHECK_BUTTON (shell_preferences->priv->quality_check))
+	else if (butt == GTK_CHECK_BUTTON (shell_preferences->priv->quality_check))
 		colname = "RHYTHMDB_PROP_BITRATE";
+	else if (butt == GTK_CHECK_BUTTON (shell_preferences->priv->mime_type_check))
+		colname = "RHYTHMDB_PROP_MIMETYPE";
 	else if (butt == GTK_CHECK_BUTTON (shell_preferences->priv->first_seen_check))
 		colname = "RHYTHMDB_PROP_FIRST_SEEN";
 	else
@@ -554,10 +528,12 @@ rb_shell_preferences_sync (RBShellPrefer
 		gtk_toggle_button_set_active
 			(GTK_TOGGLE_BUTTON (shell_preferences->priv->year_check),
 			 strstr (columns, "RHYTHMDB_PROP_DATE") != NULL);
-		if (shell_preferences->priv->quality_check)
 			gtk_toggle_button_set_active
 				(GTK_TOGGLE_BUTTON (shell_preferences->priv->quality_check),
 				 strstr (columns, "RHYTHMDB_PROP_BITRATE") != NULL);
+		gtk_toggle_button_set_active
+			(GTK_TOGGLE_BUTTON (shell_preferences->priv->mime_type_check),
+			 strstr (columns, "RHYTHMDB_PROP_MIMETYPE") != NULL);
 		gtk_toggle_button_set_active
 			(GTK_TOGGLE_BUTTON (shell_preferences->priv->first_seen_check),
 			 strstr (columns, "RHYTHMDB_PROP_FIRST_SEEN") != NULL);
Index: sources/rb-iradio-source.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/sources/rb-iradio-source.c,v
retrieving revision 1.92
diff -u -b -u -p -r1.92 rb-iradio-source.c
--- sources/rb-iradio-source.c	14 Nov 2005 07:06:31 -0000	1.92
+++ sources/rb-iradio-source.c	15 Nov 2005 00:44:06 -0000
@@ -317,10 +317,11 @@ rb_iradio_source_constructor (GType type
 						    FALSE, FALSE);
 	rb_entry_view_append_column (source->priv->stations, RB_ENTRY_VIEW_COL_TITLE);
 	rb_entry_view_append_column (source->priv->stations, RB_ENTRY_VIEW_COL_GENRE);
-/* 	rb_entry_view_append_column (source->priv->stations, RB_ENTRY_VIEW_COL_QUALITY); */
+ 	rb_entry_view_append_column (source->priv->stations, RB_ENTRY_VIEW_COL_QUALITY);
 	rb_entry_view_append_column (source->priv->stations, RB_ENTRY_VIEW_COL_RATING);
 /*	rb_entry_view_append_column (source->priv->stations, RB_ENTRY_VIEW_COL_PLAY_COUNT);*/
 	rb_entry_view_append_column (source->priv->stations, RB_ENTRY_VIEW_COL_LAST_PLAYED);
+	rb_entry_view_append_column (source->priv->stations, RB_ENTRY_VIEW_COL_MIMETYPE);
 	g_signal_connect_object (G_OBJECT (source->priv->stations),
 				 "sort-order-changed",
 				 G_CALLBACK (rb_iradio_source_songs_view_sort_order_changed_cb),
Index: sources/rb-library-source.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/sources/rb-library-source.c,v
retrieving revision 1.124
diff -u -b -u -p -r1.124 rb-library-source.c
--- sources/rb-library-source.c	14 Nov 2005 07:06:31 -0000	1.124
+++ sources/rb-library-source.c	15 Nov 2005 00:44:08 -0000
@@ -542,11 +542,12 @@ rb_library_source_constructor (GType typ
 	rb_entry_view_append_column (source->priv->songs, RB_ENTRY_VIEW_COL_ALBUM);
 	rb_entry_view_append_column (source->priv->songs, RB_ENTRY_VIEW_COL_YEAR);
 	rb_entry_view_append_column (source->priv->songs, RB_ENTRY_VIEW_COL_DURATION);
-/* 	rb_entry_view_append_column (source->priv->songs, RB_ENTRY_VIEW_COL_QUALITY); */
+ 	rb_entry_view_append_column (source->priv->songs, RB_ENTRY_VIEW_COL_QUALITY);
 	rb_entry_view_append_column (source->priv->songs, RB_ENTRY_VIEW_COL_RATING);
 	rb_entry_view_append_column (source->priv->songs, RB_ENTRY_VIEW_COL_PLAY_COUNT);
 	rb_entry_view_append_column (source->priv->songs, RB_ENTRY_VIEW_COL_LAST_PLAYED);
 	rb_entry_view_append_column (source->priv->songs, RB_ENTRY_VIEW_COL_FIRST_SEEN);
+	rb_entry_view_append_column (source->priv->songs, RB_ENTRY_VIEW_COL_MIMETYPE);
 
 	g_signal_connect_object (G_OBJECT (source->priv->songs), "show_popup",
 				 G_CALLBACK (rb_library_source_songs_show_popup_cb), source, 0);
Index: sources/rb-playlist-source.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/sources/rb-playlist-source.c,v
retrieving revision 1.82
diff -u -b -u -p -r1.82 rb-playlist-source.c
--- sources/rb-playlist-source.c	10 Nov 2005 13:09:15 -0000	1.82
+++ sources/rb-playlist-source.c	15 Nov 2005 00:44:09 -0000
@@ -336,10 +336,12 @@ rb_playlist_source_constructor (GType ty
 	rb_entry_view_append_column (source->priv->songs, RB_ENTRY_VIEW_COL_ALBUM);
 	rb_entry_view_append_column (source->priv->songs, RB_ENTRY_VIEW_COL_YEAR);
 	rb_entry_view_append_column (source->priv->songs, RB_ENTRY_VIEW_COL_DURATION);
+ 	rb_entry_view_append_column (source->priv->songs, RB_ENTRY_VIEW_COL_QUALITY);
 	rb_entry_view_append_column (source->priv->songs, RB_ENTRY_VIEW_COL_RATING);
 	rb_entry_view_append_column (source->priv->songs, RB_ENTRY_VIEW_COL_PLAY_COUNT);
 	rb_entry_view_append_column (source->priv->songs, RB_ENTRY_VIEW_COL_LAST_PLAYED);
 	rb_entry_view_append_column (source->priv->songs, RB_ENTRY_VIEW_COL_FIRST_SEEN);
+	rb_entry_view_append_column (source->priv->songs, RB_ENTRY_VIEW_COL_MIMETYPE);
 
 	g_signal_connect_object (G_OBJECT (source->priv->songs), "show_popup",
 				 G_CALLBACK (rb_playlist_source_songs_show_popup_cb), source, 0);
Index: sources/rb-podcast-source.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/sources/rb-podcast-source.c,v
retrieving revision 1.17
diff -u -b -u -p -r1.17 rb-podcast-source.c
--- sources/rb-podcast-source.c	14 Nov 2005 14:19:30 -0000	1.17
+++ sources/rb-podcast-source.c	15 Nov 2005 00:44:09 -0000
@@ -534,9 +534,11 @@ rb_podcast_source_constructor (GType typ
 
 	
 	rb_entry_view_append_column (source->priv->posts, RB_ENTRY_VIEW_COL_DURATION);
+ 	rb_entry_view_append_column (source->priv->posts, RB_ENTRY_VIEW_COL_QUALITY);
 	rb_entry_view_append_column (source->priv->posts, RB_ENTRY_VIEW_COL_RATING);
 	rb_entry_view_append_column (source->priv->posts, RB_ENTRY_VIEW_COL_PLAY_COUNT);
 	rb_entry_view_append_column (source->priv->posts, RB_ENTRY_VIEW_COL_LAST_PLAYED);
+	rb_entry_view_append_column (source->priv->posts, RB_ENTRY_VIEW_COL_MIMETYPE);
 
 
 	column = gtk_tree_view_column_new ();
Index: widgets/rb-entry-view.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/widgets/rb-entry-view.c,v
retrieving revision 1.108
diff -u -b -u -p -r1.108 rb-entry-view.c
--- widgets/rb-entry-view.c	14 Nov 2005 07:06:32 -0000	1.108
+++ widgets/rb-entry-view.c	15 Nov 2005 00:44:10 -0000
@@ -24,6 +24,7 @@
 #include <config.h>
 #include <libgnome/gnome-i18n.h>
 #include <libgnomevfs/gnome-vfs-utils.h>
+#include <libgnomevfs/gnome-vfs-mime-handlers.h>
 #include <string.h>
 #include <stdlib.h>
 #include <math.h>
@@ -789,14 +790,11 @@ rb_entry_view_album_sort_func (RhythmDBE
 	a_val = rhythmdb_entry_get_string (a, RHYTHMDB_PROP_TITLE_SORT_KEY);
 	b_val = rhythmdb_entry_get_string (b, RHYTHMDB_PROP_TITLE_SORT_KEY);
 
-	if (a_val == NULL) {
+	if (a_val == NULL)
+		a_val = _("Unknown");
 		if (b_val == NULL)
-			return 0;
-		else
-			return -1;
-	} else if (b_val == NULL)
-		return 1;
-	else
+		b_val = _("Unknown");
+	
 		return strcmp (a_val, b_val);
 }
 
@@ -811,16 +809,12 @@ rb_entry_view_artist_sort_func (RhythmDB
 	a_val = rhythmdb_entry_get_string (a, RHYTHMDB_PROP_ARTIST_SORT_KEY);
 	b_val = rhythmdb_entry_get_string (b, RHYTHMDB_PROP_ARTIST_SORT_KEY);
 
-	if (a_val == NULL) {
+	if (a_val == NULL)
+		a_val = _("Unknown");
 		if (b_val == NULL)
-			ret = 0;
-		else
-			ret = -1;
-	} else if (b_val == NULL)
-		ret = 1;
-	else
-		ret = strcmp (a_val, b_val);
+		b_val = _("Unknown");
 
+	ret = strcmp (a_val, b_val);
 	if (ret != 0)
 		return ret;
 	else
@@ -838,16 +832,12 @@ rb_entry_view_genre_sort_func (RhythmDBE
 	a_val = rhythmdb_entry_get_string (a, RHYTHMDB_PROP_GENRE_SORT_KEY);
 	b_val = rhythmdb_entry_get_string (a, RHYTHMDB_PROP_GENRE_SORT_KEY);
 
-	if (a_val == NULL) {
+	if (a_val == NULL)
+		a_val = _("Unknown");
 		if (b_val == NULL)
-			ret = 0;
-		else
-			ret = -1;
-	} else if (b_val == NULL)
-		ret = 1;
-	else
-		ret = strcmp (a_val, b_val);
+		b_val = _("Unknown");
 
+	ret = strcmp (a_val, b_val);
 	if (ret != 0)
 		return ret;
 	else
@@ -873,7 +863,10 @@ rb_entry_view_double_ceiling_sort_func (
 
 	ret = (a_val == b_val ? 0 : (a_val > b_val ? 1 : -1));
 
+	if (ret != 0)
 	return ret;
+	else
+		return rb_entry_view_artist_sort_func (a, b, data->view);
 }
 
 static gint
@@ -896,12 +889,10 @@ rb_entry_view_date_sort_func (RhythmDBEn
 			      RBEntryView *view)
 {
 	gulong a_val, b_val;
-	gint ret;
 
 	a_val = rhythmdb_entry_get_ulong (a, RHYTHMDB_PROP_DATE);
 	b_val = rhythmdb_entry_get_ulong (b, RHYTHMDB_PROP_DATE);
 
-	ret = (a_val == b_val ? 0 : (a_val > b_val ? 1 : -1));
 	if (a_val > b_val)
 		return 1;
 	else if (a_val < b_val)
@@ -914,21 +905,51 @@ static gint
 rb_entry_view_string_sort_func (RhythmDBEntry *a, RhythmDBEntry *b,
 				struct RBEntryViewCellDataFuncData *data)
 {
-	const char *a_val;
-	const char *b_val;
+	const char *a_val, *b_val;
+	gint ret;
 
 	a_val = rhythmdb_entry_get_string (a, data->propid);
 	b_val = rhythmdb_entry_get_string (b, data->propid);
 
-	if (a_val == NULL) {
+	if (a_val == NULL)
+		a_val = _("Unknown");
 		if (b_val == NULL)
-			return 0;
+		b_val = _("Unknown");
+	
+	ret = strcmp (a_val, b_val);
+	if (ret != 0)
+		return ret;
 		else
-			return -1;
-	} else if (b_val == NULL)
-		return 1;
+		return rb_entry_view_artist_sort_func (a, b, data->view);
+}
+
+static gint
+rb_entry_view_mime_sort_func (RhythmDBEntry *a, RhythmDBEntry *b,
+				struct RBEntryViewCellDataFuncData *data)
+{
+	const char *a_val, *b_val;
+	const char *a_desc = NULL, *b_desc = NULL;
+	gint ret;
+
+	a_val = rhythmdb_entry_get_string (a, data->propid);
+	b_val = rhythmdb_entry_get_string (b, data->propid);
+
+	if (a_val)
+		a_desc = gnome_vfs_mime_get_description (a_val);
+	if (b_val);
+		b_desc = gnome_vfs_mime_get_description (b_val);
+
+	if (a_desc == NULL)
+		a_desc = _("Unknown");
+	if (b_desc == NULL)
+		b_desc = _("Unknown");
+	
+	ret = strcmp (a_desc, b_desc);
+		
+	if (ret != 0)
+		return ret;
 	else
-		return strcmp (a_val, b_val);
+		return rb_entry_view_artist_sort_func (a, b, data->view);
 }
 
 static void
@@ -1060,37 +1081,26 @@ rb_entry_view_year_cell_data_func (GtkTr
 	}
 }
 
-#if 0
 static void
 rb_entry_view_quality_cell_data_func (GtkTreeViewColumn *column, GtkCellRenderer *renderer,
 				      GtkTreeModel *tree_model, GtkTreeIter *iter,
 				      struct RBEntryViewCellDataFuncData *data)
 {
 	RhythmDBEntry *entry;
-	guint bitrate;
+	gulong bitrate;
 
 	entry = entry_from_tree_iter (data->view, iter);
 
-	bitrate = rhythmdb_entry_get_int (data->view->priv->db, entry,
-					  data->propid);
+	bitrate = rhythmdb_entry_get_ulong (entry, data->propid);
 
-	if (bitrate <= 0) {
+	if (bitrate == 0) {
 		g_object_set (G_OBJECT (renderer), "text", _("Unknown"), NULL);
-	} else if (bitrate <= 80) {
-		g_object_set (G_OBJECT (renderer), "text", _("Very Low"), NULL);
-	} else if (bitrate <= 112) {
-		g_object_set (G_OBJECT (renderer), "text", _("Low"), NULL);
-	} else if (bitrate <= 160) {
-		g_object_set (G_OBJECT (renderer), "text", _("Regular"), NULL);
-	} else if (bitrate <= 224) {
-		g_object_set (G_OBJECT (renderer), "text", _("High"), NULL);
-	} else if (bitrate <= 1410) {
-		g_object_set (G_OBJECT (renderer), "text", _("Very High"), NULL);
 	} else {
-		g_object_set (G_OBJECT (renderer), "text", _("Perfect"), NULL);
+		char *s = g_strdup_printf (_("%u kbps"), (guint)bitrate);
+		g_object_set (G_OBJECT (renderer), "text", s, NULL);
+		g_free (s);
 	}
 }
-#endif
 
 static void
 rb_entry_view_string_cell_data_func (GtkTreeViewColumn *column, GtkCellRenderer *renderer,
@@ -1109,6 +1119,25 @@ rb_entry_view_string_cell_data_func (Gtk
 }
 
 static void
+rb_entry_view_mime_cell_data_func (GtkTreeViewColumn *column, GtkCellRenderer *renderer,
+				   GtkTreeModel *tree_model, GtkTreeIter *iter,
+				   struct RBEntryViewCellDataFuncData *data)
+{
+	RhythmDBEntry *entry;
+	const char *str;
+
+	entry = entry_from_tree_iter (data->view, iter);
+
+	str = rhythmdb_entry_get_string (entry, data->propid);
+	str = gnome_vfs_mime_get_description (str);
+	if (str == NULL)
+		str = _("Unknown");
+
+	g_object_set (G_OBJECT (renderer), "text", str, NULL);
+
+}
+
+static void
 rb_entry_view_sync_sorting (RBEntryView *view)
 {
 	GtkTreeViewColumn *column;
@@ -1374,7 +1403,6 @@ rb_entry_view_append_column (RBEntryView
 		title = _("_Year");
 		key = "Year";
 		break;
-#if 0
 	case RB_ENTRY_VIEW_COL_QUALITY:
 		propid = RHYTHMDB_PROP_BITRATE;
 		cell_data->propid = propid;
@@ -1384,7 +1412,6 @@ rb_entry_view_append_column (RBEntryView
 		title = _("_Quality");
 		key = "Quality";
 		break;
-#endif
 	/* RB_ENTRY_VIEW_COL_RATING at bottom */
 	case RB_ENTRY_VIEW_COL_PLAY_COUNT:
 		propid = RHYTHMDB_PROP_PLAY_COUNT;
@@ -1413,6 +1440,15 @@ rb_entry_view_append_column (RBEntryView
 		title = _("_Date Added");
 		key = "FirstSeen";
 		break;
+	case RB_ENTRY_VIEW_COL_MIMETYPE:
+		propid = RHYTHMDB_PROP_MIMETYPE;
+		cell_data->propid = propid;
+		cell_data_func = (GtkTreeCellDataFunc) rb_entry_view_mime_cell_data_func;				
+		sort_data->propid = RHYTHMDB_PROP_MIMETYPE;
+		sort_func = (GCompareDataFunc) rb_entry_view_mime_sort_func;
+		title = _("T_ype");
+		key = "MimeType";
+		break;
 	case RB_ENTRY_VIEW_COL_RATING:
 	default:
 		g_assert_not_reached ();
Index: widgets/rb-entry-view.h
===================================================================
RCS file: /cvs/gnome/rhythmbox/widgets/rb-entry-view.h,v
retrieving revision 1.25
diff -u -b -u -p -r1.25 rb-entry-view.h
--- widgets/rb-entry-view.h	14 Nov 2005 07:06:32 -0000	1.25
+++ widgets/rb-entry-view.h	15 Nov 2005 00:44:10 -0000
@@ -52,7 +52,8 @@ typedef enum {
 	RB_ENTRY_VIEW_COL_PLAY_COUNT,
 	RB_ENTRY_VIEW_COL_YEAR,
 	RB_ENTRY_VIEW_COL_LAST_PLAYED,
-	RB_ENTRY_VIEW_COL_FIRST_SEEN
+	RB_ENTRY_VIEW_COL_FIRST_SEEN,
+	RB_ENTRY_VIEW_COL_MIMETYPE,
 } RBEntryViewColumn;
 
 typedef struct RBEntryViewPrivate RBEntryViewPrivate;
Index: widgets/rb-song-info.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/widgets/rb-song-info.c,v
retrieving revision 1.39
diff -u -b -u -p -r1.39 rb-song-info.c
--- widgets/rb-song-info.c	5 Nov 2005 05:03:19 -0000	1.39
+++ widgets/rb-song-info.c	15 Nov 2005 00:44:10 -0000
@@ -33,6 +33,7 @@
 #include <string.h>
 #include <time.h>
 #include <libgnomevfs/gnome-vfs-utils.h>
+#include <libgnomevfs/gnome-vfs-mime-handlers.h>
 
 #include "rhythmdb.h"
 #include "rb-song-info.h"
@@ -71,6 +72,7 @@ static void rb_song_info_update_buttons 
 static void rb_song_info_update_rating (RBSongInfo *song_info);
 static void rb_song_info_update_year (RBSongInfo *song_info);
 static void rb_song_info_update_playback_error (RBSongInfo *song_info);
+static void rb_song_info_update_mime_type (RBSongInfo *song_info);
 
 static void rb_song_info_backward_clicked_cb (GtkWidget *button,
 					      RBSongInfo *song_info);
@@ -115,6 +117,7 @@ struct RBSongInfoPrivate
 	GtkWidget   *location;
 	GtkWidget   *play_count;
 	GtkWidget   *last_played;
+	GtkWidget   *mime_type;
 	GtkWidget   *rating;
 };
 
@@ -292,6 +295,7 @@ rb_song_info_construct_single (RBSongInf
 	song_info->priv->location = glade_xml_get_widget (xml, "song_info_location");
 	song_info->priv->play_count    = glade_xml_get_widget (xml, "song_info_playcount");
 	song_info->priv->last_played   = glade_xml_get_widget (xml, "song_info_lastplayed");
+	song_info->priv->mime_type   = glade_xml_get_widget (xml, "song_info_type");
 	song_info->priv->name = glade_xml_get_widget (xml, "song_info_name");
 	song_info->priv->disc_cur     = glade_xml_get_widget (xml, "song_info_disc_cur");
 	song_info->priv->year		= glade_xml_get_widget (xml, "song_info_year");
@@ -306,6 +310,7 @@ rb_song_info_construct_single (RBSongInf
 	rb_song_info_boldify_label (song_info, xml, "bitrate_label");
 	rb_song_info_boldify_label (song_info, xml, "discn_label");
 	rb_song_info_boldify_label (song_info, xml, "year_label");
+	rb_song_info_boldify_label (song_info, xml, "type_label");
 
 	/* whenever you press a mnemonic, the associated GtkEntry's text gets highlighted */
 	g_signal_connect_object (G_OBJECT (song_info->priv->title),
@@ -644,6 +649,7 @@ rb_song_info_populate_dialog (RBSongInfo
 	rb_song_info_update_duration (song_info);
 	rb_song_info_update_location (song_info);
 	rb_song_info_update_play_count (song_info);
+	rb_song_info_update_mime_type (song_info);
 	rb_song_info_update_last_played (song_info);
 	rb_song_info_update_bitrate (song_info);
 	rb_song_info_update_rating (song_info);
@@ -833,6 +839,24 @@ rb_song_info_update_play_count (RBSongIn
 	text = g_strdup_printf ("%ld", song_info->priv->current_entry->play_count);
 	gtk_label_set_text (GTK_LABEL (song_info->priv->play_count), text);
 	g_free (text);
+}
+
+static void
+rb_song_info_update_mime_type (RBSongInfo *song_info)
+{
+	const char *type, *desc;
+	char *str;
+	
+	type = rhythmdb_entry_get_string (song_info->priv->current_entry, RHYTHMDB_PROP_MIMETYPE);
+	desc = gnome_vfs_mime_get_description (type);
+	if (!type || !strcmp ("", type))
+		type = _("Unknown");
+	if (!desc || !strcmp ("", desc))
+		desc = _("Unknown");
+
+	str = g_strdup_printf ("%s (%s)", desc, type);
+	gtk_label_set_text (GTK_LABEL (song_info->priv->mime_type), str);
+	g_free (str);
 }
 
 static void
