   
   public func collectionView(collectionView: UICollectionView, didEndDisplayingSupplementaryView view: UICollectionReusableView, forElementOfKind elementKind: String, atIndexPath indexPath: NSIndexPath) {
     willEndDisplayingSupplementaryView.sendNext((view, elementKind, indexPath))
-  }
-  
-  public override func respondsToSelector(aSelector: Selector) -> Bool {
-    if aSelector == #selector(collectionView(_:viewForSupplementaryElementOfKind:atIndexPath:)) {
-      return viewForSupplementaryViewOfKindMatching != nil
-    } else {
-      return super.respondsToSelector(aSelector)
-    }
   }
   
   public func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {

          strongSelf.collectionView.reloadData()
          UIView.animateWithDuration(0.2, animations: {
            strongSelf.collectionView.alpha = 1
        })
      })
    }.putInto(pool)
    
    dataSource.didChangeObjectSignal.subscribeNext { [weak self] object, changeType, fromIndexPath, toIndexPath in
      guard let strongSelf = self else {

      }
    }
  }
  
  private weak var collectionView: UICollectionView!
  
  private var dataSource: ObjectsDataSource<ObjectType>!
  private var instances = [String: UICollectionViewCell]()
  private var identifiersForIndexPaths = [NSIndexPath: String]()
