         
         switch self.state {
         case .Fulfilled:
-            let output = onFulfilled?(value: self.value!)
-            
-                subPromise.resolve(output!)
+            if let resolution = onFulfilled? {
+                subPromise.resolve(value: resolution(value: self.value!))
+            }
+            else {
+                subPromise.onFulfilled(self.value! as N)
+            }
         case .Rejected:
-            if let onRejected = onRejected {
-                subPromise.resolve(onRejected(reason: self.reason!))
+            if let rejection = onRejected? {
+                subPromise.resolve(value: rejection(reason: self.reason!))
+            }
+            else {
+                subPromise.onRejected(self.reason!)
             }
         default:
             break

        )
    }

    
    convenience
    public init<T: Thenable where T.ValueType == V, T.ReasonType == NSError, T.ReturnType == Optional<Any>>(thenable: T)
    {
        self.init()
        
        thenable.then(
            onFulfilled: { (value: V) -> Any? in

            }
        )
    }

    // MARK: - Thenable

    public func then<N>(
