diff --git a/classes/api.php b/classes/api.php
index 1a52c9257edb6d0fccc7764fecd6dac7d3dc0595..30bde1ffe304469971ec2f147825bf54f451b754 100644
--- a/classes/api.php
+++ b/classes/api.php
@@ -681,47 +681,48 @@ class API extends Handler {
 
 			$qfh_ret = queryFeedHeadlines($params);
 
-		$result = $qfh_ret[0];
+			$result = $qfh_ret[0];
 			$feed_title = $qfh_ret[1];
 
 			$headlines = array();
 
-			while ($line = db_fetch_assoc($result)) {
-				$line["content_preview"] = truncate_string(strip_tags($line["content"]), $excerpt_length);
-				foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_QUERY_HEADLINES) as $p) {
-					$line = $p->hook_query_headlines($line, $excerpt_length, true);
-				}
-
-				$is_updated = ($line["last_read"] == "" &&
-					($line["unread"] != "t" && $line["unread"] != "1"));
+			if (is_resource($result)) {
+				while ($line = db_fetch_assoc($result)) {
+					$line["content_preview"] = truncate_string(strip_tags($line["content"]), $excerpt_length);
+					foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_QUERY_HEADLINES) as $p) {
+						$line = $p->hook_query_headlines($line, $excerpt_length, true);
+					}
 
-				$tags = explode(",", $line["tag_cache"]);
+					$is_updated = ($line["last_read"] == "" &&
+						($line["unread"] != "t" && $line["unread"] != "1"));
 
-				$label_cache = $line["label_cache"];
-				$labels = false;
+					$tags = explode(",", $line["tag_cache"]);
 
-				if ($label_cache) {
-					$label_cache = json_decode($label_cache, true);
+					$label_cache = $line["label_cache"];
+					$labels = false;
 
 					if ($label_cache) {
-						if ($label_cache["no-labels"] == 1)
-							$labels = array();
-						else
-							$labels = $label_cache;
+						$label_cache = json_decode($label_cache, true);
+
+						if ($label_cache) {
+							if ($label_cache["no-labels"] == 1)
+								$labels = array();
+							else
+								$labels = $label_cache;
+						}
 					}
-				}
 
-				if (!is_array($labels)) $labels = get_article_labels($line["id"]);
+					if (!is_array($labels)) $labels = get_article_labels($line["id"]);
 
-				//if (!$tags) $tags = get_article_tags($line["id"]);
-				//if (!$labels) $labels = get_article_labels($line["id"]);
+					//if (!$tags) $tags = get_article_tags($line["id"]);
+					//if (!$labels) $labels = get_article_labels($line["id"]);
 
-				$headline_row = array(
+					$headline_row = array(
 						"id" => (int)$line["id"],
 						"unread" => sql_bool_to_bool($line["unread"]),
 						"marked" => sql_bool_to_bool($line["marked"]),
 						"published" => sql_bool_to_bool($line["published"]),
-						"updated" => (int) strtotime($line["updated"]),
+						"updated" => (int)strtotime($line["updated"]),
 						"is_updated" => $is_updated,
 						"title" => $line["title"],
 						"link" => $line["link"],
@@ -729,49 +730,50 @@ class API extends Handler {
 						"tags" => $tags,
 					);
 
-				if ($include_attachments)
-					$headline_row['attachments'] = get_article_enclosures(
-						$line['id']);
+					if ($include_attachments)
+						$headline_row['attachments'] = get_article_enclosures(
+							$line['id']);
 
-				if ($show_excerpt)
-					$headline_row["excerpt"] = $line["content_preview"];
+					if ($show_excerpt)
+						$headline_row["excerpt"] = $line["content_preview"];
 
-				if ($show_content) {
+					if ($show_content) {
 
-					if ($sanitize_content) {
-						$headline_row["content"] = sanitize(
-							$line["content"],
-							sql_bool_to_bool($line['hide_images']),
-							false, $line["site_url"], false, $line["id"]);
-					} else {
-						$headline_row["content"] = $line["content"];
+						if ($sanitize_content) {
+							$headline_row["content"] = sanitize(
+								$line["content"],
+								sql_bool_to_bool($line['hide_images']),
+								false, $line["site_url"], false, $line["id"]);
+						} else {
+							$headline_row["content"] = $line["content"];
+						}
 					}
-				}
 
-				// unify label output to ease parsing
-				if ($labels["no-labels"] == 1) $labels = array();
+					// unify label output to ease parsing
+					if ($labels["no-labels"] == 1) $labels = array();
 
-				$headline_row["labels"] = $labels;
+					$headline_row["labels"] = $labels;
 
-				$headline_row["feed_title"] = $line["feed_title"] ? $line["feed_title"] :
-					$feed_title;
+					$headline_row["feed_title"] = $line["feed_title"] ? $line["feed_title"] :
+						$feed_title;
 
-				$headline_row["comments_count"] = (int)$line["num_comments"];
-				$headline_row["comments_link"] = $line["comments"];
+					$headline_row["comments_count"] = (int)$line["num_comments"];
+					$headline_row["comments_link"] = $line["comments"];
 
-				$headline_row["always_display_attachments"] = sql_bool_to_bool($line["always_display_enclosures"]);
+					$headline_row["always_display_attachments"] = sql_bool_to_bool($line["always_display_enclosures"]);
 
-				$headline_row["author"] = $line["author"];
+					$headline_row["author"] = $line["author"];
 
-				$headline_row["score"] = (int)$line["score"];
-				$headline_row["note"] = $line["note"];
-				$headline_row["lang"] = $line["lang"];
+					$headline_row["score"] = (int)$line["score"];
+					$headline_row["note"] = $line["note"];
+					$headline_row["lang"] = $line["lang"];
 
-				foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_RENDER_ARTICLE_API) as $p) {
-					$headline_row = $p->hook_render_article_api(array("headline" => $headline_row));
-				}
+					foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_RENDER_ARTICLE_API) as $p) {
+						$headline_row = $p->hook_render_article_api(array("headline" => $headline_row));
+					}
 
-				array_push($headlines, $headline_row);
+					array_push($headlines, $headline_row);
+				}
 			}
 
 			return $headlines;
diff --git a/classes/feeds.php b/classes/feeds.php
index 15b3f068cbb85574891a8bce03b69dff4793bd78..d1caf3c259b5b1a4999ab58f8202648fe585a5e8 100644
--- a/classes/feeds.php
+++ b/classes/feeds.php
@@ -295,7 +295,7 @@ class Feeds extends Handler_Protected {
 			}
 		}
 
-		if ($this->dbh->num_rows($result) > 0) {
+		if (is_resource($result) && $this->dbh->num_rows($result) > 0) {
 
 			$lnum = $offset;
 
@@ -753,7 +753,7 @@ class Feeds extends Handler_Protected {
 
 			if ($_REQUEST["debug"]) $timing_info = print_checkpoint("PE", $timing_info);
 
-		} else {
+		} else if (is_resource($result)) {
 			$message = "";
 
 			switch ($view_mode) {
@@ -799,6 +799,9 @@ class Feeds extends Handler_Protected {
 				}
 				$reply['content'] .= "</span></p></div>";
 			}
+		} else if (is_numeric($result) && $result == -1) {
+			$reply['content'] = '';
+			$reply['top_id_changed'] = true;
 		}
 
 		if ($_REQUEST["debug"]) $timing_info = print_checkpoint("H2", $timing_info);
@@ -884,13 +887,6 @@ class Feeds extends Handler_Protected {
 
 		$reply['headlines'] = array();
 
-		if (!$next_unread_feed)
-			$reply['headlines']['id'] = $feed;
-		else
-			$reply['headlines']['id'] = $next_unread_feed;
-
-		$reply['headlines']['is_cat'] = (bool) $cat_view;
-
 		$override_order = false;
 
 		switch ($order_by) {
@@ -917,8 +913,17 @@ class Feeds extends Handler_Protected {
 		$disable_cache = $ret[3];
 		$vgroup_last_feed = $ret[4];
 
-		$reply['headlines']['content'] =& $ret[5]['content'];
-		$reply['headlines']['toolbar'] =& $ret[5]['toolbar'];
+		//$reply['headlines']['content'] =& $ret[5]['content'];
+		//$reply['headlines']['toolbar'] =& $ret[5]['toolbar'];
+
+		$reply['headlines'] =& $ret[5];
+
+		if (!$next_unread_feed)
+			$reply['headlines']['id'] = $feed;
+		else
+			$reply['headlines']['id'] = $next_unread_feed;
+
+		$reply['headlines']['is_cat'] = (bool) $cat_view;
 
 		if ($_REQUEST["debug"]) $timing_info = print_checkpoint("05", $timing_info);
 
diff --git a/include/functions2.php b/include/functions2.php
index e4e66acd155cc8679f0847febcdc8fa2c386cecd..31504a38be656adbce7cda9158ee8549dff69c9e 100644
--- a/include/functions2.php
+++ b/include/functions2.php
@@ -761,7 +761,7 @@
 						if ($current_top_id != $check_top_id) {
 							// top changed, bail out
 
-							return array(false, $feed_title, $feed_site_url, $last_error, $last_updated, $search_words);
+							return array(-1, $feed_title, $feed_site_url, $last_error, $last_updated, $search_words);
 						}
 					}
 				}
diff --git a/js/viewfeed.js b/js/viewfeed.js
index 8bc42aadc802955e88f85be834619a457636489f..b4bf69a7e1f5de3c101bbbc5b1d0c09f75a44df9 100644
--- a/js/viewfeed.js
+++ b/js/viewfeed.js
@@ -184,10 +184,22 @@ function headlines_callback2(transport, offset, background, infscroll_req) {
 				} else {
 					console.log("no new headlines received");
 
+					var top_id_changed = reply['headlines']['top_id_changed'];
+					console.log("top id changed:" + top_id_changed);
+
 					var hsp = $("headlines-spacer");
 
-					if (hsp) hsp.innerHTML = "<a href='#' onclick='openNextUnreadFeed()'>" +
-						__("Click to open next unread feed.") + "</a>";
+					if (hsp) {
+						if (top_id_changed) {
+							hsp.innerHTML = "<a href='#' onclick='viewCurrentFeed()'>" +
+							__("New articles found, reload feed to continue.") + "</a>";
+						} else {
+							hsp.innerHTML = "<a href='#' onclick='openNextUnreadFeed()'>" +
+							__("Click to open next unread feed.") + "</a>";
+						}
+
+					}
+
 				}
 			}
 
@@ -1325,13 +1337,14 @@ function headlines_scroll_handler(e) {
 				return;
 
 			}
-		} else {
-			if (hsp)
+		/*} else {
+			if (hsp) {
 				if (_infscroll_disable)
 					hsp.innerHTML = "<a href='#' onclick='openNextUnreadFeed()'>" +
 						__("Click to open next unread feed.") + "</a>";
 				else
 					hsp.innerHTML = "";
+			}*/
 		}
 
 		if (isCdmMode()) {