     //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

        if isContainsOnlyAtomaryValues(json) { return nil }
        if let jsonDictionary = json as? [String: AnyObject] {
            for (key, childNode) in jsonDictionary {
                if key == arrayKey {
                    if let arrayValue = childNode as? [AnyObject], isValid(array: arrayValue, for: valuesType) {
                        return arrayValue as AnyObject?
                    }
                } else {
                    if let foundedValue = findRecursively(arrayKey: arrayKey, valuesType: valuesType, json: childNode) {
                        return foundedValue

        }
        return nil
    }
    internal class func check(json: AnyObject, for type: JsonNodeType) throws {
        switch type {
        case .array:
            if !(json is Array<AnyObject>) {
                throw MapperError.wrongSetting
            }
            break
        case .dictionary:
            if !(json is [String: AnyObject]) {
                throw MapperError.wrongSetting
            }
            break
        }
    }
    internal class func map(initialObject: Mapable, json: AnyObject) throws {
        var paths = initialObject.helpingPath
        let initialPath = paths.removeFirst()
        switch initialPath {
        case let .target(nodeType):
            try check(json: json, for: nodeType)
            break
        default:
            throw MapperError.wrongSetting
        }
        var processingJson: AnyObject = json as AnyObject
        for atomaryPath in initialObject.helpingPath {
            switch atomaryPath {
            case let .target(nodeType), let .destination(nodeType):
