                     if sSelf.unfinishedBatchUpdatesCount == 0, let onAllBatchUpdatesFinished = self?.onAllBatchUpdatesFinished {
                         DispatchQueue.main.async(execute: onAllBatchUpdatesFinished)
                     }
+
+                    adjustScrollViewToBottom()
                 })
             })
         } else {

            updateModelClosure()
            collectionView.reloadData()
            collectionView.collectionViewLayout.prepare()
        }

        collectionView.setNeedsLayout()
        collectionView.layoutIfNeeded()

        switch scrollAction {
        case .scrollToBottom:
            collectionView.scrollToBottom(
                animated: updateType == .normal,
                animationDuration: self.configuration.updatesAnimationDuration
            )
        case .preservePosition(rectForReferenceIndexPathBeforeUpdate: let oldRect, referenceIndexPathAfterUpdate: let indexPath):
            let newRect = self.rectAtIndexPath(indexPath)
            collectionView.scrollToPreservePosition(oldRefRect: oldRect, newRefRect: newRect)
        }

        if !usesBatchUpdates || self.configuration.fastUpdates {

            }
        }

        let adjustScrollViewToBottom = {
            switch scrollAction {
            case .scrollToBottom:
                collectionView.scrollToBottom(
                    animated: updateType == .normal,
                    animationDuration: self.configuration.updatesAnimationDuration
                )
            case .preservePosition(rectForReferenceIndexPathBeforeUpdate: let oldRect, referenceIndexPathAfterUpdate: let indexPath):
                let newRect = self.rectAtIndexPath(indexPath)
                collectionView.scrollToPreservePosition(oldRefRect: oldRect, newRefRect: newRect)
            }
        }

        if usesBatchUpdates {
            UIView.animate(withDuration: self.configuration.updatesAnimationDuration, animations: { () -> Void in
                self.unfinishedBatchUpdatesCount += 1
