diff --git a/src/syncterm/bbslist.c b/src/syncterm/bbslist.c
index ce01679be8cc96ac0096087e4a3e15bc086e20d3..3c757b22037b368e50c6d15a7a4870b63af05dbe 100644
--- a/src/syncterm/bbslist.c
+++ b/src/syncterm/bbslist.c
@@ -2485,6 +2485,7 @@ show_bbslist(char *current, int connected)
 	char                  cache_path[MAX_PATH + 1];
 	char                  list_title[30];
 	int                   redraw = 0;
+	bool                  nowait = true;
 
 	glob_sbar = &sbar;
 	glob_sopt = &sopt;
@@ -2570,7 +2571,10 @@ show_bbslist(char *current, int connected)
 				uifc.list_height = listcount + 5;
 				if (uifc.list_height > (uifc.scrn_len - 4))
 					uifc.list_height = uifc.scrn_len - 4;
-				kbwait();
+				if (!nowait) {
+					kbwait();
+					nowait = true;
+				}
 				val = uifc.list((listcount < MAX_OPTS ? WIN_XTR : 0)
 				        | WIN_ACT | WIN_INSACT | WIN_DELACT | WIN_UNGETMOUSE | WIN_SAV | WIN_ESC
 				        | WIN_INS | WIN_DEL | WIN_EDIT | WIN_EXTKEYS | WIN_DYN | WIN_FIXEDHEIGHT
@@ -2736,7 +2740,8 @@ show_bbslist(char *current, int connected)
 							free(list);
 							return NULL;
 						case -2:
-							kbwait();
+							nowait = false;
+							break;
 					}
 				}
 				else if (val & MSK_ON) {
@@ -3006,7 +3011,10 @@ show_bbslist(char *current, int connected)
 				if (oldopt != -2)
 					settitle(syncterm_version);
 				oldopt = -2;
-				kbwait();
+				if (!nowait) {
+					kbwait();
+					nowait = true;
+				}
 				val = uifc.list(WIN_T2B | WIN_RHT | WIN_EXTKEYS | WIN_DYN | WIN_UNGETMOUSE | WIN_ACT | WIN_ESC
 				        ,
 				        0,
@@ -3060,6 +3068,9 @@ show_bbslist(char *current, int connected)
 						    connected ? connected_settings_menu : settings_menu);
 						at_settings = !at_settings;
 						break;
+					case -2:
+						nowait = false;
+						break;
 					case -1: /* ESC */
 						if (!connected)
 							if (!check_exit(true))