 
 public class Cloner {
 
+	private static var _isClassPreparedForCloningMap:Dictionary = new Dictionary();
+
 	private static function isTypeCloneable(type:Type):Boolean {
 		return type.hasMetadata(MetadataName.CLONEABLE);
+	}
+
+	private static function isTypePreparedForCloning(type:Type):Boolean {
+		return _isClassPreparedForCloningMap[type.clazz];
 	}
 
 	private static function failIfTypeIsNotCloneable(type:Type):void {

			type = Type.forInstance(source);
		}

		const fieldsToClone:Vector.<Field> = findAllWritableFieldsForType(type);
		const clonedInstance:* = new (type.clazz)();

		for each(var field:Field in fieldsToClone) {
			PropertyUtil.cloneProperty(source, clonedInstance, field.name);
		}

		return clonedInstance;
	}

import dolly.core.dolly_internal;
import dolly.core.errors.CloningError;
import dolly.core.metadata.MetadataName;
import dolly.utils.ClassUtil;
import dolly.utils.PropertyUtil;

import flash.utils.ByteArray;

import flash.utils.Dictionary;

