diff --git a/rhythmdb/rhythmdb-entry-type.h b/rhythmdb/rhythmdb-entry-type.h
index feac2f3..e79fb9a 100644
--- a/rhythmdb/rhythmdb-entry-type.h
+++ b/rhythmdb/rhythmdb-entry-type.h
@@ -110,10 +110,12 @@ void 		rhythmdb_entry_sync_metadata (RhythmDBEntry *entry, GSList *changes, GErr
 #define RHYTHMDB_ENTRY_TYPE_SONG (rhythmdb_get_song_entry_type ())
 #define RHYTHMDB_ENTRY_TYPE_IMPORT_ERROR (rhythmdb_get_error_entry_type ())
 #define RHYTHMDB_ENTRY_TYPE_IGNORE (rhythmdb_get_ignore_entry_type ())
+#define RHYTHMDB_ENTRY_TYPE_EXCLUDED (rhythmdb_get_excluded_entry_type ())
 
 RhythmDBEntryType *rhythmdb_get_song_entry_type          (void);
 RhythmDBEntryType *rhythmdb_get_error_entry_type	 (void);
 RhythmDBEntryType *rhythmdb_get_ignore_entry_type        (void);
+RhythmDBEntryType *rhythmdb_get_excluded_entry_type        (void);
 
 G_END_DECLS
 
diff --git a/rhythmdb/rhythmdb-song-entry-types.c b/rhythmdb/rhythmdb-song-entry-types.c
index f2203ef..f15435b 100644
--- a/rhythmdb/rhythmdb-song-entry-types.c
+++ b/rhythmdb/rhythmdb-song-entry-types.c
@@ -36,6 +36,7 @@
 static RhythmDBEntryType *song_entry_type = NULL;
 static RhythmDBEntryType *error_entry_type = NULL;
 static RhythmDBEntryType *ignore_entry_type = NULL;
+static RhythmDBEntryType *excluded_entry_type = NULL;
 
 
 typedef struct _RhythmDBEntryType RhythmDBSongEntryType;
@@ -64,6 +65,15 @@ static void rhythmdb_ignore_entry_type_init (RhythmDBIgnoreEntryType *etype);
 GType rhythmdb_ignore_entry_type_get_type (void);
 G_DEFINE_TYPE (RhythmDBIgnoreEntryType, rhythmdb_ignore_entry_type, RHYTHMDB_TYPE_ENTRY_TYPE);
 
+
+typedef struct _RhythmDBEntryType RhythmDBExcludedEntryType;
+typedef struct _RhythmDBEntryTypeClass RhythmDBExcludedEntryTypeClass;
+
+static void rhythmdb_excluded_entry_type_class_init (RhythmDBExcludedEntryTypeClass *klass);
+static void rhythmdb_excluded_entry_type_init (RhythmDBExcludedEntryType *etype);
+GType rhythmdb_excluded_entry_type_get_type (void);
+G_DEFINE_TYPE (RhythmDBExcludedEntryType, rhythmdb_excluded_entry_type, RHYTHMDB_TYPE_ENTRY_TYPE);
+
 static void
 update_entry_last_seen (RhythmDB *db, RhythmDBEntry *entry)
 {
@@ -245,6 +255,19 @@ rhythmdb_get_error_entry_type (void)
 	return error_entry_type;
 }
 
+/**
+ * rhythmdb_get_excluded_entry_type:
+ *
+ * Returns the #RhythmDBEntryType for files excluded from the library
+ *
+ * Return value: (transfer none): the entry type for excluded files
+ */
+RhythmDBEntryType *
+rhythmdb_get_excluded_entry_type (void)
+{
+	return excluded_entry_type;
+}
+
 
 static void
 rhythmdb_song_entry_type_class_init (RhythmDBSongEntryTypeClass *klass)
@@ -291,6 +314,20 @@ rhythmdb_ignore_entry_type_init (RhythmDBIgnoreEntryType *etype)
 {
 }
 
+static void
+rhythmdb_excluded_entry_type_class_init (RhythmDBExcludedEntryTypeClass *klass)
+{
+	RhythmDBEntryTypeClass *etype_class = RHYTHMDB_ENTRY_TYPE_CLASS (klass);
+
+	etype_class->get_playback_uri = (RhythmDBEntryTypeStringFunc) rb_null_function;
+	etype_class->update_availability = song_update_availability;
+}
+
+static void
+rhythmdb_excluded_entry_type_init (RhythmDBExcludedEntryType *etype)
+{
+}
+
 
 void
 rhythmdb_register_song_entry_types (RhythmDB *db)
@@ -298,6 +335,7 @@ rhythmdb_register_song_entry_types (RhythmDB *db)
 	g_assert (song_entry_type == NULL);
 	g_assert (error_entry_type == NULL);
 	g_assert (ignore_entry_type == NULL);
+	g_assert (excluded_entry_type == NULL);
 
 	song_entry_type = g_object_new (rhythmdb_song_entry_type_get_type (),
 					"db", db,
@@ -319,7 +357,16 @@ rhythmdb_register_song_entry_types (RhythmDB *db)
 					 "category", RHYTHMDB_ENTRY_VIRTUAL,
 					 NULL);
 
+	excluded_entry_type = g_object_new (rhythmdb_excluded_entry_type_get_type (),
+					  "db", db,
+					  "name", "excluded",
+					  "save-to-disk", TRUE,
+					  "category", RHYTHMDB_ENTRY_VIRTUAL,
+					  NULL);
+
+
 	rhythmdb_register_entry_type (db, song_entry_type);
 	rhythmdb_register_entry_type (db, error_entry_type);
 	rhythmdb_register_entry_type (db, ignore_entry_type);
+	rhythmdb_register_entry_type (db, excluded_entry_type);
 }
diff --git a/sources/rb-browser-source.c b/sources/rb-browser-source.c
index 253f897..931a1bf 100644
--- a/sources/rb-browser-source.c
+++ b/sources/rb-browser-source.c
@@ -654,13 +654,21 @@ impl_delete (RBSource *asource)
 {
 	RBBrowserSource *source = RB_BROWSER_SOURCE (asource);
 	GList *sel, *tem;
-
+	GValue excluded_entry_type = {0};
+	g_value_init(&excluded_entry_type, RHYTHMDB_TYPE_ENTRY_TYPE);
+	g_value_set_object(&excluded_entry_type, RHYTHMDB_ENTRY_TYPE_EXCLUDED);
 	sel = rb_entry_view_get_selected_entries (source->priv->songs);
 	for (tem = sel; tem != NULL; tem = tem->next) {
-		rhythmdb_entry_delete (source->priv->db, tem->data);
+		// rhythmdb_entry_delete (source->priv->db, tem->data);
+		// instead of deleting the songs, mark them as excluded
+		rhythmdb_entry_set (source->priv->db,
+	 			    tem->data,
+	 			    RHYTHMDB_PROP_TYPE,
+	 			    &excluded_entry_type);
 		rhythmdb_commit (source->priv->db);
 	}
 	g_list_foreach (sel, (GFunc)rhythmdb_entry_unref, NULL);
+	g_value_unset(&excluded_entry_type);
 	g_list_free (sel);
 }
 
diff --git a/widgets/rb-import-dialog.c b/widgets/rb-import-dialog.c
index 9fe7f98..334b47c 100644
--- a/widgets/rb-import-dialog.c
+++ b/widgets/rb-import-dialog.c
@@ -655,6 +655,8 @@ impl_constructed (GObject *object)
 	dialog->priv->query_model = rhythmdb_query_model_new_empty (dialog->priv->db);
 	rb_entry_view_set_model (dialog->priv->entry_view, dialog->priv->query_model);
 	query = rhythmdb_query_parse (dialog->priv->db,
+				      RHYTHMDB_QUERY_PROP_EQUALS, RHYTHMDB_PROP_TYPE, RHYTHMDB_ENTRY_TYPE_EXCLUDED,
+				      RHYTHMDB_QUERY_DISJUNCTION,
 				      RHYTHMDB_QUERY_PROP_EQUALS, RHYTHMDB_PROP_TYPE, dialog->priv->entry_type,
 				      RHYTHMDB_QUERY_END);
 	rhythmdb_do_full_query_async_parsed (dialog->priv->db, RHYTHMDB_QUERY_RESULTS (dialog->priv->query_model), query);
