diff --git a/src/qml/types/qqmlinstantiator.cpp b/src/qml/types/qqmlinstantiator.cpp
index a2a1fa23ad196d6dbdc6fdeee906045baad98a83..234494e088329a63973728767bba9825c0f07e96 100644
--- a/src/qml/types/qqmlinstantiator.cpp
+++ b/src/qml/types/qqmlinstantiator.cpp
@@ -52,6 +52,7 @@ QT_BEGIN_NAMESPACE
 
 QQmlInstantiatorPrivate::QQmlInstantiatorPrivate()
     : componentComplete(true)
+    , effectiveReset(false)
     , active(true)
     , async(false)
     , ownModel(false)
@@ -124,7 +125,7 @@ void QQmlInstantiatorPrivate::_q_modelUpdated(const QQmlChangeSet &changeSet, bo
 {
     Q_Q(QQmlInstantiator);
 
-    if (componentComplete)
+    if (!componentComplete || effectiveReset)
         return;
 
     if (reset) {
@@ -162,7 +163,7 @@ void QQmlInstantiatorPrivate::_q_modelUpdated(const QQmlChangeSet &changeSet, bo
             objects = objects.mid(0, index) + movedObjects + objects.mid(index);
         } else for (int i = 0; i < insert.count; ++i) {
             int modelIndex = index + i;
-            QObject* obj = instanceModel->object(i, async);
+            QObject* obj = instanceModel->object(modelIndex, async);
             if (obj)
                 _q_createdItem(modelIndex, obj);
         }
@@ -378,8 +379,11 @@ void QQmlInstantiator::setModel(const QVariant &v)
         if (!d->ownModel)
             d->makeModel();
 
-        if (QQmlDelegateModel *dataModel = qobject_cast<QQmlDelegateModel *>(d->instanceModel))
+        if (QQmlDelegateModel *dataModel = qobject_cast<QQmlDelegateModel *>(d->instanceModel)) {
+            d->effectiveReset = true;
             dataModel->setModel(v);
+            d->effectiveReset = false;
+        }
     }
 
     if (d->instanceModel != prevModel) {
diff --git a/src/qml/types/qqmlinstantiator_p_p.h b/src/qml/types/qqmlinstantiator_p_p.h
index 79459299dcf476822a9010a59a866afbbab0c541..ac25ce809cd6993114a8681b4122c5549999b45f 100644
--- a/src/qml/types/qqmlinstantiator_p_p.h
+++ b/src/qml/types/qqmlinstantiator_p_p.h
@@ -76,6 +76,7 @@ public:
     void _q_modelUpdated(const QQmlChangeSet &, bool);
 
     bool componentComplete;
+    bool effectiveReset;
     bool active;
     bool async;
     bool ownModel;