module.resourceChangeListeners = null;
	public Object doClone( CopyPolicy policy )			throws CloneNotSupportedException	{		Module module = (Module) super.doClone( policy );		// clear some attributes		module.activityStack = new ActivityStack( );		module.allExceptions = null;		module.attributeListeners = null;		module.disposeListeners = null;		module.elementIDCounter = 1;		module.fatalException = null;		module.idMap = new HashMap( );		module.moduleNameSpaces = new IModuleNameScope[NAME_SPACE_COUNT];		module.nameSpaces = new NameSpace[NAME_SPACE_COUNT];		module.nameManager = new NameManager( module );		module.referencableProperties = null;		module.saveState = 0;		module.systemId = null;		module.translations = (TranslationTable) translations.clone( );		module.validationExecutor = new ValidationExecutor( module );		module.validationListeners = null;		assert module.getID( ) > NO_ID;		assert module.getElementByID( module.getID( ) ) == null;		module.addElementID( module );		// clone module name space and name space		for ( int i = 0; i < NAME_SPACE_COUNT; i++ )		{			module.nameSpaces[i] = new NameSpace( );			module.moduleNameSpaces[i] = ModuleNameScopeFactory					.createElementNameSpace( module, i );		}		// clone theme property		if ( theme != null )			module.theme = new ElementRefValue( theme.getLibraryNamespace( ),					theme.getName( ) );		else			module.theme = null;		// clone libraries		if ( libraries != null )		{			for ( int i = 0; i < libraries.size( ); i++ )			{				module.libraries = new ArrayList( );				Library lib = (Library) ( (Library) libraries.get( i ) )						.doClone( policy );				lib.setHost( module );				module.libraries.add( lib );			}		}		else			module.libraries = null;		// build name space and id map		IElementDefn defn = module.getDefn( );		for ( int i = 0; i < defn.getSlotCount( ); i++ )		{			ContainerSlot slot = module.getSlot( i );			if ( slot == null )				continue;			for ( int pos = 0; pos < slot.getCount( ); pos++ )			{				DesignElement innerElement = slot.getContent( pos );				buildNameSpaceAndIDMap( module, innerElement );			}		}		// call semantic check		module.semanticCheck( module );		return module;	}