diff --git a/src/Clients/Nereid/Nereid/PlayerInterface.cs b/src/Clients/Nereid/Nereid/PlayerInterface.cs
index 1b95574..02efbda 100644
--- a/src/Clients/Nereid/Nereid/PlayerInterface.cs
+++ b/src/Clients/Nereid/Nereid/PlayerInterface.cs
@@ -42,6 +42,7 @@ using Banshee.Sources;
 using Banshee.Database;
 using Banshee.Collection;
 using Banshee.Collection.Database;
+using Banshee.Library;
 using Banshee.MediaEngine;
 using Banshee.Configuration;
 
@@ -237,6 +238,7 @@ namespace Nereid
 
             // Service events
             ServiceManager.SourceManager.ActiveSourceChanged += OnActiveSourceChanged;
+            ServiceManager.SourceManager.SourceAdded += OnSourceAdded;
             ServiceManager.SourceManager.SourceUpdated += OnSourceUpdated;
             
             ActionService.TrackActions ["SearchForSameArtistAction"].Activated += OnProgrammaticSearch;
@@ -389,6 +391,14 @@ namespace Nereid
             }
         }
 
+        private void OnSourceAdded (SourceEventArgs args)
+        {
+            if (args.Source is MusicLibrarySource) {
+                (args.Source as MusicLibrarySource).UIPreferencesChanged += OnUIPreferencesChanged;
+                OnUIPreferencesChanged (args.Source, null);
+            }
+        }
+
         private void OnSourceUpdated (SourceEventArgs args)
         {
             if (args.Source == ServiceManager.SourceManager.ActiveSource) {
@@ -402,7 +412,16 @@ namespace Nereid
 #endregion
 
 #region UI Event Handlers
-        
+
+        void OnUIPreferencesChanged(object sender, EventArgs e)
+        {
+            if (composite_view != null) {
+                Banshee.Base.ThreadAssist.ProxyToMain (delegate {
+                    composite_view.ResetViews ();
+                });
+            }
+        }
+
         private void OnSearchEntryChanged (object o, EventArgs args)
         {
             Source source = ServiceManager.SourceManager.ActiveSource;
diff --git a/src/Core/Banshee.Core/Banshee.Configuration.Schema/LibrarySchema.cs b/src/Core/Banshee.Core/Banshee.Configuration.Schema/LibrarySchema.cs
index 8030e76..784e3eb 100644
--- a/src/Core/Banshee.Core/Banshee.Configuration.Schema/LibrarySchema.cs
+++ b/src/Core/Banshee.Core/Banshee.Configuration.Schema/LibrarySchema.cs
@@ -77,5 +77,12 @@ namespace Banshee.Configuration.Schema
             "Write metadata back to audio files",
             "If enabled, metadata (tags) will be written back to audio files when using the track metadata editor."
         );
+
+        public static readonly SchemaEntry<bool> ShowGenre = new SchemaEntry<bool>(
+            "library", "show_genre",
+            true,
+            "Show genre in the browser",
+            "If enabled, the genre filter will be shown in the browser."
+        );
     }
 }
diff --git a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackInfo.cs b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackInfo.cs
index 3a3e8c7..260c0ed 100644
--- a/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackInfo.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection.Database/DatabaseTrackInfo.cs
@@ -107,7 +107,7 @@ namespace Banshee.Collection.Database
             return a != null && b != null && 
                 a.TrackId == b.TrackId && 
                 a.CacheModelId == b.CacheModelId && 
-                (long)a.CacheEntryId == (long)b.CacheEntryId;
+                a.CacheEntryId.Equals (b.CacheEntryId);
         }
         
         public DatabaseArtistInfo Artist {
diff --git a/src/Core/Banshee.Services/Banshee.Library/MusicLibrarySource.cs b/src/Core/Banshee.Services/Banshee.Library/MusicLibrarySource.cs
index e4cedc0..41e2968 100644
--- a/src/Core/Banshee.Services/Banshee.Library/MusicLibrarySource.cs
+++ b/src/Core/Banshee.Services/Banshee.Library/MusicLibrarySource.cs
@@ -42,6 +42,8 @@ namespace Banshee.Library
 {
     public class MusicLibrarySource : LibrarySource
     {
+        public event EventHandler UIPreferencesChanged;
+
         public MusicLibrarySource () : base (Catalog.GetString ("Music Library"), "Library", 40)
         {
             MediaTypes = TrackMediaAttributes.Music | TrackMediaAttributes.AudioStream;
@@ -66,7 +68,11 @@ namespace Banshee.Library
             file_system.Add (new SchemaPreference<string> (LibrarySchema.FilePattern,     
                 Catalog.GetString ("File _name")));
 
-            PreferencesPage.Add (new Section ("misc", Catalog.GetString ("Miscellaneous"), 10));
+            Section misc = PreferencesPage.Add (new Section ("misc",
+                Catalog.GetString ("Miscellaneous"), 10));
+
+            misc.Add (new SchemaPreference<bool> (LibrarySchema.ShowGenre,
+                Catalog.GetString ("Show the list of genres"), null, OnUIPreferencesChanged));
         }
         
         public override string DefaultBaseDirectory {
@@ -81,6 +87,14 @@ namespace Banshee.Library
             get { return non_default_smart_playlists; }
         }
 
+        protected void OnUIPreferencesChanged ()
+        {
+            EventHandler handler = UIPreferencesChanged;
+            if (handler != null) {
+                handler (this, new EventArgs ());
+            }
+        }
+
         private static SmartPlaylistDefinition [] default_smart_playlists = new SmartPlaylistDefinition [] {
             new SmartPlaylistDefinition (
                 Catalog.GetString ("Favorites"),
diff --git a/src/Core/Banshee.Services/Banshee.Sources/DatabaseSource.cs b/src/Core/Banshee.Services/Banshee.Sources/DatabaseSource.cs
index 4d801db..7d017bb 100644
--- a/src/Core/Banshee.Services/Banshee.Sources/DatabaseSource.cs
+++ b/src/Core/Banshee.Services/Banshee.Sources/DatabaseSource.cs
@@ -152,9 +152,9 @@ namespace Banshee.Sources
                 this.genre_model = genre_model;
             }
 
+            yield return genre_model;
             yield return artist_model;
             yield return album_model;
-            yield return genre_model;
         }
 
         protected virtual void AfterInitialized ()
diff --git a/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/CompositeTrackSourceContents.cs b/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/CompositeTrackSourceContents.cs
index 8be3609..b50d7ee 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/CompositeTrackSourceContents.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/CompositeTrackSourceContents.cs
@@ -43,6 +43,7 @@ using Banshee.ServiceStack;
 using Banshee.Collection;
 using Banshee.Collection.Database;
 using Banshee.Configuration;
+using Banshee.Configuration.Schema;
 using Banshee.Gui;
 using Banshee.Collection.Gui;
 
@@ -50,7 +51,7 @@ namespace Banshee.Sources.Gui
 {
     public class CompositeTrackSourceContents : FilteredListSourceContents, ITrackModelSourceContents
     {
-        // private QueryFilterView<string> genre_view;
+        private QueryFilterView<string> genre_view;
         private ArtistListView artist_view;
         private AlbumListView album_view;
         private TrackListView track_view;
@@ -62,16 +63,19 @@ namespace Banshee.Sources.Gui
         protected override void InitializeViews ()
         {
             SetupMainView (track_view = new TrackListView ());
-            // SetupFilterView (genre_view = new QueryFilterView<string> (Catalog.GetString ("Not Set")));
+            SetupFilterView (genre_view = new QueryFilterView<string> (Catalog.GetString ("Not Set")));
             SetupFilterView (artist_view = new ArtistListView ());
             SetupFilterView (album_view = new AlbumListView ());
+            genre_view.Visible = LibrarySchema.ShowGenre.Get ();
+            artist_view.Visible = true;
+            album_view.Visible = true;
         }
         
         protected override void ClearFilterSelections ()
         {
-            // if (genre_view.Model != null) {
-            //     genre_view.Selection.Clear ();
-            // }
+            if (genre_view.Model != null) {
+                genre_view.Selection.Clear ();
+            }
             
             if (artist_view.Model != null) {
                 artist_view.Selection.Clear ();
@@ -82,12 +86,10 @@ namespace Banshee.Sources.Gui
             }
         }
 
-        public void SetModels (TrackListModel track, IListModel<ArtistInfo> artist, IListModel<AlbumInfo> album, IListModel<QueryFilterInfo<string>> genre)
+        public void ResetViews ()
         {
-            SetModel (track);
-            SetModel (artist);
-            SetModel (album);
-            // SetModel (genre);
+            genre_view.Visible = LibrarySchema.ShowGenre.Get ();
+            Layout ();
         }
         
         IListView<TrackInfo> ITrackModelSourceContents.TrackView {
@@ -132,10 +134,10 @@ namespace Banshee.Sources.Gui
                         SetModel (artist_view, (model as IListModel<ArtistInfo>));
                     else if (model is IListModel<AlbumInfo>)
                         SetModel (album_view, (model as IListModel<AlbumInfo>));
-                    // else if (model is IListModel<QueryFilterInfo<string>>)
-                    //    SetModel (genre_view, (model as IListModel<QueryFilterInfo<string>>));
+                    else if (model is IListModel<QueryFilterInfo<string>>)
+                       SetModel (genre_view, (model as IListModel<QueryFilterInfo<string>>));
                     // else
-                    //    Hyena.Log.DebugFormat ("CompositeTrackSourceContents got non-album/artist filter model: {0}", model);
+                    //    Hyena.Log.DebugFormat ("CompositeTrackSourceContents got non-genre/artist/album filter model: {0}", model);
                 }
             }
             
@@ -149,7 +151,7 @@ namespace Banshee.Sources.Gui
             SetModel (track_view, null);
             SetModel (artist_view, null);
             SetModel (album_view, null);
-            // SetModel (genre_view, null);
+            SetModel (genre_view, null);
             track_view.HeaderVisible = false;
         }
 
diff --git a/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/FilteredListSourceContents.cs b/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/FilteredListSourceContents.cs
index 175f9e3..7da65fa 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/FilteredListSourceContents.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Sources.Gui/FilteredListSourceContents.cs
@@ -87,13 +87,8 @@ namespace Banshee.Sources.Gui
             this.name = name;
             InitializeViews ();
             
-            string position = ForcePosition == null ? BrowserPosition.Get () : ForcePosition;
-            if (position == "top") {
-                LayoutTop ();
-            } else {
-                LayoutLeft ();
-            }
-            
+            string position = Layout ();
+
             if (ForcePosition != null) {
                 return;
             }
@@ -205,6 +200,17 @@ namespace Banshee.Sources.Gui
             Layout (true);
         }
 
+        protected string Layout ()
+        {
+            string position = ForcePosition == null ? BrowserPosition.Get () : ForcePosition;
+            if (position == "top") {
+                LayoutTop ();
+            } else {
+                LayoutLeft ();
+            }
+            return position;
+        }
+
         private void Layout (bool top)
         {
             //Hyena.Log.Information ("ListBrowser LayoutLeft");
@@ -215,9 +221,10 @@ namespace Banshee.Sources.Gui
             filter_box.PositionSet = true;
             Paned current_pane = filter_box;
             
-            for (int i = 0; i < filter_scrolled_windows.Count; i++) {
-                ScrolledWindow window = filter_scrolled_windows[i];
-                bool last_even_filter = (i == filter_scrolled_windows.Count - 1 && filter_scrolled_windows.Count % 2 == 0);
+            var visible_windows = filter_scrolled_windows.FindAll (window => window.Child.Visible);
+            for (int i = 0; i < visible_windows.Count; i++) {
+                ScrolledWindow window = visible_windows[i];
+                bool last_even_filter = (i == visible_windows.Count - 1 && visible_windows.Count % 2 == 0);
                 if (i > 0 && !last_even_filter) {
                     Paned new_pane = GetPane (top);
                     current_pane.Pack2 (new_pane, true, false);
