diff --git a/exec/newslink.js b/exec/newslink.js
index 08e39df32d6104bd3a7da489ec8b59a71623ea5d..dc86f52ee2f8d1d53f54865b53cecd6908bee4d6 100644
--- a/exec/newslink.js
+++ b/exec/newslink.js
@@ -301,6 +301,8 @@ function stop_sem_signaled()
 /******************************/
 var exported=0;
 var imported=0;
+var subimported=0;
+var subpending=0;
 var twitlist_fname = system.ctrl_dir + "twitlist.cfg";
 var use_twitlist = file_exists(twitlist_fname);
 
@@ -554,6 +556,7 @@ for(i in area) {
 	}
 
 	delete article_list;
+	subpending=0;
 	if(use_xover && ptr<=last_msg) {
 		writeln(format("XOVER %u-%u", ptr, last_msg));
 		if(parseInt(readln())==224) {
@@ -565,9 +568,11 @@ for(i in area) {
 				maybe_yield();
 			}
 			printf("%u new articles\r\n", article_list.length);
+			subpending=article_list.length;
 		}
 	}
 
+	subimported=0;
 	for(;socket.is_connected 
 		&& ptr<=last_msg 
 		&& !js.terminated
@@ -576,14 +581,17 @@ for(i in area) {
 		if(this.console!=undefined)
 			console.line_counter = 0;
 
-		if(article_list && !article_listed(article_list,ptr))
+		if(article_list && !article_listed(article_list,ptr)) {
+			subpending--;
 			continue;
+		}
 
 		printf("Retrieving article: %u\r\n", ptr);
 		writeln(format("ARTICLE %lu",ptr));
 		rsp = readln();
 		if(rsp==null || rsp[0]!='2') {
 			printf("!ARTICLE %lu ERROR: %s\r\n",ptr,rsp);
+			subpending--;
 			continue;
 		}
 		body="";
@@ -757,6 +765,7 @@ for(i in area) {
 			&& (system.trashcan("ip", hdr["nntp-posting-host"]) 
 				|| system.trashcan("ip-silent", hdr["nntp-posting-host"]))) {
 			print("!Filtered IP address in NNTP-Posting-Host header field: " + hdr["nntp-posting-host"]);
+			subpending--;
 			continue;
 		}
 			
@@ -785,6 +794,7 @@ for(i in area) {
 						printf("Duplicate file removed: %s\r\n",file.name);   
 					else   
 						printf("!ERROR removing duplicate file: %s\r\n",file.name);   
+					subpending--;
 					continue;   
 				}
 				/* Append MD5 to history file */
@@ -794,6 +804,7 @@ for(i in area) {
 				} else
 					printf("!ERROR %d (%s) creating/appending %s\r\n"
 						,errno, errno_str, md5_file.name);
+				subpending--;
 				continue;
 			}
         } 
@@ -802,6 +813,7 @@ for(i in area) {
 
 		if(truncsp(body).length==0) {
 			printf("Message %lu not imported (blank)\r\n",ptr);
+			subpending--;
 			continue;
 		}
 
@@ -811,6 +823,7 @@ for(i in area) {
 				var reason = format("Too many newsgroups (%d): %s",ngarray.length, hdr.newsgroups);
 				printf("!%s\r\n",reason);
 				system.spamlog("NNTP","NOT IMPORTED",reason,hdr.from,host,hdr.to);
+				subpending--;
 				continue;
 			}
 		}
@@ -819,25 +832,33 @@ for(i in area) {
 			hdr.to=hdr.newsgroups;
 
 		// Duplicate/looped message detection here
-		if(hdr.id.indexOf('@' + system.inetaddr)!=-1)
+		if(hdr.id.indexOf('@' + system.inetaddr)!=-1) {
+			subpending--;
 			continue;
+		}
 		if(hdr.path
-			&& hdr.path.indexOf(system.inetaddr)!=-1)
+			&& hdr.path.indexOf(system.inetaddr)!=-1) {
+			subpending--;
 			continue;
+		}
 		if(hdr.gateway
-			&& hdr.gateway.indexOf(system.inetaddr)!=-1)
+			&& hdr.gateway.indexOf(system.inetaddr)!=-1) {
+			subpending--;
 			continue;
+		}
 
 		if(flags.indexOf('s')==-1 && system.trashcan("subject",hdr.subject)) {
 			var reason = format("Blocked subject (%s)",hdr.subject);
 			printf("!%s\r\n",reason);
 			system.spamlog("NNTP","NOT IMPORTED",reason,hdr.from,host,hdr.to);
+			subpending--;
 			continue;
 		}
 		if(use_twitlist 
 			&& (system.findstr(twitlist_fname,hdr.from) 
 				|| system.findstr(twitlist_fname,hdr.to))) {
 			printf("Filtering message from %s to %s\r\n", hdr.from, hdr.to);
+			subpending--;
 			continue;
 		}
 
@@ -860,10 +881,13 @@ for(i in area) {
 			body += tearline;
 		if(msgbase.save_msg(hdr,body)) {
 			imported++;
+			subimported++;
 			printf("Message %lu imported into %s (%lu of %lu total) %lu lines\r\n"
-				,ptr, sub, imported, msgbase.total_msgs, line_counter);
-		} else
+				,ptr, sub, subimported, subpending, line_counter);
+		} else {
 			printf("!IMPORT %lu ERROR: %s\r\n", ptr, msgbase.last_error);
+			subpending--;
+		}
 	}
 
 	ptr--;	/* point to last requested article number */