diff --git a/src/plugins/qmldesigner/core/model/rewriteaction.cpp b/src/plugins/qmldesigner/core/model/rewriteaction.cpp
index d681a6d15fdfa431bbb02b5ec2fec88ea8595e38..6475137688b69ff5848da506f2a10c9ad9561858 100644
--- a/src/plugins/qmldesigner/core/model/rewriteaction.cpp
+++ b/src/plugins/qmldesigner/core/model/rewriteaction.cpp
@@ -30,6 +30,7 @@
 #include <QtCore/QDebug>
 
 #include "nodeabstractproperty.h"
+#include "nodelistproperty.h"
 #include "rewriteaction.h"
 
 using namespace QmlDesigner;
@@ -93,6 +94,16 @@ bool AddPropertyRewriteAction::execute(QmlRefactoring &refactoring, ModelNodePos
                     << m_valueText << ") **"
                     << info();
         }
+    } else if (m_property.isNodeListProperty() && m_property.toNodeListProperty().toModelNodeList().size() > 1) {
+        result = refactoring.addToArrayMemberList(nodeLocation, m_property.name(), m_valueText);
+
+        if (!result) {
+            qDebug() << "*** AddPropertyRewriteAction::execute failed in addToArrayMemberList("
+                    << nodeLocation << ','
+                    << m_property.name() << ','
+                    << m_valueText << ") **"
+                    << info();
+        }
     } else {
         result = refactoring.addProperty(nodeLocation, m_property.name(), m_valueText, m_propertyType);
 
@@ -100,7 +111,8 @@ bool AddPropertyRewriteAction::execute(QmlRefactoring &refactoring, ModelNodePos
             qDebug() << "*** AddPropertyRewriteAction::execute failed in addProperty("
                     << nodeLocation << ','
                     << m_property.name() << ','
-                    << m_valueText << ", ScriptBinding) **"
+                    << m_valueText << ","
+                    << qPrintable(toString(m_propertyType)) << ") **"
                     << info();
         }
     }
diff --git a/src/plugins/qmldesigner/core/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/core/model/texttomodelmerger.cpp
index efeb8794ba6b412803dd2317ca1d629e72719a7e..c1d6e277b0f12095c8d62d87c7ab2af0050d07a3 100644
--- a/src/plugins/qmldesigner/core/model/texttomodelmerger.cpp
+++ b/src/plugins/qmldesigner/core/model/texttomodelmerger.cpp
@@ -367,7 +367,12 @@ void TextToModelMerger::syncNode(ModelNode &modelNode,
             const QString astPropertyName = flatten(array->qualifiedId);
             if (isValidPropertyForNode(modelNode, astPropertyName)) {
                 AbstractProperty modelProperty = modelNode.property(astPropertyName);
-                syncArrayProperty(modelProperty, array, context, differenceHandler);
+                QList<UiObjectMember *> arrayMembers;
+                for (UiArrayMemberList *iter = array->members; iter; iter = iter->next)
+                    if (UiObjectMember *member = iter->member)
+                        arrayMembers.append(member);
+
+                syncArrayProperty(modelProperty, arrayMembers, context, differenceHandler);
                 modelPropertyNames.remove(astPropertyName);
             } else {
                 qWarning() << "Skipping invalid array property" << astPropertyName
@@ -383,8 +388,7 @@ void TextToModelMerger::syncNode(ModelNode &modelNode,
                 if (isValidPropertyForNode(modelNode, astPropertyName)) {
                     AbstractProperty modelProperty = modelNode.property(astPropertyName);
                     if (modelProperty.metaInfo().isListProperty()) {
-                        NodeListProperty listProperty = modelProperty.toNodeListProperty();
-                        syncNodeListProperty(listProperty, QList<QmlJS::AST::UiObjectMember*>() << member, context, differenceHandler);
+                        syncArrayProperty(modelProperty, QList<QmlJS::AST::UiObjectMember*>() << member, context, differenceHandler);
                     } else {
                         syncNodeProperty(modelProperty, binding, context, differenceHandler);
                     }
@@ -538,15 +542,10 @@ void TextToModelMerger::syncExpressionProperty(AbstractProperty &modelProperty,
 }
 
 void TextToModelMerger::syncArrayProperty(AbstractProperty &modelProperty,
-                                          UiArrayBinding *array,
+                                          const QList<UiObjectMember *> &arrayMembers,
                                           ReadingContext *context,
                                           DifferenceHandler &differenceHandler)
 {
-    QList<UiObjectMember *> arrayMembers;
-    for (UiArrayMemberList *iter = array->members; iter; iter = iter->next)
-        if (UiObjectMember *member = iter->member)
-            arrayMembers.append(member);
-
     if (modelProperty.isNodeListProperty()) {
         NodeListProperty nodeListProperty = modelProperty.toNodeListProperty();
         syncNodeListProperty(nodeListProperty, arrayMembers, context, differenceHandler);
diff --git a/src/plugins/qmldesigner/core/model/texttomodelmerger.h b/src/plugins/qmldesigner/core/model/texttomodelmerger.h
index 8933e0866fa6ac2c09fc2464ce12d69c442c501a..19a6e4738db4a59feb775f18a41badccfcee80c8 100644
--- a/src/plugins/qmldesigner/core/model/texttomodelmerger.h
+++ b/src/plugins/qmldesigner/core/model/texttomodelmerger.h
@@ -78,7 +78,7 @@ public:
                                 const QString &javascript,
                                 DifferenceHandler &differenceHandler);
     void syncArrayProperty(AbstractProperty &modelProperty,
-                           QmlJS::AST::UiArrayBinding *array,
+                           const QList<QmlJS::AST::UiObjectMember *> &arrayMembers,
                            ReadingContext *context,
                            DifferenceHandler &differenceHandler);
     void syncVariantProperty(AbstractProperty &modelProperty,
diff --git a/tests/auto/qml/qmldesigner/coretests/testcore.cpp b/tests/auto/qml/qmldesigner/coretests/testcore.cpp
index 2568e4ead9e932ee6070d774afeb56894ba2eb42..25604f4b8cdfd3187f6a5a2f8fabc6c55d557fe9 100644
--- a/tests/auto/qml/qmldesigner/coretests/testcore.cpp
+++ b/tests/auto/qml/qmldesigner/coretests/testcore.cpp
@@ -2441,6 +2441,7 @@ void TestCore::testRewriterForArrayMagic()
         ModelNode rootNode = view->rootModelNode();
         QVERIFY(rootNode.isValid());
         QCOMPARE(rootNode.type(), QString("Qt/Rectangle"));
+        QVERIFY(rootNode.property(QLatin1String("states")).isNodeListProperty());
 
         QmlItemNode rootItem(rootNode);
         QVERIFY(rootItem.isValid());