diff --git a/src/sbbs3/js_internal.c b/src/sbbs3/js_internal.c
index ab6d3ccef7a353c57f503d93cb763e6d5547d6d3..736122e140df2d938ef1d8b384198e0856a9d873 100644
--- a/src/sbbs3/js_internal.c
+++ b/src/sbbs3/js_internal.c
@@ -455,6 +455,7 @@ JSObject* DLLCALL js_CreateInternalJsObject(JSContext* cx, JSObject* parent, js_
 	if(startup!=NULL) {
 		JSObject*	load_path_list;
 		jsval		val;
+		str_list_t	load_path;
 
 		if((load_path_list=JS_NewArrayObject(cx, 0, NULL))==NULL) 
 			return(NULL);
@@ -462,17 +463,18 @@ JSObject* DLLCALL js_CreateInternalJsObject(JSContext* cx, JSObject* parent, js_
 		if(!JS_SetProperty(cx, obj, JAVASCRIPT_LOAD_PATH_LIST, &val)) 
 			return(NULL);
 
-		if(startup->load_path!=NULL) {
+		if((load_path=strListSplitCopy(NULL, startup->load_path, ",")) != NULL) {
 			JSString*	js_str;
 			unsigned	i;
 
-			for(i=0; startup->load_path[i]!=NULL; i++) {
-				if((js_str=JS_NewStringCopyZ(cx, startup->load_path[i]))==NULL)
-					return(NULL);
+			for(i=0; load_path[i]!=NULL; i++) {
+				if((js_str=JS_NewStringCopyZ(cx, load_path[i]))==NULL)
+					break;
 				val=STRING_TO_JSVAL(js_str);
 				if(!JS_SetElement(cx, load_path_list, i, &val))
-					return(NULL);
+					break;
 			}
+			strListFree(&load_path);
 		}
 	}
 
diff --git a/src/sbbs3/jsexec.c b/src/sbbs3/jsexec.c
index af22e9dbfe0a0de3338fc538ab4bd196ef6bfc32..a44fdd5b33313d859e3470cbbd01cef61727e75d 100644
--- a/src/sbbs3/jsexec.c
+++ b/src/sbbs3/jsexec.c
@@ -618,7 +618,7 @@ static BOOL js_init(char** environ)
 	js_startup_t	startup;
 
 	memset(&startup,0,sizeof(startup));
-	startup.load_path=strListSplitCopy(NULL, load_path_list, ",");
+	SAFECOPY(startup.load_path, load_path_list);
 
 	fprintf(statfp,"%s\n",(char *)JS_GetImplementationVersion());
 
diff --git a/src/sbbs3/sbbs_ini.c b/src/sbbs3/sbbs_ini.c
index 9c493c937f9d6811c45043092d383a1f7269d1c3..830c2d4dbf0f673546b0c177fc1bd2c18588d8a4 100644
--- a/src/sbbs3/sbbs_ini.c
+++ b/src/sbbs3/sbbs_ini.c
@@ -126,7 +126,8 @@ void sbbs_get_js_settings(
 	,js_startup_t* js
 	,js_startup_t* defaults)
 {
-	str_list_t	load_path;
+	char	value[INI_MAX_VALUE_LEN];
+    char*   p;
 
 	js->max_bytes		= iniGetInteger(list,section,strJavaScriptMaxBytes		,defaults->max_bytes);
 	js->cx_stack		= iniGetInteger(list,section,strJavaScriptContextStack	,defaults->cx_stack);
@@ -135,11 +136,12 @@ void sbbs_get_js_settings(
 	js->gc_interval		= iniGetInteger(list,section,strJavaScriptGcInterval	,defaults->gc_interval);
 	js->yield_interval	= iniGetInteger(list,section,strJavaScriptYieldInterval	,defaults->yield_interval);
 
-//    if(js->load_path != defaults->load_path)      /* Memory leak, ToDo Fix! */
-//    	iniFreeStringList(js->load_path);
-	if((load_path = iniGetStringList(list, section,strJavaScriptLoadPath,",",NULL)) == NULL)
-		load_path = defaults->load_path;
-	js->load_path = load_path;
+	/* Get JavaScriptLoadPath, use default is key is missing, use blank if key value is blank */
+    if((p=iniGetExistingString(list, section, strJavaScriptLoadPath, nulstr, value)) == NULL) {
+		if(defaults!=js)
+			SAFECOPY(js->load_path, defaults->load_path);
+	} else
+        SAFECOPY(js->load_path, p);
 
 	sbbs_fix_js_settings(js);
 }
@@ -159,8 +161,9 @@ BOOL sbbs_set_js_settings(
 			,JAVASCRIPT_BRANCH_LIMIT
 			,JAVASCRIPT_GC_INTERVAL
 			,JAVASCRIPT_YIELD_INTERVAL
-            ,NULL   /* load_path */
+            ,JAVASCRIPT_LOAD_PATH
 		};
+	SAFECOPY(global_defaults.load_path, JAVASCRIPT_LOAD_PATH);
 
 	if(defaults==NULL)
 		defaults=&global_defaults;
@@ -197,10 +200,10 @@ BOOL sbbs_set_js_settings(
 	else 
 		failure|=iniSetInteger(lp,section,strJavaScriptYieldInterval,js->yield_interval,style)==NULL;
 
-	if(js->load_path==defaults->load_path)
-		iniRemoveValue(lp,section,strJavaScriptLoadPath);
+	if(strcmp(js->load_path,defaults->load_path)==0)
+		iniRemoveKey(lp,section,strJavaScriptLoadPath);
 	else
-		failure|=iniSetStringList(lp,section,strJavaScriptLoadPath,",",js->load_path,style)==NULL;
+		failure|=iniSetString(lp,section,strJavaScriptLoadPath,js->load_path,style)==NULL;
 
 	return(!failure);
 }
@@ -244,8 +247,7 @@ static void get_ini_globals(str_list_t list, global_startup_t* global)
 	global->js.branch_limit		= JAVASCRIPT_BRANCH_LIMIT;
 	global->js.gc_interval		= JAVASCRIPT_GC_INTERVAL;
 	global->js.yield_interval	= JAVASCRIPT_YIELD_INTERVAL;
-    if(global->js.load_path==NULL)
-    	global->js.load_path	= strListSplitCopy(NULL, JAVASCRIPT_LOAD_PATH, ",");
+    SAFECOPY(global->js.load_path, JAVASCRIPT_LOAD_PATH);
 
 	/* Read .ini values here */
 	sbbs_get_js_settings(list, section, &global->js, &global->js);
diff --git a/src/sbbs3/startup.h b/src/sbbs3/startup.h
index a191e1764caf577d8d646e0c92cd41a8f34eeb76..1d1c2459cb0cf5f1d68f21708e6ee38324b172c6 100644
--- a/src/sbbs3/startup.h
+++ b/src/sbbs3/startup.h
@@ -52,7 +52,7 @@ typedef struct {
 	ulong	branch_limit;	/* maximum number of branches (for infinite loop detection) */
 	ulong	gc_interval;	/* number of branches between garbage collection attempts */
 	ulong	yield_interval;	/* number of branches between time-slice yields */
-	str_list_t	load_path;	/* additional directories to search for load()ed scripts */
+	char	load_path[INI_MAX_VALUE_LEN];	/* additional (comma-separated) directories to search for load()ed scripts */
 } js_startup_t;
 
 typedef struct {