         let oldCount = count
         value.replaceRange(subRange, with: newElements)
         _futureChanges?.send(ArrayChange(count: oldCount, modification: .ReplaceRange(subRange, with: Array<Element>(newElements))))
+        _futureValues?.send(value)
     }
 
     // These have default implementations in terms of replaceRange, but doing them by hand makes for better change reports.

    public func insert(newElement: Element, at index: Int) {
        value.insert(newElement, atIndex: index)
        _futureChanges?.send(ArrayChange(count: self.count - 1, modification: .Insert(newElement, at: index)))
    }

    public func removeAtIndex(index: Int) -> Element {
        let result = value.removeAtIndex(index)
        _futureChanges?.send(ArrayChange(count: self.count + 1, modification: .RemoveAt(index)))
        return result
    }

    public func removeFirst() -> Element {
        let result = value.removeFirst()
        _futureChanges?.send(ArrayChange(count: self.count + 1, modification: .RemoveAt(0)))
        return result
    }

    public func removeLast() -> Element {
        let result = value.removeLast()
        _futureChanges?.send(ArrayChange(count: self.count + 1, modification: .RemoveAt(self.count)))
        return result
    }
    
    public func popLast() -> Element? {
        guard let result = value.popLast() else { return nil }
        _futureChanges?.send(ArrayChange(count: self.count + 1, modification: .RemoveAt(self.count)))
        return result
    }


    public var observableCount: Observable<Int> {
        return Observable(getter: { self.count }, futureValues: { self.futureCounts.source })
    }
}

extension ArrayVariable: MutableCollectionType {
