diff --git a/build/build.environment.mk b/build/build.environment.mk
index fb2cb14..96328e4 100644
--- a/build/build.environment.mk
+++ b/build/build.environment.mk
@@ -135,7 +135,7 @@ REF_EXTENSION_EMUSIC_STORE = $(LINK_BANSHEE_WEBBROWSER_DEPS) $(LINK_EXTENSION_EM
 REF_EXTENSION_FILESYSTEMQUEUE = $(LINK_BANSHEE_THICKCLIENT_DEPS)
 REF_EXTENSION_INTERNETRADIO = $(LINK_BANSHEE_THICKCLIENT_DEPS)
 REF_EXTENSION_INTERNETARCHIVE = $(LINK_BANSHEE_THICKCLIENT_DEPS)
-REF_EXTENSION_LIBRARYWATCHER = $(LINK_BANSHEE_SERVICES_DEPS)
+REF_EXTENSION_LIBRARYWATCHER = $(LINK_BANSHEE_THICKCLIENT_DEPS)
 REF_EXTENSION_MINIMODE = $(LINK_BANSHEE_THICKCLIENT_DEPS)
 REF_EXTENSION_MEEGO = $(LINK_BANSHEE_THICKCLIENT_DEPS)
 LINK_EXTENSION_MEEGO = -r:$(DIR_BIN)/Banshee.MeeGo.dll $(REF_EXTENSION_MEEGO)
diff --git a/src/Core/Banshee.Services/Banshee.Collection/RescanPipeline.cs b/src/Core/Banshee.Services/Banshee.Collection/RescanPipeline.cs
index 034e377..5eafb9a 100644
--- a/src/Core/Banshee.Services/Banshee.Collection/RescanPipeline.cs
+++ b/src/Core/Banshee.Services/Banshee.Collection/RescanPipeline.cs
@@ -59,11 +59,14 @@ namespace Banshee.Collection
         private PrimarySource psource;
         private BatchUserJob job;
         private TrackSyncPipelineElement track_sync;
+        private Func<long, bool> delete_validation;
+        private readonly long MAX_NOWARN_TRACKS_REMOVAL = 50L;
 
-        public RescanPipeline (LibrarySource psource) : base ()
+        public RescanPipeline (LibrarySource psource, Func<long, bool> deleteValidation) : base ()
         {
             this.psource = psource;
             scan_started = DateTime.Now;
+            delete_validation = deleteValidation;
 
             AddElement (new Banshee.IO.DirectoryScannerPipelineElement ());
             AddElement (track_sync = new TrackSyncPipelineElement (psource, scan_started));
@@ -103,16 +106,26 @@ namespace Banshee.Collection
             string condition =
                 @"WHERE PrimarySourceID = ? AND Uri LIKE ? ESCAPE '\' AND LastSyncedStamp IS NOT NULL AND LastSyncedStamp < ?";
             string uri = Hyena.StringUtil.EscapeLike (new SafeUri (psource.BaseDirectoryWithSeparator).AbsoluteUri) + "%";
+            long deleteCount = ServiceManager.DbConnection.Query<long> (String.Format (@"SELECT count(*) FROM CoreTracks {0};", condition));
 
-            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
-            );
+            bool delete = true;
+            if (deleteCount > MAX_NOWARN_TRACKS_REMOVAL
+                && delete_validation != null) {
+
+                delete = delete_validation (deleteCount);
+            }
+
+            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 ();
diff --git a/src/Core/Banshee.ThickClient/Banshee.Gui/GlobalActions.cs b/src/Core/Banshee.ThickClient/Banshee.Gui/GlobalActions.cs
index 54add5b..8654ebd 100644
--- a/src/Core/Banshee.ThickClient/Banshee.Gui/GlobalActions.cs
+++ b/src/Core/Banshee.ThickClient/Banshee.Gui/GlobalActions.cs
@@ -60,7 +60,7 @@ namespace Banshee.Gui
                 new ActionEntry ("RescanAction", null,
                     Catalog.GetString ("Rescan Music Library"), null,
                     Catalog.GetString ("Rescan the Music Library folder"), delegate {
-                        new Banshee.Collection.RescanPipeline (ServiceManager.SourceManager.MusicLibrary);
+                        new Banshee.Collection.RescanPipeline (ServiceManager.SourceManager.MusicLibrary, ValidateDeletion);
                     }),
 
                 new ActionEntry ("OpenLocationAction", null,
@@ -198,6 +198,27 @@ namespace Banshee.Gui
             Banshee.ServiceStack.Application.Shutdown ();
         }
 
+        public static bool ValidateDeletion (long deleteCount)
+        {
+            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, Catalog.GetString ("Rescan delete many files"))) {
+                message_dialog.WindowPosition = Gtk.WindowPosition.CenterOnParent;
+                message_dialog.Title = String.Format (
+                    Catalog.GetString ("Banshee detect that {0} files have been erased.{1}Do you want that banshee clean up all metadata?"), deleteCount, Environment.NewLine);
+                answer = (message_dialog.Run () == (int)Gtk.ResponseType.Yes);
+                message_dialog.Destroy ();
+            }
+
+            return answer;
+        }
+
 #endregion
 
 #region Edit Menu Actions
diff --git a/src/Extensions/Banshee.LibraryWatcher/Banshee.LibraryWatcher/LibraryWatcherService.cs b/src/Extensions/Banshee.LibraryWatcher/Banshee.LibraryWatcher/LibraryWatcherService.cs
index 6e7558e..2479423 100644
--- a/src/Extensions/Banshee.LibraryWatcher/Banshee.LibraryWatcher/LibraryWatcherService.cs
+++ b/src/Extensions/Banshee.LibraryWatcher/Banshee.LibraryWatcher/LibraryWatcherService.cs
@@ -35,6 +35,10 @@ using Banshee.Base ;
 using Banshee.Sources;
 using Banshee.ServiceStack;
 using Banshee.Library;
+using Banshee.Gui;
+using Banshee.I18n;
+
+using Gtk;
 
 namespace Banshee.LibraryWatcher
 {
@@ -68,14 +72,35 @@ namespace Banshee.LibraryWatcher
             AddLibrary (ServiceManager.SourceManager.VideoLibrary);
 
             if (ServiceManager.SourceManager.MusicLibrary.Count == 0) {
-                new Banshee.Collection.RescanPipeline (ServiceManager.SourceManager.MusicLibrary);
+                new Banshee.Collection.RescanPipeline (ServiceManager.SourceManager.MusicLibrary, ValidateDeletion);
             }
 
             if (ServiceManager.SourceManager.VideoLibrary.Count == 0) {
-                new Banshee.Collection.RescanPipeline (ServiceManager.SourceManager.VideoLibrary);
+                new Banshee.Collection.RescanPipeline (ServiceManager.SourceManager.VideoLibrary, ValidateDeletion);
             }
         }
 
+        public bool ValidateDeletion (long deleteCount)
+        {
+            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, Catalog.GetString ("Rescan delete many files"))) {
+                message_dialog.WindowPosition = Gtk.WindowPosition.CenterOnParent;
+                message_dialog.Title = String.Format (
+                    Catalog.GetString ("Banshee detect that {0} files have been erased.{1}Do you want that banshee clean up all metadata?"), deleteCount, Environment.NewLine);
+                answer = (message_dialog.Run () == (int)Gtk.ResponseType.Yes);
+                message_dialog.Destroy ();
+            }
+
+            return answer;
+        }
+
         public void Dispose ()
         {
             lock (watchers) {
diff --git a/src/Hyena b/src/Hyena
--- a/src/Hyena
+++ b/src/Hyena
@@ -1 +1 @@
-Subproject commit 5efb54b661583708ba1a55ce74727141dada7943
+Subproject commit 5efb54b661583708ba1a55ce74727141dada7943-dirty
