diff --git a/src/Core/Banshee.Services/Banshee.Library/HomeDirectoryImportSource.cs b/src/Core/Banshee.Services/Banshee.Library/HomeDirectoryImportSource.cs
index c0a89e0..a139564 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 {
-            get { return Catalog.GetString ("Home Directory"); }
+        public override string Name {
+            get { return Catalog.GetString ("Home Folder"); }
         }
         
-        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..7f91a65 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<InstallWidgetAdaptersEventArgs> install_widget_adapters;
+        public event EventHandler<InstallWidgetAdaptersEventArgs> InstallWidgetAdapters {
+            add { install_widget_adapters += value; }
+            remove { install_widget_adapters -= value; }
+        }
+
         public ImportSourceManager ()
         {
         }
@@ -62,8 +68,29 @@ namespace Banshee.Library
             return GetEnumerator ();
         }
         
+        public void RequestWidgetAdapters (IImportSource import_source)
+        {
+            var handler = install_widget_adapters;
+            if (handler != null) {
+                handler (this, new InstallWidgetAdaptersEventArgs (import_source));
+            }
+        }
+
         string IService.ServiceName {
             get { return "ImportSourceManager"; }
         }
     }
+
+    public class InstallWidgetAdaptersEventArgs : EventArgs
+    {
+        private IImportSource import_source;
+        public IImportSource ImportSource {
+            get { return import_source; }
+        }
+
+        public InstallWidgetAdaptersEventArgs (IImportSource import_source)
+        {
+            this.import_source = import_source;
+        }
+    }
 }
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..01d244d
--- /dev/null
+++ b/src/Core/Banshee.Services/Banshee.Preferences/ImportSourcePage.cs
@@ -0,0 +1,57 @@
+//
+// 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.Sources;
+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];
+
+            if (source is Source) {
+                (source as Source).Updated += delegate {
+                    Name = source.Name;
+                };
+            }
+        }
+
+        public IImportSource ImportSource {
+            get { return source; }
+        }
+    }
+}
diff --git a/src/Core/Banshee.Services/Banshee.Preferences/Section.cs b/src/Core/Banshee.Services/Banshee.Preferences/Section.cs
index b1bca36..9a9ab17 100644
--- a/src/Core/Banshee.Services/Banshee.Preferences/Section.cs
+++ b/src/Core/Banshee.Services/Banshee.Preferences/Section.cs
@@ -35,17 +35,16 @@ namespace Banshee.Preferences
 {
     public class Section : Collection<PreferenceBase>
     {
-        private bool show_label = true;
-        public bool ShowLabel {
-            get { return show_label; }
-            set { show_label = value; }
-        }
+        public bool ShowLabel { get; set; }
+        public bool Indent { get; set; }
 
         public Section ()
         {
+            ShowLabel = true;
+            Indent = true;
         }
         
-        public Section (string id, string name, int order)
+        public Section (string id, string name, int order) : this ()
         {
             Id = id;
             Name = name;
diff --git a/src/Core/Banshee.Services/Banshee.Services.csproj b/src/Core/Banshee.Services/Banshee.Services.csproj
index d6a5ccc..c5feb86 100644
--- a/src/Core/Banshee.Services/Banshee.Services.csproj
+++ b/src/Core/Banshee.Services/Banshee.Services.csproj
@@ -296,6 +296,8 @@
     <Compile Include="Banshee.PlatformServices\IScreensaverManager.cs" />
     <Compile Include="Banshee.Collection.Database\RandomByScore.cs" />
     <Compile Include="Banshee.Collection.Database\RandomBySlot.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 c36d426..c55cb93 100644
--- a/src/Core/Banshee.Services/Makefile.am
+++ b/src/Core/Banshee.Services/Makefile.am
@@ -77,6 +77,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 \
@@ -145,6 +146,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.Gui/GlobalActions.cs b/src/Core/Banshee.ThickClient/Banshee.Gui/GlobalActions.cs
index e314690..9888400 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui/GlobalActions.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui/GlobalActions.cs
@@ -137,7 +137,7 @@ namespace Banshee.Gui
                 if (dialog.Run () != Gtk.ResponseType.Ok) {
                     return;
                 }
-                    
+
                 dialog.ActiveSource.Import ();
             } finally {
                 dialog.Destroy ();
diff --git a/src/Core/Banshee.ThickClient/Banshee.Library.Gui/FileImportSource.cs b/src/Core/Banshee.ThickClient/Banshee.Library.Gui/FileImportSource.cs
index 868968c..571fa6a 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Library.Gui/FileImportSource.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Library.Gui/FileImportSource.cs
@@ -1,10 +1,12 @@
 //
 // FileImportSource.cs
 //
-// Author:
+// Authors:
 //   Aaron Bockover <abockover@novell.com>
+//   Alexander Kojevnikov <alexander@kojevnikov.com>
 //
 // Copyright (C) 2006-2007 Novell, Inc.
+// 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
@@ -27,58 +29,119 @@
 //
 
 using System;
+using System.Collections.Generic;
+using System.IO;
 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.ShowLabel = false;
+            section.Indent = false;
+            section.Add (new SchemaEntry<string[]> ("importers.files", "files", null, null, null));
+            var files_pref = (SchemaPreference<string[]>) section["files"];
+
+            ServiceManager.Get<ImportSourceManager> ().InstallWidgetAdapters += delegate (object sender, InstallWidgetAdaptersEventArgs e) {
+                if (e.ImportSource != null && e.ImportSource != this) {
+                    return;
+                }
+
+                files_pref.Value = new string[] {};
+
+                var hbox = new HBox (false, 0);
+                var button = new Button (Catalog.GetString ("Browse..."));
+                hbox.PackStart (button, false, false, 0);
+
+                var files_box = new VBox (false, 6);
+                var scrolled = new ScrolledWindow ();
+                scrolled.AddWithViewport (files_box);
+                var none_label = new Label (Catalog.GetString ("(none selected)")) { Xalign = 0 };
+                files_box.PackStart (none_label, false, false, 0);
+
+                var vbox = new VBox (false, 6);
+                vbox.PackStart (hbox, false, false, 0);
+                vbox.PackStart (scrolled, false, false, 0);
+                vbox.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) {
+                        var list = new List<string> (files_pref.Value);
+                        list.AddRange (chooser.Uris);
+                        files_pref.Value = list.ToArray ();
+
+                        if (files_box.Children[0] == none_label) {
+                            files_box.Remove (none_label);
+                        }
+
+                        foreach (var path in chooser.Filenames) {
+                            var file_label = new Label (Path.GetFileName (path));
+                            file_label.Xalign = 0;
+                            file_label.Ellipsize = Pango.EllipsizeMode.End;
+                            file_label.UseUnderline = false;
+                            file_label.Show ();
+                            files_box.PackStart (file_label, false, false, 0);
+                        }
+                    }
+
+                    chooser.Destroy ();
+                };
+
+                files_pref.ShowLabel = false;
+                files_pref.DisplayWidget = vbox;
+            };
         }
-    
-        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 c734f2a..c4dc14b 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Library.Gui/FolderImportSource.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Library.Gui/FolderImportSource.cs
@@ -1,10 +1,12 @@
 //
 // FolderImportSource.cs
 //
-// Author:
+// Authors:
 //   Aaron Bockover <abockover@novell.com>
+//   Alexander Kojevnikov <alexander@kojevnikov.com>
 //
 // Copyright (C) 2006-2007 Novell, Inc.
+// 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
@@ -27,50 +29,112 @@
 //
 
 using System;
+using System.Collections.Generic;
+using System.IO;
 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 ("folders", Catalog.GetString ("Import Folders to Library"), 0));
+            section.ShowLabel = false;
+            section.Indent = false;
+            section.Add (new SchemaEntry<string[]> ("importers.folders", "folders", null, null, null));
+            var folders_pref = (SchemaPreference<string[]>) section["folders"];
+
+            ServiceManager.Get<ImportSourceManager> ().InstallWidgetAdapters += delegate (object sender, InstallWidgetAdaptersEventArgs e) {
+                if (e.ImportSource != null && e.ImportSource != this) {
+                    return;
+                }
+
+                folders_pref.Value = new string[]{};
+
+                var hbox = new HBox (false, 0);
+                var button = new Button (Catalog.GetString ("Browse..."));
+                hbox.PackStart (button, false, false, 0);
+
+                var folders_box = new VBox (false, 6);
+                var scrolled = new ScrolledWindow ();
+                scrolled.AddWithViewport (folders_box);
+                var none_label = new Label (Catalog.GetString ("(none selected)")) { Xalign = 0 };
+                folders_box.PackStart (none_label, false, false, 0);
+
+                var vbox = new VBox (false, 6);
+                vbox.PackStart (hbox, false, false, 0);
+                vbox.PackStart (scrolled, false, false, 0);
+                vbox.ShowAll ();
+
+                button.Clicked += delegate {
+                    var chooser = new Banshee.Gui.Dialogs.FileChooserDialog (
+                        Catalog.GetString ("Import Folders to Library"),
+                        FileChooserAction.SelectFolder
+                    );
+
+                    chooser.AddButton (Stock.Cancel, ResponseType.Cancel);
+                    chooser.AddButton (Stock.Open, ResponseType.Ok);
+                    chooser.SelectMultiple = true;
+                    chooser.DefaultResponse = ResponseType.Ok;
+
+                    FileImportSource.SetChooserShortcuts (chooser);
+
+                    if (chooser.Run () == (int)ResponseType.Ok) {
+                        var list = new List<string> (folders_pref.Value);
+                        list.AddRange (chooser.Uris);
+                        folders_pref.Value = list.ToArray ();
+
+                        if (folders_box.Children[0] == none_label) {
+                            folders_box.Remove (none_label);
+                        }
+
+                        foreach (var path in chooser.Filenames) {
+                            var file_label = new Label (Path.GetFileName (path));
+                            file_label.Xalign = 0;
+                            file_label.Ellipsize = Pango.EllipsizeMode.End;
+                            file_label.UseUnderline = false;
+                            file_label.Show ();
+                            folders_box.PackStart (file_label, false, false, 0);
+                        }
+                    }
+
+                    chooser.Destroy ();
+                };
+
+                folders_pref.ShowLabel = false;
+                folders_pref.DisplayWidget = vbox;
+            };
         }
-    
-        public void Import()
+
+        public override void Import()
         {
-            Banshee.Gui.Dialogs.FileChooserDialog chooser = new Banshee.Gui.Dialogs.FileChooserDialog (
-                Catalog.GetString ("Import Folders to Library"),
-                FileChooserAction.SelectFolder
-            );
-            
-            chooser.AddButton (Stock.Cancel, ResponseType.Cancel);
-            chooser.AddButton (Stock.Open, ResponseType.Ok);
-            chooser.SelectMultiple = true;
-            chooser.DefaultResponse = ResponseType.Ok;
-            FileImportSource.SetChooserShortcuts (chooser);
-            
-            if (chooser.Run () == (int)ResponseType.Ok) {
-                Banshee.ServiceStack.ServiceManager.Get<LibraryImportManager> ().Enqueue (chooser.Uris);
+            var folders_pref = (SchemaPreference<string[]>) ImportPreferencesPage["folders"]["folders"];
+
+            if (folders_pref.Value != null && folders_pref.Value.Length > 0) {
+                Banshee.ServiceStack.ServiceManager.Get<LibraryImportManager> ().Enqueue (folders_pref.Value);
             }
-            
-            chooser.Destroy ();
         }
-        
-        public string Name {
+
+        public override string Name {
             get { return Catalog.GetString ("Local Folders"); }
         }
-        
-        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..5d80fe0 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Library.Gui/ImportDialog.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Library.Gui/ImportDialog.cs
@@ -1,10 +1,12 @@
 // 
 // ImportDialog.cs
 //
-// Author:
+// Authors:
 //   Aaron Bockover <abockover@novell.com>
+//   Alexander Kojevnikov <alexander@kojevnikov.com>
 //
 // Copyright (C) 2006-2007 Novell, Inc.
+// 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
@@ -28,9 +30,11 @@
 
 using System;
 using System.Collections.Generic;
-using Gtk;
 using Glade;
 
+using Banshee.Base;
+using Banshee.Preferences;
+using Banshee.Preferences.Gui;
 using Banshee.Sources;
 using Banshee.ServiceStack;
 using Banshee.Gui;
@@ -40,9 +44,8 @@ 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;
 
         [Widget] private Gtk.Label choose_label;
 
@@ -52,19 +55,19 @@ namespace Banshee.Library.Gui
         
         public ImportDialog (bool doNotShowAgainVisible) : base ("ImportDialog")
         {
-            accel_group = new AccelGroup ();
+            var 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;
-            
-            PopulateSourceList ();
+
+            LoadPages ();
             
             ServiceManager.SourceManager.SourceAdded += OnSourceAdded;
             ServiceManager.SourceManager.SourceRemoved += OnSourceRemoved;
@@ -72,172 +75,101 @@ namespace Banshee.Library.Gui
             
             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);
+                    page.ChildPages.Add ((source as IImportSource).ImportPreferencesPage);
                 }
             }
-            
-            // 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));
-                }
-            }
-        }
-        
-        private Gdk.Pixbuf GetIcon (IImportSource source)
-        {
-            return IconThemeUtils.LoadIcon (22, source.IconNames);
+
+            ServiceManager.Get<ImportSourceManager> ().RequestWidgetAdapters (null);
+
+            page_ui = new NotebookPage (page);
+            page_ui.BorderWidth = 0;
+            choose_label.MnemonicWidget = page_ui.PageComboBox;
+            page_ui.Show ();
+            (Glade["ComboVBox"] as Gtk.Box).PackStart (page_ui, false, false, 0);
         }
         
-        private TreeIter AddSource (IImportSource source)
+        private void OnSourceAdded (SourceAddedArgs args)
         {
+            var source = args.Source as IImportSource;
             if (source == null) {
-                return TreeIter.Zero;
+                return;
             }
-            
-            return source_model.AppendValues (GetIcon (source), source.Name, source);
-        }
-        
-        private void OnSourceAdded (SourceAddedArgs args)
-        {
-            if(args.Source is IImportSource) {
-                Banshee.Base.ThreadAssist.ProxyToMain (delegate {
-                    AddSource ((IImportSource)args.Source);
-                });
+
+            var source_page = source.ImportPreferencesPage;
+            if (source_page == null) {
+                return;
             }
+
+            ThreadAssist.ProxyToMain (delegate {
+                page.ChildPages.Add (source_page);
+                page_ui.PageComboBox.AddPage (source_page);
+                ServiceManager.Get<ImportSourceManager> ().RequestWidgetAdapters (source);
+            });
         }
         
         private void OnSourceRemoved (SourceEventArgs args)
         {
-            if (args.Source is IImportSource) {
-                Banshee.Base.ThreadAssist.ProxyToMain (delegate {
-                    TreeIter iter;
-                    if (FindSourceIter (out iter, (IImportSource)args.Source)) {
-                        source_model.Remove (ref iter);
-                    }
-                });
+            var source = args.Source as IImportSource;
+            if (source == null) {
+                return;
             }
+
+            var source_page = source.ImportPreferencesPage;
+            if (source_page == null) {
+                return;
+            }
+
+            ThreadAssist.ProxyToMain (delegate {
+                page.ChildPages.Remove (source_page);
+                page_ui.PageComboBox.RemovePage (source_page);
+            });
         }
         
         private void OnSourceUpdated (SourceEventArgs args)
         {
-            if (args.Source is IImportSource) {
-                Banshee.Base.ThreadAssist.ProxyToMain (delegate {
-                    TreeIter iter;
-                    if(FindSourceIter (out iter, (IImportSource)args.Source)) {
-                        source_model.SetValue (iter, 1, args.Source.Name);
-                    }
-                });
+            var source = args.Source as IImportSource;
+            if (source == null) {
+                return;
             }
-        }
-        
-        private bool FindSourceIter (out TreeIter iter, IImportSource source)
-        {
-            iter = TreeIter.Zero;
-            
-            for (int i = 0, n = source_model.IterNChildren (); i < n; i++) {
-                TreeIter _iter;
-                if (source_model.IterNthChild (out _iter, i)) {
-                    if (source == source_model.GetValue (_iter, 2)) {
-                        iter = _iter;
-                        return true;
-                    }
-                }
+
+            var source_page = source.ImportPreferencesPage;
+            if (source_page == null) {
+                return;
             }
-            
-            return false;
+
+            ThreadAssist.ProxyToMain (delegate {
+                page_ui.PageComboBox.UpdatePage (source_page);
+            });
         }
-        
+
         public bool DoNotShowAgainVisible {
             get { return Glade["DoNotShowCheckBox"].Visible; }
             set { Glade["DoNotShowCheckBox"].Visible = value; }
         }
         
         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);
+                return (page_ui.PageComboBox.ActivePage as ImportSourcePage).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..e9024b3 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/NotebookPage.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/NotebookPage.cs
@@ -1,10 +1,12 @@
 //
-// PreferencePage.cs
+// NotebookPage.cs
 //
-// Author:
+// Authors:
 //   Aaron Bockover <abockover@novell.com>
+//   Alexander Kojevnikov <alexander@kojevnikov.com>
 //
 // Copyright (C) 2008 Novell, Inc.
+// 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
@@ -44,6 +46,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,25 +77,44 @@ namespace Banshee.Preferences.Gui
                     notebook.ShowTabs = false;
                     notebook.Show ();
 
-                    PageComboBox page_combo = new PageComboBox (page.ChildPages, notebook);
+                    page_combo = new PageComboBox ();
+                    page_combo.Changed += delegate {
+                        notebook.CurrentPage = FindNotebookPage (notebook, page_combo.ActivePage);
+                    };
+                    page_combo.PageAdded += delegate(object o, PageChangedEventArgs args) {
+                        NotebookPage page_ui = new NotebookPage (args.Page);
+                        page_ui.BorderWidth = 0;
+                        page_ui.Show ();
+                        notebook.AppendPage (page_ui, null);
+                    };
+                    page_combo.PageRemoved += delegate(object sender, PageChangedEventArgs e) {
+                        int i = FindNotebookPage (notebook, e.Page);
+                        if (i != -1) {
+                            notebook.RemovePage (i);
+                        }
+                    };
+                    page_combo.Initialize (page.ChildPages);
                     PackStart (page_combo, false, false, 0);
 
                     HSeparator sep = new HSeparator ();
                     sep.Show ();
                     PackStart (sep, false, false, 0);
 
-                    foreach (Page child_page in page.ChildPages) {
-                        NotebookPage page_ui = new NotebookPage (child_page);
-                        page_ui.BorderWidth = 0;
-                        page_ui.Show ();
-                        notebook.AppendPage (page_ui, null);
-                    }
-
                     PackStart (notebook, true, true, 0);
                 }
             }
         }
-        
+
+        private int FindNotebookPage (Notebook notebook, Page page)
+        {
+            for (int i = 0; i < notebook.NPages; i++) {
+                if ((notebook.GetNthPage (i) as NotebookPage).Page == page) {
+                    return i;
+                }
+            }
+            return -1;
+        }
+
         private void AddSection (Section section)
         {
             Frame frame = null;
@@ -113,7 +139,7 @@ namespace Banshee.Preferences.Gui
             
             Alignment alignment = new Alignment (0.0f, 0.0f, 1.0f, 1.0f);
             alignment.TopPadding = (uint)(frame == null ? 0 : 5);
-            alignment.LeftPadding = 12;
+            alignment.LeftPadding = (uint)(section.Indent ? 12 : 0);
             alignment.Show ();
             
             if (frame != null) {
diff --git a/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/PageComboBox.cs b/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/PageComboBox.cs
index fb8c2c7..183b424 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/PageComboBox.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Preferences.Gui/PageComboBox.cs
@@ -2,8 +2,10 @@
 //
 // Authors:
 //   Gabriel Burt <gburt@novell.com>
+//   Alexander Kojevnikov <alexander@kojevnikov.com>
 //
 // Copyright (C) 2009 Novell, Inc.
+// 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
@@ -29,6 +31,7 @@ using System;
 using System.Collections.Generic;
 using Gtk;
 
+using Banshee.Gui;
 using Banshee.ServiceStack;
 
 namespace Banshee.Preferences.Gui
@@ -36,14 +39,12 @@ namespace Banshee.Preferences.Gui
     public class PageComboBox : ComboBox
     {
         private ListStore model;
-        private Notebook notebook;
-        private IList<Page> pages;
+
+        public event EventHandler<PageChangedEventArgs> PageAdded;
+        public event EventHandler<PageChangedEventArgs> PageRemoved;
         
-        public PageComboBox (IList<Page> pages, Notebook notebook)
+        public PageComboBox ()
         {
-            this.pages = pages;
-            this.notebook = notebook;
-
             // icon, name, order, Page object itself
             model = new ListStore (typeof(Gdk.Pixbuf), typeof(string), typeof(int), typeof(Page));
             model.SetSortColumnId (2, SortType.Ascending);
@@ -57,33 +58,119 @@ namespace Banshee.Preferences.Gui
             PackStart (name, true);
             AddAttribute (name, "markup", 1);
 
+            StyleSet += delegate {
+                UpdateIcons ();
+            };
+
+            Show ();
+        }
+
+        public void Initialize (IEnumerable<Page> pages)
+        {
             foreach (Page page in pages) {
-                model.AppendValues (
-                    Banshee.Gui.IconThemeUtils.LoadIcon (page.IconName, 22),
-                    String.Format ("<b>{0}</b>", page.Name),
-                    page.Order,
-                    page
-                );
+                AddPage (page);
             }
-
             Active = 0;
-            Show ();
         }
 
         public string ActivePageId {
             set {
-                for (int i = 0; i < pages.Count; i++) {
-                    if (pages[i].Id == value) {
-                        Active = i;
-                        break;
-                    }
+                SetActiveIter (FindPageIter (p => p.Id == value));
+            }
+        }
+
+        public Page ActivePage {
+            get {
+                TreeIter iter;
+                if (GetActiveIter (out iter)) {
+                    return (Page) model.GetValue (iter, 3);
                 }
+                return null;
             }
         }
-        
-        protected override void OnChanged ()
+
+        public void AddPage (Page page)
+        {
+            model.AppendValues (
+                Banshee.Gui.IconThemeUtils.LoadIcon (page.IconName, 22),
+                String.Format ("<b>{0}</b>", page.Name),
+                page.Order,
+                page
+            );
+
+            var handler = PageAdded;
+            if (handler != null) {
+                handler (this, new PageChangedEventArgs (page));
+            }
+        }
+
+        public void RemovePage (Page page)
+        {
+            TreeIter iter = FindPageIter (page);
+            if (!TreeIter.Zero.Equals (iter)) {
+                model.Remove (ref iter);
+                SetActiveIter (iter);
+            }
+
+            var handler = PageRemoved;
+            if (handler != null) {
+                handler (this, new PageChangedEventArgs (page));
+            }
+        }
+
+        public void UpdatePage (Page page)
+        {
+            TreeIter iter = FindPageIter (page);
+            if (!TreeIter.Zero.Equals (iter)) {
+                model.SetValue (iter, 1, page.Name);
+            }
+        }
+
+        private TreeIter FindPageIter (Page page)
+        {
+            return FindPageIter (p => p == page);
+        }
+
+        private TreeIter FindPageIter (Func<Page, bool> predicate)
+        {
+            TreeIter iter;
+            if (model.GetIterFirst (out iter)) {
+                do {
+                    if (predicate (model.GetValue (iter, 3) as Page)) {
+                        return iter;
+                    }
+                } while (model.IterNext (ref iter));
+            }
+            return TreeIter.Zero;
+        }
+
+        private void UpdateIcons ()
         {
-            notebook.CurrentPage = Active;
+            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));
+                }
+            }
         }
     } 
+
+    public class PageChangedEventArgs : EventArgs
+    {
+        private Page page;
+        public Page Page {
+            get { return page; }
+        }
+
+        public PageChangedEventArgs (Page page)
+        {
+            this.page = page;
+        }
+    }
 }
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 {
