diff --git a/Source/bindings/v8/V8CustomElementLifecycleCallbacks.cpp b/Source/bindings/v8/V8CustomElementLifecycleCallbacks.cpp
index 206ce6b..93b0518 100644
--- a/Source/bindings/v8/V8CustomElementLifecycleCallbacks.cpp
+++ b/Source/bindings/v8/V8CustomElementLifecycleCallbacks.cpp
@@ -91,11 +91,11 @@
     : CustomElementLifecycleCallbacks(flagSet(enteredView, leftView, attributeChanged))
     , ActiveDOMCallback(scriptExecutionContext)
     , m_world(DOMWrapperWorld::current())
-    , m_prototype(prototype)
-    , m_created(created)
-    , m_enteredView(enteredView)
-    , m_leftView(leftView)
-    , m_attributeChanged(attributeChanged)
+    , m_prototype(toIsolate(scriptExecutionContext), prototype)
+    , m_created(toIsolate(scriptExecutionContext), created)
+    , m_enteredView(toIsolate(scriptExecutionContext), enteredView)
+    , m_leftView(toIsolate(scriptExecutionContext), leftView)
+    , m_attributeChanged(toIsolate(scriptExecutionContext), attributeChanged)
     , m_owner(0)
 {
     m_prototype.makeWeak(&m_prototype, weakCallback<v8::Object>);
@@ -125,7 +125,7 @@
     if (!m_owner)
         return;
 
-    v8::HandleScope handleScope(getIsolateFromScriptExecutionContext(scriptExecutionContext()));
+    v8::HandleScope handleScope(toIsolate(scriptExecutionContext()));
     if (V8PerContextData* perContextData = creationContextData())
         perContextData->clearCustomElementBinding(m_owner);
 }
@@ -153,7 +153,7 @@
 
     element->setCustomElementState(Element::Upgraded);
 
-    v8::Isolate* isolate = getIsolateFromScriptExecutionContext(scriptExecutionContext());
+    v8::Isolate* isolate = toIsolate(scriptExecutionContext());
     v8::HandleScope handleScope(isolate);
     v8::Handle<v8::Context> context = toV8Context(scriptExecutionContext(), m_world.get());
     if (context.IsEmpty())
@@ -201,7 +201,7 @@
     if (!canInvokeCallback())
         return;
 
-    v8::Isolate* isolate = getIsolateFromScriptExecutionContext(scriptExecutionContext());
+    v8::Isolate* isolate = toIsolate(scriptExecutionContext());
     v8::HandleScope handleScope(isolate);
     v8::Handle<v8::Context> context = toV8Context(scriptExecutionContext(), m_world.get());
     if (context.IsEmpty())
@@ -218,8 +218,8 @@
 
     v8::Handle<v8::Value> argv[] = {
         v8String(name, isolate),
-        oldValue.isNull() ? v8::Handle<v8::Value>(v8::Null()) : v8::Handle<v8::Value>(v8String(oldValue, isolate)),
-        newValue.isNull() ? v8::Handle<v8::Value>(v8::Null()) : v8::Handle<v8::Value>(v8String(newValue, isolate))
+        oldValue.isNull() ? v8::Handle<v8::Value>(v8::Null(isolate)) : v8::Handle<v8::Value>(v8String(oldValue, isolate)),
+        newValue.isNull() ? v8::Handle<v8::Value>(v8::Null(isolate)) : v8::Handle<v8::Value>(v8String(newValue, isolate))
     };
 
     v8::TryCatch exceptionCatcher;
@@ -232,7 +232,7 @@
     if (!canInvokeCallback())
         return;
 
-    v8::HandleScope handleScope(getIsolateFromScriptExecutionContext(scriptExecutionContext()));
+    v8::HandleScope handleScope(toIsolate(scriptExecutionContext()));
     v8::Handle<v8::Context> context = toV8Context(scriptExecutionContext(), m_world.get());
     if (context.IsEmpty())
         return;
