diff --git a/podcast/rb-podcast-manager.c b/podcast/rb-podcast-manager.c
index 82019da..2ab6923 100644
--- a/podcast/rb-podcast-manager.c
+++ b/podcast/rb-podcast-manager.c
@@ -1103,6 +1103,34 @@ rb_podcast_manager_add_post (RhythmDB *db,
 	if (entry)
 		return NULL;
 
+        /*
+         * Does the uri exist as the mount-point?
+         * This check is necessary since after an entry's file is downloaded,
+         * the location stored in the db changes to the local file path
+         * instead of the uri. The uri moves to the mount-point attribute.
+         * Consequently, without this check, every downloaded entry will be
+         * re-added to the db.
+         * */
+	RhythmDBQueryModel *mountpoint_entries;
+        mountpoint_entries = rhythmdb_query_model_new_empty (db);
+        rhythmdb_do_full_query (db, RHYTHMDB_QUERY_RESULTS (mountpoint_entries),
+                RHYTHMDB_QUERY_PROP_EQUALS,
+                RHYTHMDB_PROP_TYPE,
+                RHYTHMDB_ENTRY_TYPE_PODCAST_POST,
+                RHYTHMDB_QUERY_PROP_EQUALS,
+                RHYTHMDB_PROP_SUBTITLE,
+                subtitle,
+                RHYTHMDB_QUERY_PROP_EQUALS,
+                RHYTHMDB_PROP_MOUNTPOINT,
+                uri,
+                RHYTHMDB_QUERY_PROP_EQUALS,
+                RHYTHMDB_PROP_HIDDEN,
+                FALSE,
+                RHYTHMDB_QUERY_END);
+        GtkTreeIter iter;
+        if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (mountpoint_entries), &iter))
+            return NULL;
+
 	entry = rhythmdb_entry_new (db,
 				    RHYTHMDB_ENTRY_TYPE_PODCAST_POST,
 				    uri);
@@ -1659,9 +1687,11 @@ rb_podcast_manager_db_entry_deleted_cb (RBPodcastManager *pd,
 
 	} else if (type == RHYTHMDB_ENTRY_TYPE_PODCAST_FEED) {
 		GtkTreeModel *query_model;
-		GtkTreeIter iter;
 
-		query_model = GTK_TREE_MODEL (rhythmdb_query_model_new_empty (pd->priv->db));
+                /* include deleted posts (which will be hidden)
+                 * these need to be deleted so they will properly be
+                 * readded should the feed be readded.*/
+		query_model = GTK_TREE_MODEL (rhythmdb_query_model_new_empty_with_hidden (pd->priv->db));
 		rhythmdb_do_full_query (pd->priv->db,
 					RHYTHMDB_QUERY_RESULTS (query_model),
                 	                RHYTHMDB_QUERY_PROP_EQUALS,
@@ -1670,6 +1700,7 @@ rb_podcast_manager_db_entry_deleted_cb (RBPodcastManager *pd,
 					RHYTHMDB_PROP_SUBTITLE, get_remote_location (entry),
                                 	RHYTHMDB_QUERY_END);
 
+		GtkTreeIter iter;
 		if (gtk_tree_model_get_iter_first (query_model, &iter)) {
 			gboolean has_next;
 			do {
@@ -1934,29 +1965,38 @@ rb_podcast_manager_insert_feed (RBPodcastManager *pd, RBPodcastChannel *data)
 			}
 		}
 
-		if (item->pub_date > last_post || item->pub_date == 0) {
-			updated = TRUE;
-
-			post_entry =
-				rb_podcast_manager_add_post (db,
-							     title,
-							     (gchar *) item->title,
-							     (gchar *) data->url,
-							     (gchar *) (item->author ? item->author : data->author),
-							     (gchar *) item->url,
-							     (gchar *) item->description,
-							     (gulong) (item->pub_date > 0 ? item->pub_date : data->pub_date),
-							     (gulong) item->duration,
-							     item->filesize);
-			if (post_entry && item->pub_date >= new_last_post) {
-				if (item->pub_date > new_last_post) {
-					g_list_free (download_entries);
-					download_entries = NULL;
-				}
-				download_entries = g_list_prepend (download_entries, post_entry);
-				new_last_post = item->pub_date;
-			}
-		}
+
+                /* 
+                 * Always try to add a post_entry.
+                 * Removed the check of whether or not the entry's post_time >
+                 * than the feed's pub_time (last update time)
+                 * because that check was not a great
+                 * indicator of whether or not to insert a post_entry.
+                 * For some podcasts, this condition was never met.
+                 * */
+                post_entry =
+                    rb_podcast_manager_add_post (db,
+                            title,
+                            (gchar *) item->title,
+                            (gchar *) data->url,
+                            (gchar *) (item->author ? item->author : data->author),
+                            (gchar *) item->url,
+                            (gchar *) item->description,
+                            (gulong) (item->pub_date > 0 ? item->pub_date : data->pub_date),
+                            (gulong) item->duration,
+                            item->filesize);
+
+                if (post_entry)
+                    updated = TRUE;
+
+                if (post_entry && item->pub_date >= new_last_post) {
+                    if (item->pub_date > new_last_post) {
+                        g_list_free (download_entries);
+                        download_entries = NULL;
+                    }
+                    download_entries = g_list_prepend (download_entries, post_entry);
+                    new_last_post = item->pub_date;
+                }
 	}
 
 	if (download_last) {
diff --git a/rhythmdb/rhythmdb-query-model.c b/rhythmdb/rhythmdb-query-model.c
index 668107a..bb7c0b0 100644
--- a/rhythmdb/rhythmdb-query-model.c
+++ b/rhythmdb/rhythmdb-query-model.c
@@ -749,6 +749,15 @@ rhythmdb_query_model_new_empty (RhythmDB *db)
 			     "db", db, NULL);
 }
 
+RhythmDBQueryModel *
+rhythmdb_query_model_new_empty_with_hidden (RhythmDB *db)
+{
+	return g_object_new (RHYTHMDB_TYPE_QUERY_MODEL,
+			     "db", db,
+                             "show-hidden", TRUE,
+                             NULL);
+}
+
 static void
 _copy_contents_foreach_cb (RhythmDBEntry *entry, RhythmDBQueryModel *dest)
 {
diff --git a/rhythmdb/rhythmdb-query-model.h b/rhythmdb/rhythmdb-query-model.h
index dcec85b..fcdf875 100644
--- a/rhythmdb/rhythmdb-query-model.h
+++ b/rhythmdb/rhythmdb-query-model.h
@@ -98,6 +98,7 @@ RhythmDBQueryModel *	rhythmdb_query_model_new		(RhythmDB *db,
 								 gboolean sort_reverse);
 
 RhythmDBQueryModel *	rhythmdb_query_model_new_empty		(RhythmDB *db);
+RhythmDBQueryModel *	rhythmdb_query_model_new_empty_with_hidden		(RhythmDB *db);
 
 void			rhythmdb_query_model_copy_contents	(RhythmDBQueryModel *dest,
 								 RhythmDBQueryModel *src);
diff --git a/rhythmdb/rhythmdb-tree.c b/rhythmdb/rhythmdb-tree.c
index 48902e4..adc4e81 100644
--- a/rhythmdb/rhythmdb-tree.c
+++ b/rhythmdb/rhythmdb-tree.c
@@ -1937,8 +1937,20 @@ evaluate_conjunctive_subquery (RhythmDBTree *dbtree,
 			/* Fall through */
 		}
 		case RHYTHMDB_QUERY_PROP_EQUALS:
-			RHYTHMDB_PROPERTY_COMPARE (!=)
-			break;
+                {
+                        /* This check is necessary so that values which may be
+                         * NULL some of the time such as mountpoint get compared properly. 
+                         * Without this a segfault can occur.*/
+			if (rhythmdb_get_property_type (db, data->propid) == G_TYPE_STRING)
+                        {
+                            const char *entry_s;
+                            entry_s = rhythmdb_entry_get_string (entry, data->propid);
+                            if (entry_s == NULL)
+                                return FALSE;
+                        }
+                    RHYTHMDB_PROPERTY_COMPARE (!=)
+                    break;
+                }
 		case RHYTHMDB_QUERY_PROP_GREATER:
 			RHYTHMDB_PROPERTY_COMPARE (<)
 			break;
diff --git a/rhythmdb/rhythmdb.h b/rhythmdb/rhythmdb.h
index d5c6487..0160de6 100644
--- a/rhythmdb/rhythmdb.h
+++ b/rhythmdb/rhythmdb.h
@@ -388,6 +388,7 @@ gpointer	rhythmdb_entry_get_type_data (RhythmDBEntry *entry, guint expected_size
 #define		RHYTHMDB_ENTRY_GET_TYPE_DATA(e,t)	((t*)rhythmdb_entry_get_type_data((e),sizeof(t)))
 
 void		rhythmdb_entry_delete	(RhythmDB *db, RhythmDBEntry *entry);
+void		rhythmdb_entry_set_visibility	(RhythmDB *db, RhythmDBEntry *entry, gboolean visible);
 void            rhythmdb_entry_delete_by_type (RhythmDB *db,
 					       RhythmDBEntryType type);
 void		rhythmdb_entry_move_to_trash (RhythmDB *db,
diff --git a/sources/rb-podcast-source.c b/sources/rb-podcast-source.c
index ceb767d..35e3d65 100644
--- a/sources/rb-podcast-source.c
+++ b/sources/rb-podcast-source.c
@@ -939,7 +939,9 @@ impl_delete (RBSource *asource)
 
 	entries = rb_entry_view_get_selected_entries (source->priv->posts);
 	for (l = entries; l != NULL; l = g_list_next (l)) {
-		rhythmdb_entry_delete (source->priv->db, l->data);
+            /* set podcast entries to invisible instead of deleted so they will
+             * not reappear after the podcast has been updated*/
+            rhythmdb_entry_set_visibility (source->priv->db, l->data, FALSE);
 	}
 
 	g_list_foreach (entries, (GFunc)rhythmdb_entry_unref, NULL);
