diff --git a/src/sbbs3/js_file.c b/src/sbbs3/js_file.c
index 13f24d2846fdc056a5cc3c8c73fe8a5edee32485..84edf630611236ad26e93ba18540e4cb5489128f 100644
--- a/src/sbbs3/js_file.c
+++ b/src/sbbs3/js_file.c
@@ -3015,10 +3015,14 @@ JSObject* DLLCALL js_CreateFileClass(JSContext* cx, JSObject* parent)
 	return(obj);
 }
 
-JSObject* DLLCALL js_CreateFileObject(JSContext* cx, JSObject* parent, char *name, FILE* fp)
+JSObject* DLLCALL js_CreateFileObject(JSContext* cx, JSObject* parent, char *name, int fd, const char* mode)
 {
 	JSObject* obj;
 	private_t*	p;
+	FILE* fp = fdopen(fd, mode);
+
+	if(fp == NULL)
+		return NULL;
 
 	obj = JS_DefineObject(cx, parent, name, &js_file_class, NULL
 		,JSPROP_ENUMERATE|JSPROP_READONLY);
@@ -3037,7 +3041,6 @@ JSObject* DLLCALL js_CreateFileObject(JSContext* cx, JSObject* parent, char *nam
 		dbprintf(TRUE, p, "JS_SetPrivate failed");
 		return(NULL);
 	}
-
 	dbprintf(FALSE, p, "object created");
 
 	return(obj);
diff --git a/src/sbbs3/js_global.c b/src/sbbs3/js_global.c
index d1bb065b82d8e46137375166293494979067c55e..1fdd748b051180c5d683d8483dc570abec171bd1 100644
--- a/src/sbbs3/js_global.c
+++ b/src/sbbs3/js_global.c
@@ -398,11 +398,11 @@ js_load(JSContext *cx, uintN argc, jsval *arglist)
 		if (JS_HasProperty(cx, obj, "console", &success) && success)
 			js_CreateConsoleObject(bg->cx, bg->obj);
 		if (JS_HasProperty(cx, obj, "stdin", &success) && success)
-			js_CreateFileObject(bg->cx, bg->obj, "stdin", stdin);
+			js_CreateFileObject(bg->cx, bg->obj, "stdin", STDIN_FILENO, "r");
 		if (JS_HasProperty(cx, obj, "stdout", &success) && success)
-			js_CreateFileObject(bg->cx, bg->obj, "stdout", stdout);
+			js_CreateFileObject(bg->cx, bg->obj, "stdout", STDOUT_FILENO, "w");
 		if (JS_HasProperty(cx, obj, "stderr", &success) && success)
-			js_CreateFileObject(bg->cx, bg->obj, "stderr", stderr);
+			js_CreateFileObject(bg->cx, bg->obj, "stderr", STDERR_FILENO, "w");
 		JS_SetContextPrivate(bg->cx, bg);
 
 		exec_cx = bg->cx;
diff --git a/src/sbbs3/jsexec.c b/src/sbbs3/jsexec.c
index 66c5289ba66fe17fc0e0b2179ec6d7ae1232f8df..d3e45b85014d5cbb46ab93adfe1380ff6fbbbb1f 100644
--- a/src/sbbs3/jsexec.c
+++ b/src/sbbs3/jsexec.c
@@ -856,17 +856,17 @@ static BOOL js_init(char** env)
 	}
 
 	/* STDIO objects */
-	if(!js_CreateFileObject(js_cx, js_glob, "stdout", stdout)) {
+	if(!js_CreateFileObject(js_cx, js_glob, "stdout", STDOUT_FILENO, "w")) {
 		JS_ENDREQUEST(js_cx);
 		return(FALSE);
 	}
 
-	if(!js_CreateFileObject(js_cx, js_glob, "stdin", stdin)) {
+	if(!js_CreateFileObject(js_cx, js_glob, "stdin", STDIN_FILENO, "r")) {
 		JS_ENDREQUEST(js_cx);
 		return(FALSE);
 	}
 
-	if(!js_CreateFileObject(js_cx, js_glob, "stderr", stderr)) {
+	if(!js_CreateFileObject(js_cx, js_glob, "stderr", STDERR_FILENO, "w")) {
 		JS_ENDREQUEST(js_cx);
 		return(FALSE);
 	}
diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h
index 19bc9a3cec19519dd78baf01754282cffb25d2ab..983636d4fabd05b3f2752c52f55341253c399246 100644
--- a/src/sbbs3/sbbs.h
+++ b/src/sbbs3/sbbs.h
@@ -1336,7 +1336,7 @@ extern "C" {
 
 	/* js_file.c */
 	DLLEXPORT JSObject* DLLCALL js_CreateFileClass(JSContext* cx, JSObject* parent);
-	DLLEXPORT JSObject* DLLCALL js_CreateFileObject(JSContext* cx, JSObject* parent, char *name, FILE* fp);
+	DLLEXPORT JSObject* DLLCALL js_CreateFileObject(JSContext* cx, JSObject* parent, char *name, int fd, const char* mode);
 
 	/* js_sprintf.c */
 	DLLEXPORT char*		DLLCALL js_sprintf(JSContext* cx, uint argn, unsigned argc, jsval *argv);