@@ -636,13 +636,19 @@ ListViewWithPageHeader::ListItem *ListViewWithPageHeader::createItem(int modelIn
636636 if (prevItem) {
637637 listItem->setY(prevItem->y() + prevItem->height());
638638 } else {
639− ListItem *nextItem = itemAtIndex(modelIndex + 1);
640− if (nextItem) {
641− listItem->setY(nextItem->y() - listItem ->height());
642− } else if (modelIndex == 0 && m_headerItem) {
643− listItem->setY(m_headerItem->height());
644− } else if (!m_visibleItems.isEmpty()) {
645− lostItem = true;
639+ ListItem *currItem = itemAtIndex(modelIndex);
640+ if (currItem) {
641+ // There's something already in m_visibleItems at out index, meaning this is an insert, so attach to its top
642+ listItem->setY(currItem->y() - listItem ->height());
643+ } else {
644+ ListItem *nextItem = itemAtIndex(modelIndex + 1);
645+ if (nextItem) {
646+ listItem->setY(nextItem->y() - listItem ->height());
647+ } else if (modelIndex == 0 && m_headerItem) {
648+ listItem->setY(m_headerItem->height());
649+ } else if (!m_visibleItems.isEmpty()) {
650+ lostItem = true;
651+ }
646652 }
647653 }
648654 if (lostItem) {
@@ -707,7 +713,7 @@ void ListViewWithPageHeader::onModelUpdated(const QQuickChangeSet &changeSet, bo
707713 const auto oldFirstVisibleIndex = m_firstVisibleIndex;
708714
709715 foreach(const QQuickChangeSet::Remove &remove, changeSet.removes()) {
710−// qDebug() << "ListViewWithPageHeader::onModelUpdated Remove" << remove;
716+// qDebug() << "ListViewWithPageHeader::onModelUpdated Remove" << remove.index << remove.count;
711717 if (remove.index + remove.count > m_firstVisibleIndex && remove.index < m_firstVisibleIndex + m_visibleItems.count()) {
712718 const qreal oldFirstValidIndexPos = m_visibleItems.first()->y();
713719 // If all the items we are removing are either not created or culled