diff --git a/src/Core/Banshee.Services/Banshee.Library/HomeDirectoryImportSource.cs b/src/Core/Banshee.Services/Banshee.Library/HomeDirectoryImportSource.cs
index c0a89e0..68712ac 100644
--- a/src/Core/Banshee.Services/Banshee.Library/HomeDirectoryImportSource.cs
+++ b/src/Core/Banshee.Services/Banshee.Library/HomeDirectoryImportSource.cs
@@ -31,32 +31,32 @@ using Mono.Unix;
 
 namespace Banshee.Library
 {
-    public class HomeDirectoryImportSource : IImportSource
+    public class HomeDirectoryImportSource : ImportSource
     {
         public HomeDirectoryImportSource ()
         {
         }
 
-        public void Import ()
+        public override void Import ()
         {
             Banshee.ServiceStack.ServiceManager.Get<LibraryImportManager> ().Enqueue (
                 Environment.GetFolderPath (Environment.SpecialFolder.Personal)
             );
         }
         
-        public string Name {
+        public override string Name {
             get { return Catalog.GetString ("Home Directory"); }
         }
         
-        public string [] IconNames {
+        public override string [] IconNames {
             get { return new string [] { "user-home", "gtk-home" }; }
         }
         
-        public bool CanImport {
+        public override bool CanImport {
             get { return true; }
         }
         
-        public int SortOrder {
+        public override int SortOrder {
             get { return 10; }
         }
     }
diff --git a/src/Core/Banshee.Services/Banshee.Library/IImportSource.cs b/src/Core/Banshee.Services/Banshee.Library/IImportSource.cs
index bef7eaa..d263618 100644
--- a/src/Core/Banshee.Services/Banshee.Library/IImportSource.cs
+++ b/src/Core/Banshee.Services/Banshee.Library/IImportSource.cs
@@ -28,6 +28,8 @@
 
 using System;
 
+using Banshee.Preferences;
+
 namespace Banshee.Library
 {
     public interface IImportSource
@@ -37,5 +39,6 @@ namespace Banshee.Library
         string [] IconNames { get; }
         bool CanImport { get; }
         int SortOrder { get; }
+        ImportSourcePage ImportPreferencesPage { get; }
     }
 }
diff --git a/src/Core/Banshee.Services/Banshee.Library/ImportSource.cs b/src/Core/Banshee.Services/Banshee.Library/ImportSource.cs
new file mode 100644
index 0000000..acb03b2
--- /dev/null
+++ b/src/Core/Banshee.Services/Banshee.Library/ImportSource.cs
@@ -0,0 +1,50 @@
+//
+// ImportSource.cs
+//
+// Author:
+//   Alexander Kojevnikov <alexander@kojevnikov.com>
+//
+// Copyright (C) 2009 Alexander Kojevnikov
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+using Banshee.Preferences;
+
+namespace Banshee.Library
+{
+    public abstract class ImportSource : IImportSource
+    {
+        public abstract void Import ();
+        public abstract string Name { get; }
+        public abstract string [] IconNames { get; }
+        public abstract bool CanImport { get; }
+        public abstract int SortOrder { get; }
+
+        private ImportSourcePage import_prefs_page;
+        public ImportSourcePage ImportPreferencesPage {
+            get {
+                return import_prefs_page ?? (import_prefs_page = new ImportSourcePage (this));
+            }
+        }
+    }
+}
diff --git a/src/Core/Banshee.Services/Banshee.Library/ImportSourceManager.cs b/src/Core/Banshee.Services/Banshee.Library/ImportSourceManager.cs
index 8761f6d..02a5c45 100644
--- a/src/Core/Banshee.Services/Banshee.Library/ImportSourceManager.cs
+++ b/src/Core/Banshee.Services/Banshee.Library/ImportSourceManager.cs
@@ -39,6 +39,12 @@ namespace Banshee.Library
     {
         private HomeDirectoryImportSource home_source = new HomeDirectoryImportSource ();
 
+        private event EventHandler install_widget_adapters;
+        public event EventHandler InstallWidgetAdapters {
+            add { install_widget_adapters += value; }
+            remove { install_widget_adapters -= value; }
+        }
+
         public ImportSourceManager ()
         {
         }
@@ -62,6 +68,14 @@ namespace Banshee.Library
             return GetEnumerator ();
         }
         
+        public void RequestWidgetAdapters ()
+        {
+            EventHandler handler = install_widget_adapters;
+            if (handler != null) {
+                handler (this, EventArgs.Empty);
+            }
+        }
+
         string IService.ServiceName {
             get { return "ImportSourceManager"; }
         }
diff --git a/src/Core/Banshee.Services/Banshee.Library/ThreadPoolImportSource.cs b/src/Core/Banshee.Services/Banshee.Library/ThreadPoolImportSource.cs
index bc085f1..67d294f 100644
--- a/src/Core/Banshee.Services/Banshee.Library/ThreadPoolImportSource.cs
+++ b/src/Core/Banshee.Services/Banshee.Library/ThreadPoolImportSource.cs
@@ -40,7 +40,7 @@ using Banshee.Sources;
 
 namespace Banshee.Library
 {
-    public abstract class ThreadPoolImportSource : IImportSource
+    public abstract class ThreadPoolImportSource : ImportSource
     {
         private bool importing;
         private UserJob user_job;
@@ -127,17 +127,11 @@ namespace Banshee.Library
         
 #region IImportSource
         
-        public abstract string Name { get; }
-
-        public abstract string[] IconNames { get; }
-        
-        public abstract int SortOrder { get; }
-
-        public virtual bool CanImport {
+        public override bool CanImport {
             get { return true; }
         }
 
-        public void Import ()
+        public override void Import ()
         {
             if (importing) {
                 return;
diff --git a/src/Core/Banshee.Services/Banshee.Preferences/ImportSourcePage.cs b/src/Core/Banshee.Services/Banshee.Preferences/ImportSourcePage.cs
new file mode 100644
index 0000000..c6e67f3
--- /dev/null
+++ b/src/Core/Banshee.Services/Banshee.Preferences/ImportSourcePage.cs
@@ -0,0 +1,50 @@
+//
+// ImportSourcePage.cs
+//
+// Author:
+//   Alexander Kojevnikov <alexander@kojevnikov.com>
+//
+// Copyright (C) 2009 Alexander Kojevnikov
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+using Banshee.ServiceStack;
+using Banshee.Library;
+
+namespace Banshee.Preferences
+{
+    public class ImportSourcePage : Page
+    {
+        private readonly IImportSource source;
+
+        public ImportSourcePage (IImportSource source) : base (source.GetType ().Name, source.Name, source.SortOrder)
+        {
+            this.source = source;
+            IconName = source.IconNames[0];
+        }
+
+        public IImportSource ImportSource {
+            get { return source; }
+        }
+    }
+}
diff --git a/src/Core/Banshee.Services/Banshee.Services.csproj b/src/Core/Banshee.Services/Banshee.Services.csproj
index c69346f..68693ba 100644
--- a/src/Core/Banshee.Services/Banshee.Services.csproj
+++ b/src/Core/Banshee.Services/Banshee.Services.csproj
@@ -289,6 +289,8 @@
     <Compile Include="Banshee.ServiceStack\JobScheduler.cs" />
     <Compile Include="Banshee.PlatformServices\ScreensaverManager.cs" />
     <Compile Include="Banshee.PlatformServices\IScreensaverManager.cs" />
+    <Compile Include="Banshee.Preferences\ImportSourcePage.cs" />
+    <Compile Include="Banshee.Library\ImportSource.cs" />
   </ItemGroup>
   <ItemGroup>
     <EmbeddedResource Include="Banshee.Services.addin.xml" />
diff --git a/src/Core/Banshee.Services/Makefile.am b/src/Core/Banshee.Services/Makefile.am
index a903a91..1421f46 100644
--- a/src/Core/Banshee.Services/Makefile.am
+++ b/src/Core/Banshee.Services/Makefile.am
@@ -71,6 +71,7 @@ SOURCES =  \
 	Banshee.Hardware/VendorProductInfo.cs \
 	Banshee.Library/HomeDirectoryImportSource.cs \
 	Banshee.Library/IImportSource.cs \
+	Banshee.Library/ImportSource.cs \
 	Banshee.Library/ImportSourceManager.cs \
 	Banshee.Library/LibraryImportManager.cs \
 	Banshee.Library/LibrarySource.cs \
@@ -139,6 +140,7 @@ SOURCES =  \
 	Banshee.Playlists.Formats/Tests/PlaylistFormatTests.cs \
 	Banshee.Playlists.Formats/XspfPlaylistFormat.cs \
 	Banshee.Preferences/Collection.cs \
+	Banshee.Preferences/ImportSourcePage.cs \
 	Banshee.Preferences/Page.cs \
 	Banshee.Preferences/Preference.cs \
 	Banshee.Preferences/PreferenceBase.cs \
diff --git a/src/Core/Banshee.ThickClient/Banshee.Library.Gui/FileImportSource.cs b/src/Core/Banshee.ThickClient/Banshee.Library.Gui/FileImportSource.cs
index 873d79a..83dafd4 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Library.Gui/FileImportSource.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Library.Gui/FileImportSource.cs
@@ -27,58 +27,92 @@
 //
 
 using System;
+using System.IO;
+using System.Linq;
 using Mono.Unix;
 using Gtk;
 
+using Banshee.Configuration;
+using Banshee.Preferences;
 using Banshee.ServiceStack;
 
 namespace Banshee.Library.Gui
 {
-    public class FileImportSource : IImportSource
+    public class FileImportSource : ImportSource
     {
         public FileImportSource ()
         {
+            Section section = ImportPreferencesPage.Add (
+                new Section ("files", Catalog.GetString ("Import Files to Library"), 0));
+            section.Add (new SchemaEntry<string[]> ("importers.files", "files", null, null, null));
+            var files_pref = (SchemaPreference<string[]>) section["files"];
+
+            ServiceManager.Get<ImportSourceManager> ().InstallWidgetAdapters += delegate {
+                var box = new HBox (false, 5);
+                var entry = new Entry ();
+                entry.IsEditable = false;
+                var button = new Button (new Image (Stock.File, IconSize.Button));
+                button.TooltipText = Catalog.GetString ("Select Files");
+                box.PackStart (entry, true, true, 0);
+                box.PackStart (button, false, false, 0);
+                box.ShowAll ();
+
+                button.Clicked += delegate {
+                    var chooser = new Banshee.Gui.Dialogs.FileChooserDialog (
+                        Catalog.GetString ("Import Files to Library"),
+                        FileChooserAction.Open
+                    );
+
+                    chooser.AddButton (Stock.Cancel, ResponseType.Cancel);
+                    chooser.AddButton (Stock.Open, ResponseType.Ok);
+                    chooser.AddFilter (Hyena.Gui.GtkUtilities.GetFileFilter (
+                        Catalog.GetString ("Media Files"),
+                        Banshee.Collection.Database.DatabaseImportManager.WhiteListFileExtensions.List));
+                    chooser.SelectMultiple = true;
+                    chooser.DefaultResponse = ResponseType.Ok;
+
+                    SetChooserShortcuts (chooser);
+
+                    if (chooser.Run () == (int)ResponseType.Ok) {
+                        files_pref.Value = chooser.Uris;
+                        entry.Text = String.Join (", ", chooser.Uris.Select (
+                            u => Path.GetFileName (new Uri (u).LocalPath)).ToArray ());
+                    }
+
+                    chooser.Destroy ();
+                };
+
+                files_pref.ShowLabel = false;
+                files_pref.DisplayWidget = box;
+            };
         }
     
-        public void Import()
+        public override void Import ()
         {
-            Banshee.Gui.Dialogs.FileChooserDialog chooser = new Banshee.Gui.Dialogs.FileChooserDialog (
-                Catalog.GetString ("Import Files to Library"),
-                FileChooserAction.Open
-            );
-            
-            chooser.AddButton (Stock.Cancel, ResponseType.Cancel);
-            chooser.AddButton (Stock.Open, ResponseType.Ok);
-            chooser.AddFilter (Hyena.Gui.GtkUtilities.GetFileFilter (Catalog.GetString ("Media Files"), Banshee.Collection.Database.DatabaseImportManager.WhiteListFileExtensions.List));
-            chooser.SelectMultiple = true;
-            chooser.DefaultResponse = ResponseType.Ok;
-            
-            SetChooserShortcuts (chooser);
-            
-            if (chooser.Run () == (int)ResponseType.Ok) {
-                Banshee.ServiceStack.ServiceManager.Get<LibraryImportManager> ().Enqueue (chooser.Uris);
+            var files_pref = (SchemaPreference<string[]>) ImportPreferencesPage["files"]["files"];
+
+            if (files_pref.Value != null && files_pref.Value.Length > 0) {
+                Banshee.ServiceStack.ServiceManager.Get<LibraryImportManager> ().Enqueue (files_pref.Value);
             }
-            
-            chooser.Destroy ();
         }
         
-        public string Name {
+        public override string Name {
             get { return Catalog.GetString ("Local Files"); }
         }
         
-        public string [] IconNames {
+        public override string [] IconNames {
             get { return new string [] { "gtk-open" }; }
         }
         
-        public bool CanImport {
+        public override bool CanImport {
             get { return true; }
         }
         
-        public int SortOrder {
+        public override int SortOrder {
             get { return 5; }
         }
         
-        public static void SetChooserShortcuts (Gtk.FileChooserDialog chooser)
+        public static void SetChooserShortcuts (Gtk.FileChooser chooser)
         {
             Hyena.Gui.GtkUtilities.SetChooserShortcuts (chooser,
                 ServiceManager.SourceManager.MusicLibrary.BaseDirectory,
diff --git a/src/Core/Banshee.ThickClient/Banshee.Library.Gui/FolderImportSource.cs b/src/Core/Banshee.ThickClient/Banshee.Library.Gui/FolderImportSource.cs
index f366a2f..a6aaddd 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Library.Gui/FolderImportSource.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Library.Gui/FolderImportSource.cs
@@ -30,46 +30,62 @@ using System;
 using Mono.Unix;
 using Gtk;
 
+using Banshee.Configuration;
+using Banshee.Preferences;
+using Banshee.ServiceStack;
+
 namespace Banshee.Library.Gui
 {
-    public class FolderImportSource : IImportSource
+    public class FolderImportSource : ImportSource
     {
         public FolderImportSource ()
         {
+            Section section = ImportPreferencesPage.Add (
+                new Section ("location", Catalog.GetString ("Import Folder to Library"), 0));
+            section.Add (new SchemaEntry<string> ("importers.folder", "location",
+                Environment.GetFolderPath (Environment.SpecialFolder.Personal), null, null));
+            var location_pref = (SchemaPreference<string>) section["location"];
+
+            ServiceManager.Get<ImportSourceManager> ().InstallWidgetAdapters += delegate {
+                var chooser = new FileChooserButton (
+                    Catalog.GetString ("Import Folder to Library"), FileChooserAction.SelectFolder);
+                FileImportSource.SetChooserShortcuts (chooser);
+
+                location_pref.ShowLabel = false;
+                location_pref.DisplayWidget = chooser;
+
+                if (Banshee.IO.Directory.Exists (location_pref.Value)) {
+                    chooser.SetCurrentFolder (location_pref.Value);
+                }
+
+                chooser.SelectionChanged += delegate {
+                    location_pref.Value = chooser.Filename;
+                };
+            };
         }
-    
-        public void Import()
+
+        public override void Import()
         {
-            Banshee.Gui.Dialogs.FileChooserDialog chooser = new Banshee.Gui.Dialogs.FileChooserDialog (
-                Catalog.GetString ("Import Folder to Library"),
-                FileChooserAction.SelectFolder
-            );
+            var location_pref = (SchemaPreference<string>) ImportPreferencesPage["location"]["location"];
             
-            chooser.AddButton (Stock.Cancel, ResponseType.Cancel);
-            chooser.AddButton (Stock.Open, ResponseType.Ok);
-            chooser.DefaultResponse = ResponseType.Ok;
-            FileImportSource.SetChooserShortcuts (chooser);
-            
-            if (chooser.Run () == (int)ResponseType.Ok) {
-                Banshee.ServiceStack.ServiceManager.Get<LibraryImportManager> ().Enqueue (chooser.Uri);
+            if (Banshee.IO.Directory.Exists (location_pref.Value)) {
+                Banshee.ServiceStack.ServiceManager.Get<LibraryImportManager> ().Enqueue (location_pref.Value);
             }
-            
-            chooser.Destroy ();
         }
         
-        public string Name {
+        public override string Name {
             get { return Catalog.GetString ("Local Folder"); }
         }
         
-        public string [] IconNames {
+        public override string [] IconNames {
             get { return new string [] { "gtk-open" }; }
         }
         
-        public bool CanImport {
+        public override bool CanImport {
             get { return true; }
         }
         
-        public int SortOrder {
+        public override int SortOrder {
             get { return 0; }
         }
     }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Library.Gui/ImportDialog.cs b/src/Core/Banshee.ThickClient/Banshee.Library.Gui/ImportDialog.cs
index 3a05602..75863da 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Library.Gui/ImportDialog.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Library.Gui/ImportDialog.cs
@@ -28,9 +28,10 @@
 
 using System;
 using System.Collections.Generic;
-using Gtk;
 using Glade;
 
+using Banshee.Preferences;
+using Banshee.Preferences.Gui;
 using Banshee.Sources;
 using Banshee.ServiceStack;
 using Banshee.Gui;
@@ -40,9 +41,9 @@ namespace Banshee.Library.Gui
 {
     public class ImportDialog : GladeDialog
     {
-        private ComboBox source_combo_box;
-        private ListStore source_model;
-        private AccelGroup accel_group;
+        private Page page;
+        private NotebookPage page_ui;
+        private Gtk.AccelGroup accel_group;
 
         [Widget] private Gtk.Label choose_label;
 
@@ -52,105 +53,56 @@ namespace Banshee.Library.Gui
         
         public ImportDialog (bool doNotShowAgainVisible) : base ("ImportDialog")
         {
-            accel_group = new AccelGroup ();
+            accel_group = new Gtk.AccelGroup ();
 
             if (ServiceManager.Contains ("GtkElementsService")) {
                 Dialog.TransientFor = ServiceManager.Get<GtkElementsService> ().PrimaryWindow;
             }
             
-            Dialog.WindowPosition = WindowPosition.CenterOnParent;
+            Dialog.WindowPosition = Gtk.WindowPosition.CenterOnParent;
             Dialog.AddAccelGroup (accel_group);
-            Dialog.DefaultResponse = ResponseType.Ok;
+            Dialog.DefaultResponse = Gtk.ResponseType.Ok;
 
             DoNotShowAgainVisible = doNotShowAgainVisible;
+
+            LoadPages ();
             
-            PopulateSourceList ();
-            
-            ServiceManager.SourceManager.SourceAdded += OnSourceAdded;
-            ServiceManager.SourceManager.SourceRemoved += OnSourceRemoved;
-            ServiceManager.SourceManager.SourceUpdated += OnSourceUpdated;
+            //ServiceManager.SourceManager.SourceAdded += OnSourceAdded;
+            //ServiceManager.SourceManager.SourceRemoved += OnSourceRemoved;
+            //ServiceManager.SourceManager.SourceUpdated += OnSourceUpdated;
             
             Glade["MessageLabel"].Visible = ServiceManager.SourceManager.DefaultSource.Count == 0;
             
-            (Glade["ImportButton"] as Button).AddAccelerator ("activate", accel_group, 
-                (uint)Gdk.Key.Return, 0, AccelFlags.Visible);
-            
-            Dialog.StyleSet += delegate {
-                UpdateIcons ();
-            };
+            (Glade["ImportButton"] as Gtk.Button).AddAccelerator ("activate", accel_group,
+                (uint)Gdk.Key.Return, 0, Gtk.AccelFlags.Visible);
         }
-        
-        private void PopulateSourceList ()
+
+        private void LoadPages ()
         {
-            source_model = new ListStore (typeof (Gdk.Pixbuf), typeof (string), typeof (IImportSource));
-            
-            source_combo_box = new ComboBox ();
-            source_combo_box.Model = source_model;
-            choose_label.MnemonicWidget = source_combo_box;
-            
-            CellRendererPixbuf pixbuf_cr = new CellRendererPixbuf ();
-            CellRendererText text_cr = new CellRendererText ();
-            
-            source_combo_box.PackStart (pixbuf_cr, false);
-            source_combo_box.PackStart (text_cr, true);
-            source_combo_box.SetAttributes (pixbuf_cr, "pixbuf", 0);
-            source_combo_box.SetAttributes (text_cr, "text", 1);
-            
-            TreeIter active_iter = TreeIter.Zero;
-            
-            List<IImportSource> sources = new List<IImportSource> ();
-            
+            page = new Page ();
+
             // Add the standalone import sources
             foreach (IImportSource source in ServiceManager.Get<ImportSourceManager> ()) {
-                sources.Add (source);
+                page.ChildPages.Add (source.ImportPreferencesPage);
             }
-            
+
             // Find active sources that implement IImportSource
             foreach (Source source in ServiceManager.SourceManager.Sources) {
                 if (source is IImportSource) {
-                    sources.Add ((IImportSource)source);
-                }
-            }
-            
-            // Sort the sources by their SortOrder properties
-            sources.Sort (import_source_comparer);
-            
-            // And actually add them to the dialog
-            foreach (IImportSource source in sources) {
-                AddSource (source);
-            }
-            
-            if (!active_iter.Equals(TreeIter.Zero) || (active_iter.Equals (TreeIter.Zero) && 
-                source_model.GetIterFirst (out active_iter))) {
-                source_combo_box.SetActiveIter (active_iter);
-            } 
-            
-            (Glade["ComboVBox"] as Box).PackStart (source_combo_box, false, false, 0);
-            source_combo_box.ShowAll ();
-        }
-        
-        private void UpdateIcons ()
-        {
-            for (int i = 0, n = source_model.IterNChildren (); i < n; i++) {
-                TreeIter iter;
-                if (source_model.IterNthChild (out iter, i)) {
-                    object o = source_model.GetValue (iter, 0);
-                    IImportSource source = (IImportSource)source_model.GetValue (iter, 2);
-                    if (o != null) {
-                        ((Gdk.Pixbuf)o).Dispose ();
-                    }
-                    
-                    source_model.SetValue (iter, 0, GetIcon (source));
+                    page.ChildPages.Add ((source as IImportSource).ImportPreferencesPage);
                 }
             }
+
+            ServiceManager.Get<ImportSourceManager> ().RequestWidgetAdapters ();
+
+            page_ui = new NotebookPage (page);
+            choose_label.MnemonicWidget = page_ui.PageComboBox;
+            page_ui.Show ();
+            (Glade["ComboVBox"] as Gtk.Box).PackStart (page_ui, false, false, 0);
         }
         
-        private Gdk.Pixbuf GetIcon (IImportSource source)
-        {
-            return IconThemeUtils.LoadIcon (22, source.IconNames);
-        }
-        
-        private TreeIter AddSource (IImportSource source)
+        // TODO:
+        /*private TreeIter AddSource (IImportSource source)
         {
             if (source == null) {
                 return TreeIter.Zero;
@@ -207,7 +159,7 @@ namespace Banshee.Library.Gui
             }
             
             return false;
-        }
+        }*/
         
         public bool DoNotShowAgainVisible {
             get { return Glade["DoNotShowCheckBox"].Visible; }
@@ -215,29 +167,14 @@ namespace Banshee.Library.Gui
         }
         
         public bool DoNotShowAgain {
-            get { return (Glade["DoNotShowCheckBox"] as CheckButton).Active; }
+            get { return (Glade["DoNotShowCheckBox"] as Gtk.CheckButton).Active; }
         }
         
         public IImportSource ActiveSource {
             get {
-                TreeIter iter; 
-                if (source_combo_box.GetActiveIter (out iter)) {
-                    return (IImportSource)source_model.GetValue (iter, 2);
-                }
-                
-                return null;
-            }
-        }
-         
-        private static IComparer<IImportSource> import_source_comparer = new ImportSourceComparer ();
-        private class ImportSourceComparer : IComparer<IImportSource>
-        {
-            public int Compare (IImportSource a, IImportSource b)
-            {
-                int ret = a.SortOrder.CompareTo (b.SortOrder);
-                return ret != 0
-                    ? ret
-                    : a.Name.CompareTo (b.Name);
+                int i = page_ui.PageComboBox.Active;
+                var active_page = (ImportSourcePage) (page.ChildPages as IList<Page>)[i];
+                return active_page.ImportSource;
             }
         }
     }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Library.Gui/PhotoFolderImportSource.cs b/src/Core/Banshee.ThickClient/Banshee.Library.Gui/PhotoFolderImportSource.cs
index 31249df..afa6a8b 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Library.Gui/PhotoFolderImportSource.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Library.Gui/PhotoFolderImportSource.cs
@@ -34,7 +34,7 @@ using Banshee.Base;
 
 namespace Banshee.Library.Gui
 {
-    public class PhotoFolderImportSource : IImportSource
+    public class PhotoFolderImportSource : ImportSource
     {
         private string [] photo_folders;
         
@@ -57,21 +57,21 @@ namespace Banshee.Library.Gui
             }
         }
     
-        public void Import ()
+        public override void Import ()
         {
             Hyena.Log.DebugFormat ("Importing photo folder: {0}", PhotoFolder);
             Banshee.ServiceStack.ServiceManager.Get<LibraryImportManager> ().Enqueue (PhotoFolder);
         }
         
-        public string Name {
+        public override string Name {
             get { return Catalog.GetString ("Videos from Photos Folder"); }
         }
         
-        public string [] IconNames {
+        public override string [] IconNames {
             get { return new string [] { "gtk-open" }; }
         }
         
-        public bool CanImport {
+        public override bool CanImport {
             get { return PhotoFolder != null; }
         }
         
@@ -86,8 +86,8 @@ namespace Banshee.Library.Gui
             }
         }
         
-        public int SortOrder {
-            get { return 0; }
+        public override int SortOrder {
+            get { return 2; }
         }
     }
 }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/NotebookPage.cs b/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/NotebookPage.cs
index 4e153b0..78f0d21 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/NotebookPage.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/NotebookPage.cs
@@ -44,6 +44,11 @@ namespace Banshee.Preferences.Gui
         public Widget TabWidget {
             get { return tab_widget; }
         }
+
+        private PageComboBox page_combo;
+        public PageComboBox PageComboBox {
+            get { return page_combo; }
+        }
         
         public NotebookPage (Page page)
         {
@@ -70,7 +75,7 @@ namespace Banshee.Preferences.Gui
                     notebook.ShowTabs = false;
                     notebook.Show ();
 
-                    PageComboBox page_combo = new PageComboBox (page.ChildPages, notebook);
+                    page_combo = new PageComboBox (page.ChildPages, notebook);
                     PackStart (page_combo, false, false, 0);
 
                     HSeparator sep = new HSeparator ();
diff --git a/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/PageComboBox.cs b/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/PageComboBox.cs
index fb8c2c7..0bfd778 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/PageComboBox.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/PageComboBox.cs
@@ -29,6 +29,7 @@ using System;
 using System.Collections.Generic;
 using Gtk;
 
+using Banshee.Gui;
 using Banshee.ServiceStack;
 
 namespace Banshee.Preferences.Gui
@@ -66,6 +67,10 @@ namespace Banshee.Preferences.Gui
                 );
             }
 
+            StyleSet += delegate {
+                UpdateIcons ();
+            };
+
             Active = 0;
             Show ();
         }
@@ -85,5 +90,21 @@ namespace Banshee.Preferences.Gui
         {
             notebook.CurrentPage = Active;
         }
+
+        private void UpdateIcons ()
+        {
+            for (int i = 0, n = model.IterNChildren (); i < n; i++) {
+                TreeIter iter;
+                if (model.IterNthChild (out iter, i)) {
+                    object o = model.GetValue (iter, 0);
+                    var page = (Page) model.GetValue (iter, 3);
+                    if (o != null) {
+                        ((Gdk.Pixbuf)o).Dispose ();
+                    }
+
+                    model.SetValue (iter, 0, IconThemeUtils.LoadIcon (22, page.IconName));
+                }
+            }
+        }
     } 
 }
diff --git a/src/Dap/Banshee.Dap/Banshee.Dap/RemovableSource.cs b/src/Dap/Banshee.Dap/Banshee.Dap/RemovableSource.cs
index 2cb1cb8..cc6ad5b 100644
--- a/src/Dap/Banshee.Dap/Banshee.Dap/RemovableSource.cs
+++ b/src/Dap/Banshee.Dap/Banshee.Dap/RemovableSource.cs
@@ -34,6 +34,7 @@ using Mono.Unix;
 using Hyena;
 using Banshee.Base;
 using Banshee.Library;
+using Banshee.Preferences;
 using Banshee.ServiceStack;
 using Banshee.Sources;
 using Banshee.Collection;
@@ -92,6 +93,13 @@ namespace Banshee.Dap
             get { return 20; }
         }
 
+        private ImportSourcePage import_prefs_page;
+        ImportSourcePage IImportSource.ImportPreferencesPage {
+            get {
+                return import_prefs_page ?? (import_prefs_page = new ImportSourcePage (this));
+            }
+        }
+
 #region IUnmapableSource Implementation
 
         public bool Unmap ()
diff --git a/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdSource.cs b/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdSource.cs
index fdbab2c..a2774d4 100644
--- a/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdSource.cs
+++ b/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdSource.cs
@@ -36,6 +36,7 @@ using Banshee.Base;
 using Banshee.ServiceStack;
 using Banshee.Sources;
 using Banshee.Library;
+using Banshee.Preferences;
 using Banshee.Collection;
 using Banshee.Collection.Database;
 
@@ -478,6 +479,13 @@ namespace Banshee.AudioCd
         int IImportSource.SortOrder {
             get { return -10; }
         }
+
+        private ImportSourcePage import_prefs_page;
+        ImportSourcePage IImportSource.ImportPreferencesPage {
+            get {
+                return import_prefs_page ?? (import_prefs_page = new ImportSourcePage (this));
+            }
+        }
         
 #endregion
 
diff --git a/src/Extensions/Banshee.Daap/Banshee.Daap/DaapSource.cs b/src/Extensions/Banshee.Daap/Banshee.Daap/DaapSource.cs
index 0830a23..2be64cc 100644
--- a/src/Extensions/Banshee.Daap/Banshee.Daap/DaapSource.cs
+++ b/src/Extensions/Banshee.Daap/Banshee.Daap/DaapSource.cs
@@ -37,6 +37,7 @@ using Banshee.Base;
 using Banshee.Collection;
 using Banshee.Collection.Database;
 using Banshee.Library;
+using Banshee.Preferences;
 using Banshee.Sources;
 using Banshee.ServiceStack;
 
@@ -357,5 +358,12 @@ namespace Banshee.Daap
         public string [] IconNames {
             get { return Properties.GetStringList ("Icon.Name"); }
         }
+
+        private ImportSourcePage prefs_page;
+        ImportSourcePage IImportSource.ImportPreferencesPage {
+            get {
+                return prefs_page ?? (prefs_page = new ImportSourcePage (this));
+            }
+        }
     }
 }
diff --git a/src/Libraries/Hyena.Gui/Hyena.Gui/GtkUtilities.cs b/src/Libraries/Hyena.Gui/Hyena.Gui/GtkUtilities.cs
index 4b94c42..52d5469 100644
--- a/src/Libraries/Hyena.Gui/Hyena.Gui/GtkUtilities.cs
+++ b/src/Libraries/Hyena.Gui/Hyena.Gui/GtkUtilities.cs
@@ -77,7 +77,7 @@ namespace Hyena.Gui
             return filter;
         }
         
-        public static void SetChooserShortcuts (Gtk.FileChooserDialog chooser, params string [] shortcuts)
+        public static void SetChooserShortcuts (Gtk.FileChooser chooser, params string [] shortcuts)
         {
             foreach (string shortcut in shortcuts) {
                 try {
