diff --git a/tests/auto/qtquick2/qquickgridview/tst_qquickgridview.cpp b/tests/auto/qtquick2/qquickgridview/tst_qquickgridview.cpp
index 241e2e9dc0f7218a7ae0c42dfe21fc1160ff0f46..b1edb2246b61aab1975672565a92828ce88376c1 100644
--- a/tests/auto/qtquick2/qquickgridview/tst_qquickgridview.cpp
+++ b/tests/auto/qtquick2/qquickgridview/tst_qquickgridview.cpp
@@ -134,23 +134,28 @@ private:
 template<typename T>
 void tst_qquickgridview_move(int from, int to, int n, T *items)
 {
-    if (n == 1) {
-        items->move(from, to);
-    } else {
-        T replaced;
-        int i=0;
-        typename T::ConstIterator it=items->begin(); it += from+n;
-        for (; i<to-from; ++i,++it)
-            replaced.append(*it);
-        i=0;
-        it=items->begin(); it += from;
-        for (; i<n; ++i,++it)
-            replaced.append(*it);
-        typename T::ConstIterator f=replaced.begin();
-        typename T::Iterator t=items->begin(); t += from;
-        for (; f != replaced.end(); ++f, ++t)
-            *t = *f;
-    }
+    if (from > to) {
+        // Only move forwards - flip if backwards moving
+        int tfrom = from;
+        int tto = to;
+        from = tto;
+        to = tto+n;
+        n = tfrom-tto;
+    }
+
+    T replaced;
+    int i=0;
+    typename T::ConstIterator it=items->begin(); it += from+n;
+    for (; i<to-from; ++i,++it)
+        replaced.append(*it);
+    i=0;
+    it=items->begin(); it += from;
+    for (; i<n; ++i,++it)
+        replaced.append(*it);
+    typename T::ConstIterator f=replaced.begin();
+    typename T::Iterator t=items->begin(); t += from;
+    for (; f != replaced.end(); ++f, ++t)
+        *t = *f;
 }
 
 void tst_QQuickGridView::initTestCase()
@@ -969,7 +974,7 @@ void tst_QQuickGridView::moved()
 
     QQuickText *name;
     QQuickText *number;
-    QQuickView *canvas = createView();
+    QScopedPointer<QQuickView> canvas(createView());
     canvas->show();
 
     TestModel model;
@@ -997,7 +1002,7 @@ void tst_QQuickGridView::moved()
     model.moveItems(from, to, count);
 
     // wait for items to move
-    QTest::qWait(300);
+    QTRY_COMPARE(QQuickItemPrivate::get(gridview)->polishScheduled, false);
 
     // Confirm items positioned correctly and indexes correct
     int firstVisibleIndex = qCeil(contentY / 60.0) * 3;
@@ -1022,8 +1027,6 @@ void tst_QQuickGridView::moved()
         if (item == currentItem)
             QTRY_COMPARE(gridview->currentIndex(), i);
     }
-
-    delete canvas;
 }
 
 void tst_QQuickGridView::moved_data()
diff --git a/tests/auto/qtquick2/qquickvisualdatamodel/tst_qquickvisualdatamodel.cpp b/tests/auto/qtquick2/qquickvisualdatamodel/tst_qquickvisualdatamodel.cpp
index 9e27a202b264f784a01d5c593d4e24b9cd835d03..af3af574360a6594e15599e44b645e7b894aa32e 100644
--- a/tests/auto/qtquick2/qquickvisualdatamodel/tst_qquickvisualdatamodel.cpp
+++ b/tests/auto/qtquick2/qquickvisualdatamodel/tst_qquickvisualdatamodel.cpp
@@ -688,26 +688,18 @@ void tst_qquickvisualdatamodel::qaimRowsMoved()
 
     QSignalSpy spy(obj, SIGNAL(modelUpdated(QDeclarativeChangeSet,bool)));
     model.emitMove(sourceFirst, sourceLast, destinationChild);
-    // QAbstractItemModel also emits the changed signal when items are moved.
-    QCOMPARE(spy.count(), 2);
-
-    bool move = false;
-    for (int i = 0; i < 2; ++i) {
-        QCOMPARE(spy[1].count(), 2);
-        QDeclarativeChangeSet changeSet = spy[i][0].value<QDeclarativeChangeSet>();
-        if (!changeSet.changes().isEmpty())
-            continue;
-        move = true;
-        QCOMPARE(changeSet.removes().count(), 1);
-        QCOMPARE(changeSet.removes().at(0).index, expectFrom);
-        QCOMPARE(changeSet.removes().at(0).count, expectCount);
-        QCOMPARE(changeSet.inserts().count(), 1);
-        QCOMPARE(changeSet.inserts().at(0).index, expectTo);
-        QCOMPARE(changeSet.inserts().at(0).count, expectCount);
-        QCOMPARE(changeSet.removes().at(0).moveId, changeSet.inserts().at(0).moveId);
-        QCOMPARE(spy[i][1].toBool(), false);
-    }
-    QVERIFY(move);
+    QCOMPARE(spy.count(), 1);
+
+    QCOMPARE(spy[0].count(), 2);
+    QDeclarativeChangeSet changeSet = spy[0][0].value<QDeclarativeChangeSet>();
+    QCOMPARE(changeSet.removes().count(), 1);
+    QCOMPARE(changeSet.removes().at(0).index, expectFrom);
+    QCOMPARE(changeSet.removes().at(0).count, expectCount);
+    QCOMPARE(changeSet.inserts().count(), 1);
+    QCOMPARE(changeSet.inserts().at(0).index, expectTo);
+    QCOMPARE(changeSet.inserts().at(0).count, expectCount);
+    QCOMPARE(changeSet.removes().at(0).moveId, changeSet.inserts().at(0).moveId);
+    QCOMPARE(spy[0][1].toBool(), false);
 
     delete obj;
 }