diff --git a/src/sbbs3/umonitor/umonitor.c b/src/sbbs3/umonitor/umonitor.c
index c0b5782084b3aab3c86f4d67ef7aa6a98ad9a0ea..376b0177e19ed34f8775ec893052f428dffccaca 100644
--- a/src/sbbs3/umonitor/umonitor.c
+++ b/src/sbbs3/umonitor/umonitor.c
@@ -116,7 +116,7 @@ int spyon(char *sockname)  {
 	struct sockaddr_un spy_name;
 	socklen_t	spy_len;
 	char		key;
-	char		buf[1];
+	char		buf;
 	int		i;
 	struct	termios	tio;
 	struct	termios	old_tio;
@@ -125,6 +125,7 @@ int spyon(char *sockname)  {
 	int		retval=0;
 	char	ANSIbuf[32];
 	int		parsing=0;
+	int		telnet_strip=0;
 
 	/* ToDo Test for it actually being a socket! */
 	/* Well, it will fail to connect won't it?   */
@@ -222,7 +223,20 @@ int spyon(char *sockname)  {
 		}
 		if(spy_sock != INVALID_SOCKET && FD_ISSET(spy_sock,&rd))  {
 			if((i=read(spy_sock,&buf,1))==1)  {
-				write(STDOUT_FILENO,buf,1);
+				if(telnet_strip) {
+					telnet_strip++;
+					if(buf=='\xff' && telnet_strip==2) {
+						telnet_strip=0;
+						write(STDOUT_FILENO,&buf,1);
+					}
+					if(telnet_strip==3)
+						telnet_strip=0;
+				}
+				else
+					if(buf=='\xff')
+						telnet_strip=1;
+					else
+						write(STDOUT_FILENO,&buf,1);
 			}
 			else if(i<0) {
 				close(spy_sock);