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	18 Feb 2006 06:17:47 -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>
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	18 Feb 2006 06:17:48 -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>
diff -u -u -r1.19 rb-util.c
--- lib/rb-util.c	7 Feb 2006 13:19:56 -0000	1.19
+++ lib/rb-util.c	18 Feb 2006 06:17:49 -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,6 +566,22 @@
 		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;
 }
 
 gboolean
diff -u -u -r1.15 rb-util.h
--- lib/rb-util.h	7 Feb 2006 13:19:56 -0000	1.15
+++ lib/rb-util.h	18 Feb 2006 06:17:49 -0000
@@ -59,6 +59,8 @@
 GList* rb_collate_hash_table_keys (GHashTable *table);
 GList* rb_collate_hash_table_values (GHashTable *table);
 
+const gchar* rb_mime_get_friendly_name (const gchar *mime_type);
+
 G_END_DECLS
 
 #endif /* __RB_UTIL_H */
diff -u -u -r1.107 rhythmdb-query-model.c
--- rhythmdb/rhythmdb-query-model.c	16 Feb 2006 21:42:10 -0000	1.107
+++ rhythmdb/rhythmdb-query-model.c	18 Feb 2006 06:17:49 -0000
@@ -2290,6 +2290,29 @@
 }
 
 gint
+rhythmdb_query_model_mime_sort_func (RhythmDBEntry *a, RhythmDBEntry *b,
+			      RhythmDBQueryModel *model)
+{
+	const char *a_val, *b_val;
+	const char *a_desc = NULL, *b_desc = NULL;
+	gint ret;
+
+	a_val = rhythmdb_entry_get_string (a, RHYTHMDB_PROP_MIMETYPE);
+	b_val = rhythmdb_entry_get_string (b, RHYTHMDB_PROP_MIMETYPE);
+
+	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 rhythmdb_query_model_artist_sort_func (a, b, model);
+}
+
+
+gint
 rhythmdb_query_model_string_sort_func (RhythmDBEntry *a, RhythmDBEntry *b,
 				       RhythmDBQueryModel *model)
 {
diff -u -u -r1.23 rhythmdb-query-model.h
--- rhythmdb/rhythmdb-query-model.h	14 Feb 2006 04:11:28 -0000	1.23
+++ rhythmdb/rhythmdb-query-model.h	18 Feb 2006 06:17:49 -0000
@@ -135,6 +135,9 @@
 
 gint 			rhythmdb_query_model_date_sort_func (RhythmDBEntry *a, RhythmDBEntry *b,
 							     RhythmDBQueryModel *model);
+
+gint 			rhythmdb_query_model_mime_sort_func (RhythmDBEntry *a, RhythmDBEntry *b,
+							     RhythmDBQueryModel *model);
 G_END_DECLS
 
 #endif /* __RHYTHMDB_QUERY_MODEL_H */
diff -u -u -r1.56 rb-shell-preferences.c
--- shell/rb-shell-preferences.c	3 Feb 2006 18:20:43 -0000	1.56
+++ shell/rb-shell-preferences.c	18 Feb 2006 06:17:52 -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"),
@@ -483,9 +486,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
@@ -572,10 +576,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);
diff -u -u -r1.108 rb-iradio-source.c
--- sources/rb-iradio-source.c	17 Feb 2006 05:50:06 -0000	1.108
+++ sources/rb-iradio-source.c	18 Feb 2006 06:17:52 -0000
@@ -305,6 +305,7 @@
 	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),
diff -u -u -r1.145 rb-library-source.c
--- sources/rb-library-source.c	17 Feb 2006 05:50:06 -0000	1.145
+++ sources/rb-library-source.c	18 Feb 2006 06:17:53 -0000
@@ -394,12 +394,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);
diff -u -u -r1.109 rb-playlist-source.c
--- sources/rb-playlist-source.c	13 Feb 2006 10:32:51 -0000	1.109
+++ sources/rb-playlist-source.c	18 Feb 2006 06:17:53 -0000
@@ -258,10 +258,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);
diff -u -u -r1.52 rb-podcast-source.c
--- sources/rb-podcast-source.c	15 Feb 2006 09:21:32 -0000	1.52
+++ sources/rb-podcast-source.c	18 Feb 2006 06:17:54 -0000
@@ -538,6 +538,7 @@
 	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 */
diff -u -u -r1.128 rb-entry-view.c
--- widgets/rb-entry-view.c	13 Feb 2006 10:04:07 -0000	1.128
+++ widgets/rb-entry-view.c	18 Feb 2006 06:17:55 -0000
@@ -704,7 +704,6 @@
 	}
 }
 
-#if 0
 static void
 rb_entry_view_quality_cell_data_func (GtkTreeViewColumn *column, GtkCellRenderer *renderer,
 				      GtkTreeModel *tree_model, GtkTreeIter *iter,
@@ -715,26 +714,33 @@
 
 	entry = rhythmdb_query_model_iter_to_entry (data->view->priv->model, iter);
 
-	bitrate = rhythmdb_entry_get_int (data->view->priv->db, entry,
-					  data->propid);
+	bitrate = rhythmdb_entry_get_ulong (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_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_string_cell_data_func (GtkTreeViewColumn *column, GtkCellRenderer *renderer,
@@ -982,7 +988,6 @@
 		strings[1] = "0000";
 		strings[2] = _("Unknown");
 		break;
-#if 0
 	case RB_ENTRY_VIEW_COL_QUALITY:
 		propid = RHYTHMDB_PROP_BITRATE;
 		cell_data->propid = propid;
@@ -992,9 +997,9 @@
 		title = _("_Quality");
 		key = "Quality";
 		strings[0] = title;
-		strings[1] = "000";
+		strings[1] = _("000 kbps");
+		strings[2] = _("Unknown");
 		break;
-#endif
 	case RB_ENTRY_VIEW_COL_RATING:
 		propid = RHYTHMDB_PROP_RATING;
 		sort_func = (GCompareDataFunc) rhythmdb_query_model_double_ceiling_sort_func;
@@ -1052,6 +1057,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_propid = RHYTHMDB_PROP_MIMETYPE;
+		sort_func = (GCompareDataFunc) rhythmdb_query_model_mime_sort_func;
+		title = _("T_ype");
+		key = "MimeType";
+		ellipsize = TRUE;
 		break;
 	default:
 		g_assert_not_reached ();
diff -u -u -r1.30 rb-entry-view.h
--- widgets/rb-entry-view.h	29 Jan 2006 09:45:25 -0000	1.30
+++ widgets/rb-entry-view.h	18 Feb 2006 06:17:55 -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 {
diff -u -u -r1.52 rb-song-info.c
--- widgets/rb-song-info.c	15 Feb 2006 06:04:36 -0000	1.52
+++ widgets/rb-song-info.c	18 Feb 2006 06:17:55 -0000
@@ -45,6 +45,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);
@@ -76,6 +77,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);
@@ -123,6 +125,7 @@
 	GtkWidget   *location;
 	GtkWidget   *play_count;
 	GtkWidget   *last_played;
+	GtkWidget   *mime_type;
 	GtkWidget   *rating;
 
 	RhythmDBPropertyModel* albums;
@@ -262,6 +265,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");
@@ -272,6 +276,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),
@@ -781,6 +786,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);
@@ -981,6 +987,22 @@
 	text = g_strdup_printf ("%ld", num);
 	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
