diff --git a/src/sbbs3/js_bbs.cpp b/src/sbbs3/js_bbs.cpp
index 6d66f2ab380b6fcab3c68b0a477b15c7a98cba60..7fdccad79a50123dee25e2241b3d29288625c809 100644
--- a/src/sbbs3/js_bbs.cpp
+++ b/src/sbbs3/js_bbs.cpp
@@ -940,23 +940,28 @@ static uint get_subnum(JSContext* cx, sbbs_t* sbbs, jsval *argv, int argc, int p
 	return(subnum);
 }
 
-static uint get_dirnum(JSContext* cx, sbbs_t* sbbs, jsval val)
+static uint get_dirnum(JSContext* cx, sbbs_t* sbbs, jsval val, bool default)
 {
 	uint dirnum=INVALID_DIR;
 
-	if(JSVAL_IS_STRING(val)) {
-		char	*p;
-		JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(val), p, NULL);
-		for(dirnum=0;dirnum<sbbs->cfg.total_dirs;dirnum++)
-			if(!stricmp(sbbs->cfg.dir[dirnum]->code,p))
-				break;
-	} else if(JSVAL_IS_NUMBER(val)) {
-		if(!JS_ValueToInt32(cx,val,(int32*)&dirnum))
-			return JS_FALSE;
-	}
-	else if(sbbs->usrlibs>0)
+	if(sbbs->usrlibs>0)
 		dirnum=sbbs->usrdir[sbbs->curlib][sbbs->curdir[sbbs->curlib]];
 
+	if(!default) {
+		if(JSVAL_IS_STRING(val)) {
+			char	*p;
+			JSSTRING_TO_STRING(cx, JSVAL_TO_STRING(val), p, NULL);
+			for(dirnum=0;dirnum<sbbs->cfg.total_dirs;dirnum++)
+				if(!stricmp(sbbs->cfg.dir[dirnum]->code,p))
+					break;
+		} else if(JSVAL_IS_NUMBER(val)) {
+			if(!JS_ValueToInt32(cx,val,(int32*)&dirnum))
+				return JS_FALSE;
+		}
+		else if(sbbs->usrlibs>0)
+			dirnum=sbbs->usrdir[sbbs->curlib][sbbs->curdir[sbbs->curlib]];
+	}
+
 	return(dirnum);
 }
 
@@ -972,6 +977,9 @@ js_menu(JSContext *cx, uintN argc, jsval *arglist)
  	sbbs_t*		sbbs;
 	jsrefcount	rc;
 	char		*menu;
+
+	if(argc < 1)
+		return(JS_FALSE);
  
  	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
  		return(JS_FALSE);
@@ -1042,6 +1050,9 @@ js_exec(JSContext *cx, uintN argc, jsval *arglist)
 
 	JS_SET_RVAL(cx, arglist, JSVAL_VOID);
 
+	if(argc < 1)
+		return JS_FALSE;
+
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
@@ -1161,6 +1172,9 @@ js_chkpass(JSContext *cx, uintN argc, jsval *arglist)
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
+	if(argc < 1)
+		return JS_FALSE;
+
 	JSString* str=JS_ValueToString(cx,argv[0]);
 
 	JSSTRING_TO_STRING(cx, str, cstr, NULL);
@@ -1215,7 +1229,10 @@ js_replace_text(JSContext *cx, uintN argc, jsval *arglist)
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
-	if(argc && JSVAL_IS_NUMBER(argv[0])) {
+	if(argc < 2)
+		return JS_FALSE;
+
+	if(JSVAL_IS_NUMBER(argv[0])) {
 		if(!JS_ValueToInt32(cx,argv[0],&i))
 			return JS_FALSE;
 	}
@@ -1297,6 +1314,9 @@ js_load_text(JSContext *cx, uintN argc, jsval *arglist)
 
 	JS_SET_RVAL(cx, arglist, JSVAL_VOID);
 
+	if(argc < 1)
+		return JS_FALSE;
+
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
@@ -1362,6 +1382,9 @@ js_atcode(JSContext *cx, uintN argc, jsval *arglist)
 
 	JS_SET_RVAL(cx, arglist, JSVAL_VOID);
 
+	if(argc < 1)
+		return JS_FALSE;
+
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
@@ -1456,6 +1479,9 @@ js_logstr(JSContext *cx, uintN argc, jsval *arglist)
 
 	JS_SET_RVAL(cx, arglist, JSVAL_VOID);
 
+	if(argc < 1)
+		return JS_FALSE;
+
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
@@ -1489,6 +1515,9 @@ js_finduser(JSContext *cx, uintN argc, jsval *arglist)
 
 	JS_SET_RVAL(cx, arglist, JSVAL_VOID);
 
+	if(argc < 1)
+		return JS_FALSE;
+
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
@@ -1522,6 +1551,9 @@ js_trashcan(JSContext *cx, uintN argc, jsval *arglist)
 
 	JS_SET_RVAL(cx, arglist, JSVAL_VOID);
 
+	if(argc < 2)
+		return JS_FALSE;
+
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
@@ -1600,6 +1632,9 @@ js_login(JSContext *cx, uintN argc, jsval *arglist)
 
 	JS_SET_RVAL(cx, arglist, JSVAL_VOID);
 
+	if(argc < 2)
+		return JS_FALSE;
+
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
@@ -1824,6 +1859,9 @@ js_batchaddlist(JSContext *cx, uintN argc, jsval *arglist)
 
 	JS_SET_RVAL(cx, arglist, JSVAL_VOID);
 
+	if(argc < 1)
+		return JS_FALSE;
+
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
@@ -1850,6 +1888,9 @@ js_sendfile(JSContext *cx, uintN argc, jsval *arglist)
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
+	if(argc < 1)
+		return JS_FALSE;
+
 	if(argc>1) {
 		JSVALUE_TO_STRING(cx, argv[1], p, NULL);
 		if(p!=NULL)
@@ -1879,6 +1920,9 @@ js_recvfile(JSContext *cx, uintN argc, jsval *arglist)
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
+	if(argc < 1)
+		return JS_FALSE;
+
 	if(argc>1) {
 		JSVALUE_TO_STRING(cx, argv[1], p, NULL);
  		if(p!=NULL)
@@ -2001,7 +2045,7 @@ js_dir_info(JSContext *cx, uintN argc, jsval *arglist)
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
-	uint dirnum=get_dirnum(cx,sbbs,argv[0]);
+	uint dirnum=get_dirnum(cx,sbbs,argv[0],argc > 0);
 	rc=JS_SUSPENDREQUEST(cx);
 	if(dirnum<sbbs->cfg.total_dirs)
 		sbbs->dirinfo(dirnum);
@@ -2221,10 +2265,13 @@ js_spy(JSContext *cx, uintN argc, jsval *arglist)
 
 	JS_SET_RVAL(cx, arglist, JSVAL_VOID);
 
+	if(argc < 1)
+		return JS_FALSE;
+
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
-	if(argc && JSVAL_IS_NUMBER(argv[0])) {
+	if(JSVAL_IS_NUMBER(argv[0])) {
 		if(!JS_ValueToInt32(cx,argv[0],&node_num))
 			return JS_FALSE;
 	}
@@ -2284,7 +2331,10 @@ js_email(JSContext *cx, uintN argc, jsval *arglist)
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
-	if(argc && JSVAL_IS_NUMBER(argv[0])) {
+	if(argc < 1)
+		return JS_FALSE;
+
+	if(SVAL_IS_NUMBER(argv[0])) {
 		if(!JS_ValueToInt32(cx,argv[0],&usernumber))
 			return JS_FALSE;
 	}
@@ -2323,6 +2373,9 @@ js_netmail(JSContext *cx, uintN argc, jsval *arglist)
 
 	JS_SET_RVAL(cx, arglist, JSVAL_VOID);
 
+	if(argc < 1)
+		return JS_FALSE;
+
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
@@ -2390,7 +2443,7 @@ js_upload_file(JSContext *cx, uintN argc, jsval *arglist)
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
-	dirnum=get_dirnum(cx,sbbs,argv[0]);
+	dirnum=get_dirnum(cx,sbbs,argv[0], argc > 0);
 
 	if(dirnum>=sbbs->cfg.total_dirs) {
 		JS_SET_RVAL(cx, arglist, JSVAL_FALSE);
@@ -2417,7 +2470,7 @@ js_bulkupload(JSContext *cx, uintN argc, jsval *arglist)
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
-	dirnum=get_dirnum(cx,sbbs,argv[0]);
+	dirnum=get_dirnum(cx,sbbs,argv[0], argc > 0);
 
 	if(dirnum>=sbbs->cfg.total_dirs) {
 		JS_SET_RVAL(cx, arglist, JSVAL_FALSE);
@@ -2443,7 +2496,7 @@ js_resort_dir(JSContext *cx, uintN argc, jsval *arglist)
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
-	dirnum=get_dirnum(cx,sbbs,argv[0]);
+	dirnum=get_dirnum(cx,sbbs,argv[0], argc > 0);
 
 	if(dirnum>=sbbs->cfg.total_dirs) {
 		JS_SET_RVAL(cx, arglist, JSVAL_FALSE);
@@ -2470,6 +2523,9 @@ js_telnet_gate(JSContext *cx, uintN argc, jsval *arglist)
 
 	JS_SET_RVAL(cx, arglist, JSVAL_VOID);
 
+	if(argc < 1)
+		return JS_FALSE;
+
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
@@ -2622,15 +2678,18 @@ js_put_node_message(JSContext *cx, uintN argc, jsval *arglist)
 
 	JS_SET_RVAL(cx, arglist, JSVAL_VOID);
 
+	if(argc < 2)
+		return JS_FALSE;
+
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
-	if(argc && JSVAL_IS_NUMBER(argv[0])) {
+	if(JSVAL_IS_NUMBER(argv[0])) {
 		if(!JS_ValueToInt32(cx,argv[0],&node))
 			return JS_FALSE;
 	}
-	if(node<1)
-		node=1;
+	else
+		return JS_FALSE;
 
 	if((js_msg=JS_ValueToString(cx, argv[1]))==NULL) 
 		return(JS_FALSE);
@@ -2684,6 +2743,9 @@ js_put_telegram(JSContext *cx, uintN argc, jsval *arglist)
 
 	JS_SET_RVAL(cx, arglist, JSVAL_VOID);
 
+	if(argc < 2)
+		return JS_FALSE;
+
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
@@ -2691,8 +2753,8 @@ js_put_telegram(JSContext *cx, uintN argc, jsval *arglist)
 		if(!JS_ValueToInt32(cx,argv[0],&usernumber))
 			return JS_FALSE;
 	}
-	if(usernumber<1)
-		usernumber=1;
+	else
+		return JS_FALSE;
 
 	if((js_msg=JS_ValueToString(cx, argv[1]))==NULL) 
 		return(JS_FALSE);
@@ -2721,6 +2783,9 @@ js_cmdstr(JSContext *cx, uintN argc, jsval *arglist)
 
 	JS_SET_RVAL(cx, arglist, JSVAL_VOID);
 
+	if(argc < 1)
+		return JS_FALSE;
+
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
@@ -2795,7 +2860,7 @@ js_listfiles(JSContext *cx, uintN argc, jsval *arglist)
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
-	dirnum=get_dirnum(cx,sbbs,argv[0]);
+	dirnum=get_dirnum(cx,sbbs,argv[0], argc > 0);
 
 	if(dirnum>=sbbs->cfg.total_dirs) {
 		JS_SET_RVAL(cx, arglist, INT_TO_JSVAL(0));
@@ -2840,7 +2905,7 @@ js_listfileinfo(JSContext *cx, uintN argc, jsval *arglist)
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
-	dirnum=get_dirnum(cx,sbbs,argv[0]);
+	dirnum=get_dirnum(cx,sbbs,argv[0], argc > 0);
 
 	if(dirnum>=sbbs->cfg.total_dirs) {
 		JS_SET_RVAL(cx, arglist, INT_TO_JSVAL(0));