diff --git a/plugins/digest/digest.js b/plugins/digest/digest.js
index e3cb1e299ed3b9d3b6359d7488befc48341a5485..842b1006bbef3100c525378622437a1bd306117f 100644
--- a/plugins/digest/digest.js
+++ b/plugins/digest/digest.js
@@ -46,9 +46,8 @@ function catchup_feed(feed_id, callback) {
 	}
 }
 
-function get_visible_article_ids() {
+function parse_article_elements_for_ids(elems) {
 	try {
-		var elems = $("headlines-content").getElementsByTagName("LI");
 		var ids = [];
 
 		for (var i = 0; i < elems.length; i++) {
@@ -59,6 +58,28 @@ function get_visible_article_ids() {
 
 		return ids;
 
+	} catch (e) {
+		exception_error("parse_article_elements_for_ids", e);
+	}
+}
+
+function get_selected_article_ids() {
+	try {
+		var elems = $$('#headlines-content li.selected');
+
+		return parse_article_elements_for_ids(elems);
+
+	} catch (e) {
+		exception_error("get_visible_article_ids", e);
+	}
+}
+
+function get_visible_article_ids() {
+	try {
+		var elems = $("headlines-content").getElementsByTagName("LI");
+
+		return parse_article_elements_for_ids(elems);
+
 	} catch (e) {
 		exception_error("get_visible_article_ids", e);
 	}
@@ -67,9 +88,15 @@ function get_visible_article_ids() {
 function catchup_visible_articles(callback) {
 	try {
 
-		var ids = get_visible_article_ids();
+		var ids = get_selected_article_ids();
+		if ( 0 == ids.length ) {
+			ids = get_visible_article_ids();
+			ntext = [ "Mark %d displayed article as read?", "Mark %d displayed articles as read?" ];
+		} else {
+			ntext = [ "Mark %d selected article as read?", "Mark %d selected articles as read?" ];
+		}
 
-		if (confirm(ngettext("Mark %d displayed article as read?", "Mark %d displayed articles as read?", ids.length).replace("%d", ids.length))) {
+		if (confirm(ngettext(ntext[0], ntext[1], ids.length).replace("%d", ids.length))) {
 
 			var query = "op=rpc&method=catchupSelected" +
 				"&cmode=0&ids=" + param_escape(ids);