diff --git a/js/viewfeed.js b/js/viewfeed.js
index c1163eab773e1b3d6ac22be6ceebf61de71c6c70..3d23e4c0677919490a88854e23802f1bf69069e1 100644
--- a/js/viewfeed.js
+++ b/js/viewfeed.js
@@ -12,6 +12,7 @@ var catchup_timeout_id = false;
 
 var cids_requested = [];
 var loaded_article_ids = [];
+var _last_headlines_update = 0;
 
 var has_storage = 'sessionStorage' in window && window['sessionStorage'] !== null;
 
@@ -204,6 +205,7 @@ function headlines_callback2(transport, offset, background, infscroll_req) {
 		}
 
 		_infscroll_request_sent = 0;
+		_last_headlines_update = new Date().getTime() / 1000;
 
 		unpackVisibleHeadlines();
 
@@ -1159,7 +1161,6 @@ function postMouseOut(id) {
 
 function unpackVisibleHeadlines() {
 	try {
-
 		if (!isCdmMode()) return;
 
 		$$("#headlines-frame > div[id*=RROW]").each(
@@ -1178,7 +1179,6 @@ function unpackVisibleHeadlines() {
 			}
 		);
 
-
 	} catch (e) {
 		exception_error("unpackVisibleHeadlines", e);
 	}
@@ -1209,6 +1209,11 @@ function headlines_scroll_handler(e) {
 
 		if (getInitParam("cdm_auto_catchup") == 1) {
 
+			// let's get DOM some time to settle down
+			var ts = new Date().getTime() / 1000;
+
+			if (ts - _last_headlines_update < 3) return;
+
 			$$("#headlines-frame > div[id*=RROW][class*=Unread]").each(
 				function(child) {
 					if (child.hasClassName("Unread") && $("headlines-frame").scrollTop >