Index: data/glade/general-prefs.glade
===================================================================
RCS file: /cvs/gnome/rhythmbox/data/glade/general-prefs.glade,v
retrieving revision 1.7
diff -u -u -r1.7 general-prefs.glade
--- data/glade/general-prefs.glade	18 Sep 2005 14:04:28 -0000	1.7
+++ data/glade/general-prefs.glade	28 Oct 2005 06:30:02 -0000
@@ -116,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>
@@ -321,6 +340,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.33
diff -u -u -r1.33 song-info.glade
--- data/glade/song-info.glade	24 Sep 2005 14:19:15 -0000	1.33
+++ data/glade/song-info.glade	28 Oct 2005 06:30:02 -0000
@@ -364,7 +394,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>
@@ -541,9 +599,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>
@@ -553,21 +660,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>
@@ -577,12 +688,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>
@@ -601,35 +716,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>
@@ -638,9 +760,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>
@@ -650,44 +772,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>
@@ -699,30 +828,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>
@@ -735,28 +873,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>
@@ -770,31 +916,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>
@@ -813,8 +964,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.47
diff -u -u -r1.47 rb-shell-preferences.c
--- shell/rb-shell-preferences.c	21 Oct 2005 02:27:18 -0000	1.47
+++ shell/rb-shell-preferences.c	28 Oct 2005 06:30:46 -0000
@@ -92,6 +92,7 @@
 	GtkWidget *last_played_check;
 	GtkWidget *first_seen_check;
 	GtkWidget *quality_check;
+	GtkWidget *mime_type_check;
 
 	gboolean loading;
 };
@@ -229,6 +230,8 @@
 		glade_xml_get_widget (xml, "last_played_check");
 	shell_preferences->priv->quality_check =
 		glade_xml_get_widget (xml, "quality_check");
+	shell_preferences->priv->mime_type_check =
+		glade_xml_get_widget (xml, "mime_type_check");
 	shell_preferences->priv->first_seen_check =
 		glade_xml_get_widget (xml, "first_seen_check");
 
@@ -481,9 +484,10 @@
 		colname = "RHYTHMDB_PROP_PLAY_COUNT";
 	else if (butt == GTK_CHECK_BUTTON (shell_preferences->priv->last_played_check))
 		colname = "RHYTHMDB_PROP_LAST_PLAYED";
-	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
@@ -546,10 +550,12 @@
 		gtk_toggle_button_set_active
 			(GTK_TOGGLE_BUTTON (shell_preferences->priv->last_played_check),
 			 strstr (columns, "RHYTHMDB_PROP_LAST_PLAYED") != 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->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.89
diff -u -u -r1.89 rb-iradio-source.c
--- sources/rb-iradio-source.c	21 Oct 2005 15:24:25 -0000	1.89
+++ sources/rb-iradio-source.c	28 Oct 2005 06:30:52 -0000
@@ -318,10 +318,11 @@
 						    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.120
diff -u -u -r1.120 rb-library-source.c
--- sources/rb-library-source.c	27 Sep 2005 11:30:24 -0000	1.120
+++ sources/rb-library-source.c	28 Oct 2005 06:30:52 -0000
@@ -542,11 +542,12 @@
 	rb_entry_view_append_column (source->priv->songs, RB_ENTRY_VIEW_COL_ARTIST);
 	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_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.78
diff -u -u -r1.78 rb-playlist-source.c
--- sources/rb-playlist-source.c	16 Oct 2005 04:09:18 -0000	1.78
+++ sources/rb-playlist-source.c	28 Oct 2005 06:31:01 -0000
@@ -337,10 +337,12 @@
 	rb_entry_view_append_column (source->priv->songs, RB_ENTRY_VIEW_COL_ARTIST);
 	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_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.3
diff -u -u -r1.3 rb-podcast-source.c
--- sources/rb-podcast-source.c	26 Oct 2005 09:17:51 -0000	1.3
+++ sources/rb-podcast-source.c	28 Oct 2005 06:31:01 -0000
@@ -529,9 +529,11 @@
 
 	
 	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.104
diff -u -u -r1.104 rb-entry-view.c
--- widgets/rb-entry-view.c	26 Oct 2005 07:11:22 -0000	1.104
+++ widgets/rb-entry-view.c	28 Oct 2005 06:31:05 -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,15 +790,12 @@
 	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 (b_val == NULL)
-			return 0;
-		else
-			return -1;
-	} else if (b_val == NULL)
-		return 1;
-	else
-		return strcmp (a_val, b_val);
+	if (a_val == NULL)
+		a_val = _("Unknown");
+	if (b_val == NULL)
+		b_val = _("Unknown");
+	
+	return strcmp (a_val, b_val);
 }
 
 static gint
@@ -811,16 +809,12 @@
 	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 (b_val == NULL)
-			ret = 0;
-		else
-			ret = -1;
-	} else if (b_val == NULL)
-		ret = 1;
-	else
-		ret = strcmp (a_val, b_val);
-
+	if (a_val == NULL)
+		a_val = _("Unknown");
+	if (b_val == NULL)
+		b_val = _("Unknown");
+	
+	ret = strcmp (a_val, b_val);
 	if (ret != 0)
 		return ret;
 	else
@@ -838,16 +832,12 @@
 	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 (b_val == NULL)
-			ret = 0;
-		else
-			ret = -1;
-	} else if (b_val == NULL)
-		ret = 1;
-	else
-		ret = strcmp (a_val, b_val);
+	if (a_val == NULL)
+		a_val = _("Unknown");
+	if (b_val == NULL)
+		b_val = _("Unknown");
 
+	ret = strcmp (a_val, b_val);
 	if (ret != 0)
 		return ret;
 	else
@@ -873,7 +863,10 @@
 
 	ret = (a_val == b_val ? 0 : (a_val > b_val ? 1 : -1));
 
-	return ret;
+	if (ret != 0)
+		return ret;
+	else
+		return rb_entry_view_artist_sort_func (a, b, data->view);
 }
 
 static gint
@@ -888,28 +881,61 @@
 
 	ret = (a_val == b_val ? 0 : (a_val > b_val ? 1 : -1));
 
-	return ret;
+	if (ret != 0)
+		return ret;
+	else
+		return rb_entry_view_artist_sort_func (a, b, data->view);
 }
 
 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 (b_val == NULL)
-			return 0;
-		else
-			return -1;
-	} else if (b_val == NULL)
-		return 1;
+	if (a_val == NULL)
+		a_val = _("Unknown");
+	if (b_val == NULL)
+		b_val = _("Unknown");
+	
+	ret = strcmp (a_val, b_val);
+	if (ret != 0)
+		return ret;
 	else
-		return strcmp (a_val, b_val);
+		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 rb_entry_view_artist_sort_func (a, b, data->view);
 }
 
 static void
@@ -1018,37 +1044,26 @@
 	g_free (str);
 }
 
-#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,
@@ -1067,6 +1082,25 @@
 }
 
 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;
@@ -1323,7 +1357,6 @@
 		title = _("Tim_e");
 		key = "Time";
 		break;
-#if 0
 	case RB_ENTRY_VIEW_COL_QUALITY:
 		propid = RHYTHMDB_PROP_BITRATE;
 		cell_data->propid = propid;
@@ -1333,7 +1366,6 @@
 		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;
@@ -1361,6 +1393,15 @@
 		sort_func = (GCompareDataFunc) rb_entry_view_ulong_sort_func;
 		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:
Index: widgets/rb-entry-view.h
===================================================================
RCS file: /cvs/gnome/rhythmbox/widgets/rb-entry-view.h,v
retrieving revision 1.23
diff -u -u -r1.23 rb-entry-view.h
--- widgets/rb-entry-view.h	18 Sep 2005 14:04:30 -0000	1.23
+++ widgets/rb-entry-view.h	28 Oct 2005 06:31:05 -0000
@@ -51,7 +51,8 @@
 	RB_ENTRY_VIEW_COL_RATING,
 	RB_ENTRY_VIEW_COL_PLAY_COUNT,
 	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.37
diff -u -u -r1.37 rb-song-info.c
--- widgets/rb-song-info.c	24 Sep 2005 14:19:17 -0000	1.37
+++ widgets/rb-song-info.c	28 Oct 2005 06:31:07 -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"
@@ -70,6 +71,7 @@
 static void rb_song_info_update_buttons (RBSongInfo *song_info);
 static void rb_song_info_update_rating (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);
@@ -117,6 +119,7 @@
 	GtkWidget   *location;
 	GtkWidget   *play_count;
 	GtkWidget   *last_played;
+	GtkWidget   *mime_type;
 	GtkWidget   *rating;
 };
 
@@ -281,6 +284,7 @@
 	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");
 
 	/* We add now the Pango attributes (look at bug #99867 and #97061) */
@@ -336,6 +340,12 @@
 		gtk_label_set_markup_with_mnemonic (GTK_LABEL (label), str_final);
 		g_free (str_final);
 
+		label = glade_xml_get_widget (xml, "type_label");
+		str_final = g_strdup_printf ("<b>%s</b>",
+					     gtk_label_get_label GTK_LABEL (label));
+		gtk_label_set_markup_with_mnemonic (GTK_LABEL (label), str_final);
+		g_free (str_final);
+
 	}
 
 	/* whenever you press a mnemonic, the associated GtkEntry's text gets highlighted */
@@ -697,6 +707,7 @@
 	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);
@@ -885,6 +896,24 @@
 	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
