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

			}
		}
		
		run(self)
	}
	
	public func taskExecuting


extension StageProtocol {
	public func execute(
		environment: Environment,
		progress: @escaping (Self) -> () = { _ in },
		completionService: ServiceProtocol?,
		completion: @escaping (@escaping () throws -> Result) -> ()
	) {
		func complete(_ useResult: (@escaping () throws -> Result)) {
			if let completionService = completionService {
				completionService.async{
