diff --git a/src/sbbs3/js_internal.c b/src/sbbs3/js_internal.c
index 3483ec8e05ab7af85cb2dbb8e3e8fcafc37ebd0e..870343e8654454aa8b9d3acb083bcd4cc72b83fe 100644
--- a/src/sbbs3/js_internal.c
+++ b/src/sbbs3/js_internal.c
@@ -200,22 +200,29 @@ js_GenericBranchCallback(JSContext *cx, js_branch_t* branch)
 {
 	branch->counter++;
 
+	/* Terminated? */
+	if(branch->auto_terminate &&
+		(branch->terminated!=NULL && *branch->terminated)) {
+		JS_ReportError(cx,"Terminated");
+		branch->counter=0;
+		return(JS_FALSE);
+	}
+
 	/* Infinite loop? */
 	if(branch->limit && branch->counter > branch->limit) {
 		JS_ReportError(cx,"Infinite loop (%lu branches) detected",branch->counter);
 		branch->counter=0;
 		return(JS_FALSE);
 	}
+
 	/* Give up timeslices every once in a while */
 	if(branch->yield_interval && (branch->counter%branch->yield_interval)==0)
 		YIELD();
 
+	/* Periodic Garbage Collection */
 	if(branch->gc_interval && (branch->counter%branch->gc_interval)==0)
 		JS_MaybeGC(cx), branch->gc_attempts++;
 
-	if(branch->terminated!=NULL && *branch->terminated)
-		return(JS_FALSE);
-
     return(JS_TRUE);
 }