diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp
index 631757242f8c1fe5c2ddbd64de423a980373abcf..b954ff30b1a3d39cc5d9becc1268534c4e97e543 100644
--- a/src/sbbs3/main.cpp
+++ b/src/sbbs3/main.cpp
@@ -1066,7 +1066,34 @@ static BYTE* telnet_interpret(sbbs_t* sbbs, BYTE* inbuf, int inlen,
 	                		,sbbs->cfg.node_num
 							,sbbs->telnet_mode&TELNET_MODE_GATE ? "passed-through" : "received"
 							,sbbs->terminal);
-					}
+
+					} else if(option==TELNET_TERM_SPEED
+						&& sbbs->telnet_cmd[3]==TELNET_TERM_IS) {
+						char speed[128];
+						sprintf(speed,"%.*s",(int)sbbs->telnet_cmdlen-6,sbbs->telnet_cmd+4);
+						lprintf(LOG_DEBUG,"Node %d %s telnet terminal speed: %s"
+	                		,sbbs->cfg.node_num
+							,sbbs->telnet_mode&TELNET_MODE_GATE ? "passed-through" : "received"
+							,speed);
+
+					} else if(option==TELNET_NEGOTIATE_WINDOW_SIZE) {
+						long cols = (sbbs->telnet_cmd[3]<<8) | sbbs->telnet_cmd[4];
+						long rows = (sbbs->telnet_cmd[5]<<8) | sbbs->telnet_cmd[6];
+						lprintf(LOG_DEBUG,"Node %d %s telnet window size: %ux%u"
+	                		,sbbs->cfg.node_num
+							,sbbs->telnet_mode&TELNET_MODE_GATE ? "passed-through" : "received"
+							,sbbs->cols
+							,sbbs->rows);
+						if(rows && !sbbs->useron.rows)	/* auto-detect rows */
+							sbbs->rows=rows;
+						if(cols)
+							sbbs->cols=cols;
+
+					} else if(startup->options&BBS_OPT_DEBUG_TELNET)
+            			lprintf(LOG_DEBUG,"Node %d %s unsupported telnet sub-negotiation cmd: %s"
+	                		,sbbs->cfg.node_num
+							,sbbs->telnet_mode&TELNET_MODE_GATE ? "passed-through" : "received"
+                			,telnet_opt_desc(option));
 					sbbs->telnet_cmdlen=0;
 				}
 			}
@@ -1099,7 +1126,9 @@ static BYTE* telnet_interpret(sbbs_t* sbbs, BYTE* inbuf, int inlen,
 							case TELNET_BINARY_TX:
 							case TELNET_ECHO:
 							case TELNET_TERM_TYPE:
+							case TELNET_TERM_SPEED:
 							case TELNET_SUP_GA:
+							case TELNET_NEGOTIATE_WINDOW_SIZE:
 								sbbs->telnet_remote_option[option]=command;
 								sbbs->send_telnet_cmd(telnet_opt_ack(command),option);
 								break;
@@ -1122,6 +1151,19 @@ static BYTE* telnet_interpret(sbbs_t* sbbs, BYTE* inbuf, int inlen,
 							,TELNET_IAC,TELNET_SE);
 						sbbs->putcom(buf,6);
 					}
+					else if(command==TELNET_WILL && option==TELNET_TERM_SPEED) {
+						if(startup->options&BBS_OPT_DEBUG_TELNET)
+							lprintf(LOG_DEBUG,"Node %d requesting telnet terminal speed"
+								,sbbs->cfg.node_num);
+
+						char	buf[64];
+						sprintf(buf,"%c%c%c%c%c%c"
+							,TELNET_IAC,TELNET_SB
+							,TELNET_TERM_SPEED,TELNET_TERM_SEND
+							,TELNET_IAC,TELNET_SE);
+						sbbs->putcom(buf,6);
+					}
+
 				}
 
                 sbbs->telnet_cmdlen=0;