 		return lift { $0.timeout(after: interval, raising: error, on: scheduler) }
 	}
 
-	/// Wait for completion of `self`, *then* forward all events from
-	/// `replacement`.
-	///
-	/// - note: All values sent from `self` are ignored.
-	///
-	/// - parameters:
-	///   - replacement: A producer to start when `self` completes.
-	///
-	/// - returns: A producer that sends events from `self` and then from
-	///            `replacement` when `self` completes.
-	public func then<U, NewError: Swift.Error>(_ replacement: SignalProducer<U, NewError>) -> SignalProducer<U, NewError> {
-		return self
-			.promoteErrors(NewError.self)
-			.then(replacement)
-	}
-
 	/// Apply a failable `operation` to values from `self` with successful
 	/// results forwarded on the returned producer and thrown errors sent as
 	/// failed events.

	///
	/// - returns: A `SignalProducer` that will forward a success as a `value`
	///            event and then complete or `failed` event if the closure throws.
	public static func attempt(_ operation: @escaping () throws -> Value) -> SignalProducer<Value, Error> {
		return .attempt {
			ReactiveSwift.materialize {
				try operation()
			}
		}
	}

	/// Apply a failable `operation` to values from `self` with successful
	/// results forwarded on the returned producer and thrown errors sent as
	/// failed events.

	/// - returns: A producer that sends events from `self` and then from
	///            `replacement` when `self` completes.
	public func then<U>(_ replacement: SignalProducer<U, NoError>) -> SignalProducer<U, Error> {
		return self.producer.then(replacement.promoteErrors(Error.self))
	}
}

extension SignalProducerProtocol where Error == NoError {
	/// Wait for completion of `self`, *then* forward all events from
	/// `replacement`.
	///
	/// - note: All values sent from `self` are ignored.
	///
	/// - parameters:
	///   - replacement: A producer to start when `self` completes.
	///
	/// - returns: A producer that sends events from `self` and then from
	///            `replacement` when `self` completes.
	public func then<U, NewError: Swift.Error>(_ replacement: SignalProducer<U, NewError>) -> SignalProducer<U, NewError> {
		return self
			.producer
			.promoteErrors(NewError.self)
			.then(replacement)
	}
}

extension SignalProducer {
	/// Start the producer, then block, waiting for the first value.
	///
	/// When a single value or error is sent, the returned `Result` will
