diff --git a/src/sbbs3/js_bbs.cpp b/src/sbbs3/js_bbs.cpp
index dc8910b7dcdbbb3276c537915fd7ba7855169efc..da286cce98152bf2a821809525f3068afad8a441 100644
--- a/src/sbbs3/js_bbs.cpp
+++ b/src/sbbs3/js_bbs.cpp
@@ -906,7 +906,7 @@ js_exec(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 static JSBool
 js_exec_xtrn(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 {
-	uint		i;
+	int32		i=0;
 	char*		code;
 	sbbs_t*		sbbs;
     JSString*	str;
@@ -925,7 +925,7 @@ js_exec_xtrn(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 			if(!stricmp(sbbs->cfg.xtrn[i]->code,code))
 				break;
 	} else
-		i=JSVAL_TO_INT(argv[0]);
+		JS_ValueToInt32(cx,argv[0],&i);
 
 	if(i>=sbbs->cfg.total_xtrns) {
 		*rval = BOOLEAN_TO_JSVAL(JS_FALSE);
@@ -939,13 +939,14 @@ js_exec_xtrn(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 static JSBool
 js_user_event(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 {
+	int32		i=0;
 	sbbs_t*		sbbs;
 
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
-	*rval = BOOLEAN_TO_JSVAL(
-		sbbs->user_event((user_event_t)JSVAL_TO_INT(argv[0])));
+	JS_ValueToInt32(cx,argv[0],&i);
+	*rval = BOOLEAN_TO_JSVAL(sbbs->user_event((user_event_t)i));
 	return(JS_TRUE);
 }
 
@@ -964,17 +965,17 @@ js_chksyspass(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval
 static JSBool
 js_text(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 {
-	int			i;
+	int32		i=0;
 	sbbs_t*		sbbs;
 
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
-	i=JSVAL_TO_INT(argv[0]);
+	JS_ValueToInt32(cx,argv[0],&i);
 	i--;
 
 	if(i<0 || i>=TOTAL_TEXT)
-		*rval = *rval = JSVAL_NULL;
+		*rval = JSVAL_NULL;
 	else
 		*rval = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, sbbs->text[i]));
 
@@ -985,7 +986,8 @@ static JSBool
 js_replace_text(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 {
 	char*		p;
-	int			i,len;
+	int32		i=0;
+	int			len;
 	JSString*	js_str;
 	sbbs_t*		sbbs;
 
@@ -994,7 +996,7 @@ js_replace_text(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rv
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
-	i=JSVAL_TO_INT(argv[0]);
+	JS_ValueToInt32(cx,argv[0],&i);
 	i--;
 
 	if(i<0 || i>=TOTAL_TEXT)
@@ -1029,13 +1031,13 @@ js_replace_text(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rv
 static JSBool
 js_revert_text(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 {
-	int			i;
+	int32		i=0;
 	sbbs_t*		sbbs;
 
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
-	i=JSVAL_TO_INT(argv[0]);
+	JS_ValueToInt32(cx,argv[0],&i);
 	i--;
 
 	if(i<0 || i>=TOTAL_TEXT) {
@@ -1599,14 +1601,14 @@ js_sys_stats(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 static JSBool
 js_node_stats(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 {
-	uint		node_num=0;
+	int32		node_num=0;
 	sbbs_t*		sbbs;
 
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
 	if(argc>0)
-		node_num=JSVAL_TO_INT(argv[0]);
+		JS_ValueToInt32(cx,argv[0],&node_num);
 
 	sbbs->node_stats(node_num);
 
@@ -1617,14 +1619,14 @@ js_node_stats(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval
 static JSBool
 js_userlist(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 {
-	int			mode=UL_ALL;
+	int32		mode=UL_ALL;
 	sbbs_t*		sbbs;
 
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
 	if(argc>0)
-		mode=JSVAL_TO_INT(argv[0]);
+		JS_ValueToInt32(cx,argv[0],&mode);
 
 	sbbs->userlist(mode);
 
@@ -1635,14 +1637,14 @@ js_userlist(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 static JSBool
 js_useredit(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 {
-	uint		usernumber=0;
+	int32		usernumber=0;
 	sbbs_t*		sbbs;
 
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
 	if(argc>0)
-		usernumber=JSVAL_TO_INT(argv[0]);
+		JS_ValueToInt32(cx,argv[0],&usernumber);
 
 	sbbs->useredit(usernumber);
 
@@ -1709,12 +1711,14 @@ js_whos_online(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rva
 static JSBool
 js_spy(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 {
+	int32		node_num=1;
 	sbbs_t*		sbbs;
 
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
-	sbbs->spy(JSVAL_TO_INT(argv[0]));
+	JS_ValueToInt32(cx,argv[0],&node_num);
+	sbbs->spy(node_num);
 
 	*rval = JSVAL_VOID;
 	return(JS_TRUE);
@@ -1723,8 +1727,8 @@ js_spy(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 static JSBool
 js_readmail(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 {
-	int			readwhich=MAIL_YOUR;
-	uint		usernumber;
+	int32		readwhich=MAIL_YOUR;
+	int32		usernumber;
 	sbbs_t*		sbbs;
 
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
@@ -1732,9 +1736,9 @@ js_readmail(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 
 	usernumber=sbbs->useron.number;
 	if(argc>0)
-		readwhich=JSVAL_TO_INT(argv[0]);
+		JS_ValueToInt32(cx,argv[0],&readwhich);
 	if(argc>1)
-		usernumber=JSVAL_TO_INT(argv[1]);
+		JS_ValueToInt32(cx,argv[1],&usernumber);
 
 	sbbs->readmail(usernumber,readwhich);
 
@@ -1745,7 +1749,7 @@ js_readmail(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 static JSBool
 js_email(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 {
-	uint		usernumber;
+	int32		usernumber=1;
 	long		mode=WM_EMAIL;
 	char*		top="";
 	char*		subj="";
@@ -1756,7 +1760,7 @@ js_email(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
-	usernumber=JSVAL_TO_INT(argv[0]);
+	JS_ValueToInt32(cx,argv[0],&usernumber);
 	for(uintN i=1;i<argc;i++) {
 		if(JSVAL_IS_INT(argv[i]))
 			mode=JSVAL_TO_INT(argv[i]);
@@ -1830,7 +1834,7 @@ js_bulkmail(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 static JSBool
 js_upload_file(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 {
-	uint		dirnum;
+	int32		dirnum=0;
 	char*		code;
 	sbbs_t*		sbbs;
     JSString*	str;
@@ -1849,7 +1853,7 @@ js_upload_file(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rva
 			if(!stricmp(sbbs->cfg.dir[dirnum]->code,code))
 				break;
 	} else
-		dirnum=JSVAL_TO_INT(argv[0]);
+		JS_ValueToInt32(cx,argv[0],&dirnum);
 
 	if(dirnum>=sbbs->cfg.total_dirs) {
 		*rval = BOOLEAN_TO_JSVAL(JS_FALSE);
@@ -1864,7 +1868,7 @@ js_upload_file(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rva
 static JSBool
 js_bulkupload(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 {
-	uint		dirnum;
+	int32		dirnum=0;
 	char*		code;
 	sbbs_t*		sbbs;
     JSString*	str;
@@ -1883,7 +1887,7 @@ js_bulkupload(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval
 			if(!stricmp(sbbs->cfg.dir[dirnum]->code,code))
 				break;
 	} else
-		dirnum=JSVAL_TO_INT(argv[0]);
+		JS_ValueToInt32(cx,argv[0],&dirnum);
 
 	if(dirnum>=sbbs->cfg.total_dirs) {
 		*rval = BOOLEAN_TO_JSVAL(JS_FALSE);
@@ -1897,7 +1901,7 @@ js_bulkupload(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval
 static JSBool
 js_resort_dir(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 {
-	uint		i;
+	uint		i=0;
 	char*		code;
 	sbbs_t*		sbbs;
     JSString*	str;
@@ -1933,7 +1937,7 @@ static JSBool
 js_telnet_gate(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 {
 	char*		addr;
-	int			mode=0;
+	int32		mode=0;
 	JSString*	js_addr;
 	sbbs_t*		sbbs;
 
@@ -1947,7 +1951,7 @@ js_telnet_gate(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rva
 		return(JS_FALSE);
 
 	if(argc>1)
-		mode=JSVAL_TO_INT(argv[1]);
+		JS_ValueToInt32(cx,argv[1],&mode);
 
 	sbbs->telnet_gate(addr,mode);
 	
@@ -1983,13 +1987,13 @@ static JSBool
 js_multinode_chat(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 {
 	sbbs_t*		sbbs;
-	int			channel=1;
+	int32		channel=1;
 
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
 	if(argc>1)
-		channel=JSVAL_TO_INT(argv[1]);
+		JS_ValueToInt32(cx,argv[1],&channel);
 
 	sbbs->multinodechat(channel);
 
@@ -2043,14 +2047,15 @@ static JSBool
 js_put_node_message(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 {
 	sbbs_t*		sbbs;
-	int			node;
+	int32		node=0;
 	JSString*	js_msg;
 	char*		msg;
 
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
-	if((node=JSVAL_TO_INT(argv[0]))<1)
+	JS_ValueToInt32(cx,argv[0],&node);
+	if(node<1)
 		node=1;
 
 	if((js_msg=JS_ValueToString(cx, argv[1]))==NULL) 
@@ -2069,14 +2074,14 @@ static JSBool
 js_get_telegram(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 {
 	sbbs_t*		sbbs;
-	int			usernumber;
+	int32		usernumber;
 
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
 	usernumber=sbbs->useron.number;
-	if(argc>1)
-		usernumber=JSVAL_TO_INT(argv[0]);
+	if(argc)
+		JS_ValueToInt32(cx,argv[0],&usernumber);
 
 	sbbs->getsmsg(usernumber);
 
@@ -2088,14 +2093,15 @@ static JSBool
 js_put_telegram(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 {
 	sbbs_t*		sbbs;
-	int			usernumber;
+	int32		usernumber=0;
 	JSString*	js_msg;
 	char*		msg;
 
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
-	if((usernumber=JSVAL_TO_INT(argv[0]))<1)
+	JS_ValueToInt32(cx,argv[0],&usernumber);
+	if(usernumber<1)
 		usernumber=1;
 
 	if((js_msg=JS_ValueToString(cx, argv[1]))==NULL) 
@@ -2423,7 +2429,7 @@ js_scanposts(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 static JSBool
 js_getnstime(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 {
-	time_t		t;
+	time_t		t=time(NULL);
 	sbbs_t*		sbbs;
 
 	*rval = JSVAL_VOID;
@@ -2431,7 +2437,8 @@ js_getnstime(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 	if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL)
 		return(JS_FALSE);
 
-	t = JSVAL_TO_INT(argv[0]);
+	if(argc)
+		JS_ValueToInt32(cx,argv[0],&t);
 
 	if(sbbs->inputnstime(&t)==true)
 		*rval = INT_TO_JSVAL(t);