diff --git a/podcast/rb-podcast-manager.c b/podcast/rb-podcast-manager.c
index 82019da..164711b 100644
--- a/podcast/rb-podcast-manager.c
+++ b/podcast/rb-podcast-manager.c
@@ -1095,6 +1095,8 @@ rb_podcast_manager_add_post (RhythmDB *db,
 	RhythmDBEntry *entry;
 	GValue val = {0,};
 	GTimeVal time;
+        RhythmDBQueryModel *mountpoint_entries;
+        GtkTreeIter iter;
 
 	if (!uri || !name || !title || !g_utf8_validate(uri, -1, NULL)) {
 		return NULL;
@@ -1103,6 +1105,27 @@ 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.
+         * */
+        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_MOUNTPOINT,
+                uri,
+                RHYTHMDB_QUERY_END);
+
+        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);
@@ -1658,10 +1681,16 @@ rb_podcast_manager_db_entry_deleted_cb (RBPodcastManager *pd,
 		g_object_unref (file);
 
 	} else if (type == RHYTHMDB_ENTRY_TYPE_PODCAST_FEED) {
+                RhythmDBQueryModel *query;
 		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 = rhythmdb_query_model_new_empty (pd->priv->db);
+                g_object_set (query, "show-hidden", TRUE, NULL);
+		query_model = GTK_TREE_MODEL (query);
 		rhythmdb_do_full_query (pd->priv->db,
 					RHYTHMDB_QUERY_RESULTS (query_model),
                 	                RHYTHMDB_QUERY_PROP_EQUALS,
@@ -1827,6 +1856,7 @@ rb_podcast_manager_insert_feed (RBPodcastManager *pd, RBPodcastChannel *data)
 		 * that haven't been downloaded and are no longer present in the feed.
 		 */
 		existing_entries = rhythmdb_query_model_new_empty (db);
+                g_object_set (existing_entries, "show-hidden", TRUE, NULL);
 		rhythmdb_do_full_query (db, RHYTHMDB_QUERY_RESULTS (existing_entries),
 				 	RHYTHMDB_QUERY_PROP_EQUALS,
 					  RHYTHMDB_PROP_TYPE,
@@ -1934,29 +1964,30 @@ 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;
-			}
-		}
+
+                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-tree.c b/rhythmdb/rhythmdb-tree.c
index 48902e4..775b4ee 100644
--- a/rhythmdb/rhythmdb-tree.c
+++ b/rhythmdb/rhythmdb-tree.c
@@ -1741,7 +1741,7 @@ rhythmdb_tree_evaluate_query (RhythmDB *adb,
 #define RHYTHMDB_PROPERTY_COMPARE(OP) \
 			switch (rhythmdb_get_property_type (db, data->propid)) { \
 			case G_TYPE_STRING: \
-				if (strcmp (rhythmdb_entry_get_string (entry, data->propid), \
+				if (g_strcmp0 (rhythmdb_entry_get_string (entry, data->propid), \
 					    g_value_get_string (data->val)) OP 0) \
 					return FALSE; \
 				break; \
diff --git a/sources/rb-podcast-source.c b/sources/rb-podcast-source.c
index ceb767d..2cd4fea 100644
--- a/sources/rb-podcast-source.c
+++ b/sources/rb-podcast-source.c
@@ -939,13 +939,19 @@ 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*/
+            GValue v = {0,};
+            g_value_init (&v, G_TYPE_BOOLEAN);
+            g_value_set_boolean (&v, TRUE);
+            rhythmdb_entry_set (source->priv->db, l->data, RHYTHMDB_PROP_HIDDEN, &v);
+            g_value_unset (&v);
 	}
 
+	rhythmdb_commit (source->priv->db);
+
 	g_list_foreach (entries, (GFunc)rhythmdb_entry_unref, NULL);
 	g_list_free (entries);
-
-	rhythmdb_commit (source->priv->db);
 }
 
 static void
