diff --git a/src/Import/FileImportSource.cs b/src/Import/FileImportSource.cs
index 2be73b7..e085132 100644
--- a/src/Import/FileImportSource.cs
+++ b/src/Import/FileImportSource.cs
@@ -33,7 +33,7 @@ namespace FSpot.Import
             }
         }
 
-        public void StartPhotoScan (ImportController controller)
+        public void StartPhotoScan (ImportController controller, List<IBrowsableItem> list)
         {
             if (PhotoScanner != null) {
                 run_photoscanner = false;
@@ -41,16 +41,16 @@ namespace FSpot.Import
             }
 
             run_photoscanner = true;
-            PhotoScanner = ThreadAssist.Spawn (() => ScanPhotos (controller));
+            PhotoScanner = ThreadAssist.Spawn (() => ScanPhotos (controller, list));
         }
 
-        protected virtual void ScanPhotos (ImportController controller)
+        protected virtual void ScanPhotos (ImportController controller, List<IBrowsableItem> list)
         {
-            ScanPhotoDirectory (controller, Root);
+            ScanPhotoDirectory (controller, Root, list);
             ThreadAssist.ProxyToMain (() => controller.PhotoScanFinished ());
         }
 
-        protected void ScanPhotoDirectory (ImportController controller, SafeUri uri)
+        protected void ScanPhotoDirectory (ImportController controller, SafeUri uri, List<IBrowsableItem> list)
         {
             var enumerator = new RecursiveFileEnumerator (uri) {
                 Recurse = controller.RecurseSubdirectories,
@@ -65,7 +65,7 @@ namespace FSpot.Import
 
                 if (infos.Count % 10 == 0 || infos.Count < 10) {
                     var to_add = infos; // prevents race condition
-                    ThreadAssist.ProxyToMain (() => controller.Photos.Add (to_add.ToArray ()));
+                    ThreadAssist.ProxyToMain (() => list.AddRange (to_add.ToArray ()));
                     infos = new List<FileImportInfo> ();
                 }
 
@@ -75,7 +75,7 @@ namespace FSpot.Import
 
             if (infos.Count > 0) {
                 var to_add = infos; // prevents race condition
-                ThreadAssist.ProxyToMain (() => controller.Photos.Add (to_add.ToArray ()));
+                ThreadAssist.ProxyToMain (() => list.AddRange (to_add.ToArray ()));
             }
         }
 
@@ -130,11 +130,11 @@ namespace FSpot.Import
             this.uris = uris;
         }
 
-        protected override void ScanPhotos (ImportController controller)
+        protected override void ScanPhotos (ImportController controller, List<IBrowsableItem> list)
         {
             foreach (var uri in uris) {
                 Log.Debug ("Scanning "+uri);
-                ScanPhotoDirectory (controller, uri);
+                ScanPhotoDirectory (controller, uri, list);
             }
             ThreadAssist.ProxyToMain (() => controller.PhotoScanFinished ());
         }
diff --git a/src/Import/ImportController.cs b/src/Import/ImportController.cs
index b39dc98..092847c 100644
--- a/src/Import/ImportController.cs
+++ b/src/Import/ImportController.cs
@@ -50,7 +50,13 @@ namespace FSpot.Import
 
         public bool RecurseSubdirectories {
             get { return recurse_subdirectories; }
-            set { recurse_subdirectories = value; SavePreferences (); RescanPhotos (); }
+            set {
+				//if(recurse_subdirectories != value) {
+					recurse_subdirectories = value;
+					SavePreferences ();
+					RescanPhotos ();
+				//}
+			}
         }
 
         public bool DuplicateDetect {
@@ -143,10 +149,10 @@ namespace FSpot.Import
                 if (value == active_source)
                     return;
                 var old_source = active_source;
+                DeactivateSource (old_source);
                 active_source = value;
                 FireEvent (ImportEvent.SourceChanged);
                 RescanPhotos ();
-                DeactivateSource (old_source);
             }
             get {
                 return active_source;
@@ -162,12 +168,13 @@ namespace FSpot.Import
 
         void RescanPhotos ()
         {
-            Photos.Clear ();
             if (ActiveSource == null)
                 return;
 
+            List<IBrowsableItem> photoList = new List<IBrowsableItem>();
+            Photos.AddAll (photoList);
             photo_scan_running = true;
-            ActiveSource.StartPhotoScan (this);
+            ActiveSource.StartPhotoScan (this, photoList);
             FireEvent (ImportEvent.PhotoScanStarted);
         }
 
diff --git a/src/Import/ImportSource.cs b/src/Import/ImportSource.cs
index 2ee01de..3bab2ab 100644
--- a/src/Import/ImportSource.cs
+++ b/src/Import/ImportSource.cs
@@ -1,13 +1,14 @@
 using Hyena;
 using System;
+using System.Collections.Generic;
 
 namespace FSpot.Import
 {
     public interface ImportSource {
         string Name { get; }
         string IconName { get; }
-
-        void StartPhotoScan (ImportController controller);
+		
+        void StartPhotoScan (ImportController controller, List<IBrowsableItem> list);
         void Deactivate ();
     }
 }
