 			for each(var metadataContainer:IMetadataContainer in metadataContainers) {
 				if (metadataContainer is Variable) {
 					variable = metadataContainer as Variable;
-					if (!foundFieldsMap[variable.name]
+					if (!foundFields[variable.name]
 							&& !variable.isStatic
 							&& variable.hasMetadata(MetadataName.COPYABLE)) {
-						foundFieldsMap[variable.name] = variable;
+						foundFields[variable.name] = variable;
 						result.push(variable);
 					}
 				} else if (metadataContainer is Accessor) {
 					accessor = metadataContainer as Accessor;
-					if (!foundFieldsMap[accessor.name]
+					if (!foundFields[accessor.name]
 							&& !accessor.isStatic
 							&& accessor.access == AccessorAccess.READ_WRITE
 							&& accessor.hasMetadata(MetadataName.COPYABLE)) {
-						foundFieldsMap[accessor.name] = accessor;
+						foundFields[accessor.name] = accessor;
 						result.push(accessor);
 					}
 				}


public class Copier {

	private static function getCopyableFieldsOfType(type:Type, foundFieldsMap:Dictionary):Vector.<Field> {
		const result:Vector.<Field> = new Vector.<Field>();

		var variable:Variable;

		const isTypeCloneable:Boolean = type.hasMetadata(MetadataName.COPYABLE);
		if (isTypeCloneable) {
			for each(variable in type.variables) {
				if (!foundFields[variable.name] && !variable.isStatic) {
					foundFields[variable.name] = variable;
					result.push(variable);
				}
			}
			for each(accessor in type.accessors) {
				if (!foundFields[accessor.name]
						&& !accessor.isStatic
						&& accessor.access == AccessorAccess.READ_WRITE) {
					foundFields[accessor.name] = accessor;
					result.push(accessor);
				}
			}
