 	}
 	
 	func whenFinished(scheduler: Scheduler, action: T -> ()) -> Disposable? {
-		return nil
+		return withLock(self.condition) {
+			switch self.state {
+			case let .Done(result):
+				return scheduler.schedule {
+					action(result())
+				}
+			
+			default:
+				let disposable = CompositeDisposable()
+			
+				// TODO: Offer a way to remove this from the array too?
+				self.finishedActions.append {
+					let schedulerDisposable = scheduler.schedule {
+						action(self.result())
+					}
+					
+					disposable.addDisposable(schedulerDisposable)
+				}
+				
+				return disposable
+			}
+		}
 	}
 }


			withLock(self.condition) { () -> () in
				self.state = PromiseState.Done { () -> T in result }
				self.condition.broadcast()
			}

			return result

			
			withLock(self.condition) { () -> () in
				self.state = PromiseState.Done { result }
			}
		}
	}
	
	func result() -> T {
		let (maybeWork: (() -> T)?, maybeResult: T?) = withLock(self.condition) {
			while self.state.isResolving {
				self.condition.wait()
			}

