diff --git a/src/sbbs3/jsexec.c b/src/sbbs3/jsexec.c
index ed8e2d794de0df13bbecd8e405419aea0c2328ea..3c94bc6f4ac6b119c9ef5ac31f87b0b86ae34218 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"
@@ -631,18 +632,26 @@ static BOOL js_init(char** environ)
 		,&branch								/* js */
 		,NULL,INVALID_SOCKET					/* client */
 		,NULL									/* server */
-		))==NULL)
+		))==NULL) {
+		JS_EndRequest(js_cx);
 		return(FALSE);
+	}
 
 	/* Environment Object (associative array) */
-	if(!js_CreateEnvObject(js_cx, js_glob, environ))
+	if(!js_CreateEnvObject(js_cx, js_glob, environ)) {
+		JS_EndRequest(js_cx);
 		return(FALSE);
+	}
 
-	if(js_CreateUifcObject(js_cx, js_glob)==NULL)
+	if(js_CreateUifcObject(js_cx, js_glob)==NULL) {
+		JS_EndRequest(js_cx);
 		return(FALSE);
+	}
 
-	if(js_CreateConioObject(js_cx, js_glob)==NULL)
+	if(js_CreateConioObject(js_cx, js_glob)==NULL) {
+		JS_EndRequest(js_cx);
 		return(FALSE);
+	}
 
 	return(TRUE);
 }
@@ -1055,6 +1064,7 @@ int main(int argc, char **argv, char** environ)
 		fprintf(statfp,"\n");
 
 		result=js_exec(module,&argv[argn]);
+		JS_EndRequest(js_cx);
 
 		if(result)
 			lprintf(LOG_ERR,"!Module set exit_code: %ld", result);
diff --git a/src/sbbs3/mailsrvr.c b/src/sbbs3/mailsrvr.c
index d9b66f74fd8610d3354f3b5e4faa06832c3d7df5..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);
 
@@ -1723,6 +1724,7 @@ js_mailproc(SOCKET sock, client_t* client, user_t* user
 	} while(0);
 
 	if(js_cx!=NULL) {
+		JS_EndRequest(js_cx);
 		JS_DestroyContext(js_cx);
 	}
 	if(js_runtime!=NULL)
diff --git a/src/sbbs3/services.c b/src/sbbs3/services.c
index 9a939113dc394de2431f509a4c7a8acc8acedef8..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,11 +1262,13 @@ 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) {
+		JS_EndRequest(js_cx);
 		JS_DestroyContext(js_cx);	/* Free Context */
 	}