                 self.handlers.append {
                     switch self.state {
                     case .Fulfilled(let value):
-                        fulfiller(value as T)
+                        fulfiller(value())
                     case .Rejected(let error):
                         dispatch_async(onQueue){ fulfiller(body(error)) }
                     case .Pending:

        case .Rejected(let error):
            return Promise<U>(error: error);
        case .Fulfilled(let value):
            return dispatch_promise(to:q){ d in d.fulfiller(body(value as T)) }
        case .Pending:
            return Promise<U>{ (fulfiller, rejecter) in
                self.handlers.append {

    public func catch(onQueue:dispatch_queue_t = dispatch_get_main_queue(), body:(NSError) -> T) -> Promise<T> {
        switch state {
        case .Fulfilled(let value):
            return Promise(value:value())
        case .Rejected(let error):
            return dispatch_promise(to:onQueue){ (fulfiller, _) -> Void in fulfiller(body(error)) }
        case .Pending:
