                     toAddSections.insert(idx)
                 }
             }
-            self.insertSections(toAddSections, with: animation)
-            self.reloadSections(toReloadSections, with: animation)
+            insertSections(toAddSections, with: animation)
+            reloadSections(toReloadSections, with: animation)
         }) { _ in
             self._performBatchUpdates({
                 // Move and update sections

        }
    }

    public func update<Section: UITableViewSectionObject>(from oldSections: [Section] = [], to newSections: [Section], animated: Bool = true) {
        let animation: RowAnimation = animated ? .automatic : .none
        
        guard !oldSections.isEmpty else {
            return _performBatchUpdates({
                self.insertSections(IndexSet(newSections.indices), with: animation)
            })
        }
        
        var sectionResults = oldSections
        var rowResults = [Optional<Array<Section.Row>>]()
        _performBatchUpdates({
            // Remove sections
            let toRemove = oldSections.enumerated().filter { !newSections.contains($1) }
            sectionResults.removeAll { section in toRemove.contains { $0.element == section } }
            self.deleteSections(IndexSet(toRemove.map { $0.offset }), with: animation)

            // Add sections
            var toAddSections = IndexSet()

                        rowResults.append(nil)
                    } else {
                        var currentRowResults = oldSections[oldIdx].rows
                        insertAndDelete(from: oldSections[oldIdx].rows, to: section.rows, results: &currentRowResults, in: idx, with: animation)
                        rowResults.append(currentRowResults)
                    }
                } else {
