 	}
 
 	[Test]
+	public function testCloneClassLevelCloneableSubclass():void {
+		const clone:ClassLevelCloneableSubclass = Cloner.clone(classLevelCloneableSubclass);
+		assertNotNull(clone);
+		assertNotNull(clone.property1);
+		assertEquals(clone.property1, classLevelCloneableSubclass.property1);
+		assertNotNull(clone.property2);
+		assertEquals(clone.property2, classLevelCloneableSubclass.property2);
+		assertNotNull(clone.property3);
+		assertEquals(clone.property3, classLevelCloneableSubclass.property3);
+		assertNotNull(clone.property4);
+		assertEquals(clone.property4, classLevelCloneableSubclass.property4);
+		assertNotNull(clone.property5);
+		assertEquals(clone.property5, classLevelCloneableSubclass.property5);
+		assertNotNull(clone.writableField);
+		assertEquals(clone.writableField, classLevelCloneableSubclass.writableField);
+		assertNotNull(clone.writableField2);
+		assertEquals(clone.writableField2, classLevelCloneableSubclass.writableField2);
+	}
+
+	[Test]
 	public function testCloneClassLevelCopyableCloneable():void {
 		const clone:ClassLevelCopyableCloneable = Cloner.clone(classLevelCopyableCloneable);
 		assertNotNull(clone);

		classLevelCopyableCloneable.writableField = "value 4";
		classLevelCopyableCloneableType = Type.forInstance(classLevelCopyableCloneable);

		propertyLevelCloneable = new PropertyLevelCloneable();
		propertyLevelCloneable.property1 = "value 1";
		propertyLevelCloneable.property2 = "value 2";

	}

	[Test]
	public function testGetCloneableFieldsForTypeClassLevelCloneableSubclass():void {
		const cloneableFields:Vector.<Field> = Cloner.getCloneableFieldsForType(classLevelCloneableSubclassType);
		assertNotNull(cloneableFields);
		assertEquals(7, cloneableFields.length);
	}

	[Test]
	public function testGetCloneableFieldsForTypeClassLevelCopyableCloneable():void {
		const cloneableFields:Vector.<Field> = Cloner.getCloneableFieldsForType(classLevelCopyableCloneableType);
		assertNotNull(cloneableFields);
