                     let registration : UICollectionView.SupplementaryRegistration<T>
                         
                         if let nibName = self.xibName, UINib.nibExists(withNibName: nibName, inBundle: self.bundle) {
-                            registration = .init(supplementaryNib: UINib(nibName: nibName, bundle: self.bundle), elementKind: kind, handler: { cell, indexPath, model in
-                                supplementaryConfiguration(cell, indexPath, model)
+                            registration = .init(supplementaryNib: UINib(nibName: nibName, bundle: self.bundle), elementKind: kind, handler: { view, kind, indexPath in
+                                supplementaryConfiguration(view, model, indexPath)
                             })
                         } else {
-                            registration = .init(elementKind: kind, handler: { cell, indexPath, model in
-                                supplementaryConfiguration(cell, indexPath, model)
+                            registration = .init(elementKind: kind, handler: { view, kind, indexPath in
+                                supplementaryConfiguration(view, model, indexPath)
                             })
                         }
                     return collectionView.dequeueConfiguredReusableSupplementary(using: registration, for: indexPath)
                 #else
                     let supplementary = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: self.reuseIdentifier, for: indexPath)
                     if let supplementary = supplementary as? T {
-                        supplementaryConfiguration(supplementary, kind, indexPath)
+                        supplementaryConfiguration(supplementary, model, indexPath)
                     }
                     return supplementary
                 #endif
                 } else {
                     let supplementary = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: self.reuseIdentifier, for: indexPath)
                     if let supplementary = supplementary as? T {
-                        supplementaryConfiguration(supplementary, kind, indexPath)
+                        supplementaryConfiguration(supplementary, model, indexPath)
                     }
                     return supplementary
                 }

                        
                        if let nibName = self.xibName, UINib.nibExists(withNibName: nibName, inBundle: self.bundle) {
                            registration = .init(cellNib: UINib(nibName: nibName, bundle: self.bundle), handler: { cell, indexPath, model in
                                cellConfiguration(cell, indexPath, model)
                            })
                        } else {
                            registration = .init(handler: { cell, indexPath, model in
                                cellConfiguration(cell, indexPath, model)
                            })
                        }
                        return collectionView.dequeueConfiguredReusableCell(using: registration, for: indexPath, item: model)
                    #else
                        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: self.reuseIdentifier, for: indexPath)
                        if let cell = cell as? T {
                            cellConfiguration(cell, indexPath, model)
                        }
                        return cell
                    #endif
                } else {
                    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: self.reuseIdentifier, for: indexPath)
                    if let cell = cell as? T, let model = model as? U {
                        cellConfiguration(cell, indexPath, model)
                    }
                    return cell
                }

        mapping?(self)
    }
    
    public init(cellConfiguration: @escaping ((T, T.ModelType, IndexPath) -> Void),
                mapping: ((ViewModelMapping<T, T.ModelType>) -> Void)?)
        where T: UICollectionViewCell, T: ModelTransfer, T.ModelType == U
    {
