diff --git a/exec/str_cmds.js b/exec/str_cmds.js
index e5127e7eb57589147b898e96a44d91fbc16295bc..67fede855031c6f4f75840644d8634157d1c185d 100644
--- a/exec/str_cmds.js
+++ b/exec/str_cmds.js
@@ -115,7 +115,7 @@ function str_cmds(str)
 		if(word=="LIST") {
 			if(bbs.check_syspass()) {
 				str=str.substr(4);
-				console.printfile(get_arg(str));
+				console.printfile(get_filename(str));
 				return;
 			}
 		}
@@ -162,7 +162,7 @@ function str_cmds(str)
 			writeln("NS <#>\tDisplays the current node stats for node #.");
 		if(word=="NS") {
 			str=str.substr(2);
-			i=parseInt(get_arg(str));
+			i=parseInt(get_nodenum(str));
 			if(!i) i=bbs.node_num;
 			bbs.node_stats(i);
 			return;
@@ -175,7 +175,7 @@ function str_cmds(str)
 		if(word=="EXEC") {
 			if(bbs.check_syspass()) {
 				str=str.substr(4);
-				str=get_arg(str);
+				str=get_cmdline(str);
 				if(str)
 					bbs.exec(str,EX_OUTR|EX_INR);
 			}
@@ -190,7 +190,7 @@ function str_cmds(str)
 		if(word=="NEXEC") {
 			if(bbs.check_syspass()) {
 				str=str.substr(5);
-				str=get_arg(str);
+				str=get_cmdline(str);
 				if(str)
 					bbs.exec(str,EX_OUTR|EX_INR|EX_NATIVE);
 			}
@@ -205,7 +205,7 @@ function str_cmds(str)
 		if(word=="FOSSIL") {
 			if(bbs.check_syspass()) {
 				str=str.substr(6);
-				str=get_arg(str);
+				str=get_cmdline(str);
 				if(str)
 					bbs.exec(str);
 			}
@@ -214,17 +214,46 @@ function str_cmds(str)
 
 		if(str=="HELP") {
 			writeln("CALL <HubID>");
-			writeln("\tforces callout to HubID");
+			writeln("\tforces a callout to QWKnet HubID");
 		}
 		if(word=="CALL") {
 			if(bbs.check_syspass()) {
 				str=str.substr(4);
-				file=new File(system.data_dir+"qnet/"+get_arg(str)+".now");
-				if(file.open("w"))
-					file.close();
+				str=get_arg(str, "QWKnet ID");
+				if(str)
+					file_touch(system.data_dir + "qnet/" + str + ".now");
 			}
 			return;
 		}
+		
+		if(str=="HELP") {
+			writeln("EVENT [EventID]");
+			writeln("\tforces a timed-event to execute via semfile");
+		}
+		if(word=="EVENT") {
+			if(bbs.check_syspass()) {
+				str = str.substr(5);
+				if(str)
+					str = get_arg(str);
+				else {
+					var codes = [];
+					for(var i in xtrn_area.event) {
+						if(xtrn_area.event[i].settings & EVENT_DISABLED)
+							continue;
+						console.uselect(codes.length, "Event", i);
+						codes.push(i);
+					}
+					var selection = console.uselect();
+					if(selection >= 0)
+						str = codes[selection];
+					alert(str);
+				}
+				if(str)
+					file_touch(system.data_dir + str + ".now");
+			}
+			return;
+		}
+		
 
 		if(str=="HELP") {
 			writeln("NODE [parameters]");
@@ -241,7 +270,7 @@ function str_cmds(str)
 		}
 		if(word=="DOWN") {
 			str=str.substr(4);
-			i=parseInt(get_arg(str));
+			i=parseInt(get_nodenum(str));
 			if(!i) i=bbs.node_num;
 			i--;
 			if(i<0 || i>=system.nodes)
@@ -262,7 +291,7 @@ function str_cmds(str)
 		}
 		if(word=="RERUN") {
 			str=str.substr(5);
-			i=parseInt(get_arg(str));
+			i=parseInt(get_nodenum(str));
 			if(!i) i=bbs.node_num;
 			i--;
 			if(i<0 || i>=system.nodes)
@@ -292,7 +321,7 @@ function str_cmds(str)
 		}
 		if(word=="NLOG") {
 			str=str.substr(5);
-			bbs.exec(system.exec_dir+"slog "+system.node_dir+"../node"+get_arg(str)+" /p",EX_OUTR|EX_INR|EX_NATIVE);
+			bbs.exec(system.exec_dir+"slog "+system.node_dir+"../node"+get_nodenum(str)+" /p",EX_OUTR|EX_INR|EX_NATIVE);
 			return;
 		}
 
@@ -304,7 +333,7 @@ function str_cmds(str)
 			// Prompts for syspass
 			str=str.substr(5);
 			if(str.length)
-				bbs.edit_user(bbs.finduser(get_arg(str)));
+				bbs.edit_user(bbs.finduser(get_arg(str, "User Alias")));
 			else
 				bbs.edit_user();
 			return;
@@ -361,7 +390,7 @@ function str_cmds(str)
 				str=str.substr(3);
 				writeln("");
 				try {	// May throw on parseInt()
-					bbs.spy(parseInt(get_arg(str)));
+					bbs.spy(parseInt(get_nodenum(str)));
 					write("\1n\r\nSpy session complete.\r\n");
 				}
 				catch (e) {}
@@ -415,7 +444,7 @@ function str_cmds(str)
 				var bytes=0;
 				var dirs=0;
 				str=str.substr(3);
-				str=get_arg(str);
+				str=get_arg(str, "Path");
 				str=backslash(str);
 				write("\r\nDirectory of: "+str+"\r\n\r\n");
 				a=directory(str+"*",GLOB_NOSORT);
@@ -450,7 +479,7 @@ function str_cmds(str)
 		}
 		if(word=="LOAD") {
 			str=str.substr(4);
-			bbs.load_text(get_arg(str));
+			bbs.load_text(get_filename(str));
 			return;
 		}
 
@@ -698,7 +727,7 @@ function str_cmds(str)
 		}
 		if(word=="LOCK") {
 			str=str.substr(4);
-			i=parseInt(get_arg(str));
+			i=parseInt(get_nodenum(str));
 			if(!i) i=bbs.node_num;
 			i--;
 			if(i<0 || i>=system.nodes)
@@ -719,7 +748,7 @@ function str_cmds(str)
 		}
 		if(word=="INTR") {
 			str=str.substr(4);
-			i=parseInt(get_arg(str));
+			i=parseInt(get_nodenum(str));
 			if(!i) i=bbs.node_num;
 			i--;
 			if(i<0 || i>=system.nodes)
@@ -776,17 +805,34 @@ function str_cmds(str)
 
 //### Generic routine to ask user for parameter if one wasn't specified ###
 
-function get_arg(str)
+function get_arg(str, parm)
 {
+	if(parm == undefined)
+		parm = "Parameter(s)";
 	str=str.replace(/^\s+/,"");
 	if(str=="") {
-		write("Parameter(s): ");
+		write(format("%s: ", parm));
 		str=console.getstr();
 	}
 
 	return(str);
 }
 
+function get_nodenum(str)
+{
+	return get_arg(str, "Node Number");
+}
+
+function get_cmdline(str)
+{
+	return get_arg(str, "Command-line");
+}
+
+function get_filename(str)
+{
+	return get_arg(str, "Filename");
+}
+
 function display_node(node_num)
 {
 	var n=node_num-1;