 
 /// **internal use only**
 fileprivate  class SubscribedPromiseState<Success>: AbstractPromiseState<Success> {
-  typealias Value = Fallible<Success>
-  typealias Handler = PromiseHandler<Success>
-
-  weak private var handler: Handler?
+  weak private var handler: PromiseHandler<Success>?
   let next: SubscribedPromiseState<Success>?
 
-  init(handler: Handler, next: SubscribedPromiseState<Success>?) {
+  init(handler: PromiseHandler<Success>, next: SubscribedPromiseState<Success>?) {
     self.handler = handler
     self.next = next
   }
 
-  override func handleCompletion(
+  override func subscribe(
+    owner: Future<Success>,
+    handler: inout PromiseHandler<Success>?,
+    executor: Executor,
+    _ block: @escaping (_ completion: Fallible<Success>, _ originalExecutor: Executor) -> Void
+    ) -> AbstractPromiseState<Success> {
+    let localHandler = PromiseHandler(executor: executor, block: block, owner: owner)
+    handler = localHandler
+    return SubscribedPromiseState(handler: localHandler, next: self)
+  }
+
+  override func didComplete(
     _ value: Fallible<Success>,
     from originalExecutor: Executor?
     ) -> AbstractPromiseState<Success>? {
-    let handler = self.handler
-    handler?.handle(value, from: originalExecutor)
-    handler?.releaseOwner()
+    if let handler = self.handler {
+      handler.handle(value, from: originalExecutor)
+      handler.releaseOwner()
+    }
     return next
   }
 }
 
 /// **internal use only**
 fileprivate  class CompletedPromiseState<Success>: AbstractPromiseState<Success> {
-  let value: Fallible<Success>
-
-  init(value: Fallible<Success>) {
-    self.value = value
+  override var completion: Fallible<Success>? { return _completion }
+  let _completion: Fallible<Success>
+
+  init(completion: Fallible<Success>) {
+    _completion = completion
+  }
+
+  override func subscribe(
+    owner: Future<Success>,
+    handler: inout PromiseHandler<Success>?,
+    executor: Executor,
+    _ block: @escaping (_ completion: Fallible<Success>, _ originalExecutor: Executor) -> Void
+    ) -> AbstractPromiseState<Success> {
+    return self
+  }
+
+  override func didSubscribe(
+    executor: Executor,
+    _ block: @escaping (_ completion: Fallible<Success>, _ originalExecutor: Executor) -> Void) {
+    let localCompletion = _completion
+    executor.execute(from: nil) { (originalExecutor) in
+      block(localCompletion, originalExecutor)
+    }
+  }
+
+  override func complete(completion: Fallible<Success>) -> AbstractPromiseState<Success> {
+    return self
   }
 }
 

    self.notifyBlock = notifyBlock
  }

  override func handleSubscription() {
    notifyBlock(false)
  }

  override func handleCompletion(
    _ value: Fallible<Success>,
    from originalExecutor: Executor?
    ) -> AbstractPromiseState<Success>? {

    executor: Executor,
    _ block: @escaping (_ completion: Fallible<Success>, _ originalExecutor: Executor) -> Void
    ) -> AnyObject? {
    var handler: PromiseHandler<Success>? = nil

    let (oldHead, _) = _container.updateHead {
      return ($0 as! AbstractPromiseState<Success>)
        .subscribe(owner: self, handler: &handler, executor: executor, block)
    }

    (oldHead as! AbstractPromiseState<Success>).didSubscribe(executor: executor, block)

    return handler
  }
