             }
             urlRequest.setValue("application/json", forHTTPHeaderField: "Accept") // TODO: should this go before or after the calls closer to the client?
             
-            }, completionHandler: { (data, urlResponse, error) -> Void in
-                if data != nil
-                {
+            }, completionHandler: { (result, urlResponse) -> Void in
+                
+                switch result {
+                case .Success(let data):
+                    
                     do
                     {
-                        if let jsonObject: AnyObject = try NSJSONSerialization.JSONObjectWithData(data!, options: [])
-                        {
-                            completionHandler(jsonObject: jsonObject, error: nil)
-                        } else if let errorString = NSString(data: data!, encoding: NSUTF8StringEncoding) as? String
-                        {
-                            completionHandler(jsonObject: nil, error: NSError(domain: errorString, code: 0, userInfo: nil) )
-                        } else
-                        {
-                            completionHandler(jsonObject: nil, error: NSError(domain: "Unknown error from request", code: 0, userInfo: nil) )
-                        }
+                        let jsonObject = try NSJSONSerialization.JSONObjectWithData(data, options: [])
+                        completionHandler(result: .Success(jsonObject))
+                        
                     } catch let error as NSError
                     {
-                        completionHandler(jsonObject: nil, error: error)
+                        completionHandler(result: .Failure(error))
                     }
-                } else
-                {
-                    completionHandler(jsonObject: nil, error: error)
+                    
+                    break
+                    
+                case .Failure(let error):
+                    completionHandler(result: .Failure(error))
+                    break
                 }
         })
     }

    
    func buildUrl() -> NSURL?
    
    func dataTask(configureUrlRequest configureUrlRequest : ( (urlRequest : NSMutableURLRequest) -> Void)?, completionHandler : (data : NSData?, urlResponse : NSURLResponse?, error : NSError?) -> Void ) -> NSURLSessionDataTask?
    func jsonTask(configureUrlRequest : ( (urlRequest : NSMutableURLRequest) -> Void)?, completionHandler : (jsonObject : AnyObject?, error : NSError?) -> Void) -> NSURLSessionDataTask?
}

public extension Route {

        return NSURL(string: combinedPath, relativeToURL: self.dynamicType.baseUrl)
    }
    
    public func dataTask(configureUrlRequest configureUrlRequest : ConfigureUrlRequestHandler? = nil, completionHandler : DataTaskCompletionHandler) -> NSURLSessionDataTask? {
        
        guard let url = self.buildUrl() else {
            // TODO: notify client?
