diff --git a/exec/finger.js b/exec/finger.js
index 79316daadecd25100b62fa71dcde618ab91b0c36..f042e449f5bb1083876f1523e9d1191c6cfa854c 100644
--- a/exec/finger.js
+++ b/exec/finger.js
@@ -2,9 +2,26 @@
 
 // A simple finger client
 
-if(argc>0 && argv[0].indexOf('@')!=-1)
-	dest = argv[0];
-else if((dest = prompt("User (user@hostname)"))==null)
+load('sockdefs.js');
+var dest;
+var udp = false;
+var protocol = "finger";
+
+var i;
+for(i = 0; i < argc; i++) {
+	if(argv[i] == '-udp')
+		use_udp = true;
+	else if(argv[i] == '-s')
+		protocol = "systat";
+	else if(argv[i].indexOf('@')!=-1)
+		dest = argv[i];
+	else {
+		alert("Unsupported option: " + argv[i]);
+		exit();
+	}
+}
+
+if(!dest && (dest = prompt("User (user@hostname)"))==null)
 	exit();
 
 if((hp = dest.indexOf('@'))==-1) {
@@ -13,13 +30,15 @@ if((hp = dest.indexOf('@'))==-1) {
 }
 
 host = dest.slice(hp+1);
-sock = new Socket();
+sock = new Socket(use_udp ? SOCK_DGRAM : SOCK_STREAM);
 //sock.debug = true;
-if(!sock.connect(host,"finger")) 
+if(!sock.connect(host, protocol)) 
 	alert("Connection to " + host + " failed with error " + sock.last_error);
 else {
 	sock.send(dest.slice(0,hp)+"\r\n");
-	while(bbs.online && sock.is_connected)
+	if(use_udp)
+		print(sock.recvfrom().data);
+	else while(sock.is_connected && !js.terminated)
 		print(sock.readline());
 }
 sock.close();