       }
     }
     
-    bond.removeListener = { [unowned self] indices, objects in
+    bond.removeListener = { [unowned self] array, indices, objects in
       var mappedIndices: [Int] = []
       var mappedObjects: [T] = []
       

    self.bond.bind(sourceArray, fire: false)
    super.init([])
    
    bond.insertListener = { [unowned self] i in
      self.dispatchInsertion(i)
    }
    bond.removeListener = { [unowned self] i, o in
      self.dispatchRemoval(i, objects: o.map(mapf))
    }
    bond.updateListener = { [unowned self] i in
      self.dispatchUpdate(i)
    }
  }

  private func dispatchRemoval(indices: [Int], objects: [T]) {
    for bondBox in bonds {
      if let arrayBond = bondBox.bond as? ArrayBond {
        arrayBond.removeListener?(self, indices, objects)
      }
    }
  }
