 public enum ModelError: ErrorType {
     case SourceValueError(property: String)
     case ValueTypeError(property: String?)
-    case DateError(property: String?)
+    case DateError(property: String?, value: String?)
+    case URLError(property: String?, value: String?)
     case InstanciationError
     case InvalidProperty(property: String)
     case UndefinedType(type: Any.Type)

                    if let date = AbstractModel.dateFromString(value) {
                        try assignValue(date, forProperty: property)
                    } else if shouldFailWithInvalidValue(value, forProperty: property) {
                        throw ModelError.DateError(property: property)
                    }
                } else if shouldFailWithInvalidValue(rawValue, forProperty: property) {
                    throw ModelError.SourceValueError(property: property)

                        try assignValue(number, forProperty: property)
                    } else if shouldFailWithInvalidValue(number, forProperty: property) {
                        throw ModelError.SourceValueError(property: property)
                    }
                } else if shouldFailWithInvalidValue(rawValue, forProperty: property) {
                    throw ModelError.SourceValueError(property: property)
                }
            }
                
//          MARK: - NSURL
            else if propertyType is NSURL?.Type || propertyType is NSURL.Type {
                if let value = rawValue as? String {
                    if let url = NSURL(string: value) {
                        try assignValue(url, forProperty: property)
                    } else {
                        throw ModelError.URLError(property: property, value: value)
                    }
                } else if shouldFailWithInvalidValue(rawValue, forProperty: property) {
                    throw ModelError.SourceValueError(property: property)
