 						dispatch_group_leave(group)
 					}
 
-					task.launch()
+					rawTask.launch()
 					close(stdoutPipe.writeFD)
 					close(stderrPipe.writeFD)
 
-					observer.sendNext(.Launch(taskDescription))
+					observer.sendNext(.Launch(task))
 
 					stdinProducer.startWithSignal { signal, signalDisposable in
 						disposable += signalDisposable
 					}
 
 					disposable.addDisposable {
-						task.terminate()
+						rawTask.terminate()
 					}
 				}
 			}

						))
					}

					task.standardOutput = stdoutPipe.writeHandle
					task.standardError = stderrPipe.writeHandle

					dispatch_group_enter(group)
					task.terminationHandler = { task in
						let terminationStatus = task.terminationStatus
						if terminationStatus == EXIT_SUCCESS {
							// Wait for stderr to finish, then pass

		if let input = standardInput {
			switch Pipe.create(queue, group) {
			case let .Success(pipe):
				rawTask.standardInput = pipe.readHandle

				stdinProducer = pipe.writeDataFromProducer(input).on(started: {
					close(pipe.readFD)
