 
     public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
         guard section == 0 else { return 0 }
-        return items.count
+        return items.origin.count
     }
 
     public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
         precondition(indexPath.section == 0)
         let cell = tableView.dequeueReusableCell(withIdentifier: reuseIdentifier, for: indexPath) as! Cell
-        cellLoader(items[indexPath.row], cell)
+        cellLoader(cell, items.origin[indexPath.row])
         return cell
     }
 

    private func receive(_ change: ArrayChange<Item>) {
        guard !change.isEmpty else { return }
        let batch = change.separated()
        print("Batch: count=\(change.initialCount)/\(change.finalCount), deleted=\(Array(batch.deleted)), inserted=\(Array(batch.inserted)), moved=\(batch.moved)")
        assert(batch.change.finalCount == items.count)

        tableView.beginUpdates()
        tableView.deleteRows(at: batch.deleted.toIndexPaths(), with: .fade)

        for (from, to) in batch.moved {
            tableView.moveRow(at: IndexPath(row: from, section: 0), to: IndexPath(row: to, section: 0))
            if let cell = tableView.cellForRow(at: IndexPath(row: from, section: 0)) as? Cell {
                cellLoader(cell, items.origin[to])
            }
        }
        tableView.endUpdates()
