     }
     
     public func append(sections:[CollectionSectionDescriptable], after section:CollectionSectionDescriptable) {
-        if let sectionIndex = self.sections.index(where: { $0 === section }) {
-            self.sections.insert(contentsOf: sections, at: sectionIndex + 1)
-            
-            result?.insertedSectionsIndexSet.insert(integersIn: Range(uncheckedBounds: (lower: sectionIndex + 1, upper: sectionIndex + 1 + sections.count)))
-            result?.insertedSectionDescriptors.append(contentsOf: sections)
-        }
+        self.sections.insert(contentsOf: sections, at: section.index + 1)
+        result?.insertedSectionsIndexSet.insert(integersIn: Range(uncheckedBounds: (lower: section.index + 1, upper: section.index + 1 + sections.count)))
+        result?.insertedSectionDescriptors.append(contentsOf: sections)
     }
     
     public func remove(sections:[CollectionSectionDescriptable]) {

                result?.reloadedSectionDescriptors.append(sectionToReload)
            }
        }
    }
}


    public func remove(cells:[CollectionCellDescriptable]) {
        var needToCompute = false
        cells.forEach { (cellToDelete) in
            if let section = sectionDescriptable(for: cellToDelete) {
                if let index = section.cells.index(where: {$0 === cellToDelete} ) {
                    section.cells.remove(at: index)
                    result?.deletedIndexPaths.append( cellToDelete.indexPath )
