diff --git a/src/plugins/qmldesigner/core/filemanager/qmlrewriter.cpp b/src/plugins/qmldesigner/core/filemanager/qmlrewriter.cpp
index e148c80cca595279a50bf260a0b5c51d32505085..83a304e931547e9bfd31d6633a65dd017add9971 100644
--- a/src/plugins/qmldesigner/core/filemanager/qmlrewriter.cpp
+++ b/src/plugins/qmldesigner/core/filemanager/qmlrewriter.cpp
@@ -276,29 +276,33 @@ void QMLRewriter::includeLeadingEmptyLine(int &start) const
 UiObjectMemberList *QMLRewriter::searchMemberToInsertAfter(UiObjectMemberList *members, const QStringList &propertyOrder)
 {
     const int objectDefinitionInsertionPoint = propertyOrder.indexOf(QString::null);
-    UiObjectMemberList *previous = 0;
+
+    UiObjectMemberList *lastObjectDef = 0;
+    UiObjectMemberList *lastNonObjectDef = 0;
+
     for (UiObjectMemberList *iter = members; iter; iter = iter->next) {
         UiObjectMember *member = iter->member;
         int idx = -1;
 
-        if (UiArrayBinding *arrayBinding = cast<UiArrayBinding*>(member))
+        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 (cast<UiObjectDefinition*>(member))
-            idx = propertyOrder.indexOf(QString::null);
         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)
-            return iter;
-
-        previous = iter;
+        if (idx < objectDefinitionInsertionPoint)
+            lastNonObjectDef = iter;
     }
 
-    return previous;
+    if (lastObjectDef)
+        return lastObjectDef;
+    else
+        return lastNonObjectDef;
 }
 
 UiObjectMemberList *QMLRewriter::searchMemberToInsertAfter(UiObjectMemberList *members, const QString &propertyName, const QStringList &propertyOrder)
diff --git a/tests/auto/qml/qmldesigner/coretests/testcore.cpp b/tests/auto/qml/qmldesigner/coretests/testcore.cpp
index f42069fc794fd3c5fdbc1a53c4f3beba530b5bb0..e7da2755c5cf1cdaf650895a50739155c0cb8809 100644
--- a/tests/auto/qml/qmldesigner/coretests/testcore.cpp
+++ b/tests/auto/qml/qmldesigner/coretests/testcore.cpp
@@ -663,8 +663,6 @@ void TestCore::testRewriterPreserveOrder()
         QCOMPARE(newModelNode.id(), QString("rectangle2"));
     }
 
-    QSKIP("See BAUHAUS-631", SkipAll);
-
     {
         QPlainTextEdit textEdit;
         textEdit.setPlainText(qmlString1);