diff --git a/src/plugins/qmldesigner/designercore/include/nodeinstance.h b/src/plugins/qmldesigner/designercore/include/nodeinstance.h
index df3d38494f22ec6201ed48253277ddb7db55f32c..20c13cab39f57db8740a8186376a07ab4f2c4119 100644
--- a/src/plugins/qmldesigner/designercore/include/nodeinstance.h
+++ b/src/plugins/qmldesigner/designercore/include/nodeinstance.h
@@ -141,6 +141,8 @@ public:
 
     static void registerDeclarativeTypes();
 
+    void doComponentComplete();
+
     QString id() const;
 
 #ifdef QTCREATOR_TEST
diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp
index 88c1306f12f19c158abeada709d992027ca281b6..03a60e030207bb83fb219d7dc94c7cd292be307c 100644
--- a/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp
+++ b/src/plugins/qmldesigner/designercore/instances/nodeinstance.cpp
@@ -644,6 +644,11 @@ void NodeInstance::registerDeclarativeTypes()
 //    qmlRegisterType<QmlDesigner::Internal::QmlPropertyChangesObject>();
 }
 
+void NodeInstance::doComponentComplete()
+{
+
+}
+
 QString NodeInstance::id() const
 {
     return m_nodeInstance->id();
diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp
index 1ae3e051f5521a41d17ee8b75bae480766575c60..ae86167545829fe48246b6eb9b9a3b90ac0d4a60 100644
--- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp
+++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp
@@ -140,7 +140,10 @@ void NodeInstanceView::modelAboutToBeDetached(Model * model)
 */
 void NodeInstanceView::nodeCreated(const ModelNode &createdNode)
 {
-    loadNode(createdNode);
+    NodeInstance instance = loadNode(createdNode);
+
+    if (instance.isValid())
+        instance.doComponentComplete();
 }
 
 /*! \brief Notifing the view that a node was created.
@@ -401,6 +404,9 @@ void NodeInstanceView::loadNodes(const QList<ModelNode> &nodeList)
         foreach (const BindingProperty &property, node.bindingProperties())
             instanceForNode(node).setPropertyBinding(property.name(), property.expression());
     }
+
+    foreach(NodeInstance instance, m_objectInstanceHash.values())
+        instance.doComponentComplete();
 }
 
 // TODO: Set base state as current model state
diff --git a/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.cpp b/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.cpp
index e282c27d897765a4e889077c07c4e3550ebad1d7..4074d8dc72558b3c974b9d842b471d59521ab384 100644
--- a/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.cpp
+++ b/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.cpp
@@ -381,6 +381,9 @@ void ObjectNodeInstance::removeFromOldProperty(QObject *object, QObject *oldPare
             nodeInstanceView()->instanceForObject(oldParent).resetProperty(oldParentProperty);
         }
     }
+
+    if (object && object->parent())
+        object->setParent(0);
 }
 
 void ObjectNodeInstance::addToNewProperty(QObject *object, QObject *newParent, const QString &newParentProperty)
@@ -400,6 +403,11 @@ void ObjectNodeInstance::addToNewProperty(QObject *object, QObject *newParent, c
         property.write(objectToVariant(object));
     }
 
+    QGraphicsObject *graphicsObject = qobject_cast<QGraphicsObject*>(object);
+
+    if (object && !(graphicsObject && graphicsObject->parentItem()))
+        object->setParent(newParent);
+
     Q_ASSERT(objectToVariant(object).isValid());
 }
 
@@ -972,6 +980,11 @@ NodeInstance ObjectNodeInstance::nodeInstanceParentForObject(QObject *currentObj
     return nodeInstanceParentForObject(parentObject);
 }
 
+void ObjectNodeInstance::doComponentComplete()
+{
+
+}
+
 }
 }
 
diff --git a/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.h b/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.h
index 4bb43e330e3c41921dbe1acc25cfd38d7bf25858..20718b3a9a1841307ecfcd74211f9a5deaef2022 100644
--- a/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.h
+++ b/src/plugins/qmldesigner/designercore/instances/objectnodeinstance.h
@@ -179,6 +179,9 @@ public:
 
     NodeInstance nodeInstanceParentForObject(QObject *currentObject) const;
 
+
+    virtual void doComponentComplete();
+
 protected:
     static QObject *createInstance(const NodeMetaInfo &metaInfo, QDeclarativeContext *parentContext);
 
diff --git a/src/plugins/qmldesigner/designercore/instances/qmlgraphicsitemnodeinstance.cpp b/src/plugins/qmldesigner/designercore/instances/qmlgraphicsitemnodeinstance.cpp
index a5fbac695d232a0dcd82ce5ca51a3e0b7231d38f..71c911f0df68fdfa9b860de87d28eff4feeb1596 100644
--- a/src/plugins/qmldesigner/designercore/instances/qmlgraphicsitemnodeinstance.cpp
+++ b/src/plugins/qmldesigner/designercore/instances/qmlgraphicsitemnodeinstance.cpp
@@ -286,6 +286,12 @@ void QmlGraphicsItemNodeInstance::resetVertical()
        setPropertyVariant("height", qmlGraphicsItem()->implicitHeight());
 }
 
+void QmlGraphicsItemNodeInstance::doComponentComplete()
+{
+    if (qmlGraphicsItem())
+        static_cast<QDeclarativeParserStatus*>(qmlGraphicsItem())->componentComplete();
+}
+
 int QmlGraphicsItemNodeInstance::penWidth() const
 {
     QDeclarativeRectangle *rectangle = qobject_cast<QDeclarativeRectangle*>(object());
@@ -337,6 +343,11 @@ void QmlGraphicsItemNodeInstance::resetProperty(const QString &name)
     }
 }
 
+void QmlGraphicsItemNodeInstance::reparent(const NodeInstance &oldParentInstance, const QString &oldParentProperty, const NodeInstance &newParentInstance, const QString &newParentProperty)
+{
+    GraphicsObjectNodeInstance::reparent(oldParentInstance, oldParentProperty, newParentInstance, newParentProperty);
+}
+
 //void  QmlGraphicsItemNodeInstance::updateAnchors()
 //{
 //    NodeAnchors anchors(modelNode());
diff --git a/src/plugins/qmldesigner/designercore/instances/qmlgraphicsitemnodeinstance.h b/src/plugins/qmldesigner/designercore/instances/qmlgraphicsitemnodeinstance.h
index 43eeb4a6ba6dcb4a5ca099f1859e34e5e9fe1918..96db456ab9809db9f5f5cfb35f6160ce1abf7b9f 100644
--- a/src/plugins/qmldesigner/designercore/instances/qmlgraphicsitemnodeinstance.h
+++ b/src/plugins/qmldesigner/designercore/instances/qmlgraphicsitemnodeinstance.h
@@ -60,19 +60,22 @@ public:
     QVariant property(const QString &name) const;
     void resetProperty(const QString &name);
 
+    void reparent(const NodeInstance &oldParentInstance, const QString &oldParentProperty, const NodeInstance &newParentInstance, const QString &newParentProperty);
+
     int penWidth() const;
 
     bool hasAnchor(const QString &name) const;
     QPair<QString, NodeInstance> anchor(const QString &name) const;
     bool isAnchoredBySibling() const;
     bool isAnchoredByChildren() const;
+    void doComponentComplete();
 
 protected:
     QmlGraphicsItemNodeInstance(QDeclarativeItem *item, bool hasContent);
     QDeclarativeItem *qmlGraphicsItem() const;
     QDeclarativeAnchors *anchors() const;
     void resetHorizontal();
-    void resetVertical();
+    void resetVertical(); 
 
 private: //variables
     bool m_hasHeight;