diff --git a/src/main/jastadd/XMI/XMIPathConstruction.jrag b/src/main/jastadd/XMI/XMIPathConstruction.jrag
index d2189bbd7d50cc40b8b94a92ae0b5ff88a6186d0..b386f22842f211f34776cd140c28c8bec223c56e 100644
--- a/src/main/jastadd/XMI/XMIPathConstruction.jrag
+++ b/src/main/jastadd/XMI/XMIPathConstruction.jrag
@@ -17,18 +17,72 @@ aspect XMIPathConstruction {
 
   eq EDataType.xmiReference() {
     if (getParent() == null) {
-      if (this == eInt())
-        return "ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt";
-      else if (this == eString())
-        return "ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString";
+      if (this == eBigDecimal())
+        return "ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigDecimal";
+      else if (this == eBigInteger())
+        return "ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBigInteger";
       else if (this == eBoolean())
         return "ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean";
-      else if (this == eJavaObject())
-        return "ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject";
+      else if (this == eBooleanObject())
+        return "ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBooleanObject";
+      else if (this == eByte())
+        return "ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EByte";
+      else if (this == eByteArray())
+        return "ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EByteArray";
+      else if (this == eByteObject())
+        return "ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EByteObject";
+      else if (this == eChar())
+        return "ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EChar";
+      else if (this == eCharacterObject())
+        return "ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ECharacterObject";
+      else if (this == eDate())
+        return "ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDate";
+      else if (this == eDiagnosticChain())
+        return "ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain";
+      else if (this == eDouble())
+        return "ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDouble";
+      else if (this == eDoubleObject())
+        return "ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EDoubleObject";
+      else if (this == eEList())
+        return "ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EEList";
       else if (this == eEnumerator())
         return "ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EEnumerator";
+      else if (this == eFeatureMap())
+        return "ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMap";
+      else if (this == eFeatureMapEntry())
+        return "ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry";
+      else if (this == eFloat())
+        return "ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFloat";
+      else if (this == eFloatObject())
+        return "ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFloatObject";
+      else if (this == eInt())
+        return "ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt";
+      else if (this == eIntegerObject())
+        return "ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EIntegerObject";
+      else if (this == eJavaClass())
+        return "ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaClass";
+      else if (this == eJavaObject())
+        return "ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EJavaObject";
+      else if (this == eLong())
+        return "ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELong";
+      else if (this == eLongObject())
+        return "ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ELongObject";
+      else if (this == eMap())
+        return "ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EMap";
       else if (this == eResource())
         return "ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EResource";
+      else if (this == eResourceSet())
+        return "ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EResourceSet";
+      else if (this == eShort())
+        return "ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EShort";
+      else if (this == eShortObject())
+        return "ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EShortObject";
+      else if (this == eString())
+        return "ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString";
+      else if (this == eTreeIterator())
+        return "ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//ETreeIterator";
+      else if (this == eInvocationTargetException())
+        return "ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInvocationTargetException";
       else if (this == xmlDateTime())
         return "ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//DateTime";
       else if (this == xmlBoolean())
diff --git a/src/main/jastadd/XMI/XMIPathResolution.jrag b/src/main/jastadd/XMI/XMIPathResolution.jrag
index 081e79a66a44bed1016c5ba48c7f8ffbdd65cf72..da3bc2fb2f16dcff545bbe615ffd92148414574e 100644
--- a/src/main/jastadd/XMI/XMIPathResolution.jrag
+++ b/src/main/jastadd/XMI/XMIPathResolution.jrag
@@ -31,24 +31,38 @@ aspect XMIPathResolution {
     return eObject;
   }
 
-  private static EDataType EDataType.eInt;
-  public static final EDataType EDataType.eInt() {
-    if (eInt == null) {
-      eInt = new EDataType();
-      eInt.setInstanceClassName("int");
-      eInt.setName("EInt");
+  private static EDataType EDataType.eBigDecimal;
+  public static final EDataType EDataType.eBigDecimal() {
+    if (eBigDecimal == null) {
+      eBigDecimal = new EDataType();
+      eBigDecimal.setInstanceClassName("java.math.BigDecimal");
+      eBigDecimal.setName("EBigDecimal");
+      EAnnotation annotation = new EAnnotation();
+      annotation.setSource("http:///org/eclipse/emf/ecore/util/ExtendedMetaData");
+      EStringToStringMapEntry entry = new EStringToStringMapEntry();
+      entry.setKey("baseType");
+      entry.setValue("http://www.w3.org/2001/XMLSchema#decimal");
+      annotation.addDetail(entry);
+      eBigDecimal.addEAnnotation(annotation);
     }
-    return eInt;
+    return eBigDecimal;
   }
 
-  private static EDataType EDataType.eString;
-  public static final EDataType EDataType.eString() {
-    if (eString == null) {
-      eString = new EDataType();
-      eString.setInstanceClassName("String");
-      eString.setName("EString");
+  private static EDataType EDataType.eBigInteger;
+  public static final EDataType EDataType.eBigInteger() {
+    if (eBigInteger == null) {
+      eBigInteger = new EDataType();
+      eBigInteger.setInstanceClassName("java.math.BigInteger");
+      eBigInteger.setName("EBigInteger");
+      EAnnotation annotation = new EAnnotation();
+      annotation.setSource("http:///org/eclipse/emf/ecore/util/ExtendedMetaData");
+      EStringToStringMapEntry entry = new EStringToStringMapEntry();
+      entry.setKey("baseType");
+      entry.setValue("http://www.w3.org/2001/XMLSchema#integer");
+      annotation.addDetail(entry);
+      eBigDecimal.addEAnnotation(annotation);
     }
-    return eString;
+    return eBigDecimal;
   }
 
   private static EDataType EDataType.eBoolean;
@@ -57,18 +71,195 @@ aspect XMIPathResolution {
       eBoolean = new EDataType();
       eBoolean.setInstanceClassName("boolean");
       eBoolean.setName("EBoolean");
+      EAnnotation annotation = new EAnnotation();
+      annotation.setSource("http:///org/eclipse/emf/ecore/util/ExtendedMetaData");
+      EStringToStringMapEntry entry = new EStringToStringMapEntry();
+      entry.setKey("baseType");
+      entry.setValue("http://www.w3.org/2001/XMLSchema#boolean");
+      annotation.addDetail(entry);
+      eBoolean.addEAnnotation(annotation);
     }
     return eBoolean;
   }
 
-  private static EDataType EDataType.eJavaObject;
-  public static final EDataType EDataType.eJavaObject() {
-    if (eJavaObject == null) {
-      eJavaObject = new EDataType();
-      eJavaObject.setInstanceClassName("java.lang.Object");
-      eJavaObject.setName("EJavaObject");
+  private static EDataType EDataType.eBooleanObject;
+  public static final EDataType EDataType.eBooleanObject() {
+    if (eBooleanObject == null) {
+      eBooleanObject = new EDataType();
+      eBooleanObject.setInstanceClassName("java.lang.Boolean");
+      eBooleanObject.setName("EBooleanObject");
+      EAnnotation annotation = new EAnnotation();
+      annotation.setSource("http:///org/eclipse/emf/ecore/util/ExtendedMetaData");
+      EStringToStringMapEntry baseTypeEntry = new EStringToStringMapEntry();
+      baseTypeEntry.setKey("baseType");
+      baseTypeEntry.setValue("EBoolean");
+      annotation.addDetail(baseTypeEntry);
+      EStringToStringMapEntry nameEntry = new EStringToStringMapEntry();
+      nameEntry.setKey("name");
+      nameEntry.setValue("EBoolean:Object");
+      annotation.addDetail(nameEntry);
+      eBooleanObject.addEAnnotation(annotation);
     }
-    return eBoolean;
+    return eBooleanObject;
+  }
+
+  private static EDataType EDataType.eByte;
+  public static final EDataType EDataType.eByte() {
+    if (eByte == null) {
+      eByte = new EDataType();
+      eByte.setInstanceClassName("byte");
+      eByte.setName("EByte");
+      EAnnotation annotation = new EAnnotation();
+      annotation.setSource("http:///org/eclipse/emf/ecore/util/ExtendedMetaData");
+      EStringToStringMapEntry entry = new EStringToStringMapEntry();
+      entry.setKey("baseType");
+      entry.setValue("http://www.w3.org/2001/XMLSchema#byte");
+      annotation.addDetail(entry);
+      eByte.addEAnnotation(annotation);
+    }
+    return eByte;
+  }
+
+  private static EDataType EDataType.eByteArray;
+  public static final EDataType EDataType.eByteArray() {
+    if (eByteArray == null) {
+      eByteArray = new EDataType();
+      eByteArray.setInstanceClassName("byte[]");
+      eByteArray.setName("EByteArray");
+      EAnnotation annotation = new EAnnotation();
+      annotation.setSource("http:///org/eclipse/emf/ecore/util/ExtendedMetaData");
+      EStringToStringMapEntry entry = new EStringToStringMapEntry();
+      entry.setKey("baseType");
+      entry.setValue("http://www.w3.org/2001/XMLSchema#hexBinary");
+      annotation.addDetail(entry);
+      eByteArray.addEAnnotation(annotation);
+    }
+    return eByteArray;
+  }
+
+  private static EDataType EDataType.eByteObject;
+  public static final EDataType EDataType.eByteObject() {
+    if (eByteObject == null) {
+      eByteObject = new EDataType();
+      eByteObject.setInstanceClassName("java.lang.Byte");
+      eByteObject.setName("EByteObject");
+      EAnnotation annotation = new EAnnotation();
+      annotation.setSource("http:///org/eclipse/emf/ecore/util/ExtendedMetaData");
+      EStringToStringMapEntry baseTypeEntry = new EStringToStringMapEntry();
+      baseTypeEntry.setKey("baseType");
+      baseTypeEntry.setValue("EByte");
+      annotation.addDetail(baseTypeEntry);
+      EStringToStringMapEntry nameEntry = new EStringToStringMapEntry();
+      nameEntry.setKey("name");
+      nameEntry.setValue("EByte:Object");
+      annotation.addDetail(nameEntry);
+      eByteObject.addEAnnotation(annotation);
+    }
+    return eByteObject;
+  }
+
+  private static EDataType EDataType.eChar;
+  public static final EDataType EDataType.eChar() {
+    if (eChar == null) {
+      eChar = new EDataType();
+      eChar.setInstanceClassName("char");
+      eChar.setName("EChar");
+    }
+    return eChar;
+  }
+
+  private static EDataType EDataType.eCharacterObject;
+  public static final EDataType EDataType.eCharacterObject() {
+    if (eCharacterObject == null) {
+      eCharacterObject = new EDataType();
+      eCharacterObject.setInstanceClassName("java.lang.Character");
+      eCharacterObject.setName("ECharacterObject");
+      EAnnotation annotation = new EAnnotation();
+      annotation.setSource("http:///org/eclipse/emf/ecore/util/ExtendedMetaData");
+      EStringToStringMapEntry baseTypeEntry = new EStringToStringMapEntry();
+      baseTypeEntry.setKey("baseType");
+      baseTypeEntry.setValue("EChar");
+      annotation.addDetail(baseTypeEntry);
+      EStringToStringMapEntry nameEntry = new EStringToStringMapEntry();
+      nameEntry.setKey("name");
+      nameEntry.setValue("EChar:Object");
+      annotation.addDetail(nameEntry);
+      eCharacterObject.addEAnnotation(annotation);
+    }
+    return eCharacterObject;
+  }
+
+  private static EDataType EDataType.eDate;
+  public static final EDataType EDataType.eDate() {
+    if (eDate == null) {
+      eDate = new EDataType();
+      eDate.setInstanceClassName("java.util.Date");
+      eDate.setName("EDate");
+    }
+    return eDate;
+  }
+
+  private static EDataType EDataType.eDiagnosticChain;
+  public static final EDataType EDataType.eDiagnosticChain() {
+    if (eDiagnosticChain == null) {
+      eDiagnosticChain = new EDataType();
+      eDiagnosticChain.setInstanceClassName("org.eclipse.emf.common.util.DiagnosticChain");
+      eDiagnosticChain.setName("EDiagnosticChain");
+      eDiagnosticChain.setSerializable(false);
+    }
+    return eDiagnosticChain;
+  }
+
+  private static EDataType EDataType.eDouble;
+  public static final EDataType EDataType.eDouble() {
+    if (eDouble == null) {
+      eDouble = new EDataType();
+      eDouble.setInstanceClassName("double");
+      eDouble.setName("EDouble");
+      EAnnotation annotation = new EAnnotation();
+      annotation.setSource("http:///org/eclipse/emf/ecore/util/ExtendedMetaData");
+      EStringToStringMapEntry entry = new EStringToStringMapEntry();
+      entry.setKey("baseType");
+      entry.setValue("http://www.w3.org/2001/XMLSchema#double");
+      annotation.addDetail(entry);
+      eDouble.addEAnnotation(annotation);
+    }
+    return eDouble;
+  }
+
+  private static EDataType EDataType.eDoubleObject;
+  public static final EDataType EDataType.eDoubleObject() {
+    if (eDoubleObject == null) {
+      eDoubleObject = new EDataType();
+      eDoubleObject.setInstanceClassName("java.lang.Double");
+      eDoubleObject.setName("EDoubleObject");
+      EAnnotation annotation = new EAnnotation();
+      annotation.setSource("http:///org/eclipse/emf/ecore/util/ExtendedMetaData");
+      EStringToStringMapEntry baseTypeEntry = new EStringToStringMapEntry();
+      baseTypeEntry.setKey("baseType");
+      baseTypeEntry.setValue("EDouble");
+      annotation.addDetail(baseTypeEntry);
+      EStringToStringMapEntry nameEntry = new EStringToStringMapEntry();
+      nameEntry.setKey("name");
+      nameEntry.setValue("EDouble:Object");
+      annotation.addDetail(nameEntry);
+      eDoubleObject.addEAnnotation(annotation);
+    }
+    return eDoubleObject;
+  }
+
+  private static EDataType EDataType.eEList;
+  public static final EDataType EDataType.eEList() {
+    if (eEList == null) {
+      eEList = new EDataType();
+      eEList.setInstanceClassName("org.eclipse.emf.common.util.EList");
+      eEList.setName("EEList");
+      eEList.setSerializable(false);
+      ETypeParameter typeParameter = new ETypeParameter();
+      typeParameter.setName("E");
+      eEList.addETypeParameter(typeParameter);
+    }
+    return eEList;
   }
 
   private static EDataType EDataType.eEnumerator;
@@ -77,8 +268,185 @@ aspect XMIPathResolution {
       eEnumerator = new EDataType();
       eEnumerator.setInstanceClassName("org.eclipse.emf.common.util.Enumerator");
       eEnumerator.setName("EEnumerator");
+      eEnumerator.setSerializable(false);
     }
-    return eBoolean;
+    return eEnumerator;
+  }
+
+  private static EDataType EDataType.eFeatureMap;
+  public static final EDataType EDataType.eFeatureMap() {
+    if (eFeatureMap == null) {
+      eFeatureMap = new EDataType();
+      eFeatureMap.setInstanceClassName("org.eclipse.emf.common.util.FeatureMap");
+      eFeatureMap.setName("EFeatureMap");
+      eFeatureMap.setSerializable(false);
+    }
+    return eFeatureMap;
+  }
+
+  private static EDataType EDataType.eFeatureMapEntry;
+  public static final EDataType EDataType.eFeatureMapEntry() {
+    if (eFeatureMapEntry == null) {
+      eFeatureMapEntry = new EDataType();
+      eFeatureMapEntry.setInstanceClassName("org.eclipse.emf.common.util.FeatureMap$Entry");
+      eFeatureMapEntry.setName("EFeatureMapEntry");
+      eFeatureMapEntry.setSerializable(false);
+    }
+    return eFeatureMapEntry;
+  }
+
+  private static EDataType EDataType.eFloat;
+  public static final EDataType EDataType.eFloat() {
+    if (eFloat == null) {
+      eFloat = new EDataType();
+      eFloat.setInstanceClassName("float");
+      eFloat.setName("EFloat");
+      EAnnotation annotation = new EAnnotation();
+      annotation.setSource("http:///org/eclipse/emf/ecore/util/ExtendedMetaData");
+      EStringToStringMapEntry entry = new EStringToStringMapEntry();
+      entry.setKey("baseType");
+      entry.setValue("http://www.w3.org/2001/XMLSchema#float");
+      annotation.addDetail(entry);
+      eFloat.addEAnnotation(annotation);
+    }
+    return eFloat;
+  }
+
+  private static EDataType EDataType.eFloatObject;
+  public static final EDataType EDataType.eFloatObject() {
+    if (eFloatObject == null) {
+      eFloatObject = new EDataType();
+      eFloatObject.setInstanceClassName("java.lang.Float");
+      eFloatObject.setName("EFloatObject");
+      EAnnotation annotation = new EAnnotation();
+      annotation.setSource("http:///org/eclipse/emf/ecore/util/ExtendedMetaData");
+      EStringToStringMapEntry baseTypeEntry = new EStringToStringMapEntry();
+      baseTypeEntry.setKey("baseType");
+      baseTypeEntry.setValue("EFloat");
+      annotation.addDetail(baseTypeEntry);
+      EStringToStringMapEntry nameEntry = new EStringToStringMapEntry();
+      nameEntry.setKey("name");
+      nameEntry.setValue("EFloat:Object");
+      annotation.addDetail(nameEntry);
+      eFloatObject.addEAnnotation(annotation);
+    }
+    return eFloatObject;
+  }
+
+  private static EDataType EDataType.eInt;
+  public static final EDataType EDataType.eInt() {
+    if (eInt == null) {
+      eInt = new EDataType();
+      eInt.setInstanceClassName("int");
+      eInt.setName("EInt");
+      EAnnotation annotation = new EAnnotation();
+      annotation.setSource("http:///org/eclipse/emf/ecore/util/ExtendedMetaData");
+      EStringToStringMapEntry entry = new EStringToStringMapEntry();
+      entry.setKey("baseType");
+      entry.setValue("http://www.w3.org/2001/XMLSchema#int");
+      annotation.addDetail(entry);
+      eInt.addEAnnotation(annotation);
+    }
+    return eInt;
+  }
+
+  private static EDataType EDataType.eIntegerObject;
+  public static final EDataType EDataType.eIntegerObject() {
+    if (eIntegerObject == null) {
+      eIntegerObject = new EDataType();
+      eIntegerObject.setInstanceClassName("java.lang.Integer");
+      eIntegerObject.setName("EIntegerObject");
+      EAnnotation annotation = new EAnnotation();
+      annotation.setSource("http:///org/eclipse/emf/ecore/util/ExtendedMetaData");
+      EStringToStringMapEntry baseTypeEntry = new EStringToStringMapEntry();
+      baseTypeEntry.setKey("baseType");
+      baseTypeEntry.setValue("EInt");
+      annotation.addDetail(baseTypeEntry);
+      EStringToStringMapEntry nameEntry = new EStringToStringMapEntry();
+      nameEntry.setKey("name");
+      nameEntry.setValue("EInt:Object");
+      annotation.addDetail(nameEntry);
+      eIntegerObject.addEAnnotation(annotation);
+    }
+    return eIntegerObject;
+  }
+
+  private static EDataType EDataType.eJavaClass;
+  public static final EDataType EDataType.eJavaClass() {
+    if (eJavaClass == null) {
+      eJavaClass = new EDataType();
+      eJavaClass.setInstanceClassName("java.lang.Class");
+      eJavaClass.setName("EJavaClass");
+      ETypeParameter typeParameter = new ETypeParameter();
+      typeParameter.setName("T");
+      eJavaClass.addETypeParameter(typeParameter);
+    }
+    return eJavaClass;
+  }
+
+  private static EDataType EDataType.eJavaObject;
+  public static final EDataType EDataType.eJavaObject() {
+    if (eJavaObject == null) {
+      eJavaObject = new EDataType();
+      eJavaObject.setInstanceClassName("java.lang.Object");
+      eJavaObject.setName("EJavaObject");
+    }
+    return eJavaObject;
+  }
+
+  private static EDataType EDataType.eLong;
+  public static final EDataType EDataType.eLong() {
+    if (eLong == null) {
+      eLong = new EDataType();
+      eLong.setInstanceClassName("long");
+      eLong.setName("ELong");
+      EAnnotation annotation = new EAnnotation();
+      annotation.setSource("http:///org/eclipse/emf/ecore/util/ExtendedMetaData");
+      EStringToStringMapEntry entry = new EStringToStringMapEntry();
+      entry.setKey("baseType");
+      entry.setValue("http://www.w3.org/2001/XMLSchema#long");
+      annotation.addDetail(entry);
+      eLong.addEAnnotation(annotation);
+    }
+    return eLong;
+  }
+
+  private static EDataType EDataType.eLongObject;
+  public static final EDataType EDataType.eLongObject() {
+    if (eLongObject == null) {
+      eLongObject = new EDataType();
+      eLongObject.setInstanceClassName("java.lang.Long");
+      eLongObject.setName("ELongObject");
+      EAnnotation annotation = new EAnnotation();
+      annotation.setSource("http:///org/eclipse/emf/ecore/util/ExtendedMetaData");
+      EStringToStringMapEntry baseTypeEntry = new EStringToStringMapEntry();
+      baseTypeEntry.setKey("baseType");
+      baseTypeEntry.setValue("ELong");
+      annotation.addDetail(baseTypeEntry);
+      EStringToStringMapEntry nameEntry = new EStringToStringMapEntry();
+      nameEntry.setKey("name");
+      nameEntry.setValue("ELong:Object");
+      annotation.addDetail(nameEntry);
+      eLongObject.addEAnnotation(annotation);
+    }
+    return eLongObject;
+  }
+
+  private static EDataType EDataType.eMap;
+  public static final EDataType EDataType.eMap() {
+    if (eMap == null) {
+      eMap = new EDataType();
+      eMap.setInstanceClassName("java.util.EMap");
+      eMap.setName("EMap");
+      eMap.setSerializable(false);
+      ETypeParameter typeParameterK = new ETypeParameter();
+      typeParameterK.setName("K");
+      eMap.addETypeParameter(typeParameterK);
+      ETypeParameter typeParameterV = new ETypeParameter();
+      typeParameterV.setName("V");
+      eMap.addETypeParameter(typeParameterV);
+    }
+    return eMap;
   }
 
   private static EDataType EDataType.eResource;
@@ -87,10 +455,102 @@ aspect XMIPathResolution {
       eResource = new EDataType();
       eResource.setInstanceClassName("org.eclipse.emf.ecore.resource.Resource");
       eResource.setName("EResource");
+      eResource.setSerializable(false);
     }
     return eResource;
   }
 
+  private static EDataType EDataType.eResourceSet;
+  public static final EDataType EDataType.eResourceSet() {
+    if (eResourceSet == null) {
+      eResourceSet = new EDataType();
+      eResourceSet.setInstanceClassName("org.eclipse.emf.ecore.resource.ResourceSet");
+      eResourceSet.setName("EResourceSet");
+      eResourceSet.setSerializable(false);
+    }
+    return eResourceSet;
+  }
+
+  private static EDataType EDataType.eShort;
+  public static final EDataType EDataType.eShort() {
+    if (eShort == null) {
+      eShort = new EDataType();
+      eShort.setInstanceClassName("short");
+      eShort.setName("EShort");
+      EAnnotation annotation = new EAnnotation();
+      annotation.setSource("http:///org/eclipse/emf/ecore/util/ExtendedMetaData");
+      EStringToStringMapEntry entry = new EStringToStringMapEntry();
+      entry.setKey("baseType");
+      entry.setValue("http://www.w3.org/2001/XMLSchema#short");
+      annotation.addDetail(entry);
+      eShort.addEAnnotation(annotation);
+    }
+    return eShort;
+  }
+
+  private static EDataType EDataType.eShortObject;
+  public static final EDataType EDataType.eShortObject() {
+    if (eShortObject == null) {
+      eShortObject = new EDataType();
+      eShortObject.setInstanceClassName("java.lang.Short");
+      eShortObject.setName("EShortObject");
+      EAnnotation annotation = new EAnnotation();
+      annotation.setSource("http:///org/eclipse/emf/ecore/util/ExtendedMetaData");
+      EStringToStringMapEntry baseTypeEntry = new EStringToStringMapEntry();
+      baseTypeEntry.setKey("baseType");
+      baseTypeEntry.setValue("EShort");
+      annotation.addDetail(baseTypeEntry);
+      EStringToStringMapEntry nameEntry = new EStringToStringMapEntry();
+      nameEntry.setKey("name");
+      nameEntry.setValue("EShort:Object");
+      annotation.addDetail(nameEntry);
+      eShortObject.addEAnnotation(annotation);
+    }
+    return eShortObject;
+  }
+
+  private static EDataType EDataType.eString;
+  public static final EDataType EDataType.eString() {
+    if (eString == null) {
+      eString = new EDataType();
+      eString.setInstanceClassName("String");
+      eString.setName("EString");
+      EAnnotation annotation = new EAnnotation();
+      annotation.setSource("http:///org/eclipse/emf/ecore/util/ExtendedMetaData");
+      EStringToStringMapEntry entry = new EStringToStringMapEntry();
+      entry.setKey("baseType");
+      entry.setValue("http://www.w3.org/2001/XMLSchema#string");
+      annotation.addDetail(entry);
+      eString.addEAnnotation(annotation);
+    }
+    return eString;
+  }
+
+  private static EDataType EDataType.eTreeIterator;
+  public static final EDataType EDataType.eTreeIterator() {
+    if (eTreeIterator == null) {
+      eTreeIterator = new EDataType();
+      eTreeIterator.setInstanceClassName("org.eclipse.emf.common.util.TreeIterator");
+      eTreeIterator.setName("ETreeIterator");
+      eTreeIterator.setSerializable(false);
+      ETypeParameter typeParameter = new ETypeParameter();
+      typeParameter.setName("E");
+      eTreeIterator.addETypeParameter(typeParameter);
+    }
+    return eTreeIterator;
+  }
+
+  private static EDataType EDataType.eInvocationTargetException;
+  public static final EDataType EDataType.eInvocationTargetException() {
+    if (eInvocationTargetException == null) {
+      eInvocationTargetException = new EDataType();
+      eInvocationTargetException.setInstanceClassName("java.lang.reflect.InvocationTargetException");
+      eInvocationTargetException.setName("EInvocationTargetException");
+      eInvocationTargetException.setSerializable(false);
+    }
+    return eInvocationTargetException;
+  }
+
   private static EDataType EDataType.xmlDateTime;
   public static final EDataType EDataType.xmlDateTime() {
     if (xmlDateTime == null) {
@@ -323,19 +783,72 @@ aspect XMIPathResolution {
       }
     } else if (uriString.startsWith("ecore:EDataType ")) {
       switch (uriString.substring(16)) {
-        case "http://www.eclipse.org/emf/2002/Ecore#//EObject":
-        case "http://www.eclipse.org/emf/2002/Ecore#//EInt":
-          return EDataType.eInt();
-        case "http://www.eclipse.org/emf/2002/Ecore#//EString":
-          return EDataType.eString();
+        case "http://www.eclipse.org/emf/2002/Ecore#//EBigDecimal":
+          return EDataType.eBigDecimal();
+        case "http://www.eclipse.org/emf/2002/Ecore#//EBigInteger":
+          return EDataType.eBigInteger();
         case "http://www.eclipse.org/emf/2002/Ecore#//EBoolean":
           return EDataType.eBoolean();
-        case "http://www.eclipse.org/emf/2002/Ecore#//EJavaObject":
-          return EDataType.eJavaObject();
+        case "http://www.eclipse.org/emf/2002/Ecore#//EBooleanObject":
+          return EDataType.eBooleanObject();
+        case "http://www.eclipse.org/emf/2002/Ecore#//EByte":
+          return EDataType.eByte();
+        case "http://www.eclipse.org/emf/2002/Ecore#//EByteArray":
+          return EDataType.eByteArray();
+        case "http://www.eclipse.org/emf/2002/Ecore#//EByteObject":
+          return EDataType.eByteObject();
+        case "http://www.eclipse.org/emf/2002/Ecore#//EChar":
+          return EDataType.eChar();
+        case "http://www.eclipse.org/emf/2002/Ecore#//ECharacterObject":
+          return EDataType.eCharacterObject();
+        case "http://www.eclipse.org/emf/2002/Ecore#//EDate":
+          return EDataType.eDate();
+        case "http://www.eclipse.org/emf/2002/Ecore#//EDiagnosticChain":
+          return EDataType.eDiagnosticChain();
+        case "http://www.eclipse.org/emf/2002/Ecore#//EDouble":
+          return EDataType.eDouble();
+        case "http://www.eclipse.org/emf/2002/Ecore#//EDoubleObject":
+          return EDataType.eDoubleObject();
+        case "http://www.eclipse.org/emf/2002/Ecore#//EEList":
+          return EDataType.eEList();
         case "http://www.eclipse.org/emf/2002/Ecore#//EEnumerator":
           return EDataType.eEnumerator();
+        case "http://www.eclipse.org/emf/2002/Ecore#//EFeatureMap":
+          return EDataType.eFeatureMap();
+        case "http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry":
+          return EDataType.eFeatureMapEntry();
+        case "http://www.eclipse.org/emf/2002/Ecore#//EFloat":
+          return EDataType.eFloat();
+        case "http://www.eclipse.org/emf/2002/Ecore#//EFloatObject":
+          return EDataType.eFloatObject();
+        case "http://www.eclipse.org/emf/2002/Ecore#//EInt":
+          return EDataType.eInt();
+        case "http://www.eclipse.org/emf/2002/Ecore#//EIntegerObject":
+          return EDataType.eIntegerObject();
+        case "http://www.eclipse.org/emf/2002/Ecore#//EJavaClass":
+          return EDataType.eJavaClass();
+        case "http://www.eclipse.org/emf/2002/Ecore#//EJavaObject":
+          return EDataType.eJavaObject();
+        case "http://www.eclipse.org/emf/2002/Ecore#//ELong":
+          return EDataType.eLong();
+        case "http://www.eclipse.org/emf/2002/Ecore#//ELongObject":
+          return EDataType.eLongObject();
+        case "http://www.eclipse.org/emf/2002/Ecore#//EMap":
+          return EDataType.eMap();
         case "http://www.eclipse.org/emf/2002/Ecore#//EResource":
           return EDataType.eResource();
+        case "http://www.eclipse.org/emf/2002/Ecore#//EResourceSet":
+          return EDataType.eResourceSet();
+        case "http://www.eclipse.org/emf/2002/Ecore#//EShort":
+          return EDataType.eShort();
+        case "http://www.eclipse.org/emf/2002/Ecore#//EShortObject":
+          return EDataType.eShortObject();
+        case "http://www.eclipse.org/emf/2002/Ecore#//EString":
+          return EDataType.eString();
+        case "http://www.eclipse.org/emf/2002/Ecore#//ETreeIterator":
+          return EDataType.eTreeIterator();
+        case "http://www.eclipse.org/emf/2002/Ecore#//EInvocationTargetException":
+          return EDataType.eInvocationTargetException();
         case "http://www.eclipse.org/emf/2003/XMLType#//DateTime":
           return EDataType.xmlDateTime();
         case "http://www.eclipse.org/emf/2003/XMLType#//Boolean":