diff --git a/plugins/org.eclipse.uml2.uml.resources/.classpath b/plugins/org.eclipse.uml2.uml.resources/.classpath
new file mode 100644
index 0000000..304e861
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.resources/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<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.uml2.uml.resources/.project b/plugins/org.eclipse.uml2.uml.resources/.project
index 2ec79b8..9d89bf7 100644
--- a/plugins/org.eclipse.uml2.uml.resources/.project
+++ b/plugins/org.eclipse.uml2.uml.resources/.project
@@ -6,6 +6,11 @@
 	</projects>
 	<buildSpec>
 		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
 			<name>org.eclipse.pde.ManifestBuilder</name>
 			<arguments>
 			</arguments>
@@ -17,6 +22,7 @@
 		</buildCommand>
 	</buildSpec>
 	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
 		<nature>org.eclipse.pde.PluginNature</nature>
 	</natures>
 </projectDescription>
diff --git a/plugins/org.eclipse.uml2.uml.resources/META-INF/MANIFEST.MF b/plugins/org.eclipse.uml2.uml.resources/META-INF/MANIFEST.MF
index 71cf9f0..0f6da85 100644
--- a/plugins/org.eclipse.uml2.uml.resources/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.uml2.uml.resources/META-INF/MANIFEST.MF
@@ -3,6 +3,16 @@
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.uml2.uml.resources; singleton:=true
 Bundle-Version: 4.0.0.qualifier
+Bundle-ClassPath: .
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
-Require-Bundle: org.eclipse.uml2.uml
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: org.eclipse.uml2.uml.resources,
+ org.eclipse.uml2.uml.resources.util
+Require-Bundle: org.eclipse.uml2.uml,
+ org.eclipse.uml2.uml.profile.l2,
+ org.eclipse.uml2.uml.profile.l3,
+ org.eclipse.core.runtime
+Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
+Bundle-Activator: org.eclipse.uml2.uml.resources.ResourcesPlugin$Implementation
diff --git a/plugins/org.eclipse.uml2.uml.resources/build.properties b/plugins/org.eclipse.uml2.uml.resources/build.properties
index b468cc2..a3ca25d 100644
--- a/plugins/org.eclipse.uml2.uml.resources/build.properties
+++ b/plugins/org.eclipse.uml2.uml.resources/build.properties
@@ -1,4 +1,4 @@
-# Copyright (c) 2005, 2007 IBM Corporation and others.
+# Copyright (c) 2005, 2012 IBM Corporation, CEA, and others.
 # All rights reserved.   This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -6,17 +6,21 @@
 #
 # Contributors: 
 #   IBM - initial API and implementation
+#   Kenn Hussey (CEA) - 364419
 #
-# $Id: build.properties,v 1.7 2007/04/04 02:20:06 khussey Exp $
 
 # NLS_MESSAGEFORMAT_VAR
+source.. = src/
+output.. = bin/
 bin.includes = about.html,\
                plugin.*,\
+               .,\
                icons/,\
                libraries/,\
                metamodels/,\
                profiles/,\
                META-INF/
 src.includes = about.html
+exclude.. = **/doc-files/**
 javacSource = 1.5
 javacTarget = 1.5
diff --git a/plugins/org.eclipse.uml2.uml.resources/src/org/eclipse/uml2/uml/resources/ResourcesPlugin.java b/plugins/org.eclipse.uml2.uml.resources/src/org/eclipse/uml2/uml/resources/ResourcesPlugin.java
new file mode 100644
index 0000000..5f0dc3e
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.resources/src/org/eclipse/uml2/uml/resources/ResourcesPlugin.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2012 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA - initial API and implementation
+ *
+ */
+package org.eclipse.uml2.uml.resources;
+
+import org.eclipse.emf.common.EMFPlugin;
+import org.eclipse.emf.common.util.ResourceLocator;
+
+/**
+ * @since 4.0
+ */
+public class ResourcesPlugin
+		extends EMFPlugin {
+
+	/**
+	 * The singleton instance of the plugin.
+	 */
+	public static final ResourcesPlugin INSTANCE = new ResourcesPlugin();
+
+	/**
+	 * The one instance of this class.
+	 */
+	private static Implementation plugin;
+
+	/**
+	 * Creates the singleton instance.
+	 */
+	private ResourcesPlugin() {
+		super(new ResourceLocator[]{});
+	}
+
+	/**
+	 * Returns the singleton instance of the plugin.
+	 * 
+	 * @return the singleton instance.
+	 */
+	@Override
+	public ResourceLocator getPluginResourceLocator() {
+		return plugin;
+	}
+
+	/**
+	 * The actual implementation of the <b>Plugin</b>.
+	 */
+	public static class Implementation
+			extends EclipsePlugin {
+
+		public Implementation() {
+			super();
+
+			plugin = this;
+		}
+	}
+
+}
diff --git a/plugins/org.eclipse.uml2.uml.resources/src/org/eclipse/uml2/uml/resources/util/ResourcesUtil.java b/plugins/org.eclipse.uml2.uml.resources/src/org/eclipse/uml2/uml/resources/util/ResourcesUtil.java
new file mode 100644
index 0000000..8e40de4
--- /dev/null
+++ b/plugins/org.eclipse.uml2.uml.resources/src/org/eclipse/uml2/uml/resources/util/ResourcesUtil.java
@@ -0,0 +1,198 @@
+/*
+ * Copyright (c) 2012 CEA and others.
+ * All rights reserved.   This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   CEA - initial API and implementation
+ *
+ */
+package org.eclipse.uml2.uml.resources.util;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.resource.ContentHandler;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.URIConverter;
+import org.eclipse.emf.ecore.xmi.impl.RootXMLContentHandlerImpl;
+import org.eclipse.uml2.types.TypesPackage;
+import org.eclipse.uml2.uml.UMLPackage;
+import org.eclipse.uml2.uml.UMLPlugin;
+import org.eclipse.uml2.uml.profile.l2.L2Package;
+import org.eclipse.uml2.uml.profile.l3.L3Package;
+import org.eclipse.uml2.uml.resource.CMOF2UMLResource;
+import org.eclipse.uml2.uml.resource.UML212UMLResource;
+import org.eclipse.uml2.uml.resource.UML22UMLResource;
+import org.eclipse.uml2.uml.resource.UML302UMLResource;
+import org.eclipse.uml2.uml.resource.UMLResource;
+import org.eclipse.uml2.uml.resource.XMI2UMLResource;
+import org.eclipse.uml2.uml.util.UMLUtil;
+
+/**
+ * @since 4.0
+ */
+public class ResourcesUtil
+		extends UMLUtil {
+
+	/**
+	 * Initializes the registries for the specified resource set (or the global
+	 * registries if <code>null</code>) with the registrations needed to work
+	 * with UML2 resources in stand-alone mode (i.e., without Eclipse).
+	 * 
+	 * @param resourceSet
+	 *            The resource set whose registries to initialize, or
+	 *            <code>null</code>.
+	 * @return The resource set (or <code>null</code>).
+	 * 
+	 * @since 4.0
+	 */
+	public static ResourceSet init(ResourceSet resourceSet) {
+		EPackage.Registry packageRegistry = resourceSet == null
+			? EPackage.Registry.INSTANCE
+			: resourceSet.getPackageRegistry();
+
+		packageRegistry.put(EcorePackage.eNS_URI, EcorePackage.eINSTANCE);
+
+		packageRegistry.put(TypesPackage.eNS_URI, TypesPackage.eINSTANCE);
+
+		packageRegistry.put(
+			"http://www.eclipse.org/uml2/2.0.0/UML", UMLPackage.eINSTANCE); //$NON-NLS-1$
+
+		packageRegistry.put(UML212UMLResource.UML_METAMODEL_NS_URI,
+			UMLPackage.eINSTANCE);
+		packageRegistry.put(UML302UMLResource.UML_METAMODEL_NS_URI,
+			UMLPackage.eINSTANCE);
+
+		packageRegistry.put(UMLPackage.eNS_URI, UMLPackage.eINSTANCE);
+
+		packageRegistry.put(UML302UMLResource.STANDARD_PROFILE_NS_URI,
+			L2Package.eINSTANCE);
+
+		packageRegistry.put(L2Package.eNS_URI, L2Package.eINSTANCE);
+		packageRegistry.put(L3Package.eNS_URI, L3Package.eINSTANCE);
+
+		Map<String, URI> ePackageNsURIToProfileLocationMap = UMLPlugin
+			.getEPackageNsURIToProfileLocationMap();
+
+		ePackageNsURIToProfileLocationMap.put(L2Package.eNS_URI,
+			URI.createURI("pathmap://UML_PROFILES/StandardL2.profile.uml#_0")); //$NON-NLS-1$
+		ePackageNsURIToProfileLocationMap.put(L3Package.eNS_URI,
+			URI.createURI("pathmap://UML_PROFILES/StandardL3.profile.uml#_0")); //$NON-NLS-1$
+
+		ePackageNsURIToProfileLocationMap.put(UMLResource.ECORE_PROFILE_NS_URI,
+			URI.createURI("pathmap://UML_PROFILES/Ecore.profile.uml#_0")); //$NON-NLS-1$
+
+		Map<URI, URI> uriMap = resourceSet == null
+			? URIConverter.URI_MAP
+			: resourceSet.getURIConverter().getURIMap();
+
+		uriMap.put(URI.createURI(UMLResource.LIBRARIES_PATHMAP), URI
+			.createPlatformPluginURI(
+				"/org.eclipse.uml2.uml.resources/libraries/", true)); //$NON-NLS-1$
+		uriMap.put(URI.createURI(UMLResource.METAMODELS_PATHMAP), URI
+			.createPlatformPluginURI(
+				"/org.eclipse.uml2.uml.resources/metamodels/", true)); //$NON-NLS-1$
+		uriMap.put(URI.createURI(UMLResource.PROFILES_PATHMAP), URI
+			.createPlatformPluginURI(
+				"/org.eclipse.uml2.uml.resources/profiles/", true)); //$NON-NLS-1$
+
+		List<ContentHandler> contentHandlers;
+
+		if (resourceSet == null) {
+			contentHandlers = ContentHandler.Registry.INSTANCE
+				.get(ContentHandler.Registry.NORMAL_PRIORITY);
+
+			if (contentHandlers == null) {
+				ContentHandler.Registry.INSTANCE.put(
+					ContentHandler.Registry.NORMAL_PRIORITY,
+					contentHandlers = new ArrayList<ContentHandler>());
+			}
+		} else {
+			contentHandlers = resourceSet.getURIConverter()
+				.getContentHandlers();
+		}
+
+		String[] extensions = new String[]{"uml2"}; //$NON-NLS-1$
+
+		contentHandlers.add(new RootXMLContentHandlerImpl(
+			UML22UMLResource.UML2_CONTENT_TYPE_IDENTIFIER, extensions,
+			RootXMLContentHandlerImpl.XMI_KIND,
+			UML22UMLResource.UML2_METAMODEL_NS_URI, null));
+
+		extensions = new String[]{"uml"}; //$NON-NLS-1$
+
+		contentHandlers.add(new RootXMLContentHandlerImpl(
+			UMLResource.UML_2_0_0_CONTENT_TYPE_IDENTIFIER, extensions,
+			RootXMLContentHandlerImpl.XMI_KIND,
+			"http://www.eclipse.org/uml2/2.0.0/UML", null)); //$NON-NLS-1$
+		contentHandlers.add(new RootXMLContentHandlerImpl(
+			UMLResource.UML_2_1_0_CONTENT_TYPE_IDENTIFIER, extensions,
+			RootXMLContentHandlerImpl.XMI_KIND,
+			UML212UMLResource.UML_METAMODEL_NS_URI, null));
+		contentHandlers.add(new RootXMLContentHandlerImpl(
+			UMLResource.UML_3_0_0_CONTENT_TYPE_IDENTIFIER, extensions,
+			RootXMLContentHandlerImpl.XMI_KIND,
+			UML302UMLResource.UML_METAMODEL_NS_URI, null));
+		contentHandlers.add(new RootXMLContentHandlerImpl(
+			UMLResource.UML_4_0_0_CONTENT_TYPE_IDENTIFIER, extensions,
+			RootXMLContentHandlerImpl.XMI_KIND, UMLPackage.eNS_URI, null));
+
+		extensions = new String[]{"xmi"}; //$NON-NLS-1$
+
+		contentHandlers.add(new RootXMLContentHandlerImpl(
+			XMI2UMLResource.UML_2_1_CONTENT_TYPE_IDENTIFIER, extensions,
+			RootXMLContentHandlerImpl.XMI_KIND,
+			XMI2UMLResource.UML_METAMODEL_2_1_NS_URI, null));
+		contentHandlers.add(new RootXMLContentHandlerImpl(
+			XMI2UMLResource.UML_2_1_1_CONTENT_TYPE_IDENTIFIER, extensions,
+			RootXMLContentHandlerImpl.XMI_KIND,
+			XMI2UMLResource.UML_METAMODEL_2_1_1_NS_URI, null));
+		contentHandlers.add(new RootXMLContentHandlerImpl(
+			XMI2UMLResource.UML_2_2_CONTENT_TYPE_IDENTIFIER, extensions,
+			RootXMLContentHandlerImpl.XMI_KIND,
+			XMI2UMLResource.UML_METAMODEL_2_2_NS_URI, null));
+		contentHandlers.add(new RootXMLContentHandlerImpl(
+			XMI2UMLResource.UML_2_4_CONTENT_TYPE_IDENTIFIER, extensions,
+			RootXMLContentHandlerImpl.XMI_KIND,
+			XMI2UMLResource.UML_METAMODEL_2_4_NS_URI, null));
+		contentHandlers.add(new RootXMLContentHandlerImpl(
+			XMI2UMLResource.UML_2_4_1_CONTENT_TYPE_IDENTIFIER, extensions,
+			RootXMLContentHandlerImpl.XMI_KIND,
+			XMI2UMLResource.UML_METAMODEL_2_4_1_NS_URI, null));
+
+		extensions = new String[]{"cmof", "xmi"}; //$NON-NLS-1$
+
+		contentHandlers.add(new RootXMLContentHandlerImpl(
+			CMOF2UMLResource.CMOF_2_0_CONTENT_TYPE_IDENTIFIER, extensions,
+			RootXMLContentHandlerImpl.XMI_KIND,
+			CMOF2UMLResource.CMOF_2_0_METAMODEL_NS_URI, null));
+		contentHandlers.add(new RootXMLContentHandlerImpl(
+			CMOF2UMLResource.CMOF_2_4_CONTENT_TYPE_IDENTIFIER, extensions,
+			RootXMLContentHandlerImpl.XMI_KIND,
+			CMOF2UMLResource.CMOF_2_4_METAMODEL_NS_URI, null));
+		contentHandlers.add(new RootXMLContentHandlerImpl(
+			CMOF2UMLResource.CMOF_2_4_1_CONTENT_TYPE_IDENTIFIER, extensions,
+			RootXMLContentHandlerImpl.XMI_KIND,
+			CMOF2UMLResource.CMOF_2_4_1_METAMODEL_NS_URI, null));
+
+		(resourceSet == null
+			? Resource.Factory.Registry.INSTANCE
+			: resourceSet.getResourceFactoryRegistry())
+			.getContentTypeToFactoryMap().put(
+				UMLResource.UML_4_0_0_CONTENT_TYPE_IDENTIFIER,
+				UMLResource.Factory.INSTANCE);
+
+		UMLUtil.init(resourceSet);
+
+		return resourceSet;
+	}
+
+}
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/CMOF202UMLResourceFactoryImpl.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/CMOF202UMLResourceFactoryImpl.java
index d4225d7..7ce21b9 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/CMOF202UMLResourceFactoryImpl.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/CMOF202UMLResourceFactoryImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2011 IBM Corporation, Embarcadero Technologies, CEA, and others.
+ * Copyright (c) 2007, 2012 IBM Corporation, Embarcadero Technologies, CEA, and others.
  * All rights reserved.   This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,7 +7,7 @@
  *
  * Contributors:
  *   Kenn Hussey (IBM Corporation, Embarcadero Technologies) - initial API and implementation
- *   Kenn Hussey (CEA) - 327039
+ *   Kenn Hussey (CEA) - 327039, 364419
  *
  */
 package org.eclipse.uml2.uml.internal.resource;
@@ -26,6 +26,7 @@
 import org.eclipse.emf.mapping.ecore2xml.Ecore2XMLPackage;
 import org.eclipse.emf.mapping.ecore2xml.Ecore2XMLRegistry;
 import org.eclipse.emf.mapping.ecore2xml.impl.Ecore2XMLRegistryImpl;
+import org.eclipse.emf.mapping.ecore2xml.util.Ecore2XMLResource;
 import org.eclipse.uml2.uml.UMLPackage;
 import org.eclipse.uml2.uml.resource.CMOF202UMLResource;
 import org.eclipse.uml2.uml.resource.CMOF2UMLExtendedMetaData;
@@ -66,6 +67,12 @@
 		ResourceSet resourceSet = new ResourceSetImpl();
 		resourceSet.setPackageRegistry(ePackageRegistry);
 
+		resourceSet
+			.getResourceFactoryRegistry()
+			.getExtensionToFactoryMap()
+			.put(Ecore2XMLResource.FILE_EXTENSION,
+				Ecore2XMLResource.Factory.INSTANCE);
+
 		Ecore2XMLRegistry ecore2xmlRegistry = new Ecore2XMLRegistryImpl(
 			Ecore2XMLRegistry.INSTANCE);
 		ecore2xmlRegistry
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/CMOF2UMLResourceFactoryImpl.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/CMOF2UMLResourceFactoryImpl.java
index a7cfdac..898756f 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/CMOF2UMLResourceFactoryImpl.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/CMOF2UMLResourceFactoryImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2011 IBM Corporation, Embarcadero Technologies, CEA, and others.
+ * Copyright (c) 2007, 2012 IBM Corporation, Embarcadero Technologies, CEA, and others.
  * All rights reserved.   This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,7 +7,7 @@
  *
  * Contributors:
  *   Kenn Hussey (IBM Corporation, Embarcadero Technologies) - initial API and implementation
- *   Kenn Hussey (CEA) - 351774
+ *   Kenn Hussey (CEA) - 351774, 364419
  *
  */
 package org.eclipse.uml2.uml.internal.resource;
@@ -26,6 +26,7 @@
 import org.eclipse.emf.mapping.ecore2xml.Ecore2XMLPackage;
 import org.eclipse.emf.mapping.ecore2xml.Ecore2XMLRegistry;
 import org.eclipse.emf.mapping.ecore2xml.impl.Ecore2XMLRegistryImpl;
+import org.eclipse.emf.mapping.ecore2xml.util.Ecore2XMLResource;
 import org.eclipse.uml2.uml.UMLPackage;
 import org.eclipse.uml2.uml.resource.CMOF2UMLExtendedMetaData;
 import org.eclipse.uml2.uml.resource.CMOF2UMLResource;
@@ -69,6 +70,12 @@
 		ResourceSet resourceSet = new ResourceSetImpl();
 		resourceSet.setPackageRegistry(ePackageRegistry);
 
+		resourceSet
+			.getResourceFactoryRegistry()
+			.getExtensionToFactoryMap()
+			.put(Ecore2XMLResource.FILE_EXTENSION,
+				Ecore2XMLResource.Factory.INSTANCE);
+
 		Ecore2XMLRegistry ecore2xmlRegistry = new Ecore2XMLRegistryImpl(
 			Ecore2XMLRegistry.INSTANCE);
 
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/UML212UMLResourceFactoryImpl.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/UML212UMLResourceFactoryImpl.java
index cc0f006..b8b3f02 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/UML212UMLResourceFactoryImpl.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/UML212UMLResourceFactoryImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2011 IBM Corporation, CEA, and others.
+ * Copyright (c) 2008, 2012 IBM Corporation, CEA, and others.
  * All rights reserved.   This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,7 +7,7 @@
  *
  * Contributors:
  *   IBM - initial API and implementation
- *   Kenn Hussey (CEA) - 327039
+ *   Kenn Hussey (CEA) - 327039, 364419
  *
  */
 package org.eclipse.uml2.uml.internal.resource;
@@ -26,6 +26,7 @@
 import org.eclipse.emf.mapping.ecore2xml.Ecore2XMLPackage;
 import org.eclipse.emf.mapping.ecore2xml.Ecore2XMLRegistry;
 import org.eclipse.emf.mapping.ecore2xml.impl.Ecore2XMLRegistryImpl;
+import org.eclipse.emf.mapping.ecore2xml.util.Ecore2XMLResource;
 import org.eclipse.uml2.uml.UMLPackage;
 import org.eclipse.uml2.uml.resource.UML212UMLResourceHandler;
 import org.eclipse.uml2.uml.resource.UML212UMLExtendedMetaData;
@@ -75,6 +76,12 @@
 		ResourceSet resourceSet = new ResourceSetImpl();
 		resourceSet.setPackageRegistry(ePackageRegistry);
 
+		resourceSet
+			.getResourceFactoryRegistry()
+			.getExtensionToFactoryMap()
+			.put(Ecore2XMLResource.FILE_EXTENSION,
+				Ecore2XMLResource.Factory.INSTANCE);
+
 		Ecore2XMLRegistry ecore2xmlRegistry = new Ecore2XMLRegistryImpl(
 			Ecore2XMLRegistry.INSTANCE);
 		ecore2xmlRegistry
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/UML22UMLResourceFactoryImpl.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/UML22UMLResourceFactoryImpl.java
index 3b91cc5..2fc38cb 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/UML22UMLResourceFactoryImpl.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/UML22UMLResourceFactoryImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2012 IBM Corporation, CEA, and others.
  * All rights reserved.   This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,8 +7,8 @@
  *
  * Contributors:
  *   IBM - initial API and implementation
+ *   Kenn Hussey (CEA) - 364419
  * 
- * $Id: UML22UMLResourceFactoryImpl.java,v 1.7 2006/12/14 15:49:34 khussey Exp $
  */
 package org.eclipse.uml2.uml.internal.resource;
 
@@ -26,6 +26,7 @@
 import org.eclipse.emf.mapping.ecore2xml.Ecore2XMLPackage;
 import org.eclipse.emf.mapping.ecore2xml.Ecore2XMLRegistry;
 import org.eclipse.emf.mapping.ecore2xml.impl.Ecore2XMLRegistryImpl;
+import org.eclipse.emf.mapping.ecore2xml.util.Ecore2XMLResource;
 import org.eclipse.uml2.uml.UMLPackage;
 import org.eclipse.uml2.uml.resource.UML22UMLExtendedMetaData;
 import org.eclipse.uml2.uml.resource.UML22UMLResource;
@@ -65,6 +66,12 @@
 		ResourceSet resourceSet = new ResourceSetImpl();
 		resourceSet.setPackageRegistry(ePackageRegistry);
 
+		resourceSet
+			.getResourceFactoryRegistry()
+			.getExtensionToFactoryMap()
+			.put(Ecore2XMLResource.FILE_EXTENSION,
+				Ecore2XMLResource.Factory.INSTANCE);
+
 		Ecore2XMLRegistry ecore2xmlRegistry = new Ecore2XMLRegistryImpl(
 			Ecore2XMLRegistry.INSTANCE);
 		ecore2xmlRegistry
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/UML302UMLResourceFactoryImpl.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/UML302UMLResourceFactoryImpl.java
index 3e825e6..427af9a 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/UML302UMLResourceFactoryImpl.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/UML302UMLResourceFactoryImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011 CEA and others.
+ * Copyright (c) 2011, 2012 CEA and others.
  * All rights reserved.   This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *   CEA - initial API and implementation
+ *   Kenn Hussey (CEA) - 364419
  *
  */
 package org.eclipse.uml2.uml.internal.resource;
@@ -31,6 +32,7 @@
 import org.eclipse.emf.mapping.ecore2xml.Ecore2XMLPackage;
 import org.eclipse.emf.mapping.ecore2xml.Ecore2XMLRegistry;
 import org.eclipse.emf.mapping.ecore2xml.impl.Ecore2XMLRegistryImpl;
+import org.eclipse.emf.mapping.ecore2xml.util.Ecore2XMLResource;
 
 /**
  * Resource factory that converts .uml models.
@@ -73,6 +75,12 @@
 		ResourceSet resourceSet = new ResourceSetImpl();
 		resourceSet.setPackageRegistry(ePackageRegistry);
 
+		resourceSet
+			.getResourceFactoryRegistry()
+			.getExtensionToFactoryMap()
+			.put(Ecore2XMLResource.FILE_EXTENSION,
+				Ecore2XMLResource.Factory.INSTANCE);
+
 		Ecore2XMLRegistry ecore2xmlRegistry = new Ecore2XMLRegistryImpl(
 			Ecore2XMLRegistry.INSTANCE);
 		ecore2xmlRegistry
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/XMI212UMLResourceFactoryImpl.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/XMI212UMLResourceFactoryImpl.java
index 0b12a38..5ca538b 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/XMI212UMLResourceFactoryImpl.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/XMI212UMLResourceFactoryImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2011 IBM Corporation, CEA, and others.
+ * Copyright (c) 2008, 2012 IBM Corporation, CEA, and others.
  * All rights reserved.   This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,7 +7,7 @@
  *
  * Contributors:
  *   IBM - initial API and implementation
- *   Kenn Hussey (CEA) - 327039
+ *   Kenn Hussey (CEA) - 327039, 364419
  *
  */
 package org.eclipse.uml2.uml.internal.resource;
@@ -26,6 +26,7 @@
 import org.eclipse.emf.mapping.ecore2xml.Ecore2XMLPackage;
 import org.eclipse.emf.mapping.ecore2xml.Ecore2XMLRegistry;
 import org.eclipse.emf.mapping.ecore2xml.impl.Ecore2XMLRegistryImpl;
+import org.eclipse.emf.mapping.ecore2xml.util.Ecore2XMLResource;
 import org.eclipse.uml2.uml.UMLPackage;
 import org.eclipse.uml2.uml.resource.CMOF2UMLResourceHandler;
 import org.eclipse.uml2.uml.resource.UML212UMLResourceHandler;
@@ -89,6 +90,12 @@
 		ResourceSet resourceSet = new ResourceSetImpl();
 		resourceSet.setPackageRegistry(ePackageRegistry);
 
+		resourceSet
+			.getResourceFactoryRegistry()
+			.getExtensionToFactoryMap()
+			.put(Ecore2XMLResource.FILE_EXTENSION,
+				Ecore2XMLResource.Factory.INSTANCE);
+
 		Ecore2XMLRegistry ecore2xmlRegistry = new Ecore2XMLRegistryImpl(
 			Ecore2XMLRegistry.INSTANCE);
 		ecore2xmlRegistry
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/XMI222UMLResourceFactoryImpl.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/XMI222UMLResourceFactoryImpl.java
index df5279f..e217187 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/XMI222UMLResourceFactoryImpl.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/internal/resource/XMI222UMLResourceFactoryImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011 CEA and others.
+ * Copyright (c) 2011, 2012 CEA and others.
  * All rights reserved.   This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *   CEA - initial API and implementation
+ *   Kenn Hussey (CEA) - 364419
  *
  */
 package org.eclipse.uml2.uml.internal.resource;
@@ -34,6 +35,7 @@
 import org.eclipse.emf.mapping.ecore2xml.Ecore2XMLPackage;
 import org.eclipse.emf.mapping.ecore2xml.Ecore2XMLRegistry;
 import org.eclipse.emf.mapping.ecore2xml.impl.Ecore2XMLRegistryImpl;
+import org.eclipse.emf.mapping.ecore2xml.util.Ecore2XMLResource;
 
 /**
  * Resource factory that converts .xmi models.
@@ -86,6 +88,12 @@
 		ResourceSet resourceSet = new ResourceSetImpl();
 		resourceSet.setPackageRegistry(ePackageRegistry);
 
+		resourceSet
+			.getResourceFactoryRegistry()
+			.getExtensionToFactoryMap()
+			.put(Ecore2XMLResource.FILE_EXTENSION,
+				Ecore2XMLResource.Factory.INSTANCE);
+
 		Ecore2XMLRegistry ecore2xmlRegistry = new Ecore2XMLRegistryImpl(
 			Ecore2XMLRegistry.INSTANCE);
 		ecore2xmlRegistry
