 			}
 		}
 		
-		run(self)
+		process(self)
 	}
 	
 	public func taskExecuting


extension StageProtocol {
	public func compose
    <Other>(
    transformNext: @escaping (Self) throws -> Other,
    transformResult: (Result) -> Deferred<Other>
    ) -> Deferred<Other>
	{
		if let result = result {
			return transformResult(result)

		func handleResult(_ getStage: () throws -> Self) {
			do {
				let nextStage = try getStage()
				progress(nextStage)
				process(nextStage)
			}
			catch let error {
				complete{ throw error }
			}
		}
		
		func process(_ stage: Self) {
			environment.service(for: stage).async {
				if environment.shouldStop(stage) {
					complete{ throw EnvironmentError.stopped }
