     
     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?
+    func dataTask(configureUrlRequest configureUrlRequest : ConfigureUrlRequestHandler?, completionHandler : DataTaskCompletionHandler) -> NSURLSessionDataTask?
+    func jsonTask(configureUrlRequest : ConfigureUrlRequestHandler?, completionHandler : JsonTaskCompletionHandler) -> NSURLSessionDataTask?
 }
 
 public extension Route {


internal let SubclassShouldOverrideUrl : NSURL? = NSURL(string: "subclassShouldOverride://asdf")

public protocol Route {
    static var baseUrl : NSURL? { get }
    

            }
            urlRequest.setValue("application/json", forHTTPHeaderField: "Accept") // TODO: should this go before or after the calls closer to the client?
            
            }, completionHandler: { (result, urlResponse) -> Void in
                
                switch result {
                case .Success(let data):
                    
                    do
                    {
                        let jsonObject = try NSJSONSerialization.JSONObjectWithData(data, options: [])
                        completionHandler(result: .Success(jsonObject))
                        
                    } catch let error as NSError
                    {
                        completionHandler(result: .Failure(error))
                    }
                    
                    break
                    
                case .Failure(let error):
                    completionHandler(result: .Failure(error))
                    break
                }
        })
    }
