diff --git a/gtk2_ardour/editor_regions.cc b/gtk2_ardour/editor_regions.cc
index 69620d4..939d04a 100644
--- a/gtk2_ardour/editor_regions.cc
+++ b/gtk2_ardour/editor_regions.cc
@@ -457,14 +457,16 @@ EditorRegions::remove_unused_regions ()
 	prompt  = _("Do you really want to remove unused regions?"
 		    "\n(This is destructive and cannot be undone)");
 
-	choices.push_back (_("No, do nothing."));
-	choices.push_back (_("Yes, remove."));
+	choices.push_back (_("Do nothing."));
+	choices.push_back (_("Remove all."));
+	choices.push_back (_("Remove if not whole file."));
 
 	Gtkmm2ext::Choice prompter (_("Remove unused regions"), prompt, choices);
 
-	if (prompter.run () == 1) {
+    int response_id = prompter.run();
+	if (response_id > 0) {
 		_no_redisplay = true;
-		_session->cleanup_regions ();
+		_session->cleanup_regions (response_id == 2);
 		_no_redisplay = false;
 		redisplay ();
 	}
diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h
index 38185a7..5c188e5 100644
--- a/libs/ardour/ardour/session.h
+++ b/libs/ardour/ardour/session.h
@@ -549,7 +549,7 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi
 	void add_source (boost::shared_ptr<Source>);
 	void remove_source (boost::weak_ptr<Source>);
 
-	void  cleanup_regions();
+	void  cleanup_regions(bool keep_whole_files);
 	int  cleanup_sources (CleanupReport&);
 	int  cleanup_trash_sources (CleanupReport&);
 
diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc
index ffbe55a..14364d3 100644
--- a/libs/ardour/session_state.cc
+++ b/libs/ardour/session_state.cc
@@ -2557,7 +2557,7 @@ Session::ask_about_playlist_deletion (boost::shared_ptr<Playlist> p)
 }
 
 void
-Session::cleanup_regions ()
+Session::cleanup_regions (bool keep_whole_files)
 {
 	const RegionFactory::RegionMap& regions (RegionFactory::regions());
 
@@ -2565,7 +2565,7 @@ Session::cleanup_regions ()
 
 		uint32_t used = playlists->region_use_count (i->second);
 
-		if (used == 0 && !i->second->automatic ()) {
+		if (used == 0 && !i->second->automatic () && !(keep_whole_files && i->second->whole_file())) {
 			RegionFactory::map_remove (i->second);
 		}
 	}
