diff --git a/src/sbbs3/umonitor/umonitor.c b/src/sbbs3/umonitor/umonitor.c
index 491ce01e4515b1bd8d575ad9ed37f2b5d31c1402..cc73311dc0db6ed002964aacd2eaacfef12defb2 100644
--- a/src/sbbs3/umonitor/umonitor.c
+++ b/src/sbbs3/umonitor/umonitor.c
@@ -444,9 +444,10 @@ int view_logs(scfg_t *cfg)
 	localtime_r(&now,&tm);
 	now -= 60*60*24;
 	localtime_r(&now,&tm_yest);
-	if((opt=(char **)alloca(sizeof(char *)*(9+1)))==NULL)
-		allocfail(sizeof(char *)*(9+1));
-	for(i=0;i<(9+1);i++)
+	const int num_opts = 11;
+	if((opt=(char **)alloca(sizeof(char *)*(num_opts+1)))==NULL)
+		allocfail(sizeof(char *)*(num_opts+1));
+	for(i=0;i<(num_opts+1);i++)
 		if((opt[i]=(char *)alloca(MAX_OPLN))==NULL)
 			allocfail(MAX_OPLN);
 
@@ -458,6 +459,8 @@ int view_logs(scfg_t *cfg)
 	strcpy(opt[i++],"Yesterday's log");
 	strcpy(opt[i++],"Spam log");
 	strcpy(opt[i++],"SBBSecho log");
+	strcpy(opt[i++],"EchoMail stats");
+	strcpy(opt[i++],"Bad Areas list");
 	strcpy(opt[i++],"Guru log");
 	strcpy(opt[i++],"Hack log");
 	opt[i][0]=0;
@@ -471,6 +474,8 @@ int view_logs(scfg_t *cfg)
 	                "`Yesterday's log     : `View Yesterday's system activity.\n"
 	                "`Spam log            : `View the log of Spam E-Mail sent to the system.\n"
 	                "`SBBSecho log        : `View the FidoNet EchoMail program log.\n"
+	                "`EchoMail stats      : `view the EchoMail statistics.\n"
+	                "`Bad Areas list      : `view the list of unknown EchoMail areas.\n"
 	                "`Guru log            : `View the transcriptions of chats with the Guru.\n"
 	                "`Hack log            : `View the Hack attempt log.";
 
@@ -511,10 +516,18 @@ int view_logs(scfg_t *cfg)
 				view_log(str,"SBBSecho Log");
 				break;
 			case 7:
+				sprintf(str,"%sechostats.ini",cfg->data_dir);
+				view_log(str,"EchoMail Stats");
+				break;
+			case 8:
+				sprintf(str,"%sbadareas.lst",cfg->data_dir);
+				view_log(str,"Bad Area List");
+				break;
+			case 9:
 				sprintf(str,"%sguru.log",cfg->logs_dir);
 				view_log(str,"Guru Log");
 				break;
-			case 8:
+			case 10:
 				sprintf(str,"%shack.log",cfg->logs_dir);
 				view_log(str,"Hack Log");
 				break;
@@ -717,6 +730,7 @@ int edit_cfg(scfg_t *cfg)
 	strcpy(opt[i++],"mime_types.ini");
 	strcpy(opt[i++],"relay.cfg");
 	strcpy(opt[i++],"sbbsecho.ini");
+	strcpy(opt[i++],"../data/areas.bbs");
 	strcpy(opt[i++],"services.ini");
 	strcpy(opt[i++],"ftpalias.cfg");
 	strcpy(opt[i++],"sockopts.ini");
@@ -727,7 +741,7 @@ int edit_cfg(scfg_t *cfg)
 	uifc.helpbuf= "Highlight desired file and hit Enter to edit it.";
 	i=0;
 	while(1) {
-		switch(uifc.list(WIN_MID|WIN_SAV,0,0,0,&i,0,"System Options",opt))  {
+		switch(uifc.list(WIN_MID|WIN_SAV,0,0,0,&i,0,"Edit Config File",opt))  {
 			case -1:
 				return(0);
 				break;
@@ -767,7 +781,7 @@ int edit_can(scfg_t *cfg)
 	uifc.helpbuf="Highlight desired file and hit Enter to edit it.";
 	i=0;
 	while(1) {
-		switch(uifc.list(WIN_MID|WIN_SAV,0,0,0,&i,0,"System Options",opt))  {
+		switch(uifc.list(WIN_MID|WIN_SAV,0,0,0,&i,0,"Edit Filter File",opt))  {
 			case -1:
 				return(0);
 				break;
@@ -945,9 +959,10 @@ USAGE:
 		exit(1);
 	}
 
-	if((opt=(char **)alloca(sizeof(char *)*(10+1)))==NULL)
-		allocfail(sizeof(char *)*(10+1));
-	for(i=0;i<(10+1);i++)
+	const int main_menu_opts = 11;
+	if((opt=(char **)alloca(sizeof(char *)*(main_menu_opts+1)))==NULL)
+		allocfail(sizeof(char *)*(main_menu_opts+1));
+	for(i=0;i<(main_menu_opts+1);i++)
 		if((opt[i]=(char *)alloca(MAX_OPLN))==NULL)
 			allocfail(MAX_OPLN);
 
@@ -1035,31 +1050,34 @@ USAGE:
 
 			/* System Options */
 			i=0;
-			strcpy(opt[i++],"Run SCFG");
-			strcpy(opt[i++],"Run User Editor");
+			strcpy(opt[i++],"Configure BBS");
+			strcpy(opt[i++],"Configure FidoNet");
+			strcpy(opt[i++],"Edit Users");
 			strcpy(opt[i++],"Run SyncTERM");
-			strcpy(opt[i++],"View logs");
-			strcpy(opt[i++],"Force QWK Net callout");
-			strcpy(opt[i++],"Run event");
-			strcpy(opt[i++],"Recycle servers");
-			strcpy(opt[i++],"Edit CFG/INI files");
-			strcpy(opt[i++],"Edit trashcan files");
+			strcpy(opt[i++],"View Logs");
+			strcpy(opt[i++],"Force QWKnet Callout");
+			strcpy(opt[i++],"Force Timed Event");
+			strcpy(opt[i++],"Recycle Servers");
+			strcpy(opt[i++],"Edit Config Files");
+			strcpy(opt[i++],"Edit Filter Files");
 			sysop_chat_opt = i++;
 			opt[i][0]=0;
 			uifc.helpbuf=	"`System Options`\n"
 			                "`------------`\n\n"
-			                "`Run SCFG              : `Run the Synchronet Configuration Utility.\n"
-			                "`Run User Editor       : `Call up the User Editor.\n"
+			                "`Configure BBS         : `Run the Synchronet Configuration Utility (SCFG).\n"
+							"`Configure FidoNet     : `Run the FidoNet Configuration Utility (EchoCFG).\n"
+			                "`Edit Users            : `Run the Synchronet User Editor.\n"
 			                "`Run SyncTERM          : `Run SyncTERM for RLogin.  SyncTERM must be\n"
 			                 "                        in the exec directory.\n"
-			                "`View logs             : `View the various system logs.\n"
-			                "`Force QWK Net callout : `Force a callout to QWK Net Hub.  Select which\n"
+			                "`View Logs             : `View the various system logs.\n"
+			                "`Force QWKnet callout  : `Force a callout to QWK Network Hub. Select which\n"
 			                 "                        Hub from a popup list of configured Hubs.\n"
-			                "`Run Event             : `Call up a menu of system events that can be\n"
+			                "`Force Timed Event     : `Call up a menu of system events that can be\n"
 			                "                        manually.\n"
 			                "`Recycle Servers       : `Have the Servers reload their configuration \n"
 			                "                        files.\n"
-			                "`Edit trashcan files   : `Edit the various .can files.  i.e.; ip.can";
+			                "`Edit Config Files     : `Edit the various configuration files.\n"
+			                "`Edit Filter Files     : `Edit the various filter files, e.g. ip.can.";
 
 			done=0;
 			i=0;
@@ -1079,7 +1097,7 @@ USAGE:
 						do_cmd(str);
 						break;
 					case 1:
-						sprintf(str,"%suedit ",cfg.exec_dir);
+						sprintf(str,"%sechocfg ",cfg.exec_dir);
 						for(j=1; j<argc; j++) {
 							strcat(str,"'");
 							strcat(str,argv[j]);
@@ -1088,7 +1106,7 @@ USAGE:
 						do_cmd(str);
 						break;
 					case 2:
-						sprintf(str,"%ssyncterm",cfg.exec_dir);
+						sprintf(str,"%suedit ",cfg.exec_dir);
 						for(j=1; j<argc; j++) {
 							strcat(str,"'");
 							strcat(str,argv[j]);
@@ -1097,24 +1115,33 @@ USAGE:
 						do_cmd(str);
 						break;
 					case 3:
-						view_logs(&cfg);
+						sprintf(str,"%ssyncterm",cfg.exec_dir);
+						for(j=1; j<argc; j++) {
+							strcat(str,"'");
+							strcat(str,argv[j]);
+							strcat(str,"' ");
+						}
+						do_cmd(str);
 						break;
 					case 4:
-						qwk_callouts(&cfg);
+						view_logs(&cfg);
 						break;
 					case 5:
-						run_events(&cfg);
+						qwk_callouts(&cfg);
 						break;
 					case 6:
-						recycle_servers(&cfg);
+						run_events(&cfg);
 						break;
 					case 7:
-						edit_cfg(&cfg);
+						recycle_servers(&cfg);
 						break;
 					case 8:
-						edit_can(&cfg);
+						edit_cfg(&cfg);
 						break;
 					case 9:
+						edit_can(&cfg);
+						break;
+					case 10:
 						sysop_avail = !sysop_avail;
 						set_sysop_availability(&cfg, sysop_avail);
 						break;