diff --git a/src/sbbs3/ctrl/MainFormUnit.cpp b/src/sbbs3/ctrl/MainFormUnit.cpp
index 661716b6bef2e4291b56f3ce4af24cd00acfc935..86918cc5ac50eddf11099e8551e4120b8686c5a8 100644
--- a/src/sbbs3/ctrl/MainFormUnit.cpp
+++ b/src/sbbs3/ctrl/MainFormUnit.cpp
@@ -2256,7 +2256,6 @@ bool __fastcall TMainForm::SaveIniSettings(TObject* Sender)
 
     bool success = sbbs_write_ini(fp
         ,&cfg
-		,10	/* backup_level */
         ,&global
         ,SysAutoStart		,&bbs_startup
         ,FtpAutoStart		,&ftp_startup
diff --git a/src/sbbs3/sbbs_ini.c b/src/sbbs3/sbbs_ini.c
index 90d820d78c784761d3cec10e18c05d6bc11ca30f..9f66c63a299223da6188f1eb0901f54b2b0dd895 100644
--- a/src/sbbs3/sbbs_ini.c
+++ b/src/sbbs3/sbbs_ini.c
@@ -795,7 +795,6 @@ void sbbs_read_ini(
 BOOL sbbs_write_ini(
 	 FILE*					fp
     ,scfg_t*                cfg
-	,int					backup_level
 	,global_startup_t*		global
 	,BOOL					run_bbs
 	,bbs_startup_t*			bbs
@@ -1358,7 +1357,7 @@ BOOL sbbs_write_ini(
 	}
 
 	/***********************************************************************/
-	backup(cfg->filename, backup_level, /* rename: */FALSE);
+	backup(cfg->filename, cfg->config_backup_level, /* rename: */FALSE);
 	result=iniWriteFile(fp,list);
 
 	} while(0);	/* finally */
diff --git a/src/sbbs3/sbbs_ini.h b/src/sbbs3/sbbs_ini.h
index ff46358d8c80ed812f61b7ead64775d0409a8a9f..9a7b3f8dac7ed05b4e26c41e37e53b0be4e6a647 100644
--- a/src/sbbs3/sbbs_ini.h
+++ b/src/sbbs3/sbbs_ini.h
@@ -82,7 +82,6 @@ BOOL sbbs_set_js_settings(
 BOOL sbbs_write_ini(
 	 FILE*					fp
     ,scfg_t*                cfg
-	,int					backup_level
 	,global_startup_t*		global
 	,BOOL					run_bbs
 	,bbs_startup_t*			bbs
diff --git a/src/sbbs3/scfg/scfg.c b/src/sbbs3/scfg/scfg.c
index cf27da1c28f94db32b8b2018b94c2919be0a502b..8976bd18e6e46ed291b884f9888b26d334846c49 100644
--- a/src/sbbs3/scfg/scfg.c
+++ b/src/sbbs3/scfg/scfg.c
@@ -45,7 +45,6 @@ extern BOOL no_msghdr;
 char **opt;
 char tmp[256];
 char error[256];
-int  backup_level=5;
 char* area_sort_desc[] = { "Index Position", "Long Name", "Short Name", "Internal Code Suffix", NULL };
 static char title[128];
 
@@ -352,8 +351,8 @@ void cfg_wizard(void)
 				if(strcmp(saved_cfg.sys_pass, cfg.sys_pass) != 0)
 					reencrypt_keys(saved_cfg.sys_pass, cfg.sys_pass);
 				cfg.new_install = new_install;
-				save_main_cfg(&cfg, backup_level);
-				save_msgs_cfg(&cfg, backup_level);
+				save_main_cfg(&cfg);
+				save_msgs_cfg(&cfg);
 				break;
 		}
 		++stage;
@@ -446,9 +445,6 @@ int main(int argc, char **argv)
 					printf("NOTICE: The -d option is deprecated, use -id instead\n");
 					SLEEP(2000);
                     door_mode=TRUE;
-                    break;
-                case 'B':
-        			backup_level=atoi(argv[i]+2);
                     break;
 				case 'U':
 					umask(strtoul(argv[i]+2,NULL,8));
@@ -543,9 +539,7 @@ int main(int argc, char **argv)
 						"       D = standard input/output/door mode\n"
                         "-v# =  set video mode to # (default=auto)\n"
                         "-l# =  set screen lines to # (default=auto-detect)\n"
-                        "-b# =  set automatic back-up level (default=%d)\n"
 						"-y  =  automatically save changes (don't ask)\n"
-						,backup_level
                         );
         			exit(0);
 			}
@@ -621,7 +615,7 @@ int main(int argc, char **argv)
 		else {
 			printf("Imported %ld areas (%ld added) from %s\n", ported, added, fname);
 			printf("Saving configuration (%u message areas) ... ", cfg.total_subs);
-			write_msgs_cfg(&cfg,backup_level);
+			write_msgs_cfg(&cfg);
 			printf("done.\n");
 			refresh_cfg(&cfg);
 		}
@@ -810,7 +804,7 @@ int main(int argc, char **argv)
 						if(j==-1)
 							continue;
 						if(!j) {
-							save_chat_cfg(&cfg,backup_level);
+							save_chat_cfg(&cfg);
 							refresh_cfg(&cfg);
 						}
 						break;
@@ -965,50 +959,50 @@ BOOL load_xtrn_cfg(scfg_t* cfg, char *error, size_t maxerrlen)
 	return result;
 }
 
-BOOL save_main_cfg(scfg_t* cfg, int backup_level)
+BOOL save_main_cfg(scfg_t* cfg)
 {
 	uifc.pop("Writing main.ini ...");
-	BOOL result = write_main_cfg(cfg, backup_level);
+	BOOL result = write_main_cfg(cfg);
 	uifc.pop(NULL);
 	return result;
 }
 
-BOOL save_node_cfg(scfg_t* cfg, int backup_level)
+BOOL save_node_cfg(scfg_t* cfg)
 {
 	uifc.pop("Writing node.ini ...");
-	BOOL result = write_node_cfg(cfg, backup_level);
+	BOOL result = write_node_cfg(cfg);
 	uifc.pop(NULL);
 	return result;
 }
 
-BOOL save_msgs_cfg(scfg_t* cfg, int backup_level)
+BOOL save_msgs_cfg(scfg_t* cfg)
 {
 	uifc.pop("Writing msgs.ini ...");
-	BOOL result = write_msgs_cfg(cfg, backup_level);
+	BOOL result = write_msgs_cfg(cfg);
 	uifc.pop(NULL);
 	return result;
 }
 
-BOOL save_file_cfg(scfg_t* cfg, int backup_level)
+BOOL save_file_cfg(scfg_t* cfg)
 {
 	uifc.pop("Writing file.ini ...");
-	BOOL result = write_file_cfg(cfg, backup_level);
+	BOOL result = write_file_cfg(cfg);
 	uifc.pop(NULL);
 	return result;
 }
 
-BOOL save_chat_cfg(scfg_t* cfg, int backup_level)
+BOOL save_chat_cfg(scfg_t* cfg)
 {
 	uifc.pop("Writing chat.ini ...");
-	BOOL result = write_chat_cfg(cfg, backup_level);
+	BOOL result = write_chat_cfg(cfg);
 	uifc.pop(NULL);
 	return result;
 }
 
-BOOL save_xtrn_cfg(scfg_t* cfg, int backup_level)
+BOOL save_xtrn_cfg(scfg_t* cfg)
 {
 	uifc.pop("Writing xtrn.ini ...");
-	BOOL result = write_xtrn_cfg(cfg, backup_level);
+	BOOL result = write_xtrn_cfg(cfg);
 	uifc.pop(NULL);
 	return result;
 }
@@ -1084,7 +1078,7 @@ void txt_cfg()
 			if(j==-1)
 				continue;
 			if(!j) {
-				save_file_cfg(&cfg,backup_level);
+				save_file_cfg(&cfg);
 				refresh_cfg(&cfg);
 			}
 			return;
@@ -1267,7 +1261,7 @@ void shell_cfg()
 				continue;
 			if(!j) {
 				cfg.new_install=new_install;
-				save_main_cfg(&cfg,backup_level);
+				save_main_cfg(&cfg);
 				refresh_cfg(&cfg);
 			}
 			return;
@@ -2468,11 +2462,11 @@ void bail(int code)
         load_chat_cfg(&cfg, error, sizeof(error));
         load_xtrn_cfg(&cfg, error, sizeof(error));
 		cfg.new_install=new_install;
-        save_main_cfg(&cfg,backup_level);
-        save_msgs_cfg(&cfg,backup_level);
-        save_file_cfg(&cfg,backup_level);
-        save_chat_cfg(&cfg,backup_level);
-		save_xtrn_cfg(&cfg,backup_level);
+        save_main_cfg(&cfg);
+        save_msgs_cfg(&cfg);
+        save_file_cfg(&cfg);
+        save_chat_cfg(&cfg);
+		save_xtrn_cfg(&cfg);
 
 		sbbs_get_ini_fname(cfg.filename, cfg.ctrl_dir);
 
@@ -2498,7 +2492,6 @@ void bail(int code)
 			if(!sbbs_write_ini(
 				 fp
 				,&cfg
-				,backup_level
 				,&global_startup
 				,run_bbs
 				,&bbs_startup
diff --git a/src/sbbs3/scfg/scfg.h b/src/sbbs3/scfg/scfg.h
index 93e8604a85065ef57901344b77bac7d7409d8876..c55530b2dd1f1615fd57d5a439c82b4e7421a64f 100644
--- a/src/sbbs3/scfg/scfg.h
+++ b/src/sbbs3/scfg/scfg.h
@@ -107,7 +107,6 @@ extern char tmp[256];
 extern char error[256];
 extern const char *nulstr;
 extern char *invalid_code,*num_flags;
-extern int	backup_level;
 extern BOOL new_install;
 extern char* area_sort_desc[AREA_SORT_TYPES+1];
 
@@ -179,12 +178,12 @@ BOOL load_msgs_cfg(scfg_t*, char*, size_t);
 BOOL load_file_cfg(scfg_t*, char*, size_t);
 BOOL load_chat_cfg(scfg_t*, char*, size_t);
 BOOL load_xtrn_cfg(scfg_t*, char*, size_t);
-BOOL save_main_cfg(scfg_t*, int);
-BOOL save_node_cfg(scfg_t*, int);
-BOOL save_msgs_cfg(scfg_t*, int);
-BOOL save_file_cfg(scfg_t*, int);
-BOOL save_chat_cfg(scfg_t*, int);
-BOOL save_xtrn_cfg(scfg_t*, int);
+BOOL save_main_cfg(scfg_t*);
+BOOL save_node_cfg(scfg_t*);
+BOOL save_msgs_cfg(scfg_t*);
+BOOL save_file_cfg(scfg_t*);
+BOOL save_chat_cfg(scfg_t*);
+BOOL save_xtrn_cfg(scfg_t*);
 
 long import_msg_areas(enum import_list_type, FILE*, unsigned grpnum, int min_confnum, int max_confnum
 	, qhub_t*, const char* pkt_orig, faddr_t* faddr, uint32_t misc, long* added);
diff --git a/src/sbbs3/scfg/scfgmsg.c b/src/sbbs3/scfg/scfgmsg.c
index 55d7a54f6fbf8a609360d1e3c4300e3c5ec67d97..3b6ab1648e5344b171b666dd0bcade4ecc21c821 100644
--- a/src/sbbs3/scfg/scfgmsg.c
+++ b/src/sbbs3/scfg/scfgmsg.c
@@ -529,7 +529,7 @@ void msgs_cfg()
 			if(j==-1)
 			   continue;
 			if(!j) {
-				save_msgs_cfg(&cfg,backup_level);
+				save_msgs_cfg(&cfg);
 				refresh_cfg(&cfg);
 			}
 			return;
@@ -1174,8 +1174,8 @@ void msg_opts()
 				   continue;
 				if(!i) {
 					cfg.new_install=new_install;
-					save_msgs_cfg(&cfg,backup_level);
-					save_main_cfg(&cfg,backup_level);
+					save_msgs_cfg(&cfg);
+					save_main_cfg(&cfg);
                     refresh_cfg(&cfg);
                 }
 				return;
diff --git a/src/sbbs3/scfg/scfgnet.c b/src/sbbs3/scfg/scfgnet.c
index b40f1f7697d6e55666e18571fea41ce12185644b..e9f12b415e23b42e252ec86c2a26c72cea26954b 100644
--- a/src/sbbs3/scfg/scfgnet.c
+++ b/src/sbbs3/scfg/scfgnet.c
@@ -206,7 +206,7 @@ void mqtt_cfg()
 			if(i == -1)
 				continue;
 			if(i == 0) {
-				save_main_cfg(&cfg, backup_level);
+				save_main_cfg(&cfg);
 				refresh_cfg(&cfg);
 			}
 			return;
@@ -1060,7 +1060,7 @@ void net_cfg()
 		if(i==-1)
 			continue;
 		if(!i) {
-			save_msgs_cfg(&cfg,backup_level);
+			save_msgs_cfg(&cfg);
 			refresh_cfg(&cfg);
 		}
 		free_msgs_cfg(&cfg);
diff --git a/src/sbbs3/scfg/scfgnode.c b/src/sbbs3/scfg/scfgnode.c
index e81659425223dc2e74251edd1cdf6aea8773b48b..6d9d0fd519b3cc2c65ba3f3ba49bfef46c00a7c9 100644
--- a/src/sbbs3/scfg/scfgnode.c
+++ b/src/sbbs3/scfg/scfgnode.c
@@ -119,7 +119,7 @@ void node_menu()
 			if(!i) {
 				--cfg.sys_nodes;
 				cfg.new_install=new_install;
-				save_main_cfg(&cfg,backup_level);
+				save_main_cfg(&cfg);
 				adjust_last_node();
 				refresh_cfg(&cfg);
 			}
@@ -151,8 +151,8 @@ void node_menu()
 			cfg.node_num=++cfg.sys_nodes;
 			SAFECOPY(cfg.node_phone,"N/A");
 			cfg.new_install=new_install;
-			save_node_cfg(&cfg,backup_level);
-			save_main_cfg(&cfg,backup_level);
+			save_node_cfg(&cfg);
+			save_main_cfg(&cfg);
 			free_node_cfg(&cfg);
 			adjust_last_node();
 			refresh_cfg(&cfg);
@@ -171,7 +171,7 @@ void node_menu()
 			i&=MSK_OFF;
 			SAFECOPY(cfg.node_dir,cfg.node_path[i]);
 			cfg.node_num=i+1;
-			save_node_cfg(&cfg,backup_level);
+			save_node_cfg(&cfg);
 			refresh_cfg(&cfg);
 			continue;
 		}
@@ -186,7 +186,7 @@ void node_menu()
 		load_node_cfg(&cfg,error, sizeof(error));
 		if (cfg.node_num != i + 1) { 	/* Node number isn't right? */
 			cfg.node_num = i + 1;		/* so fix it */
-			save_node_cfg(&cfg, backup_level); /* and write it back */
+			save_node_cfg(&cfg); /* and write it back */
 		}
 		node_cfg();
 
@@ -219,8 +219,8 @@ void node_cfg()
 			case -1:
 				i=save_changes(WIN_MID|WIN_SAV);
 				if(!i) {
-					save_node_cfg(&cfg,backup_level);
-					save_main_cfg(&cfg,backup_level);
+					save_node_cfg(&cfg);
+					save_main_cfg(&cfg);
 					refresh_cfg(&cfg);
 				}
 				if(i!=-1)
diff --git a/src/sbbs3/scfg/scfgsrvr.c b/src/sbbs3/scfg/scfgsrvr.c
index fdfa8d813ae8b1f07192034124aa1b79702ec895..aa64ae58ed0a5dd1dbe137f423b6c08c2b3e62d1 100644
--- a/src/sbbs3/scfg/scfgsrvr.c
+++ b/src/sbbs3/scfg/scfgsrvr.c
@@ -278,7 +278,6 @@ static void global_cfg(void)
 						if(!sbbs_write_ini(
 							 fp
 							,&cfg
-							,backup_level
 							,&startup
 							,false
 							,NULL
@@ -528,7 +527,6 @@ static void termsrvr_cfg(void)
 						if(!sbbs_write_ini(
 							 fp
 							,&cfg
-							,backup_level
 							,NULL
 							,enabled
 							,&startup
@@ -792,7 +790,6 @@ static void websrvr_cfg(void)
 						if(!sbbs_write_ini(
 							 fp
 							,&cfg
-							,backup_level
 							,NULL
 							,FALSE
 							,NULL
@@ -989,7 +986,6 @@ static void ftpsrvr_cfg(void)
 						if(!sbbs_write_ini(
 							 fp
 							,&cfg
-							,backup_level
 							,NULL
 							,FALSE
 							,NULL
@@ -1402,7 +1398,6 @@ static void mailsrvr_cfg(void)
 						if(!sbbs_write_ini(
 							 fp
 							,&cfg
-							,backup_level
 							,NULL
 							,FALSE
 							,NULL
@@ -1518,7 +1513,6 @@ static void services_cfg(void)
 						if(!sbbs_write_ini(
 							 fp
 							,&cfg
-							,backup_level
 							,NULL
 							,FALSE
 							,NULL
diff --git a/src/sbbs3/scfg/scfgsys.c b/src/sbbs3/scfg/scfgsys.c
index a0459d5192745a851c640cd5285cde2c1240af2a..f77ca71f06857f5f6cf9d228574187f3decce12d 100644
--- a/src/sbbs3/scfg/scfgsys.c
+++ b/src/sbbs3/scfg/scfgsys.c
@@ -1684,7 +1684,7 @@ void sys_cfg(void)
 					if(strcmp(sys_pass, cfg.sys_pass) != 0) {
 						reencrypt_keys(sys_pass, cfg.sys_pass);
 					}
-					save_main_cfg(&cfg,backup_level);
+					save_main_cfg(&cfg);
 					refresh_cfg(&cfg);
 				}
 				return;
@@ -2438,6 +2438,11 @@ void sys_cfg(void)
 					else
 						strcpy(str,"None");
 					sprintf(opt[i++],"%-27.27s%s","Mail Database Backups",str);
+					if(cfg.config_backup_level)
+						sprintf(str,"%hu",cfg.config_backup_level);
+					else
+						strcpy(str,"None");
+					sprintf(opt[i++],"%-27.27s%s","Configuration Backups",str);
 					if(cfg.max_log_size && cfg.max_logs_kept) {
 						SAFEPRINTF2(str, "%s bytes, keep %hu"
 							,byte_count_to_str(cfg.max_log_size, tmp, sizeof(tmp))
@@ -2713,6 +2718,19 @@ void sys_cfg(void)
 							cfg.mail_backup_level=atoi(str);
 							break;
 						case 16:
+							uifc.helpbuf=
+								"`Configuraiton File Backups:`\n"
+								"\n"
+								"Setting this option to anything but 0 will enable automatic\n"
+								"backups of your configuration files when saving changes.\n"
+							;
+							sprintf(str,"%u",cfg.config_backup_level);
+							uifc.input(WIN_MID|WIN_SAV,0,0
+								,"Number of Configuraiton File Backups to Keep"
+								,str,4,K_NUMBER|K_EDIT);
+							cfg.config_backup_level=atoi(str);
+							break;
+						case 17:
 							uifc.helpbuf=
 								"`Maximum Log File Size:`\n"
 								"\n"
@@ -2744,7 +2762,7 @@ void sys_cfg(void)
 								}
 							}
 							break;
-						case 17:
+						case 18:
 							if(cfg.max_getkey_inactivity < 1)
 								SAFECOPY(str, "Unlimited");
 							else
@@ -2767,7 +2785,7 @@ void sys_cfg(void)
 								,str, 10, K_EDIT);
 							cfg.max_getkey_inactivity = (uint)parse_duration(str);
 							break;
-						case 18:
+						case 19:
 							ultoa(cfg.inactivity_warn,str,10);
 							uifc.helpbuf=
 								"`Percentage of Maximum Inactivity Before Warning:`\n"
@@ -2782,7 +2800,7 @@ void sys_cfg(void)
 								,str,4,K_NUMBER|K_EDIT);
 							cfg.inactivity_warn=atoi(str);
 							break;
-						case 19:
+						case 20:
 							uifc.helpbuf=
 								"`Control Key Pass-through:`\n"
 								"\n"
@@ -2807,7 +2825,7 @@ void sys_cfg(void)
 								,str,8,K_UPPER|K_EDIT);
 							cfg.ctrlkey_passthru=strtoul(str,NULL,16);
 							break;
-						} 
+						}
 					}
 					break;
 			case 10: /* Loadable Modules */
diff --git a/src/sbbs3/scfg/scfgxfr1.c b/src/sbbs3/scfg/scfgxfr1.c
index 92e19552c85d750980014f8484289b9714e2477c..9d6fa1bd39c4c48ba723fd31afbd6263a10671f4 100644
--- a/src/sbbs3/scfg/scfgxfr1.c
+++ b/src/sbbs3/scfg/scfgxfr1.c
@@ -127,7 +127,7 @@ void xfer_opts()
 				if(i==-1)
 					break;
 				if(!i) {
-					save_file_cfg(&cfg,backup_level);
+					save_file_cfg(&cfg);
 					refresh_cfg(&cfg);
 				}
 				return;
diff --git a/src/sbbs3/scfg/scfgxfr2.c b/src/sbbs3/scfg/scfgxfr2.c
index 48bd1aea319cf4c3c7ed26e1e94b2ef6d1f89248..c1be75862d84eab98809bff4a5008e2032fe0604 100644
--- a/src/sbbs3/scfg/scfgxfr2.c
+++ b/src/sbbs3/scfg/scfgxfr2.c
@@ -364,7 +364,7 @@ void xfer_cfg()
 			if(j==-1)
 				continue;
 			if(!j) {
-				save_file_cfg(&cfg,backup_level);
+				save_file_cfg(&cfg);
 				refresh_cfg(&cfg);
 			}
 			return;
diff --git a/src/sbbs3/scfg/scfgxtrn.c b/src/sbbs3/scfg/scfgxtrn.c
index 16d1908faf3b705958109eaf1f0b230add171c13..81372fa8182dee3f4dd7f375b6cae2fabd534345 100644
--- a/src/sbbs3/scfg/scfgxtrn.c
+++ b/src/sbbs3/scfg/scfgxtrn.c
@@ -332,8 +332,8 @@ void xprogs_cfg()
 					break;
 				if(!i) {
 					cfg.new_install=new_install;
-					save_xtrn_cfg(&cfg,backup_level);
-					save_main_cfg(&cfg,backup_level);
+					save_xtrn_cfg(&cfg);
+					save_main_cfg(&cfg);
 					refresh_cfg(&cfg);
 				}
 				return;
diff --git a/src/sbbs3/scfgdefs.h b/src/sbbs3/scfgdefs.h
index 188b9bb0ad700bb01948f31bf70d86f328318f61..847cf874a81143d8b58323c731b29598c1277515 100644
--- a/src/sbbs3/scfgdefs.h
+++ b/src/sbbs3/scfgdefs.h
@@ -622,8 +622,9 @@ typedef struct
 	uint32_t		total_colors;
 	uint32_t		ctrlkey_passthru;		/* Bits represent control keys NOT handled by inkey() */
 
-	uint16_t		user_backup_level;
-	uint16_t		mail_backup_level;
+	uint			user_backup_level;
+	uint			mail_backup_level;
+	uint			config_backup_level;
 	char**			text;
 
 	// Run-time state information (not configuration)
diff --git a/src/sbbs3/scfglib1.c b/src/sbbs3/scfglib1.c
index 26f6179111138a1cca98db79bf554316c26b61e9..b9e94d079b0acd0f560e9d6d8f00f9da484f9553 100644
--- a/src/sbbs3/scfglib1.c
+++ b/src/sbbs3/scfglib1.c
@@ -122,8 +122,9 @@ BOOL read_main_cfg(scfg_t* cfg, char* error, size_t maxerrlen)
 	cfg->max_getkey_inactivity = (uint)iniGetDuration(ini, ROOT_SECTION, "max_getkey_inactivity", 300);
 	cfg->inactivity_warn = (uchar)iniGetShortInt(ini, ROOT_SECTION, "inactivity_warn", 75);
 
-	cfg->user_backup_level = iniGetInteger(ini, ROOT_SECTION, "user_backup_level", 5);
-	cfg->mail_backup_level = iniGetInteger(ini, ROOT_SECTION, "mail_backup_level", 5);
+	cfg->user_backup_level = iniGetUInteger(ini, ROOT_SECTION, "user_backup_level", 5);
+	cfg->mail_backup_level = iniGetUInteger(ini, ROOT_SECTION, "mail_backup_level", 5);
+	cfg->config_backup_level = iniGetUInteger(ini, ROOT_SECTION, "config_backup_level", 5);
 	cfg->new_install = iniGetBool(ini, ROOT_SECTION, "new_install", TRUE);
 	cfg->valuser = iniGetShortInt(ini, ROOT_SECTION, "valuser", 0);
 	cfg->erruser = iniGetShortInt(ini, ROOT_SECTION, "erruser", 0);
diff --git a/src/sbbs3/scfgsave.c b/src/sbbs3/scfgsave.c
index 7d5f7a81a9e9e9842f26b3d46c6f979e3009dded..287ab66f93fa718b0c0bc6d7f08af4de13e44cc3 100644
--- a/src/sbbs3/scfgsave.c
+++ b/src/sbbs3/scfgsave.c
@@ -30,27 +30,27 @@ BOOL no_msghdr=FALSE,all_msghdr=FALSE;
 
 /****************************************************************************/
 /****************************************************************************/
-BOOL save_cfg(scfg_t* cfg, int backup_level)
+BOOL save_cfg(scfg_t* cfg)
 {
 	int i;
 
 	if(cfg->prepped)
 		return(FALSE);
 
-	if(!write_main_cfg(cfg,backup_level))
+	if(!write_main_cfg(cfg))
 		return(FALSE);
-	if(!write_msgs_cfg(cfg,backup_level))
+	if(!write_msgs_cfg(cfg))
 		return(FALSE);
-	if(!write_file_cfg(cfg,backup_level))
+	if(!write_file_cfg(cfg))
 		return(FALSE);
-	if(!write_chat_cfg(cfg,backup_level))
+	if(!write_chat_cfg(cfg))
 		return(FALSE);
-	if(!write_xtrn_cfg(cfg,backup_level))
+	if(!write_xtrn_cfg(cfg))
 		return(FALSE);
 
 	for(i=0;i<cfg->sys_nodes;i++) {
 		cfg->node_num=i+1;
-		if(!write_node_cfg(cfg,backup_level))
+		if(!write_node_cfg(cfg))
 			return(FALSE);
 	}
 
@@ -59,7 +59,7 @@ BOOL save_cfg(scfg_t* cfg, int backup_level)
 
 /****************************************************************************/
 /****************************************************************************/
-BOOL write_node_cfg(scfg_t* cfg, int backup_level)
+BOOL write_node_cfg(scfg_t* cfg)
 {
 	BOOL	result = FALSE;
 	char	inipath[MAX_PATH+1];
@@ -75,7 +75,7 @@ BOOL write_node_cfg(scfg_t* cfg, int backup_level)
 	prep_dir(cfg->ctrl_dir, inipath, sizeof(inipath));
 	md(inipath);
 	SAFECAT(inipath, "node.ini");
-	backup(inipath, backup_level, TRUE);
+	backup(inipath, cfg->config_backup_level, TRUE);
 
 	str_list_t ini = strListInit();
 	iniSetString(&ini, ROOT_SECTION, "phone", cfg->node_phone, NULL);
@@ -97,7 +97,7 @@ BOOL write_node_cfg(scfg_t* cfg, int backup_level)
 
 /****************************************************************************/
 /****************************************************************************/
-BOOL write_main_cfg(scfg_t* cfg, int backup_level)
+BOOL write_main_cfg(scfg_t* cfg)
 {
 	BOOL	result = FALSE;
 	char	inipath[MAX_PATH+1];
@@ -109,7 +109,7 @@ BOOL write_main_cfg(scfg_t* cfg, int backup_level)
 		return FALSE;
 
 	SAFEPRINTF(inipath, "%smain.ini", cfg->ctrl_dir);
-	backup(inipath, backup_level, TRUE);
+	backup(inipath, cfg->config_backup_level, TRUE);
 
 	str_list_t ini = strListInit();
 	iniSetString(&ini, ROOT_SECTION, "name", cfg->sys_name, NULL);
@@ -140,8 +140,9 @@ BOOL write_main_cfg(scfg_t* cfg, int backup_level)
 	iniSetHexInt(&ini, ROOT_SECTION, "ctrlkey_passthru", cfg->ctrlkey_passthru, NULL);
 	iniSetDuration(&ini, ROOT_SECTION, "max_getkey_inactivity", cfg->max_getkey_inactivity, NULL);
 	iniSetShortInt(&ini, ROOT_SECTION, "inactivity_warn", cfg->inactivity_warn, NULL);
-	iniSetShortInt(&ini, ROOT_SECTION, "user_backup_level", cfg->user_backup_level, NULL);
-	iniSetShortInt(&ini, ROOT_SECTION, "mail_backup_level", cfg->mail_backup_level, NULL);
+	iniSetUInteger(&ini, ROOT_SECTION, "user_backup_level", cfg->user_backup_level, NULL);
+	iniSetUInteger(&ini, ROOT_SECTION, "mail_backup_level", cfg->mail_backup_level, NULL);
+	iniSetUInteger(&ini, ROOT_SECTION, "config_backup_level", cfg->config_backup_level, NULL);
 	iniSetShortInt(&ini, ROOT_SECTION, "valuser", cfg->valuser, NULL);
 	iniSetShortInt(&ini, ROOT_SECTION, "erruser", cfg->erruser, NULL);
 	iniSetShortInt(&ini, ROOT_SECTION, "errlevel", cfg->errlevel, NULL);
@@ -321,7 +322,7 @@ BOOL write_main_cfg(scfg_t* cfg, int backup_level)
 
 /****************************************************************************/
 /****************************************************************************/
-BOOL write_msgs_cfg(scfg_t* cfg, int backup_level)
+BOOL write_msgs_cfg(scfg_t* cfg)
 {
 	BOOL	result = FALSE;
 	char	path[MAX_PATH+1];
@@ -337,7 +338,7 @@ BOOL write_msgs_cfg(scfg_t* cfg, int backup_level)
 	ZERO_VAR(smb);
 
 	SAFEPRINTF(inipath, "%smsgs.ini", cfg->ctrl_dir);
-	backup(inipath, backup_level, TRUE);
+	backup(inipath, cfg->config_backup_level, TRUE);
 
 	str_list_t ini = strListInit();
 	iniSetHexInt(&ini, ROOT_SECTION, "settings", cfg->msg_misc, NULL);
@@ -608,7 +609,7 @@ static void write_dir_defaults_cfg(str_list_t* ini, const char* section, dir_t*
 
 /****************************************************************************/
 /****************************************************************************/
-BOOL write_file_cfg(scfg_t* cfg, int backup_level)
+BOOL write_file_cfg(scfg_t* cfg)
 {
 	BOOL	result = FALSE;
 	char	path[MAX_PATH+1];
@@ -619,7 +620,7 @@ BOOL write_file_cfg(scfg_t* cfg, int backup_level)
 		return FALSE;
 
 	SAFEPRINTF(inipath, "%sfile.ini", cfg->ctrl_dir);
-	backup(inipath, backup_level, TRUE);
+	backup(inipath, cfg->config_backup_level, TRUE);
 
 	str_list_t ini = strListInit();
 	iniSetBytes(&ini, ROOT_SECTION, "min_dspace", 1, cfg->min_dspace, NULL);
@@ -831,7 +832,7 @@ BOOL write_file_cfg(scfg_t* cfg, int backup_level)
 
 /****************************************************************************/
 /****************************************************************************/
-BOOL write_chat_cfg(scfg_t* cfg, int backup_level)
+BOOL write_chat_cfg(scfg_t* cfg)
 {
 	BOOL	result = FALSE;
 	char	inipath[MAX_PATH+1];
@@ -841,7 +842,7 @@ BOOL write_chat_cfg(scfg_t* cfg, int backup_level)
 		return FALSE;
 
 	SAFEPRINTF(inipath, "%schat.ini", cfg->ctrl_dir);
-	backup(inipath, backup_level, TRUE);
+	backup(inipath, cfg->config_backup_level, TRUE);
 
 	str_list_t ini = strListInit();
 	for(uint i=0; i<cfg->total_gurus; i++) {
@@ -888,7 +889,7 @@ BOOL write_chat_cfg(scfg_t* cfg, int backup_level)
 
 /****************************************************************************/
 /****************************************************************************/
-BOOL write_xtrn_cfg(scfg_t* cfg, int backup_level)
+BOOL write_xtrn_cfg(scfg_t* cfg)
 {
 	BOOL	result = FALSE;
 	char	inipath[MAX_PATH+1];
@@ -898,7 +899,7 @@ BOOL write_xtrn_cfg(scfg_t* cfg, int backup_level)
 		return FALSE;
 
 	SAFEPRINTF(inipath, "%sxtrn.ini", cfg->ctrl_dir);
-	backup(inipath, backup_level, TRUE);
+	backup(inipath, cfg->config_backup_level, TRUE);
 
 	str_list_t ini = strListInit();
 	for(uint i=0; i<cfg->total_xedits; i++) {
diff --git a/src/sbbs3/scfgsave.h b/src/sbbs3/scfgsave.h
index 15ce25b7cfce9e89bf9050a137b25c32175619a4..84069e98ce126c03df5fa2804761808d6285d866 100644
--- a/src/sbbs3/scfgsave.h
+++ b/src/sbbs3/scfgsave.h
@@ -27,13 +27,13 @@
 extern "C" {
 #endif
 
-DLLEXPORT BOOL		save_cfg(scfg_t* cfg, int backup_level);
-DLLEXPORT BOOL		write_node_cfg(scfg_t* cfg, int backup_level);
-DLLEXPORT BOOL		write_main_cfg(scfg_t* cfg, int backup_level);
-DLLEXPORT BOOL		write_msgs_cfg(scfg_t* cfg, int backup_level);
-DLLEXPORT BOOL		write_file_cfg(scfg_t* cfg, int backup_level);
-DLLEXPORT BOOL		write_chat_cfg(scfg_t* cfg, int backup_level);
-DLLEXPORT BOOL		write_xtrn_cfg(scfg_t* cfg, int backup_level);
+DLLEXPORT BOOL		save_cfg(scfg_t* cfg);
+DLLEXPORT BOOL		write_node_cfg(scfg_t* cfg);
+DLLEXPORT BOOL		write_main_cfg(scfg_t* cfg);
+DLLEXPORT BOOL		write_msgs_cfg(scfg_t* cfg);
+DLLEXPORT BOOL		write_file_cfg(scfg_t* cfg);
+DLLEXPORT BOOL		write_chat_cfg(scfg_t* cfg);
+DLLEXPORT BOOL		write_xtrn_cfg(scfg_t* cfg);
 DLLEXPORT void		refresh_cfg(scfg_t* cfg);
 
 #ifdef __cplusplus