diff --git a/src/syncterm/bbslist.c b/src/syncterm/bbslist.c
index b4690d56b23c0d3fcf8f3499adb53233d457da69..e0ac741538a0b90a7cf89200d119606ab4efd207 100644
--- a/src/syncterm/bbslist.c
+++ b/src/syncterm/bbslist.c
@@ -21,6 +21,7 @@ struct bbslist_file {
 	unsigned int	calls;
 	char			user[MAX_USER_LEN+1];
 	char			password[MAX_PASSWD_LEN+1];
+	int				dumb;
 };
 
 void sort_list(struct bbslist **list)  {
@@ -69,6 +70,7 @@ void write_list(struct bbslist **list)
 			bbs.added=list[i]->added;
 			bbs.connected=list[i]->connected;
 			bbs.calls=list[i]->calls;
+			bbs.dumb=list[i]->dumb;
 			strcpy(bbs.user,list[i]->user);
 			strcpy(bbs.password,list[i]->password);
 			fwrite(&bbs,sizeof(bbs),1,listfile);
@@ -103,6 +105,7 @@ void read_list(char *listpath, struct bbslist **list, int *i, int type)
 			list[*i]->calls=bbs.calls;
 			strcpy(list[*i]->user,bbs.user);
 			strcpy(list[*i]->password,bbs.password);
+			list[*i]->dumb=bbs.dumb;
 			list[*i]->type=type;
 			list[*i]->id=(*i)++;
 		}
@@ -126,7 +129,9 @@ int edit_list(struct bbslist *item)
 	if(item->type==SYSTEM_BBSLIST) {
 		uifc.helpbuf=	"`Cannot edit system BBS list`\n\n"
 						"SyncTERM supports system-wide and per-user lists.  You may only edit entries"
-						"in your own personal list.\n";
+						"in your own personal list.\n"
+						"\n"
+						"The Be Dumb option can be used to connect to BBSs which support 'dumb' telnet";
 		uifc.msg("Cannot edit system BBS list");
 		return(0);
 	}
@@ -137,6 +142,7 @@ int edit_list(struct bbslist *item)
 		sprintf(opt[2],"RLogin Port:    %hu",item->port);
 		sprintf(opt[3],"Username:       %s",item->user);
 		sprintf(opt[4],"Password");
+		sprintf(opt[5],"Be Dumb:        %s",item->dumb?"Yes":"No");
 		uifc.changes=0;
 
 		uifc.helpbuf=	"`Edit BBS`\n\n"
@@ -206,6 +212,7 @@ struct bbslist *show_bbslist(int mode)
 	int		val;
 	int		listcount=0;
 	char	str[6];
+	char	*YesNo[3]={"Yes","No",""};
 
 	if(init_uifc())
 		return(NULL);
@@ -301,12 +308,24 @@ struct bbslist *show_bbslist(int mode)
 								j=0;
 							list[listcount-1]->port=j;
 						}
-						uifc.helpbuf=	"`Username`\n\n"
-										"Enter the username to attempt auto-login to the remote with.";
-						uifc.input(WIN_MID|WIN_SAV,0,0,"User Name",list[listcount-1]->user,MAX_USER_LEN,K_EDIT);
-						uifc.helpbuf=	"`Password`\n\n"
-										"Enter your password for auto-login.";
-						uifc.input(WIN_MID|WIN_SAV,0,0,"Password",list[listcount-1]->password,MAX_PASSWD_LEN,K_EDIT);
+						if(list[listcount-1]->port != 513) {
+							uifc.helpbuf=	"`Be Dumb`\n\n"
+											"Select this option if attempting to connect to a dumb telnet BBS";
+							list[listcount-1]->dumb=0;
+							uifc.list(WIN_MID|WIN_SAV,0,0,0,&list[listcount-1]->dumb,NULL,"Be Dumb",YesNo);
+						}
+						if(list[listcount-1]->dumb) {
+							uifc.helpbuf=	"`Username`\n\n"
+											"Enter the username to attempt auto-login to the remote with.";
+							uifc.input(WIN_MID|WIN_SAV,0,0,"User Name",list[listcount-1]->user,MAX_USER_LEN,K_EDIT);
+							uifc.helpbuf=	"`Password`\n\n"
+											"Enter your password for auto-login.";
+							uifc.input(WIN_MID|WIN_SAV,0,0,"Password",list[listcount-1]->password,MAX_PASSWD_LEN,K_EDIT);
+						}
+						else {
+							list[listcount-1]->user[0]=0;
+							list[listcount-1]->password[0]=0;
+						}
 						sort_list(list);
 						for(j=0;list[j]->name[0];j++) {
 							if(list[j]->id==listcount-1)
diff --git a/src/syncterm/bbslist.h b/src/syncterm/bbslist.h
index 495cbb659edb63f802581a5f7afd594f1c8c1438..0662d0e160961237860448bb3532087119c83b93 100644
--- a/src/syncterm/bbslist.h
+++ b/src/syncterm/bbslist.h
@@ -24,6 +24,7 @@ struct bbslist {
 	char			password[MAX_PASSWD_LEN+1];
 	int				type;
 	int				id;
+	int				dumb;
 };
 
 struct bbslist *show_bbslist(int mode);
diff --git a/src/syncterm/rlogin.c b/src/syncterm/rlogin.c
index 52882ca6848548c6cc6b61d4134348dfe560d90f..99353bfd03775499c9a7cbd6e77c81606add7231 100644
--- a/src/syncterm/rlogin.c
+++ b/src/syncterm/rlogin.c
@@ -44,13 +44,14 @@ int rlogin_send(char *buffer, size_t buflen, unsigned int timeout)
 	return(0);
 }
 
-int rlogin_connect(char *addr, int port, char *ruser, char *passwd)
+int rlogin_connect(char *addr, int port, char *ruser, char *passwd, int bedumb)
 {
 	HOSTENT *ent;
 	SOCKADDR_IN	saddr;
 	char	nil=0;
 	char	*p;
 	unsigned int	neta;
+    sigset_t sigset;
 
 	for(p=addr;*p;p++)
 		if(*p!='.' && !isdigit(*p))
@@ -81,22 +82,32 @@ int rlogin_connect(char *addr, int port, char *ruser, char *passwd)
 	saddr.sin_addr.s_addr = neta;
 	saddr.sin_family = AF_INET;
 	saddr.sin_port   = htons(port);
+	
+    sigemptyset(&sigset);
+    sigaddset(&sigset, SIGIO);
+    sigaddset(&sigset, SIGALRM);
+    sigprocmask(SIG_BLOCK, &sigset, 0);
 	if(connect(rlogin_socket, (struct sockaddr *)&saddr, sizeof(saddr))) {
 		char str[LIST_ADDR_MAX+20];
 
+	    sigprocmask(SIG_UNBLOCK, &sigset, 0);
+
 		rlogin_close();
 		sprintf(str,"Cannot connect to %s!",addr);
 		uifcmsg(str,	"`Unable to connect`\n\n"
 						"Cannot connect to the remost system... it is down or unreachable.");
 		return(-1);
 	}
+    sigprocmask(SIG_UNBLOCK, &sigset, 0);
 
 	fcntl(rlogin_socket, F_SETFL, fcntl(rlogin_socket, F_GETFL)|O_NONBLOCK);
 
-	rlogin_send("",1,1000);
-	rlogin_send(passwd,strlen(passwd)+1,1000);
-	rlogin_send(ruser,strlen(ruser)+1,1000);
-	rlogin_send("ansi-bbs/9600",14,1000);
+	if(!bedumb) {
+		rlogin_send("",1,1000);
+		rlogin_send(passwd,strlen(passwd)+1,1000);
+		rlogin_send(ruser,strlen(ruser)+1,1000);
+		rlogin_send("ansi-bbs/9600",14,1000);
+	}
 	return(0);
 }
 
diff --git a/src/syncterm/rlogin.h b/src/syncterm/rlogin.h
index 8f8d9940d38e3cfacae3137ff44fac2c9581dae3..3375654803b890e96a13f950cd6a0d4beef1af82 100644
--- a/src/syncterm/rlogin.h
+++ b/src/syncterm/rlogin.h
@@ -7,7 +7,7 @@ extern SOCKET	rlogin_socket;
 
 int rlogin_recv(char *buffer, size_t buflen);
 int rlogin_send(char *buffer, size_t buflen, unsigned int timeout);
-int rlogin_connect(char *addr, int port, char *ruser, char *passwd);
+int rlogin_connect(char *addr, int port, char *ruser, char *passwd, int dumb);
 int rlogin_close(void);
 
 #endif
diff --git a/src/syncterm/syncterm.c b/src/syncterm/syncterm.c
index b5563a642eb8e5c67c0f8f67651d200140f52998..011791de3e4bde6e8b01eb600d92136e56011beb 100644
--- a/src/syncterm/syncterm.c
+++ b/src/syncterm/syncterm.c
@@ -49,7 +49,7 @@ int main(int argc, char **argv)
 
 	atexit(uifcbail);
 	while((bbs=show_bbslist(BBSLIST_SELECT))!=NULL) {
-		if(!rlogin_connect(bbs->addr,bbs->port,bbs->user,bbs->password)) {
+		if(!rlogin_connect(bbs->addr,bbs->port,bbs->user,bbs->password,bbs->dumb)) {
 			/* ToDo: Update the entry with new lastconnected */
 			/* ToDo: Disallow duplicate entries */
 			uifcbail();