                 } catch {}
             }
         }
-        
         throw MapperError.notFound
+    }
+    internal static func fall(through json: AnyObject, nextNode: JsonNodeType) throws -> AnyObject? {
+        switch nextNode {
+        case let .array(key, index):
+            if index == nil, key == nil { throw MapperError.wrongSetting }
+            if let key = key {
+                if let dictionaryNode = json as? [String: AnyObject], let arrayNode = dictionaryNode[key] as? [AnyObject] {
+                    return arrayNode as AnyObject
+                } else {
+                    throw MapperError.wrongSetting
+                }
+            }
+            if let index = index {
+                if let arrayNode = json as? [AnyObject], arrayNode.count > index, let desctinationNode = arrayNode[index] as? [AnyObject] {
+                    return desctinationNode as AnyObject
+                } else {
+                    throw MapperError.wrongSetting
+                }
+            }
+            break
+        case let .dictionary(key, index):
+            if index == nil, key == nil { throw MapperError.wrongSetting }
+            if let key = key {
+                if let dictionaryNode = json as? [String: AnyObject], let dictNode = dictionaryNode[key] as? [String: AnyObject] {
+                    return dictNode as AnyObject
+                } else {
+                    throw MapperError.wrongSetting
+                }
+            }
+            if let index = index {
+                if let arrayNode = json as? [AnyObject], arrayNode.count > index, let desctinationNode = arrayNode[index] as? [String: AnyObject] {
+                    return desctinationNode as AnyObject
+                } else {
+                    throw MapperError.wrongSetting
+                }
+            }
+            break
+        }
+        return nil
     }
     internal class func map(initialObject: Mapable, json: AnyObject) throws {
         var paths = initialObject.helpingPath

    }
    //Search for an array
    internal class func findRecursively(arrayKey: String, valuesType: MappingType, json: AnyObject) -> AnyObject? {
        if isContainsOnlyAtomaryValues(json) {
            return nil
        }
        if let jsonDictionary = json as? [String: AnyObject] {
            for (key, childNode) in jsonDictionary {
                if key == arrayKey {

        guard let jsonNode = json as? [String: AnyObject] else {
            throw MapperError.wrongFormat
        }
        var processingJson: AnyObject = jsonNode as AnyObject
        for atomaryPath in initialObject.helpingPath {
            switch atomaryPath {
            case let .target(nodeType), let .destination(nodeType):
                guard let nextNode = try fall(through: processingJson, nextNode: nodeType) else {
                    throw MapperError.wrongSetting
                }
                processingJson = nextNode
                break
            case .none:
                throw MapperError.wrongSetting
