diff --git a/exec/load/presence_lib.js b/exec/load/presence_lib.js
index 96508c8de71cf1c7b64d2b0b1128bfdeea3847bb..362384854dd4677a188739df3c118591855fbff9 100755
--- a/exec/load/presence_lib.js
+++ b/exec/load/presence_lib.js
@@ -138,7 +138,7 @@ function extended_status(num)
 	f.position = num * 128;
 	var str = f.read(128);
 	f.close();
-	return str;
+	return truncsp(str);
 }
 
 // Returns a string describing the node status, suitable for printing on a single line
@@ -148,11 +148,13 @@ function extended_status(num)
 // options values supported/used:
 // .include_age
 // .include_gender
+// .exclude_username
 // .username_prefix
 // .status_prefix
 // .age_prefix
 // .gender_prefix
 // .gender_separator
+// .exclude_connection
 // .connection_prefix
 // .errors_prefix
 function node_status(node, is_sysop, options, num)
@@ -174,12 +176,14 @@ function node_status(node, is_sysop, options, num)
 			}
 			var user = new User(node.useron);
 
-			if(options.username_prefix)
-				output += options.username_prefix;
-			if(js.global.bbs && (misc&NODE_ANON) && !is_sysop)
-				output += bbs.text(UNKNOWN_USER);
-			else
-				output += user.alias;
+			if (!options.exclude_username) {
+				if(options.username_prefix)
+					output += options.username_prefix;
+				if(js.global.bbs && (misc&NODE_ANON) && !is_sysop)
+					output += bbs.text(UNKNOWN_USER);
+				else
+					output += user.alias;
+			}
 			if(options.status_prefix)
 				output += options.status_prefix;
 			output += user_age_and_gender(user, options);
@@ -201,9 +205,11 @@ function node_status(node, is_sysop, options, num)
 					output += format(NodeAction[node.action], node.aux);
 					break;
 			}
-			if(options.connection_prefix)
-				output += options.connection_prefix;
-			output += node_connection_desc(node);
+			if (!options.exclude_connection) {
+				if(options.connection_prefix)
+					output += options.connection_prefix;
+				output += node_connection_desc(node);
+			}
 			break;
 		}
 		case NODE_LOGON:
diff --git a/webv4/lib/events/nodelist.js b/webv4/lib/events/nodelist.js
index 239c722ca466f5a0e8de6f164d504c392ba6114b..aa99e303caecb54f5a6059ac602c449043d7fc97 100644
--- a/webv4/lib/events/nodelist.js
+++ b/webv4/lib/events/nodelist.js
@@ -82,18 +82,11 @@ function scan() {
                 };
             } else {
                 usr.number = e.useron;
-                if(e.action == NODE_BXFR) {
-                    actionstr = format(extended_status(i));
-                } else if(e.action==NODE_XTRN && e.aux && xtrn_area.prog[usr.curxtrn]) {
-                    actionstr = format("running %s",xtrn_area.prog[usr.curxtrn].name);
-                } else {
-                    actionstr = format(NodeAction[e.action], e.aux, e.extaux);
-                }
 
                 return {
                     node: i + 1,
                     status: format(NodeStatus[e.status], e.aux, e.extaux),
-                    action: actionstr,
+                    action: node_status(e, user.is_sysop, {exclude_username: true, exclude_connection: true}, i),
                     user: (e.misc & NODE_ANON) && !user.is_sysop ? "Anonymous" : usr.alias,
                     connection : NodeConnectionProper[e.connection] ? NodeConnectionProper[e.connection] : (e.connection + ' bps')
                 };
diff --git a/webv4/root/api/system.ssjs b/webv4/root/api/system.ssjs
index f97ae7ca7d1468896bae6a4f7344cd7d07ab000e..f93ad8d6a519596bbc24096ffe26662886d4b5e5 100644
--- a/webv4/root/api/system.ssjs
+++ b/webv4/root/api/system.ssjs
@@ -40,17 +40,10 @@ if ((http_request.method === 'GET' || http_request.method === 'POST') && http_re
 				reply = system.node_list.reduce(function (a, c, i) {
 					if (c.status !== 3) return a;
 					usr.number = c.useron;
-					if(c.action == NODE_BXFR) {
-						actionstr = format(extended_status(i));
-					} else if(c.action==NODE_XTRN && c.aux && xtrn_area.prog[usr.curxtrn]) {
-						actionstr = format("running %s",xtrn_area.prog[usr.curxtrn].name);
-					} else {
-						actionstr = format(NodeAction[c.action], c.aux, c.extaux);
-					}
 					a.push({
 						node: i,
 						status: format(NodeStatus[c.status], c.aux, c.extaux),
-						action: actionstr,
+						action: node_status(c, user.is_sysop, {exclude_username: true, exclude_connection: true}, i),
 						user: usr.alias,
 						connection: usr.connection
 					});