    - Parameter name: The array of path, can be index or key
    - Returns: A child dictionary for that path, otherwise it returns nil
    */
-  func path(path: [SubscriptKind]) -> JSONDictionary?
+  func resolve(keyPath path: [SubscriptKind]) -> JSONDictionary?
 
   /**
    - Parameter name: The key path, separated by dot
    - Returns: A child dictionary for that path, otherwise it returns nil
    */
-  func path(keyPath: String) -> JSONDictionary?
+  func resolve(keyPath path: String) -> JSONDictionary?
 }
 
 public extension PathAccessible {
 
-  private func resolve<T>(path: [SubscriptKind]) -> T? {
+  private func internalResolve<T>(path: [SubscriptKind]) -> T? {
     var castedPath = path.dropFirst()
     castedPath.append(.Key(""))
 

    return (key: lastSplit,
            keyPath: Array(path.split(".").dropLast()).joinWithSeparator("."))
  }

  func path(path: [SubscriptKind]) -> JSONDictionary? {
    return resolve(path)
  }

  func path(keyPath: String) -> JSONDictionary? {
    return resolve(keyPath)
  }

  func path(keyPath: String) -> String? {
    guard let (key, keyPath) = extractKey(keyPath) else { return nil }
    let result: JSONDictionary? = resolve(keyPath)
    return result?.property(key)
  }

  func path(keyPath: String) -> Int? {
    guard let (key, keyPath) = extractKey(keyPath) else { return nil }
    let result: JSONDictionary? = resolve(keyPath)
    return result?.property(key)
  }

  func path(keyPath: String) -> JSONArray? {
    guard let (key, keyPath) = extractKey(keyPath) else { return nil }
    let result: JSONDictionary? = resolve(keyPath)
    return result?.array(key)
  }
}

    return result as? T
  }

  private func internalResolve<T>(path: String) -> T? {
    if !path.contains(".") {
      if let index = Int(path) {
