[85176] Adding code generation support for new derived union list implementation.
diff --git a/deprecated/plugins/org.eclipse.uml2/src/org/eclipse/uml2/util/UML2Util.java b/deprecated/plugins/org.eclipse.uml2/src/org/eclipse/uml2/util/UML2Util.java
index d0ce66a..e9dfd8c 100644
--- a/deprecated/plugins/org.eclipse.uml2/src/org/eclipse/uml2/util/UML2Util.java
+++ b/deprecated/plugins/org.eclipse.uml2/src/org/eclipse/uml2/util/UML2Util.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: UML2Util.java,v 1.44 2005/10/19 19:44:48 khussey Exp $
+ * $Id: UML2Util.java,v 1.45 2005/10/26 21:11:24 khussey Exp $
  */
 package org.eclipse.uml2.util;
 
@@ -2942,8 +2942,10 @@
 					&& element instanceof Property
 					&& ((Property) element).isDerivedUnion()) {
 
+					EStructuralFeature eStructuralFeature = (EStructuralFeature) eModelElement;
+
 					if (DEBUG) {
-						System.out.println(getQualifiedText(eModelElement)
+						System.out.println(getQualifiedText(eStructuralFeature)
 							+ " is a union"); //$NON-NLS-1$
 					}
 
@@ -2960,15 +2962,15 @@
 										.getString(
 											"_UI_UML22EcoreConverter_ProcessUnionProperty_diagnostic", //$NON-NLS-1$
 											getMessageSubstitutions(context,
-												eModelElement)),
-									new Object[]{eModelElement}));
+												eStructuralFeature)),
+									new Object[]{eStructuralFeature}));
 						}
 
-						getEAnnotation(eModelElement, ANNOTATION_SOURCE__UNION,
-							true);
+						getEAnnotation(eStructuralFeature,
+							ANNOTATION_SOURCE__UNION, true);
 
-						((EStructuralFeature) eModelElement)
-							.setChangeable(false);
+						eStructuralFeature.setChangeable(false);
+						eStructuralFeature.setVolatile(false);
 					} else if (OPTION__REPORT.equals(options
 						.get(OPTION__UNION_PROPERTIES))
 						&& null != diagnostics) {
@@ -3896,14 +3898,14 @@
 				processSubsettingProperties(options, diagnostics, context);
 			}
 
-			if (!OPTION__IGNORE.equals(options.get(OPTION__UNION_PROPERTIES))) {
-				processUnionProperties(options, diagnostics, context);
-			}
-
 			if (!OPTION__IGNORE.equals(options.get(OPTION__DERIVED_FEATURES))) {
 				processDerivedFeatures(options, diagnostics, context);
 			}
 
+			if (!OPTION__IGNORE.equals(options.get(OPTION__UNION_PROPERTIES))) {
+				processUnionProperties(options, diagnostics, context);
+			}
+
 			if (!OPTION__IGNORE.equals(options
 				.get(OPTION__DUPLICATE_OPERATIONS))) {
 
diff --git a/plugins/org.eclipse.uml2.codegen.ecore/src/org/eclipse/uml2/codegen/ecore/genmodel/impl/GenClassImpl.java b/plugins/org.eclipse.uml2.codegen.ecore/src/org/eclipse/uml2/codegen/ecore/genmodel/impl/GenClassImpl.java
index 9fdf77b..1c49638 100644
--- a/plugins/org.eclipse.uml2.codegen.ecore/src/org/eclipse/uml2/codegen/ecore/genmodel/impl/GenClassImpl.java
+++ b/plugins/org.eclipse.uml2.codegen.ecore/src/org/eclipse/uml2/codegen/ecore/genmodel/impl/GenClassImpl.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: GenClassImpl.java,v 1.8 2005/10/13 20:27:42 khussey Exp $
+ * $Id: GenClassImpl.java,v 1.9 2005/10/26 21:11:30 khussey Exp $
  */
 package org.eclipse.uml2.codegen.ecore.genmodel.impl;
 
@@ -421,15 +421,14 @@
 						if (getExtendedGenFeatures().contains(
 							redefinedGenFeature)) {
 
-							return !UML2GenModelUtil
-								.isUnion(redefinedGenFeature)
+							return (!UML2GenModelUtil.isUnion(redefinedGenFeature) || redefinedGenFeature.isListType())
 								&& !isRedefined(redefinedGenFeature);
 						}
 					}
 				}
 
 				return !getExtendedGenFeatures().contains(genFeature)
-					&& !UML2GenModelUtil.isUnion(genFeature)
+					&& (!UML2GenModelUtil.isUnion(genFeature) || genFeature.isListType())
 					&& !isRedefined(genFeature);
 			}
 		});
@@ -439,7 +438,7 @@
 		return getImplementedGenFeatures(new GenFeatureFilter() {
 
 			public boolean accept(GenFeature genFeature) {
-				return !UML2GenModelUtil.isUnion(genFeature)
+				return (!UML2GenModelUtil.isUnion(genFeature) || genFeature.isListType())
 					&& !isRedefined(genFeature);
 			}
 		});
@@ -832,28 +831,43 @@
 		return sb.toString();
 	}
 
+	protected String getDerivedUnionListConstructor(GenFeature genFeature) {
+		StringBuffer sb = new StringBuffer();
+
+		if (genFeature.isMapType()) {
+			return super.getListConstructor(genFeature);
+		} else if (genFeature.isReferenceType()) {
+			sb.append(getGenModel().getImportedName(
+				"org.eclipse.uml2.common.util.DerivedUnionEObjectEList")); //$NON-NLS-1$
+			sb.append("("); //$NON-NLS-1$
+			sb.append(genFeature.getListItemType());
+			sb.append(".class, this, "); //$NON-NLS-1$
+			sb.append(getQualifiedFeatureID(genFeature));
+			sb.append(", "); //$NON-NLS-1$
+			sb.append(getSubsetFeatureAccessorArray(genFeature, true));
+			sb.append(")"); //$NON-NLS-1$
+		} else if (genFeature.isFeatureMapType()) {
+			return super.getListConstructor(genFeature);
+		} else { // datatype
+			return super.getListConstructor(genFeature);
+		}
+		return sb.toString();
+	}
+
 	public String getListConstructor(GenFeature genFeature) {
 
-		if (isSuperset(genFeature)
-			&& !collectGenFeatures(null, getSubsetGenFeatures(genFeature),
-				new GenFeatureFilter() {
+		if (UML2GenModelUtil.isUnion(genFeature)) {
+			return getDerivedUnionListConstructor(genFeature);
+		}
 
-					public boolean accept(GenFeature genFeature) {
-						return !genFeature.isDerived();
-					}
-				}).isEmpty()) {
+		if (isSuperset(genFeature)
+			&& !getSubsetGenFeatures(genFeature, false).isEmpty()) {
 
 			return getSupersetListConstructor(genFeature);
 		}
 
 		if (UML2GenModelUtil.isSubset(genFeature)
-			&& !collectGenFeatures(null, getSupersetGenFeatures(genFeature),
-				new GenFeatureFilter() {
-
-					public boolean accept(GenFeature genFeature) {
-						return !genFeature.isDerived();
-					}
-				}).isEmpty()) {
+			&& !getSupersetGenFeatures(genFeature, false).isEmpty()) {
 
 			return getSubsetListConstructor(genFeature);
 		}
@@ -986,6 +1000,11 @@
 	}
 
 	public List getSubsetGenFeatures(GenFeature supersetGenFeature) {
+		return getSubsetGenFeatures(supersetGenFeature, true);
+	}
+
+	public List getSubsetGenFeatures(GenFeature supersetGenFeature,
+			boolean includedDerived) {
 		Map subsetGenFeatures = new LinkedHashMap();
 
 		final EStructuralFeature supersetEcoreFeature = supersetGenFeature
@@ -995,7 +1014,8 @@
 			GenFeature genFeature = (GenFeature) i.next();
 
 			if (Generator.getSubsettedEcoreFeatures(
-				genFeature.getEcoreFeature()).contains(supersetEcoreFeature)) {
+				genFeature.getEcoreFeature()).contains(supersetEcoreFeature)
+				&& (includedDerived || !genFeature.isDerived())) {
 
 				subsetGenFeatures.put(genFeature.getName(), genFeature);
 			}
@@ -1005,24 +1025,7 @@
 	}
 
 	public List getEIsSetSubsetGenFeatures(GenFeature unionGenFeature) {
-		Map subsetGenFeatures = new LinkedHashMap();
-
-		final EStructuralFeature supersetEcoreFeature = unionGenFeature
-			.getEcoreFeature();
-
-		for (Iterator i = getAllDuplicateGenFeatures().iterator(); i.hasNext();) {
-			GenFeature genFeature = (GenFeature) i.next();
-
-			if (!UML2GenModelUtil.isUnion(genFeature)
-				&& Generator.getSubsettedEcoreFeatures(
-					genFeature.getEcoreFeature(), true).contains(
-					supersetEcoreFeature)) {
-
-				subsetGenFeatures.put(genFeature.getName(), genFeature);
-			}
-		}
-
-		return new ArrayList(subsetGenFeatures.values());
+		return getSubsetGenFeatures(unionGenFeature);
 	}
 
 	public List getSubsetGenFeatures() {
@@ -1063,6 +1066,11 @@
 	}
 
 	public String getSubsetFeatureAccessorArray(GenFeature supersetGenFeature) {
+		return getSubsetFeatureAccessorArray(supersetGenFeature, false);
+	}
+
+	public String getSubsetFeatureAccessorArray(GenFeature supersetGenFeature,
+			boolean includeDerived) {
 		StringBuffer sb = new StringBuffer();
 
 		sb.append("new "); //$NON-NLS-1$
@@ -1070,13 +1078,8 @@
 			"org.eclipse.emf.ecore.EStructuralFeature")); //$NON-NLS-1$
 		sb.append("[] {"); //$NON-NLS-1$
 
-		Iterator subsetGenFeatures = collectGenFeatures(null,
-			getSubsetGenFeatures(supersetGenFeature), new GenFeatureFilter() {
-
-				public boolean accept(GenFeature genFeature) {
-					return !genFeature.isDerived();
-				}
-			}).iterator();
+		Iterator subsetGenFeatures = getSubsetGenFeatures(supersetGenFeature,
+			includeDerived).iterator();
 
 		while (subsetGenFeatures.hasNext()) {
 			GenFeature subsetGenFeature = (GenFeature) subsetGenFeatures.next();
@@ -1095,17 +1098,17 @@
 	}
 
 	protected String getSubsetFeatureIDArray(GenFeature supersetGenFeature) {
+		return getSubsetFeatureIDArray(supersetGenFeature, false);
+	}
+
+	protected String getSubsetFeatureIDArray(GenFeature supersetGenFeature,
+			boolean includeDerived) {
 		StringBuffer sb = new StringBuffer();
 
 		sb.append("new int[] {"); //$NON-NLS-1$
 
-		Iterator subsetGenFeatures = collectGenFeatures(null,
-			getSubsetGenFeatures(supersetGenFeature), new GenFeatureFilter() {
-
-				public boolean accept(GenFeature genFeature) {
-					return !genFeature.isDerived();
-				}
-			}).iterator();
+		Iterator subsetGenFeatures = getSubsetGenFeatures(supersetGenFeature,
+			includeDerived).iterator();
 
 		while (subsetGenFeatures.hasNext()) {
 			GenFeature subsetGenFeature = (GenFeature) subsetGenFeatures.next();
@@ -1123,7 +1126,21 @@
 	}
 
 	public List getSupersetGenFeatures(GenFeature subsetGenFeature) {
-		return UML2GenModelUtil.getSubsettedGenFeatures(subsetGenFeature);
+		return getSupersetGenFeatures(subsetGenFeature, true);
+	}
+
+	public List getSupersetGenFeatures(GenFeature subsetGenFeature,
+			boolean includeDerived) {
+		return includeDerived
+			? UML2GenModelUtil.getSubsettedGenFeatures(subsetGenFeature)
+			: collectGenFeatures(null, UML2GenModelUtil
+				.getSubsettedGenFeatures(subsetGenFeature),
+				new GenFeatureFilter() {
+
+					public boolean accept(GenFeature genFeature) {
+						return !genFeature.isDerived();
+					}
+				});
 	}
 
 	public List getImplementedSupersetGenFeatures() {
@@ -1131,14 +1148,7 @@
 
 			public boolean accept(GenFeature genFeature) {
 				return isSuperset(genFeature)
-					&& !collectGenFeatures(null,
-						getSubsetGenFeatures(genFeature),
-						new GenFeatureFilter() {
-
-							public boolean accept(GenFeature genFeature) {
-								return !genFeature.isDerived();
-							}
-						}).isEmpty();
+					&& !getSubsetGenFeatures(genFeature, false).isEmpty();
 			}
 		});
 	}
@@ -1161,13 +1171,8 @@
 			"org.eclipse.emf.ecore.EStructuralFeature")); //$NON-NLS-1$
 		sb.append("[] {"); //$NON-NLS-1$
 
-		Iterator supersetGenFeatures = collectGenFeatures(null,
-			getSupersetGenFeatures(subsetGenFeature), new GenFeatureFilter() {
-
-				public boolean accept(GenFeature genFeature) {
-					return !genFeature.isDerived();
-				}
-			}).iterator();
+		Iterator supersetGenFeatures = getSupersetGenFeatures(subsetGenFeature,
+			false).iterator();
 
 		while (supersetGenFeatures.hasNext()) {
 			GenFeature supersetGenFeature = (GenFeature) supersetGenFeatures
@@ -1191,13 +1196,8 @@
 
 		sb.append("new int[] {"); //$NON-NLS-1$
 
-		Iterator supersetGenFeatures = collectGenFeatures(null,
-			getSupersetGenFeatures(subsetGenFeature), new GenFeatureFilter() {
-
-				public boolean accept(GenFeature genFeature) {
-					return !genFeature.isDerived();
-				}
-			}).iterator();
+		Iterator supersetGenFeatures = getSupersetGenFeatures(subsetGenFeature,
+			false).iterator();
 
 		while (supersetGenFeatures.hasNext()) {
 			GenFeature supersetGenFeature = (GenFeature) supersetGenFeatures
@@ -1374,13 +1374,13 @@
 
 	public boolean isESetField(GenFeature genFeature) {
 		return super.isESetField(genFeature)
-			&& !UML2GenModelUtil.isUnion(genFeature)
+			&& (!UML2GenModelUtil.isUnion(genFeature) || genFeature.isListType())
 			&& !isRedefined(genFeature);
 	}
 
 	public boolean isField(GenFeature genFeature) {
 		return super.isField(genFeature)
-			&& !UML2GenModelUtil.isUnion(genFeature)
+			&& (!UML2GenModelUtil.isUnion(genFeature) || genFeature.isListType())
 			&& !isRedefined(genFeature);
 	}
 
diff --git a/plugins/org.eclipse.uml2.codegen.ecore/src/org/eclipse/uml2/codegen/ecore/templates/model/Class.java b/plugins/org.eclipse.uml2.codegen.ecore/src/org/eclipse/uml2/codegen/ecore/templates/model/Class.java
index 8c7ec0b..665efe9 100644
--- a/plugins/org.eclipse.uml2.codegen.ecore/src/org/eclipse/uml2/codegen/ecore/templates/model/Class.java
+++ b/plugins/org.eclipse.uml2.codegen.ecore/src/org/eclipse/uml2/codegen/ecore/templates/model/Class.java
@@ -1037,297 +1037,154 @@
   protected final String TEXT_1019 = ")eResolveProxy((";
   protected final String TEXT_1020 = ")";
   protected final String TEXT_1021 = ");" + NL + "\t}" + NL;
-  protected final String TEXT_1022 = NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tprotected ";
+  protected final String TEXT_1022 = NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tpublic ";
   protected final String TEXT_1023 = " ";
-  protected final String TEXT_1024 = "Helper(";
-  protected final String TEXT_1025 = " ";
-  protected final String TEXT_1026 = ")" + NL + "\t{";
-  protected final String TEXT_1027 = NL + "\t\tsuper.";
-  protected final String TEXT_1028 = "Helper(";
-  protected final String TEXT_1029 = ");";
-  protected final String TEXT_1030 = NL + "\t\tif (eIsSet(";
-  protected final String TEXT_1031 = "())) {" + NL + "\t\t\tfor (";
-  protected final String TEXT_1032 = " i = ((";
-  protected final String TEXT_1033 = ") ";
-  protected final String TEXT_1034 = "()).basicIterator(); i.hasNext(); ) {" + NL + "\t\t\t\t";
-  protected final String TEXT_1035 = ".add(i.next());" + NL + "\t\t\t}" + NL + "\t\t}";
-  protected final String TEXT_1036 = NL + "\t\t";
-  protected final String TEXT_1037 = " ";
-  protected final String TEXT_1038 = " = ";
-  protected final String TEXT_1039 = "();" + NL + "\t\tif (!";
-  protected final String TEXT_1040 = ".isEmpty()) {" + NL + "\t\t\tfor (";
-  protected final String TEXT_1041 = " i = ((";
-  protected final String TEXT_1042 = ") ";
-  protected final String TEXT_1043 = ").basicIterator(); i.hasNext(); ) {" + NL + "\t\t\t\t";
-  protected final String TEXT_1044 = ".add(i.next());" + NL + "\t\t\t}" + NL + "\t\t}";
-  protected final String TEXT_1045 = NL + "\t\tif (eIsSet(";
-  protected final String TEXT_1046 = "())) {" + NL + "\t\t\t";
-  protected final String TEXT_1047 = ".addAll(";
-  protected final String TEXT_1048 = "());" + NL + "\t\t}";
-  protected final String TEXT_1049 = NL + "\t\t";
-  protected final String TEXT_1050 = " ";
-  protected final String TEXT_1051 = " = ";
-  protected final String TEXT_1052 = "();" + NL + "\t\tif (!";
-  protected final String TEXT_1053 = ".isEmpty()) {" + NL + "\t\t\t";
-  protected final String TEXT_1054 = ".addAll(";
-  protected final String TEXT_1055 = ");" + NL + "\t\t}";
-  protected final String TEXT_1056 = NL + "\t\t";
-  protected final String TEXT_1057 = " ";
-  protected final String TEXT_1058 = " = ";
+  protected final String TEXT_1024 = "()" + NL + "\t{";
+  protected final String TEXT_1025 = NL + "\t\tif (eIsSet(";
+  protected final String TEXT_1026 = "())) {" + NL + "\t\t\treturn ";
+  protected final String TEXT_1027 = "();" + NL + "\t\t}";
+  protected final String TEXT_1028 = NL + "\t\t";
+  protected final String TEXT_1029 = " ";
+  protected final String TEXT_1030 = " = ";
+  protected final String TEXT_1031 = "();" + NL + "\t\tif (";
+  protected final String TEXT_1032 = " != null) {" + NL + "\t\t\treturn ";
+  protected final String TEXT_1033 = ";" + NL + "\t\t}";
+  protected final String TEXT_1034 = NL + "\t\treturn ";
+  protected final String TEXT_1035 = "super.";
+  protected final String TEXT_1036 = "()";
+  protected final String TEXT_1037 = "null";
+  protected final String TEXT_1038 = ";" + NL + "\t}" + NL;
+  protected final String TEXT_1039 = NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tpublic ";
+  protected final String TEXT_1040 = " ";
+  protected final String TEXT_1041 = "()" + NL + "\t{";
+  protected final String TEXT_1042 = NL + "\t\treturn ";
+  protected final String TEXT_1043 = "();";
+  protected final String TEXT_1044 = NL + "\t\treturn new ";
+  protected final String TEXT_1045 = ".UnmodifiableEList(this, ";
+  protected final String TEXT_1046 = "null";
+  protected final String TEXT_1047 = "()";
+  protected final String TEXT_1048 = ", 0, ";
+  protected final String TEXT_1049 = ".EMPTY_LIST.toArray());";
+  protected final String TEXT_1050 = NL + "\t\treturn null;";
+  protected final String TEXT_1051 = NL + "\t\treturn ";
+  protected final String TEXT_1052 = "();";
+  protected final String TEXT_1053 = NL + "\t}" + NL;
+  protected final String TEXT_1054 = NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tpublic ";
+  protected final String TEXT_1055 = " basicGet";
+  protected final String TEXT_1056 = "()" + NL + "\t{";
+  protected final String TEXT_1057 = NL + "\t\treturn null;";
+  protected final String TEXT_1058 = NL + "\t\treturn ";
   protected final String TEXT_1059 = "basicGet";
-  protected final String TEXT_1060 = "();" + NL + "\t\tif (";
-  protected final String TEXT_1061 = " != null) {" + NL + "\t\t\t";
-  protected final String TEXT_1062 = ".add(";
-  protected final String TEXT_1063 = ");" + NL + "\t\t}";
-  protected final String TEXT_1064 = NL + "\t\treturn ";
-  protected final String TEXT_1065 = ";" + NL + "\t}" + NL;
-  protected final String TEXT_1066 = NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tpublic ";
-  protected final String TEXT_1067 = " ";
-  protected final String TEXT_1068 = "()" + NL + "\t{";
-  protected final String TEXT_1069 = NL + "\t\t";
-  protected final String TEXT_1070 = " cache = getCacheAdapter();" + NL + "\t\tif (cache != null) {";
-  protected final String TEXT_1071 = NL + "\t\t\ttry {" + NL + "\t\t\t\t";
-  protected final String TEXT_1072 = " method = getClass().getMethod(\"";
-  protected final String TEXT_1073 = "\", null);";
-  protected final String TEXT_1074 = NL + "\t\t\t\t";
-  protected final String TEXT_1075 = " ";
-  protected final String TEXT_1076 = " = (";
-  protected final String TEXT_1077 = ") cache.get(eResource(), this, method);" + NL + "\t\t\t\tif (";
-  protected final String TEXT_1078 = " == null) {" + NL + "\t\t\t\t\t";
-  protected final String TEXT_1079 = " union = ";
-  protected final String TEXT_1080 = "Helper(new ";
-  protected final String TEXT_1081 = "());" + NL + "\t\t\t\t\tcache.put(eResource(), this, method, ";
-  protected final String TEXT_1082 = " = new ";
-  protected final String TEXT_1083 = "(this, ";
-  protected final String TEXT_1084 = "null";
-  protected final String TEXT_1085 = "()";
-  protected final String TEXT_1086 = ", union.size(), union.toArray()));" + NL + "\t\t\t\t}" + NL + "\t\t\t\treturn ";
-  protected final String TEXT_1087 = ";" + NL + "\t\t\t} catch (";
-  protected final String TEXT_1088 = " nsme) {" + NL + "\t\t\t\t// ignore" + NL + "\t\t\t}";
-  protected final String TEXT_1089 = NL + "\t\t\t";
-  protected final String TEXT_1090 = " ";
-  protected final String TEXT_1091 = " = (";
-  protected final String TEXT_1092 = ") cache.get(eResource(), this, ";
-  protected final String TEXT_1093 = "());" + NL + "\t\t\tif (";
-  protected final String TEXT_1094 = " == null) {" + NL + "\t\t\t\t";
-  protected final String TEXT_1095 = " union = ";
-  protected final String TEXT_1096 = "Helper(new ";
-  protected final String TEXT_1097 = "());" + NL + "\t\t\t\tcache.put(eResource(), this, ";
-  protected final String TEXT_1098 = "(), ";
-  protected final String TEXT_1099 = " = new ";
-  protected final String TEXT_1100 = "(this, ";
-  protected final String TEXT_1101 = "null";
-  protected final String TEXT_1102 = "()";
-  protected final String TEXT_1103 = ", union.size(), union.toArray()));" + NL + "\t\t\t}" + NL + "\t\t\treturn ";
-  protected final String TEXT_1104 = ";";
-  protected final String TEXT_1105 = NL + "\t\t}";
-  protected final String TEXT_1106 = NL + "\t\t";
-  protected final String TEXT_1107 = " union = ";
-  protected final String TEXT_1108 = "Helper(new ";
-  protected final String TEXT_1109 = "());" + NL + "\t\treturn new ";
-  protected final String TEXT_1110 = "(this, ";
-  protected final String TEXT_1111 = "null";
-  protected final String TEXT_1112 = "()";
-  protected final String TEXT_1113 = ", union.size(), union.toArray());" + NL + "\t}" + NL;
-  protected final String TEXT_1114 = NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tpublic ";
-  protected final String TEXT_1115 = " ";
-  protected final String TEXT_1116 = "()" + NL + "\t{";
-  protected final String TEXT_1117 = NL + "\t\tif (eIsSet(";
-  protected final String TEXT_1118 = "())) {" + NL + "\t\t\treturn ";
-  protected final String TEXT_1119 = "();" + NL + "\t\t}";
-  protected final String TEXT_1120 = NL + "\t\t";
-  protected final String TEXT_1121 = " ";
-  protected final String TEXT_1122 = " = ";
-  protected final String TEXT_1123 = "();" + NL + "\t\tif (";
-  protected final String TEXT_1124 = " != null) {" + NL + "\t\t\treturn ";
-  protected final String TEXT_1125 = ";" + NL + "\t\t}";
-  protected final String TEXT_1126 = NL + "\t\treturn ";
-  protected final String TEXT_1127 = "super.";
-  protected final String TEXT_1128 = "()";
-  protected final String TEXT_1129 = "null";
-  protected final String TEXT_1130 = ";" + NL + "\t}" + NL;
-  protected final String TEXT_1131 = NL;
-  protected final String TEXT_1132 = NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tpublic ";
-  protected final String TEXT_1133 = " create";
-  protected final String TEXT_1134 = "(";
-  protected final String TEXT_1135 = " eClass) {" + NL + "\t\t";
-  protected final String TEXT_1136 = " new";
-  protected final String TEXT_1137 = " = (";
-  protected final String TEXT_1138 = ") eClass.getEPackage().getEFactoryInstance().create(eClass);" + NL + "\t\tif (eNotificationRequired()) {" + NL + "\t\t\teNotify(new ";
-  protected final String TEXT_1139 = "(this, 0, ";
-  protected final String TEXT_1140 = ", null, new";
-  protected final String TEXT_1141 = "));" + NL + "\t\t}";
-  protected final String TEXT_1142 = NL + "\t\t";
-  protected final String TEXT_1143 = "().add(new";
-  protected final String TEXT_1144 = ");";
-  protected final String TEXT_1145 = NL + "\t\tset";
-  protected final String TEXT_1146 = "(new";
-  protected final String TEXT_1147 = ");";
-  protected final String TEXT_1148 = NL + "\t\treturn new";
-  protected final String TEXT_1149 = ";" + NL + "\t}" + NL;
-  protected final String TEXT_1150 = NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tpublic ";
-  protected final String TEXT_1151 = " create";
-  protected final String TEXT_1152 = "() {" + NL + "\t\t";
-  protected final String TEXT_1153 = " new";
-  protected final String TEXT_1154 = " = ";
-  protected final String TEXT_1155 = ".eINSTANCE.create";
-  protected final String TEXT_1156 = "();" + NL + "\t\tif (eNotificationRequired()) {" + NL + "\t\t\teNotify(new ";
-  protected final String TEXT_1157 = "(this, 0, ";
-  protected final String TEXT_1158 = ", null, new";
-  protected final String TEXT_1159 = "));" + NL + "\t\t}";
+  protected final String TEXT_1060 = "();";
+  protected final String TEXT_1061 = NL + "\t}" + NL;
+  protected final String TEXT_1062 = NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tpublic ";
+  protected final String TEXT_1063 = " basicSet";
+  protected final String TEXT_1064 = "(";
+  protected final String TEXT_1065 = " new";
+  protected final String TEXT_1066 = ", ";
+  protected final String TEXT_1067 = " msgs)" + NL + "\t{";
+  protected final String TEXT_1068 = NL + "\t\tthrow new UnsupportedOperationException();";
+  protected final String TEXT_1069 = NL + "\t\tif (new";
+  protected final String TEXT_1070 = " != null && !(new";
+  protected final String TEXT_1071 = " instanceof ";
+  protected final String TEXT_1072 = ")) {" + NL + "\t\t\tthrow new IllegalArgumentException(String.valueOf(new";
+  protected final String TEXT_1073 = "));" + NL + "\t\t}";
+  protected final String TEXT_1074 = NL + "\t\treturn basicSet";
+  protected final String TEXT_1075 = "(";
+  protected final String TEXT_1076 = "(";
+  protected final String TEXT_1077 = ") ";
+  protected final String TEXT_1078 = "new";
+  protected final String TEXT_1079 = ", msgs);";
+  protected final String TEXT_1080 = NL + "\t\tset";
+  protected final String TEXT_1081 = "(";
+  protected final String TEXT_1082 = "(";
+  protected final String TEXT_1083 = ") ";
+  protected final String TEXT_1084 = "new";
+  protected final String TEXT_1085 = ");" + NL + "\t\treturn msgs;";
+  protected final String TEXT_1086 = NL + "\t}" + NL;
+  protected final String TEXT_1087 = NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tpublic void set";
+  protected final String TEXT_1088 = "(";
+  protected final String TEXT_1089 = " new";
+  protected final String TEXT_1090 = ")" + NL + "\t{";
+  protected final String TEXT_1091 = NL + "\t\tthrow new UnsupportedOperationException();";
+  protected final String TEXT_1092 = NL + "\t\tif (new";
+  protected final String TEXT_1093 = " != null && !(new";
+  protected final String TEXT_1094 = " instanceof ";
+  protected final String TEXT_1095 = ")) {" + NL + "\t\t\tthrow new IllegalArgumentException(String.valueOf(new";
+  protected final String TEXT_1096 = "));" + NL + "\t\t}";
+  protected final String TEXT_1097 = NL + "\t\tset";
+  protected final String TEXT_1098 = "(";
+  protected final String TEXT_1099 = "(";
+  protected final String TEXT_1100 = ") ";
+  protected final String TEXT_1101 = "new";
+  protected final String TEXT_1102 = ");";
+  protected final String TEXT_1103 = NL + "\t}" + NL;
+  protected final String TEXT_1104 = NL;
+  protected final String TEXT_1105 = NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tpublic ";
+  protected final String TEXT_1106 = " create";
+  protected final String TEXT_1107 = "(";
+  protected final String TEXT_1108 = " eClass) {" + NL + "\t\t";
+  protected final String TEXT_1109 = " new";
+  protected final String TEXT_1110 = " = (";
+  protected final String TEXT_1111 = ") eClass.getEPackage().getEFactoryInstance().create(eClass);" + NL + "\t\tif (eNotificationRequired()) {" + NL + "\t\t\teNotify(new ";
+  protected final String TEXT_1112 = "(this, 0, ";
+  protected final String TEXT_1113 = ", null, new";
+  protected final String TEXT_1114 = "));" + NL + "\t\t}";
+  protected final String TEXT_1115 = NL + "\t\t";
+  protected final String TEXT_1116 = "().add(new";
+  protected final String TEXT_1117 = ");";
+  protected final String TEXT_1118 = NL + "\t\tset";
+  protected final String TEXT_1119 = "(new";
+  protected final String TEXT_1120 = ");";
+  protected final String TEXT_1121 = NL + "\t\treturn new";
+  protected final String TEXT_1122 = ";" + NL + "\t}" + NL;
+  protected final String TEXT_1123 = NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tpublic ";
+  protected final String TEXT_1124 = " create";
+  protected final String TEXT_1125 = "() {" + NL + "\t\t";
+  protected final String TEXT_1126 = " new";
+  protected final String TEXT_1127 = " = ";
+  protected final String TEXT_1128 = ".eINSTANCE.create";
+  protected final String TEXT_1129 = "();" + NL + "\t\tif (eNotificationRequired()) {" + NL + "\t\t\teNotify(new ";
+  protected final String TEXT_1130 = "(this, 0, ";
+  protected final String TEXT_1131 = ", null, new";
+  protected final String TEXT_1132 = "));" + NL + "\t\t}";
+  protected final String TEXT_1133 = NL + "\t\t";
+  protected final String TEXT_1134 = "().add(new";
+  protected final String TEXT_1135 = ");";
+  protected final String TEXT_1136 = NL + "\t\tset";
+  protected final String TEXT_1137 = "(new";
+  protected final String TEXT_1138 = ");";
+  protected final String TEXT_1139 = NL + "\t\treturn new";
+  protected final String TEXT_1140 = ";" + NL + "\t}" + NL;
+  protected final String TEXT_1141 = NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tpublic ";
+  protected final String TEXT_1142 = " get";
+  protected final String TEXT_1143 = "(";
+  protected final String TEXT_1144 = " ";
+  protected final String TEXT_1145 = ") {" + NL + "\t\tfor (";
+  protected final String TEXT_1146 = " i = ";
+  protected final String TEXT_1147 = "().iterator(); i.hasNext(); ) {" + NL + "\t\t\t";
+  protected final String TEXT_1148 = " ";
+  protected final String TEXT_1149 = " = (";
+  protected final String TEXT_1150 = ") i.next();" + NL + "\t\t\tif (";
+  protected final String TEXT_1151 = ".equals(";
+  protected final String TEXT_1152 = ".";
+  protected final String TEXT_1153 = "())) {" + NL + "\t\t\t\treturn ";
+  protected final String TEXT_1154 = ";" + NL + "\t\t\t}" + NL + "\t\t}" + NL + "\t\treturn null;" + NL + "\t}" + NL;
+  protected final String TEXT_1155 = NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tpublic ";
+  protected final String TEXT_1156 = " ";
+  protected final String TEXT_1157 = "(";
+  protected final String TEXT_1158 = ")";
+  protected final String TEXT_1159 = NL + "\t{";
   protected final String TEXT_1160 = NL + "\t\t";
-  protected final String TEXT_1161 = "().add(new";
+  protected final String TEXT_1161 = "(";
   protected final String TEXT_1162 = ");";
-  protected final String TEXT_1163 = NL + "\t\tset";
-  protected final String TEXT_1164 = "(new";
-  protected final String TEXT_1165 = ");";
-  protected final String TEXT_1166 = NL + "\t\treturn new";
-  protected final String TEXT_1167 = ";" + NL + "\t}" + NL;
-  protected final String TEXT_1168 = NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tpublic ";
-  protected final String TEXT_1169 = " get";
-  protected final String TEXT_1170 = "(";
-  protected final String TEXT_1171 = " ";
-  protected final String TEXT_1172 = ") {" + NL + "\t\tfor (";
-  protected final String TEXT_1173 = " i = ";
-  protected final String TEXT_1174 = "().iterator(); i.hasNext(); ) {" + NL + "\t\t\t";
-  protected final String TEXT_1175 = " ";
-  protected final String TEXT_1176 = " = (";
-  protected final String TEXT_1177 = ") i.next();" + NL + "\t\t\tif (";
-  protected final String TEXT_1178 = ".equals(";
-  protected final String TEXT_1179 = ".";
-  protected final String TEXT_1180 = "())) {" + NL + "\t\t\t\treturn ";
-  protected final String TEXT_1181 = ";" + NL + "\t\t\t}" + NL + "\t\t}" + NL + "\t\treturn null;" + NL + "\t}" + NL;
-  protected final String TEXT_1182 = NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tpublic ";
-  protected final String TEXT_1183 = " ";
-  protected final String TEXT_1184 = "()" + NL + "\t{";
-  protected final String TEXT_1185 = NL + "\t\treturn ";
-  protected final String TEXT_1186 = "();";
-  protected final String TEXT_1187 = NL + "\t\treturn new ";
-  protected final String TEXT_1188 = ".UnmodifiableEList(this, ";
-  protected final String TEXT_1189 = "null";
-  protected final String TEXT_1190 = "()";
-  protected final String TEXT_1191 = ", 0, ";
-  protected final String TEXT_1192 = ".EMPTY_LIST.toArray());";
-  protected final String TEXT_1193 = NL + "\t\treturn null;";
-  protected final String TEXT_1194 = NL + "\t\treturn ";
-  protected final String TEXT_1195 = "();";
-  protected final String TEXT_1196 = NL + "\t}" + NL;
-  protected final String TEXT_1197 = NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tpublic ";
-  protected final String TEXT_1198 = " basicGet";
-  protected final String TEXT_1199 = "()" + NL + "\t{";
-  protected final String TEXT_1200 = NL + "\t\treturn null;";
-  protected final String TEXT_1201 = NL + "\t\treturn ";
-  protected final String TEXT_1202 = "basicGet";
-  protected final String TEXT_1203 = "();";
-  protected final String TEXT_1204 = NL + "\t}" + NL;
-  protected final String TEXT_1205 = NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tpublic ";
-  protected final String TEXT_1206 = " basicSet";
-  protected final String TEXT_1207 = "(";
-  protected final String TEXT_1208 = " new";
-  protected final String TEXT_1209 = ", ";
-  protected final String TEXT_1210 = " msgs)" + NL + "\t{";
-  protected final String TEXT_1211 = NL + "\t\tthrow new UnsupportedOperationException();";
-  protected final String TEXT_1212 = NL + "\t\tif (new";
-  protected final String TEXT_1213 = " != null && !(new";
-  protected final String TEXT_1214 = " instanceof ";
-  protected final String TEXT_1215 = ")) {" + NL + "\t\t\tthrow new IllegalArgumentException(String.valueOf(new";
-  protected final String TEXT_1216 = "));" + NL + "\t\t}";
-  protected final String TEXT_1217 = NL + "\t\treturn basicSet";
-  protected final String TEXT_1218 = "(";
-  protected final String TEXT_1219 = "(";
-  protected final String TEXT_1220 = ") ";
-  protected final String TEXT_1221 = "new";
-  protected final String TEXT_1222 = ", msgs);";
-  protected final String TEXT_1223 = NL + "\t\tset";
-  protected final String TEXT_1224 = "(";
-  protected final String TEXT_1225 = "(";
-  protected final String TEXT_1226 = ") ";
-  protected final String TEXT_1227 = "new";
-  protected final String TEXT_1228 = ");" + NL + "\t\treturn msgs;";
-  protected final String TEXT_1229 = NL + "\t}" + NL;
-  protected final String TEXT_1230 = NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tpublic void set";
-  protected final String TEXT_1231 = "(";
-  protected final String TEXT_1232 = " new";
-  protected final String TEXT_1233 = ")" + NL + "\t{";
-  protected final String TEXT_1234 = NL + "\t\tthrow new UnsupportedOperationException();";
-  protected final String TEXT_1235 = NL + "\t\tif (new";
-  protected final String TEXT_1236 = " != null && !(new";
-  protected final String TEXT_1237 = " instanceof ";
-  protected final String TEXT_1238 = ")) {" + NL + "\t\t\tthrow new IllegalArgumentException(String.valueOf(new";
-  protected final String TEXT_1239 = "));" + NL + "\t\t}";
-  protected final String TEXT_1240 = NL + "\t\tset";
-  protected final String TEXT_1241 = "(";
-  protected final String TEXT_1242 = "(";
-  protected final String TEXT_1243 = ") ";
-  protected final String TEXT_1244 = "new";
-  protected final String TEXT_1245 = ");";
-  protected final String TEXT_1246 = NL + "\t}" + NL;
-  protected final String TEXT_1247 = NL;
-  protected final String TEXT_1248 = NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tpublic ";
-  protected final String TEXT_1249 = " create";
-  protected final String TEXT_1250 = "(";
-  protected final String TEXT_1251 = " eClass) {" + NL + "\t\t";
-  protected final String TEXT_1252 = " new";
-  protected final String TEXT_1253 = " = (";
-  protected final String TEXT_1254 = ") eClass.getEPackage().getEFactoryInstance().create(eClass);" + NL + "\t\tif (eNotificationRequired()) {" + NL + "\t\t\teNotify(new ";
-  protected final String TEXT_1255 = "(this, 0, ";
-  protected final String TEXT_1256 = ", null, new";
-  protected final String TEXT_1257 = "));" + NL + "\t\t}";
-  protected final String TEXT_1258 = NL + "\t\t";
-  protected final String TEXT_1259 = "().add(new";
-  protected final String TEXT_1260 = ");";
-  protected final String TEXT_1261 = NL + "\t\tset";
-  protected final String TEXT_1262 = "(new";
-  protected final String TEXT_1263 = ");";
-  protected final String TEXT_1264 = NL + "\t\treturn new";
-  protected final String TEXT_1265 = ";" + NL + "\t}" + NL;
-  protected final String TEXT_1266 = NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tpublic ";
-  protected final String TEXT_1267 = " create";
-  protected final String TEXT_1268 = "() {" + NL + "\t\t";
-  protected final String TEXT_1269 = " new";
-  protected final String TEXT_1270 = " = ";
-  protected final String TEXT_1271 = ".eINSTANCE.create";
-  protected final String TEXT_1272 = "();" + NL + "\t\tif (eNotificationRequired()) {" + NL + "\t\t\teNotify(new ";
-  protected final String TEXT_1273 = "(this, 0, ";
-  protected final String TEXT_1274 = ", null, new";
-  protected final String TEXT_1275 = "));" + NL + "\t\t}";
-  protected final String TEXT_1276 = NL + "\t\t";
-  protected final String TEXT_1277 = "().add(new";
-  protected final String TEXT_1278 = ");";
-  protected final String TEXT_1279 = NL + "\t\tset";
-  protected final String TEXT_1280 = "(new";
-  protected final String TEXT_1281 = ");";
-  protected final String TEXT_1282 = NL + "\t\treturn new";
-  protected final String TEXT_1283 = ";" + NL + "\t}" + NL;
-  protected final String TEXT_1284 = NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tpublic ";
-  protected final String TEXT_1285 = " get";
-  protected final String TEXT_1286 = "(";
-  protected final String TEXT_1287 = " ";
-  protected final String TEXT_1288 = ") {" + NL + "\t\tfor (";
-  protected final String TEXT_1289 = " i = ";
-  protected final String TEXT_1290 = "().iterator(); i.hasNext(); ) {" + NL + "\t\t\t";
-  protected final String TEXT_1291 = " ";
-  protected final String TEXT_1292 = " = (";
-  protected final String TEXT_1293 = ") i.next();" + NL + "\t\t\tif (";
-  protected final String TEXT_1294 = ".equals(";
-  protected final String TEXT_1295 = ".";
-  protected final String TEXT_1296 = "())) {" + NL + "\t\t\t\treturn ";
-  protected final String TEXT_1297 = ";" + NL + "\t\t\t}" + NL + "\t\t}" + NL + "\t\treturn null;" + NL + "\t}" + NL;
-  protected final String TEXT_1298 = NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tpublic ";
-  protected final String TEXT_1299 = " ";
-  protected final String TEXT_1300 = "(";
-  protected final String TEXT_1301 = ")";
-  protected final String TEXT_1302 = NL + "\t{";
-  protected final String TEXT_1303 = NL + "\t\t";
-  protected final String TEXT_1304 = "(";
-  protected final String TEXT_1305 = ");";
-  protected final String TEXT_1306 = NL + "\t\tthrow new UnsupportedOperationException();";
-  protected final String TEXT_1307 = NL + "\t\treturn ";
-  protected final String TEXT_1308 = "(";
-  protected final String TEXT_1309 = ");";
-  protected final String TEXT_1310 = NL + "\t}" + NL;
-  protected final String TEXT_1311 = NL + "} //";
-  protected final String TEXT_1312 = NL;
+  protected final String TEXT_1163 = NL + "\t\tthrow new UnsupportedOperationException();";
+  protected final String TEXT_1164 = NL + "\t\treturn ";
+  protected final String TEXT_1165 = "(";
+  protected final String TEXT_1166 = ");";
+  protected final String TEXT_1167 = NL + "\t}" + NL;
+  protected final String TEXT_1168 = NL + "} //";
+  protected final String TEXT_1169 = NL;
 
   public String generate(Object argument)
   {
@@ -2922,7 +2779,7 @@
     stringBuffer.append(TEXT_716);
     //Class/implementedGenOperation.override.javajetinc
     }//for
-    if (!genModel.isReflectiveDelegation() && !genClass.getEInverseAddGenFeatures().isEmpty()) {
+    if (!genModel.isReflectiveDelegation() && genClass.implementsAny(genClass.getEInverseAddGenFeatures())) {
     stringBuffer.append(TEXT_717);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.notify.NotificationChain"));
     stringBuffer.append(TEXT_718);
@@ -2986,7 +2843,7 @@
     }
     stringBuffer.append(TEXT_746);
     }
-    if (!genModel.isReflectiveDelegation() && !genClass.getEInverseRemoveGenFeatures().isEmpty()) {
+    if (!genModel.isReflectiveDelegation() && genClass.implementsAny(genClass.getEInverseRemoveGenFeatures())) {
     stringBuffer.append(TEXT_747);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.notify.NotificationChain"));
     stringBuffer.append(TEXT_748);
@@ -3038,7 +2895,7 @@
     }
     stringBuffer.append(TEXT_770);
     }
-    if (!genModel.isReflectiveDelegation() && !genClass.getEBasicRemoveFromContainerGenFeatures().isEmpty()) {
+    if (!genModel.isReflectiveDelegation() && genClass.implementsAny(genClass.getEBasicRemoveFromContainerGenFeatures())) {
     stringBuffer.append(TEXT_771);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.notify.NotificationChain"));
     stringBuffer.append(TEXT_772);
@@ -3056,7 +2913,7 @@
     }
     stringBuffer.append(TEXT_778);
     }
-    if (!genModel.isReflectiveDelegation() && !genClass.getAllGenFeatures().isEmpty()) {
+    if (!genModel.isReflectiveDelegation() && !genClass.getImplementedGenFeatures().isEmpty()) {
     stringBuffer.append(TEXT_779);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EStructuralFeature"));
     stringBuffer.append(TEXT_780);
@@ -3102,7 +2959,7 @@
     }
     stringBuffer.append(TEXT_799);
     }
-    if (!genModel.isReflectiveDelegation() && !genClass.getESetGenFeatures().isEmpty()) {
+    if (!genModel.isReflectiveDelegation() && genClass.implementsAny(genClass.getESetGenFeatures())) {
     stringBuffer.append(TEXT_800);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EStructuralFeature"));
     stringBuffer.append(TEXT_801);
@@ -3202,7 +3059,7 @@
     }
     stringBuffer.append(TEXT_846);
     }
-    if (!genModel.isReflectiveDelegation() && !genClass.getAllGenFeatures().isEmpty()) {
+    if (!genModel.isReflectiveDelegation() && !genClass.getImplementedGenFeatures().isEmpty()) {
     stringBuffer.append(TEXT_847);
     stringBuffer.append(TEXT_848);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EStructuralFeature"));
@@ -3627,650 +3484,338 @@
     stringBuffer.append(TEXT_1021);
     }
     } else if (genFeature.isGet()) {
-    if (genFeature.isListType()) {
+    if (!genFeature.isListType()) {
     stringBuffer.append(TEXT_1022);
     stringBuffer.append(genFeature.getImportedType());
     stringBuffer.append(TEXT_1023);
     stringBuffer.append(genFeature.getGetAccessor());
     stringBuffer.append(TEXT_1024);
-    stringBuffer.append(genFeature.getImportedType());
-    stringBuffer.append(TEXT_1025);
-    stringBuffer.append(genFeature.getSafeName());
-    stringBuffer.append(TEXT_1026);
-    if (genClass.getExtendedGenFeatures().contains(genFeature)) {
-    stringBuffer.append(TEXT_1027);
-    stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_1028);
-    stringBuffer.append(genFeature.getSafeName());
-    stringBuffer.append(TEXT_1029);
-    }
-    for (Iterator j = UML2GenModelUtil.getSubsetGenFeatures(genClass, genFeature).iterator(); j.hasNext();) { GenFeature subsetGenFeature = (GenFeature) j.next();
-    if (!genClass.getExtendedGenFeatures().contains(subsetGenFeature)) {
-    if (subsetGenFeature.isListType()) {
-    if (subsetGenFeature.isResolveProxies() || UML2GenModelUtil.isUnion(subsetGenFeature)) {
-    if (genClass.isField(subsetGenFeature)) {
-    stringBuffer.append(TEXT_1030);
-    stringBuffer.append(subsetGenFeature.getQualifiedFeatureAccessorName());
-    stringBuffer.append(TEXT_1031);
-    stringBuffer.append(genModel.getImportedName("java.util.Iterator"));
-    stringBuffer.append(TEXT_1032);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.InternalEList"));
-    stringBuffer.append(TEXT_1033);
-    stringBuffer.append(subsetGenFeature.getGetAccessor());
-    stringBuffer.append(TEXT_1034);
-    stringBuffer.append(genFeature.getSafeName());
-    stringBuffer.append(TEXT_1035);
-    } else {
-    stringBuffer.append(TEXT_1036);
-    stringBuffer.append(subsetGenFeature.getImportedType());
-    stringBuffer.append(TEXT_1037);
-    stringBuffer.append(subsetGenFeature.getSafeName());
-    stringBuffer.append(TEXT_1038);
-    stringBuffer.append(subsetGenFeature.getGetAccessor());
-    stringBuffer.append(TEXT_1039);
-    stringBuffer.append(subsetGenFeature.getSafeName());
-    stringBuffer.append(TEXT_1040);
-    stringBuffer.append(genModel.getImportedName("java.util.Iterator"));
-    stringBuffer.append(TEXT_1041);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.InternalEList"));
-    stringBuffer.append(TEXT_1042);
-    stringBuffer.append(subsetGenFeature.getSafeName());
-    stringBuffer.append(TEXT_1043);
-    stringBuffer.append(genFeature.getSafeName());
-    stringBuffer.append(TEXT_1044);
-    }
-    } else {
-    if (genClass.isField(subsetGenFeature)) {
-    stringBuffer.append(TEXT_1045);
-    stringBuffer.append(subsetGenFeature.getQualifiedFeatureAccessorName());
-    stringBuffer.append(TEXT_1046);
-    stringBuffer.append(genFeature.getSafeName());
-    stringBuffer.append(TEXT_1047);
-    stringBuffer.append(subsetGenFeature.getGetAccessor());
-    stringBuffer.append(TEXT_1048);
-    } else {
-    stringBuffer.append(TEXT_1049);
-    stringBuffer.append(subsetGenFeature.getImportedType());
-    stringBuffer.append(TEXT_1050);
-    stringBuffer.append(subsetGenFeature.getSafeName());
-    stringBuffer.append(TEXT_1051);
-    stringBuffer.append(subsetGenFeature.getGetAccessor());
-    stringBuffer.append(TEXT_1052);
-    stringBuffer.append(subsetGenFeature.getSafeName());
-    stringBuffer.append(TEXT_1053);
-    stringBuffer.append(genFeature.getSafeName());
-    stringBuffer.append(TEXT_1054);
-    stringBuffer.append(subsetGenFeature.getSafeName());
-    stringBuffer.append(TEXT_1055);
-    }
-    }
-    } else {
-    stringBuffer.append(TEXT_1056);
-    stringBuffer.append(subsetGenFeature.getImportedType());
-    stringBuffer.append(TEXT_1057);
-    stringBuffer.append(subsetGenFeature.getSafeName());
-    stringBuffer.append(TEXT_1058);
-    if (subsetGenFeature.isBasicGet()) {
-    stringBuffer.append(TEXT_1059);
-    stringBuffer.append(subsetGenFeature.getAccessorName());
-    } else {
-    stringBuffer.append(subsetGenFeature.getGetAccessor());
-    }
-    stringBuffer.append(TEXT_1060);
-    stringBuffer.append(subsetGenFeature.getSafeName());
-    stringBuffer.append(TEXT_1061);
-    stringBuffer.append(genFeature.getSafeName());
-    stringBuffer.append(TEXT_1062);
-    stringBuffer.append(subsetGenFeature.getSafeName());
-    stringBuffer.append(TEXT_1063);
-    }
-    }
-    }
-    stringBuffer.append(TEXT_1064);
-    stringBuffer.append(genFeature.getSafeName());
-    stringBuffer.append(TEXT_1065);
-    if (!genClass.getExtendedGenFeatures().contains(genFeature)) {
-    stringBuffer.append(TEXT_1066);
-    stringBuffer.append(genFeature.getImportedType());
-    stringBuffer.append(TEXT_1067);
-    stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_1068);
-    if (UML2GenModelUtil.isCacheAdapterSupport(genModel)) {
-    stringBuffer.append(TEXT_1069);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.uml2.common.util.CacheAdapter"));
-    stringBuffer.append(TEXT_1070);
-    if (UML2GenModelUtil.isDuplicate(genFeature) && !UML2GenModelUtil.isRedefinition(genFeature)) {
-    stringBuffer.append(TEXT_1071);
-    stringBuffer.append(genModel.getImportedName("java.lang.reflect.Method"));
-    stringBuffer.append(TEXT_1072);
-    stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_1073);
-    stringBuffer.append(genModel.getNonNLS());
-    stringBuffer.append(TEXT_1074);
-    stringBuffer.append(genFeature.getImportedType());
-    stringBuffer.append(TEXT_1075);
-    stringBuffer.append(genFeature.getSafeName());
-    stringBuffer.append(TEXT_1076);
-    stringBuffer.append(genFeature.getImportedType());
-    stringBuffer.append(TEXT_1077);
-    stringBuffer.append(genFeature.getSafeName());
-    stringBuffer.append(TEXT_1078);
-    stringBuffer.append(genModel.getImportedName("java.util.List"));
-    stringBuffer.append(TEXT_1079);
-    stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_1080);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.util.UniqueEList"));
-    stringBuffer.append(TEXT_1081);
-    stringBuffer.append(genFeature.getSafeName());
-    stringBuffer.append(TEXT_1082);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.uml2.common.util.UnionEObjectEList"));
-    stringBuffer.append(TEXT_1083);
-    if (UML2GenModelUtil.isDuplicate(genFeature) && !UML2GenModelUtil.isRedefinition(genFeature)) {
-    stringBuffer.append(TEXT_1084);
-    } else {
-    stringBuffer.append(genFeature.getQualifiedFeatureAccessorName());
-    stringBuffer.append(TEXT_1085);
-    }
-    stringBuffer.append(TEXT_1086);
-    stringBuffer.append(genFeature.getSafeName());
-    stringBuffer.append(TEXT_1087);
-    stringBuffer.append(genModel.getImportedName("java.lang.NoSuchMethodException"));
-    stringBuffer.append(TEXT_1088);
-    } else {
-    stringBuffer.append(TEXT_1089);
-    stringBuffer.append(genFeature.getImportedType());
-    stringBuffer.append(TEXT_1090);
-    stringBuffer.append(genFeature.getSafeName());
-    stringBuffer.append(TEXT_1091);
-    stringBuffer.append(genFeature.getImportedType());
-    stringBuffer.append(TEXT_1092);
-    stringBuffer.append(genFeature.getQualifiedFeatureAccessorName());
-    stringBuffer.append(TEXT_1093);
-    stringBuffer.append(genFeature.getSafeName());
-    stringBuffer.append(TEXT_1094);
-    stringBuffer.append(genModel.getImportedName("java.util.List"));
-    stringBuffer.append(TEXT_1095);
-    stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_1096);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.util.UniqueEList"));
-    stringBuffer.append(TEXT_1097);
-    stringBuffer.append(genFeature.getQualifiedFeatureAccessorName());
-    stringBuffer.append(TEXT_1098);
-    stringBuffer.append(genFeature.getSafeName());
-    stringBuffer.append(TEXT_1099);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.uml2.common.util.UnionEObjectEList"));
-    stringBuffer.append(TEXT_1100);
-    if (UML2GenModelUtil.isDuplicate(genFeature) && !UML2GenModelUtil.isRedefinition(genFeature)) {
-    stringBuffer.append(TEXT_1101);
-    } else {
-    stringBuffer.append(genFeature.getQualifiedFeatureAccessorName());
-    stringBuffer.append(TEXT_1102);
-    }
-    stringBuffer.append(TEXT_1103);
-    stringBuffer.append(genFeature.getSafeName());
-    stringBuffer.append(TEXT_1104);
-    }
-    stringBuffer.append(TEXT_1105);
-    }
-    stringBuffer.append(TEXT_1106);
-    stringBuffer.append(genModel.getImportedName("java.util.List"));
-    stringBuffer.append(TEXT_1107);
-    stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_1108);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.util.UniqueEList"));
-    stringBuffer.append(TEXT_1109);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.uml2.common.util.UnionEObjectEList"));
-    stringBuffer.append(TEXT_1110);
-    if (UML2GenModelUtil.isDuplicate(genFeature) && !UML2GenModelUtil.isRedefinition(genFeature)) {
-    stringBuffer.append(TEXT_1111);
-    } else {
-    stringBuffer.append(genFeature.getQualifiedFeatureAccessorName());
-    stringBuffer.append(TEXT_1112);
-    }
-    stringBuffer.append(TEXT_1113);
-    }
-    } else {
-    stringBuffer.append(TEXT_1114);
-    stringBuffer.append(genFeature.getImportedType());
-    stringBuffer.append(TEXT_1115);
-    stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_1116);
     for (Iterator j = UML2GenModelUtil.getSubsetGenFeatures(genClass, genFeature).iterator(); j.hasNext();) { GenFeature subsetGenFeature = (GenFeature) j.next();
     if (!genClass.getExtendedGenFeatures().contains(subsetGenFeature)) {
     if (genClass.isField(subsetGenFeature) && !subsetGenFeature.isBasicGet()) {
-    stringBuffer.append(TEXT_1117);
+    stringBuffer.append(TEXT_1025);
     stringBuffer.append(subsetGenFeature.getQualifiedFeatureAccessorName());
-    stringBuffer.append(TEXT_1118);
+    stringBuffer.append(TEXT_1026);
     stringBuffer.append(subsetGenFeature.getGetAccessor());
-    stringBuffer.append(TEXT_1119);
+    stringBuffer.append(TEXT_1027);
     } else {
-    stringBuffer.append(TEXT_1120);
+    stringBuffer.append(TEXT_1028);
     stringBuffer.append(subsetGenFeature.getImportedType());
-    stringBuffer.append(TEXT_1121);
+    stringBuffer.append(TEXT_1029);
     stringBuffer.append(subsetGenFeature.getSafeName());
-    stringBuffer.append(TEXT_1122);
+    stringBuffer.append(TEXT_1030);
     stringBuffer.append(subsetGenFeature.getGetAccessor());
-    stringBuffer.append(TEXT_1123);
+    stringBuffer.append(TEXT_1031);
     stringBuffer.append(subsetGenFeature.getSafeName());
-    stringBuffer.append(TEXT_1124);
+    stringBuffer.append(TEXT_1032);
     stringBuffer.append(subsetGenFeature.getSafeName());
-    stringBuffer.append(TEXT_1125);
+    stringBuffer.append(TEXT_1033);
     }
     }
     }
-    stringBuffer.append(TEXT_1126);
+    stringBuffer.append(TEXT_1034);
     if (genClass.getExtendedGenFeatures().contains(genFeature)) {
-    stringBuffer.append(TEXT_1127);
+    stringBuffer.append(TEXT_1035);
     stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_1128);
+    stringBuffer.append(TEXT_1036);
     } else {
-    stringBuffer.append(TEXT_1129);
+    stringBuffer.append(TEXT_1037);
     }
-    stringBuffer.append(TEXT_1130);
-    }
-    }
-    stringBuffer.append(TEXT_1131);
-    if (!genClass.getExtendedGenFeatures().contains(genFeature) && UML2GenModelUtil.isFactoryMethods(genModel) && genFeature.isChangeable() && genFeature.isContains()) {
-    if (genClass.getChildrenClasses(genFeature).size() > 0) {
-    if (genClass.getChildrenClasses(genFeature).size() > 1 || genFeature.getTypeGenClass().isAbstract()) {
-    stringBuffer.append(TEXT_1132);
-    stringBuffer.append(UML2GenModelUtil.getRedefinedListItemType(genFeature));
-    stringBuffer.append(TEXT_1133);
-    stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1134);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EClass"));
-    stringBuffer.append(TEXT_1135);
-    stringBuffer.append(genModel.getImportedName(genFeature.getQualifiedListItemType()));
-    stringBuffer.append(TEXT_1136);
-    stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1137);
-    stringBuffer.append(genModel.getImportedName(genFeature.getQualifiedListItemType()));
-    stringBuffer.append(TEXT_1138);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.impl.ENotificationImpl"));
-    stringBuffer.append(TEXT_1139);
-    stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
-    stringBuffer.append(TEXT_1140);
-    stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1141);
-    if (genFeature.isListType()) {
-    stringBuffer.append(TEXT_1142);
-    stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_1143);
-    stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1144);
-    } else {
-    stringBuffer.append(TEXT_1145);
-    stringBuffer.append(genFeature.getAccessorName());
-    stringBuffer.append(TEXT_1146);
-    stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1147);
-    }
-    stringBuffer.append(TEXT_1148);
-    stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1149);
-    }
-    if (genClass.getChildrenClasses(genFeature).size() == 1 || !genFeature.getTypeGenClass().isAbstract()) { GenClass childGenClass = (GenClass) genClass.getChildrenClasses(genFeature).get(0);
-    stringBuffer.append(TEXT_1150);
-    stringBuffer.append(UML2GenModelUtil.getRedefinedListItemType(genFeature));
-    stringBuffer.append(TEXT_1151);
-    stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1152);
-    stringBuffer.append(childGenClass.getImportedInterfaceName());
-    stringBuffer.append(TEXT_1153);
-    stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1154);
-    stringBuffer.append(childGenClass.getGenPackage().getImportedFactoryInterfaceName());
-    stringBuffer.append(TEXT_1155);
-    stringBuffer.append(childGenClass.getName());
-    stringBuffer.append(TEXT_1156);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.impl.ENotificationImpl"));
-    stringBuffer.append(TEXT_1157);
-    stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
-    stringBuffer.append(TEXT_1158);
-    stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1159);
-    if (genFeature.isListType()) {
-    stringBuffer.append(TEXT_1160);
-    stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_1161);
-    stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1162);
-    } else {
-    stringBuffer.append(TEXT_1163);
-    stringBuffer.append(genFeature.getAccessorName());
-    stringBuffer.append(TEXT_1164);
-    stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1165);
-    }
-    stringBuffer.append(TEXT_1166);
-    stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1167);
-    }
-    }
-    }
-    if (!genClass.getExtendedGenFeatures().contains(genFeature) && genFeature.isListType() && genFeature.isReferenceType()) {
-    for (Iterator j = UML2GenModelUtil.getKeyGenFeatures(genFeature.getTypeGenClass()).iterator(); j.hasNext();) {GenFeature keyGenFeature = (GenFeature)j.next();
-    stringBuffer.append(TEXT_1168);
-    stringBuffer.append(UML2GenModelUtil.getRedefinedListItemType(genFeature));
-    stringBuffer.append(TEXT_1169);
-    stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1170);
-    stringBuffer.append(keyGenFeature.getImportedType());
-    stringBuffer.append(TEXT_1171);
-    stringBuffer.append(keyGenFeature.getUncapName());
-    stringBuffer.append(TEXT_1172);
-    stringBuffer.append(genModel.getImportedName("java.util.Iterator"));
-    stringBuffer.append(TEXT_1173);
-    stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_1174);
-    stringBuffer.append(genModel.getImportedName(genFeature.getQualifiedListItemType()));
-    stringBuffer.append(TEXT_1175);
-    stringBuffer.append(genFeature.getUncapName());
-    stringBuffer.append(TEXT_1176);
-    stringBuffer.append(genModel.getImportedName(genFeature.getQualifiedListItemType()));
-    stringBuffer.append(TEXT_1177);
-    stringBuffer.append(keyGenFeature.getUncapName());
-    stringBuffer.append(TEXT_1178);
-    stringBuffer.append(genFeature.getUncapName());
-    stringBuffer.append(TEXT_1179);
-    stringBuffer.append(keyGenFeature.getGetAccessor());
-    stringBuffer.append(TEXT_1180);
-    stringBuffer.append(genFeature.getUncapName());
-    stringBuffer.append(TEXT_1181);
+    stringBuffer.append(TEXT_1038);
     }
     }
     }
     for (Iterator i=UML2GenModelUtil.getImplementedRedefinedGenFeatures(genClass).iterator(); i.hasNext();) { GenFeature genFeature = (GenFeature)i.next(); GenFeature redefinitionGenFeature = (GenFeature) UML2GenModelUtil.getRedefinitionGenFeatures(genClass, genFeature).iterator().next();
     if (genFeature.isGet()) {
-    stringBuffer.append(TEXT_1182);
+    stringBuffer.append(TEXT_1039);
     stringBuffer.append(genFeature.getImportedType());
-    stringBuffer.append(TEXT_1183);
+    stringBuffer.append(TEXT_1040);
     stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_1184);
+    stringBuffer.append(TEXT_1041);
     if (genFeature.isListType()) {
     if (redefinitionGenFeature.isListType()) {
-    stringBuffer.append(TEXT_1185);
+    stringBuffer.append(TEXT_1042);
     stringBuffer.append(redefinitionGenFeature.getGetAccessor());
-    stringBuffer.append(TEXT_1186);
+    stringBuffer.append(TEXT_1043);
     } else {
-    stringBuffer.append(TEXT_1187);
+    stringBuffer.append(TEXT_1044);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.EcoreEList"));
-    stringBuffer.append(TEXT_1188);
+    stringBuffer.append(TEXT_1045);
     if (UML2GenModelUtil.isDuplicate(genFeature) && !UML2GenModelUtil.isRedefinition(genFeature)) {
-    stringBuffer.append(TEXT_1189);
+    stringBuffer.append(TEXT_1046);
     } else {
     stringBuffer.append(genFeature.getQualifiedFeatureAccessorName());
-    stringBuffer.append(TEXT_1190);
+    stringBuffer.append(TEXT_1047);
     }
-    stringBuffer.append(TEXT_1191);
+    stringBuffer.append(TEXT_1048);
     stringBuffer.append(genModel.getImportedName("java.util.Collections"));
-    stringBuffer.append(TEXT_1192);
+    stringBuffer.append(TEXT_1049);
     }
     } else {
     if (redefinitionGenFeature.isListType()) {
-    stringBuffer.append(TEXT_1193);
+    stringBuffer.append(TEXT_1050);
     } else {
-    stringBuffer.append(TEXT_1194);
+    stringBuffer.append(TEXT_1051);
     stringBuffer.append(redefinitionGenFeature.getGetAccessor());
-    stringBuffer.append(TEXT_1195);
+    stringBuffer.append(TEXT_1052);
     }
     }
-    stringBuffer.append(TEXT_1196);
+    stringBuffer.append(TEXT_1053);
     }
     if (genFeature.isBasicGet()) {
-    stringBuffer.append(TEXT_1197);
+    stringBuffer.append(TEXT_1054);
     stringBuffer.append(genFeature.getImportedType());
-    stringBuffer.append(TEXT_1198);
+    stringBuffer.append(TEXT_1055);
     stringBuffer.append(genFeature.getAccessorName());
-    stringBuffer.append(TEXT_1199);
+    stringBuffer.append(TEXT_1056);
     if (redefinitionGenFeature.isListType()) {
-    stringBuffer.append(TEXT_1200);
+    stringBuffer.append(TEXT_1057);
     } else {
-    stringBuffer.append(TEXT_1201);
+    stringBuffer.append(TEXT_1058);
     if (redefinitionGenFeature.isBasicGet()) {
-    stringBuffer.append(TEXT_1202);
+    stringBuffer.append(TEXT_1059);
     stringBuffer.append(genFeature.getAccessorName());
     } else {
     stringBuffer.append(genFeature.getGetAccessor());
     }
-    stringBuffer.append(TEXT_1203);
+    stringBuffer.append(TEXT_1060);
     }
-    stringBuffer.append(TEXT_1204);
+    stringBuffer.append(TEXT_1061);
     }
     if (genFeature.isBasicSet()) {
-    stringBuffer.append(TEXT_1205);
+    stringBuffer.append(TEXT_1062);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.notify.NotificationChain"));
-    stringBuffer.append(TEXT_1206);
+    stringBuffer.append(TEXT_1063);
     stringBuffer.append(genFeature.getAccessorName());
-    stringBuffer.append(TEXT_1207);
+    stringBuffer.append(TEXT_1064);
     stringBuffer.append(genFeature.getImportedInternalType());
-    stringBuffer.append(TEXT_1208);
+    stringBuffer.append(TEXT_1065);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1209);
+    stringBuffer.append(TEXT_1066);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.notify.NotificationChain"));
-    stringBuffer.append(TEXT_1210);
+    stringBuffer.append(TEXT_1067);
     if (!redefinitionGenFeature.isSet() || redefinitionGenFeature.isListType()) {
-    stringBuffer.append(TEXT_1211);
+    stringBuffer.append(TEXT_1068);
     } else {
     if (!genFeature.getType().equals(redefinitionGenFeature.getType())) {
-    stringBuffer.append(TEXT_1212);
+    stringBuffer.append(TEXT_1069);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1213);
+    stringBuffer.append(TEXT_1070);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1214);
+    stringBuffer.append(TEXT_1071);
     stringBuffer.append(redefinitionGenFeature.getImportedType());
-    stringBuffer.append(TEXT_1215);
+    stringBuffer.append(TEXT_1072);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1216);
+    stringBuffer.append(TEXT_1073);
     }
     if (redefinitionGenFeature.isBasicSet()) {
-    stringBuffer.append(TEXT_1217);
+    stringBuffer.append(TEXT_1074);
     stringBuffer.append(redefinitionGenFeature.getAccessorName());
-    stringBuffer.append(TEXT_1218);
+    stringBuffer.append(TEXT_1075);
     if (!genFeature.getType().equals(redefinitionGenFeature.getType())) {
-    stringBuffer.append(TEXT_1219);
+    stringBuffer.append(TEXT_1076);
     stringBuffer.append(redefinitionGenFeature.getImportedType());
-    stringBuffer.append(TEXT_1220);
+    stringBuffer.append(TEXT_1077);
     }
-    stringBuffer.append(TEXT_1221);
+    stringBuffer.append(TEXT_1078);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1222);
+    stringBuffer.append(TEXT_1079);
     } else {
-    stringBuffer.append(TEXT_1223);
+    stringBuffer.append(TEXT_1080);
     stringBuffer.append(redefinitionGenFeature.getAccessorName());
-    stringBuffer.append(TEXT_1224);
+    stringBuffer.append(TEXT_1081);
     if (!genFeature.getType().equals(redefinitionGenFeature.getType())) {
-    stringBuffer.append(TEXT_1225);
+    stringBuffer.append(TEXT_1082);
     stringBuffer.append(redefinitionGenFeature.getImportedType());
-    stringBuffer.append(TEXT_1226);
+    stringBuffer.append(TEXT_1083);
     }
-    stringBuffer.append(TEXT_1227);
+    stringBuffer.append(TEXT_1084);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1228);
+    stringBuffer.append(TEXT_1085);
     }
     }
-    stringBuffer.append(TEXT_1229);
+    stringBuffer.append(TEXT_1086);
     }
     if (genFeature.isSet()) {
-    stringBuffer.append(TEXT_1230);
+    stringBuffer.append(TEXT_1087);
     stringBuffer.append(genFeature.getAccessorName());
-    stringBuffer.append(TEXT_1231);
+    stringBuffer.append(TEXT_1088);
     stringBuffer.append(genFeature.getImportedType());
-    stringBuffer.append(TEXT_1232);
+    stringBuffer.append(TEXT_1089);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1233);
+    stringBuffer.append(TEXT_1090);
     if (!redefinitionGenFeature.isSet() || redefinitionGenFeature.isListType()) {
-    stringBuffer.append(TEXT_1234);
+    stringBuffer.append(TEXT_1091);
     } else {
     if (!genFeature.getType().equals(redefinitionGenFeature.getType())) {
-    stringBuffer.append(TEXT_1235);
+    stringBuffer.append(TEXT_1092);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1236);
+    stringBuffer.append(TEXT_1093);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1237);
+    stringBuffer.append(TEXT_1094);
     stringBuffer.append(redefinitionGenFeature.getImportedType());
-    stringBuffer.append(TEXT_1238);
+    stringBuffer.append(TEXT_1095);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1239);
+    stringBuffer.append(TEXT_1096);
     }
-    stringBuffer.append(TEXT_1240);
+    stringBuffer.append(TEXT_1097);
     stringBuffer.append(redefinitionGenFeature.getAccessorName());
-    stringBuffer.append(TEXT_1241);
+    stringBuffer.append(TEXT_1098);
     if (!genFeature.getType().equals(redefinitionGenFeature.getType())) {
-    stringBuffer.append(TEXT_1242);
+    stringBuffer.append(TEXT_1099);
     stringBuffer.append(redefinitionGenFeature.getImportedType());
-    stringBuffer.append(TEXT_1243);
+    stringBuffer.append(TEXT_1100);
     }
-    stringBuffer.append(TEXT_1244);
+    stringBuffer.append(TEXT_1101);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1245);
+    stringBuffer.append(TEXT_1102);
     }
-    stringBuffer.append(TEXT_1246);
+    stringBuffer.append(TEXT_1103);
     }
-    stringBuffer.append(TEXT_1247);
+    stringBuffer.append(TEXT_1104);
     if (!genClass.getExtendedGenFeatures().contains(genFeature) && UML2GenModelUtil.isFactoryMethods(genModel) && genFeature.isChangeable() && genFeature.isContains()) {
     if (genClass.getChildrenClasses(genFeature).size() > 0) {
     if (genClass.getChildrenClasses(genFeature).size() > 1 || genFeature.getTypeGenClass().isAbstract()) {
-    stringBuffer.append(TEXT_1248);
+    stringBuffer.append(TEXT_1105);
     stringBuffer.append(UML2GenModelUtil.getRedefinedListItemType(genFeature));
-    stringBuffer.append(TEXT_1249);
+    stringBuffer.append(TEXT_1106);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1250);
+    stringBuffer.append(TEXT_1107);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EClass"));
-    stringBuffer.append(TEXT_1251);
+    stringBuffer.append(TEXT_1108);
     stringBuffer.append(genModel.getImportedName(genFeature.getQualifiedListItemType()));
-    stringBuffer.append(TEXT_1252);
+    stringBuffer.append(TEXT_1109);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1253);
+    stringBuffer.append(TEXT_1110);
     stringBuffer.append(genModel.getImportedName(genFeature.getQualifiedListItemType()));
-    stringBuffer.append(TEXT_1254);
+    stringBuffer.append(TEXT_1111);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.impl.ENotificationImpl"));
-    stringBuffer.append(TEXT_1255);
+    stringBuffer.append(TEXT_1112);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
-    stringBuffer.append(TEXT_1256);
+    stringBuffer.append(TEXT_1113);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1257);
+    stringBuffer.append(TEXT_1114);
     if (genFeature.isListType()) {
-    stringBuffer.append(TEXT_1258);
+    stringBuffer.append(TEXT_1115);
     stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_1259);
+    stringBuffer.append(TEXT_1116);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1260);
+    stringBuffer.append(TEXT_1117);
     } else {
-    stringBuffer.append(TEXT_1261);
+    stringBuffer.append(TEXT_1118);
     stringBuffer.append(genFeature.getAccessorName());
-    stringBuffer.append(TEXT_1262);
+    stringBuffer.append(TEXT_1119);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1263);
+    stringBuffer.append(TEXT_1120);
     }
-    stringBuffer.append(TEXT_1264);
+    stringBuffer.append(TEXT_1121);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1265);
+    stringBuffer.append(TEXT_1122);
     }
     if (genClass.getChildrenClasses(genFeature).size() == 1 || !genFeature.getTypeGenClass().isAbstract()) { GenClass childGenClass = (GenClass) genClass.getChildrenClasses(genFeature).get(0);
-    stringBuffer.append(TEXT_1266);
+    stringBuffer.append(TEXT_1123);
     stringBuffer.append(UML2GenModelUtil.getRedefinedListItemType(genFeature));
-    stringBuffer.append(TEXT_1267);
+    stringBuffer.append(TEXT_1124);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1268);
+    stringBuffer.append(TEXT_1125);
     stringBuffer.append(childGenClass.getImportedInterfaceName());
-    stringBuffer.append(TEXT_1269);
+    stringBuffer.append(TEXT_1126);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1270);
+    stringBuffer.append(TEXT_1127);
     stringBuffer.append(childGenClass.getGenPackage().getImportedFactoryInterfaceName());
-    stringBuffer.append(TEXT_1271);
+    stringBuffer.append(TEXT_1128);
     stringBuffer.append(childGenClass.getName());
-    stringBuffer.append(TEXT_1272);
+    stringBuffer.append(TEXT_1129);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.impl.ENotificationImpl"));
-    stringBuffer.append(TEXT_1273);
+    stringBuffer.append(TEXT_1130);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
-    stringBuffer.append(TEXT_1274);
+    stringBuffer.append(TEXT_1131);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1275);
+    stringBuffer.append(TEXT_1132);
     if (genFeature.isListType()) {
-    stringBuffer.append(TEXT_1276);
+    stringBuffer.append(TEXT_1133);
     stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_1277);
+    stringBuffer.append(TEXT_1134);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1278);
+    stringBuffer.append(TEXT_1135);
     } else {
-    stringBuffer.append(TEXT_1279);
+    stringBuffer.append(TEXT_1136);
     stringBuffer.append(genFeature.getAccessorName());
-    stringBuffer.append(TEXT_1280);
+    stringBuffer.append(TEXT_1137);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1281);
+    stringBuffer.append(TEXT_1138);
     }
-    stringBuffer.append(TEXT_1282);
+    stringBuffer.append(TEXT_1139);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1283);
+    stringBuffer.append(TEXT_1140);
     }
     }
     }
     if (!genClass.getExtendedGenFeatures().contains(genFeature) && genFeature.isListType() && genFeature.isReferenceType()) {
     for (Iterator j = UML2GenModelUtil.getKeyGenFeatures(genFeature.getTypeGenClass()).iterator(); j.hasNext();) {GenFeature keyGenFeature = (GenFeature)j.next();
-    stringBuffer.append(TEXT_1284);
+    stringBuffer.append(TEXT_1141);
     stringBuffer.append(UML2GenModelUtil.getRedefinedListItemType(genFeature));
-    stringBuffer.append(TEXT_1285);
+    stringBuffer.append(TEXT_1142);
     stringBuffer.append(genFeature.getCapName());
-    stringBuffer.append(TEXT_1286);
+    stringBuffer.append(TEXT_1143);
     stringBuffer.append(keyGenFeature.getImportedType());
-    stringBuffer.append(TEXT_1287);
+    stringBuffer.append(TEXT_1144);
     stringBuffer.append(keyGenFeature.getUncapName());
-    stringBuffer.append(TEXT_1288);
+    stringBuffer.append(TEXT_1145);
     stringBuffer.append(genModel.getImportedName("java.util.Iterator"));
-    stringBuffer.append(TEXT_1289);
+    stringBuffer.append(TEXT_1146);
     stringBuffer.append(genFeature.getGetAccessor());
-    stringBuffer.append(TEXT_1290);
+    stringBuffer.append(TEXT_1147);
     stringBuffer.append(genModel.getImportedName(genFeature.getQualifiedListItemType()));
-    stringBuffer.append(TEXT_1291);
+    stringBuffer.append(TEXT_1148);
     stringBuffer.append(genFeature.getUncapName());
-    stringBuffer.append(TEXT_1292);
+    stringBuffer.append(TEXT_1149);
     stringBuffer.append(genModel.getImportedName(genFeature.getQualifiedListItemType()));
-    stringBuffer.append(TEXT_1293);
+    stringBuffer.append(TEXT_1150);
     stringBuffer.append(keyGenFeature.getUncapName());
-    stringBuffer.append(TEXT_1294);
+    stringBuffer.append(TEXT_1151);
     stringBuffer.append(genFeature.getUncapName());
-    stringBuffer.append(TEXT_1295);
+    stringBuffer.append(TEXT_1152);
     stringBuffer.append(keyGenFeature.getGetAccessor());
-    stringBuffer.append(TEXT_1296);
+    stringBuffer.append(TEXT_1153);
     stringBuffer.append(genFeature.getUncapName());
-    stringBuffer.append(TEXT_1297);
+    stringBuffer.append(TEXT_1154);
     }
     }
     }
     for (Iterator i=UML2GenModelUtil.getImplementedRedefinedGenOperations(genClass).iterator(); i.hasNext();) { GenOperation genOperation = (GenOperation)i.next(); GenOperation redefinitionGenOperation = (GenOperation) UML2GenModelUtil.getRedefinitionGenOperations(genClass, genOperation).iterator().next();
-    stringBuffer.append(TEXT_1298);
+    stringBuffer.append(TEXT_1155);
     stringBuffer.append(genOperation.getImportedType());
-    stringBuffer.append(TEXT_1299);
+    stringBuffer.append(TEXT_1156);
     stringBuffer.append(genOperation.getName());
-    stringBuffer.append(TEXT_1300);
+    stringBuffer.append(TEXT_1157);
     stringBuffer.append(genOperation.getParameters());
-    stringBuffer.append(TEXT_1301);
+    stringBuffer.append(TEXT_1158);
     stringBuffer.append(genOperation.getThrows());
-    stringBuffer.append(TEXT_1302);
+    stringBuffer.append(TEXT_1159);
     if (genOperation.isVoid()) {
-    stringBuffer.append(TEXT_1303);
+    stringBuffer.append(TEXT_1160);
     stringBuffer.append(redefinitionGenOperation.getName());
-    stringBuffer.append(TEXT_1304);
+    stringBuffer.append(TEXT_1161);
     stringBuffer.append(genOperation.getParameterNames(", "));
-    stringBuffer.append(TEXT_1305);
+    stringBuffer.append(TEXT_1162);
     } else {
     if (redefinitionGenOperation.isVoid()) {
-    stringBuffer.append(TEXT_1306);
+    stringBuffer.append(TEXT_1163);
     } else {
-    stringBuffer.append(TEXT_1307);
+    stringBuffer.append(TEXT_1164);
     stringBuffer.append(redefinitionGenOperation.getName());
-    stringBuffer.append(TEXT_1308);
+    stringBuffer.append(TEXT_1165);
     stringBuffer.append(genOperation.getParameterNames(", "));
-    stringBuffer.append(TEXT_1309);
+    stringBuffer.append(TEXT_1166);
     }
     }
-    stringBuffer.append(TEXT_1310);
+    stringBuffer.append(TEXT_1167);
     }
-    stringBuffer.append(TEXT_1311);
+    stringBuffer.append(TEXT_1168);
     stringBuffer.append(genClass.getClassName());
     genModel.emitSortedImports();
-    stringBuffer.append(TEXT_1312);
+    stringBuffer.append(TEXT_1169);
     return stringBuffer.toString();
   }
 }
diff --git a/plugins/org.eclipse.uml2.codegen.ecore/src/org/eclipse/uml2/codegen/ecore/templates/model/tests/TestCase.java b/plugins/org.eclipse.uml2.codegen.ecore/src/org/eclipse/uml2/codegen/ecore/templates/model/tests/TestCase.java
index 0fb8567..1cae371 100644
--- a/plugins/org.eclipse.uml2.codegen.ecore/src/org/eclipse/uml2/codegen/ecore/templates/model/tests/TestCase.java
+++ b/plugins/org.eclipse.uml2.codegen.ecore/src/org/eclipse/uml2/codegen/ecore/templates/model/tests/TestCase.java
@@ -441,6 +441,7 @@
     stringBuffer.append(TEXT_109);
     stringBuffer.append(TEXT_110);
     for (Iterator i=UML2GenModelUtil.getImplementedUnionGenFeatures(genClass).iterator(); i.hasNext();) { GenFeature genFeature = (GenFeature)i.next();
+    if (!genFeature.isListType()) {
     if (genFeature.isGet() && !genFeature.isSuppressedGetVisibility()) {
     stringBuffer.append(TEXT_111);
     stringBuffer.append(genFeature.getGenClass().getQualifiedInterfaceName());
@@ -472,6 +473,7 @@
     stringBuffer.append(TEXT_124);
     }
     }
+    }
     for (Iterator i=UML2GenModelUtil.getImplementedRedefinedGenFeatures(genClass).iterator(); i.hasNext();) { GenFeature genFeature = (GenFeature)i.next();
     if (genFeature.isGet() && !genFeature.isSuppressedGetVisibility()) {
     stringBuffer.append(TEXT_125);
diff --git a/plugins/org.eclipse.uml2.codegen.ecore/templates/model.tests/TestCase/insert.javajetinc b/plugins/org.eclipse.uml2.codegen.ecore/templates/model.tests/TestCase/insert.javajetinc
index 1e1da8a..889883c 100644
--- a/plugins/org.eclipse.uml2.codegen.ecore/templates/model.tests/TestCase/insert.javajetinc
+++ b/plugins/org.eclipse.uml2.codegen.ecore/templates/model.tests/TestCase/insert.javajetinc
@@ -1,5 +1,6 @@
 <%for (Iterator i=UML2GenModelUtil.getImplementedUnionGenFeatures(genClass).iterator(); i.hasNext();) { GenFeature genFeature = (GenFeature)i.next();%>
-  <%if (genFeature.isGet() && !genFeature.isSuppressedGetVisibility()) {%>
+  <%if (!genFeature.isListType()) {%>
+    <%if (genFeature.isGet() && !genFeature.isSuppressedGetVisibility()) {%>
 
 	/**
 	 * Tests the '{@link <%=genFeature.getGenClass().getQualifiedInterfaceName()%>#<%=genFeature.getGetAccessor()%>() <em><%=genFeature.getFormattedName()%></em>}' feature getter.
@@ -13,8 +14,8 @@
 		// TODO: implement this union feature getter test method
 		// Ensure that you remove @generated or mark it @generated NOT
 	}
-  <%}%>
-  <%if (genFeature.isIsSet() && !genFeature.isSuppressedIsSetVisibility()) {%>
+    <%}%>
+    <%if (genFeature.isIsSet() && !genFeature.isSuppressedIsSetVisibility()) {%>
 
 	/**
 	 * Tests the '{@link <%=genFeature.getGenClass().getQualifiedInterfaceName()%>#isSet<%=genFeature.getAccessorName()%>() <em>isSet<%=genFeature.getAccessorName()%>()</em>}' method.
@@ -28,6 +29,7 @@
 		// TODO: implement this union test method
 		// Ensure that you remove @generated or mark it @generated NOT
 	}
+    <%}%>
   <%}%>
 <%}%>
 <%for (Iterator i=UML2GenModelUtil.getImplementedRedefinedGenFeatures(genClass).iterator(); i.hasNext();) { GenFeature genFeature = (GenFeature)i.next();%>
diff --git a/plugins/org.eclipse.uml2.codegen.ecore/templates/model/Class/insert.javajetinc b/plugins/org.eclipse.uml2.codegen.ecore/templates/model/Class/insert.javajetinc
index e58c4e2..2053b7c 100644
--- a/plugins/org.eclipse.uml2.codegen.ecore/templates/model/Class/insert.javajetinc
+++ b/plugins/org.eclipse.uml2.codegen.ecore/templates/model/Class/insert.javajetinc
@@ -57,97 +57,7 @@
 
     <%}%>
   <%} else if (genFeature.isGet()) {%>
-    <%if (genFeature.isListType()) {%>
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	protected <%=genFeature.getImportedType()%> <%=genFeature.getGetAccessor()%>Helper(<%=genFeature.getImportedType()%> <%=genFeature.getSafeName()%>)
-	{
-      <%if (genClass.getExtendedGenFeatures().contains(genFeature)) {%>
-		super.<%=genFeature.getGetAccessor()%>Helper(<%=genFeature.getSafeName()%>);
-      <%}%>
-      <%for (Iterator j = UML2GenModelUtil.getSubsetGenFeatures(genClass, genFeature).iterator(); j.hasNext();) { GenFeature subsetGenFeature = (GenFeature) j.next();%>
-        <%if (!genClass.getExtendedGenFeatures().contains(subsetGenFeature)) {%>
-          <%if (subsetGenFeature.isListType()) {%>
-            <%if (subsetGenFeature.isResolveProxies() || UML2GenModelUtil.isUnion(subsetGenFeature)) {%>
-              <%if (genClass.isField(subsetGenFeature)) {%>
-		if (eIsSet(<%=subsetGenFeature.getQualifiedFeatureAccessorName()%>())) {
-			for (<%=genModel.getImportedName("java.util.Iterator")%> i = ((<%=genModel.getImportedName("org.eclipse.emf.ecore.util.InternalEList")%>) <%=subsetGenFeature.getGetAccessor()%>()).basicIterator(); i.hasNext(); ) {
-				<%=genFeature.getSafeName()%>.add(i.next());
-			}
-		}
-              <%} else {%>
-		<%=subsetGenFeature.getImportedType()%> <%=subsetGenFeature.getSafeName()%> = <%=subsetGenFeature.getGetAccessor()%>();
-		if (!<%=subsetGenFeature.getSafeName()%>.isEmpty()) {
-			for (<%=genModel.getImportedName("java.util.Iterator")%> i = ((<%=genModel.getImportedName("org.eclipse.emf.ecore.util.InternalEList")%>) <%=subsetGenFeature.getSafeName()%>).basicIterator(); i.hasNext(); ) {
-				<%=genFeature.getSafeName()%>.add(i.next());
-			}
-		}
-              <%}%>
-            <%} else {%>
-              <%if (genClass.isField(subsetGenFeature)) {%>
-		if (eIsSet(<%=subsetGenFeature.getQualifiedFeatureAccessorName()%>())) {
-			<%=genFeature.getSafeName()%>.addAll(<%=subsetGenFeature.getGetAccessor()%>());
-		}
-              <%} else {%>
-		<%=subsetGenFeature.getImportedType()%> <%=subsetGenFeature.getSafeName()%> = <%=subsetGenFeature.getGetAccessor()%>();
-		if (!<%=subsetGenFeature.getSafeName()%>.isEmpty()) {
-			<%=genFeature.getSafeName()%>.addAll(<%=subsetGenFeature.getSafeName()%>);
-		}
-              <%}%>
-            <%}%>
-          <%} else {%>
-		<%=subsetGenFeature.getImportedType()%> <%=subsetGenFeature.getSafeName()%> = <%if (subsetGenFeature.isBasicGet()) {%>basicGet<%=subsetGenFeature.getAccessorName()%><%} else {%><%=subsetGenFeature.getGetAccessor()%><%}%>();
-		if (<%=subsetGenFeature.getSafeName()%> != null) {
-			<%=genFeature.getSafeName()%>.add(<%=subsetGenFeature.getSafeName()%>);
-		}
-          <%}%>
-        <%}%>
-      <%}%>
-		return <%=genFeature.getSafeName()%>;
-	}
-
-      <%if (!genClass.getExtendedGenFeatures().contains(genFeature)) {%>
-	/**
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 */
-	public <%=genFeature.getImportedType()%> <%=genFeature.getGetAccessor()%>()
-	{
-        <%if (UML2GenModelUtil.isCacheAdapterSupport(genModel)) {%>
-		<%=genModel.getImportedName("org.eclipse.uml2.common.util.CacheAdapter")%> cache = getCacheAdapter();
-		if (cache != null) {
-          <%if (UML2GenModelUtil.isDuplicate(genFeature) && !UML2GenModelUtil.isRedefinition(genFeature)) {%>
-			try {
-				<%=genModel.getImportedName("java.lang.reflect.Method")%> method = getClass().getMethod("<%=genFeature.getGetAccessor()%>", null);<%=genModel.getNonNLS()%>
-				<%=genFeature.getImportedType()%> <%=genFeature.getSafeName()%> = (<%=genFeature.getImportedType()%>) cache.get(eResource(), this, method);
-				if (<%=genFeature.getSafeName()%> == null) {
-					<%=genModel.getImportedName("java.util.List")%> union = <%=genFeature.getGetAccessor()%>Helper(new <%=genModel.getImportedName("org.eclipse.emf.common.util.UniqueEList")%>());
-					cache.put(eResource(), this, method, <%=genFeature.getSafeName()%> = new <%=genModel.getImportedName("org.eclipse.uml2.common.util.UnionEObjectEList")%>(this, <%if (UML2GenModelUtil.isDuplicate(genFeature) && !UML2GenModelUtil.isRedefinition(genFeature)) {%>null<%} else {%><%=genFeature.getQualifiedFeatureAccessorName()%>()<%}%>, union.size(), union.toArray()));
-				}
-				return <%=genFeature.getSafeName()%>;
-			} catch (<%=genModel.getImportedName("java.lang.NoSuchMethodException")%> nsme) {
-				// ignore
-			}
-          <%} else {%>
-			<%=genFeature.getImportedType()%> <%=genFeature.getSafeName()%> = (<%=genFeature.getImportedType()%>) cache.get(eResource(), this, <%=genFeature.getQualifiedFeatureAccessorName()%>());
-			if (<%=genFeature.getSafeName()%> == null) {
-				<%=genModel.getImportedName("java.util.List")%> union = <%=genFeature.getGetAccessor()%>Helper(new <%=genModel.getImportedName("org.eclipse.emf.common.util.UniqueEList")%>());
-				cache.put(eResource(), this, <%=genFeature.getQualifiedFeatureAccessorName()%>(), <%=genFeature.getSafeName()%> = new <%=genModel.getImportedName("org.eclipse.uml2.common.util.UnionEObjectEList")%>(this, <%if (UML2GenModelUtil.isDuplicate(genFeature) && !UML2GenModelUtil.isRedefinition(genFeature)) {%>null<%} else {%><%=genFeature.getQualifiedFeatureAccessorName()%>()<%}%>, union.size(), union.toArray()));
-			}
-			return <%=genFeature.getSafeName()%>;
-          <%}%>
-		}
-        <%}%>
-		<%=genModel.getImportedName("java.util.List")%> union = <%=genFeature.getGetAccessor()%>Helper(new <%=genModel.getImportedName("org.eclipse.emf.common.util.UniqueEList")%>());
-		return new <%=genModel.getImportedName("org.eclipse.uml2.common.util.UnionEObjectEList")%>(this, <%if (UML2GenModelUtil.isDuplicate(genFeature) && !UML2GenModelUtil.isRedefinition(genFeature)) {%>null<%} else {%><%=genFeature.getQualifiedFeatureAccessorName()%>()<%}%>, union.size(), union.toArray());
-	}
-
-      <%}%>
-    <%} else {%>
+    <%if (!genFeature.isListType()) {%>
 	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -174,7 +84,6 @@
 
     <%}%>
   <%}%>
-<%@ include file="implementedGenFeature.insert.javajetinc" fail="silent" %>
 <%}%>
 <%for (Iterator i=UML2GenModelUtil.getImplementedRedefinedGenFeatures(genClass).iterator(); i.hasNext();) { GenFeature genFeature = (GenFeature)i.next(); GenFeature redefinitionGenFeature = (GenFeature) UML2GenModelUtil.getRedefinitionGenFeatures(genClass, genFeature).iterator().next();%>
   <%if (genFeature.isGet()) {%>