   @objc
   public func scrollViewWillBeginDragging(scrollView: UIScrollView) {
     willBeginDragging.sendNext(scrollView)
+    behaviors.forEach { $0.scrollViewWillBeginDragging?(scrollView) }
   }
   
   @objc

  
  @objc
  public func tableView(tableView: UITableView,
    cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
      let object = dataSource.objectAtIndexPath(indexPath)!;
      let identifier = nibNameForObjectMatching((object, indexPath))
      var cell = tableView.dequeueReusableCellWithIdentifier(identifier)
      identifiersForIndexPaths[indexPath] = identifier
      
      if cell == nil {
        cell = (nibs[identifier]!.instantiateWithOwner(nil, options: nil).last as! UITableViewCell)
      }
      
      willSetObject.sendNext((cell!, indexPath))
      
      let mapping = mappings[identifier]!
      mapping(object, cell!, indexPath)
      
      didSetObject.sendNext((cell!, indexPath))
      
      return cell!
  }
  
  @objc

    
    dataSource.beginUpdatesSignal.subscribeNext { [weak self] in
      self?.tableView.beginUpdates()
      }.putInto(pool)
    
    dataSource.endUpdatesSignal.subscribeNext { [weak self] in
      self?.tableView.endUpdates()
      }.putInto(pool)
    
    dataSource.reloadDataSignal.subscribeNext { [weak self] in
      guard let strongSelf = self else { return }
      
      if !strongSelf.animatesReload {
        tableView.reloadData()
        
