diff --git a/src/sbbs3/jsexec.c b/src/sbbs3/jsexec.c
index 5558f9a507b0a4d0242d9588c710a62ed7976ab7..7f9f365f7b59cf50561a9121426d3bd33e7fb60b 100644
--- a/src/sbbs3/jsexec.c
+++ b/src/sbbs3/jsexec.c
@@ -73,6 +73,7 @@ BOOL		pause_on_exit=FALSE;
 BOOL		pause_on_error=FALSE;
 BOOL		terminated=FALSE;
 BOOL		recycled;
+BOOL		require_cfg=FALSE;
 int			log_level=DEFAULT_LOG_LEVEL;
 int  		err_level=DEFAULT_ERR_LOG_LVL;
 long		umask_val = -1;
@@ -121,6 +122,7 @@ void usage()
 		"    -c<ctrl_dir>   specify path to CTRL directory\n"
 #else
 		"    -c<ctrl_dir>   specify path to Synchronet CTRL directory\n"
+		"    -R             require successful load of configuration files\n"
 #endif
 		"    -C             do not change the current working directory (to CTRL dir)\n"
 #if defined(__unix__)
@@ -1398,6 +1400,9 @@ int main(int argc, char **argv, char** env)
 				case 'q':
 					confp=nulfp;
 					break;
+				case 'R':
+					require_cfg = TRUE;
+					break;
 				case 'v':
 					banner(statfp);
 					fprintf(statfp,"%s\n",(char *)JS_GetImplementationVersion());
@@ -1450,9 +1455,10 @@ int main(int argc, char **argv, char** env)
 		fprintf(errfp,"!ERROR changing directory to: %s\n", scfg.ctrl_dir);
 
 	fprintf(statfp,"\nLoading configuration files from %s\n",scfg.ctrl_dir);
-	if(!load_cfg(&scfg, text, /* prep: */TRUE, /* node: */FALSE, error, sizeof(error))) {
+	if(!load_cfg(&scfg, text, /* prep: */TRUE, require_cfg, error, sizeof(error))) {
 		fprintf(errfp,"!ERROR loading configuration files: %s\n",error);
-		return(do_bail(1));
+		if(require_cfg)
+			return(do_bail(1));
 	}
 	SAFECOPY(scfg.temp_dir,"../temp");
 #endif
diff --git a/src/sbbs3/load_cfg.c b/src/sbbs3/load_cfg.c
index 88127316d62f754ea732561657df7a3c351a8e28..59d405e275da00d1a5b4be0adbcb7d52e837eaa1 100644
--- a/src/sbbs3/load_cfg.c
+++ b/src/sbbs3/load_cfg.c
@@ -40,7 +40,7 @@ char *	readtext(long *line, FILE *stream, long dflt);
 /****************************************************************************/
 /* Initializes system and node configuration information and data variables */
 /****************************************************************************/
-BOOL load_cfg(scfg_t* cfg, char* text[], BOOL prep, BOOL req_node, char* error, size_t maxerrlen)
+BOOL load_cfg(scfg_t* cfg, char* text[], BOOL prep, BOOL req_cfg, char* error, size_t maxerrlen)
 {
 	int		i;
 	long	line=0L;
@@ -62,7 +62,7 @@ BOOL load_cfg(scfg_t* cfg, char* text[], BOOL prep, BOOL req_node, char* error,
 		cfg->node_num=1;
 
 	backslash(cfg->ctrl_dir);
-	if(read_main_cfg(cfg, error, maxerrlen)==FALSE)
+	if(read_main_cfg(cfg, error, maxerrlen)==FALSE && req_cfg)
 		return(FALSE);
 
 	if(prep)
@@ -71,7 +71,7 @@ BOOL load_cfg(scfg_t* cfg, char* text[], BOOL prep, BOOL req_node, char* error,
 
 	SAFECOPY(cfg->node_dir,cfg->node_path[cfg->node_num-1]);
 	prep_dir(cfg->ctrl_dir, cfg->node_dir, sizeof(cfg->node_dir));
-	if(read_node_cfg(cfg, error, maxerrlen)==FALSE && req_node)
+	if(read_node_cfg(cfg, error, maxerrlen)==FALSE && req_cfg)
 		return(FALSE);
 	if(read_msgs_cfg(cfg, error, maxerrlen)==FALSE)
 		return(FALSE);
diff --git a/src/sbbs3/scfglib1.c b/src/sbbs3/scfglib1.c
index 8f203da81645a0636207556da7e6834247a9c799..05db77b4a3eac0529a73fe626a9d00fd88970f7a 100644
--- a/src/sbbs3/scfglib1.c
+++ b/src/sbbs3/scfglib1.c
@@ -80,10 +80,11 @@ BOOL read_node_cfg(scfg_t* cfg, char* error, size_t maxerrlen)
 /****************************************************************************/
 BOOL read_main_cfg(scfg_t* cfg, char* error, size_t maxerrlen)
 {
+	BOOL	result = FALSE;
 	char	path[MAX_PATH+1];
 	char	errstr[256];
 	FILE*	fp;
-	str_list_t	ini;
+	str_list_t	ini = NULL;
 	char	value[INI_MAX_VALUE_LEN];
 	const char* section = ROOT_SECTION;
 
@@ -91,10 +92,11 @@ BOOL read_main_cfg(scfg_t* cfg, char* error, size_t maxerrlen)
 	SAFEPRINTF2(path,"%s%s",cfg->ctrl_dir,fname);
 	if((fp = fnopen(NULL, path, O_RDONLY)) == NULL) {
 		safe_snprintf(error, maxerrlen, "%d (%s) opening %s",errno,safe_strerror(errno, errstr, sizeof(errstr)),path);
-		return FALSE;
+	} else {
+		ini = iniReadFile(fp);
+		fclose(fp);
+		result = TRUE;
 	}
-	ini = iniReadFile(fp);
-	fclose(fp);
 
 	SAFECOPY(cfg->sys_name, iniGetString(ini, section, "name", "", value));
 	SAFECOPY(cfg->sys_op, iniGetString(ini, section, "operator", "", value));
@@ -291,7 +293,7 @@ BOOL read_main_cfg(scfg_t* cfg, char* error, size_t maxerrlen)
 	iniFreeStringList(shell_list);
 	iniFreeStringList(ini);
 
-	return TRUE;
+	return result;
 }
 
 /****************************************************************************/