         return delegate
     }()
 
-    private var removedTabIndexPath: NSIndexPath?
-
     init(tabManager: TabManager, profile: Profile) {
         self.tabManager = tabManager
         self.profile = profile

    }

    func tabManager(tabManager: TabManager, didRemoveTab tab: Browser) {
        if let removedIndex = removedTabIndexPath {
            tabDataSource.tabs.removeAtIndex(removedIndex.item)
            removedTabIndexPath = nil

            self.collectionView.deleteItemsAtIndexPaths([removedIndex])

            // Workaround: On iOS 8.* devices, cells don't get reloaded during the deletion but after the 
            // animation has finished which causes cells that animate from above to suddenly 'appear'. This
            // is fixed on iOS 9 but for iOS 8 we force a reload on non-visible cells during the animation.
            if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_8_3) {
                let visibleCount = collectionView.indexPathsForVisibleItems().count
                var offscreenIndexPaths = [NSIndexPath]()
                for i in 0..<(tabsToDisplay.count - visibleCount) {
                    offscreenIndexPaths.append(NSIndexPath(forItem: i, inSection: 0))
                }
                self.collectionView.reloadItemsAtIndexPaths(offscreenIndexPaths)
            }

            if #available(iOS 9, *) {
                if privateTabsAreEmpty() {
                    emptyPrivateTabsView.alpha = 1
                }
            }
        }
    }

        // Get the index of the added tab from it's set (private or normal)
        guard let index = tabsToDisplay.indexOf(tab) else { return }
        
        tabDataSource.addTab(tab)

        self.collectionView.performBatchUpdates({ _ in
            self.collectionView.insertItemsAtIndexPaths([NSIndexPath(forItem: index, inSection: 0)])
