This commit was manufactured by cvs2svn to create tag 'R2_0_1'.
diff --git a/features/org.eclipse.wst.common_core.feature.patch/.project b/features/org.eclipse.wst.common_core.feature.patch/.project
deleted file mode 100644
index eb1e1ea..0000000
--- a/features/org.eclipse.wst.common_core.feature.patch/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.wst.common_core.feature.patch</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.FeatureBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.FeatureNature</nature>
-	</natures>
-</projectDescription>
diff --git a/features/org.eclipse.wst.common_core.feature.patch/description.txt b/features/org.eclipse.wst.common_core.feature.patch/description.txt
deleted file mode 100644
index a1fc6d0..0000000
--- a/features/org.eclipse.wst.common_core.feature.patch/description.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-The HEAD branch of this patch feature is intentionally empty, 
-to attempt to try and avoid confusion. 
-
-Please load the correct version from the branch of the related patch.
diff --git a/features/org.eclipse.wst.common_core.feature/feature.xml b/features/org.eclipse.wst.common_core.feature/feature.xml
index bb82902..08fcc85 100644
--- a/features/org.eclipse.wst.common_core.feature/feature.xml
+++ b/features/org.eclipse.wst.common_core.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.wst.common_core.feature"
       label="%featureName"
-      version="2.0.0.qualifier"
+      version="2.0.1.qualifier"
       provider-name="%providerName">
 
    <description>
diff --git a/features/org.eclipse.wst.common_core.feature/sourceTemplateFeature/feature.xml b/features/org.eclipse.wst.common_core.feature/sourceTemplateFeature/feature.xml
index 3b2bb00..b26057f 100644
--- a/features/org.eclipse.wst.common_core.feature/sourceTemplateFeature/feature.xml
+++ b/features/org.eclipse.wst.common_core.feature/sourceTemplateFeature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.wst.common_core.feature.source"
       label="%featureName"
-      version="2.0.0.qualifier"
+      version="2.0.1.qualifier"
       provider-name="%providerName">
 
    <description>
diff --git a/features/org.eclipse.wst.common_sdk.feature/feature.xml b/features/org.eclipse.wst.common_sdk.feature/feature.xml
index 60f1b87..b4623d3 100644
--- a/features/org.eclipse.wst.common_sdk.feature/feature.xml
+++ b/features/org.eclipse.wst.common_sdk.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.wst.common_sdk.feature"
       label="%featureName"
-      version="2.0.0.qualifier"
+      version="2.0.1.qualifier"
       provider-name="%providerName">
 
    <description>
@@ -24,7 +24,7 @@
    <includes
          id="org.eclipse.wst.common_ui.feature"
          version="0.0.0"/>
-         
+
    <includes
          id="org.eclipse.wst.common_ui.feature.source"
          version="0.0.0"/>
diff --git a/features/org.eclipse.wst.common_ui.feature/feature.xml b/features/org.eclipse.wst.common_ui.feature/feature.xml
index 035bcc8..74111e4 100644
--- a/features/org.eclipse.wst.common_ui.feature/feature.xml
+++ b/features/org.eclipse.wst.common_ui.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.wst.common_ui.feature"
       label="%featureName"
-      version="2.0.0.qualifier"
+      version="2.0.1.qualifier"
       provider-name="%providerName">
 
    <description>
diff --git a/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/feature.xml b/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/feature.xml
index 8778f4c..9801d5b 100644
--- a/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/feature.xml
+++ b/features/org.eclipse.wst.common_ui.feature/sourceTemplateFeature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.wst.common_ui.feature.source"
       label="%featureName"
-      version="2.0.0.qualifier"
+      version="2.0.1.qualifier"
       provider-name="%providerName">
 
    <description>
diff --git a/plugins/org.eclipse.jem.util/.classpath b/plugins/org.eclipse.jem.util/.classpath
index 25434f7..a988941 100644
--- a/plugins/org.eclipse.jem.util/.classpath
+++ b/plugins/org.eclipse.jem.util/.classpath
@@ -3,7 +3,7 @@
 	<classpathentry kind="src" path="jemutil"/>
 	<classpathentry kind="src" path="property_files"/>
 	<classpathentry kind="src" path="jemutil-nonworkbnech"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/plugins/org.eclipse.jem.util/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.jem.util/.settings/org.eclipse.jdt.core.prefs
index d223546..cb579cc 100644
--- a/plugins/org.eclipse.jem.util/.settings/org.eclipse.jdt.core.prefs
+++ b/plugins/org.eclipse.jem.util/.settings/org.eclipse.jdt.core.prefs
@@ -1,15 +1,15 @@
-#Sat Mar 31 22:57:30 EDT 2007
+#Tue Jul 31 20:39:48 EDT 2007
 eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
-org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
 org.eclipse.jdt.core.compiler.problem.deprecation=warning
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
 org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
 org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
 org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
@@ -45,7 +45,7 @@
 org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.3
+org.eclipse.jdt.core.compiler.source=1.5
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
diff --git a/plugins/org.eclipse.jem.util/META-INF/MANIFEST.MF b/plugins/org.eclipse.jem.util/META-INF/MANIFEST.MF
index 61e0bf5..7585a3c 100644
--- a/plugins/org.eclipse.jem.util/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.jem.util/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jem.util; singleton:=true
-Bundle-Version: 2.0.0.qualifier
+Bundle-Version: 2.0.1.qualifier
 Bundle-Activator: org.eclipse.jem.util.plugin.JEMUtilPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -23,4 +23,4 @@
  org.eclipse.perfmsr.core;bundle-version="1.0.0";resolution:=optional,
  com.ibm.icu;bundle-version="[3.4.4.1,4.0.0)"
 Eclipse-LazyStart: true
-Bundle-RequiredExecutionEnvironment: J2SE-1.4
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/internal/util/emf/workbench/ProjectResourceSetImpl.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/internal/util/emf/workbench/ProjectResourceSetImpl.java
index 36c8f4d..1b3967a 100644
--- a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/internal/util/emf/workbench/ProjectResourceSetImpl.java
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/internal/util/emf/workbench/ProjectResourceSetImpl.java
@@ -10,19 +10,23 @@
  *******************************************************************************/
 /*
  *  $$RCSfile: ProjectResourceSetImpl.java,v $$
- *  $$Revision: 1.8 $$  $$Date: 2005/03/18 18:52:06 $$ 
+ *  $$Revision: 1.11 $$  $$Date: 2007/08/30 02:37:05 $$ 
  */
 package org.eclipse.jem.internal.util.emf.workbench;
 
 import java.io.IOException;
 import java.util.*;
 
-import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.*;
+import org.eclipse.core.runtime.*;
+import org.eclipse.core.runtime.content.IContentDescription;
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.impl.NotificationImpl;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.URIConverter;
+import org.eclipse.emf.ecore.resource.Resource.Factory;
 import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
 import org.eclipse.emf.ecore.resource.impl.URIConverterImpl;
 import org.eclipse.emf.ecore.xmi.XMLResource;
@@ -32,7 +36,14 @@
 import org.eclipse.jem.util.logger.proxy.Logger;
 import org.eclipse.jem.util.plugin.JEMUtilPlugin;
 
-public class ProjectResourceSetImpl extends ResourceSetImpl implements ProjectResourceSet {
+public class ProjectResourceSetImpl extends ResourceSetImpl implements FlexibleProjectResourceSet {
+	public static interface ModuleURI {
+		public static final int SUB_PROTOCOL_INDX = 0;
+		public static final int PROJECT_NAME_INDX = 1;
+		public static final int MODULE_NAME_INDX = 2;
+		public static final int CONTENT_TYPE_INDX = 3;
+	}
+
 	private boolean isReleasing = false;
 	private IProject project;
 	protected List resourceHandlers = new ArrayList();
@@ -65,17 +76,66 @@
 		if (isReleasing) return null;
 		//Check the map first when creating the resource and do not
 		//normalize if a value is found.
-		boolean isMapped = !(((URIConverterImpl.URIMap)getURIConverter().getURIMap()).getURI(uri).equals(uri));
+		 URIConverter theURIConverter = getURIConverter();
+		 URI normURI = theURIConverter.normalize(uri);
+		boolean isMapped = !(((URIConverterImpl.URIMap)getURIConverter().getURIMap()).getURI(uri).equals(normURI));
 		URI converted = uri;
 		if (!isMapped)
 			converted = getURIConverter().normalize(uri);
 		Resource result = createResourceFromHandlers(converted);
-		if (result == null)
-			result = super.createResource(converted);
+		if (result == null) {
+		    Resource.Factory resourceFactory = getResourceFactoryRegistry().getFactory(uri);
+		    if (resourceFactory != null)
+		    {//We got the right factory, now use the right URI
+		      result = resourceFactory.createResource(converted);
+		      getResources().add(result);
+		    }
+		}
+			
 		
 		return result;
 	}
 	/**
+	 * Return the IFile for the <code>uri</code> within the Workspace. This URI is assumed to be
+	 * absolute in the following format: platform:/resource/....
+	 */
+	private IFile getPlatformFile(URI uri) {
+		if (WorkbenchResourceHelperBase.isPlatformResourceURI(uri)) {
+			String fileString = URI.decode(uri.path());
+			fileString = fileString.substring(JEMUtilPlugin.PLATFORM_RESOURCE.length() + 1);
+			return ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(fileString));
+		}
+		return null;
+	}
+	public Resource createResource(URI uri, Resource.Factory resourceFactory) {
+		if (isReleasing) return null;
+		//Check the map first when creating the resource and do not
+		//normalize if a value is found.
+		URIConverter theURIConverter = getURIConverter();
+		 URI normURI = theURIConverter.normalize(uri);
+		boolean isMapped = !(((URIConverterImpl.URIMap)getURIConverter().getURIMap()).getURI(uri).equals(normURI));
+		URI converted = uri;
+		if (!isMapped)
+			converted = getURIConverter().normalize(uri);
+		Resource result = createResourceFromHandlers(converted);
+		if (result == null) {
+
+		    if (resourceFactory != null)
+		    {
+		      result = resourceFactory.createResource(converted);
+		      getResources().add(result);
+		      getURIResourceMap().put(uri, result);
+		      return result;
+		    }
+		    else
+		    {
+		      return null;
+		    }
+		  
+		}
+		return result;
+	}
+	/**
 	 * @see org.eclipse.emf.ecore.resource.impl.ResourceSetImpl#demandLoad(Resource)
 	 */
 	protected void demandLoad(Resource resource) throws IOException {
@@ -259,7 +319,206 @@
 	 */
 	public Resource getResource(URI uri, boolean loadOnDemand) {
 		if (isReleasing) return null;
-		return super.getResource(uri, loadOnDemand);
+
+	    Map<URI, Resource> map = getURIResourceMap();
+	    if (map != null)
+	    {
+	      Resource resource = map.get(uri);
+	      if (resource != null)
+	      {
+	        if (loadOnDemand && !resource.isLoaded())
+	        {
+	          demandLoadHelper(resource);
+	        }        
+	        return resource;
+	      }
+	    }
+	    
+	    URIConverter theURIConverter = getURIConverter();
+	    URI normalizedURI = theURIConverter.normalize(uri);
+	    for (Resource resource : getResources())
+	    {
+	      if (theURIConverter.normalize(resource.getURI()).equals(normalizedURI)) {
+	    		  
+	    	if (getContentTypeName(uri) == null) { // loading from legacy archive api or non-typed resource
+		        if (loadOnDemand && !resource.isLoaded())
+		        {
+		          demandLoadHelper(resource);
+		        }
+		        
+		        if (map != null)
+		        {
+		          map.put(uri, resource);
+		        } 
+		        return resource;
+	    	} else  {// content type is known
+	    		if((!map.containsValue(resource) || ((map.get(uri) != null) && map.get(uri).equals(resource))) // existing resource  with alternate mapping doesn't exist in map
+	    			|| getContentTypeName(findKey(resource)) == null || ((getContentTypeName(resource) != null && getContentTypeName(resource).equals(getContentTypeName(uri))))) {
+	    		if (loadOnDemand && !resource.isLoaded())
+		        {
+		          demandLoadHelper(resource);
+		        }
+		        
+		        if (map != null && (map.get(uri) == null))
+		        {
+		          map.put(uri, resource);
+		        } 
+		        return resource;
+	    		}
+	    	} //return null;  // Returning null because We can't handle multiple resources based on the same DOM model
+	      }
+	    }
+	    
+	    Resource delegatedResource = delegatedGetResource(uri, loadOnDemand);
+	    if (delegatedResource != null)
+	    {
+	      if (map != null)
+	      {
+	        map.put(uri, delegatedResource);
+	      }
+	      return delegatedResource;
+	    }
+
+	    if (loadOnDemand)
+	    {
+	      Resource resource = demandCreateResource(uri);
+	      if (resource == null)
+	      {
+	        throw new RuntimeException("Cannot create a resource for '" + uri + "'; a registered resource factory is needed");
+	      }
+
+	      demandLoadHelper(resource);
+
+	      if (map != null)
+	      {
+	        map.put(uri, resource);
+	      }      
+	      return resource;
+	    }
+
+	    return null;
+	  
+	}
+	private IFile getPlatformFile(Resource res) {
+		IFile file = null;
+		file = getPlatformFile(res.getURI());
+		if (file == null) {
+			if (res.getResourceSet() != null) {
+				URIConverter converter = res.getResourceSet().getURIConverter();
+				URI convertedUri = converter.normalize(res.getURI());
+				if (!res.getURI().equals(convertedUri))
+					file = getPlatformFile(convertedUri);
+			}
+		}
+		return file;
+	}
+	
+	private String getContentTypeName(Resource resource) {
+		IFile file = getPlatformFile(resource);
+		IContentDescription desc = null;
+		try {
+			desc = file.getContentDescription();
+		} catch (CoreException e) {
+		}
+		if (desc != null && desc.getContentType() != null)
+			return desc.getContentType().getName();
+		return null;
+	}
+	private URI findKey(Resource resource) {
+		Map aMap = getURIResourceMap();
+		Set keys = aMap.keySet();
+		for (Iterator iterator = keys.iterator(); iterator.hasNext();) {
+			URI name = (URI) iterator.next();
+			if (aMap.get(name).equals(resource))
+				return name;
+		}
+		return null;
+	}
+	protected static String getContentTypeName(URI uri) {
+		
+		if (WorkbenchResourceHelperBase.isPlatformResourceURI(uri) || !isValidFullyQualifiedModuleURI(uri))
+			return null;
+		String contentTypeIdentifier = (uri.segmentCount() > 3 ? uri.segment(ModuleURI.CONTENT_TYPE_INDX) : null);
+		if (contentTypeIdentifier != null && Platform.getContentTypeManager().getContentType(uri.segment(ModuleURI.CONTENT_TYPE_INDX)) != null)
+			return contentTypeIdentifier;
+		else
+			return null;
+	}
+	public static boolean isValidFullyQualifiedModuleURI(URI aModuleURI) {
+		if (aModuleURI.segmentCount() < 3) {
+			return false;
+		}
+		return true;
+	}
+	/*
+	 * Javadoc copied from interface.
+	 */
+	public Resource getResource(URI uri, boolean loadOnDemand, Resource.Factory resourceFactory) {
+		if (isReleasing) return null;
+		
+
+	    Map<URI, Resource> map = getURIResourceMap();
+	    if (map != null)
+	    {
+	      Resource resource = map.get(uri);
+	      if (resource != null)
+	      {
+	        if (loadOnDemand && !resource.isLoaded())
+	        {
+	          demandLoadHelper(resource);
+	        }        
+	        return resource;
+	      }
+	    }
+	    
+	    URIConverter theURIConverter = getURIConverter();
+	    URI normalizedURI = theURIConverter.normalize(uri);
+	    for (Resource resource : getResources())
+	    {
+	      if (theURIConverter.normalize(resource.getURI()).equals(normalizedURI))
+	      {
+	        if (loadOnDemand && !resource.isLoaded())
+	        {
+	          demandLoadHelper(resource);
+	        }
+	        
+	        if (map != null)
+	        {
+	          map.put(uri, resource);
+	        } 
+	        return resource;
+	      }
+	    }
+	    
+	    Resource delegatedResource = delegatedGetResource(uri, loadOnDemand);
+	    if (delegatedResource != null)
+	    {
+	      if (map != null)
+	      {
+	        map.put(uri, delegatedResource);
+	      }
+	      return delegatedResource;
+	    }
+
+	    if (loadOnDemand)
+	    {
+	      Resource resource = demandCreateResource(uri,resourceFactory);
+	      if (resource == null)
+	      {
+	        throw new RuntimeException("Cannot create a resource for '" + uri + "'; a registered resource factory is needed");
+	      }
+
+	      demandLoadHelper(resource);
+
+	      if (map != null)
+	      {
+	        map.put(uri, resource);
+	      }      
+	      return resource;
+	    }
+
+	    return null;
+	  
 	}
 
 	
@@ -270,5 +529,10 @@
 		if (getURIResourceMap() != null)
 			getURIResourceMap().clear();
 	}
+	
+	protected Resource demandCreateResource(URI uri, Factory resourceFactory) {
+		// TODO Auto-generated method stub
+		return createResource(uri,resourceFactory);
+	}
 
 }
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/FlexibleProjectResourceSet.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/FlexibleProjectResourceSet.java
new file mode 100644
index 0000000..1e231f0
--- /dev/null
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/FlexibleProjectResourceSet.java
@@ -0,0 +1,68 @@
+package org.eclipse.jem.util.emf.workbench;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.Resource.Factory;
+
+
+public interface FlexibleProjectResourceSet extends ProjectResourceSet {
+	
+	
+	/**
+	   * Returns the resource resolved by the URI.
+	   * <p>
+	   * A resource set is expected to implement the following strategy 
+	   * in order to resolve the given URI to a resource.
+	   * First it uses it's {@link #getURIConverter URI converter} to {@link URIConverter#normalize normalize} the URI 
+	   * and then to compare it with the normalized URI of each resource;
+	   * if it finds a match, 
+	   * that resource becomes the result.
+	   * Failing that,
+	   * it {@link org.eclipse.emf.ecore.resource.impl.ResourceSetImpl#delegatedGetResource delegates} 
+	   * to allow the URI to be resolved elsewhere.
+	   * For example, 
+	   * the {@link org.eclipse.emf.ecore.EPackage.Registry#INSTANCE package registry}
+	   * is used to {@link org.eclipse.emf.ecore.EPackage.Registry#getEPackage resolve} 
+	   * the {@link org.eclipse.emf.ecore.EPackage namespace URI} of a package
+	   * to the static instance of that package.
+	   * So the important point is that an arbitrary implementation may resolve the URI to any resource,
+	   * not necessarily to one contained by this particular resource set.
+	   * If the delegation step fails to provide a result,
+	   * and if <code>loadOnDemand</code> is <code>true</code>,
+	   * a resource is {@link org.eclipse.emf.ecore.resource.impl.ResourceSetImpl#demandCreateResource created} 
+	   * and that resource becomes the result.
+	   * If <code>loadOnDemand</code> is <code>true</code>
+	   * and the result resource is not {@link Resource#isLoaded loaded}, 
+	   * it will be {@link org.eclipse.emf.ecore.resource.impl.ResourceSetImpl#demandLoad loaded} before it is returned.
+	   * </p>
+	   * @param uri the URI to resolve.
+	   * @param loadOnDemand whether to create and load the resource, if it doesn't already exists.
+	   * @param registeredFactory that is used to create resource if needed 
+	   * @return the resource resolved by the URI, or <code>null</code> if there isn't one and it's not being demand loaded.
+	   * @throws RuntimeException if a resource can't be demand created.
+	   * @throws org.eclipse.emf.common.util.WrappedException if a problem occurs during demand load.
+	   * @since 2.1
+	   */
+	
+	Resource getResource(URI uri, boolean loadOnDemand, Factory registeredFactory);
+	
+	/**
+	   * Creates a new resource, of the appropriate type, and returns it.
+	   * <p>
+	   * It delegates to the resource factory {@link #getResourceFactoryRegistry registry} 
+	   * to determine the {@link Resource.Factory.Registry#getFactory correct} factory,
+	   * and then it uses that factory to {@link Resource.Factory#createResource create} the resource
+	   * and add it to the {@link #getResources contents}.
+	   * If there is no registered factory, <code>null</code> will be returned;
+	   * when running within Eclipse,
+	   * a default XMI factory will be registered,
+	   * and this will never return <code>null</code>.
+	   * </p>
+	   * @param uri the URI of the resource to create.
+	   * @param resourceFactory 
+	   * @return a new resource, or <code>null</code> if no factory is registered.
+	   */
+	
+	public Resource createResource(URI uri, Resource.Factory resourceFactory);
+
+}
diff --git a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/ProjectResourceSet.java b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/ProjectResourceSet.java
index 68c9735..2c97699 100644
--- a/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/ProjectResourceSet.java
+++ b/plugins/org.eclipse.jem.util/jemutil/org/eclipse/jem/util/emf/workbench/ProjectResourceSet.java
@@ -10,7 +10,7 @@
  *******************************************************************************/
 /*
  *  $$RCSfile: ProjectResourceSet.java,v $$
- *  $$Revision: 1.3 $$  $$Date: 2005/02/15 23:04:14 $$ 
+ *  $$Revision: 1.5 $$  $$Date: 2007/08/30 02:37:05 $$ 
  */
 package org.eclipse.jem.util.emf.workbench;
 
@@ -114,4 +114,6 @@
 	 * @since 1.0.0
 	 */
 	void resetNormalizedURICache();
+
+
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.emf/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.common.emf/META-INF/MANIFEST.MF
index f6b17a3..39a9ac9 100644
--- a/plugins/org.eclipse.wst.common.emf/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.common.emf/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.wst.common.emf; singleton:=true
-Bundle-Version: 1.1.103.qualifier
+Bundle-Version: 1.1.104.qualifier
 Bundle-Activator: org.eclipse.wst.common.internal.emf.plugin.EcoreUtilitiesPlugin
 Bundle-Vendor: %pluginProvider
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.java
index 969617e..dabe6e0 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2DOMAdapterImpl.java
@@ -445,9 +445,11 @@
 		}
 
 		// Remove any remaining adapters.
-		for (; i < mofChildren.size(); i++) {
-			removeMOFValue((EObject) mofChildren.get(i), map);
-		}
+		//make a copy so we remove all items - bug 192468 
+				Object[] childrenArray = mofChildren.toArray();
+				for (; i < childrenArray.length; i++) {
+					removeMOFValue((EObject) childrenArray[i], map);
+		 		}
 
 		// The adapters cannot be updated as they created. We must wait until
 		// all of the adapters are created and removed before updating,
@@ -1148,6 +1150,7 @@
 		try {
 			return map.convertStringToValue(trimmedValue, emfObject);
 		} catch (FeatureValueConversionException ex) {
+			org.eclipse.jem.util.logger.proxy.Logger.getLogger().logError(ex);
 			handleFeatureValueConversionException(ex);
 			return null;
 		}
@@ -1711,12 +1714,25 @@
 		map.clearList(mofObject);
 
 		// Go through the list of nodes and update the MOF collection
+		int addIndex = 0;
 		for (int i = 0; i < nodeChildren.size(); i++) {
 			Node child = (Node) nodeChildren.get(i);
 			Object attributeValue = extractValue(child, map, mofObject);
-			if (attributeValue != null)
-				map.setMOFValue(mofObject, attributeValue, i);
-
+			boolean advanceAddIndex = true;
+			if (attributeValue != null){
+				if(map.getFeature() != null && map.getFeature().isUnique() && mofObject.eGet(map.getFeature()) != null && mofObject.eGet(map.getFeature()) instanceof List && ((List) mofObject.eGet(map.getFeature())).contains(attributeValue)){
+					advanceAddIndex = false;
+					String domName = map.domNameAndPath != null ? map.domNameAndPath : "attribute"; //$NON-NLS-1$
+					org.eclipse.jem.util.logger.proxy.Logger.getLogger().logError(new IllegalArgumentException("The 'no duplicates' constraint is violated by "+domName+" = "+attributeValue));
+					handleInvalidMultiNodes(child.getNodeName());
+				} else {
+					map.setMOFValue(mofObject, attributeValue, addIndex);
+				}
+				if(advanceAddIndex){
+					addIndex ++;
+				}
+			}
+			
 			// Adapt the node so update will occur.
 			addDOMAdapter(child);
 		}
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2SAXWriter.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2SAXWriter.java
index c5d0807..6955734 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2SAXWriter.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/EMF2SAXWriter.java
@@ -175,7 +175,7 @@
 	 * @return
 	 */
 	private boolean shouldRenderDomPath(EObject target, Translator currentChildTranslator, List mofChildren) {
-		return !currentChildTranslator.isEmptyContentSignificant() || (currentChildTranslator.shouldRenderEmptyDOMPath(target) || mofChildren.size() > 0);
+		return  (currentChildTranslator.shouldRenderEmptyDOMPath(target) || mofChildren.size() > 0);
 	}
 
 	/**
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/MultiObjectTranslator.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/MultiObjectTranslator.java
index abfcc83..91ed5bc 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/MultiObjectTranslator.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/MultiObjectTranslator.java
@@ -16,6 +16,7 @@
 
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EStructuralFeature;
+import org.w3c.dom.Node;
 
 /**
  * @author schacher
@@ -78,6 +79,15 @@
 		return false;
 	}
 
-
+	public boolean shouldIndentEndTag(Node node) {
+		if (node.getNodeName().equals(getDOMPath())) {
+			return super.shouldIndentEndTag(node);
+		}
+		Translator delegate = getDelegateFor(node.getNodeName(), null);
+		if (delegate != null) {
+			return delegate.shouldIndentEndTag(node);
+		}
+		return super.shouldIndentEndTag(node);
+	}
 
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/Translator.java b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/Translator.java
index 5682b9a..ab28074 100644
--- a/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/Translator.java
+++ b/plugins/org.eclipse.wst.common.emf/wtpemf/org/eclipse/wst/common/internal/emf/resource/Translator.java
@@ -28,6 +28,7 @@
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.wst.common.internal.emf.utilities.ExtendedEcoreUtil;
 import org.eclipse.wst.common.internal.emf.utilities.FeatureValueConverter;
+import org.w3c.dom.Node;
 
 
 public class Translator {
@@ -270,6 +271,10 @@
 		return (fStyle & END_TAG_NO_INDENT) == 0;
 	}
 
+	public boolean shouldIndentEndTag(Node node) {
+		return shouldIndentEndTag();
+	}
+
 	public boolean isEmptyContentSignificant() {
 		return ((fStyle & EMPTY_TAG) != 0) || ((fStyle & EMPTY_CONTENT_IS_SIGNIFICANT) != 0);
 	}
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.common.emfworkbench.integration/META-INF/MANIFEST.MF
index 38bfebe..3f82f9c 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.wst.common.emfworkbench.integration; singleton:=true
-Bundle-Version: 1.1.103.qualifier
+Bundle-Version: 1.1.104.qualifier
 Bundle-Activator: org.eclipse.wst.common.internal.emfworkbench.integration.EMFWorkbenchEditPlugin
 Bundle-Vendor: %pluginVendor
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EditModelRegistry.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EditModelRegistry.java
index daae2f7..38d4099 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EditModelRegistry.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EditModelRegistry.java
@@ -304,7 +304,7 @@
 			return this.factory;
 		}
 
-		private void initializeResources() {
+		private synchronized void initializeResources() {
 
 			if (editModelResources == null) {
 				if (configurationElement != null) {
@@ -328,6 +328,7 @@
 					discardConfigurationElementIfNecessary();
 				} else {
 					editModelResources = Collections.EMPTY_LIST;
+					editModelExtensions = Collections.EMPTY_LIST;
 				}
 			}
 		}
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.common.frameworks.ui/META-INF/MANIFEST.MF
index 5f0f6d9..dd05c9b 100644
--- a/plugins/org.eclipse.wst.common.frameworks.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.common.frameworks.ui/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.wst.common.frameworks.ui; singleton:=true
-Bundle-Version: 1.1.100.qualifier
+Bundle-Version: 1.1.101.qualifier
 Bundle-Activator: org.eclipse.wst.common.frameworks.internal.ui.WTPUIPlugin
 Bundle-Localization: plugin
 Export-Package: org.eclipse.wst.common.frameworks.internal.datamodel.ui;x-internal:=true,
diff --git a/plugins/org.eclipse.wst.common.frameworks.ui/property_files/wtpcommonui.properties b/plugins/org.eclipse.wst.common.frameworks.ui/property_files/wtpcommonui.properties
index d304fef..dc661b8 100644
--- a/plugins/org.eclipse.wst.common.frameworks.ui/property_files/wtpcommonui.properties
+++ b/plugins/org.eclipse.wst.common.frameworks.ui/property_files/wtpcommonui.properties
@@ -27,7 +27,7 @@
 ExtendableWizard_UI_0=Wizard page failed to be created in {0} {1}
 WizardPageExtensionManager_UI_0=Element: {0} does not allow page insertion after.
 WizardPageExtensionManager_UI_1={0} will not be created
-WizardPageExtensionManager_UI_2=Circular dependancy, element: {0} check: {1}
+WizardPageExtensionManager_UI_2=Circular dependency, element: {0} check: {1}
 WizardPageExtensionManager_UI_3=Editor does not allow page insertions
 WizardPageExtensionManager_UI_4=Parent Class Not Found Error: {0} \r\n for attribute: {1} in plugin {2} \r\nPage not created
 Delete_UI_0=Delete
diff --git a/plugins/org.eclipse.wst.common.modulecore/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.common.modulecore/META-INF/MANIFEST.MF
index 7a14735..622bd4c 100644
--- a/plugins/org.eclipse.wst.common.modulecore/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.common.modulecore/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: %Bundle-Name.0
 Bundle-Vendor: %provider
 Bundle-SymbolicName: org.eclipse.wst.common.modulecore; singleton:=true
-Bundle-Version: 1.1.102.qualifier
+Bundle-Version: 1.1.103.qualifier
 Bundle-Activator: org.eclipse.wst.common.componentcore.internal.ModulecorePlugin
 Bundle-Localization: plugin
 Export-Package: org.eclipse.wst.common.componentcore,
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/ArtifactEdit.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/ArtifactEdit.java
index 5a13db8..a6745fd 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/ArtifactEdit.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/ArtifactEdit.java
@@ -17,6 +17,7 @@
 import java.util.logging.Logger;
 
 import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
@@ -31,11 +32,15 @@
 import org.eclipse.wst.common.componentcore.internal.ArtifactEditModel;
 import org.eclipse.wst.common.componentcore.internal.BinaryComponentHelper;
 import org.eclipse.wst.common.componentcore.internal.impl.ModuleURIUtil;
+import org.eclipse.wst.common.componentcore.internal.util.IModuleConstants;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
 import org.eclipse.wst.common.frameworks.internal.operations.IOperationHandler;
 import org.eclipse.wst.common.internal.emfworkbench.integration.EditModel;
 import org.eclipse.wst.common.internal.emfworkbench.integration.EditModelListener;
 import org.eclipse.wst.common.internal.emfworkbench.validateedit.IValidateEditContext;
+import org.eclipse.wst.common.project.facet.core.IFacetedProject;
+import org.eclipse.wst.common.project.facet.core.IProjectFacet;
+import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager;
 
 /**
  * Provides a Facade pattern for accessing Module Content Metamodels for Web Tools Platform flexible
@@ -361,9 +366,9 @@
 			throw new IllegalArgumentException("Invalid component handle: " + aProject);
 		if (!forCreate && !isValidEditableModule(component))
 			throw new IllegalArgumentException("Invalid component handle: " + aProject);
-		
+		project = aProject;
 		URI componentURI = null;
-		if (forCreate)
+		if (getContentTypeDescriber() != null)
 			componentURI = ModuleURIUtil.fullyQualifyURI(aProject,getContentTypeDescriber());
 		else
 			componentURI = ModuleURIUtil.fullyQualifyURI(aProject);
@@ -374,17 +379,35 @@
 			artifactEditModel = nature.getArtifactEditModelForWrite(componentURI, this, projectType, editModelParams);
 		isReadOnly = toAccessAsReadOnly;
 		isArtifactEditModelSelfManaged = true;
-		
-		project = aProject;
 	}
-
-
+	
+	public boolean isProjectOfType(IProject project, String typeID) {
+		IFacetedProject facetedProject = null;
+		try {
+			facetedProject = ProjectFacetsManager.create(project);
+		} catch (CoreException e) {
+			return false;
+		}
+		if (facetedProject != null && ProjectFacetsManager.isProjectFacetDefined(typeID)) {
+			IProjectFacet projectFacet = ProjectFacetsManager.getProjectFacet(typeID);
+			return projectFacet != null && facetedProject.hasProjectFacet(projectFacet);
+		}
+		return false;
+	}
 	/**
 	 * Used to optionally define an associated content type for XML file creation
 	 * @return
 	 */
 	protected String getContentTypeDescriber() {
 		
+		if (isProjectOfType(project, IModuleConstants.JST_EJB_MODULE))
+			return "org.eclipse.jst.j2ee.ejbDD";
+		if (isProjectOfType(project, IModuleConstants.JST_WEB_MODULE))
+			return "org.eclipse.jst.j2ee.webDD";
+		if (isProjectOfType(project, IModuleConstants.JST_EAR_MODULE))
+			return "org.eclipse.jst.j2ee.earDD";
+		if (isProjectOfType(project, IModuleConstants.JST_APPCLIENT_MODULE))
+			return "org.eclipse.jst.j2ee.appclientDD";
 		return null;
 	}
 
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleCoreValidator.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleCoreValidator.java
index 8c4c23c..7a212d0 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleCoreValidator.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleCoreValidator.java
@@ -15,14 +15,12 @@
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.jobs.ISchedulingRule;
-import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.emf.ecore.xmi.XMIResource;
 import org.eclipse.wst.common.componentcore.ModuleCoreNature;
 import org.eclipse.wst.common.componentcore.internal.impl.WTPModulesResource;
 import org.eclipse.wst.common.internal.emf.resource.TranslatorResource;
-import org.eclipse.wst.common.internal.emfworkbench.WorkbenchResourceHelper;
 import org.eclipse.wst.common.project.facet.core.internal.FacetedProjectNature;
 import org.eclipse.wst.validation.internal.core.Message;
 import org.eclipse.wst.validation.internal.core.ValidationException;
@@ -41,24 +39,23 @@
 		}
 		
 		public Resource getPrimaryResource(IProject project) {
-			// Overriden to handle loading the .component resource in new and old forms
-			// First will try to load from .settings/org.eclipse.wst.common.component
-			// Second will try to load from the old location(s) .settings/.component or .component
-
-			URI uri = URI.createURI(StructureEdit.MODULE_META_FILE_NAME);
-			WTPModulesResource res = (WTPModulesResource)WorkbenchResourceHelper.getOrCreateResource(uri, getResourceSet(project));
-			if (res == null || !res.isLoaded()) {
-				uri = URI.createURI(".settings/.component");
-				res = (WTPModulesResource)WorkbenchResourceHelper.getOrCreateResource(uri, getResourceSet(project));
-				if (res == null || !res.isLoaded()) {
-					uri = URI.createURI(".wtpmodules");
-					res = (WTPModulesResource)WorkbenchResourceHelper.getOrCreateResource(uri, getResourceSet(project));
-					if (res == null || !res.isLoaded()) {
-						res = null;
+			// see https://bugs.eclipse.org/bugs/show_bug.cgi?id=181334; Changing this method to call ModuleStructuralModel.getPrimaryResource() method instead.
+			// This does two things:
+			// 1. Reorders the locks to prevent deadlock between locking the resource (Bugzilla 181334),
+			//	  then the edit model and
+			// 2. Reuses code. (The code between this method and MSM.getPrimaryResource() is identical.
+			StructureEdit structureEdit = StructureEdit.getStructureEditForRead(project);
+			if (structureEdit != null) {
+				ModuleStructuralModel structuralModel = structureEdit.getModuleStructuralModel();
+				if (structuralModel != null) {
+					// acquiring the ModuleStructuralModel lock here first because the call to getPrimaryResource()
+					// will cause this lock to be acquired later resulting in a potential deadlock
+					synchronized (structuralModel) {
+						return structuralModel.getPrimaryResource();
 					}
 				}
 			}
-			return res;
+			return null;
 		}
 
 		private ResourceSet getResourceSet(IProject proj) {
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleMigratorManager.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleMigratorManager.java
index f71542f..88a9078 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleMigratorManager.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/ModuleMigratorManager.java
@@ -38,7 +38,6 @@
 	private static HashMap managerCache = new HashMap();
 	private static HashSet migrated = new HashSet();
 	private boolean migrating;
-	private HashSet moved = new HashSet();
 	public ModuleMigratorManager() {
 		super();
 	}
@@ -74,9 +73,8 @@
 				try {
 					if (aProj.isAccessible() && ModuleCoreNature.isFlexibleProject(aProj)) {
 						if (aProj.findMember(".wtpmodules") != null) {
-							if (!moved.contains(aProj))
-								moveOldMetaDataFile(aProj);
-						} else moved.add(aProj);
+							moveOldMetaDataFile(aProj);
+						}
 						if (needsComponentMigration(aProj,multiComps))
 							migrateComponentsIfNecessary(aProj,multiComps);
 					}
@@ -119,13 +117,11 @@
 	private void moveOldMetaDataFile(IProject project) {
 
 		try {
-				if (!moved.contains(project))
-					moveMetaDataFile(project);
+				moveMetaDataFile(project);
 				IFolder depFolder = project.getFolder(".deployables");
 				if (depFolder.exists())
 					depFolder.delete(true, null);
 				project.refreshLocal(IResource.DEPTH_INFINITE, null);
-				moved.add(project);
 
 		} catch (Exception e) {
 		}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/DependencyGraphManager.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/DependencyGraphManager.java
index 95fd9d3..3d95164 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/DependencyGraphManager.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/builder/DependencyGraphManager.java
@@ -266,4 +266,8 @@
 	private void setModStamp(long modStamp) {
 		this.modStamp = modStamp;
 	}
+
+	public boolean checkIfStillValid(long timeStamp) {
+		return (getModStamp() == timeStamp && !metadataChanged());
+	}
 }
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ModuleURIUtil.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ModuleURIUtil.java
index 9b9d748..170c513 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ModuleURIUtil.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/ModuleURIUtil.java
@@ -95,7 +95,8 @@
 
 	public static URI trimModuleResourcePathToModuleURI(URI aModuleResourcePath) throws UnresolveableURIException {
 		ensureValidFullyQualifiedModuleURI(aModuleResourcePath);
-		return aModuleResourcePath.trimSegments(aModuleResourcePath.segmentCount() - 3);
+		int trimIndex = (hasContentTypeName(aModuleResourcePath) ? 4 : 3);
+		return aModuleResourcePath.trimSegments(aModuleResourcePath.segmentCount() - trimIndex);
 	}
 
 	public static URI trimWorkspacePathToProjectRelativeURI(URI aFullyQualifiedResourceURI) throws UnresolveableURIException {
@@ -140,7 +141,7 @@
 		URI uri;
 		int trimIndex = (hasContentTypeName(aFullyQualifiedModuleResourcePath) ? 5 : 4);
 		if(segmentCount > trimIndex){
-			uri = aFullyQualifiedModuleResourcePath.deresolve(aFullyQualifiedModuleResourcePath.trimSegments(segmentCount - trimIndex));
+			uri = aFullyQualifiedModuleResourcePath.deresolve(aFullyQualifiedModuleResourcePath.trimSegments(segmentCount - trimIndex), false,false,true);
 		} else {
 			uri = URI.createURI(aFullyQualifiedModuleResourcePath.segment(segmentCount-1));
 		}
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/PlatformURLModuleConnection.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/PlatformURLModuleConnection.java
index efd0ec8..511efc4 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/PlatformURLModuleConnection.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/impl/PlatformURLModuleConnection.java
@@ -63,6 +63,9 @@
 			IVirtualComponent component = ComponentCore.createComponent(componentProject);
 			//IVirtualFile vFile = component.getFile(runtimePath);
 			IVirtualFolder rootFolder = component.getRootFolder();
+			int matchingSegs = runtimePath.matchingFirstSegments(rootFolder.getProjectRelativePath());
+			if(matchingSegs > 0)
+				runtimePath = runtimePath.removeFirstSegments(matchingSegs);
 			IVirtualFile vFile = rootFolder.getFile(runtimePath);
 			return URI.createPlatformResourceURI(vFile.getWorkspaceRelativePath().toString());
 		} catch (UnresolveableURIException e) {
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualComponent.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualComponent.java
index 32fa690..6c66c10 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualComponent.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/resources/VirtualComponent.java
@@ -20,6 +20,7 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.wst.common.componentcore.ComponentCore;
@@ -27,6 +28,7 @@
 import org.eclipse.wst.common.componentcore.internal.ComponentcoreFactory;
 import org.eclipse.wst.common.componentcore.internal.ComponentcorePackage;
 import org.eclipse.wst.common.componentcore.internal.DependencyType;
+import org.eclipse.wst.common.componentcore.internal.ModulecorePlugin;
 import org.eclipse.wst.common.componentcore.internal.Property;
 import org.eclipse.wst.common.componentcore.internal.ReferencedComponent;
 import org.eclipse.wst.common.componentcore.internal.StructureEdit;
@@ -105,7 +107,15 @@
             List propList = component.getProperties();
             if(propList != null) {
                 for (int i = 0; i < propList.size(); i++) {
-                    props.setProperty(((Property)propList.get(i)).getName(), ((Property)propList.get(i)).getValue());
+                	Property property = (Property)propList.get(i);
+                	String name = property.getName();
+                	String value = property.getValue();
+                	if(value == null){
+                		value = ""; //$NON-NLS-1$
+                		String message = "WARNING:  The component file in "+getProject().getName()+" has no value defined for the property: "+name;  //$NON-NLS-1$//$NON-NLS-2$
+                		ModulecorePlugin.getDefault().logError(IStatus.ERROR, message, null);
+                	}
+                    props.setProperty(name, value);
                 }
             }
             return props; 
@@ -312,7 +322,9 @@
 				referencedComponent.setArchiveName(references[i].getArchiveName());
 			}
 			//clean up any old obsolete references
-			cleanUpReferences(component);	
+			if (component != null){
+				cleanUpReferences(component);
+			}
 		} finally {
 			if(core != null) {
 				core.saveIfNecessary(null);
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentUtilities.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentUtilities.java
index 4ac8ca3..e9bd7ca 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentUtilities.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentUtilities.java
@@ -114,8 +114,12 @@
 			return null;
 		IVirtualFolder root = comp.getRootFolder();
 		IVirtualResource file = root.findMember(aPath);
-		if (file != null)
-			return (IFile) file.getUnderlyingResource();
+		if (file != null && file.getType() == IVirtualResource.FILE){
+			IResource resource = file.getUnderlyingResource();
+			if(resource.getType() == IResource.FILE){
+				return (IFile) resource;
+			}
+		}
 		return null;
 	}
 
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/HRefTranslator.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/HRefTranslator.java
index 135cb60..2bc48f6 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/HRefTranslator.java
+++ b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/HRefTranslator.java
@@ -20,6 +20,7 @@
 import org.eclipse.wst.common.componentcore.internal.StructureEdit;
 import org.eclipse.wst.common.componentcore.internal.WorkbenchComponent;
 import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
+import org.eclipse.wst.common.internal.emf.resource.CompatibilityXMIResource;
 import org.eclipse.wst.common.internal.emf.resource.Translator;
 import org.eclipse.wst.common.internal.emf.resource.TranslatorPath;
 
@@ -65,13 +66,23 @@
 	 *      org.eclipse.emf.ecore.EObject)
 	 */
 	public Object convertStringToValue(String aValue, EObject anOwner) { 
-		WorkbenchComponent earComp = (WorkbenchComponent)anOwner.eContainer();
-		IVirtualComponent virtualComp = ComponentCore.createComponent(StructureEdit.getContainingProject(earComp));
-		ArtifactEdit edit = (ArtifactEdit)virtualComp.getAdapter(ArtifactEdit.class);
-		if (edit == null) return null;
-		if( edit.getContentModelRoot() == null ) return null;
-		Resource res = edit.getContentModelRoot().eResource();
-		return res.getEObject(aValue);
+		Resource res = null;
+		try {
+			WorkbenchComponent earComp = (WorkbenchComponent)anOwner.eContainer();
+			IVirtualComponent virtualComp = ComponentCore.createComponent(StructureEdit.getContainingProject(earComp));
+			ArtifactEdit edit = (ArtifactEdit)virtualComp.getAdapter(ArtifactEdit.class);
+			if (edit == null) return null;
+			if( edit.getContentModelRoot() == null ) return null;
+			res = edit.getContentModelRoot().eResource();
+			if (res != null)
+				return res.getEObject(aValue);
+			return null;
+		} finally {
+//			if ((res != null) && res.getResourceSet() != null) {
+//				res.getResourceSet().getResources().remove(res);
+//				res.unload();
+//			}
+		}
 	}
 
 	/*
@@ -82,8 +93,14 @@
 	 */
 	public String convertValueToString(Object aValue, EObject anOwner) { 
 		String frag = null;
-		if (((EObject)aValue).eResource() != null)
-			frag = ((EObject)aValue).eResource().getURIFragment((EObject)aValue);
+		Resource theResource = ((EObject)aValue).eResource();
+		if (theResource != null)
+		{
+			if (theResource instanceof CompatibilityXMIResource)
+				frag = theResource.getURIFragment((EObject)aValue);
+			else
+				frag = null;
+		}
 		else
 			frag = EcoreUtil.getID((EObject)aValue);
 		return frag;
diff --git a/plugins/org.eclipse.wst.validation/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.validation/META-INF/MANIFEST.MF
index c831934..66d1e4c 100644
--- a/plugins/org.eclipse.wst.validation/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.validation/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name.0
 Bundle-SymbolicName: org.eclipse.wst.validation; singleton:=true
-Bundle-Version: 1.1.101.qualifier
+Bundle-Version: 1.1.102.qualifier
 Bundle-Activator: org.eclipse.wst.validation.internal.plugin.ValidationPlugin
 Bundle-Vendor: %Bundle-Vendor.0
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/TaskListUtility.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/TaskListUtility.java
index 1a5bb63..05f096b 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/TaskListUtility.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/TaskListUtility.java
@@ -59,7 +59,7 @@
 	 * This method adds a message to a resource in the task list.
 	 */
 	public static IMarker addTask(String pluginId, IResource resource, String location, String messageId, String message, int markerType, String markerName, String targetObjectName, String groupName, int offset, int length) throws CoreException {
-		if ((message == null) || (resource == null)) {
+		if ((message == null) || (resource == null) || (!resource.exists())) {
 			return null;
 		}
 
@@ -142,7 +142,7 @@
 	 * This method adds a message to a resource in the task list.
 	 */
 	public static IMarker addTask(String pluginId, IResource resource, String location, String messageId, String message, int markerType, String targetObjectName, String groupName, int offset, int length) throws CoreException {
-		if ((message == null) || (resource == null)) {
+		if ((message == null) || (resource == null) || (!resource.exists())) {
 			return null;
 		}
 
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidationRegistryReader.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidationRegistryReader.java
index 6c80f15..971a6b1 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidationRegistryReader.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidationRegistryReader.java
@@ -520,7 +520,7 @@
 	/* package */static IValidator createValidator(IConfigurationElement element, String validatorClassName) {
 		IValidator validator = null;
 		try {
-			validator = (IValidator) element.createExecutableExtension(TAG_RUN_CLASS);
+			validator = (IValidator) element.createExecutableExtension(ATT_CLASS);
 		} catch (Exception exc) {
 			Logger logger = ValidationPlugin.getPlugin().getMsgLogger();
 			if (logger.isLoggingLevel(Level.SEVERE)) {
@@ -1391,7 +1391,7 @@
 		vmd.setEnabledByDefault(getEnabledByDefault(element));
 		vmd.setMigrationMetaData(getMigrationMetaData(element, vmd));
 		vmd.setHelperClass(element, helperImplName);
-		vmd.setValidatorClass(element); // associate the above attributes with the validator
+		vmd.setValidatorClass(runChildren[0]); // associate the above attributes with the validator
 		vmd.addDependentValidator(getDependentValidatorValue(element));
 		vmd.setContentTypeIds(getContentTypeBindings(element));
 		initializeValidatorCustomMarkers(element, pluginId, vmd);
diff --git a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidatorMetaData.java b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidatorMetaData.java
index 4b3ed7c..bbd636c 100644
--- a/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidatorMetaData.java
+++ b/plugins/org.eclipse.wst.validation/validate/org/eclipse/wst/validation/internal/ValidatorMetaData.java
@@ -346,7 +346,7 @@
 		if (getContentTypeIds() != null) {
 			IContentDescription description = null;
 			try {
-				if (resource.getType() == IResource.FILE)
+				if (resource.getType() == IResource.FILE && resource.exists())
 					description = ((IFile) resource).getContentDescription();
 			} catch (CoreException e) {
 				//Resource exceptions