     Element: ObservableCollectionEventProtocol, Element.UnderlyingCollection.Index == Int, Error == NoError {
 
     @discardableResult
-    public func bind(to tableView: NSTableView, animated: Bool = true, createCell: @escaping (UnderlyingCollection, Int, NSTableColumn?, NSTableView) -> NSView?) -> Disposable {
+    public func bind(to tableView: NSTableView, animated: Bool = true, createCell: @escaping (Element.UnderlyingCollection, Int, NSTableColumn?, NSTableView) -> NSView?) -> Disposable {
         let binder = TableViewBinder(measureCell: nil, createCell: createCell)
         if !animated {
             binder.deleteAnimation = nil

    }

    @discardableResult
    public func bind(to tableView: NSTableView, using binder: TableViewBinder<UnderlyingCollection>) -> Disposable {

        let dataSource = Property<UnderlyingCollection?>(nil)
        let disposable = CompositeDisposable()

        disposable += tableView.reactive.delegate.feed(
            property: dataSource,
            to: #selector(NSTableViewDelegate.tableView(_:heightOfRow:)),
            map: { (dataSource: UnderlyingCollection?, tableView: NSTableView, row: Int) -> CGFloat in
                guard let dataSource = dataSource else { return tableView.rowHeight }
                return binder.heightForRow(at: row, tableView: tableView, dataSource: dataSource) ?? tableView.rowHeight
            }

        disposable += tableView.reactive.delegate.feed(
            property: dataSource,
            to: #selector(NSTableViewDelegate.tableView(_:viewFor:row:)),
            map: { (dataSource: Element.UnderlyingCollection?, tableView: NSTableView, tableColumn: NSTableColumn, row: Int) -> NSView? in
                guard let dataSource = dataSource else { return nil }
                return binder.cellForRow(at: row, tableColumn: tableColumn, tableView: tableView, dataSource: dataSource)
            }
