diff --git a/src/libs/qmljs/qmljsrewriter.cpp b/src/libs/qmljs/qmljsrewriter.cpp
index a6601fb33de50c9fcd8a1bbe695282997342d1a0..17293b34f6ef4fae57d74e29633a5f7bbfd2991c 100644
--- a/src/libs/qmljs/qmljsrewriter.cpp
+++ b/src/libs/qmljs/qmljsrewriter.cpp
@@ -175,6 +175,39 @@ UiObjectMemberList *Rewriter::searchMemberToInsertAfter(UiObjectMemberList *memb
         return lastNonObjectDef;
 }
 
+UiArrayMemberList *Rewriter::searchMemberToInsertAfter(UiArrayMemberList *members,
+                                                        const QStringList &propertyOrder)
+{
+    const int objectDefinitionInsertionPoint = propertyOrder.indexOf(QString::null);
+
+    UiArrayMemberList *lastObjectDef = 0;
+    UiArrayMemberList *lastNonObjectDef = 0;
+
+    for (UiArrayMemberList *iter = members; iter; iter = iter->next) {
+        UiObjectMember *member = iter->member;
+        int idx = -1;
+
+        if (cast<UiObjectDefinition*>(member))
+            lastObjectDef = iter;
+        else if (UiArrayBinding *arrayBinding = cast<UiArrayBinding*>(member))
+            idx = propertyOrder.indexOf(flatten(arrayBinding->qualifiedId));
+        else if (UiObjectBinding *objectBinding = cast<UiObjectBinding*>(member))
+            idx = propertyOrder.indexOf(flatten(objectBinding->qualifiedId));
+        else if (UiScriptBinding *scriptBinding = cast<UiScriptBinding*>(member))
+            idx = propertyOrder.indexOf(flatten(scriptBinding->qualifiedId));
+        else if (cast<UiPublicMember*>(member))
+            idx = propertyOrder.indexOf(QLatin1String("property"));
+
+        if (idx < objectDefinitionInsertionPoint)
+            lastNonObjectDef = iter;
+    }
+
+    if (lastObjectDef)
+        return lastObjectDef;
+    else
+        return lastNonObjectDef;
+}
+
 UiObjectMemberList *Rewriter::searchMemberToInsertAfter(UiObjectMemberList *members,
                                                         const QString &propertyName,
                                                         const QStringList &propertyOrder)
@@ -619,6 +652,29 @@ Rewriter::Range Rewriter::addObject(UiObjectInitializer *ast, const QString &con
     return Range(insertionPoint, insertionPoint);
 }
 
+Rewriter::Range Rewriter::addObject(UiArrayBinding *ast, const QString &content)
+{
+    UiArrayMemberList *insertAfter = searchMemberToInsertAfter(ast->members, m_propertyOrder);
+    return addObject(ast, content, insertAfter);
+}
+
+Rewriter::Range Rewriter::addObject(UiArrayBinding *ast, const QString &content, UiArrayMemberList *insertAfter)
+{
+    int insertionPoint;
+    QString textToInsert;
+    if (insertAfter && insertAfter->member) {
+        insertionPoint = insertAfter->member->lastSourceLocation().end();
+        textToInsert += QLatin1String("\n");
+    } else {
+        insertionPoint = ast->lbracketToken.end();
+    }
+
+    textToInsert += content;
+    m_changeSet->insert(insertionPoint, QLatin1String("\n") + textToInsert);
+
+    return Range(insertionPoint, insertionPoint);
+}
+
 void Rewriter::removeObjectMember(UiObjectMember *member, UiObjectMember *parent)
 {
     int start = member->firstSourceLocation().offset;
diff --git a/src/libs/qmljs/qmljsrewriter.h b/src/libs/qmljs/qmljsrewriter.h
index 6d03f24e56e8bde30a580ff0c78b4ad457bcf59d..d11db08ca16270e13aca42d55d7c7daf773cf1c0 100644
--- a/src/libs/qmljs/qmljsrewriter.h
+++ b/src/libs/qmljs/qmljsrewriter.h
@@ -77,10 +77,13 @@ public:
 
     Range addObject(AST::UiObjectInitializer *ast, const QString &content);
     Range addObject(AST::UiObjectInitializer *ast, const QString &content, AST::UiObjectMemberList *insertAfter);
+    Range addObject(AST::UiArrayBinding *ast, const QString &content);
+    Range addObject(AST::UiArrayBinding *ast, const QString &content, AST::UiArrayMemberList *insertAfter);
 
     void removeObjectMember(AST::UiObjectMember *member, AST::UiObjectMember *parent);
 
     static AST::UiObjectMemberList *searchMemberToInsertAfter(AST::UiObjectMemberList *members, const QStringList &propertyOrder);
+    static AST::UiArrayMemberList *searchMemberToInsertAfter(AST::UiArrayMemberList *members, const QStringList &propertyOrder);
     static AST::UiObjectMemberList *searchMemberToInsertAfter(AST::UiObjectMemberList *members, const QString &propertyName, const QStringList &propertyOrder);
     static QString flatten(AST::UiQualifiedId *first);
 
diff --git a/src/plugins/qmljseditor/qmloutlinemodel.cpp b/src/plugins/qmljseditor/qmloutlinemodel.cpp
index 20b0515c5743c4d0897d284d05e87fc5f4aeeae8..5a409af2489048c1f00c628d72b599e8a3230c76 100644
--- a/src/plugins/qmljseditor/qmloutlinemodel.cpp
+++ b/src/plugins/qmljseditor/qmloutlinemodel.cpp
@@ -669,12 +669,9 @@ void QmlOutlineModel::moveObjectMember(AST::UiObjectMember *toMove,
 
     const QString documentText = m_semanticInfo.document->source();
 
-    if (AST::UiObjectDefinition *objDefinition = AST::cast<AST::UiObjectDefinition*>(newParent)) {
-        // target is an element
-
-        Rewriter rewriter(documentText, changeSet, QStringList());
-        rewriter.removeObjectMember(toMove, oldParent);
+    Rewriter rewriter(documentText, changeSet, QStringList());
 
+    if (AST::UiObjectDefinition *objDefinition = AST::cast<AST::UiObjectDefinition*>(newParent)) {
         AST::UiObjectMemberList *listInsertAfter = 0;
         if (insertionOrderSpecified) {
             if (insertAfter) {
@@ -713,9 +710,36 @@ void QmlOutlineModel::moveObjectMember(AST::UiObjectMember *toMove,
                 *addedRange = rewriter.addObject(objDefinition->initializer, strToMove);
             }
         }
-    } else {
+    } else if (AST::UiArrayBinding *arrayBinding = AST::cast<AST::UiArrayBinding*>(newParent)) {
+        AST::UiArrayMemberList *listInsertAfter = 0;
+        if (insertionOrderSpecified) {
+            if (insertAfter) {
+                listInsertAfter = arrayBinding->members;
+                while (listInsertAfter && (listInsertAfter->member != insertAfter))
+                    listInsertAfter = listInsertAfter->next;
+            }
+        }
+        QString strToMove;
+        {
+            const int offset = toMove->firstSourceLocation().begin();
+            const int length = toMove->lastSourceLocation().end() - offset;
+            strToMove = documentText.mid(offset, length);
+        }
+
+        if (insertionOrderSpecified) {
+            *addedRange = rewriter.addObject(arrayBinding, strToMove, listInsertAfter);
+        } else {
+            *addedRange = rewriter.addObject(arrayBinding, strToMove);
+        }
+    } else if (AST::UiObjectBinding *objectBinding = AST::cast<AST::UiObjectBinding*>(newParent)) {
+        qDebug() << "TODO: Reparent to UiObjectBinding";
+        return;
         // target is a property
+    } else {
+        return;
     }
+
+    rewriter.removeObjectMember(toMove, oldParent);
 }
 
 QStandardItem *QmlOutlineModel::parentItem()