diff --git a/src/libs/qmljs/qmljsinterpreter.cpp b/src/libs/qmljs/qmljsinterpreter.cpp
index 9bd5d7dcca9db789a4033902772ff2394c00b143..eedcf519e8bf309e505aa961aa7fed2e9c05e318 100644
--- a/src/libs/qmljs/qmljsinterpreter.cpp
+++ b/src/libs/qmljs/qmljsinterpreter.cpp
@@ -1392,15 +1392,17 @@ void ScopeChain::update()
 
     // the root scope in js files doesn't see instantiating components
     if (jsScopes.count() != 1 || !qmlScopeObjects.isEmpty()) {
-        foreach (QmlComponentChain *parent, qmlComponentScope.instantiatingComponents)
-            parent->add(&_all);
+        if (qmlComponentScope) {
+            foreach (QmlComponentChain *parent, qmlComponentScope->instantiatingComponents)
+                parent->add(&_all);
+        }
     }
 
     ObjectValue *root = 0;
     ObjectValue *ids = 0;
-    if (qmlComponentScope.document) {
-        root = qmlComponentScope.document->bind()->rootObjectValue();
-        ids = qmlComponentScope.document->bind()->idEnvironment();
+    if (qmlComponentScope && qmlComponentScope->document) {
+        root = qmlComponentScope->document->bind()->rootObjectValue();
+        ids = qmlComponentScope->document->bind()->idEnvironment();
     }
 
     if (root && !qmlScopeObjects.contains(root))
diff --git a/src/libs/qmljs/qmljsinterpreter.h b/src/libs/qmljs/qmljsinterpreter.h
index 5ec91c009d5a48d8dc23452e1a4318e7fa90d32a..67222cd3b024075fba21c1437605f39a172c64b6 100644
--- a/src/libs/qmljs/qmljsinterpreter.h
+++ b/src/libs/qmljs/qmljsinterpreter.h
@@ -242,8 +242,10 @@ class QMLJS_EXPORT ScopeChain
 public:
     ScopeChain();
 
-    struct QmlComponentChain
+    class QmlComponentChain
     {
+        Q_DISABLE_COPY(QmlComponentChain)
+    public:
         QmlComponentChain();
         ~QmlComponentChain();
 
@@ -255,7 +257,7 @@ public:
     };
 
     const ObjectValue *globalScope;
-    QmlComponentChain qmlComponentScope;
+    QSharedPointer<QmlComponentChain> qmlComponentScope;
     QList<const ObjectValue *> qmlScopeObjects;
     const ObjectValue *qmlTypes;
     QList<const ObjectValue *> jsScopes;
diff --git a/src/libs/qmljs/qmljslink.cpp b/src/libs/qmljs/qmljslink.cpp
index 12b4497b9c8074dd0d57bea04465dcc47cb0215f..ffc8edf3804214aec693644ad82e54f98e7a52f5 100644
--- a/src/libs/qmljs/qmljslink.cpp
+++ b/src/libs/qmljs/qmljslink.cpp
@@ -83,10 +83,10 @@ void Link::initializeScopeChain()
     Bind *bind = _doc->bind();
     QHash<Document *, ScopeChain::QmlComponentChain *> componentScopes;
 
+    scopeChain.qmlComponentScope = QSharedPointer<ScopeChain::QmlComponentChain>(new ScopeChain::QmlComponentChain());
     if (_doc->qmlProgram()) {
-        scopeChain.qmlComponentScope.clear();
-        componentScopes.insert(_doc.data(), &scopeChain.qmlComponentScope);
-        makeComponentChain(_doc, &scopeChain.qmlComponentScope, &componentScopes);
+        componentScopes.insert(_doc.data(), scopeChain.qmlComponentScope.data());
+        makeComponentChain(_doc, scopeChain.qmlComponentScope.data(), &componentScopes);
 
         if (const ObjectValue *typeEnvironment = _context->typeEnvironment(_doc.data()))
             scopeChain.qmlTypes = typeEnvironment;
@@ -97,7 +97,7 @@ void Link::initializeScopeChain()
                 if (_doc->fileName() == fileImport.name) {
                     ScopeChain::QmlComponentChain *component = new ScopeChain::QmlComponentChain;
                     componentScopes.insert(otherDoc.data(), component);
-                    scopeChain.qmlComponentScope.instantiatingComponents += component;
+                    scopeChain.qmlComponentScope->instantiatingComponents += component;
                     makeComponentChain(otherDoc, component, &componentScopes);
                 }
             }