 
 					if let indexSet = changes.deletedSections {
 						tableView.deleteSections(NSMutableIndexSet(converting: indexSet),
-							withRowAnimation: self.rowAnimation)
+							withRowAnimation: self.deletingAnimation)
 					}
 
 					if let indexSet = changes.reloadedSections {
 						tableView.reloadSections(NSMutableIndexSet(converting: indexSet),
-							withRowAnimation: self.rowAnimation)
+							withRowAnimation: self.updatingAnimation)
 					}
 
 					if let indexPaths = changes.deletedRows {
 						tableView.deleteRowsAtIndexPaths(indexPaths.map { NSIndexPath(converting: $0) },
-							withRowAnimation: self.rowAnimation)
+							withRowAnimation: self.deletingAnimation)
 					}
 
 					if self.shouldReloadRowsForUpdatedObjects, let indexPaths = changes.updatedRows {
 						tableView.reloadRowsAtIndexPaths(indexPaths.map { NSIndexPath(converting: $0) },
-							withRowAnimation: self.rowAnimation)
+							withRowAnimation: self.updatingAnimation)
 					}
 
 					if let indexSet = changes.insertedSections {
 						tableView.insertSections(NSMutableIndexSet(converting: indexSet),
-							withRowAnimation: self.rowAnimation)
+							withRowAnimation: self.insertingAnimation)
 					}
 
 					if let indexPathPairs = changes.movedRows {

		return self
	}

	public func bind(tableView: UITableView) -> Disposable {
		tableView.dataSource = self



final public class TableViewAdapter<V: ViewModel>: NSObject, UITableViewDataSource {
	private let set: ViewModelSet<V>

	private var cellConfigurators: [(reuseIdentifier: String, configurator: (cell: UITableViewCell, viewModel: V) -> Void)?]
	private var isUniform = false

	private var shouldReloadRowsForUpdatedObjects = false

	private var insertingAnimation: UITableViewRowAnimation = .Automatic
	private var deletingAnimation: UITableViewRowAnimation = .Automatic
	private var updatingAnimation: UITableViewRowAnimation = .Automatic

	private var sectionNameMapper: ((position: Int, persistedName: String?) -> String?)?

	private var isEmpty: Bool = true
	public var emptiedObserver: (() -> Void)?
	public var unemptiedObserver: (() -> Void)?

	public init(set: ViewModelSet<V>) {
		self.set = set
