 	}
 }
 
-extension NSTableView {
-	
-	fileprivate var updating: Bool {
-		get {
-			return objc_getAssociatedObject(self, &NSTableViewUpdatingKey) as? Bool ?? false
-		}
-		set {
-			objc_setAssociatedObject(self, &NSTableViewUpdatingKey, newValue, .OBJC_ASSOCIATION_RETAIN)
-		}
-	}
-}
-
-private var NSTableViewUpdatingKey: UInt8 = 0
+// MARK: - Builtin bonds
 
 private struct DefaultTableViewBond<DataSource: DataSourceProtocol>: TableViewBond {
 	
 	let createCell: (DataSource, Int, NSTableView) -> NSView?
+	
+	var animations: NSTableViewAnimationOptions
+	
+	var insertAnimation: NSTableViewAnimationOptions? {
+		return animations
+	}
+	
+	var deleteAnimation: NSTableViewAnimationOptions? {
+		return animations
+	}
 	
 	func cellForRow(at index: Int, tableView: NSTableView, dataSource: DataSource) -> NSView? {
 		return createCell(dataSource, index, tableView)

	@discardableResult
	public func bind(to tableView: NSTableView, animated: Bool = true, createCell: @escaping (DataSource, Int, NSTableView) -> NSView?) -> Disposable {
		if animated {
			return bind(to: tableView, using: DefaultTableViewBond<DataSource>(createCell: createCell))
		} else {
			return bind(to: tableView, using: ReloadingTableViewBond<DataSource>(createCell: createCell))
		}

  }
}

// MARK: - Table view integration

extension NSTableView {
	
	fileprivate var updating: Bool {
		get {
			return objc_getAssociatedObject(self, &NSTableViewUpdatingKey) as? Bool ?? false
		}
		set {
			objc_setAssociatedObject(self, &NSTableViewUpdatingKey, newValue, .OBJC_ASSOCIATION_RETAIN)
		}
	}
}

private var NSTableViewUpdatingKey: UInt8 = 0

// MARK: - Bond declaration

public protocol TableViewBondOptionable {
	var insertAnimation: NSTableViewAnimationOptions? { get }
	var deleteAnimation: NSTableViewAnimationOptions? { get }
}

public protocol TableViewBond: TableViewBondOptionable {
	
	associatedtype DataSource: DataSourceProtocol
	
	func apply(event: DataSourceEvent<DataSource>, to tableView: NSTableView)
	func heightForRow(at index: Int, tableView: NSTableView, dataSource: DataSource) -> CGFloat?
