diff --git a/src/sbbs3/ftpsrvr.c b/src/sbbs3/ftpsrvr.c
index ae2be3d3f2d16785199d883b20adae6b9393f841..5b2baf76566373bb95bcd4a77a164ec08eb4d298 100644
--- a/src/sbbs3/ftpsrvr.c
+++ b/src/sbbs3/ftpsrvr.c
@@ -483,6 +483,7 @@ js_initcx(JSRuntime* runtime, SOCKET sock, JSObject** glob, JSObject** ftp)
 
     if((js_cx = JS_NewContext(runtime, startup->js.cx_stack))==NULL)
 		return(NULL);
+	JS_BeginRequest(js_cx);
 
 	lprintf(LOG_DEBUG,"%04d JavaScript: Context created",sock);
 
@@ -516,6 +517,7 @@ js_initcx(JSRuntime* runtime, SOCKET sock, JSObject** glob, JSObject** ftp)
 	} while(0);
 
 	if(!success) {
+		JS_EndRequest(js_cx);
 		JS_DestroyContext(js_cx);
 		return(NULL);
 	}
@@ -4475,6 +4477,7 @@ static void ctrl_thread(void* arg)
 #ifdef JAVASCRIPT
 	if(js_cx!=NULL) {
 		lprintf(LOG_DEBUG,"%04d JavaScript: Destroying context",sock);
+		JS_EndRequest(js_cx);
 		JS_DestroyContext(js_cx);	/* Free Context */
 	}
 
diff --git a/src/sbbs3/js_global.c b/src/sbbs3/js_global.c
index 4746350cbb2299c7de10e5ae4ccc65b7a010fe43..456fbedf147a74cbd420696df34401178d2393ff 100644
--- a/src/sbbs3/js_global.c
+++ b/src/sbbs3/js_global.c
@@ -124,6 +124,7 @@ static void background_thread(void* arg)
 	js_EvalOnExit(bg->cx, bg->obj, &bg->branch);
 	js_enqueue_value(bg->cx, bg->msg_queue, result, NULL);
 	JS_DestroyScript(bg->cx, bg->script);
+	JS_EndRequest(bg->cx);
 	JS_DestroyContext(bg->cx);
 	jsrt_Release(bg->runtime);
 	free(bg);
@@ -262,6 +263,7 @@ js_load(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 
 	    if((bg->cx = JS_NewContext(bg->runtime, JAVASCRIPT_CONTEXT_STACK))==NULL)
 			return(JS_FALSE);
+		JS_BeginRequest(bg->cx);
 
 		if((bg->obj=js_CreateCommonObjects(bg->cx
 				,p->cfg			/* common config */
diff --git a/src/sbbs3/js_internal.c b/src/sbbs3/js_internal.c
index bed2f398d7f995e4776402b676f5fd3ec4bab94b..114030057c838c34eaf385059c30778f37d1cb2e 100644
--- a/src/sbbs3/js_internal.c
+++ b/src/sbbs3/js_internal.c
@@ -267,6 +267,7 @@ js_eval(JSContext *parent_cx, JSObject *parent_obj, uintN argc, jsval *argv, jsv
 
 	if((cx=JS_NewContext(JS_GetRuntime(parent_cx),JAVASCRIPT_CONTEXT_STACK))==NULL)
 		return(JS_FALSE);
+	JS_BeginRequest(cx);
 
 	/* Use the error reporter from the parent context */
 	reporter=JS_SetErrorReporter(parent_cx,NULL);
@@ -285,6 +286,7 @@ js_eval(JSContext *parent_cx, JSObject *parent_obj, uintN argc, jsval *argv, jsv
 
 	if((obj=JS_NewObject(cx, NULL, NULL, NULL))==NULL
 		|| !JS_InitStandardClasses(cx,obj)) {
+		JS_EndRequest(cx);
 		JS_DestroyContext(cx);
 		return(JS_FALSE);
 	}
@@ -294,6 +296,7 @@ js_eval(JSContext *parent_cx, JSObject *parent_obj, uintN argc, jsval *argv, jsv
 		JS_DestroyScript(cx, script);
 	}
 
+	JS_EndRequest(cx);
 	JS_DestroyContext(cx);
 
     return(JS_TRUE);
diff --git a/src/sbbs3/jsexec.c b/src/sbbs3/jsexec.c
index ed8e2d794de0df13bbecd8e405419aea0c2328ea..bd2c51c624a74bda487d7bd2f6fdcade9a013266 100644
--- a/src/sbbs3/jsexec.c
+++ b/src/sbbs3/jsexec.c
@@ -618,6 +618,7 @@ static BOOL js_init(char** environ)
 
     if((js_cx = JS_NewContext(js_runtime, js_cx_stack))==NULL)
 		return(FALSE);
+	JS_BeginRequest(js_cx);
 
 	if(stack_limit)
 		fprintf(statfp,"JavaScript: Thread stack limit: %lu bytes\n"
@@ -1061,6 +1062,7 @@ int main(int argc, char **argv, char** environ)
 
 		fprintf(statfp,"\n");
 		fprintf(statfp,"JavaScript: Destroying context\n");
+		JS_EndRequest(js_cx);
 		JS_DestroyContext(js_cx);
 		fprintf(statfp,"JavaScript: Destroying runtime\n");
 		jsrt_Release(js_runtime);	
diff --git a/src/sbbs3/mailsrvr.c b/src/sbbs3/mailsrvr.c
index a1478fa0b2201a5812ccd5e45beb39e770e81e21..dac18930125f639fc0c15639183cc3e6a2fe50fa 100644
--- a/src/sbbs3/mailsrvr.c
+++ b/src/sbbs3/mailsrvr.c
@@ -1624,6 +1624,7 @@ js_mailproc(SOCKET sock, client_t* client, user_t* user
 
 		if((js_cx = JS_NewContext(js_runtime, startup->js.cx_stack))==NULL)
 			break;
+		JS_BeginRequest(js_cx);
 
 		JS_SetErrorReporter(js_cx, js_ErrorReporter);
 
@@ -1722,8 +1723,10 @@ js_mailproc(SOCKET sock, client_t* client, user_t* user
 
 	} while(0);
 
-	if(js_cx!=NULL)
+	if(js_cx!=NULL) {
+		JS_EndRequest(js_cx);
 		JS_DestroyContext(js_cx);
+	}
 	if(js_runtime!=NULL)
 		jsrt_Release(js_runtime);
 
diff --git a/src/sbbs3/main.cpp b/src/sbbs3/main.cpp
index 28d1ee420d4c2a892611d43dea0c84a5f67d0596..43a2b58bb5486dcc699719380468046de56dc1f5 100644
--- a/src/sbbs3/main.cpp
+++ b/src/sbbs3/main.cpp
@@ -1026,6 +1026,7 @@ bool sbbs_t::js_init(ulong* stack_frame)
 
     if((js_cx = JS_NewContext(js_runtime, startup->js.cx_stack))==NULL)
 		return(false);
+	JS_BeginRequest(js_cx);
 	
 	memset(&js_branch,0,sizeof(js_branch));
 	js_branch.limit = startup->js.branch_limit;
@@ -1078,6 +1079,7 @@ bool sbbs_t::js_init(ulong* stack_frame)
 	} while(0);
 
 	if(!success) {
+		JS_EndRequest(js_cx);
 		JS_DestroyContext(js_cx);
 		js_cx=NULL;
 		return(false);
@@ -3220,6 +3222,7 @@ sbbs_t::~sbbs_t()
 	/* Free Context */
 	if(js_cx!=NULL) {	
 		lprintf(LOG_DEBUG,"%s JavaScript: Destroying context",node);
+		JS_EndRequest(js_cx);
 		JS_DestroyContext(js_cx);
 		js_cx=NULL;
 	}
diff --git a/src/sbbs3/services.c b/src/sbbs3/services.c
index 2c8d04a5ad5a8b401cb9e2985efa8a3cc4ec8f3b..8d468674f8adc72dfa72642d0a21a5445a962e57 100644
--- a/src/sbbs3/services.c
+++ b/src/sbbs3/services.c
@@ -831,6 +831,7 @@ js_initcx(JSRuntime* js_runtime, SOCKET sock, service_client_t* service_client,
 
     if((js_cx = JS_NewContext(js_runtime, service_client->service->js.cx_stack))==NULL)
 		return(NULL);
+	JS_BeginRequest(js_cx);
 
     JS_SetErrorReporter(js_cx, js_ErrorReporter);
 
@@ -948,6 +949,7 @@ js_initcx(JSRuntime* js_runtime, SOCKET sock, service_client_t* service_client,
 
 
 	if(!success) {
+		JS_EndRequest(js_cx);
 		JS_DestroyContext(js_cx);
 		return(NULL);
 	}
@@ -1158,6 +1160,7 @@ static void js_service_thread(void* arg)
 		js_EvalOnExit(js_cx, js_glob, &service_client.branch);
 		JS_DestroyScript(js_cx, js_script);
 	}
+	JS_EndRequest(js_cx);
 	JS_DestroyContext(js_cx);	/* Free Context */
 
 	jsrt_Release(js_runtime);
@@ -1259,12 +1262,15 @@ static void js_static_service_thread(void* arg)
 		js_EvalOnExit(js_cx, js_glob, &service_client.branch);
 		JS_DestroyScript(js_cx, js_script);
 
+		JS_EndRequest(js_cx);
 		JS_DestroyContext(js_cx);	/* Free Context */
 		js_cx=NULL;
 	} while(!service->terminated && service->options&SERVICE_OPT_STATIC_LOOP);
 
-	if(js_cx!=NULL)
+	if(js_cx!=NULL) {
+		JS_EndRequest(js_cx);
 		JS_DestroyContext(js_cx);	/* Free Context */
+	}
 
 	jsrt_Release(js_runtime);
 
diff --git a/src/sbbs3/websrvr.c b/src/sbbs3/websrvr.c
index fda0bfda8db515282437b751946c9a2ef3e491e9..42c2ab743758aa805e90104ab23bc516f4d6bbc0 100644
--- a/src/sbbs3/websrvr.c
+++ b/src/sbbs3/websrvr.c
@@ -4386,6 +4386,7 @@ js_initcx(http_session_t *session)
 
     if((js_cx = JS_NewContext(session->js_runtime, startup->js.cx_stack))==NULL)
 		return(NULL);
+	JS_BeginRequest(js_cx);
 
 	lprintf(LOG_INFO,"%04d JavaScript: Context created",session->socket);
 
@@ -4405,6 +4406,7 @@ js_initcx(http_session_t *session)
 									,&js_server_props			/* server */
 		))==NULL
 		|| !JS_DefineFunctions(js_cx, session->js_glob, js_global_functions)) {
+		JS_EndRequest(js_cx);
 		JS_DestroyContext(js_cx);
 		return(NULL);
 	}
@@ -5025,6 +5027,7 @@ void http_session_thread(void* arg)
 
 	if(session.js_cx!=NULL) {
 		lprintf(LOG_INFO,"%04d JavaScript: Destroying context",socket);
+		JS_EndRequest(session.js_cx);
 		JS_DestroyContext(session.js_cx);	/* Free Context */
 		session.js_cx=NULL;
 	}