diff --git a/plugins/org.eclipse.emf.cdo.ecore/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.cdo.ecore/META-INF/MANIFEST.MF
index 5427a7a..6e9f6d7 100644
--- a/plugins/org.eclipse.emf.cdo.ecore/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.cdo.ecore/META-INF/MANIFEST.MF
@@ -2,11 +2,13 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.emf.cdo.ecore;singleton:=true
-Bundle-Version: 1.1.1.qualifier
+Bundle-Version: 1.1.2.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.emf.ecore;bundle-version="[2.13.0,3.0.0)";visibility:=reexport,
  org.eclipse.emf.cdo;bundle-version="[4.6.0,5.0.0)";visibility:=reexport
-Export-Package: org.eclipse.emf.cdo.ecore.impl;version="1.1.1"
+Export-Package: org.eclipse.emf.cdo.ecore.impl;version="1.1.2",
+ org.eclipse.emf.cdo.ecore.xml.namespace.impl;version="1.1.2",
+ org.eclipse.emf.cdo.ecore.xml.type.impl;version="1.1.2"
 Bundle-Vendor: %providerName
 Automatic-Module-Name: org.eclipse.emf.cdo.ecore
 Bundle-ClassPath: .
diff --git a/plugins/org.eclipse.emf.cdo.ecore/plugin.xml b/plugins/org.eclipse.emf.cdo.ecore/plugin.xml
index 0768a1a..c73e9d8 100644
--- a/plugins/org.eclipse.emf.cdo.ecore/plugin.xml
+++ b/plugins/org.eclipse.emf.cdo.ecore/plugin.xml
@@ -17,6 +17,12 @@
     <factory
       uri="http://www.eclipse.org/emf/2002/Ecore"
       class="org.eclipse.emf.cdo.ecore.impl.CDOEcoreFactoryImpl" />
-  </extension>
+    <factory
+      uri="http://www.eclipse.org/emf/2003/XMLType"
+      class="org.eclipse.emf.cdo.ecore.xml.type.impl.CDOXMLTypeFactoryImpl" />
+    <factory
+      uri="http://www.w3.org/XML/1998/namespace"
+      class="org.eclipse.emf.cdo.ecore.xml.namespace.impl.CDOXMLNamespaceFactoryImpl" />
+  </extension> 
 
 </plugin>
diff --git a/plugins/org.eclipse.emf.cdo.ecore/pom.xml b/plugins/org.eclipse.emf.cdo.ecore/pom.xml
index 2cf3167..22bc45d 100644
--- a/plugins/org.eclipse.emf.cdo.ecore/pom.xml
+++ b/plugins/org.eclipse.emf.cdo.ecore/pom.xml
@@ -25,7 +25,7 @@
 
   <groupId>org.eclipse.emf.cdo</groupId>
   <artifactId>org.eclipse.emf.cdo.ecore</artifactId>
-  <version>1.1.1-SNAPSHOT</version>
+  <version>1.1.2-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 
 </project>
diff --git a/plugins/org.eclipse.emf.cdo.ecore/src/org/eclipse/emf/cdo/ecore/xml/namespace/impl/CDOXMLNamespaceFactoryImpl.java b/plugins/org.eclipse.emf.cdo.ecore/src/org/eclipse/emf/cdo/ecore/xml/namespace/impl/CDOXMLNamespaceFactoryImpl.java
new file mode 100644
index 0000000..1bc0159
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.ecore/src/org/eclipse/emf/cdo/ecore/xml/namespace/impl/CDOXMLNamespaceFactoryImpl.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2020 Eike Stepper (Loehne, Germany) 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:
+ *   Sebastien REVOL (CEA LIST) sebastien.revol@cea.fr - Initial API and implementation
+ */
+package org.eclipse.emf.cdo.ecore.xml.namespace.impl;
+
+import org.eclipse.emf.ecore.xml.namespace.XMLNamespaceDocumentRoot;
+
+/**
+ * @author Sebastien Revol
+ */
+public class CDOXMLNamespaceFactoryImpl extends org.eclipse.emf.ecore.xml.namespace.impl.XMLNamespaceFactoryImpl
+{
+  public CDOXMLNamespaceFactoryImpl()
+  {
+  }
+
+  @Override
+  public XMLNamespaceDocumentRoot createXMLNamespaceDocumentRoot()
+  {
+    return new XMLNamespaceDocumentRootImpl();
+  }
+}
diff --git a/plugins/org.eclipse.emf.cdo.ecore/src/org/eclipse/emf/cdo/ecore/xml/namespace/impl/XMLNamespaceDocumentRootImpl.java b/plugins/org.eclipse.emf.cdo.ecore/src/org/eclipse/emf/cdo/ecore/xml/namespace/impl/XMLNamespaceDocumentRootImpl.java
new file mode 100644
index 0000000..99599d3
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.ecore/src/org/eclipse/emf/cdo/ecore/xml/namespace/impl/XMLNamespaceDocumentRootImpl.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2020 Eike Stepper (Loehne, Germany) 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:
+ *   Sebastien REVOL (CEA LIST) sebastien.revol@cea.fr - Initial API and implementation
+ */
+package org.eclipse.emf.cdo.ecore.xml.namespace.impl;
+
+import org.eclipse.emf.cdo.ecore.impl.EStringToStringMapEntryImpl;
+
+import org.eclipse.emf.common.util.EMap;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.util.EcoreEMap;
+import org.eclipse.emf.ecore.xml.namespace.XMLNamespacePackage;
+
+/**
+ * @author Sebastien Revol
+ */
+public class XMLNamespaceDocumentRootImpl extends org.eclipse.emf.ecore.xml.namespace.impl.XMLNamespaceDocumentRootImpl
+{
+  @Override
+  public EMap<String, String> getXMLNSPrefixMap()
+  {
+    if (xMLNSPrefixMap == null)
+    {
+      // The super class implementation would pass EMF's EStringToStringMapEntryImpl,
+      // but that's not compatible with CDO's replacement. So pass in CDO's version of it.
+      xMLNSPrefixMap = new EcoreEMap<>(EcorePackage.Literals.ESTRING_TO_STRING_MAP_ENTRY, EStringToStringMapEntryImpl.class, this,
+          XMLNamespacePackage.XML_NAMESPACE_DOCUMENT_ROOT__XMLNS_PREFIX_MAP);
+    }
+
+    return xMLNSPrefixMap;
+  }
+
+  @Override
+  public EMap<String, String> getXSISchemaLocation()
+  {
+    if (xSISchemaLocation == null)
+    {
+      // The super class implementation would pass EMF's EStringToStringMapEntryImpl,
+      // but that's not compatible with CDO's replacement. So pass in CDO's version of it.
+      xSISchemaLocation = new EcoreEMap<>(EcorePackage.Literals.ESTRING_TO_STRING_MAP_ENTRY, EStringToStringMapEntryImpl.class, this,
+          XMLNamespacePackage.XML_NAMESPACE_DOCUMENT_ROOT__XSI_SCHEMA_LOCATION);
+    }
+
+    return xSISchemaLocation;
+  }
+}
diff --git a/plugins/org.eclipse.emf.cdo.ecore/src/org/eclipse/emf/cdo/ecore/xml/type/impl/CDOXMLTypeFactoryImpl.java b/plugins/org.eclipse.emf.cdo.ecore/src/org/eclipse/emf/cdo/ecore/xml/type/impl/CDOXMLTypeFactoryImpl.java
new file mode 100644
index 0000000..6b532c7
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.ecore/src/org/eclipse/emf/cdo/ecore/xml/type/impl/CDOXMLTypeFactoryImpl.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2020 Eike Stepper (Loehne, Germany) 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:
+ *   Sebastien REVOL (CEA LIST) sebastien.revol@cea.fr - Initial API and implementation
+ */
+package org.eclipse.emf.cdo.ecore.xml.type.impl;
+
+import org.eclipse.emf.ecore.xml.type.XMLTypeDocumentRoot;
+
+/**
+ * @author Sebastien Revol
+ */
+public class CDOXMLTypeFactoryImpl extends org.eclipse.emf.ecore.xml.type.impl.XMLTypeFactoryImpl
+{
+  public CDOXMLTypeFactoryImpl()
+  {
+  }
+
+  @Override
+  public XMLTypeDocumentRoot createXMLTypeDocumentRoot()
+  {
+    return new XMLTypeDocumentRootImpl();
+  }
+}
diff --git a/plugins/org.eclipse.emf.cdo.ecore/src/org/eclipse/emf/cdo/ecore/xml/type/impl/XMLTypeDocumentRootImpl.java b/plugins/org.eclipse.emf.cdo.ecore/src/org/eclipse/emf/cdo/ecore/xml/type/impl/XMLTypeDocumentRootImpl.java
new file mode 100644
index 0000000..4595358
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.ecore/src/org/eclipse/emf/cdo/ecore/xml/type/impl/XMLTypeDocumentRootImpl.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2020 Eike Stepper (Loehne, Germany) 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:
+ *   Sebastien REVOL (CEA LIST) sebastien.revol@cea.fr - Initial API and implementation
+ */
+package org.eclipse.emf.cdo.ecore.xml.type.impl;
+
+import org.eclipse.emf.cdo.ecore.impl.EStringToStringMapEntryImpl;
+
+import org.eclipse.emf.common.util.EMap;
+import org.eclipse.emf.ecore.EcorePackage;
+import org.eclipse.emf.ecore.util.EcoreEMap;
+import org.eclipse.emf.ecore.xml.type.XMLTypePackage;
+
+/**
+ * @author Sebastien Revol
+ */
+public class XMLTypeDocumentRootImpl extends org.eclipse.emf.ecore.xml.type.impl.XMLTypeDocumentRootImpl
+{
+  public XMLTypeDocumentRootImpl()
+  {
+  }
+
+  @Override
+  public EMap<String, String> getXMLNSPrefixMap()
+  {
+    if (xMLNSPrefixMap == null)
+    {
+      // The super class implementation would pass EMF's EStringToStringMapEntryImpl,
+      // but that's not compatible with CDO's replacement. So pass in CDO's version of it.
+      xMLNSPrefixMap = new EcoreEMap<>(EcorePackage.Literals.ESTRING_TO_STRING_MAP_ENTRY, EStringToStringMapEntryImpl.class, this,
+          XMLTypePackage.XML_TYPE_DOCUMENT_ROOT__XMLNS_PREFIX_MAP);
+    }
+
+    return xMLNSPrefixMap;
+  }
+
+  @Override
+  public EMap<String, String> getXSISchemaLocation()
+  {
+    if (xSISchemaLocation == null)
+    {
+      // The super class implementation would pass EMF's EStringToStringMapEntryImpl,
+      // but that's not compatible with CDO's replacement. So pass in CDO's version of it.
+      xSISchemaLocation = new EcoreEMap<>(EcorePackage.Literals.ESTRING_TO_STRING_MAP_ENTRY, EStringToStringMapEntryImpl.class, this,
+          XMLTypePackage.XML_TYPE_DOCUMENT_ROOT__XSI_SCHEMA_LOCATION);
+    }
+
+    return xSISchemaLocation;
+  }
+}
