diff --git a/src/syncterm/bbslist.c b/src/syncterm/bbslist.c
index 541b636348fb0b4751a709ad6ea2b4a009c8e00e..a53cd882e07a8aabf6db9397f5e813db22b35ccd 100644
--- a/src/syncterm/bbslist.c
+++ b/src/syncterm/bbslist.c
@@ -662,7 +662,18 @@ void change_settings(void)
 				break;
 			case 4:
 				uifc.helpbuf=	"`Modem Init String`\n\n"
-								"Your modem init string goes here.";
+								"Your modem init string goes here.\n";
+								"For reference, here are the expected settings and USR inits\n\n"
+								"State                      USR Init"
+								"------------------------------------"
+								"Echo on                    E1"
+								"Verbal result codes        Q0V1"
+								"Include connection speed   &X4"
+								"Normal CD Handling         C1"
+								"Locked speed               &B1"
+								"Normal DTR                 &D2"
+								"CTS/RTS Flow Control       &H1&R2"
+								"Disable Software Flow      &I0";
 				uifc.input(WIN_MID|WIN_SAV,0,0,"Modem Init String",settings.mdm.init_string,LIST_NAME_MAX,K_EDIT);
 				iniSetString(&inicontents,"SyncTERM","ModemInit",settings.mdm.init_string,&ini_style);
 				break;
diff --git a/src/syncterm/modem.c b/src/syncterm/modem.c
index d0350bbdc13174a0b80073ccb1b1811cbf4b505b..516aa73ec8cde4e09a569894298ec3dec40bda99 100644
--- a/src/syncterm/modem.c
+++ b/src/syncterm/modem.c
@@ -136,29 +136,20 @@ int modem_connect(struct bbslist *bbs)
 	comWriteString(com, "\r");
 
 	/* Wait for "OK" */
-	if(modem_response(respbuf, sizeof(respbuf), 5)) {
-		modem_close();
-		uifc.pop(NULL);
-		uifcmsg("Modem Not Responding",	"`Modem Not Responding`\n\n"
-						"The modem did not respond to the initializtion string\n"
-						"Check your init string and phone number.\n");
-		conn_api.terminate=-1;
-		return(-1);
-	}
-uifc.pop(NULL);
-uifc.pop(respbuf);
-	if(strstr(respbuf, settings.mdm.init_string))
-	if(modem_response(respbuf, sizeof(respbuf), 5)) {
-		modem_close();
-		uifc.pop(NULL);
-		uifcmsg("Modem Not Responding",	"`Modem Not Responding`\n\n"
-						"The modem did not respond to the initializtion string\n"
-						"Check your init string and phone number.\n");
-		conn_api.terminate=-1;
-		return(-1);
+	while(1) {
+		if(modem_response(respbuf, sizeof(respbuf), 5)) {
+			modem_close();
+			uifc.pop(NULL);
+			uifcmsg("Modem Not Responding",	"`Modem Not Responding`\n\n"
+							"The modem did not respond to the initializtion string\n"
+							"Check your init string and phone number.\n");
+			conn_api.terminate=-1;
+			return(-1);
+		}
+		if(strstr(respbuf, settings.mdm.init_string))	/* Echo is on */
+			continue;
+		break;
 	}
-uifc.pop(NULL);
-uifc.pop(respbuf);
 
 	if(!strstr(respbuf, "OK")) {
 		modem_close();
@@ -174,28 +165,22 @@ uifc.pop(respbuf);
 	comWriteString(com, "ATDT");
 	comWriteString(com, bbs->addr);
 	comWriteString(com, "\r");
-	
+
 	/* Wait for "CONNECT" */
-	if(modem_response(respbuf, sizeof(respbuf), 30)) {
-		modem_close();
-		uifc.pop(NULL);
-		uifcmsg("No Answer",	"`No Answer`\n\n"
-						"The modem did not connect withing 30 seconds.\n");
-		conn_api.terminate=-1;
-		return(-1);
-	}
-uifc.pop(NULL);
-uifc.pop(respbuf);
-	if(modem_response(respbuf, sizeof(respbuf), 30)) {
-		modem_close();
-		uifc.pop(NULL);
-		uifcmsg("No Answer",	"`No Answer`\n\n"
-						"The modem did not connect withing 30 seconds.\n");
-		conn_api.terminate=-1;
-		return(-1);
+	while(1) {
+		if(modem_response(respbuf, sizeof(respbuf), 30)) {
+			modem_close();
+			uifc.pop(NULL);
+			uifcmsg("No Answer",	"`No Answer`\n\n"
+							"The modem did not connect withing 30 seconds.\n");
+			conn_api.terminate=-1;
+			return(-1);
+		}
+		if(strstr(respbuf, "ATA"))	/* Dial command echoed */
+			continue;
+		break;
 	}
-uifc.pop(NULL);
-uifc.pop(respbuf);
+
 	if(!strstr(respbuf, "CONNECT")) {
 		modem_close();
 		uifc.pop(NULL);