diff --git a/src/sbbs3/js_internal.c b/src/sbbs3/js_internal.c
index 2c0b4cbaac4e968442ecb3d5d9411b87b1c95423..4887df52319702161e3ba80d255105813b053ea0 100644
--- a/src/sbbs3/js_internal.c
+++ b/src/sbbs3/js_internal.c
@@ -242,6 +242,14 @@ js_CommonBranchCallback(JSContext *cx, js_branch_t* branch)
     return(JS_TRUE);
 }
 
+static JSClass eval_class = {
+    "Global",  /* name */
+    JSCLASS_GLOBAL_FLAGS,  /* flags */
+    JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_StrictPropertyStub,
+    JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub,
+    JSCLASS_NO_OPTIONAL_MEMBERS
+};
+
 /* Execute a string in its own context (away from Synchronet objects) */
 static JSBool
 js_eval(JSContext *parent_cx, uintN argc, jsval *arglist)
@@ -291,7 +299,7 @@ js_eval(JSContext *parent_cx, uintN argc, jsval *arglist)
 #endif
 #endif
 
-	if((obj=JS_NewObject(cx, NULL, NULL, NULL))==NULL
+	if((obj=JS_NewCompartmentAndGlobalObject(cx, &eval_class, NULL))==NULL
 		|| !JS_InitStandardClasses(cx,obj)) {
 		JS_DestroyContext(cx);
 		return(JS_FALSE);