diff --git a/src/libs/qmljs/qmljsinterpreter.cpp b/src/libs/qmljs/qmljsinterpreter.cpp
index 59acd90929beaf50d9dad17d0158d201cfd1d77e..89eb241d1f86a32fc390ffaa3478ada1bdb1ea6a 100644
--- a/src/libs/qmljs/qmljsinterpreter.cpp
+++ b/src/libs/qmljs/qmljsinterpreter.cpp
@@ -731,6 +731,25 @@ ScopeChain::ScopeChain()
 {
 }
 
+ScopeChain::QmlComponentChain::QmlComponentChain()
+    : rootObject(0), ids(0)
+{
+}
+
+ScopeChain::QmlComponentChain::~QmlComponentChain()
+{
+    qDeleteAll(instantiatingComponents);
+}
+
+void ScopeChain::QmlComponentChain::clear()
+{
+    qDeleteAll(instantiatingComponents);
+    instantiatingComponents.clear();
+    rootObject = 0;
+    functionScopes.clear();
+    ids = 0;
+}
+
 void ScopeChain::QmlComponentChain::add(QList<const ObjectValue *> *list) const
 {
     foreach (QmlComponentChain *parent, instantiatingComponents)
diff --git a/src/libs/qmljs/qmljsinterpreter.h b/src/libs/qmljs/qmljsinterpreter.h
index ace0444e345481d20ba742e5b3af2828d4b26ea8..a0ab3fbc4c34f27bc71ba165d53616f1e8bfb2ce 100644
--- a/src/libs/qmljs/qmljsinterpreter.h
+++ b/src/libs/qmljs/qmljsinterpreter.h
@@ -229,9 +229,8 @@ public:
 
     struct QmlComponentChain
     {
-        QmlComponentChain()
-            : rootObject(0), ids(0)
-        {}
+        QmlComponentChain();
+        ~QmlComponentChain();
 
         QList<QmlComponentChain *> instantiatingComponents;
         const ObjectValue *rootObject;
@@ -239,6 +238,7 @@ public:
         const ObjectValue *ids;
 
         void add(QList<const ObjectValue *> *list) const;
+        void clear();
     };
 
     const ObjectValue *globalScope;
diff --git a/src/libs/qmljs/qmljslink.cpp b/src/libs/qmljs/qmljslink.cpp
index 07762a94b095e7257bc20a65e1574e3ca8bfc275..660d4f7ff7dfe27f69d219f0f4ca6a0aa95cbfb6 100644
--- a/src/libs/qmljs/qmljslink.cpp
+++ b/src/libs/qmljs/qmljslink.cpp
@@ -48,6 +48,7 @@ void Link::scopeChainAt(Document::Ptr doc, const QList<Node *> &astPath)
     if (doc->qmlProgram()) {
         _context->setLookupMode(Context::QmlLookup);
 
+        scopeChain.qmlComponentScope.clear();
         makeComponentChain(doc, &scopeChain.qmlComponentScope, &componentScopes);
 
         if (const ObjectValue *typeEnvironment = _context->typeEnvironment(doc.data()))