     public subscript(key: JSONKey<CGFloat>) -> CGFloat {
         return self[key.type].cgFloatValue
     }
-    
+}
+
+extension JSON {
     /// The value as JSON
     public subscript(key: JSONKey<JSON>) -> JSON {
         return self[key.type]
     }
-    
+}
+
+// MARK: - NSURL
+
+extension JSON {
     /// The value as NSURL?
     public subscript(key: JSONKey<NSURL?>) -> NSURL? {
         return self[key.type].nsURL

    }
}

extension JSON {
    /// The value as a string or nil if not present/convertible
    public subscript(key: JSONKey<String?>) -> String? {

    public subscript(key: JSONKey<Bool>) -> Bool {
        return self[key.type].boolValue
    }
}

// MARK: - Integer

extension JSON {
    /// The value as a 64-bit signed integer or nil if not present/convertible
    public subscript(key: JSONKey<Int?>) -> Int? {
        return self[key.type].int
