             return result
         }
     }
-    private(set) lazy var link: (prev: Link?, next: Link?) = self.parseLinks()
-    public var status: Int {
-        return urlResponse.statusCode
-    }
     private let urlResponse: HTTPURLResponse
     private var headers: [AnyHashable: Any] { return urlResponse.allHeaderFields }
 
-    public private(set) lazy var rateLimit: RateLimit = {
+    public private(set) lazy var link: (prev: Link?, next: Link?) = self.prepareLink()
+    public private(set) lazy var status: Int = self.prepareStatus()
+    public private(set) lazy var rateLimit: RateLimit =
         RateLimit(limit: self.headers[intValueForKey: "X-RateLimit-Limit"],
                   remaining: self.headers[intValueForKey: "X-RateLimit-Remaining"],
                   reset: self.headers[intValueForKey: "X-RateLimit-Reset"])
-    }()
 
     public subscript (_ key: AnyHashable) -> Any? {
         return urlResponse.allHeaderFields[key]

            "next": links.first(where: { $0.rel == "next" })?.link]
        return (map["prev"] ?? nil, map["next"] ?? nil)
    }
}

private extension Dictionary where Key == AnyHashable, Value == Any {

        self.urlResponse = urlResponse
    }

    private func prepareLink() -> (prev: Link?, next: Link?) {
        func parse(_ urlAndRel: [String]) -> (rel: String, link: Link)? {
            var urlString = urlAndRel[0]
            let relString = urlAndRel[1]
