     }
     
     
-    func providerDidInsertItemsAtIndexPaths(items: [ItemType], atIndexPaths: [NSIndexPath]) {
+    public func providerDidInsertItemsAtIndexPaths(items: [ItemType], atIndexPaths: [NSIndexPath]) {
 
         updateWithItemChange(.Insert, indexPaths: atIndexPaths)
     }
     
-    func providerDidDeleteItemsAtIndexPaths(items: [ItemType], atIndexPaths: [NSIndexPath]) {
+    public func providerDidDeleteItemsAtIndexPaths(items: [ItemType], atIndexPaths: [NSIndexPath]) {
 
         
         updateWithItemChange(.Delete, indexPaths: atIndexPaths)
     }
     
-    func providerDidUpdateItemsAtIndexPaths(items: [ItemType], atIndexPaths indexPaths: [NSIndexPath]) {
+    public func providerDidUpdateItemsAtIndexPaths(items: [ItemType], atIndexPaths indexPaths: [NSIndexPath]) {
         
         updateWithItemChange(.Update, indexPaths: indexPaths)
     }
     
-    func providerDidMoveItem(item: ItemType, atIndexPath: NSIndexPath, toIndexPath: NSIndexPath) {
+    public func providerDidMoveItem(item: ItemType, atIndexPath: NSIndexPath, toIndexPath: NSIndexPath) {
         
         self.collectionView?.moveItemAtIndexPath(atIndexPath, toIndexPath: toIndexPath)
     }
     
-    func providerDidDeleteAllItemsInSection(section: Int) {
+    public func providerDidDeleteAllItemsInSection(section: Int) {
         
         let indexSet = NSIndexSet(index: section)
         

    let collectionViewCellProvider: CollectionViewCellProvider
    
    
    init(collectionView: UICollectionView, dataSource: DataSource, cellProvider: CollectionViewCellProvider) {
        
        self.collectionView = collectionView
        self.dataSource = dataSource

    }
}

@objc public protocol CollectionViewCellProvider {
    
    func collectionView(collectionView: UICollectionView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
    
