diff --git a/src/plugins/qmldesigner/core/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/core/model/texttomodelmerger.cpp
index 3b844749e2d7d3d5b52983a7e1e99a6bb415dd15..7646865cb8d4029ceefd61c02d3df104aae15694 100644
--- a/src/plugins/qmldesigner/core/model/texttomodelmerger.cpp
+++ b/src/plugins/qmldesigner/core/model/texttomodelmerger.cpp
@@ -122,14 +122,11 @@ void TextToModelMerger::syncNode(ModelNode &modelNode, const QmlDomObject &domOb
 {
     m_rewriterView->positionStorage()->setNodeOffset(modelNode, domObject.position());
 
-    if (modelNode.type() != domObject.objectType()
-            || modelNode.majorVersion() != domObject.objectTypeMajorVersion()
-            || modelNode.minorVersion() != domObject.objectTypeMinorVersion()) {
-        differenceHandler.typeDiffers(modelNode, domObject);
-    }
-
     {
-        const QString domObjectId = domObject.objectId();
+        QString domObjectId = domObject.objectId();
+        const QmlDomProperty domIdProperty = domObject.property("id");
+        if (domObjectId.isEmpty() && domIdProperty.value().isLiteral())
+            domObjectId = domIdProperty.value().toLiteral().literal();
 
         if (domObjectId.isEmpty()) {
             if (!modelNode.id().isEmpty())
@@ -140,6 +137,12 @@ void TextToModelMerger::syncNode(ModelNode &modelNode, const QmlDomObject &domOb
         }
     }
 
+    if (modelNode.type() != domObject.objectType()
+            || modelNode.majorVersion() != domObject.objectTypeMajorVersion()
+            || modelNode.minorVersion() != domObject.objectTypeMinorVersion()) {
+        differenceHandler.typeDiffers(modelNode, domObject);
+    }
+
     QSet<QString> modelPropertyNames = QSet<QString>::fromList(modelNode.propertyNames());
 
     foreach (const QmlDomProperty &domProperty, domObject.properties()) {
@@ -149,15 +152,8 @@ void TextToModelMerger::syncNode(ModelNode &modelNode, const QmlDomObject &domOb
             continue;
 
         if (domPropertyName == QLatin1String("id")) {
-            const QmlDomValue domValue = domProperty.value();
-            if (domValue.isLiteral()) {
-                const QString domId = domValue.toLiteral().literal();
-
-                if (modelNode.id() != domId)
-                    differenceHandler.idsDiffer(modelNode, domId);
-            } else {
-                qWarning() << "id property found which is not a literal";
-            }
+            // already done before
+            continue;
         } else if (domPropertyName.isEmpty()) {
             qWarning() << "QML DOM returned an empty property name";
             continue;