           defer { tableView.endUpdates() }
         }
         indexPaths.forEach { indexPath in
-          tableView.removeRows(at: IndexSet(integer: indexPath.item), withAnimation: [.effectFade, .slideUp])
-          tableView.insertRows(at: IndexSet(integer: indexPath.item), withAnimation: [.effectFade, .slideUp])
+          tableView.removeRows(at: IndexSet(integer: indexPath.item), withAnimation: configurator.deleteAnimation)
+          tableView.insertRows(at: IndexSet(integer: indexPath.item), withAnimation: configurator.insertAnimation)
         }
       case .moveItem(let indexPath, let newIndexPath):
         tableView.moveRow(at: indexPath.item, to: newIndexPath.item)

          defer { tableView.endUpdates() }
        }
        indexPaths.forEach { indexPath in
          tableView.insertRows(at: IndexSet(integer: indexPath.item), withAnimation: [.effectFade, .slideUp])
        }
      case .deleteItems(let indexPaths):
        if !updating && indexPaths.count > 1 {


import AppKit
import ReactiveKit

public protocol TableViewConfigurationProtocol {
	var animated: Bool { get }
	var insertAnimation: NSTableViewAnimationOptions { get }
	var deleteAnimation: NSTableViewAnimationOptions { get }
	var measureCell: ((Any, Int, NSTableView) -> CGFloat)? { get }
	var createCell: (Any, Int, NSTableView) -> NSView? { get }
}

public extension ReactiveExtensions where Base: NSTableView {

