         // test with array literal
         let date = NSDate(timeIntervalSince1970: 2)
         let data = "b".dataUsingEncoding(NSUTF8StringEncoding)!
-        let value = [true, 1, 1.1, 11.1, "b", data, date, ["boolCol": true], [[true], [false]]]
+        let valueCreator = { [true, 1, 1.1, 11.1, "b", data, date, ["boolCol": true], [[true], [false]]] }
+        let value = valueCreator()
         let arrayObject = SwiftObject(object: value)
         verifySwiftObjectWithArrayLiteral(arrayObject, array: value, boolObjectValue: true, boolObjectListValues: [true, false])
 
+        // TODO - test all valid value types for each property type (list and object)
+
         // test with invalid array literals
         assertThrows(SwiftObject(object: [true, 1, 1.1, 11.1, "b", data, date, ["boolCol": true]]), "Missing properties")
-        assertThrows(SwiftObject(object: ["invalid", 1, 1.1, 11.1, "b", data, date, ["boolCol": true], [[true], [false]]]), "Invalid property types")
+
+        let invalidValues = ["invalid", "invalid", "invalid", "invalid", 0x17A71D, "invalid", "invalid", "invalid", "invalid"]
+        let props = arrayObject.objectSchema.properties
+        for propNum in 0..<props.count {
+            var invalidValue = valueCreator()
+            invalidValue[propNum] = invalidValues[propNum]
+            assertThrows(SwiftObject(object: invalidValue), "Invalid property value")
+        }
     }
 
     func testInitWithKVCObject() {
         // test with kvc object
         let objectWithInt = SwiftObject(object: ["intCol": 200])
         let objectWithKVCObject = SwiftObject(object: objectWithInt)
-        var valueDict = SwiftObject.defaultValues()
-        valueDict["intCol"] = 200
+        var valueDict = defaultSwiftObjectValuesWithReplacements(["intCol": 200])
         verifySwiftObjectWithDictionaryLiteral(objectWithKVCObject, dictionary: valueDict, boolObjectValue: false, boolObjectListValues: [])
     }
 
     // MARK: Creation tests
+
     func testCreateWithDefaults() {
         let realm = Realm()
         assertThrows(realm.create(SwiftObject.self), "Must be in write transaction")

            XCTAssertEqual(object.arrayCol[i].boolCol, boolObjectListValues[i])
        }
    }
}

    func testInitWithDictionaryLiteral() {
        // dictionary with all values specified
        let valueCreator =  {
           ["boolCol": true as NSNumber,
            "intCol": 1 as NSNumber,
            "floatCol": 1.1 as NSNumber,
            "doubleCol": 11.1 as NSNumber,
