 
 public class Cloner {
 
+	private static function isVariableCloneable(variable:Variable, skipMetadataChecking:Boolean = true):Boolean {
+		return !variable.isStatic && (skipMetadataChecking || variable.hasMetadata(MetadataName.CLONEABLE));
+	}
+
 	dolly_internal static function getCloneableFields(source:*):Array {
 		const result:Array = [];
 

			for each(var metadataContainer:IMetadataContainer in metadataContainers) {
				if (metadataContainer is Variable) {
					variable = metadataContainer as Variable;
					if (!variable.isStatic && variable.hasMetadata(MetadataName.CLONEABLE)) {
						result.push(variable);
					}
				} else if (metadataContainer is Accessor) {


		if (isClassCloneable) {
			for each(variable in type.variables) {
				if (isVariableCloneable(variable)) {
					result.push(variable);
				}
			}
