 // initialization of Value instances
 extension Value {
     
-    public init? (_ val:AnyObject) {
+    public init (_ val:JSONArray, restrictTypeChanges:Bool = true, anyValueIsNullable: Bool = true) {
+        self = .JSONArrayType(val)
+    }
+    
+    public init (_ val:JSONDictionary, restrictTypeChanges:Bool = true, anyValueIsNullable: Bool = true) {
+        self = .JSONDictionaryType(val)
+    }
+    
+    
+    
+    public init? (_ val:AnyObject, restrictTypeChanges:Bool = true, anyValueIsNullable: Bool = true) {
         if let v = val as? String {
             self = .StringType(v)
         }
-            
         else if let v = val as? NSNumber {
             self = .NumberType(v)
         }

            self = .NullType(v)
        }
            
        else if let v = val as? Dictionary<String,AnyObject> {
            self = Value.JSONDictionaryType(JSONDictionary(dict: v))
        }
        else if let v = val as? [AnyObject] {
            self = Value.JSONArrayType(JSONArray(array: v))
        }
        else {
            return nil

    }
    public var null:NSNull? {
        switch self {
        case .NullType(let nullType):
            return nullType
        default:
            return nil
        }
