 
 					dispatch_group_enter(group)
 					rawTask.terminationHandler = { nstask in
-						func getProducer(property: AnyProperty<Aggregation?>) -> SignalProducer<NSData, TaskError> {
+						func getProducer(property: AnyProperty<Aggregation?>) -> Pipe.ReadProducer {
 							return property.producer
 								.ignoreNil()
 								.promoteErrors(TaskError.self)

				}

				return SignalProducer { observer, disposable in
					func startAggregating(producer: SignalProducer<NSData, TaskError>) -> AnyProperty<Aggregation?> {
						let aggregated = MutableProperty<Aggregation?>(nil)

						producer.startWithSignal { signal, signalDisposable in

	///
	/// After starting the returned producer, `readFD` should not be used
	/// anywhere else, as it may close unexpectedly.
	func transferReadsToProducer() -> ReadProducer {
		return SignalProducer { observer, disposable in
			dispatch_group_enter(self.group)
			let channel = dispatch_io_create(DISPATCH_IO_STREAM, self.readFD, self.queue) { error in
