diff --git a/src/Clients/Beroe/Beroe/IndexerClient.cs b/src/Clients/Beroe/Beroe/IndexerClient.cs
index 7096166..2e39ded 100644
--- a/src/Clients/Beroe/Beroe/IndexerClient.cs
+++ b/src/Clients/Beroe/Beroe/IndexerClient.cs
@@ -137,6 +137,12 @@ namespace Beroe
             }
         }
 
+        public override bool QuestionPrompt (string title, string message)
+        {
+            Log.DebugFormat ("{0} : Auto anwser: yes", message);
+            return true;
+        }
+
         IDBusExportable IDBusExportable.Parent {
             get { return null; }
         }
diff --git a/src/Core/Banshee.Services/Banshee.Collection/RescanPipeline.cs b/src/Core/Banshee.Services/Banshee.Collection/RescanPipeline.cs
index 82441e2..83837bc 100644
--- a/src/Core/Banshee.Services/Banshee.Collection/RescanPipeline.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection/RescanPipeline.cs
@@ -104,16 +104,24 @@ namespace Banshee.Collection
                 @"WHERE PrimarySourceID = ? AND Uri LIKE ? ESCAPE '\' AND LastSyncedStamp IS NOT NULL AND LastSyncedStamp < ?";
             string uri = Hyena.StringUtil.EscapeLike (new SafeUri (psource.BaseDirectoryWithSeparator).AbsoluteUri) + "%";
 
-            ServiceManager.DbConnection.Execute (String.Format (@"BEGIN;
-                    DELETE FROM CorePlaylistEntries WHERE TrackID IN (SELECT TrackID FROM CoreTracks {0});
-                    DELETE FROM CoreSmartPlaylistEntries WHERE TrackID IN (SELECT TrackID FROM CoreTracks {0});
-                    DELETE FROM CoreTracks {0}; COMMIT",
-                condition),
-                psource.DbId, uri, scan_started,
-                psource.DbId, uri, scan_started,
-                psource.DbId, uri, scan_started
-            );
-
+            int total = ServiceManager.DbConnection.Query<int> (String.Format (@"SELECT count(*) FROM CoreTracks {0};", condition));
+            bool delete = true;
+            if (total > 50) {
+                delete = Application.ActiveClient.QuestionPrompt (String.Format (
+                        Catalog.GetString ("Banshee detect that {0} files have been erased.{1}Do you want that banshee clean up all metadata?"), total, Environment.NewLine),
+                    Catalog.GetString ("Rescan delete many files"));
+            }
+            if (delete) {
+                ServiceManager.DbConnection.Execute (String.Format (@"BEGIN;
+                        DELETE FROM CorePlaylistEntries WHERE TrackID IN (SELECT TrackID FROM CoreTracks {0});
+                        DELETE FROM CoreSmartPlaylistEntries WHERE TrackID IN (SELECT TrackID FROM CoreTracks {0});
+                        DELETE FROM CoreTracks {0}; COMMIT",
+                    condition),
+                    psource.DbId, uri, scan_started,
+                    psource.DbId, uri, scan_started,
+                    psource.DbId, uri, scan_started
+                );
+            }
             // TODO prune artists/albums
             psource.Reload ();
             psource.NotifyTracksChanged ();
diff --git a/src/Core/Banshee.Services/Banshee.ServiceStack/Client.cs b/src/Core/Banshee.Services/Banshee.ServiceStack/Client.cs
index fd207d3..26d796f 100644
--- a/src/Core/Banshee.Services/Banshee.ServiceStack/Client.cs
+++ b/src/Core/Banshee.Services/Banshee.ServiceStack/Client.cs
@@ -60,5 +60,7 @@ namespace Banshee.ServiceStack
                 handler (this);
             }
         }
+
+        public abstract bool QuestionPrompt (string title, string message);
     }
 }
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui/GtkBaseClient.cs b/src/Core/Banshee.ThickClient/Banshee.Gui/GtkBaseClient.cs
index c5c5675..5ea66e0 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui/GtkBaseClient.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui/GtkBaseClient.cs
@@ -286,6 +286,24 @@ namespace Banshee.Gui
             }
         }
 
+        public override bool QuestionPrompt (string title, string message)
+        {
+            bool answer;
+            Gtk.Window window = null;
+
+            if (ServiceManager.Contains<GtkElementsService> ()) {
+                window = ServiceManager.Get<GtkElementsService> ().PrimaryWindow;
+            }
+            using (var message_dialog = new Gtk.MessageDialog (window, 0,
+                    Gtk.MessageType.Warning, Gtk.ButtonsType.YesNo, message)) {
+                message_dialog.WindowPosition = Gtk.WindowPosition.CenterOnParent;
+                message_dialog.Title = title;
+                answer = (message_dialog.Run () == (int)Gtk.ResponseType.Yes);
+                message_dialog.Destroy ();
+            }
+            return answer;
+        }
+
         protected uint RunTimeout (uint milliseconds, TimeoutHandler handler)
         {
             return GLib.Timeout.Add (milliseconds, delegate { return handler (); });
