diff --git a/src/plugins/qmldesigner/core/include/rewriterview.h b/src/plugins/qmldesigner/core/include/rewriterview.h
index 7fa0cbb544625c6e300b0caa4db6f02c9ea8af93..73d663045c4927f5314d5ce242bd262da6d7d9c2 100644
--- a/src/plugins/qmldesigner/core/include/rewriterview.h
+++ b/src/plugins/qmldesigner/core/include/rewriterview.h
@@ -163,7 +163,6 @@ protected: // functions
     bool isModificationGroupActive() const;
     void setModificationGroupActive(bool active);
     void applyModificationGroupChanges();
-    void setupComponent(const ModelNode &node);
     void applyChanges();
 
 private: //variables
diff --git a/src/plugins/qmldesigner/core/model/model.cpp b/src/plugins/qmldesigner/core/model/model.cpp
index e6564d1068897b77b0659e36b10f8b3fd8eadbb0..4a5d4c4710c454872a725f9ad94a4da60a0a3220 100644
--- a/src/plugins/qmldesigner/core/model/model.cpp
+++ b/src/plugins/qmldesigner/core/model/model.cpp
@@ -898,7 +898,7 @@ WriteLocker::WriteLocker(ModelPrivate *model)
     if (m_model->m_writeLock)
         qWarning() << "QmlDesigner: Misbehaving view calls back to model!!!";
     // FIXME: Enable it again
-    // Q_ASSERT(!m_model->m_writeLock);
+     Q_ASSERT(!m_model->m_writeLock);
     model->m_writeLock = true;
 }
 
@@ -909,7 +909,7 @@ WriteLocker::WriteLocker(Model *model)
     if (m_model->m_writeLock)
         qWarning() << "QmlDesigner: Misbehaving view calls back to model!!!";
     // FIXME: Enable it again
-    // Q_ASSERT(!m_model->m_writeLock);
+     Q_ASSERT(!m_model->m_writeLock);
     m_model->m_writeLock = true;
 }
 
@@ -918,7 +918,7 @@ WriteLocker::~WriteLocker()
     if (!m_model->m_writeLock)
         qWarning() << "QmlDesigner: Misbehaving view calls back to model!!!";
     // FIXME: Enable it again
-    // Q_ASSERT(m_model->m_writeLock);
+     Q_ASSERT(m_model->m_writeLock);
     m_model->m_writeLock = false;
 }
 
diff --git a/src/plugins/qmldesigner/core/model/modeltotextmerger.cpp b/src/plugins/qmldesigner/core/model/modeltotextmerger.cpp
index 47100d39c295fdc38cec01d3bbc699bafdab7ad7..2141d6005c8803dc7d113a01d7075a41fd141ef2 100644
--- a/src/plugins/qmldesigner/core/model/modeltotextmerger.cpp
+++ b/src/plugins/qmldesigner/core/model/modeltotextmerger.cpp
@@ -314,8 +314,8 @@ QStringList ModelToTextMerger::getPropertyOrder()
 {
     if (m_propertyOrder.isEmpty()) {
         m_propertyOrder
-                << QLatin1String("property")
                 << QLatin1String("id")
+                << QLatin1String("property")
                 << QLatin1String("x")
                 << QLatin1String("y")
                 << QLatin1String("width")
diff --git a/src/plugins/qmldesigner/core/model/rewriterview.cpp b/src/plugins/qmldesigner/core/model/rewriterview.cpp
index d19d735a845cd6867c1554cf2542dc319fa68d88..8eae32e8d54bb29ade18ba695347bd2a8a7d3eae 100644
--- a/src/plugins/qmldesigner/core/model/rewriterview.cpp
+++ b/src/plugins/qmldesigner/core/model/rewriterview.cpp
@@ -152,8 +152,6 @@ void RewriterView::modelAboutToBeDetached(Model * /*model*/)
 
 void RewriterView::nodeCreated(const ModelNode &createdNode)
 {
-    if (createdNode.type() == QLatin1String("Qt/Component"))
-        setupComponent(createdNode);
     Q_ASSERT(textModifier());
     m_positionStorage->setNodeOffset(createdNode, ModelNodePositionStorage::INVALID_LOCATION);
     if (textToModelMerger()->isActive())
@@ -253,9 +251,6 @@ void RewriterView::bindingPropertiesChanged(const QList<BindingProperty>& proper
 
 void RewriterView::nodeReparented(const ModelNode &node, const NodeAbstractProperty &newPropertyParent, const NodeAbstractProperty &oldPropertyParent, AbstractView::PropertyChangeFlags propertyChange)
 {
-    if (node.type() == QLatin1String("Qt/Component"))
-        setupComponent(node);
-
     Q_ASSERT(textModifier());
     if (textToModelMerger()->isActive())
         return;
@@ -366,30 +361,6 @@ void RewriterView::applyModificationGroupChanges()
     applyChanges();
 }
 
-void RewriterView::setupComponent(const ModelNode &node)
-{
-    Q_ASSERT(node.type() == QLatin1String("Qt/Component"));
-
-    QString componentText = extractText(QList<ModelNode>() << node).value(node);
-
-    if (componentText.isEmpty())
-        return;
-
-    QString result = "";
-    if (componentText.contains("Component")) { //explicit component
-        FirstDefinitionFinder firstDefinitionFinder(componentText);
-        int offset = firstDefinitionFinder(0);
-        ObjectLengthCalculator objectLengthCalculator(componentText);
-        int length = objectLengthCalculator(offset);
-        for (int i = offset;i<offset + length;i++)
-            result.append(componentText.at(i));
-    } else {
-        result = componentText; //implicit component
-    }
-
-    node.variantProperty("__component_data") = result;
-}
-
 void RewriterView::applyChanges()
 {
     if (inErrorState()) {
diff --git a/src/plugins/qmldesigner/core/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/core/model/texttomodelmerger.cpp
index a39bc546e1a09b11e140629e790c6623e9824f6b..7272fd81c977617fb834f106d6bf0192e27a3fda 100644
--- a/src/plugins/qmldesigner/core/model/texttomodelmerger.cpp
+++ b/src/plugins/qmldesigner/core/model/texttomodelmerger.cpp
@@ -29,6 +29,8 @@
 
 #include "abstractproperty.h"
 #include "bindingproperty.h"
+#include "filemanager/firstdefinitionfinder.h"
+#include "filemanager/objectlengthcalculator.h"
 #include "nodemetainfo.h"
 #include "nodeproperty.h"
 #include "propertymetainfo.h"
@@ -311,7 +313,10 @@ void TextToModelMerger::syncNodeListProperty(NodeListProperty &modelListProperty
         // more elements in the dom-list, so add them to the model
         QmlDomValue value = domValues.at(j);
         if (value.isObject()) {
-            differenceHandler.listPropertyMissingModelNode(modelListProperty, value.toObject());
+            const QmlDomObject qmlObject = value.toObject();
+            const ModelNode newNode = differenceHandler.listPropertyMissingModelNode(modelListProperty, qmlObject);
+            if (QString::fromUtf8(qmlObject.objectType()) == QLatin1String("Qt/Component"))
+                setupComponent(newNode);
         } else {
             qDebug() << "*** Oops, we got a non-object item in the list!";
         }
@@ -412,9 +417,10 @@ void ModelValidator::modelNodeAbsentFromQml(ModelNode &modelNode)
     Q_ASSERT(0);
 }
 
-void ModelValidator::listPropertyMissingModelNode(NodeListProperty &/*modelProperty*/, const QmlDomObject &/*qmlObject*/)
+ModelNode ModelValidator::listPropertyMissingModelNode(NodeListProperty &/*modelProperty*/, const QmlDomObject &/*qmlObject*/)
 {
     Q_ASSERT(0);
+    return ModelNode();
 }
 
 void ModelValidator::typeDiffers(ModelNode &modelNode, const QmlDomObject &domObject)
@@ -488,9 +494,11 @@ void ModelAmender::modelNodeAbsentFromQml(ModelNode &modelNode)
     modelNode.destroy();
 }
 
-void ModelAmender::listPropertyMissingModelNode(NodeListProperty &modelProperty, const QmlDomObject &qmlObject)
+ModelNode ModelAmender::listPropertyMissingModelNode(NodeListProperty &modelProperty, const QmlDomObject &qmlObject)
 {
-    modelProperty.reparentHere(m_merger->createModelNode(qmlObject, *this));
+    const ModelNode &newNode = m_merger->createModelNode(qmlObject, *this);
+    modelProperty.reparentHere(newNode);
+    return newNode;
 }
 
 void ModelAmender::typeDiffers(ModelNode &modelNode, const QmlDomObject &domObject)
@@ -517,3 +525,27 @@ bool TextToModelMerger::isSignalPropertyName(const QString &signalName)
     return signalName.length() >= 3 && signalName.startsWith(QLatin1String("on")) &&
            signalName.at(2).isLetter();
 }
+
+void TextToModelMerger::setupComponent(const ModelNode &node)
+{
+    Q_ASSERT(node.type() == QLatin1String("Qt/Component"));
+
+    QString componentText = m_rewriterView->extractText(QList<ModelNode>() << node).value(node);
+
+    if (componentText.isEmpty())
+        return;
+
+    QString result = "";
+    if (componentText.contains("Component")) { //explicit component
+        FirstDefinitionFinder firstDefinitionFinder(componentText);
+        int offset = firstDefinitionFinder(0);
+        ObjectLengthCalculator objectLengthCalculator(componentText);
+        int length = objectLengthCalculator(offset);
+        for (int i = offset;i<offset + length;i++)
+            result.append(componentText.at(i));
+    } else {
+        result = componentText; //implicit component
+    }
+
+    node.variantProperty("__component_data") = result;
+}
diff --git a/src/plugins/qmldesigner/core/model/texttomodelmerger.h b/src/plugins/qmldesigner/core/model/texttomodelmerger.h
index b76bff480905ed4d28f0b29918648c091522ac60..209f6fe5d9c54166e11c62c77a4b529ca0e4be3e 100644
--- a/src/plugins/qmldesigner/core/model/texttomodelmerger.h
+++ b/src/plugins/qmldesigner/core/model/texttomodelmerger.h
@@ -79,7 +79,9 @@ public:
 
 private:
     static bool isSignalPropertyName(const QString &signalName);
+    void setupComponent(const ModelNode &node);
 
+private:
     RewriterView *m_rewriterView;
     bool m_isActive;
 };
@@ -100,7 +102,7 @@ public:
     virtual void shouldBeVariantProperty(AbstractProperty &modelProperty, const QVariant &qmlVariantValue, const QString &dynamicTypeName) = 0;
     virtual void shouldBeNodeProperty(AbstractProperty &modelProperty, const QmlDomObject &qmlObject) = 0;
     virtual void modelNodeAbsentFromQml(ModelNode &modelNode) = 0;
-    virtual void listPropertyMissingModelNode(NodeListProperty &modelProperty, const QmlDomObject &qmlObject) = 0;
+    virtual ModelNode listPropertyMissingModelNode(NodeListProperty &modelProperty, const QmlDomObject &qmlObject) = 0;
     virtual void typeDiffers(ModelNode &modelNode, const QmlDomObject &domObject) = 0;
     virtual void propertyAbsentFromQml(AbstractProperty &modelProperty) = 0;
     virtual void idsDiffer(ModelNode &modelNode, const QString &qmlId) = 0;
@@ -125,7 +127,7 @@ public:
     virtual void shouldBeVariantProperty(AbstractProperty &modelProperty, const QVariant &qmlVariantValue, const QString &dynamicTypeName);
     virtual void shouldBeNodeProperty(AbstractProperty &modelProperty, const QmlDomObject &qmlObject);
     virtual void modelNodeAbsentFromQml(ModelNode &modelNode);
-    virtual void listPropertyMissingModelNode(NodeListProperty &modelProperty, const QmlDomObject &qmlObject);
+    virtual ModelNode listPropertyMissingModelNode(NodeListProperty &modelProperty, const QmlDomObject &qmlObject);
     virtual void typeDiffers(ModelNode &modelNode, const QmlDomObject &domObject);
     virtual void propertyAbsentFromQml(AbstractProperty &modelProperty);
     virtual void idsDiffer(ModelNode &modelNode, const QString &qmlId);
@@ -147,7 +149,7 @@ public:
     virtual void shouldBeVariantProperty(AbstractProperty &modelProperty, const QVariant &qmlVariantValue, const QString &dynamicTypeName);
     virtual void shouldBeNodeProperty(AbstractProperty &modelProperty, const QmlDomObject &qmlObject);
     virtual void modelNodeAbsentFromQml(ModelNode &modelNode);
-    virtual void listPropertyMissingModelNode(NodeListProperty &modelProperty, const QmlDomObject &qmlObject);
+    virtual ModelNode listPropertyMissingModelNode(NodeListProperty &modelProperty, const QmlDomObject &qmlObject);
     virtual void typeDiffers(ModelNode &modelNode, const QmlDomObject &domObject);
     virtual void propertyAbsentFromQml(AbstractProperty &modelProperty);
     virtual void idsDiffer(ModelNode &modelNode, const QString &qmlId);