var _active_feed_id = false;
 var _active_feed_offset = false;
 var _update_timeout = false;
+var _view_update_timeout = false;
 var _feedlist_expanded = false;
+var _update_seq = 1;
 
 function article_appear(article_id) {
        try {
        }
 }
 
+function view_update() {
+       try {
+               viewfeed(_active_feed_id, _active_feed_offset, false, true);
+               update();
+       } catch (e) {
+               exception_error("view_update", e);
+       }
+}
+
 function view(article_id, dismiss_only) {
        try {
                remove_headline_entry(article_id);
 
                catchup_article(article_id, 
                        function() { 
-                               viewfeed(_active_feed_id, _active_feed_offset, false, true);
-                               update();       
+                               window.clearTimeout(_view_update_timeout);
+                               _view_update_timeout = window.setTimeout("view_update()", 1000);
                        });
 
                return dismiss_only != true;
 
                if (replace == undefined) replace = (offset == 0);
 
+               _update_seq = _update_seq + 1;
+
                var query = "backend.php?op=rpc&subop=digest-update&feed_id=" + 
-                               param_escape(feed_id) + "&offset=" + offset;
+                               param_escape(feed_id) + "&offset=" + offset +
+                               "&seq=" + _update_seq;
 
                console.log(query);
 
 
                if ($('H-LOADING-IMG')) Element.show("H-LOADING-IMG");
 
+
                new Ajax.Request("backend.php", {
                        parameters: query, 
                        onComplete: function(transport) {
        try {
                if (!transport.responseXML) return;
 
+               var seq = transport.responseXML.getElementsByTagName('seq')[0];
+
+               if (seq) {
+                       seq = seq.firstChild.nodeValue;
+                       if (seq != _update_seq) {
+                               console.log("parse_headlines: wrong sequence received.");
+                               return;
+                       }
+               } else {
+                       return;
+               }
+
                var headlines = transport.responseXML.getElementsByTagName('headlines')[0];
                var headlines_title = transport.responseXML.getElementsByTagName('headlines-title')[0];
 
 
                if ($subop == "digest-update") {
                        $feed_id = db_escape_string($_REQUEST['feed_id']);
                        $offset = db_escape_string($_REQUEST['offset']);
+                       $seq = db_escape_string($_REQUEST['seq']);
                
                        if (!$feed_id) $feed_id = -4;
                        if (!$offset) $offset = 0;
                        print "<rpc-reply>";
 
+                       print "<seq>$seq</seq>";
+
                        $headlines = api_get_headlines($link, $feed_id, 10, $offset,
                                '', ($feed_id == -4), true, false, "unread", "updated DESC");