diff --git a/src/sbbs3/js_global.c b/src/sbbs3/js_global.c
index 52aacbdae3eaf165192762e0892db014a48aeb9e..22a9023e1d009bbaff38cfae19b2f193fe0763f1 100644
--- a/src/sbbs3/js_global.c
+++ b/src/sbbs3/js_global.c
@@ -83,29 +83,48 @@ js_load(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
     JSBool		ok;
     jsval		result;
 	scfg_t*		cfg;
+	JSObject*	js_argv;
+
+	*rval=JSVAL_VOID;
 
 	if((cfg=(scfg_t*)JS_GetPrivate(cx,obj))==NULL)
 		return(JS_FALSE);
 
-    for (i=0;i<argc;i++) {
-		if((str=JS_ValueToString(cx, argv[i]))==NULL)
-			return(JS_FALSE);
-		if((filename=JS_GetStringBytes(str))==NULL)
-			return(JS_FALSE);
-		errno = 0;
-		if(!strchr(filename,BACKSLASH))
-			sprintf(path,"%s%s",cfg->exec_dir,filename);
-		else
-			strcpy(path,filename);
-		if((script=JS_CompileFile(cx, obj, path))==NULL)
-			return(JS_FALSE);
-		ok = JS_ExecuteScript(cx, obj, script, &result);
-		JS_DestroyScript(cx, script);
-		if (!ok)
+	if(argc<1)
+		return(JS_TRUE);
+
+	if(argc>1) {
+
+		if((js_argv=JS_NewArrayObject(cx, 0, NULL)) == NULL)
 			return(JS_FALSE);
-    }
 
-	*rval=JSVAL_VOID;
+		for(i=1; i<argc; i++)
+			JS_SetElement(cx, js_argv, i-1, &argv[i]);
+
+		JS_DefineProperty(cx, obj, "argv", OBJECT_TO_JSVAL(js_argv)
+			,NULL,NULL,JSPROP_ENUMERATE|JSPROP_READONLY);
+		JS_DefineProperty(cx, obj, "argc", INT_TO_JSVAL(argc-1)
+			,NULL,NULL,JSPROP_ENUMERATE|JSPROP_READONLY);
+	}
+
+	if((str=JS_ValueToString(cx, argv[0]))==NULL)
+		return(JS_FALSE);
+	if((filename=JS_GetStringBytes(str))==NULL)
+		return(JS_FALSE);
+
+	errno = 0;
+	if(!strchr(filename,BACKSLASH))
+		sprintf(path,"%s%s",cfg->exec_dir,filename);
+	else
+		strcpy(path,filename);
+	if((script=JS_CompileFile(cx, obj, path))==NULL)
+		return(JS_FALSE);
+
+	ok = JS_ExecuteScript(cx, obj, script, &result);
+	JS_DestroyScript(cx, script);
+	if (!ok)
+		return(JS_FALSE);
+
     return(JS_TRUE);
 }