         }
         set {
             value[index] = newValue
-            signal.send(.ReplaceAt(index, with: newValue))
+            _futureChanges?.send(.ReplaceAt(index, with: newValue))
         }
     }
 


    public func insert(newElement: Element, at index: Int) {
        value.insert(newElement, atIndex: index)
        signal.send(.Insert(newElement, at: index))
    }

    public func removeAtIndex(index: Int) -> Element {
        let result = value.removeAtIndex(index)
        signal.send(.RemoveAt(index))
        return result
    }

    public func removeFirst() -> Element {
        let result = value.removeFirst()
        signal.send(.RemoveAt(0))
        return result
    }

    public func removeLast() -> Element {
        let result = value.removeLast()
        signal.send(.RemoveAt(self.count))
        return result
    }
    
    public func popLast() -> Element? {
        guard let result = value.popLast() else { return nil }
        signal.send(.RemoveAt(self.count))
        return result
    }

    public func removeAll() {
        value.removeAll()
        signal.send(.ReplaceAll([]))
    }

}




    }

    /// A source that reports all future values of this variable.
    public final var futureChanges: Source<ArrayChange<Element>> {
        if let futureChanges = _futureChanges {
            return futureChanges.source
        }
        else {
            let signal = Signal<ArrayChange<Element>>()
            _futureChanges = signal
            return signal.source
        }
    }

