 		lock.lock()
 		defer { lock.unlock() }
 
-		let oldValue = _value
-		_value = try action(_value)
-		observer.sendNext(_value)
+		let oldValue = state.value
+		state.value = try action(oldValue)
+		self.observer.sendNext(state.value)
+
 		return oldValue
 	}
 

	var value: Value { get set }
}

/// A mutable property of type `Value` that allows observation of its changes.
///
/// Instances of this class are thread-safe.

	/// `value`. Note that recursive sets will still deadlock because the
	/// underlying producer prevents sending recursive events.
	private let lock: NSRecursiveLock

	/// The underlying storage of the property. It could outlive the
  /// property if the producer is being retained.
	private let state: MutablePropertyState<Value>

	/// The current value of the property.
	///
