diff --git a/src/syncterm/bbslist.c b/src/syncterm/bbslist.c
index 4fe5b12f30eb6ee7aa15635f95eb270d21e4e672..e754d8a3c76d29203d9ec9dca205dd8a211487a5 100644
--- a/src/syncterm/bbslist.c
+++ b/src/syncterm/bbslist.c
@@ -32,7 +32,7 @@ struct sort_order_info {
 #define SORT_ORDER_REVERSED     (1<<0)
 #define SORT_ORDER_STRING       (1<<1)
 
-struct sort_order_info sort_order[] = {
+static struct sort_order_info sort_order[] = {
      {
          NULL
         ,0
@@ -187,18 +187,16 @@ struct sort_order_info sort_order[] = {
 
 int sortorder[sizeof(sort_order)/sizeof(struct sort_order_info)];
 
-char *sort_orders[]={"Entry Name","Address","Connection Type","Port","Date Added","Date Last Connected"};
-
 char *screen_modes[]={     "Current", "80x25", "80x28", "80x30", "80x43", "80x50", "80x60", "132x37 (16:9)", "132x52 (5:4)", "132x25", "132x28", "132x30", "132x34", "132x43", "132x50", "132x60", "C64", "C128 (40col)", "C128 (80col)", "Atari", "Atari XEP80", "Custom", "EGA 80x25", NULL};
-char *screen_modes_enum[]={"Current", "80x25", "80x28", "80x30", "80x43", "80x50", "80x60", "132x37",        "132x52",       "132x25", "132x28", "132x30", "132x34", "132x43", "132x50", "132x60", "C64", "C128-40col",   "C128-80col",   "Atari", "Atari-XEP80", "Custom", "EGA80x25", NULL};
+static char *screen_modes_enum[]={"Current", "80x25", "80x28", "80x30", "80x43", "80x50", "80x60", "132x37",        "132x52",       "132x25", "132x28", "132x30", "132x34", "132x43", "132x50", "132x60", "C64", "C128-40col",   "C128-80col",   "Atari", "Atari-XEP80", "Custom", "EGA80x25", NULL};
 char *log_levels[]={"Emergency", "Alert", "Critical", "Error", "Warning", "Notice", "Info", "Debug", NULL};
-char *log_level_desc[]={"None", "Alerts", "Critical Errors", "Errors", "Warnings", "Notices", "Normal", "All (Debug)", NULL};
+static char *log_level_desc[]={"None", "Alerts", "Critical Errors", "Errors", "Warnings", "Notices", "Normal", "All (Debug)", NULL};
 
 char *rate_names[]={"300", "600", "1200", "2400", "4800", "9600", "19200", "38400", "57600", "76800", "115200", "Current", NULL};
 int rates[]={300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 76800, 115200, 0};
 
-const char *fc_names[] = {"RTS/CTS", "XON/XOFF", "RTS/CTS and XON/XOFF", "None", NULL};
-const char *fc_enum[] = {"RTSCTS", "XONXOFF", "RTSCTS_XONXOFF", "None", NULL};
+static char *fc_names[] = {"RTS/CTS", "XON/XOFF", "RTS/CTS and XON/XOFF", "None", NULL};
+static char *fc_enum[] = {"RTSCTS", "XONXOFF", "RTSCTS_XONXOFF", "None", NULL};
 
 char *music_names[]={"ESC [ | only", "BANSI Style", "All ANSI Music enabled", NULL};
 char music_helpbuf[] = "`ANSI Music Setup`\n\n"
@@ -222,22 +220,22 @@ char music_helpbuf[] = "`ANSI Music Setup`\n\n"
                         "SyncTERM has now defined a third ANSI music sequence which *IS* legal\n"
                         "according to the ANSI spec.  Specifically ESC[|.";
 
-char *address_families[]={"PerDNS", "IPv4", "IPv6", NULL};
-char *address_family_names[]={"As per DNS", "IPv4 only", "IPv6 only", NULL};
+static char *address_families[]={"PerDNS", "IPv4", "IPv6", NULL};
+static char *address_family_names[]={"As per DNS", "IPv4 only", "IPv6 only", NULL};
 
-char *address_family_help = "`Address Family`\n\n"
+static char *address_family_help = "`Address Family`\n\n"
                             "Select the address family to resolve\n\n"
                             "`As per DNS`..: Uses what is in the DNS system\n"
                             "`IPv4 only`...: Only uses IPv4 addresses.\n"
                             "`IPv6 only`...: Only uses IPv6 addresses.\n";
 
-char *address_help=
+static char *address_help=
                     "`Address`, `Phone Number`, `Serial Port`, or `Command`\n\n"
                     "Enter the hostname, IP address, phone number, or serial port device of\n"
                     "the system to connect to. Example: `nix.synchro.net`\n\n"
                     "In the case of the Shell type, enter the command to run.\n"
                     "Shell types are only functional under *nix\n";
-char *conn_type_help=           "`Connection Type`\n\n"
+static char *conn_type_help=           "`Connection Type`\n\n"
                                 "Select the type of connection you wish to make:\n\n"
                                 "`RLogin`...........: Auto-login with RLogin protocol\n"
                                 "`RLogin Reversed`..: RLogin using reversed username/password parameters\n"
@@ -250,6 +248,8 @@ char *conn_type_help=           "`Connection Type`\n\n"
                                 "`MBBS GHost`.......: Communicate using the Major BBS 'GHost' protocol\n";
                                 ;
 
+static char *YesNo[3]={"Yes","No",""};
+
 ini_style_t ini_style = {
     /* key_len */ 15,
     /* key_prefix */ "\t",
@@ -701,6 +701,7 @@ void read_item(str_list_t listfile, struct bbslist *entry, char *bbsname, int id
     entry->music=iniGetInteger(section,NULL,"ANSIMusic",CTERM_MUSIC_BANSI);
     entry->address_family=iniGetEnum(section,NULL,"AddressFamily",address_families, ADDRESS_FAMILY_UNSPEC);
     iniGetString(section,NULL,"Font","Codepage 437 English",entry->font);
+    iniGetString(section,NULL,"Comment","",entry->comment);
     entry->type=type;
     entry->id=id;
 
@@ -920,7 +921,6 @@ int edit_list(struct bbslist **list, struct bbslist *item,char *listpath,int isd
     str_list_t  inifile;
     char    tmp[LIST_NAME_MAX+1];
     char    *itemname;
-    char    *YesNo[3]={"Yes","No",""};
 
     for(i=0;i<sizeof(opt)/sizeof(opt[0]);i++)
         opts[i]=opt[i];
@@ -1468,6 +1468,7 @@ void add_bbs(char *listpath, struct bbslist *bbs)
     iniSetString(&inifile,bbs->name,"Font",bbs->font,&ini_style);
     iniSetBool(&inifile,bbs->name,"HidePopups",bbs->hidepopups,&ini_style);
     iniSetBool(&inifile,bbs->name,"RIP",bbs->rip,&ini_style);
+    iniSetString(&inifile,bbs->name,"Comment",bbs->comment,&ini_style);
     if((listfile=fopen(listpath,"w"))!=NULL) {
         iniWriteFile(listfile,inifile);
         fclose(listfile);
@@ -1960,6 +1961,111 @@ void load_bbslist(struct bbslist **list, size_t listsize, struct bbslist *defaul
         free(current);
 }
 
+/*
+ * Note that any time it's drawn, it's inactive...
+ */
+static void draw_comment(struct bbslist *list)
+{
+	int lpad;
+	int rpad;
+	int clen;
+	int remain;
+	char *comment;
+
+	if (list == NULL)
+		comment = "";
+	else
+		comment = list->comment;
+	gotoxy(1, uifc.scrn_len);
+	textattr(uifc.lclr|(uifc.cclr<<4));
+	// Calculator how to centre.
+	clen = strlen(comment);
+	if (clen > uifc.scrn_width - 4) {
+		lpad = 0;
+		rpad = 0;
+	}
+	else {
+		remain = uifc.scrn_width - 4 - clen;
+		rpad = remain / 2 + (remain % 2);
+		lpad = remain - rpad;
+	}
+	cprintf("  %*s%-.*s%*s  ", lpad, "", uifc.scrn_width - 4, comment, rpad, "");
+}
+
+/*
+ * Return value indicates if focus should return to list (true) or move
+ * to settings (false)
+ * 
+ * TODO: ESC in edit box doesn't exit program... good or bad?
+ */
+static bool edit_comment(struct bbslist *list, char *listpath)
+{
+	FILE *listfile;
+	str_list_t inifile = NULL;
+	int ch;
+	bool ret = false;
+	char *old;
+	int i;
+
+	if (list == NULL)
+		goto done;
+	if (safe_mode)
+		goto done;
+	// Open with write permissions so it fails if you can't edit.
+	if ((listfile = fopen(listpath,"r+")) != NULL) {
+		inifile = iniReadFile(listfile);
+		fclose(listfile);
+	}
+	else {
+		goto done;
+	}
+
+	old = strdup(list->comment);
+	if (!old)
+		goto done;
+	textattr(uifc.lclr|(uifc.bclr<<4));
+	gotoxy(1, uifc.scrn_len);
+	clreol();
+	uifc.getstrxy(3, uifc.scrn_len, uifc.scrn_width - 4, list->comment, sizeof(list->comment), K_LINE|K_EDIT|K_NOCRLF|K_TABEXIT|K_MOUSEEXIT|K_TABEXIT, &ch);
+	switch(ch) {
+		case '\x1b':
+			strcpy(list->comment, old);
+			ret = true;
+			goto done;
+		case '\t':
+			ret = false;
+			break;
+		default:
+			ret = true;
+			break;
+	}
+
+	if (strcmp(old, list->comment)) {
+		iniSetString(&inifile, list->name, "Comment", list->comment, &ini_style);
+		if (list->type==SYSTEM_BBSLIST) {
+			uifc.helpbuf = "`Copy from system directory`\n\n"
+			               "This entry was loaded from the system directory.  In order to edit it, it\n"
+			               "must be copied into your personal directory.\n";
+			i = 0;
+			if (uifc.list(WIN_MID|WIN_SAV, 0, 0, 0, &i, NULL, "Copy from system directory?", YesNo) != 0)
+				goto done;
+			list->type = USER_BBSLIST;
+			add_bbs(listpath, list);
+		}
+	}
+
+done:
+	if (inifile != NULL) {
+		if ((listfile = fopen(listpath,"w")) != NULL) {
+			iniWriteFile(listfile, inifile);
+			fclose(listfile);
+		}
+		strListFree(&inifile);
+	}
+	draw_comment(list);
+	return ret;
+}
+
 /*
  * Displays the BBS list and allows edits to user BBS list
  * Mode is one of BBSLIST_SELECT or BBSLIST_EDIT
@@ -1976,7 +2082,6 @@ struct bbslist *show_bbslist(char *current, int connected)
     int     val;
     int     listcount=0;
     char    str[128];
-    char    *YesNo[3]={"Yes","No",""};
     char    title[1024];
     char    *p;
     char    addy[LIST_ADDR_MAX+1];
@@ -2044,7 +2149,7 @@ struct bbslist *show_bbslist(char *current, int connected)
                                     "~ CTRL-E ~ to edit the selected entry\n"
                                     "~ CTRL-S ~ to modify the sort order\n"
                                     "~ ENTER ~ to connect to the selected entry";
-                else
+                else {
                     uifc.helpbuf=   "`SyncTERM Directory`\n\n"
                                     "Commands:\n\n"
                                     "~ CTRL-D ~ Quick-connect to a URL\n"
@@ -2061,6 +2166,7 @@ struct bbslist *show_bbslist(char *current, int connected)
                             "`UIFC List Keys`\n\n"
                                     "~ CTRL-F ~ find text in current menu options\n"
                                     "~ CTRL-G ~ repeat last search\n";
+		}
                 if(opt != oldopt) {
                     if(list[opt]!=NULL && list[opt]->name[0]) {
                         sprintf(title, "%s - %s (%d calls / Last: %s", syncterm_version, (char *)(list[opt]), list[opt]->calls, list[opt]->connected?ctime(&list[opt]->connected):"Never\n");
@@ -2073,28 +2179,32 @@ struct bbslist *show_bbslist(char *current, int connected)
                     settitle(title);
                 }
                 oldopt=opt;
+                uifc.list_height = listcount + 5;
+                if (uifc.list_height > (uifc.scrn_len - 4))
+			uifc.list_height = uifc.scrn_len - 4;
                 val=uifc.list((listcount<MAX_OPTS?WIN_XTR:0)
                     |WIN_ACT|WIN_INSACT|WIN_DELACT|WIN_UNGETMOUSE|WIN_SAV|WIN_ESC
-                    |WIN_T2B|WIN_INS|WIN_DEL|WIN_EDIT|WIN_EXTKEYS|WIN_DYN
-                    ,0,0,0,&opt,&bar,list_title,(char **)list);
+                    |WIN_INS|WIN_DEL|WIN_EDIT|WIN_EXTKEYS|WIN_DYN|WIN_FIXEDHEIGHT
+                    ,0,(uifc.scrn_len-(uifc.list_height)+1)/2-4,0,&opt,&bar,list_title,(char **)list);
                 if(val==listcount)
                     val=listcount|MSK_INS;
                 if(val==-7) { /* CTRL-E */
                     uifc.list((listcount<MAX_OPTS?WIN_XTR:0)
                         |WIN_ACT|WIN_INSACT|WIN_DELACT|WIN_SAV|WIN_ESC
-                        |WIN_T2B|WIN_INS|WIN_DEL|WIN_EDIT|WIN_EXTKEYS|WIN_DYN
-                        |WIN_SEL
-                        ,0,0,0,&opt,&bar,list_title,(char **)list);
+                        |WIN_INS|WIN_DEL|WIN_EDIT|WIN_EXTKEYS|WIN_DYN
+                        |WIN_SEL|WIN_FIXEDHEIGHT
+                        ,0,(uifc.scrn_len-(uifc.list_height)+1)/2-4,0,&opt,&bar,list_title,(char **)list);
                     val=opt|MSK_EDIT;
                 }
+                draw_comment(list[opt]);
                 if(val<0) {
                     switch(val) {
                         case -2-0x13:   /* CTRL-S - Sort */
                             uifc.list((listcount<MAX_OPTS?WIN_XTR:0)
                                 |WIN_ACT|WIN_INSACT|WIN_DELACT|WIN_SAV|WIN_ESC
-                                |WIN_T2B|WIN_INS|WIN_DEL|WIN_EDIT|WIN_EXTKEYS|WIN_DYN
-                                |WIN_SEL
-                                ,0,0,0,&opt,&bar,list_title,(char **)list);
+                                |WIN_INS|WIN_DEL|WIN_EDIT|WIN_EXTKEYS|WIN_DYN
+                                |WIN_SEL|WIN_FIXEDHEIGHT
+                                ,0,(uifc.scrn_len-(uifc.list_height)+1)/2-4,0,&opt,&bar,list_title,(char **)list);
                             edit_sorting(list,&listcount, &opt, &bar, list[opt]?list[opt]->name:NULL);
                             break;
                         case -2-0x3000: /* ALT-B - Scrollback */
@@ -2104,18 +2214,30 @@ struct bbslist *show_bbslist(char *current, int connected)
                                     ,0,0,0,&sopt,&sbar,"SyncTERM Settings",settings_menu);
                             }
                             break;
+                        case -11:       /* TAB */
+                            if (val == -11) {
+                                uifc.list((listcount<MAX_OPTS?WIN_XTR:0)
+                                    |WIN_ACT|WIN_INSACT|WIN_DELACT|WIN_SAV|WIN_ESC
+                                    |WIN_INS|WIN_DEL|WIN_EDIT|WIN_EXTKEYS|WIN_DYN
+                                    |WIN_SEL|WIN_FIXEDHEIGHT
+                                    ,0,(uifc.scrn_len-(uifc.list_height)+1)/2-4,0,&opt,&bar,list_title,(char **)list);
+				if (edit_comment(list[opt], settings.list_path))
+				    break;
+                                at_settings=!at_settings;
+                                break;
+                            }
+                            /* Fall-through */
                         case -2-CIO_KEY_MOUSE:  /* Clicked outside of window... */
                             getmouse(&mevent);
                             /* Fall-through */
                         case -2-0x0f00: /* Backtab */
                         case -2-0x4b00: /* Left Arrow */
                         case -2-0x4d00: /* Right Arrow */
-                        case -11:       /* TAB */
                             uifc.list((listcount<MAX_OPTS?WIN_XTR:0)
                                 |WIN_ACT|WIN_INSACT|WIN_DELACT|WIN_SAV|WIN_ESC
-                                |WIN_T2B|WIN_INS|WIN_DEL|WIN_EDIT|WIN_EXTKEYS|WIN_DYN
-                                |WIN_SEL
-                                ,0,0,0,&opt,&bar,list_title,(char **)list);
+                                |WIN_INS|WIN_DEL|WIN_EDIT|WIN_EXTKEYS|WIN_DYN
+                                |WIN_SEL|WIN_FIXEDHEIGHT
+                                ,0,(uifc.scrn_len-(uifc.list_height)+1)/2-4,0,&opt,&bar,list_title,(char **)list);
                             at_settings=!at_settings;
                             break;
                         case -6:        /* CTRL-D */
@@ -2133,9 +2255,9 @@ struct bbslist *show_bbslist(char *current, int connected)
                                                 "[(rlogin|telnet|ssh)://][user[:password]@]domainname[:port]\n";
                                 uifc.list((listcount<MAX_OPTS?WIN_XTR:0)
                                     |WIN_ACT|WIN_INSACT|WIN_DELACT|WIN_SAV|WIN_ESC
-                                    |WIN_T2B|WIN_INS|WIN_DEL|WIN_EDIT|WIN_EXTKEYS|WIN_DYN
-                                    |WIN_SEL
-                                    ,0,0,0,&opt,&bar,list_title,(char **)list);
+                                    |WIN_INS|WIN_DEL|WIN_EDIT|WIN_EXTKEYS|WIN_DYN
+                                    |WIN_SEL|WIN_FIXEDHEIGHT
+                                    ,0,(uifc.scrn_len-(uifc.list_height)+1)/2-4,0,&opt,&bar,list_title,(char **)list);
                                 uifc.input(WIN_MID|WIN_SAV,0,0,"Address",addy,LIST_ADDR_MAX,0);
                                 memcpy(&retlist, &defaults, sizeof(defaults));
                                 if(uifc.changes) {
@@ -2364,6 +2486,16 @@ struct bbslist *show_bbslist(char *current, int connected)
                         getmouse(&mevent);
                         /* Fall-through */
                     case -2-0x0f00: /* Backtab */
+			if (val == -2-0x0f00) {
+                                uifc.list((listcount<MAX_OPTS?WIN_XTR:0)
+                                    |WIN_ACT|WIN_INSACT|WIN_DELACT|WIN_SAV|WIN_ESC
+                                    |WIN_T2B|WIN_INS|WIN_DEL|WIN_EDIT|WIN_EXTKEYS|WIN_DYN
+                                    |WIN_SEL|WIN_INACT
+                                    ,0,0,0,&opt,&bar,list_title,(char **)list);
+				if (!edit_comment(list[opt], settings.list_path))
+					break;
+			}
+			/* Fall-through */
                     case -2-0x4b00: /* Left Arrow */
                     case -2-0x4d00: /* Right Arrow */
                     case -11:       /* TAB */
diff --git a/src/syncterm/bbslist.h b/src/syncterm/bbslist.h
index 05fc9c3d8394c0730018af166b4a9f662c6c5f7f..3adc488afc3789cb8a146ec0b352be16dbe36a60 100644
--- a/src/syncterm/bbslist.h
+++ b/src/syncterm/bbslist.h
@@ -96,6 +96,7 @@ struct bbslist {
     char            ghost_program[9]; /* GHost program can only be 8 chars max. */
     int             rip;
     int             flow_control;
+    char            comment[1024];
 };
 
 extern char *music_names[];