                                                completion: nil)
                 })
             } else {
-                switch updateBehavior {
+                if currentIndex > sanitizedIndex {
+                    self.currentIndex = currentIndex - 1
+                }
+                
+                // Reload current view controller in UIPageViewController if insertion index is next/previous page.
+                if pageIndex(index, isNextTo: currentIndex) {
+                    guard let currentViewController = self.currentViewController else {
+                        return
+                    }
                     
-                case .scrollToUpdate:
-                    scrollToPage(.at(index: sanitizedIndex), animated: true)
-                    
-                case .scrollTo(let index):
-                    scrollToPage(.at(index: index), animated: true)
-                    
-                default:()
+                    updateViewControllers(to: [currentViewController], animated: false, async: true, completion: { _ in
+                        self.performScrollUpdate(to: index, behavior: updateBehavior)
+                    })
+                } else { // Otherwise just perform scroll update
+                    performScrollUpdate(to: index, behavior: updateBehavior)
                 }
             }
         })

        default:()
        }
    }
}

            guard let currentIndex = self.currentIndex else {
                return
            }
            guard let newViewController = dataSource?.viewController(for: self, at: index) else {
                assertionFailure("Expected to find inserted UIViewController at page \(index)")
                return
