     static let contentSizeChanged = #selector(FetchedCollectionViewController.contentSizeChanged)
 }
 
-class CollectionCoreDataChangeAction {
-    var indexPath: IndexPath?
-    var newIndexPath: IndexPath?
-    var changeType = NSFetchedResultsChangeType.update
-    
-    static func action(_ atIndexPath: IndexPath?, changeType: NSFetchedResultsChangeType, newIndexPath: IndexPath?) -> CollectionCoreDataChangeAction {
-        let result = CollectionCoreDataChangeAction()
-        result.indexPath = atIndexPath
-        result.changeType = changeType
-        result.newIndexPath = newIndexPath
-        return result
-    }
+private struct ChangeAction {
+    let sectionIndex: Int?
+    
+    let indexPath: IndexPath?
+    let newIndexPath: IndexPath?
+
+    let changeType: NSFetchedResultsChangeType
 }
 
 let FetchedCollectionCellIdentifier = "FetchedCollectionCellIdentifier"

    
    public func controllerWillChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {
        Logging.log("controllerWillChangeContent")
        changeActions = [CollectionCoreDataChangeAction]()
    }
    
    public func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChange anObject: Any, at indexPath: IndexPath?, for type: NSFetchedResultsChangeType, newIndexPath: IndexPath?) {
        changeActions.append(CollectionCoreDataChangeAction.action(indexPath, changeType: type, newIndexPath: newIndexPath))
    }
    
    public func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {

    open override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        
        guard fetchedController == nil else {
            return
        }
        
