         self.createCell = nil
     }
 
-    public init(isItemExpandable: ((TreeNode, TreeNode?, NSOutlineView) -> Bool)? = nil, measureCell: ((TreeNode, TreeNode?, NSOutlineView) -> CGFloat?)? = nil, createCell: ((TreeNode, TreeNode?, NSTableColumn?, NSOutlineView) -> NSView?)? = nil) {
+    public init(isItemExpandable: ((TreeNode, TreeNode.Element?, NSOutlineView) -> Bool)? = nil, measureCell: ((TreeNode, TreeNode.Element?, NSOutlineView) -> CGFloat?)? = nil, createCell: ((TreeNode, TreeNode.Element?, NSTableColumn?, NSOutlineView) -> NSView?)? = nil) {
         self.isItemExpandable = isItemExpandable
         self.measureCell = measureCell
         self.createCell = createCell
     }
 
-    open func isExpandable(for item: TreeNode?, outlineView: NSOutlineView, dataSource: TreeNode) -> Bool {
+    open func isExpandable(for item: TreeNode.Element?, outlineView: NSOutlineView, dataSource: TreeNode) -> Bool {
         return self.isItemExpandable?(dataSource, item, outlineView) ?? false
     }
 
-    open func height(for item: TreeNode?, outlineView: NSOutlineView, dataSource: TreeNode) -> CGFloat? {
+    open func height(for item: TreeNode.Element?, outlineView: NSOutlineView, dataSource: TreeNode) -> CGFloat? {
         return self.measureCell?(dataSource, item, outlineView) ?? outlineView.rowHeight
     }
 
-    open func cell(for item: TreeNode?, tableColumn: NSTableColumn?, outlineView: NSOutlineView, dataSource: TreeNode) -> NSView? {
+    open func cell(for item: TreeNode.Element?, tableColumn: NSTableColumn?, outlineView: NSOutlineView, dataSource: TreeNode) -> NSView? {
         return self.createCell?(dataSource, item, tableColumn, outlineView) ?? nil
     }
 

        disposable += outlineView.reactive.dataSource.feed(
            property: dataSource,
            to: #selector(NSOutlineViewDataSource.outlineView(_:numberOfChildrenOfItem:)),
            map: { (dataSource: Element.UnderlyingCollection?, _: NSOutlineView, item: Element.UnderlyingCollection?) -> Int in
                guard let item = item else {
                    return dataSource?.count ?? 0
                }

        disposable += outlineView.reactive.dataSource.feed(
            property: dataSource,
            to: #selector(NSOutlineViewDataSource.outlineView(_:isItemExpandable:)),
            map: { (dataSource: Element.UnderlyingCollection?, outlineView: NSOutlineView, item: Element.UnderlyingCollection.Element?) -> Bool in
                return (item?.count ?? 0) > 0
            }
        )
