diff --git a/fxjs/xfa/cfxjse_engine.cpp b/fxjs/xfa/cfxjse_engine.cpp
index 1c42218..4f32bba 100644
--- a/fxjs/xfa/cfxjse_engine.cpp
+++ b/fxjs/xfa/cfxjse_engine.cpp
@@ -136,7 +136,7 @@
 CFXJSE_Engine::~CFXJSE_Engine() {
   // This is what ensures that the v8 object bound to a CJX_Object
   // no longer retains that binding since it will outlive that object.
-  CFXJSE_ScopeUtil_IsolateHandleContext scope(this);
+  CFXJSE_ScopeUtil_IsolateHandleContext scope(GetJseContext());
   for (const auto& pair : m_mapObjectToObject) {
     const v8::Global<v8::Object>& binding = pair.second;
     FXJSE_ClearObjectBinding(v8::Local<v8::Object>::New(GetIsolate(), binding));
@@ -147,7 +147,7 @@
                               WideStringView wsScript,
                               CFXJSE_Value* hRetValue,
                               CXFA_Object* pThisObject) {
-  CFXJSE_ScopeUtil_IsolateHandleContext scope(this);
+  CFXJSE_ScopeUtil_IsolateHandleContext scope(GetJseContext());
   AutoRestorer<CXFA_Script::Type> typeRestorer(&m_eScriptType);
   m_eScriptType = eScriptType;
 
@@ -627,7 +627,7 @@
 }
 
 void CFXJSE_Engine::RemoveBuiltInObjs(CFXJSE_Context* pContext) {
-  CFXJSE_ScopeUtil_IsolateHandleContext scope(this);
+  CFXJSE_ScopeUtil_IsolateHandleContext scope(GetJseContext());
   v8::Local<v8::Object> pObject = pContext->GetGlobalObject();
   fxv8::ReentrantDeleteObjectPropertyHelper(GetIsolate(), pObject, "Number");
   fxv8::ReentrantDeleteObjectPropertyHelper(GetIsolate(), pObject, "Date");
diff --git a/fxjs/xfa/cfxjse_formcalc_context_embeddertest.cpp b/fxjs/xfa/cfxjse_formcalc_context_embeddertest.cpp
index b2cd1d2..977f3f7 100644
--- a/fxjs/xfa/cfxjse_formcalc_context_embeddertest.cpp
+++ b/fxjs/xfa/cfxjse_formcalc_context_embeddertest.cpp
@@ -19,6 +19,10 @@
   ~CFXJSE_FormCalcContextEmbedderTest() override = default;
 
  protected:
+  CFXJSE_Context* GetJseContext() {
+    return GetScriptContext()->GetJseContext();
+  }
+
   void ExecuteExpectError(ByteStringView input) {
     EXPECT_FALSE(Execute(input)) << "Program: " << input;
   }
@@ -26,14 +30,14 @@
   void ExecuteExpectNull(ByteStringView input) {
     EXPECT_TRUE(Execute(input)) << "Program: " << input;
 
-    CFXJSE_ScopeUtil_IsolateHandleContext scope(GetScriptContext());
+    CFXJSE_ScopeUtil_IsolateHandleContext scope(GetJseContext());
     EXPECT_TRUE(fxv8::IsNull(GetValue())) << "Program: " << input;
   }
 
   void ExecuteExpectBool(ByteStringView input, bool expected) {
     EXPECT_TRUE(Execute(input)) << "Program: " << input;
 
-    CFXJSE_ScopeUtil_IsolateHandleContext scope(GetScriptContext());
+    CFXJSE_ScopeUtil_IsolateHandleContext scope(GetJseContext());
     v8::Local<v8::Value> value = GetValue();
 
     // Yes, bools might be integers, somehow.
@@ -46,7 +50,7 @@
   void ExecuteExpectInt32(ByteStringView input, int32_t expected) {
     EXPECT_TRUE(Execute(input)) << "Program: " << input;
 
-    CFXJSE_ScopeUtil_IsolateHandleContext scope(GetScriptContext());
+    CFXJSE_ScopeUtil_IsolateHandleContext scope(GetJseContext());
     v8::Local<v8::Value> value = GetValue();
     EXPECT_TRUE(fxv8::IsInteger(value)) << "Program: " << input;
     EXPECT_EQ(expected, fxv8::ReentrantToInt32Helper(isolate(), value))
@@ -56,7 +60,7 @@
   void ExecuteExpectFloat(ByteStringView input, float expected) {
     EXPECT_TRUE(Execute(input)) << "Program: " << input;
 
-    CFXJSE_ScopeUtil_IsolateHandleContext scope(GetScriptContext());
+    CFXJSE_ScopeUtil_IsolateHandleContext scope(GetJseContext());
     v8::Local<v8::Value> value = GetValue();
     EXPECT_TRUE(fxv8::IsNumber(value));
     EXPECT_FLOAT_EQ(expected, fxv8::ReentrantToFloatHelper(isolate(), value))
@@ -68,7 +72,7 @@
                               float precision) {
     EXPECT_TRUE(Execute(input)) << "Program: " << input;
 
-    CFXJSE_ScopeUtil_IsolateHandleContext scope(GetScriptContext());
+    CFXJSE_ScopeUtil_IsolateHandleContext scope(GetJseContext());
     v8::Local<v8::Value> value = GetValue();
     EXPECT_TRUE(fxv8::IsNumber(value));
     EXPECT_NEAR(expected, fxv8::ReentrantToFloatHelper(isolate(), value),
@@ -79,7 +83,7 @@
   void ExecuteExpectNaN(ByteStringView input) {
     EXPECT_TRUE(Execute(input)) << "Program: " << input;
 
-    CFXJSE_ScopeUtil_IsolateHandleContext scope(GetScriptContext());
+    CFXJSE_ScopeUtil_IsolateHandleContext scope(GetJseContext());
     v8::Local<v8::Value> value = GetValue();
     EXPECT_TRUE(fxv8::IsNumber(value));
     EXPECT_TRUE(std::isnan(fxv8::ReentrantToDoubleHelper(isolate(), value)));
@@ -88,7 +92,7 @@
   void ExecuteExpectString(ByteStringView input, const char* expected) {
     EXPECT_TRUE(Execute(input)) << "Program: " << input;
 
-    CFXJSE_ScopeUtil_IsolateHandleContext scope(GetScriptContext());
+    CFXJSE_ScopeUtil_IsolateHandleContext scope(GetJseContext());
     v8::Local<v8::Value> value = GetValue();
     EXPECT_TRUE(fxv8::IsString(value));
     EXPECT_STREQ(expected,
@@ -1128,7 +1132,7 @@
   ASSERT_TRUE(OpenDocument("simple_xfa.pdf"));
   EXPECT_TRUE(Execute("Uuid()"));
 
-  CFXJSE_ScopeUtil_IsolateHandleContext scope(GetScriptContext());
+  CFXJSE_ScopeUtil_IsolateHandleContext scope(GetJseContext());
   v8::Local<v8::Value> value = GetValue();
   EXPECT_TRUE(fxv8::IsString(value));
 }
diff --git a/fxjs/xfa/cfxjse_isolatetracker.cpp b/fxjs/xfa/cfxjse_isolatetracker.cpp
index 11274a0..acc56ab 100644
--- a/fxjs/xfa/cfxjse_isolatetracker.cpp
+++ b/fxjs/xfa/cfxjse_isolatetracker.cpp
@@ -7,7 +7,6 @@
 #include "fxjs/xfa/cfxjse_isolatetracker.h"
 
 #include "fxjs/xfa/cfxjse_context.h"
-#include "fxjs/xfa/cfxjse_engine.h"
 #include "fxjs/xfa/cfxjse_runtimedata.h"
 
 CFXJSE_ScopeUtil_IsolateHandle::CFXJSE_ScopeUtil_IsolateHandle(
@@ -25,10 +24,6 @@
     CFXJSE_Context* pContext)
     : isolate_handle_(pContext->GetIsolate()), context_(pContext) {}
 
-CFXJSE_ScopeUtil_IsolateHandleContext::CFXJSE_ScopeUtil_IsolateHandleContext(
-    CFXJSE_Engine* pEngine)
-    : CFXJSE_ScopeUtil_IsolateHandleContext(pEngine->GetJseContext()) {}
-
 CFXJSE_ScopeUtil_IsolateHandleContext::
     ~CFXJSE_ScopeUtil_IsolateHandleContext() = default;
 
diff --git a/fxjs/xfa/cfxjse_isolatetracker.h b/fxjs/xfa/cfxjse_isolatetracker.h
index d3105c8..3e78c57 100644
--- a/fxjs/xfa/cfxjse_isolatetracker.h
+++ b/fxjs/xfa/cfxjse_isolatetracker.h
@@ -10,7 +10,6 @@
 #include "v8/include/v8.h"
 
 class CFXJSE_Context;
-class CFXJSE_Engine;
 
 class CFXJSE_ScopeUtil_IsolateHandle {
  public:
@@ -46,7 +45,6 @@
 class CFXJSE_ScopeUtil_IsolateHandleContext {
  public:
   explicit CFXJSE_ScopeUtil_IsolateHandleContext(CFXJSE_Context* pContext);
-  explicit CFXJSE_ScopeUtil_IsolateHandleContext(CFXJSE_Engine* pEngine);
   CFXJSE_ScopeUtil_IsolateHandleContext(
       const CFXJSE_ScopeUtil_IsolateHandleContext&) = delete;
   CFXJSE_ScopeUtil_IsolateHandleContext& operator=(
