 	///
 	/// - returns: A producer that emits the logical OR results.
 	public func or(_ producer: SignalProducer<Value, Error>) -> SignalProducer<Value, Error> {
-		return self.lift(Signal.or)(producer)
+		return self.liftLeft(Signal.or)(producer)
 	}
 	
 	/// Create a producer that computes a logical OR between the latest values of `self`

	/// That is, the receiver will be started before the argument producer. When
	/// both producers are synchronous this order can be important depending on
	/// the operator to generate correct results.
	private func liftLeft<U, F, V, G>(_ transform: @escaping (Signal<Value, Error>) -> (Signal<U, F>) -> Signal<V, G>) -> (SignalProducer<U, F>) -> SignalProducer<V, G> {
		return { otherProducer in
			return SignalProducer { observer, outerDisposable in
				otherProducer.startWithSignal { otherSignal, otherDisposable in

	///
	/// - returns: A producer that emits the logical AND results.
	public func and(_ producer: SignalProducer<Value, Error>) -> SignalProducer<Value, Error> {
		return self.liftLeft(Signal.and)(producer)
	}
	
	/// Create a producer that computes a logical AND between the latest values of `self`
