 /// Use this class only as a last resort! `MutableProperty` is generally better
 /// unless KVC/KVO is required by the API you're using (for example,
 /// `NSOperation`).
-@objc public final class DynamicProperty: RACDynamicPropertySuperclass, DependentType {
+@objc public final class DynamicProperty: RACDynamicPropertySuperclass, MutablePropertyType {
 	public typealias Value = AnyObject?
 
 	private weak var object: NSObject?


/// Represents a property that's value is depended on Signal/Producer.
/// i.e., Operator (<~) binds a signal to a property.
public protocol DependentType: class, PropertyType {
	var value: Value { get set }
}

/// A mutable property of type T that allows observation of its changes.
///
/// Instances of this class are thread-safe.
public final class MutableProperty<T>: DependentType {
	public typealias Value = T

	private let observer: Signal<T, NoError>.Observer

///
/// The binding will automatically terminate when the property is deinitialized,
/// or when the signal sends a `Completed` event.
public func <~ <T, U: MutablePropertyType where U.Value == T>(property: U, signal: Signal<T, NoError>) -> Disposable {
	let disposable = CompositeDisposable()
	let propertyDisposable = property.producer.start(completed: {
		disposable.dispose()
