diff --git a/fxjs/cfxjse_arguments.cpp b/fxjs/cfxjse_arguments.cpp
index b8670ad..0b0dc39 100644
--- a/fxjs/cfxjse_arguments.cpp
+++ b/fxjs/cfxjse_arguments.cpp
@@ -28,20 +28,29 @@
 }
 
 bool CFXJSE_Arguments::GetBoolean(int32_t index) const {
-  return (*m_pInfo)[index]->BooleanValue();
+  return (*m_pInfo)[index]
+      ->BooleanValue(m_pInfo->GetIsolate()->GetCurrentContext())
+      .FromMaybe(false);
 }
 
 int32_t CFXJSE_Arguments::GetInt32(int32_t index) const {
-  return static_cast<int32_t>((*m_pInfo)[index]->NumberValue());
+  return static_cast<int32_t>(
+      (*m_pInfo)[index]
+          ->NumberValue(m_pInfo->GetIsolate()->GetCurrentContext())
+          .FromMaybe(0.0));
 }
 
 float CFXJSE_Arguments::GetFloat(int32_t index) const {
-  return static_cast<float>((*m_pInfo)[index]->NumberValue());
+  return static_cast<float>(
+      (*m_pInfo)[index]
+          ->NumberValue(m_pInfo->GetIsolate()->GetCurrentContext())
+          .FromMaybe(0.0));
 }
 
 ByteString CFXJSE_Arguments::GetUTF8String(int32_t index) const {
-  v8::Local<v8::String> hString = (*m_pInfo)[index]->ToString();
-  v8::String::Utf8Value szStringVal(m_pInfo->GetIsolate(), hString);
+  v8::Isolate* isolate = m_pInfo->GetIsolate();
+  v8::Local<v8::String> hString = (*m_pInfo)[index]->ToString(isolate);
+  v8::String::Utf8Value szStringVal(isolate, hString);
   return ByteString(*szStringVal);
 }
 
diff --git a/fxjs/cfxjse_value.cpp b/fxjs/cfxjse_value.cpp
index 90f553b..6afba97 100644
--- a/fxjs/cfxjse_value.cpp
+++ b/fxjs/cfxjse_value.cpp
@@ -370,7 +370,8 @@
   CFXJSE_ScopeUtil_IsolateHandleRootContext scope(GetIsolate());
   v8::Local<v8::Value> hValue =
       v8::Local<v8::Value>::New(GetIsolate(), m_hValue);
-  return static_cast<bool>(hValue->BooleanValue());
+  return hValue->BooleanValue(GetIsolate()->GetCurrentContext())
+      .FromMaybe(false);
 }
 
 float CFXJSE_Value::ToFloat() const {
@@ -378,7 +379,8 @@
   CFXJSE_ScopeUtil_IsolateHandleRootContext scope(GetIsolate());
   v8::Local<v8::Value> hValue =
       v8::Local<v8::Value>::New(GetIsolate(), m_hValue);
-  return static_cast<float>(hValue->NumberValue());
+  return static_cast<float>(
+      hValue->NumberValue(GetIsolate()->GetCurrentContext()).FromMaybe(0.0));
 }
 
 double CFXJSE_Value::ToDouble() const {
@@ -386,7 +388,7 @@
   CFXJSE_ScopeUtil_IsolateHandleRootContext scope(GetIsolate());
   v8::Local<v8::Value> hValue =
       v8::Local<v8::Value>::New(GetIsolate(), m_hValue);
-  return static_cast<double>(hValue->NumberValue());
+  return hValue->NumberValue(GetIsolate()->GetCurrentContext()).FromMaybe(0.0);
 }
 
 int32_t CFXJSE_Value::ToInteger() const {
@@ -394,7 +396,8 @@
   CFXJSE_ScopeUtil_IsolateHandleRootContext scope(GetIsolate());
   v8::Local<v8::Value> hValue =
       v8::Local<v8::Value>::New(GetIsolate(), m_hValue);
-  return static_cast<int32_t>(hValue->NumberValue());
+  return static_cast<int32_t>(
+      hValue->NumberValue(GetIsolate()->GetCurrentContext()).FromMaybe(0.0));
 }
 
 ByteString CFXJSE_Value::ToString() const {
@@ -402,7 +405,7 @@
   CFXJSE_ScopeUtil_IsolateHandleRootContext scope(GetIsolate());
   v8::Local<v8::Value> hValue =
       v8::Local<v8::Value>::New(GetIsolate(), m_hValue);
-  v8::Local<v8::String> hString = hValue->ToString();
+  v8::Local<v8::String> hString = hValue->ToString(GetIsolate());
   v8::String::Utf8Value hStringVal(GetIsolate(), hString);
   return ByteString(*hStringVal);
 }
