diff --git a/src/sbbs3/scfg/scfgsys.c b/src/sbbs3/scfg/scfgsys.c
index af731cc960298de0185ef5ecca4b0a3e5186f504..bc02fa561720117dba75c794ab2706fe6644b367 100644
--- a/src/sbbs3/scfg/scfgsys.c
+++ b/src/sbbs3/scfg/scfgsys.c
@@ -2837,6 +2837,7 @@ void sys_cfg(void)
 					snprintf(opt[i++],MAX_OPLN,"%-16.16s%s","Logoff",cfg.logoff_mod);
 					snprintf(opt[i++],MAX_OPLN,"%-16.16s%s","Logout",cfg.logout_mod);
 					snprintf(opt[i++],MAX_OPLN,"%-16.16s%s","New User",cfg.newuser_mod);
+					snprintf(opt[i++],MAX_OPLN,"%-16.16s%s","User Config",cfg.usercfg_mod);
 					snprintf(opt[i++],MAX_OPLN,"%-16.16s%s","Expired User",cfg.expire_mod);
 					snprintf(opt[i++],MAX_OPLN,"%-16.16s%s","Auto Message",cfg.automsg_mod);
 					snprintf(opt[i++],MAX_OPLN,"%-16.16s%s","Send Feedback",cfg.feedback_mod);
@@ -2873,6 +2874,7 @@ void sys_cfg(void)
 						"`Logoff`         Terminal logoff procedure (interactive)\n"
 						"`Logout`         Terminal logout procedure (off-line)\n"
 						"`New User`       End of new terminal user creation process\n"
+						"`User Config`    User (e.g. terminal) settings configuration menu\n"
 						"`Expired User`   User account expires (off-line)\n"
 						"`Auto Message`   User chooses to re-read or edit the auto-message\n"
 						"`Send Feedback`  User sending email to a sysop (return error to cancel)\n"
@@ -2931,90 +2933,94 @@ void sys_cfg(void)
 								,cfg.newuser_mod,sizeof(cfg.newuser_mod)-1,K_EDIT);
 							break;
 						case 6:
+							uifc.input(WIN_MID | WIN_SAV, 0, 0, "User Configuration"
+								, cfg.usercfg_mod, sizeof(cfg.usercfg_mod) - 1, K_EDIT);
+							break;
+						case 7:
 							uifc.input(WIN_MID|WIN_SAV,0,0,"Expired User Module"
 								,cfg.expire_mod,sizeof(cfg.expire_mod)-1,K_EDIT);
 							break;
-						case 7:
+						case 8:
 							uifc.input(WIN_MID|WIN_SAV,0,0,"Auto Message Module"
 								,cfg.automsg_mod,sizeof(cfg.automsg_mod)-1,K_EDIT);
 							break;
-						case 8:
+						case 9:
 							uifc.input(WIN_MID|WIN_SAV,0,0,"Send Feedback Module"
 								,cfg.feedback_mod,sizeof(cfg.feedback_mod)-1,K_EDIT);
 							break;
-						case 9:
+						case 10:
 							uifc.input(WIN_MID|WIN_SAV,0,0,"Chat Section Module"
 								,cfg.chatsec_mod,sizeof(cfg.chatsec_mod)-1,K_EDIT);
 							break;
-						case 10:
+						case 11:
 							uifc.input(WIN_MID|WIN_SAV,0,0,"Text File Section Module"
 								,cfg.textsec_mod,sizeof(cfg.textsec_mod)-1,K_EDIT);
 							break;
-						case 11:
+						case 12:
 							uifc.input(WIN_MID|WIN_SAV,0,0,"External Program Section Module"
 								,cfg.xtrnsec_mod,sizeof(cfg.xtrnsec_mod)-1,K_EDIT);
 							break;
-						case 12:
+						case 13:
 							uifc.input(WIN_MID|WIN_SAV,0,0,"Pre External Program Module"
 								,cfg.prextrn_mod,sizeof(cfg.prextrn_mod)-1,K_EDIT);
 							break;
-						case 13:
+						case 14:
 							uifc.input(WIN_MID|WIN_SAV,0,0,"Post External Program Module"
 								,cfg.postxtrn_mod,sizeof(cfg.postxtrn_mod)-1,K_EDIT);
 							break;
-						case 14:
+						case 15:
 							uifc.input(WIN_MID|WIN_SAV,0,0,"Read Mail Module"
 								,cfg.readmail_mod,sizeof(cfg.readmail_mod)-1,K_EDIT);
 							break;
-						case 15:
+						case 16:
 							uifc.input(WIN_MID|WIN_SAV,0,0,"Scan Msgs Module"
 								,cfg.scanposts_mod,sizeof(cfg.scanposts_mod)-1,K_EDIT);
 							break;
-						case 16:
+						case 17:
 							uifc.input(WIN_MID|WIN_SAV,0,0,"Scan Subs Module"
 								,cfg.scansubs_mod,sizeof(cfg.scansubs_mod)-1,K_EDIT);
 							break;
-						case 17:
+						case 18:
 							uifc.input(WIN_MID|WIN_SAV,0,0,"List Msgs Module"
 								,cfg.listmsgs_mod,sizeof(cfg.listmsgs_mod)-1,K_EDIT);
 							break;
-						case 18:
+						case 19:
 							uifc.input(WIN_MID|WIN_SAV,0,0,"List Logons Module"
 								,cfg.logonlist_mod,sizeof(cfg.logonlist_mod)-1,K_EDIT);
 							break;
-						case 19:
+						case 20:
 							uifc.input(WIN_MID|WIN_SAV,0,0,"List Users"
 								,cfg.userlist_mod,sizeof(cfg.userlist_mod)-1,K_EDIT);
 							break;
-						case 20:
+						case 21:
 							uifc.input(WIN_MID|WIN_SAV,0,0,"List Nodes Module"
 								,cfg.nodelist_mod,sizeof(cfg.nodelist_mod)-1,K_EDIT);
 							break;
-						case 21:
+						case 22:
 							uifc.input(WIN_MID|WIN_SAV,0,0,"Who's Online Module"
 								,cfg.whosonline_mod,sizeof(cfg.whosonline_mod)-1,K_EDIT);
 							break;
-						case 22:
+						case 23:
 							uifc.input(WIN_MID|WIN_SAV,0,0,"Private Message Module"
 								,cfg.privatemsg_mod,sizeof(cfg.privatemsg_mod)-1,K_EDIT);
 							break;
-						case 23:
+						case 24:
 							uifc.input(WIN_MID|WIN_SAV,0,0,"Scan Dirs Module"
 								,cfg.scandirs_mod,sizeof(cfg.scandirs_mod)-1,K_EDIT);
 							break;
-						case 24:
+						case 25:
 							uifc.input(WIN_MID|WIN_SAV,0,0,"List Files Module"
 								,cfg.listfiles_mod,sizeof(cfg.listfiles_mod)-1,K_EDIT);
 							break;
-						case 25:
+						case 26:
 							uifc.input(WIN_MID|WIN_SAV,0,0,"View File Information Module"
 								,cfg.fileinfo_mod,sizeof(cfg.fileinfo_mod)-1,K_EDIT);
 							break;
-						case 26:
+						case 27:
 							uifc.input(WIN_MID|WIN_SAV,0,0,"Batch File Transfer Module"
 								,cfg.batxfer_mod, sizeof(cfg.batxfer_mod)-1, K_EDIT);
 							break;
-						case 27:
+						case 28:
 							uifc.input(WIN_MID|WIN_SAV,0,0,"Temporary File Transfer Module"
 								,cfg.tempxfer_mod, sizeof(cfg.tempxfer_mod)-1, K_EDIT);
 							break;
diff --git a/src/sbbs3/scfgdefs.h b/src/sbbs3/scfgdefs.h
index aa0bcc026a45fe725a458863b7dffe8806443103..dc464782f73292517226a2289116bae03db79e22 100644
--- a/src/sbbs3/scfgdefs.h
+++ b/src/sbbs3/scfgdefs.h
@@ -610,6 +610,7 @@ typedef struct
 	char			privatemsg_mod[LEN_CMD+1];
 	char			logonlist_mod[LEN_CMD+1];
 	char			userlist_mod[LEN_CMD+1];
+	char			usercfg_mod[LEN_CMD+1];
     char			prextrn_mod[LEN_CMD+1];			/* External Program pre-execution module */
     char			postxtrn_mod[LEN_CMD+1];		/* External Program post-execution module */
 	char			tempxfer_mod[LEN_CMD+1];
diff --git a/src/sbbs3/scfglib1.c b/src/sbbs3/scfglib1.c
index 2daba463ee589f0f5efe2c315ca35c62c1a1101d..784ebea4b9317a33acd72a8fc664d152d41eee99 100644
--- a/src/sbbs3/scfglib1.c
+++ b/src/sbbs3/scfglib1.c
@@ -230,6 +230,7 @@ BOOL read_main_cfg(scfg_t* cfg, char* error, size_t maxerrlen)
 	SAFECOPY(cfg->logon_mod, iniGetString(section, NULL, "logon", "logon", value));
 	SAFECOPY(cfg->logoff_mod, iniGetString(section, NULL, "logoff", "", value));
 	SAFECOPY(cfg->newuser_mod, iniGetString(section, NULL, "newuser", "newuser", value));
+	SAFECOPY(cfg->usercfg_mod, iniGetString(section, NULL, "usercfg", "", value));
 	SAFECOPY(cfg->login_mod, iniGetString(section, NULL, "login", "login", value));
 	SAFECOPY(cfg->logout_mod, iniGetString(section, NULL, "logout", "", value));
 	SAFECOPY(cfg->sync_mod, iniGetString(section, NULL, "sync", "", value));
diff --git a/src/sbbs3/scfgsave.c b/src/sbbs3/scfgsave.c
index ff0d439ea36c5d137bc450faab265d539421532d..2e4a3a794c2514358742af39aea17307ef7cfec7 100644
--- a/src/sbbs3/scfgsave.c
+++ b/src/sbbs3/scfgsave.c
@@ -238,6 +238,7 @@ BOOL write_main_cfg(scfg_t* cfg)
 		iniSetString(&ini, name, "logon", cfg->logon_mod, NULL);
 		iniSetString(&ini, name, "logoff", cfg->logoff_mod, NULL);
 		iniSetString(&ini, name, "newuser", cfg->newuser_mod, NULL);
+		iniSetString(&ini, name, "usercfg", cfg->usercfg_mod, NULL);
 		iniSetString(&ini, name, "login", cfg->login_mod, NULL);
 		iniSetString(&ini, name, "logout", cfg->logout_mod, NULL);
 		iniSetString(&ini, name, "sync", cfg->sync_mod, NULL);
diff --git a/src/sbbs3/useredit.cpp b/src/sbbs3/useredit.cpp
index 2b3797854c097685b8b68edd655525ae4b34accf..92f94277434fc0715d2c1305d98b941e03a3cb00 100644
--- a/src/sbbs3/useredit.cpp
+++ b/src/sbbs3/useredit.cpp
@@ -718,6 +718,12 @@ void sbbs_t::maindflts(user_t* user)
 	int		i;
 
 	action=NODE_DFLT;
+	if (cfg.usercfg_mod[0]) {
+		char cmdline[256];
+		snprintf(cmdline, sizeof(cmdline), "%s %u", cfg.usercfg_mod, user->number);
+		exec_bin(cmdline, &main_csi);
+		return;
+	}
 	while(online) {
 		CLS;
 		getuserdat(&cfg,user);