 				}
 			}
 			for each(accessor in type.accessors) {
-				if (accessor.isReadable() && accessor.isWriteable() && !accessor.isStatic) {
+				if (isAccessorCloneable(accessor)) {
 					result.push(accessor);
 				}
 			}

		return !variable.isStatic && (skipMetadataChecking || variable.hasMetadata(MetadataName.CLONEABLE));
	}

	dolly_internal static function getCloneableFields(source:*):Array {
		const result:Array = [];


		var accessor:Accessor;

		const isClassCloneable:Boolean = type.hasMetadata(MetadataName.CLONEABLE);
		if (isClassCloneable) {
			for each(variable in type.variables) {
				if (isVariableCloneable(variable)) {
