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


public class Copier {

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

		var variable:Variable;


import dolly.core.dolly_internal;
import dolly.core.metadata.MetadataName;

import flash.utils.Dictionary;

import org.as3commons.reflect.Accessor;
import org.as3commons.reflect.AccessorAccess;
