   }
 }
 
+private func perform(#animated: Bool, block: () -> Void) {
+  if !animated {
+    UIView.performWithoutAnimation(block)
+  } else {
+    block()
+  }
+}
+
 public func ->> <T>(left: DynamicArray<UITableViewCell>, right: UITableViewDataSourceBond<T>) {
   right.bind(left)
 }

    self.didInsertListener = { [weak self] array, i in
      if let s = self {
        if let tableView: UITableView = self?.tableView {
          tableView.beginUpdates()
          tableView.insertSections(NSIndexSet(array: i), withRowAnimation: UITableViewRowAnimation.Automatic)
          
          for section in sorted(i, <) {
            let sectionBond = UITableViewDataSourceSectionBond<Void>(tableView: tableView, section: section)
            let sectionDynamic = array[section]
            sectionDynamic.bindTo(sectionBond)
            s.sectionBonds.insert(sectionBond, atIndex: section)
            
            for var idx = section + 1; idx < s.sectionBonds.count; idx++ {
              s.sectionBonds[idx].section += 1
            }
          }
          
          tableView.endUpdates()
        }
      }
    }

  weak var tableView: UITableView?
  private var dataSource: TableViewDynamicArrayDataSource?
  private var sectionBonds: [UITableViewDataSourceSectionBond<Void>] = []
  var disableAnimation = false
  public weak var nextDataSource: UITableViewDataSource? {
    didSet(newValue) {
      dataSource?.nextDataSource = newValue
