   
   // MARK: JSONDictionary and JSONArray creation
   
-  fileprivate func JSONDictionaryForKey(_ key: Key) throws -> JSONDictionary {
-    guard let jsonDictionary = self[keyPath: key] as? JSONDictionary else {
-      throw DecodingError.mandatoryKeyNotFound(key: key)
+  fileprivate func JSONDictionaryForKey(_ keyPath: Key) throws -> JSONDictionary {
+    guard let jsonDictionary = self[keyPath: keyPath] as? JSONDictionary else {
+      throw DecodingError.mandatoryKeyNotFound(key: keyPath)
     }
     return jsonDictionary
   }
   
-  fileprivate func JSONArrayForKey(_ key: Key) throws -> JSONArray {
-    guard let jsonArray = self[keyPath: key] as? JSONArray else {
-      throw DecodingError.mandatoryKeyNotFound(key: key)
+  fileprivate func JSONArrayForKey(_ keyPath: Key) throws -> JSONArray {
+    guard let jsonArray = self[keyPath: keyPath] as? JSONArray else {
+      throw DecodingError.mandatoryKeyNotFound(key: keyPath)
     }
     return jsonArray
   }

  // MARK: RawRepresentable type
  
  /// Decode a mandatory RawRepresentable
  public func jsonKeyPath<ReturnType : RawRepresentable>(_ key: Key) throws -> ReturnType where ReturnType.RawValue:JSONRawType {
    
    guard let rawValue = self[key] as? ReturnType.RawValue else {
      throw DecodingError.mandatoryKeyNotFound(key: key)
    }
    
    guard let value = ReturnType(rawValue:rawValue) else {

  }
  
  /// Optionally decode an array of RawRepresentable types with a mandatory key
  public func jsonKeyPath<ReturnType : RawRepresentable>(_ keyPath: Key) -> [ReturnType]? where ReturnType.RawValue:JSONRawType {
    
    guard let jsonValues = self[keyPath] as? [ReturnType.RawValue] else {
      return nil
    }
    
