diff --git a/mods/websocket-telnet-service.js b/mods/websocket-telnet-service.js
index 7dc6dae15e4bf3b559c45ee241b1a84b5668d48c..b3c2d6c47e7a5c48dfd512d19fe594709c1754c1 100644
--- a/mods/websocket-telnet-service.js
+++ b/mods/websocket-telnet-service.js
@@ -1,5 +1,6 @@
 load('sbbsdefs.js');
 load('websocket-proxy.js');
+load('modopts.js');
 
 function log_err(msg) {
 	log(LOG_DEBUG, msg);
@@ -235,8 +236,21 @@ try {
     }
 
     var wss = new WebSocketProxy(client);
-    log(LOG_DEBUG, 'WSTS Connecting to ' + telnet_addr + ':' + ini.TelnetPort);
-    var telnet = new TelnetClient(telnet_addr, ini.TelnetPort);
+	var wsspath = wss.headers.Path.split('/');
+	if (wsspath.length < 3 || isNaN(parseInt(wsspath[2]))) {
+		var telnet = new TelnetClient(telnet_addr, ini.TelnetPort);
+	} else {
+		var _settings = get_mod_options('web');
+		if (typeof _settings.allowed_ftelnet_targets !== 'string') {
+			throw 'Client supplied Path but no allowed_ftelnet_targets supplied in modopts.ini [web] section.';
+		}
+		var targets = _settings.allowed_ftelnet_targets.split(',');
+		if (!targets.some(function (e) { var target = e.split(':'); return target[0] === wsspath[1] && target[1] === wsspath[2]; })) {
+			throw 'Client supplied Path is not in allowed_ftelnet_targets list.';
+		}
+		log('Using client-supplied target ' + wsspath[1] + ':' + wsspath[2]);
+		var telnet = new TelnetClient(wsspath[1], parseInt(wsspath[2]));
+	}
 
 	while (client.socket.is_connected && telnet.connected) {
 
@@ -265,4 +279,4 @@ try {
 
 	client.socket.close();
 
-}
\ No newline at end of file
+}