             case .Rejected(let error):
                 rejecter(error)
             case .Fulfilled(let value):
-                fulfiller(value as U)
+                fulfiller(value())
             case .Pending:
                 promise.handlers.append{
                     switch promise.state {
                     case .Rejected(let error):
                         rejecter(error)
                     case .Fulfilled(let value):
-                        fulfiller(value as U)
+                        fulfiller(value())
                     case .Pending:
                         abort()
                     }

            case .Rejected(let error):
                rejecter(error)
            case .Fulfilled(let value):
                fulfiller(value as T)
            case .Pending:
                promise.handlers.append{
                    switch promise.state {
                    case .Rejected(let error):
                        rejecter(error)
                    case .Fulfilled(let value):
                        fulfiller(value as T)
                    case .Pending:
                        abort()
                    }

            return Promise<U>(error: error);
        case .Fulfilled(let value):
            return dispatch_promise(to:q){
                bind(value(), $0, $1)
            }
        case .Pending:
            return Promise<U>{ (fulfiller, rejecter) in
