diff --git a/src/Core/Banshee.Services/Banshee.Library/MusicLibrarySource.cs b/src/Core/Banshee.Services/Banshee.Library/MusicLibrarySource.cs
index f549c27..10e8d0e 100644
--- a/src/Core/Banshee.Services/Banshee.Library/MusicLibrarySource.cs
+++ b/src/Core/Banshee.Services/Banshee.Library/MusicLibrarySource.cs
@@ -73,16 +73,19 @@ namespace Banshee.Library
 
             SetFileNamePattern (MusicFileNamePattern);
 
-            Section misc = PreferencesPage.Add (new Section ("misc",
-                Catalog.GetString ("Miscellaneous"), 10));
+            Section album = PreferencesPage.Add (new Section ("albumopts",
+                Catalog.GetString ("Albums options"), 10));
 
-            misc.Add (new SchemaPreference<bool> (LibrarySchema.SortByAlbumYear,
+            album.Add (new SchemaPreference<bool> (LibrarySchema.SortByAlbumYear,
                 Catalog.GetString ("_Sort an artist's albums by year, not title"), null,
                 delegate {
                     DatabaseTrackModel.Resort ();
                     DatabaseTrackModel.Reload ();
                 }
             ));
+
+            PreferencesPage.Add (new Section ("misc",
+                Catalog.GetString ("Miscellaneous"), 10));
         }
 
         public static string GetDefaultBaseDirectory ()
diff --git a/src/Core/Banshee.Services/Banshee.Sources/SourceManager.cs b/src/Core/Banshee.Services/Banshee.Sources/SourceManager.cs
index c430b05..6878128 100644
--- a/src/Core/Banshee.Services/Banshee.Sources/SourceManager.cs
+++ b/src/Core/Banshee.Services/Banshee.Sources/SourceManager.cs
@@ -154,17 +154,17 @@ namespace Banshee.Sources
             source.ChildSourceAdded += OnChildSourceAdded;
             source.ChildSourceRemoved += OnChildSourceRemoved;
 
-            SourceAdded.SafeInvoke (new SourceAddedArgs () {
-                Position = position,
-                Source = source
-            });
-
             if (source is MusicLibrarySource) {
                 music_library = source as MusicLibrarySource;
             } else if (source is VideoLibrarySource) {
                 video_library = source as VideoLibrarySource;
             }
 
+            SourceAdded.SafeInvoke (new SourceAddedArgs () {
+                Position = position,
+                Source = source
+            });
+
             IDBusExportable exportable = source as IDBusExportable;
             if (exportable != null) {
                 ServiceManager.DBusServiceManager.RegisterObject (exportable);
diff --git a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/AlbumListView.cs b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/AlbumListView.cs
index 058e46a..c8f0ed3 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/AlbumListView.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Collection.Gui/AlbumListView.cs
@@ -31,42 +31,118 @@ using System;
 using Hyena.Data;
 using Hyena.Data.Gui;
 
+using Banshee.Preferences;
+using Banshee.Configuration;
+using Banshee.Library;
 using Banshee.Collection;
 using Banshee.ServiceStack;
 using Banshee.MediaEngine;
 using Banshee.Gui;
 
+using Mono.Unix;
+
 namespace Banshee.Collection.Gui
 {
     public class AlbumListView : TrackFilterListView<AlbumInfo>
     {
         private ColumnCellAlbum renderer;
+        private Column classic_layout_column;
+        private DataViewLayoutGrid grid_layout;
 
         public AlbumListView () : base ()
         {
-            if (!String.IsNullOrEmpty (Environment.GetEnvironmentVariable ("BANSHEE_DISABLE_GRID"))) {
-                column_controller.Add (new Column ("Album", renderer = new ColumnCellAlbum (), 1.0));
-                ColumnController = column_controller;
-            } else {
-                var layout = new DataViewLayoutGrid () {
-                    ChildAllocator = () => new DataViewChildAlbum (),
-                    View = this
-                };
-
-                layout.ChildCountChanged += (o, e) => {
-                    var artwork_manager = ServiceManager.Get<ArtworkManager> ();
-                    if (artwork_manager != null && e.Value > 0) {
-                        int size = (int)((DataViewChildAlbum)layout[0]).ImageSize;
-                        artwork_manager.ChangeCacheSize (size, e.Value);
-                    }
-                };
-
-                ViewLayout = layout;
+            renderer = new ColumnCellAlbum ();
+            classic_layout_column = new Column ("Album", renderer, 1.0);
+            grid_layout = new DataViewLayoutGrid () {
+                ChildAllocator = () => new DataViewChildAlbum (),
+                View = this
+            };
+            grid_layout.ChildCountChanged += (o, e) => {
+                var artwork_manager = ServiceManager.Get<ArtworkManager> ();
+                if (artwork_manager != null && e.Value > 0) {
+                    int size = (int)((DataViewChildAlbum)grid_layout[0]).ImageSize;
+                    artwork_manager.ChangeCacheSize (size, e.Value);
+                }
+            };
+
+            ServiceManager.SourceManager.SourceRemoved += UninstallPreferences;
+            ServiceManager.SourceManager.SourceAdded += InstallPreferences;
+            if (ServiceManager.SourceManager.MusicLibrary != null) {
+                InstallPreferences ();
             }
 
+            DisableAlbumGridPref =  new SchemaPreference<bool> (DisableAlbumGrid,
+                    Catalog.GetString ("Disable album grid"),
+                    Catalog.GetString ("Disable album grid and show the classic layout instead"),
+                    ToggleAlbumGrid);
+
+            ToggleAlbumGrid ();
+
             ServiceManager.PlayerEngine.ConnectEvent (OnPlayerEvent, PlayerEvent.TrackInfoUpdated);
         }
 
+        private void ToggleAlbumGrid ()
+        {
+            DisabledAlbumGrid = DisableAlbumGrid.Get ();
+        }
+
+        private PreferenceBase disable_album_grid;
+        private MusicLibrarySource music_lib = null;
+
+        private void InstallPreferences (Sources.SourceAddedArgs args)
+        {
+            if (!args.Source.Equals (ServiceManager.SourceManager.MusicLibrary)) {
+                return;
+            }
+
+            InstallPreferences ();
+        }
+
+        private void InstallPreferences ()
+        {
+            music_lib = ServiceManager.SourceManager.MusicLibrary;
+            disable_album_grid = music_lib.PreferencesPage["albumopts"].Add (DisableAlbumGridPref);
+
+            ServiceManager.SourceManager.SourceAdded -= InstallPreferences;
+        }
+
+        private void UninstallPreferences (Sources.SourceEventArgs args)
+        {
+            if (args.Source.Equals (music_lib)) {
+                return;
+            }
+
+            music_lib.PreferencesPage["albumopts"].Remove (disable_album_grid);
+            music_lib = null;
+
+            ServiceManager.SourceManager.SourceRemoved -= UninstallPreferences;
+        }
+
+        private bool DisabledAlbumGrid {
+            get { return DisableAlbumGrid.Get (); }
+            set {
+                DisableAlbumGrid.Set (value);
+                if (value) {
+                    ViewLayout = null;
+                    column_controller.Add (classic_layout_column);
+                    ColumnController = column_controller;
+                } else {
+                    column_controller.Remove (classic_layout_column);
+                    ColumnController = null;
+                    ViewLayout = grid_layout;
+                }
+            }
+        }
+
+        private static SchemaPreference<bool> DisableAlbumGridPref = null;
+
+        private static readonly SchemaEntry<bool> DisableAlbumGrid = new SchemaEntry<bool> (
+            "player_window", "disable_album_grid",
+            false,
+            "Disable album grid",
+            "Disable album grid and show the classic layout instead"
+        );
+
         protected override Gdk.Size OnMeasureChild ()
         {
             return ViewLayout != null
