Index: rhythmdb/rhythmdb-query-model.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/rhythmdb/rhythmdb-query-model.c,v
retrieving revision 1.80
diff -u -u -r1.80 rhythmdb-query-model.c
--- rhythmdb/rhythmdb-query-model.c	26 Oct 2005 07:11:21 -0000	1.80
+++ rhythmdb/rhythmdb-query-model.c	27 Oct 2005 12:43:30 -0000
@@ -142,6 +142,7 @@
 	GPtrArray *query, *original_query;
 
 	guint stamp;
+	gboolean show_hidden;
 
 	GnomeVFSFileSize max_size;
 	guint max_count;
@@ -180,6 +181,7 @@
 	PROP_MAX_SIZE,
 	PROP_MAX_COUNT,
 	PROP_MAX_TIME,
+	PROP_SHOW_HIDDEN
 };
 
 enum
@@ -269,6 +271,14 @@
 							   0, G_MAXINT, 0,
 							   G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
 
+	g_object_class_install_property (object_class,
+					 PROP_SHOW_HIDDEN,
+					 g_param_spec_boolean ("show-hidden",
+							       "show hidden",
+							       "maximum time (seconds)",
+							       FALSE,
+							       G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+
 	rhythmdb_query_model_signals[ENTRY_PROP_CHANGED] =
 		g_signal_new ("entry-prop-changed",
 			      RHYTHMDB_TYPE_QUERY_MODEL,
@@ -373,6 +383,9 @@
 	case PROP_MAX_TIME:
 		model->priv->max_time = g_value_get_int (value);
 		break;
+	case PROP_SHOW_HIDDEN:
+		model->priv->show_hidden = g_value_get_boolean (value);
+		break;
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 		break;
@@ -413,6 +426,8 @@
 	case PROP_MAX_TIME:
 		g_value_set_int (value, model->priv->max_time);
 		break;
+	case PROP_SHOW_HIDDEN:
+		g_value_set_boolean (value, model->priv->show_hidden);
 	default:
 		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 		break;
@@ -599,7 +614,8 @@
 				     RhythmDBQueryModel *model)
 {
 	if (model->priv->query) {
-		if (rhythmdb_entry_get_boolean (entry, RHYTHMDB_PROP_HIDDEN))
+		if (rhythmdb_entry_get_boolean (entry, RHYTHMDB_PROP_HIDDEN) &&
+		    !model->priv->show_hidden)
 			return;
 
 		if (rhythmdb_evaluate_query (db, model->priv->query, entry)) {
@@ -619,7 +635,7 @@
 		return;
 
 
-	hidden = rhythmdb_entry_get_boolean (entry, RHYTHMDB_PROP_HIDDEN);
+	hidden = rhythmdb_entry_get_boolean (entry, RHYTHMDB_PROP_HIDDEN) && !model->priv->show_hidden;
 
 	if (g_hash_table_lookup (model->priv->reverse_map, entry) == NULL) {
 		if (hidden == FALSE) {
@@ -955,8 +971,6 @@
 	GtkTreePath *path;
 	GtkTreeIter iter;
 
-	g_assert (!rhythmdb_entry_get_boolean (entry, RHYTHMDB_PROP_HIDDEN));
-
 	/* we check again if the entry already exists in the hash table */
 	if (g_hash_table_lookup (model->priv->reverse_map, entry) != NULL)
 		return;
@@ -1069,7 +1083,8 @@
 			for (i = 0; i < update->entries->len; i++ ) {
 				RhythmDBEntry *entry = g_ptr_array_index (update->entries, i);
 
-				if (!rhythmdb_entry_get_boolean (entry, RHYTHMDB_PROP_HIDDEN))
+				if (!rhythmdb_entry_get_boolean (entry, RHYTHMDB_PROP_HIDDEN) ||
+				    model->priv->show_hidden)
 					rhythmdb_query_model_do_insert (model, entry);
 			}
 			break;
Index: rhythmdb/rhythmdb.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/rhythmdb/rhythmdb.c,v
retrieving revision 1.121
diff -u -u -r1.121 rhythmdb.c
--- rhythmdb/rhythmdb.c	25 Oct 2005 22:25:16 -0000	1.121
+++ rhythmdb/rhythmdb.c	27 Oct 2005 12:43:35 -0000
@@ -1226,14 +1228,10 @@
 	if (entry) {
 		time_t mtime = (time_t) entry->mtime;
 		if (event->error) {
-			const char *mount_point;
+			gboolean ghost = is_ghost_entry (entry);
 
-			/* First check if the mount point the song was on 
-			 * still exists */
-			mount_point = rhythmdb_entry_get_string (entry, RHYTHMDB_PROP_MOUNTPOINT);
-			if ((rb_uri_is_mounted (mount_point) == FALSE) && !is_ghost_entry (entry)) {
+			if (!ghost) {
 				rhythmdb_entry_set_visibility (db, entry, FALSE);
-				
 			} else {
 				rb_debug ("error accessing %s: %s", event->real_uri,
 					  event->error->message);
@@ -1388,6 +1386,7 @@
 
 	/* Remember the mount point of the volume the song is on */
 	rhythmdb_entry_set_mount_point (db, entry, event->real_uri);
+	rhythmdb_entry_set_visibility (db, entry, TRUE);
 
 	if (event->vfsinfo->flags & GNOME_VFS_FILE_FLAGS_LOCAL)
 		rhythmdb_monitor_uri_path (db, entry->location, NULL /* FIXME */);
@@ -1431,8 +1430,8 @@
 	RhythmDBEntry *entry = rhythmdb_entry_lookup_by_location (db, event->uri);
 
 	if (entry) {
-		rb_debug ("deleting entry for %s", event->uri);
-		rhythmdb_entry_delete (db, entry);
+		rb_debug ("hiding entry for %s", event->uri);
+		rhythmdb_entry_set_visibility (db, entry, FALSE);
 	} else {
 		rb_debug ("no entry for %s", event->uri);
 	}
Index: sources/rb-playlist-source.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/sources/rb-playlist-source.c,v
retrieving revision 1.78
diff -u -u -r1.78 rb-playlist-source.c
--- sources/rb-playlist-source.c	16 Oct 2005 04:09:18 -0000	1.78
+++ sources/rb-playlist-source.c	27 Oct 2005 12:43:36 -0000
@@ -303,6 +303,7 @@
 	gtk_container_add (GTK_CONTAINER (source), source->priv->vbox);
 		
 	source->priv->model = rhythmdb_query_model_new_empty (source->priv->db);
+	g_object_set (G_OBJECT (source->priv->model), "show-hidden", !source->priv->automatic, NULL);
 
 	source->priv->entries = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
 		
@@ -951,19 +952,20 @@
 	RBPlaylistSource *source;
 	xmlNodePtr child;
 	xmlChar *tmp;
-
-	source = RB_PLAYLIST_SOURCE (rb_playlist_source_new (shell, FALSE, TRUE));
+	gboolean automatic = FALSE;
 
 	tmp = xmlGetProp (node, RB_PLAYLIST_TYPE);
 	if (!xmlStrcmp (tmp, RB_PLAYLIST_AUTOMATIC))
-		source->priv->automatic = TRUE;
+		automatic = TRUE;
 	g_free (tmp);
 
+	source = RB_PLAYLIST_SOURCE (rb_playlist_source_new (shell, automatic, TRUE));
+
 	tmp = xmlGetProp (node, RB_PLAYLIST_NAME);
 	g_object_set (G_OBJECT (source), "name", tmp, NULL);
 	g_free (tmp);
 
-	if (source->priv->automatic) {
+	if (automatic) {
 		GPtrArray *query;
 		gint limit_count = 0, limit_mb = 0, limit_time = 0;
 		gchar *sort_key = NULL;
