         }
         let conn = NSURLConnection(request: request, delegate: self, startImmediately: false)!
         var dict : NSMutableDictionary = NSMutableDictionary()
-        dict.setObject(expiration, forKey: "expiration")
+        if let expiration = expiration {
+            dict.setObject(expiration, forKey: "expiration")
+        }
         dict.setObject(HandlerWrapper(completionHandler), forKey: "handler")
         connectionToInfoMapping[conn] = dict
         conn.start()

    
    func connection(connection: NSURLConnection, willCacheResponse cachedResponse: NSCachedURLResponse) -> NSCachedURLResponse? {
        if let dict = connectionToInfoMapping[connection] as NSMutableDictionary? {
            let expiration = dict["expiration"] as Int
            let response = cachedResponse.response as NSHTTPURLResponse
            var headers = response.allHeaderFields
            headers["Cache-Control"] = "max-age=\(expiration), private"
            headers.removeValueForKey("Expires")
            headers.removeValueForKey("s-maxage")
            let newResponse = NSHTTPURLResponse(URL: response.URL!, statusCode: response.statusCode, HTTPVersion: "HTTP/1.1", headerFields: headers)
            let cached = NSCachedURLResponse(response: newResponse!, data: cachedResponse.data, userInfo: headers, storagePolicy: NSURLCacheStoragePolicy.Allowed)
            return cached
        }
        return nil
    }

    //MARK: - Request Methods
    
    /**
    Make a GET request with forced cache time in seconds. Leave expiration as nil to use the Cache-Control value from the server.
    */
    func get(url: String, expiration: Int?, completionHandler: (NSData!, NSError!) -> Void) {
        let nsurl = NSURL(string: url)!
        let request = NSMutableURLRequest(URL: nsurl)
        request.HTTPMethod = HTTPMethod.GET.rawValue
