diff --git a/src/sbbs3/jsexec.c b/src/sbbs3/jsexec.c
index 587c764c658efae70191d18273a65219b6292ae6..c97e45adf303bdadbe5a5f715090d92b06725425 100644
--- a/src/sbbs3/jsexec.c
+++ b/src/sbbs3/jsexec.c
@@ -498,6 +498,7 @@ long js_exec(const char *fname, char** args)
 	JSScript*	js_script=NULL;
 	JSString*	arg;
 	JSObject*	argv;
+	FILE*		fp=stdin;
 	jsval		val;
 	jsval		rval=JSVAL_VOID;
 	int32		result=0;
@@ -514,6 +515,11 @@ long js_exec(const char *fname, char** args)
 			fprintf(errfp,"!Module file (%s) doesn't exist\n",path);
 			return(-1); 
 		}
+
+		if((fp=fopen(path,"r"))==NULL) {
+			fprintf(errfp,"!Error %d (%s) opening %s\n",errno,STRERROR(errno),path);
+			return(-1);
+		}
 	}
 	JS_ClearPendingException(js_cx);
 
@@ -541,13 +547,14 @@ long js_exec(const char *fname, char** args)
 
 	JS_SetBranchCallback(js_cx, js_BranchCallback);
 
-	if(fname==NULL)	 /* Use stdin for script source */
+	if(fp==stdin) 	 /* Using stdin for script source */
 		SAFECOPY(path,"stdin");
+
 	fprintf(statfp,"Reading script from %s\n",path);
 	line_no=0;
 	js_buflen=0;
-	while(!feof(stdin)) {
-		if(!fgets(line,sizeof(line),stdin))
+	while(!feof(fp)) {
+		if(!fgets(line,sizeof(line),fp))
 			break;
 		line_no++;
 #ifdef __unix__	/* Support Unix Shell Scripts that start with #!/path/to/jsexec */
@@ -563,7 +570,7 @@ long js_exec(const char *fname, char** args)
 		js_buflen+=strlen(line);
 	}
 	if((js_script=JS_CompileScript(js_cx, js_scope, js_buf, js_buflen, fname==NULL ? NULL : path, 1))==NULL) {
-		fprintf(errfp,"!Error compiling script from stdin\n");
+		fprintf(errfp,"!Error compiling script from %s\n",path);
 		return(-1);
 	}
 	JS_ExecuteScript(js_cx, js_scope, js_script, &rval);
@@ -581,6 +588,12 @@ long js_exec(const char *fname, char** args)
 
 	JS_GC(js_cx);
 
+	if(fp!=NULL && fp!=stdin)
+		fclose(fp);
+
+	if(js_buf!=NULL)
+		free(js_buf);
+
 	return(result);
 }