Index: data/glade/general-prefs.glade
===================================================================
RCS file: /cvs/gnome/rhythmbox/data/glade/general-prefs.glade,v
retrieving revision 1.11
diff -u -u -r1.11 general-prefs.glade
--- data/glade/general-prefs.glade	5 Nov 2005 05:03:17 -0000	1.11
+++ data/glade/general-prefs.glade	16 Jan 2006 04:10:43 -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 -u -r1.35 song-info.glade
--- data/glade/song-info.glade	5 Nov 2005 05:03:17 -0000	1.35
+++ data/glade/song-info.glade	16 Jan 2006 04:10:43 -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: lib/rb-util.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/lib/rb-util.c,v
retrieving revision 1.18
diff -u -u -r1.18 rb-util.c
--- lib/rb-util.c	30 Nov 2005 04:54:31 -0000	1.18
+++ lib/rb-util.c	16 Jan 2006 04:10:44 -0000
@@ -24,6 +24,7 @@
 #include <string.h>
 #include <libgnome/gnome-i18n.h>
 #include <libgnomevfs/gnome-vfs.h>
+#include <libgnomevfs/gnome-vfs-mime-handlers.h>
 #include "rb-debug.h"
 
 static GPrivate * private_is_primary_thread;
@@ -565,5 +566,21 @@
 		str = g_strdup_printf (_("%d:%02d:%02d"), hours, minutes, seconds);
 
 	return str;
+}
+
+const gchar*
+rb_mime_get_friendly_name (const gchar *mime_type)
+{
+	const gchar *name = NULL;
+	
+	/* gstreamer returns this for ID3 tagged files */
+	if (strcmp (mime_type, "application/x-id3") == 0)
+		name = _("ID3-tagged audio");
+	if (name == NULL && mime_type)
+		name = gnome_vfs_mime_get_description (mime_type);
+	if (name == NULL)
+		name = _("Unknown");
+
+	return name;
 }
 
Index: lib/rb-util.h
===================================================================
RCS file: /cvs/gnome/rhythmbox/lib/rb-util.h,v
retrieving revision 1.14
diff -u -u -r1.14 rb-util.h
--- lib/rb-util.h	30 Nov 2005 04:54:31 -0000	1.14
+++ lib/rb-util.h	16 Jan 2006 04:10:44 -0000
@@ -52,6 +52,8 @@
 gchar* rb_search_fold (const char *original);
 gchar** rb_string_split_words (const gchar *string);
 
+const gchar* rb_mime_get_friendly_name (const gchar *mime_type);
+
 G_END_DECLS
 
 #endif /* __RB_UTIL_H */
Index: shell/rb-shell-preferences.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/shell/rb-shell-preferences.c,v
retrieving revision 1.55
diff -u -u -r1.55 rb-shell-preferences.c
--- shell/rb-shell-preferences.c	6 Jan 2006 16:00:41 -0000	1.55
+++ shell/rb-shell-preferences.c	16 Jan 2006 04:10:50 -0000
@@ -81,6 +81,7 @@
 	GtkWidget *first_seen_check;
 	GtkWidget *quality_check;
 	GtkWidget *year_check;
+	GtkWidget *mime_type_check;
 
 	gboolean loading;
 };
@@ -186,6 +187,8 @@
 		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"),
@@ -402,9 +405,10 @@
 		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
@@ -491,10 +495,9 @@
 		rb_shell_preferences_sync_column_button (shell_preferences,
 			       				 shell_preferences->priv->first_seen_check,
 							 columns, "RHYTHMDB_PROP_FIRST_SEEN");
-		if (shell_preferences->priv->quality_check)
-			rb_shell_preferences_sync_column_button (shell_preferences,
-				       				 shell_preferences->priv->quality_check,
-								 columns, "RHYTHMDB_PROP_BITRATE");
+		rb_shell_preferences_sync_column_button (shell_preferences,
+			       				 shell_preferences->priv->quality_check,
+							 columns, "RHYTHMDB_PROP_BITRATE");
 	}
 
 	g_free (columns);
Index: sources/rb-iradio-source.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/sources/rb-iradio-source.c,v
retrieving revision 1.104
diff -u -u -r1.104 rb-iradio-source.c
--- sources/rb-iradio-source.c	13 Jan 2006 12:20:01 -0000	1.104
+++ sources/rb-iradio-source.c	16 Jan 2006 04:10:54 -0000
@@ -296,10 +296,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.141
diff -u -u -r1.141 rb-library-source.c
--- sources/rb-library-source.c	15 Jan 2006 02:13:15 -0000	1.141
+++ sources/rb-library-source.c	16 Jan 2006 04:10:54 -0000
@@ -547,12 +547,13 @@
 	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);
-	if (rb_library_source_has_first_added_column (source))
+  	if (rb_library_source_has_first_added_column (source))
 		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.99
diff -u -u -r1.99 rb-playlist-source.c
--- sources/rb-playlist-source.c	15 Jan 2006 12:23:44 -0000	1.99
+++ sources/rb-playlist-source.c	16 Jan 2006 04:10:55 -0000
@@ -266,10 +266,12 @@
 	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);
 	rb_entry_view_set_columns_clickable (source->priv->songs, FALSE);
 
 	rb_playlist_source_setup_entry_view (source, source->priv->songs);
Index: sources/rb-podcast-source.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/sources/rb-podcast-source.c,v
retrieving revision 1.39
diff -u -u -r1.39 rb-podcast-source.c
--- sources/rb-podcast-source.c	14 Jan 2006 08:05:23 -0000	1.39
+++ sources/rb-podcast-source.c	16 Jan 2006 04:10:55 -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);
 
 
 	/* Status column */
Index: widgets/rb-entry-view.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/widgets/rb-entry-view.c,v
retrieving revision 1.120
diff -u -u -r1.120 rb-entry-view.c
--- widgets/rb-entry-view.c	10 Dec 2005 12:08:25 -0000	1.120
+++ widgets/rb-entry-view.c	16 Jan 2006 04:10:57 -0000
@@ -619,14 +619,11 @@
 	a_val = rhythmdb_entry_get_string (a, RHYTHMDB_PROP_LOCATION);
 	b_val = rhythmdb_entry_get_string (b, RHYTHMDB_PROP_LOCATION);
 
-	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);
 }
 
@@ -689,16 +686,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 (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
@@ -716,16 +709,12 @@
 	a_val = rhythmdb_entry_get_string (a, RHYTHMDB_PROP_GENRE_SORT_KEY);
 	b_val = rhythmdb_entry_get_string (b, 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
@@ -774,12 +763,10 @@
 			      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)
@@ -815,6 +802,29 @@
 		return rb_entry_view_location_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);
+
+	a_desc = rb_mime_get_friendly_name (a_val);
+	b_desc = rb_mime_get_friendly_name (b_val);
+	
+	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
 rb_entry_view_playing_cell_data_func (GtkTreeViewColumn *column, GtkCellRenderer *renderer,
 				      GtkTreeModel *tree_model, GtkTreeIter *iter,
@@ -943,37 +953,25 @@
 	}
 }
 
-#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 = rhythmdb_query_model_iter_to_entry (data->view->priv->model, iter);
+	bitrate = rhythmdb_entry_get_ulong (entry, data->propid);
 
-	bitrate = rhythmdb_entry_get_int (data->view->priv->db, entry,
-					  data->propid);
-
-	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);
+	if (bitrate > 0) {
+		char *s = g_strdup_printf (_("%u kbps"), (guint)bitrate);
+		g_object_set (G_OBJECT (renderer), "text", s, NULL);
+		g_free (s);
 	} else {
-		g_object_set (G_OBJECT (renderer), "text", _("Perfect"), NULL);
+		g_object_set (G_OBJECT (renderer), "text", _("Unknown"), NULL);
 	}
 }
-#endif
 
 static void
 rb_entry_view_string_cell_data_func (GtkTreeViewColumn *column, GtkCellRenderer *renderer,
@@ -992,6 +990,23 @@
 }
 
 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 = rhythmdb_query_model_iter_to_entry (data->view->priv->model, iter);
+
+	str = rhythmdb_entry_get_string (entry, data->propid);
+	str = rb_mime_get_friendly_name (str);
+
+	g_object_set (G_OBJECT (renderer), "text", str, NULL);
+
+}
+
+static void
 rb_entry_view_sync_sorting (RBEntryView *view)
 {
 	GtkTreeViewColumn *column;
@@ -1257,7 +1272,6 @@
 		strings[0] = title;
 		strings[1] = "0000";
 		break;
-#if 0
 	case RB_ENTRY_VIEW_COL_QUALITY:
 		propid = RHYTHMDB_PROP_BITRATE;
 		cell_data->propid = propid;
@@ -1267,9 +1281,9 @@
 		title = _("_Quality");
 		key = "Quality";
 		strings[0] = title;
-		strings[1] = "000";
+		strings[1] = _("000 kbps");
+		strings[2] = _("Unknown");
 		break;
-#endif
 	/* RB_ENTRY_VIEW_COL_RATING at bottom */
 	case RB_ENTRY_VIEW_COL_PLAY_COUNT:
 		propid = RHYTHMDB_PROP_PLAY_COUNT;
@@ -1305,6 +1319,16 @@
 		key = "FirstSeen";
 		strings[0] = title;
 		strings[1] = rb_entry_view_get_time_date_column_sample ();
+		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";
+		ellipsize = TRUE;
 		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.29
diff -u -u -r1.29 rb-entry-view.h
--- widgets/rb-entry-view.h	10 Dec 2005 03:52:23 -0000	1.29
+++ widgets/rb-entry-view.h	16 Jan 2006 04:10:57 -0000
@@ -52,7 +52,8 @@
 	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 enum {
Index: widgets/rb-song-info.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/widgets/rb-song-info.c,v
retrieving revision 1.48
diff -u -u -r1.48 rb-song-info.c
--- widgets/rb-song-info.c	11 Jan 2006 11:13:36 -0000	1.48
+++ widgets/rb-song-info.c	16 Jan 2006 04:10:57 -0000
@@ -44,6 +44,7 @@
 #include "rb-rating.h"
 #include "rb-preferences.h"
 #include "eel-gconf-extensions.h"
+#include "rb-util.h"
 #include "rb-source.h"
 
 static void rb_song_info_class_init (RBSongInfoClass *klass);
@@ -75,6 +76,7 @@
 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);
@@ -122,6 +124,7 @@
 	GtkWidget   *location;
 	GtkWidget   *play_count;
 	GtkWidget   *last_played;
+	GtkWidget   *mime_type;
 	GtkWidget   *rating;
 };
 
@@ -257,6 +260,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");
 
 	rb_glade_boldify_label (xml, "title_label");
@@ -267,6 +271,7 @@
 	rb_glade_boldify_label (xml, "play_count_label");
 	rb_glade_boldify_label (xml, "duration_label");
 	rb_glade_boldify_label (xml, "bitrate_label");
+	rb_glade_boldify_label (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),
@@ -716,6 +721,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);
@@ -914,6 +920,22 @@
 	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 = rb_mime_get_friendly_name (type);
+	if (!type || !strcmp ("", type))
+		type = _("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
