diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/graphicsobjectnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/graphicsobjectnodeinstance.cpp
index e59a597caac87c72880205bf08e4aa3ebc884641..c926c6b68fa3113452c4f21336d6f89e2bea723c 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/graphicsobjectnodeinstance.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/graphicsobjectnodeinstance.cpp
@@ -45,6 +45,7 @@ GraphicsObjectNodeInstance::GraphicsObjectNodeInstance(QGraphicsObject *graphics
    : ObjectNodeInstance(graphicsObject),
    m_isMovable(true)
 {
+    QGraphicsItemPrivate::get(graphicsObject)->sendParentChangeNotification = 1;
 }
 
 QGraphicsObject *GraphicsObjectNodeInstance::graphicsObject() const
diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlgraphicsitemnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlgraphicsitemnodeinstance.cpp
index acb4ad488e1feb0c66204ad4216a5af9729968d9..c44fbd519c08d54b17238b37cc787047ad7198b8 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlgraphicsitemnodeinstance.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlgraphicsitemnodeinstance.cpp
@@ -207,13 +207,24 @@ void QmlGraphicsItemNodeInstance::refresh()
     repositioning(qmlGraphicsItem());
 }
 
-void QmlGraphicsItemNodeInstance::doComponentComplete()
+void QmlGraphicsItemNodeInstance::recursiveDoComponentComplete(QGraphicsItem *item)
 {
-    if (qmlGraphicsItem()) {
-        if (static_cast<QDeclarativeItemPrivate*>(QGraphicsItemPrivate::get(qmlGraphicsItem()))->componentComplete)
+    QGraphicsObject *graphicsObject = item->toGraphicsObject();
+    QDeclarativeItem *declarativeItem = qobject_cast<QDeclarativeItem*>(graphicsObject);
+    if (declarativeItem && !nodeInstanceServer()->hasInstanceForObject(declarativeItem)) {
+        if (QDeclarativeItemPrivate::get(qmlGraphicsItem())->componentComplete)
             return;
         static_cast<QDeclarativeParserStatus*>(qmlGraphicsItem())->componentComplete();
-        QGraphicsItemPrivate::get(qmlGraphicsItem())->sendParentChangeNotification = 1;
+
+        foreach (QGraphicsItem *childItem, item->childItems())
+            recursiveDoComponentComplete(childItem);
+    }
+}
+
+void QmlGraphicsItemNodeInstance::doComponentComplete()
+{
+    if (qmlGraphicsItem()) {
+        recursiveDoComponentComplete(qmlGraphicsItem());
     }
 
     graphicsObject()->update();
@@ -301,7 +312,9 @@ void QmlGraphicsItemNodeInstance::reparent(const ObjectNodeInstance::Pointer &ol
         setMovable(true);
     }
 
+    QDeclarativeItemPrivate::get(qmlGraphicsItem())->componentComplete = 1;
     GraphicsObjectNodeInstance::reparent(oldParentInstance, oldParentProperty, newParentInstance, newParentProperty);
+    QDeclarativeItemPrivate::get(qmlGraphicsItem())->componentComplete = 0;
 
     if (newParentInstance && newParentInstance->isPositioner()) {
         setInPositioner(true);
diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlgraphicsitemnodeinstance.h b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlgraphicsitemnodeinstance.h
index 60d5a85f652f34e9096fac624291cc062cfe1c44..33b1ef3a6139b72411ffe0e22a5af7936eb264ed 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlgraphicsitemnodeinstance.h
+++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet/instances/qmlgraphicsitemnodeinstance.h
@@ -85,6 +85,7 @@ protected:
     void resetHorizontal();
     void resetVertical(); 
     void refresh();
+    void recursiveDoComponentComplete(QGraphicsItem *item);
 
 private: //variables
     bool m_hasHeight;