     //Search for a single property
     internal class func findRecursively(propertyKey: String, mappingType: MappingType, json: AnyObject) -> AnyObject? {
         //Base of recursion
-        if isContainsOnlyAtomaryValues(json) {
+        if isContainsOnlyAtomaryValues(json), let jsonDictionary = json as? [String: AnyObject]{
             //At this point we are reached last level of JSON tree
-            if let jsonDictionary = json as? [String: AnyObject] {
-                for (key, childJson) in jsonDictionary {
-                    if key == propertyKey, isValid(property: childJson, for: mappingType) {
-                        return childJson
-                    }
+            for (key, childJson) in jsonDictionary {
+                if key == propertyKey, isValid(property: childJson, for: mappingType) {
+                    return childJson
                 }
             }
             return nil

    }
    //Search for a dictionary
    internal class func findRecursively(dictionaryKey: String, json: AnyObject) -> AnyObject? {
        if isContainsOnlyAtomaryValues(json) {
            return nil
        }
        if let jsonDictionary = json as? [String: AnyObject] {
            for (key, childNode) in jsonDictionary {
                if key == dictionaryKey {
                    if let dictionaryValue = childNode as? [String: AnyObject] {
                        return dictionaryValue as AnyObject?
                    }
                } else {
                    if let foundedValue = findRecursively(dictionaryKey: dictionaryKey, json: childNode) {
                        return foundedValue

    
    //Search for an object
    internal class func findRecursively(objectKey: String, type: Mapable.Type, json: AnyObject) -> Mapable? {
        if isContainsOnlyAtomaryValues(json) { return nil }
        if let jsonDictionary = json as? [String: AnyObject] {
            for (key, childNode) in jsonDictionary {
                if key == objectKey, let dictionaryValue = childNode as? [String: AnyObject] {
                    do {
                        let object = type.init()
                        try bind(dictionary: dictionaryValue, to: object)
                        return object
                    } catch {
                        if let foundValue = findRecursively(objectKey: objectKey, type: type, json: childNode) {
                            return foundValue
                        }
                    }
                }
