diff --git a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h
index d2aa710252210d3a30d689e4721e738d7109dbd6..1829c29e56d73313e76c7fd912071ab33eea7f96 100644
--- a/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h
+++ b/src/plugins/qmldesigner/designercore/include/nodeinstanceview.h
@@ -111,7 +111,6 @@ public:
 private slots:
     void emitParentChanged(QObject *child);
     void refreshLocalFileProperty(const QString &path);
-    void removeIdFromContext(QObject *object);
 
 private: // functions
     NodeInstance rootNodeInstance() const;
diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp
index d83cd9711aed650ee6cd4a8c51c964396f82be06..5acfb026a2e871aba2c9b9ec576ec634bda69a92 100644
--- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp
+++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp
@@ -417,6 +417,11 @@ void NodeInstanceView::removeAllInstanceNodeRelationships()
 {
     // prevent destroyed() signals calling back
 
+    foreach (NodeInstance instance, m_objectInstanceHash.values()) {
+        if (instance.isValid())
+            instance.setId(QString());
+    }
+
     //first  the root object
     if (rootNodeInstance().internalObject())
         rootNodeInstance().internalObject()->disconnect();
@@ -552,7 +557,8 @@ void NodeInstanceView::removeInstanceNodeRelationship(const ModelNode &node)
 {
     Q_ASSERT(m_nodeInstanceHash.contains(node));
     NodeInstance instance = instanceForNode(node);
-    removeIdFromContext(instance.internalObject());
+    if (instance.isValid())
+        instance.setId(QString());
     m_objectInstanceHash.remove(instanceForNode(node).internalObject());
     m_nodeInstanceHash.remove(node);
     instance.makeInvalid();
@@ -627,6 +633,10 @@ void NodeInstanceView::activateBaseState()
 
 void NodeInstanceView::removeRecursiveChildRelationship(const ModelNode &removedNode)
 {
+    if (hasInstanceForNode(removedNode)) {
+        instanceForNode(removedNode).setId(QString());
+    }
+
     foreach (const ModelNode &childNode, removedNode.allDirectSubModelNodes())
         removeRecursiveChildRelationship(childNode);
 
@@ -695,16 +705,4 @@ void NodeInstanceView::refreshLocalFileProperty(const QString &path)
     }
 }
 
-void NodeInstanceView::removeIdFromContext(QObject *object)
-{
-    if (hasInstanceForObject(object)) {
-        NodeInstance instance = instanceForObject(object);
-        if (instance.isValid()) {
-            QString id = instance.id();
-            if (!id.isEmpty())
-                engine()->rootContext()->setContextProperty(id, 0);
-        }
-    }
-}
-
 }