 	/// Initializes a property by applying the binary `SignalProducer` transform on
 	/// `property` and `anotherProperty`. The resulting property captures `property`
 	/// and `anotherProperty`.
-	private init<P1: PropertyType, P2: PropertyType>(transformingFirst property: P1, second anotherProperty: P2, @noescape using transform: SignalProducer<P1.Value, NoError> -> SignalProducer<P2.Value, NoError> -> SignalProducer<Value, NoError>) {
-		self.init(propertyProducer: transform(property.producer)(anotherProperty.producer),
-		          capturing: AnyProperty.capture(property, anotherProperty))
+	private init<P1: PropertyType, P2: PropertyType>(combining properties: (P1, P2), @noescape using transform: SignalProducer<P1.Value, NoError> -> SignalProducer<P2.Value, NoError> -> SignalProducer<Value, NoError>) {
+		self.init(propertyProducer: transform(properties.0.producer)(properties.1.producer),
+		          capturing: AnyProperty.capture(properties.0) + AnyProperty.capture(properties.1))
 	}
 
 	/// Initializes a property from a producer that promises to send at least one

	@warn_unused_result(message="Did you forget to use the composed property?")
	private func lift<P: PropertyType, U>(transform: SignalProducer<Value, NoError> -> SignalProducer<P.Value, NoError> -> SignalProducer<U, NoError>) -> P -> AnyProperty<U> {
		return { otherProperty in
			return AnyProperty(transformingFirst: self, second: otherProperty, using: transform)
		}
	}



	/// Initializes a property as a read-only view of the given property.
	public init<P: PropertyType where P.Value == Value>(_ property: P) {
		sources = AnyProperty.capture(property)
		disposable = nil
		_value = { property.value }
		_producer = { property.producer }
