diff --git a/plugins/org.eclipse.uml2.codegen.ecore/src/org/eclipse/uml2/codegen/ecore/genmodel/GenModelPackage.java b/plugins/org.eclipse.uml2.codegen.ecore/src/org/eclipse/uml2/codegen/ecore/genmodel/GenModelPackage.java
index eb48cd3..4e3eda6 100644
--- a/plugins/org.eclipse.uml2.codegen.ecore/src/org/eclipse/uml2/codegen/ecore/genmodel/GenModelPackage.java
+++ b/plugins/org.eclipse.uml2.codegen.ecore/src/org/eclipse/uml2/codegen/ecore/genmodel/GenModelPackage.java
@@ -9,7 +9,7 @@
  *   IBM - initial API and implementation
  *   Kenn Hussey (Embarcadero Technologies) - 204200
  *
- * $Id: GenModelPackage.java,v 1.27 2008/01/03 14:46:03 khussey Exp $
+ * $Id: GenModelPackage.java,v 1.28 2008/01/08 21:48:40 khussey Exp $
  */
 package org.eclipse.uml2.codegen.ecore.genmodel;
 
@@ -1176,6 +1176,15 @@
 	int GEN_MODEL__TESTS_PLUGIN_VARIABLES = org.eclipse.emf.codegen.ecore.genmodel.GenModelPackage.GEN_MODEL__TESTS_PLUGIN_VARIABLES;
 
 	/**
+	 * The feature id for the '<em><b>Optimized Has Children</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int GEN_MODEL__OPTIMIZED_HAS_CHILDREN = org.eclipse.emf.codegen.ecore.genmodel.GenModelPackage.GEN_MODEL__OPTIMIZED_HAS_CHILDREN;
+
+	/**
 	 * The feature id for the '<em><b>Gen Packages</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/plugins/org.eclipse.uml2.codegen.ecore/src/org/eclipse/uml2/codegen/ecore/genmodel/impl/GenModelPackageImpl.java b/plugins/org.eclipse.uml2.codegen.ecore/src/org/eclipse/uml2/codegen/ecore/genmodel/impl/GenModelPackageImpl.java
index 75034e7..6ed6c6a 100644
--- a/plugins/org.eclipse.uml2.codegen.ecore/src/org/eclipse/uml2/codegen/ecore/genmodel/impl/GenModelPackageImpl.java
+++ b/plugins/org.eclipse.uml2.codegen.ecore/src/org/eclipse/uml2/codegen/ecore/genmodel/impl/GenModelPackageImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2006 IBM Corporation and others.
+ * Copyright (c) 2005, 2008 IBM Corporation, Embarcadero Technologies, and others.
  * All rights reserved.   This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,8 +7,9 @@
  *
  * Contributors:
  *   IBM - initial API and implementation
+ *   Kenn Hussey (Embarcadero Technologies) - 204200
  *
- * $Id: GenModelPackageImpl.java,v 1.5 2006/12/14 15:45:13 khussey Exp $
+ * $Id: GenModelPackageImpl.java,v 1.6 2008/01/08 21:48:40 khussey Exp $
  */
 package org.eclipse.uml2.codegen.ecore.genmodel.impl;
 
@@ -203,7 +204,6 @@
 		// Initialize simple dependencies
 		org.eclipse.emf.codegen.ecore.genmodel.GenModelPackage.eINSTANCE
 			.eClass();
-		EcorePackage.eINSTANCE.eClass();
 
 		// Create package meta-data objects
 		theGenModelPackage.createPackageContents();
diff --git a/plugins/org.eclipse.uml2.codegen.ecore/src/org/eclipse/uml2/codegen/ecore/templates/edit/ItemProvider.java b/plugins/org.eclipse.uml2.codegen.ecore/src/org/eclipse/uml2/codegen/ecore/templates/edit/ItemProvider.java
index 7e1d0ee..2869c9d 100644
--- a/plugins/org.eclipse.uml2.codegen.ecore/src/org/eclipse/uml2/codegen/ecore/templates/edit/ItemProvider.java
+++ b/plugins/org.eclipse.uml2.codegen.ecore/src/org/eclipse/uml2/codegen/ecore/templates/edit/ItemProvider.java
@@ -46,261 +46,266 @@
   protected final String TEXT_27 = NL + "\t\t}" + NL + "\t\treturn itemPropertyDescriptors;" + NL + "\t}" + NL;
   protected final String TEXT_28 = NL + "\t/**" + NL + "\t * This adds a property descriptor for the ";
   protected final String TEXT_29 = " feature." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */" + NL + "\tprotected void add";
-  protected final String TEXT_30 = "PropertyDescriptor(Object object)" + NL + "\t{" + NL + "\t\titemPropertyDescriptors.add" + NL + "\t\t\t(createItemPropertyDescriptor" + NL + "\t\t\t\t(((";
-  protected final String TEXT_31 = ")adapterFactory).getRootAdapterFactory()," + NL + "\t\t\t\t getResourceLocator()," + NL + "\t\t\t\t getString(\"_UI_";
-  protected final String TEXT_32 = "_";
-  protected final String TEXT_33 = "_feature\"),";
-  protected final String TEXT_34 = NL + "\t\t\t\t getString(\"_UI_PropertyDescriptor_description\", \"_UI_";
-  protected final String TEXT_35 = "_";
-  protected final String TEXT_36 = "_feature\", \"_UI_";
-  protected final String TEXT_37 = "_type\"),";
-  protected final String TEXT_38 = NL + "\t\t\t\t getString(\"_UI_";
-  protected final String TEXT_39 = "_";
-  protected final String TEXT_40 = "_description\"),";
-  protected final String TEXT_41 = NL + "\t\t\t\t ";
-  protected final String TEXT_42 = "," + NL + "\t\t\t\t ";
+  protected final String TEXT_30 = "PropertyDescriptor(Object object)" + NL + "\t{";
+  protected final String TEXT_31 = NL + "\t\titemPropertyDescriptors.add" + NL + "\t\t\t(createItemPropertyDescriptor" + NL + "\t\t\t\t(((";
+  protected final String TEXT_32 = ")adapterFactory).getRootAdapterFactory()," + NL + "\t\t\t\t getResourceLocator()," + NL + "\t\t\t\t getString(\"_UI_";
+  protected final String TEXT_33 = "_";
+  protected final String TEXT_34 = "_feature\"),";
+  protected final String TEXT_35 = NL + "\t\t\t\t getString(\"_UI_PropertyDescriptor_description\", \"_UI_";
+  protected final String TEXT_36 = "_";
+  protected final String TEXT_37 = "_feature\", \"_UI_";
+  protected final String TEXT_38 = "_type\"),";
+  protected final String TEXT_39 = NL + "\t\t\t\t getString(\"_UI_";
+  protected final String TEXT_40 = "_";
+  protected final String TEXT_41 = "_description\"),";
+  protected final String TEXT_42 = NL + "\t\t\t\t ";
   protected final String TEXT_43 = "," + NL + "\t\t\t\t ";
   protected final String TEXT_44 = "," + NL + "\t\t\t\t ";
-  protected final String TEXT_45 = ",";
-  protected final String TEXT_46 = NL + "\t\t\t\t null,";
-  protected final String TEXT_47 = NL + "\t\t\t\t ";
-  protected final String TEXT_48 = ".";
-  protected final String TEXT_49 = ",";
-  protected final String TEXT_50 = NL + "\t\t\t\t null,";
-  protected final String TEXT_51 = NL + "\t\t\t\t getString(\"";
-  protected final String TEXT_52 = "\"),";
-  protected final String TEXT_53 = NL + "\t\t\t\t null));";
-  protected final String TEXT_54 = NL + "\t\t\t\t new String[] {";
-  protected final String TEXT_55 = NL + "\t\t\t\t\t\"";
-  protected final String TEXT_56 = "\"";
-  protected final String TEXT_57 = ",";
-  protected final String TEXT_58 = NL + "\t\t\t\t }));";
-  protected final String TEXT_59 = NL + "\t}" + NL;
-  protected final String TEXT_60 = NL + "\t/**" + NL + "\t * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an" + NL + "\t * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or" + NL + "\t * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
-  protected final String TEXT_61 = NL + "\t@Override";
-  protected final String TEXT_62 = NL + "\tpublic ";
-  protected final String TEXT_63 = " getChildrenFeatures(Object object)" + NL + "\t{" + NL + "\t\tif (childrenFeatures == null)" + NL + "\t\t{" + NL + "\t\t\tsuper.getChildrenFeatures(object);";
-  protected final String TEXT_64 = NL + "\t\t\tchildrenFeatures.add(";
-  protected final String TEXT_65 = ");";
-  protected final String TEXT_66 = NL + "\t\t}" + NL + "\t\treturn childrenFeatures;" + NL + "\t}" + NL;
-  protected final String TEXT_67 = NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
-  protected final String TEXT_68 = NL + "\t@Override";
-  protected final String TEXT_69 = NL + "\tprotected ";
-  protected final String TEXT_70 = " getChildFeature(Object object, Object child)" + NL + "\t{" + NL + "\t\t// Check the type of the specified child object and return the proper feature to use for" + NL + "\t\t// adding (see {@link AddCommand}) it as a child." + NL + "" + NL + "\t\treturn super.getChildFeature(object, child);" + NL + "\t}" + NL;
-  protected final String TEXT_71 = NL + "\t/**" + NL + "\t * This returns ";
-  protected final String TEXT_72 = ".gif." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
+  protected final String TEXT_45 = "," + NL + "\t\t\t\t ";
+  protected final String TEXT_46 = ",";
+  protected final String TEXT_47 = NL + "\t\t\t\t null,";
+  protected final String TEXT_48 = NL + "\t\t\t\t ";
+  protected final String TEXT_49 = ".";
+  protected final String TEXT_50 = ",";
+  protected final String TEXT_51 = NL + "\t\t\t\t null,";
+  protected final String TEXT_52 = NL + "\t\t\t\t getString(\"";
+  protected final String TEXT_53 = "\"),";
+  protected final String TEXT_54 = NL + "\t\t\t\t null));";
+  protected final String TEXT_55 = NL + "\t\t\t\t new String[] {";
+  protected final String TEXT_56 = NL + "\t\t\t\t\t\"";
+  protected final String TEXT_57 = "\"";
+  protected final String TEXT_58 = ",";
+  protected final String TEXT_59 = NL + "\t\t\t\t }));";
+  protected final String TEXT_60 = NL + "\t}" + NL;
+  protected final String TEXT_61 = NL + "\t/**" + NL + "\t * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an" + NL + "\t * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or" + NL + "\t * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
+  protected final String TEXT_62 = NL + "\t@Override";
+  protected final String TEXT_63 = NL + "\tpublic ";
+  protected final String TEXT_64 = " getChildrenFeatures(Object object)" + NL + "\t{" + NL + "\t\tif (childrenFeatures == null)" + NL + "\t\t{" + NL + "\t\t\tsuper.getChildrenFeatures(object);";
+  protected final String TEXT_65 = NL + "\t\t\tchildrenFeatures.add(";
+  protected final String TEXT_66 = ");";
+  protected final String TEXT_67 = NL + "\t\t}" + NL + "\t\treturn childrenFeatures;" + NL + "\t}" + NL;
+  protected final String TEXT_68 = NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
+  protected final String TEXT_69 = NL + "\t@Override";
+  protected final String TEXT_70 = NL + "\tprotected ";
+  protected final String TEXT_71 = " getChildFeature(Object object, Object child)" + NL + "\t{" + NL + "\t\t// Check the type of the specified child object and return the proper feature to use for" + NL + "\t\t// adding (see {@link AddCommand}) it as a child." + NL + "" + NL + "\t\treturn super.getChildFeature(object, child);" + NL + "\t}" + NL;
+  protected final String TEXT_72 = NL + "\t/**" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
   protected final String TEXT_73 = NL + "\t@Override";
-  protected final String TEXT_74 = NL + "\tpublic Object getImage(Object object)" + NL + "\t{" + NL + "\t\treturn overlayImage(object, getResourceLocator().getImage(\"full/obj16/";
-  protected final String TEXT_75 = "\"));";
-  protected final String TEXT_76 = NL + "\t}" + NL;
-  protected final String TEXT_77 = NL + "\t/**" + NL + "\t * This returns the label text for the adapted class." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
+  protected final String TEXT_74 = NL + "\tpublic boolean hasChildren(Object object)" + NL + "\t{" + NL + "\t\treturn hasChildren(object, ";
+  protected final String TEXT_75 = ");" + NL + "\t}" + NL;
+  protected final String TEXT_76 = NL + "\t/**" + NL + "\t * This returns ";
+  protected final String TEXT_77 = ".gif." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
   protected final String TEXT_78 = NL + "\t@Override";
-  protected final String TEXT_79 = NL + "\tpublic String getText(Object object)" + NL + "\t{";
-  protected final String TEXT_80 = NL + "\t\t";
-  protected final String TEXT_81 = "<?, ?>";
-  protected final String TEXT_82 = " ";
-  protected final String TEXT_83 = " = (";
-  protected final String TEXT_84 = "<?, ?>";
-  protected final String TEXT_85 = ")object;";
-  protected final String TEXT_86 = NL + "\t\treturn \"\" + ";
-  protected final String TEXT_87 = ".getKey() + \" -> \" + ";
-  protected final String TEXT_88 = ".getValue();";
-  protected final String TEXT_89 = NL + "\t\tString key = crop(\"\" + ";
-  protected final String TEXT_90 = ".getKey());";
-  protected final String TEXT_91 = NL + "\t\tString key = \"\" + ";
-  protected final String TEXT_92 = ".getKey();";
-  protected final String TEXT_93 = NL + "\t\tString value = crop(\"\" + ";
-  protected final String TEXT_94 = ".getValue());";
-  protected final String TEXT_95 = NL + "\t\tString value = \"\" + ";
-  protected final String TEXT_96 = ".getValue();";
-  protected final String TEXT_97 = NL + "\t\treturn key + \" -> \" + value;";
-  protected final String TEXT_98 = NL + "\t\t";
-  protected final String TEXT_99 = " ";
-  protected final String TEXT_100 = " = (";
-  protected final String TEXT_101 = ")object;" + NL + "\t\treturn getString(\"_UI_";
-  protected final String TEXT_102 = "_type\") + \" \" + ";
-  protected final String TEXT_103 = ".";
-  protected final String TEXT_104 = "();";
-  protected final String TEXT_105 = NL + "\t\tString label = crop(((";
-  protected final String TEXT_106 = ")object).";
-  protected final String TEXT_107 = "());";
-  protected final String TEXT_108 = NL + "\t\tString label = ((";
-  protected final String TEXT_109 = ")object).";
-  protected final String TEXT_110 = "();";
-  protected final String TEXT_111 = NL + "\t\t";
-  protected final String TEXT_112 = " labelValue = ((";
-  protected final String TEXT_113 = ")object).eGet(";
-  protected final String TEXT_114 = ");";
-  protected final String TEXT_115 = NL + "\t\t";
-  protected final String TEXT_116 = " labelValue = ((";
-  protected final String TEXT_117 = ")object).";
-  protected final String TEXT_118 = "();";
-  protected final String TEXT_119 = NL + "\t\tString label = labelValue == null ? null : labelValue.toString();";
-  protected final String TEXT_120 = NL + "\t\treturn label == null || label.length() == 0 ?" + NL + "\t\t\tgetString(\"_UI_";
-  protected final String TEXT_121 = "_type\") :";
-  protected final String TEXT_122 = NL + "\t\t\tgetString(\"_UI_";
-  protected final String TEXT_123 = "_type\") + \" \" + label;";
-  protected final String TEXT_124 = NL + "\t\treturn getString(\"_UI_";
-  protected final String TEXT_125 = "_type\");";
-  protected final String TEXT_126 = NL + "\t}" + NL + "" + NL + "\t/**" + NL + "\t * This handles model notifications by calling {@link #updateChildren} to update any cached" + NL + "\t * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
-  protected final String TEXT_127 = NL + "\t@Override";
-  protected final String TEXT_128 = NL + "\tpublic void notifyChanged(Notification notification)" + NL + "\t{" + NL + "\t\tupdateChildren(notification);";
-  protected final String TEXT_129 = NL + NL + "\t\tswitch (notification.getFeatureID(";
-  protected final String TEXT_130 = ".class))" + NL + "\t\t{";
-  protected final String TEXT_131 = NL + "\t\t\tcase ";
-  protected final String TEXT_132 = ":";
-  protected final String TEXT_133 = NL + "\t\t\t\tfireNotifyChanged(new ";
-  protected final String TEXT_134 = "(notification, notification.getNotifier(), false, true));" + NL + "\t\t\t\treturn;";
-  protected final String TEXT_135 = NL + "\t\t\tcase ";
-  protected final String TEXT_136 = ":";
-  protected final String TEXT_137 = NL + "\t\t\t\tfireNotifyChanged(new ";
-  protected final String TEXT_138 = "(notification, notification.getNotifier(), true, false));" + NL + "\t\t\t\treturn;";
-  protected final String TEXT_139 = NL + "\t\t\tcase ";
-  protected final String TEXT_140 = ":";
-  protected final String TEXT_141 = NL + "\t\t\t\tfireNotifyChanged(new ";
-  protected final String TEXT_142 = "(notification, notification.getNotifier(), true, true));" + NL + "\t\t\t\treturn;";
-  protected final String TEXT_143 = NL + "\t\t}";
-  protected final String TEXT_144 = NL + "\t\tsuper.notifyChanged(notification);" + NL + "\t}" + NL;
-  protected final String TEXT_145 = NL + "\t/**" + NL + "\t * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children" + NL + "\t * that can be created under this object." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
-  protected final String TEXT_146 = NL + "\t@Override";
-  protected final String TEXT_147 = NL + "\tprotected void collectNewChildDescriptors(";
-  protected final String TEXT_148 = " newChildDescriptors, Object object)" + NL + "\t{" + NL + "\t\tsuper.collectNewChildDescriptors(newChildDescriptors, object);";
-  protected final String TEXT_149 = NL + NL + "\t\tnewChildDescriptors.add" + NL + "\t\t\t(createChildParameter" + NL + "\t\t\t\t(";
-  protected final String TEXT_150 = ",";
-  protected final String TEXT_151 = NL + "\t\t\t\t ";
-  protected final String TEXT_152 = ".create(";
-  protected final String TEXT_153 = ")));";
-  protected final String TEXT_154 = NL + "\t\t\t\t ";
-  protected final String TEXT_155 = ".create";
-  protected final String TEXT_156 = "()));";
-  protected final String TEXT_157 = NL + NL + "\t\tnewChildDescriptors.add" + NL + "\t\t\t(createChildParameter" + NL + "\t\t\t\t(";
-  protected final String TEXT_158 = "," + NL + "\t\t\t\t ";
-  protected final String TEXT_159 = ".createEntry" + NL + "\t\t\t\t\t(";
-  protected final String TEXT_160 = ",";
-  protected final String TEXT_161 = NL + "\t\t\t\t\t ";
-  protected final String TEXT_162 = ".create(";
-  protected final String TEXT_163 = "))));";
-  protected final String TEXT_164 = NL + "\t\t\t\t\t ";
-  protected final String TEXT_165 = ".create";
-  protected final String TEXT_166 = "())));";
-  protected final String TEXT_167 = NL + NL + "\t\tnewChildDescriptors.add" + NL + "\t\t\t(createChildParameter" + NL + "\t\t\t\t(";
-  protected final String TEXT_168 = "," + NL + "\t\t\t\t ";
-  protected final String TEXT_169 = ".createEntry" + NL + "\t\t\t\t\t(";
-  protected final String TEXT_170 = ",";
-  protected final String TEXT_171 = NL + "\t\t\t\t\t ";
-  protected final String TEXT_172 = ")));";
-  protected final String TEXT_173 = NL + "\t\t\t\t\t ";
-  protected final String TEXT_174 = ")));";
-  protected final String TEXT_175 = NL + "\t\t\t\t\t ";
-  protected final String TEXT_176 = ".createFromString(";
-  protected final String TEXT_177 = ", ";
-  protected final String TEXT_178 = "))));";
-  protected final String TEXT_179 = " // TODO: ensure this is a valid literal value";
-  protected final String TEXT_180 = NL + NL + "\t\tnewChildDescriptors.add" + NL + "\t\t\t(createChildParameter" + NL + "\t\t\t\t(";
-  protected final String TEXT_181 = ",";
-  protected final String TEXT_182 = NL + "\t\t\t\t ";
-  protected final String TEXT_183 = ".create(";
-  protected final String TEXT_184 = ")));";
-  protected final String TEXT_185 = NL + "\t\t\t\t ";
-  protected final String TEXT_186 = ".create";
-  protected final String TEXT_187 = "()));";
-  protected final String TEXT_188 = NL + NL + "\t\tnewChildDescriptors.add" + NL + "\t\t\t(createChildParameter" + NL + "\t\t\t\t(";
-  protected final String TEXT_189 = ",";
+  protected final String TEXT_79 = NL + "\tpublic Object getImage(Object object)" + NL + "\t{" + NL + "\t\treturn overlayImage(object, getResourceLocator().getImage(\"full/obj16/";
+  protected final String TEXT_80 = "\"));";
+  protected final String TEXT_81 = NL + "\t}" + NL;
+  protected final String TEXT_82 = NL + "\t/**" + NL + "\t * This returns the label text for the adapted class." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
+  protected final String TEXT_83 = NL + "\t@Override";
+  protected final String TEXT_84 = NL + "\tpublic String getText(Object object)" + NL + "\t{";
+  protected final String TEXT_85 = NL + "\t\t";
+  protected final String TEXT_86 = "<?, ?>";
+  protected final String TEXT_87 = " ";
+  protected final String TEXT_88 = " = (";
+  protected final String TEXT_89 = "<?, ?>";
+  protected final String TEXT_90 = ")object;";
+  protected final String TEXT_91 = NL + "\t\treturn \"\" + ";
+  protected final String TEXT_92 = ".getKey() + \" -> \" + ";
+  protected final String TEXT_93 = ".getValue();";
+  protected final String TEXT_94 = NL + "\t\tString key = crop(\"\" + ";
+  protected final String TEXT_95 = ".getKey());";
+  protected final String TEXT_96 = NL + "\t\tString key = \"\" + ";
+  protected final String TEXT_97 = ".getKey();";
+  protected final String TEXT_98 = NL + "\t\tString value = crop(\"\" + ";
+  protected final String TEXT_99 = ".getValue());";
+  protected final String TEXT_100 = NL + "\t\tString value = \"\" + ";
+  protected final String TEXT_101 = ".getValue();";
+  protected final String TEXT_102 = NL + "\t\treturn key + \" -> \" + value;";
+  protected final String TEXT_103 = NL + "\t\t";
+  protected final String TEXT_104 = " ";
+  protected final String TEXT_105 = " = (";
+  protected final String TEXT_106 = ")object;" + NL + "\t\treturn getString(\"_UI_";
+  protected final String TEXT_107 = "_type\") + \" \" + ";
+  protected final String TEXT_108 = ".";
+  protected final String TEXT_109 = "();";
+  protected final String TEXT_110 = NL + "\t\tString label = crop(((";
+  protected final String TEXT_111 = ")object).";
+  protected final String TEXT_112 = "());";
+  protected final String TEXT_113 = NL + "\t\tString label = ((";
+  protected final String TEXT_114 = ")object).";
+  protected final String TEXT_115 = "();";
+  protected final String TEXT_116 = NL + "\t\t";
+  protected final String TEXT_117 = " labelValue = ((";
+  protected final String TEXT_118 = ")object).eGet(";
+  protected final String TEXT_119 = ");";
+  protected final String TEXT_120 = NL + "\t\t";
+  protected final String TEXT_121 = " labelValue = ((";
+  protected final String TEXT_122 = ")object).";
+  protected final String TEXT_123 = "();";
+  protected final String TEXT_124 = NL + "\t\tString label = labelValue == null ? null : labelValue.toString();";
+  protected final String TEXT_125 = NL + "\t\treturn label == null || label.length() == 0 ?" + NL + "\t\t\tgetString(\"_UI_";
+  protected final String TEXT_126 = "_type\") :";
+  protected final String TEXT_127 = NL + "\t\t\tgetString(\"_UI_";
+  protected final String TEXT_128 = "_type\") + \" \" + label;";
+  protected final String TEXT_129 = NL + "\t\treturn getString(\"_UI_";
+  protected final String TEXT_130 = "_type\");";
+  protected final String TEXT_131 = NL + "\t}" + NL + "" + NL + "\t/**" + NL + "\t * This handles model notifications by calling {@link #updateChildren} to update any cached" + NL + "\t * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
+  protected final String TEXT_132 = NL + "\t@Override";
+  protected final String TEXT_133 = NL + "\tpublic void notifyChanged(Notification notification)" + NL + "\t{" + NL + "\t\tupdateChildren(notification);";
+  protected final String TEXT_134 = NL + NL + "\t\tswitch (notification.getFeatureID(";
+  protected final String TEXT_135 = ".class))" + NL + "\t\t{";
+  protected final String TEXT_136 = NL + "\t\t\tcase ";
+  protected final String TEXT_137 = ":";
+  protected final String TEXT_138 = NL + "\t\t\t\tfireNotifyChanged(new ";
+  protected final String TEXT_139 = "(notification, notification.getNotifier(), false, true));" + NL + "\t\t\t\treturn;";
+  protected final String TEXT_140 = NL + "\t\t\tcase ";
+  protected final String TEXT_141 = ":";
+  protected final String TEXT_142 = NL + "\t\t\t\tfireNotifyChanged(new ";
+  protected final String TEXT_143 = "(notification, notification.getNotifier(), true, false));" + NL + "\t\t\t\treturn;";
+  protected final String TEXT_144 = NL + "\t\t\tcase ";
+  protected final String TEXT_145 = ":";
+  protected final String TEXT_146 = NL + "\t\t\t\tfireNotifyChanged(new ";
+  protected final String TEXT_147 = "(notification, notification.getNotifier(), true, true));" + NL + "\t\t\t\treturn;";
+  protected final String TEXT_148 = NL + "\t\t}";
+  protected final String TEXT_149 = NL + "\t\tsuper.notifyChanged(notification);" + NL + "\t}" + NL;
+  protected final String TEXT_150 = NL + "\t/**" + NL + "\t * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children" + NL + "\t * that can be created under this object." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
+  protected final String TEXT_151 = NL + "\t@Override";
+  protected final String TEXT_152 = NL + "\tprotected void collectNewChildDescriptors(";
+  protected final String TEXT_153 = " newChildDescriptors, Object object)" + NL + "\t{" + NL + "\t\tsuper.collectNewChildDescriptors(newChildDescriptors, object);";
+  protected final String TEXT_154 = NL + NL + "\t\tnewChildDescriptors.add" + NL + "\t\t\t(createChildParameter" + NL + "\t\t\t\t(";
+  protected final String TEXT_155 = ",";
+  protected final String TEXT_156 = NL + "\t\t\t\t ";
+  protected final String TEXT_157 = ".create(";
+  protected final String TEXT_158 = ")));";
+  protected final String TEXT_159 = NL + "\t\t\t\t ";
+  protected final String TEXT_160 = ".create";
+  protected final String TEXT_161 = "()));";
+  protected final String TEXT_162 = NL + NL + "\t\tnewChildDescriptors.add" + NL + "\t\t\t(createChildParameter" + NL + "\t\t\t\t(";
+  protected final String TEXT_163 = "," + NL + "\t\t\t\t ";
+  protected final String TEXT_164 = ".createEntry" + NL + "\t\t\t\t\t(";
+  protected final String TEXT_165 = ",";
+  protected final String TEXT_166 = NL + "\t\t\t\t\t ";
+  protected final String TEXT_167 = ".create(";
+  protected final String TEXT_168 = "))));";
+  protected final String TEXT_169 = NL + "\t\t\t\t\t ";
+  protected final String TEXT_170 = ".create";
+  protected final String TEXT_171 = "())));";
+  protected final String TEXT_172 = NL + NL + "\t\tnewChildDescriptors.add" + NL + "\t\t\t(createChildParameter" + NL + "\t\t\t\t(";
+  protected final String TEXT_173 = "," + NL + "\t\t\t\t ";
+  protected final String TEXT_174 = ".createEntry" + NL + "\t\t\t\t\t(";
+  protected final String TEXT_175 = ",";
+  protected final String TEXT_176 = NL + "\t\t\t\t\t ";
+  protected final String TEXT_177 = ")));";
+  protected final String TEXT_178 = NL + "\t\t\t\t\t ";
+  protected final String TEXT_179 = ")));";
+  protected final String TEXT_180 = NL + "\t\t\t\t\t ";
+  protected final String TEXT_181 = ".createFromString(";
+  protected final String TEXT_182 = ", ";
+  protected final String TEXT_183 = "))));";
+  protected final String TEXT_184 = " // TODO: ensure this is a valid literal value";
+  protected final String TEXT_185 = NL + NL + "\t\tnewChildDescriptors.add" + NL + "\t\t\t(createChildParameter" + NL + "\t\t\t\t(";
+  protected final String TEXT_186 = ",";
+  protected final String TEXT_187 = NL + "\t\t\t\t ";
+  protected final String TEXT_188 = ".create(";
+  protected final String TEXT_189 = ")));";
   protected final String TEXT_190 = NL + "\t\t\t\t ";
-  protected final String TEXT_191 = "));";
-  protected final String TEXT_192 = NL + "\t\t\t\t ";
-  protected final String TEXT_193 = "));";
-  protected final String TEXT_194 = NL + "\t\t\t\t ";
-  protected final String TEXT_195 = ".createFromString(";
-  protected final String TEXT_196 = ", ";
-  protected final String TEXT_197 = ")));";
-  protected final String TEXT_198 = " // TODO: ensure this is a valid literal value";
-  protected final String TEXT_199 = NL + "\t}" + NL;
-  protected final String TEXT_200 = NL + "\t/**" + NL + "\t * This returns the label text for {@link org.eclipse.emf.edit.command.CreateChildCommand}." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
-  protected final String TEXT_201 = NL + "\t@Override";
-  protected final String TEXT_202 = NL + "\tpublic String getCreateChildText(Object owner, Object feature, Object child, ";
-  protected final String TEXT_203 = " selection)" + NL + "\t{" + NL + "\t\tObject childFeature = feature;" + NL + "\t\tObject childObject = child;" + NL;
-  protected final String TEXT_204 = NL + "\t\tif (childFeature instanceof ";
-  protected final String TEXT_205 = " && ";
-  protected final String TEXT_206 = ".isFeatureMap((EStructuralFeature)childFeature))" + NL + "\t\t{" + NL + "\t\t\t";
-  protected final String TEXT_207 = ".Entry entry = (FeatureMap.Entry)childObject;" + NL + "\t\t\tchildFeature = entry.getEStructuralFeature();" + NL + "\t\t\tchildObject = entry.getValue();" + NL + "\t\t}" + NL;
-  protected final String TEXT_208 = NL + "\t\tboolean qualify =";
-  protected final String TEXT_209 = NL + "\t\t\tchildFeature == ";
-  protected final String TEXT_210 = NL + NL + "\t\tif (qualify)" + NL + "\t\t{" + NL + "\t\t\treturn getString" + NL + "\t\t\t\t(\"_UI_CreateChild_text2\",";
-  protected final String TEXT_211 = NL + "\t\t\t\t new Object[] { getTypeText(childObject), getFeatureText(childFeature), getTypeText(owner) });" + NL + "\t\t}" + NL + "\t\treturn super.getCreateChildText(owner, feature, child, selection);" + NL + "\t}" + NL;
-  protected final String TEXT_212 = NL + "\t/**" + NL + "\t * This returns the icon image for {@link org.eclipse.emf.edit.command.CreateChildCommand}." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
-  protected final String TEXT_213 = NL + "\t@Override";
-  protected final String TEXT_214 = NL + "\tpublic Object getCreateChildImage(Object owner, Object feature, Object child, ";
-  protected final String TEXT_215 = " selection)" + NL + "\t{" + NL + "\t\tif (feature instanceof ";
-  protected final String TEXT_216 = " && ";
-  protected final String TEXT_217 = ".isFeatureMap((";
-  protected final String TEXT_218 = ")feature))" + NL + "\t\t{" + NL + "\t\t\t";
-  protected final String TEXT_219 = ".Entry entry = (";
-  protected final String TEXT_220 = ".Entry)child;" + NL + "\t\t\tfeature = entry.getEStructuralFeature();" + NL + "\t\t\tchild = entry.getValue();        " + NL + "\t\t}" + NL + "" + NL + "\t\tif (feature instanceof ";
-  protected final String TEXT_221 = " && child instanceof ";
-  protected final String TEXT_222 = ")" + NL + "\t\t{" + NL + "\t\t\tString name = \"full/obj16/\" + ((EObject)child).eClass().getName();";
-  protected final String TEXT_223 = NL + NL + "\t\t\ttry" + NL + "\t\t\t{" + NL + "\t\t\t\treturn getResourceLocator().getImage(name);" + NL + "\t\t\t}" + NL + "\t\t\tcatch (Exception e)" + NL + "\t\t\t{" + NL + "\t\t\t\t";
-  protected final String TEXT_224 = ".INSTANCE.log(e);" + NL + "\t\t\t}" + NL + "\t\t}" + NL + "" + NL + "\t\treturn super.getCreateChildImage(owner, feature, child, selection);" + NL + "\t}" + NL;
-  protected final String TEXT_225 = NL + "\t/**" + NL + "\t * Return the resource locator for this item provider's resources." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
-  protected final String TEXT_226 = NL + "\t@Override";
-  protected final String TEXT_227 = NL + "\tpublic ResourceLocator getResourceLocator()" + NL + "\t{" + NL + "\t\treturn ";
-  protected final String TEXT_228 = ".INSTANCE;" + NL + "\t}" + NL;
-  protected final String TEXT_229 = NL + "\t/**" + NL + "\t * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#createAddCommand(org.eclipse.emf.edit.domain.EditingDomain, org.eclipse.emf.ecore.EObject, org.eclipse.emf.ecore.EStructuralFeature, java.util.Collection, int)" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
-  protected final String TEXT_230 = NL + "\t@Override";
-  protected final String TEXT_231 = NL + "\tprotected ";
-  protected final String TEXT_232 = " createAddCommand(";
-  protected final String TEXT_233 = " domain, ";
-  protected final String TEXT_234 = " owner, ";
-  protected final String TEXT_235 = " feature, ";
-  protected final String TEXT_236 = " collection, int index) {";
-  protected final String TEXT_237 = NL + "\t\tif (feature == ";
-  protected final String TEXT_238 = ") {" + NL + "\t\t\treturn new ";
-  protected final String TEXT_239 = "(domain, owner, feature, ";
-  protected final String TEXT_240 = ", collection, index);" + NL + "\t\t}";
-  protected final String TEXT_241 = NL + "\t\treturn super.createAddCommand(domain, owner, feature, collection, index);" + NL + "\t}" + NL;
-  protected final String TEXT_242 = NL + "\t/**" + NL + "\t * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#createRemoveCommand(org.eclipse.emf.edit.domain.EditingDomain, org.eclipse.emf.ecore.EObject, org.eclipse.emf.ecore.EStructuralFeature, java.util.Collection)" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
-  protected final String TEXT_243 = NL + "\t@Override";
-  protected final String TEXT_244 = NL + "\tprotected ";
-  protected final String TEXT_245 = " createRemoveCommand(";
-  protected final String TEXT_246 = " domain, ";
-  protected final String TEXT_247 = " owner, ";
-  protected final String TEXT_248 = " feature, ";
-  protected final String TEXT_249 = " collection) {";
-  protected final String TEXT_250 = NL + "\t\tif (feature == ";
-  protected final String TEXT_251 = ") {" + NL + "\t\t\treturn new ";
-  protected final String TEXT_252 = "(domain, owner, feature, ";
-  protected final String TEXT_253 = ", collection);" + NL + "\t\t}";
-  protected final String TEXT_254 = NL + "\t\treturn super.createRemoveCommand(domain, owner, feature, collection);" + NL + "\t}" + NL;
-  protected final String TEXT_255 = NL + "\t/**" + NL + "\t * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#createReplaceCommand(org.eclipse.emf.edit.domain.EditingDomain, org.eclipse.emf.ecore.EObject, org.eclipse.emf.ecore.EStructuralFeature, org.eclipse.emf.ecore.EObject, java.util.Collection)" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
-  protected final String TEXT_256 = NL + "\t@Override";
-  protected final String TEXT_257 = NL + "\tprotected ";
-  protected final String TEXT_258 = " createReplaceCommand(";
-  protected final String TEXT_259 = " domain, ";
-  protected final String TEXT_260 = " owner, ";
-  protected final String TEXT_261 = " feature, ";
-  protected final String TEXT_262 = " value, ";
-  protected final String TEXT_263 = " collection) {";
-  protected final String TEXT_264 = NL + "\t\tif (feature == ";
-  protected final String TEXT_265 = ") {" + NL + "\t\t\treturn new ";
-  protected final String TEXT_266 = "(domain, owner, feature, ";
-  protected final String TEXT_267 = ", ";
-  protected final String TEXT_268 = ", value, collection);" + NL + "\t\t}";
-  protected final String TEXT_269 = NL + "\t\treturn super.createReplaceCommand(domain, owner, feature, value, collection);" + NL + "\t}" + NL;
-  protected final String TEXT_270 = NL + "\t/**" + NL + "\t * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#createSetCommand(org.eclipse.emf.edit.domain.EditingDomain, org.eclipse.emf.ecore.EObject, org.eclipse.emf.ecore.EStructuralFeature, java.lang.Object)" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
-  protected final String TEXT_271 = NL + "\t@Override";
-  protected final String TEXT_272 = NL + "\tprotected ";
-  protected final String TEXT_273 = " createSetCommand(";
-  protected final String TEXT_274 = " domain, ";
-  protected final String TEXT_275 = " owner, ";
-  protected final String TEXT_276 = " feature, Object value) {";
-  protected final String TEXT_277 = NL + "\t\tif (feature == ";
-  protected final String TEXT_278 = ") {" + NL + "\t\t\treturn new ";
-  protected final String TEXT_279 = "(domain, owner, feature, ";
-  protected final String TEXT_280 = ", ";
-  protected final String TEXT_281 = ", value);" + NL + "\t\t}";
-  protected final String TEXT_282 = NL + "\t\treturn super.createSetCommand(domain, owner, feature, value);" + NL + "\t}" + NL;
-  protected final String TEXT_283 = NL + "}";
-  protected final String TEXT_284 = NL;
+  protected final String TEXT_191 = ".create";
+  protected final String TEXT_192 = "()));";
+  protected final String TEXT_193 = NL + NL + "\t\tnewChildDescriptors.add" + NL + "\t\t\t(createChildParameter" + NL + "\t\t\t\t(";
+  protected final String TEXT_194 = ",";
+  protected final String TEXT_195 = NL + "\t\t\t\t ";
+  protected final String TEXT_196 = "));";
+  protected final String TEXT_197 = NL + "\t\t\t\t ";
+  protected final String TEXT_198 = "));";
+  protected final String TEXT_199 = NL + "\t\t\t\t ";
+  protected final String TEXT_200 = ".createFromString(";
+  protected final String TEXT_201 = ", ";
+  protected final String TEXT_202 = ")));";
+  protected final String TEXT_203 = " // TODO: ensure this is a valid literal value";
+  protected final String TEXT_204 = NL + "\t}" + NL;
+  protected final String TEXT_205 = NL + "\t/**" + NL + "\t * This returns the label text for {@link org.eclipse.emf.edit.command.CreateChildCommand}." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
+  protected final String TEXT_206 = NL + "\t@Override";
+  protected final String TEXT_207 = NL + "\tpublic String getCreateChildText(Object owner, Object feature, Object child, ";
+  protected final String TEXT_208 = " selection)" + NL + "\t{" + NL + "\t\tObject childFeature = feature;" + NL + "\t\tObject childObject = child;" + NL;
+  protected final String TEXT_209 = NL + "\t\tif (childFeature instanceof ";
+  protected final String TEXT_210 = " && ";
+  protected final String TEXT_211 = ".isFeatureMap((EStructuralFeature)childFeature))" + NL + "\t\t{" + NL + "\t\t\t";
+  protected final String TEXT_212 = ".Entry entry = (FeatureMap.Entry)childObject;" + NL + "\t\t\tchildFeature = entry.getEStructuralFeature();" + NL + "\t\t\tchildObject = entry.getValue();" + NL + "\t\t}" + NL;
+  protected final String TEXT_213 = NL + "\t\tboolean qualify =";
+  protected final String TEXT_214 = NL + "\t\t\tchildFeature == ";
+  protected final String TEXT_215 = NL + NL + "\t\tif (qualify)" + NL + "\t\t{" + NL + "\t\t\treturn getString" + NL + "\t\t\t\t(\"_UI_CreateChild_text2\",";
+  protected final String TEXT_216 = NL + "\t\t\t\t new Object[] { getTypeText(childObject), getFeatureText(childFeature), getTypeText(owner) });" + NL + "\t\t}" + NL + "\t\treturn super.getCreateChildText(owner, feature, child, selection);" + NL + "\t}" + NL;
+  protected final String TEXT_217 = NL + "\t/**" + NL + "\t * This returns the icon image for {@link org.eclipse.emf.edit.command.CreateChildCommand}." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
+  protected final String TEXT_218 = NL + "\t@Override";
+  protected final String TEXT_219 = NL + "\tpublic Object getCreateChildImage(Object owner, Object feature, Object child, ";
+  protected final String TEXT_220 = " selection)" + NL + "\t{" + NL + "\t\tif (feature instanceof ";
+  protected final String TEXT_221 = " && ";
+  protected final String TEXT_222 = ".isFeatureMap((";
+  protected final String TEXT_223 = ")feature))" + NL + "\t\t{" + NL + "\t\t\t";
+  protected final String TEXT_224 = ".Entry entry = (";
+  protected final String TEXT_225 = ".Entry)child;" + NL + "\t\t\tfeature = entry.getEStructuralFeature();" + NL + "\t\t\tchild = entry.getValue();        " + NL + "\t\t}" + NL + "" + NL + "\t\tif (feature instanceof ";
+  protected final String TEXT_226 = " && child instanceof ";
+  protected final String TEXT_227 = ")" + NL + "\t\t{" + NL + "\t\t\tString name = \"full/obj16/\" + ((EObject)child).eClass().getName();";
+  protected final String TEXT_228 = NL + NL + "\t\t\ttry" + NL + "\t\t\t{" + NL + "\t\t\t\treturn getResourceLocator().getImage(name);" + NL + "\t\t\t}" + NL + "\t\t\tcatch (Exception e)" + NL + "\t\t\t{" + NL + "\t\t\t\t";
+  protected final String TEXT_229 = ".INSTANCE.log(e);" + NL + "\t\t\t}" + NL + "\t\t}" + NL + "" + NL + "\t\treturn super.getCreateChildImage(owner, feature, child, selection);" + NL + "\t}" + NL;
+  protected final String TEXT_230 = NL + "\t/**" + NL + "\t * Return the resource locator for this item provider's resources." + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
+  protected final String TEXT_231 = NL + "\t@Override";
+  protected final String TEXT_232 = NL + "\tpublic ResourceLocator getResourceLocator()" + NL + "\t{" + NL + "\t\treturn ";
+  protected final String TEXT_233 = ".INSTANCE;" + NL + "\t}" + NL;
+  protected final String TEXT_234 = NL + "\t/**" + NL + "\t * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#createAddCommand(org.eclipse.emf.edit.domain.EditingDomain, org.eclipse.emf.ecore.EObject, org.eclipse.emf.ecore.EStructuralFeature, java.util.Collection, int)" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
+  protected final String TEXT_235 = NL + "\t@Override";
+  protected final String TEXT_236 = NL + "\tprotected ";
+  protected final String TEXT_237 = " createAddCommand(";
+  protected final String TEXT_238 = " domain, ";
+  protected final String TEXT_239 = " owner, ";
+  protected final String TEXT_240 = " feature, ";
+  protected final String TEXT_241 = " collection, int index) {";
+  protected final String TEXT_242 = NL + "\t\tif (feature == ";
+  protected final String TEXT_243 = ") {" + NL + "\t\t\treturn new ";
+  protected final String TEXT_244 = "(domain, owner, feature, ";
+  protected final String TEXT_245 = ", collection, index);" + NL + "\t\t}";
+  protected final String TEXT_246 = NL + "\t\treturn super.createAddCommand(domain, owner, feature, collection, index);" + NL + "\t}" + NL;
+  protected final String TEXT_247 = NL + "\t/**" + NL + "\t * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#createRemoveCommand(org.eclipse.emf.edit.domain.EditingDomain, org.eclipse.emf.ecore.EObject, org.eclipse.emf.ecore.EStructuralFeature, java.util.Collection)" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
+  protected final String TEXT_248 = NL + "\t@Override";
+  protected final String TEXT_249 = NL + "\tprotected ";
+  protected final String TEXT_250 = " createRemoveCommand(";
+  protected final String TEXT_251 = " domain, ";
+  protected final String TEXT_252 = " owner, ";
+  protected final String TEXT_253 = " feature, ";
+  protected final String TEXT_254 = " collection) {";
+  protected final String TEXT_255 = NL + "\t\tif (feature == ";
+  protected final String TEXT_256 = ") {" + NL + "\t\t\treturn new ";
+  protected final String TEXT_257 = "(domain, owner, feature, ";
+  protected final String TEXT_258 = ", collection);" + NL + "\t\t}";
+  protected final String TEXT_259 = NL + "\t\treturn super.createRemoveCommand(domain, owner, feature, collection);" + NL + "\t}" + NL;
+  protected final String TEXT_260 = NL + "\t/**" + NL + "\t * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#createReplaceCommand(org.eclipse.emf.edit.domain.EditingDomain, org.eclipse.emf.ecore.EObject, org.eclipse.emf.ecore.EStructuralFeature, org.eclipse.emf.ecore.EObject, java.util.Collection)" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
+  protected final String TEXT_261 = NL + "\t@Override";
+  protected final String TEXT_262 = NL + "\tprotected ";
+  protected final String TEXT_263 = " createReplaceCommand(";
+  protected final String TEXT_264 = " domain, ";
+  protected final String TEXT_265 = " owner, ";
+  protected final String TEXT_266 = " feature, ";
+  protected final String TEXT_267 = " value, ";
+  protected final String TEXT_268 = " collection) {";
+  protected final String TEXT_269 = NL + "\t\tif (feature == ";
+  protected final String TEXT_270 = ") {" + NL + "\t\t\treturn new ";
+  protected final String TEXT_271 = "(domain, owner, feature, ";
+  protected final String TEXT_272 = ", ";
+  protected final String TEXT_273 = ", value, collection);" + NL + "\t\t}";
+  protected final String TEXT_274 = NL + "\t\treturn super.createReplaceCommand(domain, owner, feature, value, collection);" + NL + "\t}" + NL;
+  protected final String TEXT_275 = NL + "\t/**" + NL + "\t * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#createSetCommand(org.eclipse.emf.edit.domain.EditingDomain, org.eclipse.emf.ecore.EObject, org.eclipse.emf.ecore.EStructuralFeature, java.lang.Object)" + NL + "\t * <!-- begin-user-doc -->" + NL + "\t * <!-- end-user-doc -->" + NL + "\t * @generated" + NL + "\t */";
+  protected final String TEXT_276 = NL + "\t@Override";
+  protected final String TEXT_277 = NL + "\tprotected ";
+  protected final String TEXT_278 = " createSetCommand(";
+  protected final String TEXT_279 = " domain, ";
+  protected final String TEXT_280 = " owner, ";
+  protected final String TEXT_281 = " feature, Object value) {";
+  protected final String TEXT_282 = NL + "\t\tif (feature == ";
+  protected final String TEXT_283 = ") {" + NL + "\t\t\treturn new ";
+  protected final String TEXT_284 = "(domain, owner, feature, ";
+  protected final String TEXT_285 = ", ";
+  protected final String TEXT_286 = ", value);" + NL + "\t\t}";
+  protected final String TEXT_287 = NL + "\t\treturn super.createSetCommand(domain, owner, feature, value);" + NL + "\t}" + NL;
+  protected final String TEXT_288 = NL + "}";
+  protected final String TEXT_289 = NL;
 
   public String generate(Object argument)
   {
@@ -393,307 +398,319 @@
     stringBuffer.append(TEXT_29);
     stringBuffer.append(genFeature.getCapName());
     stringBuffer.append(TEXT_30);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.edit.provider.ComposeableAdapterFactory"));
     stringBuffer.append(TEXT_31);
-    stringBuffer.append(genFeature.getGenClass().getName());
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.edit.provider.ComposeableAdapterFactory"));
     stringBuffer.append(TEXT_32);
-    stringBuffer.append(genFeature.getName());
+    stringBuffer.append(genFeature.getGenClass().getName());
     stringBuffer.append(TEXT_33);
+    stringBuffer.append(genFeature.getName());
+    stringBuffer.append(TEXT_34);
     stringBuffer.append(genModel.getNonNLS());
     if (genFeature.getPropertyDescription() == null || genFeature.getPropertyDescription().length() == 0) {
-    stringBuffer.append(TEXT_34);
-    stringBuffer.append(genFeature.getGenClass().getName());
     stringBuffer.append(TEXT_35);
-    stringBuffer.append(genFeature.getName());
-    stringBuffer.append(TEXT_36);
     stringBuffer.append(genFeature.getGenClass().getName());
+    stringBuffer.append(TEXT_36);
+    stringBuffer.append(genFeature.getName());
     stringBuffer.append(TEXT_37);
+    stringBuffer.append(genFeature.getGenClass().getName());
+    stringBuffer.append(TEXT_38);
     stringBuffer.append(genModel.getNonNLS());
     stringBuffer.append(genModel.getNonNLS(2));
     stringBuffer.append(genModel.getNonNLS(3));
     } else {
-    stringBuffer.append(TEXT_38);
-    stringBuffer.append(genFeature.getGenClass().getName());
     stringBuffer.append(TEXT_39);
-    stringBuffer.append(genFeature.getName());
+    stringBuffer.append(genFeature.getGenClass().getName());
     stringBuffer.append(TEXT_40);
+    stringBuffer.append(genFeature.getName());
+    stringBuffer.append(TEXT_41);
     stringBuffer.append(genModel.getNonNLS());
     }
-    stringBuffer.append(TEXT_41);
-    stringBuffer.append(genFeature.getQualifiedFeatureAccessor());
     stringBuffer.append(TEXT_42);
-    stringBuffer.append(genFeature.getProperty() == GenPropertyKind.EDITABLE_LITERAL ? "true" : "false");
+    stringBuffer.append(genFeature.getQualifiedFeatureAccessor());
     stringBuffer.append(TEXT_43);
-    stringBuffer.append(genFeature.isPropertyMultiLine() ? "true" : "false");
+    stringBuffer.append(genFeature.getProperty() == GenPropertyKind.EDITABLE_LITERAL ? "true" : "false");
     stringBuffer.append(TEXT_44);
-    stringBuffer.append(genFeature.isPropertySortChoices() ? "true" : "false");
+    stringBuffer.append(genFeature.isPropertyMultiLine() ? "true" : "false");
     stringBuffer.append(TEXT_45);
-    if (genFeature.isReferenceType()) {
+    stringBuffer.append(genFeature.isPropertySortChoices() ? "true" : "false");
     stringBuffer.append(TEXT_46);
-    } else {
+    if (genFeature.isReferenceType()) {
     stringBuffer.append(TEXT_47);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.edit.provider.ItemPropertyDescriptor"));
+    } else {
     stringBuffer.append(TEXT_48);
-    stringBuffer.append(genFeature.getPropertyImageName());
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.edit.provider.ItemPropertyDescriptor"));
     stringBuffer.append(TEXT_49);
+    stringBuffer.append(genFeature.getPropertyImageName());
+    stringBuffer.append(TEXT_50);
     }
     if (genFeature.getPropertyCategory() == null || genFeature.getPropertyCategory().length() == 0) {
-    stringBuffer.append(TEXT_50);
-    } else {
     stringBuffer.append(TEXT_51);
-    stringBuffer.append(genModel.getPropertyCategoryKey(genFeature.getPropertyCategory()));
+    } else {
     stringBuffer.append(TEXT_52);
+    stringBuffer.append(genModel.getPropertyCategoryKey(genFeature.getPropertyCategory()));
+    stringBuffer.append(TEXT_53);
     stringBuffer.append(genModel.getNonNLS());
     }
     if (genFeature.getPropertyFilterFlags().isEmpty()) {
-    stringBuffer.append(TEXT_53);
-    } else {
     stringBuffer.append(TEXT_54);
+    } else {
+    stringBuffer.append(TEXT_55);
     for (Iterator<String> j = genFeature.getPropertyFilterFlags().iterator(); j.hasNext();) { String filterFlag = j.next();
     if (filterFlag != null && filterFlag.length() > 0) {
-    stringBuffer.append(TEXT_55);
-    stringBuffer.append(filterFlag);
     stringBuffer.append(TEXT_56);
-    if (j.hasNext()) {
+    stringBuffer.append(filterFlag);
     stringBuffer.append(TEXT_57);
+    if (j.hasNext()) {
+    stringBuffer.append(TEXT_58);
     }
     stringBuffer.append(genModel.getNonNLS());
     }
     }
-    stringBuffer.append(TEXT_58);
-    }
     stringBuffer.append(TEXT_59);
     }
-    if (!genClass.getChildrenFeatures().isEmpty()) {
+    //ItemProvider/addPropertyDescriptor.override.javajetinc
     stringBuffer.append(TEXT_60);
-    if (genModel.useClassOverrideAnnotation()) {
-    stringBuffer.append(TEXT_61);
     }
-    stringBuffer.append(TEXT_62);
-    stringBuffer.append(genModel.getImportedName(genModel.useGenerics() ? "java.util.Collection<? extends org.eclipse.emf.ecore.EStructuralFeature>" : "java.util.Collection"));
-    stringBuffer.append(TEXT_63);
-    for (GenFeature genFeature : genClass.getChildrenFeatures()) { 
-    stringBuffer.append(TEXT_64);
-    stringBuffer.append(genFeature.getQualifiedFeatureAccessor());
-    stringBuffer.append(TEXT_65);
-    }
-    stringBuffer.append(TEXT_66);
     if (!genClass.getChildrenFeatures().isEmpty()) {
-    stringBuffer.append(TEXT_67);
+    stringBuffer.append(TEXT_61);
     if (genModel.useClassOverrideAnnotation()) {
+    stringBuffer.append(TEXT_62);
+    }
+    stringBuffer.append(TEXT_63);
+    stringBuffer.append(genModel.getImportedName(genModel.useGenerics() ? "java.util.Collection<? extends org.eclipse.emf.ecore.EStructuralFeature>" : "java.util.Collection"));
+    stringBuffer.append(TEXT_64);
+    for (GenFeature genFeature : genClass.getChildrenFeatures()) { 
+    stringBuffer.append(TEXT_65);
+    stringBuffer.append(genFeature.getQualifiedFeatureAccessor());
+    stringBuffer.append(TEXT_66);
+    }
+    stringBuffer.append(TEXT_67);
+    if (!genClass.getChildrenFeatures().isEmpty()) {
     stringBuffer.append(TEXT_68);
-    }
+    if (genModel.useClassOverrideAnnotation()) {
     stringBuffer.append(TEXT_69);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EStructuralFeature"));
+    }
     stringBuffer.append(TEXT_70);
-    }
-    }
-    if (genClass.isImage()) {
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EStructuralFeature"));
     stringBuffer.append(TEXT_71);
-    stringBuffer.append(genClass.getName());
+    }
+    }
+    if (genClass.needsHasChildrenMethodOverride()) {
     stringBuffer.append(TEXT_72);
     if (genModel.useClassOverrideAnnotation()) {
     stringBuffer.append(TEXT_73);
     }
     stringBuffer.append(TEXT_74);
-    stringBuffer.append(genClass.getName());
+    stringBuffer.append(genModel.isOptimizedHasChildren());
     stringBuffer.append(TEXT_75);
-    stringBuffer.append(genModel.getNonNLS());
-    stringBuffer.append(TEXT_76);
     }
+    if (genClass.isImage()) {
+    stringBuffer.append(TEXT_76);
+    stringBuffer.append(genClass.getName());
     stringBuffer.append(TEXT_77);
     if (genModel.useClassOverrideAnnotation()) {
     stringBuffer.append(TEXT_78);
     }
     stringBuffer.append(TEXT_79);
-    if (genClass.isMapEntry()) {
+    stringBuffer.append(genClass.getName());
     stringBuffer.append(TEXT_80);
-    stringBuffer.append(genClass.getImportedInterfaceName());
-    if (genModel.useGenerics()) {
+    stringBuffer.append(genModel.getNonNLS());
     stringBuffer.append(TEXT_81);
     }
     stringBuffer.append(TEXT_82);
-    stringBuffer.append(genClass.getSafeUncapName());
+    if (genModel.useClassOverrideAnnotation()) {
     stringBuffer.append(TEXT_83);
+    }
+    stringBuffer.append(TEXT_84);
+    if (genClass.isMapEntry()) {
+    stringBuffer.append(TEXT_85);
     stringBuffer.append(genClass.getImportedInterfaceName());
     if (genModel.useGenerics()) {
-    stringBuffer.append(TEXT_84);
-    }
-    stringBuffer.append(TEXT_85);
-    if (!genClass.getMapEntryKeyFeature().isPropertyMultiLine() && !genClass.getMapEntryValueFeature().isPropertyMultiLine()) {
     stringBuffer.append(TEXT_86);
-    stringBuffer.append(genClass.getSafeUncapName());
+    }
     stringBuffer.append(TEXT_87);
     stringBuffer.append(genClass.getSafeUncapName());
     stringBuffer.append(TEXT_88);
+    stringBuffer.append(genClass.getImportedInterfaceName());
+    if (genModel.useGenerics()) {
+    stringBuffer.append(TEXT_89);
+    }
+    stringBuffer.append(TEXT_90);
+    if (!genClass.getMapEntryKeyFeature().isPropertyMultiLine() && !genClass.getMapEntryValueFeature().isPropertyMultiLine()) {
+    stringBuffer.append(TEXT_91);
+    stringBuffer.append(genClass.getSafeUncapName());
+    stringBuffer.append(TEXT_92);
+    stringBuffer.append(genClass.getSafeUncapName());
+    stringBuffer.append(TEXT_93);
     stringBuffer.append(genModel.getNonNLS());
     stringBuffer.append(genModel.getNonNLS(2));
     } else {
     if (genClass.getMapEntryKeyFeature().isPropertyMultiLine()) {
-    stringBuffer.append(TEXT_89);
+    stringBuffer.append(TEXT_94);
     stringBuffer.append(genClass.getSafeUncapName());
-    stringBuffer.append(TEXT_90);
+    stringBuffer.append(TEXT_95);
     stringBuffer.append(genModel.getNonNLS());
     } else {
-    stringBuffer.append(TEXT_91);
+    stringBuffer.append(TEXT_96);
     stringBuffer.append(genClass.getSafeUncapName());
-    stringBuffer.append(TEXT_92);
+    stringBuffer.append(TEXT_97);
     stringBuffer.append(genModel.getNonNLS());
     }
     if (genClass.getMapEntryValueFeature().isPropertyMultiLine()) {
-    stringBuffer.append(TEXT_93);
+    stringBuffer.append(TEXT_98);
     stringBuffer.append(genClass.getSafeUncapName());
-    stringBuffer.append(TEXT_94);
+    stringBuffer.append(TEXT_99);
     stringBuffer.append(genModel.getNonNLS());
     } else {
-    stringBuffer.append(TEXT_95);
+    stringBuffer.append(TEXT_100);
     stringBuffer.append(genClass.getSafeUncapName());
-    stringBuffer.append(TEXT_96);
+    stringBuffer.append(TEXT_101);
     stringBuffer.append(genModel.getNonNLS());
     }
-    stringBuffer.append(TEXT_97);
+    stringBuffer.append(TEXT_102);
     stringBuffer.append(genModel.getNonNLS());
     }
     } else if (genClass.getLabelFeature() != null) { GenFeature labelFeature = genClass.getLabelFeature();
     if (labelFeature.isPrimitiveType() && !labelFeature.getGenClass().isDynamic() && !labelFeature.isSuppressedGetVisibility()) {
-    stringBuffer.append(TEXT_98);
-    stringBuffer.append(genClass.getImportedInterfaceName());
-    stringBuffer.append(genClass.getInterfaceWildTypeArguments());
-    stringBuffer.append(TEXT_99);
-    stringBuffer.append(genClass.getSafeUncapName());
-    stringBuffer.append(TEXT_100);
-    stringBuffer.append(genClass.getImportedInterfaceName());
-    stringBuffer.append(genClass.getInterfaceWildTypeArguments());
-    stringBuffer.append(TEXT_101);
-    stringBuffer.append(genClass.getName());
-    stringBuffer.append(TEXT_102);
-    stringBuffer.append(genClass.getSafeUncapName());
     stringBuffer.append(TEXT_103);
-    stringBuffer.append(genClass.getLabelFeature().getGetAccessor());
+    stringBuffer.append(genClass.getImportedInterfaceName());
+    stringBuffer.append(genClass.getInterfaceWildTypeArguments());
     stringBuffer.append(TEXT_104);
+    stringBuffer.append(genClass.getSafeUncapName());
+    stringBuffer.append(TEXT_105);
+    stringBuffer.append(genClass.getImportedInterfaceName());
+    stringBuffer.append(genClass.getInterfaceWildTypeArguments());
+    stringBuffer.append(TEXT_106);
+    stringBuffer.append(genClass.getName());
+    stringBuffer.append(TEXT_107);
+    stringBuffer.append(genClass.getSafeUncapName());
+    stringBuffer.append(TEXT_108);
+    stringBuffer.append(genClass.getLabelFeature().getGetAccessor());
+    stringBuffer.append(TEXT_109);
     stringBuffer.append(genModel.getNonNLS());
     stringBuffer.append(genModel.getNonNLS(2));
     } else {
     if (labelFeature.isStringType() && !labelFeature.getGenClass().isDynamic() && !labelFeature.isSuppressedGetVisibility()) {
     if (labelFeature.isPropertyMultiLine()) {
-    stringBuffer.append(TEXT_105);
-    stringBuffer.append(genClass.getImportedInterfaceName());
-    stringBuffer.append(genClass.getInterfaceWildTypeArguments());
-    stringBuffer.append(TEXT_106);
-    stringBuffer.append(labelFeature.getGetAccessor());
-    stringBuffer.append(TEXT_107);
-    } else {
-    stringBuffer.append(TEXT_108);
-    stringBuffer.append(genClass.getImportedInterfaceName());
-    stringBuffer.append(genClass.getInterfaceWildTypeArguments());
-    stringBuffer.append(TEXT_109);
-    stringBuffer.append(labelFeature.getGetAccessor());
     stringBuffer.append(TEXT_110);
+    stringBuffer.append(genClass.getImportedInterfaceName());
+    stringBuffer.append(genClass.getInterfaceWildTypeArguments());
+    stringBuffer.append(TEXT_111);
+    stringBuffer.append(labelFeature.getGetAccessor());
+    stringBuffer.append(TEXT_112);
+    } else {
+    stringBuffer.append(TEXT_113);
+    stringBuffer.append(genClass.getImportedInterfaceName());
+    stringBuffer.append(genClass.getInterfaceWildTypeArguments());
+    stringBuffer.append(TEXT_114);
+    stringBuffer.append(labelFeature.getGetAccessor());
+    stringBuffer.append(TEXT_115);
     }
     } else {
     if (labelFeature.isSuppressedGetVisibility() || labelFeature.getGenClass().isDynamic()) {
-    stringBuffer.append(TEXT_111);
-    stringBuffer.append(genModel.getImportedName("java.lang.Object"));
-    stringBuffer.append(TEXT_112);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EObject"));
-    stringBuffer.append(TEXT_113);
-    stringBuffer.append(labelFeature.getQualifiedFeatureAccessor());
-    stringBuffer.append(TEXT_114);
-    } else {
-    stringBuffer.append(TEXT_115);
-    stringBuffer.append(labelFeature.getRawImportedType());
     stringBuffer.append(TEXT_116);
+    stringBuffer.append(genModel.getImportedName("java.lang.Object"));
+    stringBuffer.append(TEXT_117);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EObject"));
+    stringBuffer.append(TEXT_118);
+    stringBuffer.append(labelFeature.getQualifiedFeatureAccessor());
+    stringBuffer.append(TEXT_119);
+    } else {
+    stringBuffer.append(TEXT_120);
+    stringBuffer.append(labelFeature.getRawImportedType());
+    stringBuffer.append(TEXT_121);
     stringBuffer.append(genClass.getImportedInterfaceName());
     stringBuffer.append(genClass.getInterfaceWildTypeArguments());
-    stringBuffer.append(TEXT_117);
-    stringBuffer.append(labelFeature.getGetAccessor());
-    stringBuffer.append(TEXT_118);
-    }
-    stringBuffer.append(TEXT_119);
-    }
-    stringBuffer.append(TEXT_120);
-    stringBuffer.append(genClass.getName());
-    stringBuffer.append(TEXT_121);
-    stringBuffer.append(genModel.getNonNLS());
     stringBuffer.append(TEXT_122);
-    stringBuffer.append(genClass.getName());
+    stringBuffer.append(labelFeature.getGetAccessor());
     stringBuffer.append(TEXT_123);
+    }
+    stringBuffer.append(TEXT_124);
+    }
+    stringBuffer.append(TEXT_125);
+    stringBuffer.append(genClass.getName());
+    stringBuffer.append(TEXT_126);
+    stringBuffer.append(genModel.getNonNLS());
+    stringBuffer.append(TEXT_127);
+    stringBuffer.append(genClass.getName());
+    stringBuffer.append(TEXT_128);
     stringBuffer.append(genModel.getNonNLS());
     stringBuffer.append(genModel.getNonNLS(2));
     }
     } else {
-    stringBuffer.append(TEXT_124);
+    stringBuffer.append(TEXT_129);
     stringBuffer.append(genClass.getName());
-    stringBuffer.append(TEXT_125);
+    stringBuffer.append(TEXT_130);
     stringBuffer.append(genModel.getNonNLS());
     }
-    stringBuffer.append(TEXT_126);
-    if (genModel.useClassOverrideAnnotation()) {
-    stringBuffer.append(TEXT_127);
-    }
-    stringBuffer.append(TEXT_128);
-    if (!genClass.getLabelNotifyFeatures().isEmpty() || !genClass.getContentNotifyFeatures().isEmpty() || !genClass.getLabelAndContentNotifyFeatures().isEmpty()) {
-    stringBuffer.append(TEXT_129);
-    stringBuffer.append(genClass.getImportedInterfaceName());
-    stringBuffer.append(TEXT_130);
-    if (!genClass.getLabelNotifyFeatures().isEmpty()) {
-    for (GenFeature genFeature : genClass.getLabelNotifyFeatures()) { 
+    //ItemProvider/getText.override.javajetinc
     stringBuffer.append(TEXT_131);
-    stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
+    if (genModel.useClassOverrideAnnotation()) {
     stringBuffer.append(TEXT_132);
     }
     stringBuffer.append(TEXT_133);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.edit.provider.ViewerNotification"));
+    if (!genClass.getLabelNotifyFeatures().isEmpty() || !genClass.getContentNotifyFeatures().isEmpty() || !genClass.getLabelAndContentNotifyFeatures().isEmpty()) {
     stringBuffer.append(TEXT_134);
+    stringBuffer.append(genClass.getImportedInterfaceName());
+    stringBuffer.append(TEXT_135);
+    if (!genClass.getLabelNotifyFeatures().isEmpty()) {
+    for (GenFeature genFeature : genClass.getLabelNotifyFeatures()) { 
+    stringBuffer.append(TEXT_136);
+    stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
+    stringBuffer.append(TEXT_137);
+    }
+    stringBuffer.append(TEXT_138);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.edit.provider.ViewerNotification"));
+    stringBuffer.append(TEXT_139);
     }
     if (!genClass.getContentNotifyFeatures().isEmpty()) {
     for (GenFeature genFeature : genClass.getContentNotifyFeatures()) { 
-    stringBuffer.append(TEXT_135);
+    stringBuffer.append(TEXT_140);
     stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
-    stringBuffer.append(TEXT_136);
+    stringBuffer.append(TEXT_141);
     }
-    stringBuffer.append(TEXT_137);
+    stringBuffer.append(TEXT_142);
     stringBuffer.append(genModel.getImportedName("org.eclipse.emf.edit.provider.ViewerNotification"));
-    stringBuffer.append(TEXT_138);
+    stringBuffer.append(TEXT_143);
     }
     if (!genClass.getLabelAndContentNotifyFeatures().isEmpty()) {
     for (GenFeature genFeature : genClass.getLabelAndContentNotifyFeatures()) { 
-    stringBuffer.append(TEXT_139);
-    stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
-    stringBuffer.append(TEXT_140);
-    }
-    stringBuffer.append(TEXT_141);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.edit.provider.ViewerNotification"));
-    stringBuffer.append(TEXT_142);
-    }
-    stringBuffer.append(TEXT_143);
-    }
     stringBuffer.append(TEXT_144);
-    if (genModel.isCreationCommands()) {
+    stringBuffer.append(genClass.getQualifiedFeatureID(genFeature));
     stringBuffer.append(TEXT_145);
-    if (genModel.useClassOverrideAnnotation()) {
-    stringBuffer.append(TEXT_146);
     }
+    stringBuffer.append(TEXT_146);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.edit.provider.ViewerNotification"));
     stringBuffer.append(TEXT_147);
-    stringBuffer.append(genModel.getImportedName(genModel.useGenerics() ? "java.util.Collection<java.lang.Object>" : "java.util.Collection"));
+    }
     stringBuffer.append(TEXT_148);
+    }
+    stringBuffer.append(TEXT_149);
+    if (genModel.isCreationCommands()) {
+    stringBuffer.append(TEXT_150);
+    if (genModel.useClassOverrideAnnotation()) {
+    stringBuffer.append(TEXT_151);
+    }
+    stringBuffer.append(TEXT_152);
+    stringBuffer.append(genModel.getImportedName(genModel.useGenerics() ? "java.util.Collection<java.lang.Object>" : "java.util.Collection"));
+    stringBuffer.append(TEXT_153);
     for (GenFeature createFeature : genClass.getCrossPackageCreateChildFeatures()) { 
     for (GenClass createClass : genClass.getCrossPackageChildrenClasses(createFeature)) { 
-    stringBuffer.append(TEXT_149);
-    stringBuffer.append(createFeature.getQualifiedFeatureAccessor());
-    stringBuffer.append(TEXT_150);
-    if (createClass.isMapEntry()) { 
-    stringBuffer.append(TEXT_151);
-    stringBuffer.append(createClass.getGenPackage().getQualifiedEFactoryInstanceAccessor());
-    stringBuffer.append(TEXT_152);
-    stringBuffer.append(createClass.getQualifiedClassifierAccessor());
-    stringBuffer.append(TEXT_153);
-    } else {
     stringBuffer.append(TEXT_154);
-    stringBuffer.append(createClass.getGenPackage().getQualifiedFactoryInstanceAccessor());
+    stringBuffer.append(createFeature.getQualifiedFeatureAccessor());
     stringBuffer.append(TEXT_155);
-    stringBuffer.append(createClass.getName());
+    if (createClass.isMapEntry()) { 
     stringBuffer.append(TEXT_156);
+    stringBuffer.append(createClass.getGenPackage().getQualifiedEFactoryInstanceAccessor());
+    stringBuffer.append(TEXT_157);
+    stringBuffer.append(createClass.getQualifiedClassifierAccessor());
+    stringBuffer.append(TEXT_158);
+    } else {
+    stringBuffer.append(TEXT_159);
+    stringBuffer.append(createClass.getGenPackage().getQualifiedFactoryInstanceAccessor());
+    stringBuffer.append(TEXT_160);
+    stringBuffer.append(createClass.getName());
+    stringBuffer.append(TEXT_161);
     }
     //ItemProvider/newChildDescriptorsCrossPackageFeature.override.javajetinc
     }
@@ -703,57 +720,57 @@
     for (GenFeature delegatedFeature : createFeature.getDelegatedFeatures()) { 
     if (delegatedFeature.isReferenceType()) {
     for (GenClass createClass : genClass.getChildrenClasses(delegatedFeature)) { 
-    stringBuffer.append(TEXT_157);
-    stringBuffer.append(createFeature.getQualifiedFeatureAccessor());
-    stringBuffer.append(TEXT_158);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMapUtil"));
-    stringBuffer.append(TEXT_159);
-    stringBuffer.append(delegatedFeature.getQualifiedFeatureAccessor());
-    stringBuffer.append(TEXT_160);
-    if (createClass.isMapEntry()) { 
-    stringBuffer.append(TEXT_161);
-    stringBuffer.append(createClass.getGenPackage().getQualifiedEFactoryInstanceAccessor());
     stringBuffer.append(TEXT_162);
-    stringBuffer.append(createClass.getQualifiedClassifierAccessor());
+    stringBuffer.append(createFeature.getQualifiedFeatureAccessor());
     stringBuffer.append(TEXT_163);
-    } else {
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMapUtil"));
     stringBuffer.append(TEXT_164);
-    stringBuffer.append(createClass.getGenPackage().getQualifiedFactoryInstanceAccessor());
+    stringBuffer.append(delegatedFeature.getQualifiedFeatureAccessor());
     stringBuffer.append(TEXT_165);
-    stringBuffer.append(createClass.getName());
+    if (createClass.isMapEntry()) { 
     stringBuffer.append(TEXT_166);
+    stringBuffer.append(createClass.getGenPackage().getQualifiedEFactoryInstanceAccessor());
+    stringBuffer.append(TEXT_167);
+    stringBuffer.append(createClass.getQualifiedClassifierAccessor());
+    stringBuffer.append(TEXT_168);
+    } else {
+    stringBuffer.append(TEXT_169);
+    stringBuffer.append(createClass.getGenPackage().getQualifiedFactoryInstanceAccessor());
+    stringBuffer.append(TEXT_170);
+    stringBuffer.append(createClass.getName());
+    stringBuffer.append(TEXT_171);
     }
     }
     //ItemProvider/newChildDescriptorsReferenceDelegatedFeature.override.javajetinc
     } else {
-    stringBuffer.append(TEXT_167);
-    stringBuffer.append(createFeature.getQualifiedFeatureAccessor());
-    stringBuffer.append(TEXT_168);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMapUtil"));
-    stringBuffer.append(TEXT_169);
-    stringBuffer.append(delegatedFeature.getQualifiedFeatureAccessor());
-    stringBuffer.append(TEXT_170);
-    if (delegatedFeature.isEnumBasedType()) {
-    stringBuffer.append(TEXT_171);
-    stringBuffer.append(delegatedFeature.getTypeGenEnum().getStaticValue(delegatedFeature.getEcoreFeature().getDefaultValueLiteral()));
     stringBuffer.append(TEXT_172);
-    } else if (delegatedFeature.isStringBasedType()) {
+    stringBuffer.append(createFeature.getQualifiedFeatureAccessor());
     stringBuffer.append(TEXT_173);
-    stringBuffer.append(delegatedFeature.getCreateChildValueLiteral());
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMapUtil"));
     stringBuffer.append(TEXT_174);
+    stringBuffer.append(delegatedFeature.getQualifiedFeatureAccessor());
+    stringBuffer.append(TEXT_175);
+    if (delegatedFeature.isEnumBasedType()) {
+    stringBuffer.append(TEXT_176);
+    stringBuffer.append(delegatedFeature.getTypeGenEnum().getStaticValue(delegatedFeature.getEcoreFeature().getDefaultValueLiteral()));
+    stringBuffer.append(TEXT_177);
+    } else if (delegatedFeature.isStringBasedType()) {
+    stringBuffer.append(TEXT_178);
+    stringBuffer.append(delegatedFeature.getCreateChildValueLiteral());
+    stringBuffer.append(TEXT_179);
     stringBuffer.append(genModel.getNonNLS());
     } else { String literal = delegatedFeature.getCreateChildValueLiteral(); GenDataType createDataType = delegatedFeature.getTypeGenDataType();
-    stringBuffer.append(TEXT_175);
+    stringBuffer.append(TEXT_180);
     stringBuffer.append(createDataType.getGenPackage().getQualifiedEFactoryInstanceAccessor());
-    stringBuffer.append(TEXT_176);
+    stringBuffer.append(TEXT_181);
     stringBuffer.append(createDataType.getQualifiedClassifierAccessor());
-    stringBuffer.append(TEXT_177);
+    stringBuffer.append(TEXT_182);
     stringBuffer.append(literal);
-    stringBuffer.append(TEXT_178);
+    stringBuffer.append(TEXT_183);
     if (literal != null) {
     stringBuffer.append(genModel.getNonNLS());
     } else {
-    stringBuffer.append(TEXT_179);
+    stringBuffer.append(TEXT_184);
     }
     }
     //ItemProvider/newChildDescriptorsAttributeDelegatedFeature.override.javajetinc
@@ -761,236 +778,236 @@
     }
     } else if (createFeature.isReferenceType()) {
     for (GenClass createClass : genClass.getChildrenClasses(createFeature)) { 
-    stringBuffer.append(TEXT_180);
-    stringBuffer.append(createFeature.getQualifiedFeatureAccessor());
-    stringBuffer.append(TEXT_181);
-    if (createClass.isMapEntry()) { 
-    stringBuffer.append(TEXT_182);
-    stringBuffer.append(createClass.getGenPackage().getQualifiedEFactoryInstanceAccessor());
-    stringBuffer.append(TEXT_183);
-    stringBuffer.append(createClass.getQualifiedClassifierAccessor());
-    stringBuffer.append(TEXT_184);
-    } else {
     stringBuffer.append(TEXT_185);
-    stringBuffer.append(createClass.getGenPackage().getQualifiedFactoryInstanceAccessor());
+    stringBuffer.append(createFeature.getQualifiedFeatureAccessor());
     stringBuffer.append(TEXT_186);
-    stringBuffer.append(createClass.getName());
+    if (createClass.isMapEntry()) { 
     stringBuffer.append(TEXT_187);
+    stringBuffer.append(createClass.getGenPackage().getQualifiedEFactoryInstanceAccessor());
+    stringBuffer.append(TEXT_188);
+    stringBuffer.append(createClass.getQualifiedClassifierAccessor());
+    stringBuffer.append(TEXT_189);
+    } else {
+    stringBuffer.append(TEXT_190);
+    stringBuffer.append(createClass.getGenPackage().getQualifiedFactoryInstanceAccessor());
+    stringBuffer.append(TEXT_191);
+    stringBuffer.append(createClass.getName());
+    stringBuffer.append(TEXT_192);
     }
     }
     //ItemProvider/newChildDescriptorsReferenceFeature.override.javajetinc 
     } else {
-    stringBuffer.append(TEXT_188);
-    stringBuffer.append(createFeature.getQualifiedFeatureAccessor());
-    stringBuffer.append(TEXT_189);
-    if (createFeature.isEnumBasedType()) {
-    stringBuffer.append(TEXT_190);
-    stringBuffer.append(createFeature.getTypeGenEnum().getStaticValue(createFeature.getEcoreFeature().getDefaultValueLiteral()));
-    stringBuffer.append(TEXT_191);
-    } else if (createFeature.isStringBasedType()) {
-    stringBuffer.append(TEXT_192);
-    stringBuffer.append(createFeature.getCreateChildValueLiteral());
     stringBuffer.append(TEXT_193);
+    stringBuffer.append(createFeature.getQualifiedFeatureAccessor());
+    stringBuffer.append(TEXT_194);
+    if (createFeature.isEnumBasedType()) {
+    stringBuffer.append(TEXT_195);
+    stringBuffer.append(createFeature.getTypeGenEnum().getStaticValue(createFeature.getEcoreFeature().getDefaultValueLiteral()));
+    stringBuffer.append(TEXT_196);
+    } else if (createFeature.isStringBasedType()) {
+    stringBuffer.append(TEXT_197);
+    stringBuffer.append(createFeature.getCreateChildValueLiteral());
+    stringBuffer.append(TEXT_198);
     stringBuffer.append(genModel.getNonNLS());
     } else { String literal = createFeature.getCreateChildValueLiteral(); GenDataType createDataType = createFeature.getTypeGenDataType();
-    stringBuffer.append(TEXT_194);
+    stringBuffer.append(TEXT_199);
     stringBuffer.append(createDataType.getGenPackage().getQualifiedEFactoryInstanceAccessor());
-    stringBuffer.append(TEXT_195);
+    stringBuffer.append(TEXT_200);
     stringBuffer.append(createDataType.getQualifiedClassifierAccessor());
-    stringBuffer.append(TEXT_196);
+    stringBuffer.append(TEXT_201);
     stringBuffer.append(literal);
-    stringBuffer.append(TEXT_197);
+    stringBuffer.append(TEXT_202);
     if (literal != null) {
     stringBuffer.append(genModel.getNonNLS());
     } else {
-    stringBuffer.append(TEXT_198);
+    stringBuffer.append(TEXT_203);
     }
     }
     //ItemProvider/newChildDescriptorsAttributeFeature.override.javajetinc
     }
     }
-    stringBuffer.append(TEXT_199);
-    if (!genClass.getSharedClassCreateChildFeatures().isEmpty()) {
-    stringBuffer.append(TEXT_200);
-    if (genModel.useClassOverrideAnnotation()) {
-    stringBuffer.append(TEXT_201);
-    }
-    stringBuffer.append(TEXT_202);
-    stringBuffer.append(genModel.getImportedName(genModel.useGenerics() ? "java.util.Collection<?>" : "java.util.Collection"));
-    stringBuffer.append(TEXT_203);
-    if (genClass.hasFeatureMapCreateChildFeatures()) {
     stringBuffer.append(TEXT_204);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EStructuralFeature"));
+    if (!genClass.getSharedClassCreateChildFeatures().isEmpty()) {
     stringBuffer.append(TEXT_205);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMapUtil"));
+    if (genModel.useClassOverrideAnnotation()) {
     stringBuffer.append(TEXT_206);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMap"));
-    stringBuffer.append(TEXT_207);
     }
+    stringBuffer.append(TEXT_207);
+    stringBuffer.append(genModel.getImportedName(genModel.useGenerics() ? "java.util.Collection<?>" : "java.util.Collection"));
     stringBuffer.append(TEXT_208);
-    for (Iterator<GenFeature> i = genClass.getSharedClassCreateChildFeatures().iterator(); i.hasNext();) { GenFeature createFeature = i.next();
+    if (genClass.hasFeatureMapCreateChildFeatures()) {
     stringBuffer.append(TEXT_209);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EStructuralFeature"));
+    stringBuffer.append(TEXT_210);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMapUtil"));
+    stringBuffer.append(TEXT_211);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMap"));
+    stringBuffer.append(TEXT_212);
+    }
+    stringBuffer.append(TEXT_213);
+    for (Iterator<GenFeature> i = genClass.getSharedClassCreateChildFeatures().iterator(); i.hasNext();) { GenFeature createFeature = i.next();
+    stringBuffer.append(TEXT_214);
     stringBuffer.append(createFeature.getQualifiedFeatureAccessor());
     stringBuffer.append(i.hasNext() ? " ||" : ";");
     }
-    stringBuffer.append(TEXT_210);
+    stringBuffer.append(TEXT_215);
     stringBuffer.append(genModel.getNonNLS());
-    stringBuffer.append(TEXT_211);
+    stringBuffer.append(TEXT_216);
     }
     if (!genModel.isCreationIcons() && genClass.isModelRoot()) {
-    stringBuffer.append(TEXT_212);
-    if (genModel.useClassOverrideAnnotation()) {
-    stringBuffer.append(TEXT_213);
-    }
-    stringBuffer.append(TEXT_214);
-    stringBuffer.append(genModel.getImportedName(genModel.useGenerics() ? "java.util.Collection<?>" : "java.util.Collection"));
-    stringBuffer.append(TEXT_215);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EStructuralFeature"));
-    stringBuffer.append(TEXT_216);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMapUtil"));
     stringBuffer.append(TEXT_217);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EStructuralFeature"));
+    if (genModel.useClassOverrideAnnotation()) {
     stringBuffer.append(TEXT_218);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMap"));
+    }
     stringBuffer.append(TEXT_219);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMap"));
-    stringBuffer.append(TEXT_220);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EReference"));
-    stringBuffer.append(TEXT_221);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EObject"));
-    stringBuffer.append(TEXT_222);
-    stringBuffer.append(genModel.getNonNLS());
-    stringBuffer.append(TEXT_223);
-    stringBuffer.append(genClass.getGenPackage().getImportedEditPluginClassName());
-    stringBuffer.append(TEXT_224);
-    }
-    }
-    stringBuffer.append(TEXT_225);
-    if (genModel.useClassOverrideAnnotation()) {
-    stringBuffer.append(TEXT_226);
-    }
-    stringBuffer.append(TEXT_227);
-    stringBuffer.append(genPackage.getImportedEditPluginClassName());
-    stringBuffer.append(TEXT_228);
-    if (!UML2GenModelUtil.getImplementedSubsetGenFeatures(genClass, true).isEmpty()) {
-    stringBuffer.append(TEXT_229);
-    if (genModel.useClassOverrideAnnotation()) {
-    stringBuffer.append(TEXT_230);
-    }
-    stringBuffer.append(TEXT_231);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.command.Command"));
-    stringBuffer.append(TEXT_232);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.edit.domain.EditingDomain"));
-    stringBuffer.append(TEXT_233);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EObject"));
-    stringBuffer.append(TEXT_234);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EStructuralFeature"));
-    stringBuffer.append(TEXT_235);
     stringBuffer.append(genModel.getImportedName(genModel.useGenerics() ? "java.util.Collection<?>" : "java.util.Collection"));
-    stringBuffer.append(TEXT_236);
-    for (GenFeature subsetGenFeature : UML2GenModelUtil.getImplementedSubsetGenFeatures(genClass, true)) {
-    stringBuffer.append(TEXT_237);
-    stringBuffer.append(subsetGenFeature.getQualifiedFeatureAccessor());
-    stringBuffer.append(TEXT_238);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.uml2.common.edit.command.SubsetAddCommand"));
-    stringBuffer.append(TEXT_239);
-    stringBuffer.append(UML2GenModelUtil.getSupersetFeatureAccessorArray(genClass, subsetGenFeature));
-    stringBuffer.append(TEXT_240);
+    stringBuffer.append(TEXT_220);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EStructuralFeature"));
+    stringBuffer.append(TEXT_221);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMapUtil"));
+    stringBuffer.append(TEXT_222);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EStructuralFeature"));
+    stringBuffer.append(TEXT_223);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMap"));
+    stringBuffer.append(TEXT_224);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.util.FeatureMap"));
+    stringBuffer.append(TEXT_225);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EReference"));
+    stringBuffer.append(TEXT_226);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EObject"));
+    stringBuffer.append(TEXT_227);
+    stringBuffer.append(genModel.getNonNLS());
+    stringBuffer.append(TEXT_228);
+    stringBuffer.append(genClass.getGenPackage().getImportedEditPluginClassName());
+    stringBuffer.append(TEXT_229);
     }
+    }
+    stringBuffer.append(TEXT_230);
+    if (genModel.useClassOverrideAnnotation()) {
+    stringBuffer.append(TEXT_231);
+    }
+    stringBuffer.append(TEXT_232);
+    stringBuffer.append(genPackage.getImportedEditPluginClassName());
+    stringBuffer.append(TEXT_233);
+    if (!UML2GenModelUtil.getImplementedSubsetGenFeatures(genClass, true).isEmpty()) {
+    stringBuffer.append(TEXT_234);
+    if (genModel.useClassOverrideAnnotation()) {
+    stringBuffer.append(TEXT_235);
+    }
+    stringBuffer.append(TEXT_236);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.command.Command"));
+    stringBuffer.append(TEXT_237);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.edit.domain.EditingDomain"));
+    stringBuffer.append(TEXT_238);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EObject"));
+    stringBuffer.append(TEXT_239);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EStructuralFeature"));
+    stringBuffer.append(TEXT_240);
+    stringBuffer.append(genModel.getImportedName(genModel.useGenerics() ? "java.util.Collection<?>" : "java.util.Collection"));
     stringBuffer.append(TEXT_241);
+    for (GenFeature subsetGenFeature : UML2GenModelUtil.getImplementedSubsetGenFeatures(genClass, true)) {
+    stringBuffer.append(TEXT_242);
+    stringBuffer.append(subsetGenFeature.getQualifiedFeatureAccessor());
+    stringBuffer.append(TEXT_243);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.uml2.common.edit.command.SubsetAddCommand"));
+    stringBuffer.append(TEXT_244);
+    stringBuffer.append(UML2GenModelUtil.getSupersetFeatureAccessorArray(genClass, subsetGenFeature));
+    stringBuffer.append(TEXT_245);
+    }
+    stringBuffer.append(TEXT_246);
     }
     if (!UML2GenModelUtil.getImplementedSupersetGenFeatures(genClass, true).isEmpty()) {
-    stringBuffer.append(TEXT_242);
-    if (genModel.useClassOverrideAnnotation()) {
-    stringBuffer.append(TEXT_243);
-    }
-    stringBuffer.append(TEXT_244);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.command.Command"));
-    stringBuffer.append(TEXT_245);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.edit.domain.EditingDomain"));
-    stringBuffer.append(TEXT_246);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EObject"));
     stringBuffer.append(TEXT_247);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EStructuralFeature"));
+    if (genModel.useClassOverrideAnnotation()) {
     stringBuffer.append(TEXT_248);
-    stringBuffer.append(genModel.getImportedName(genModel.useGenerics() ? "java.util.Collection<?>" : "java.util.Collection"));
-    stringBuffer.append(TEXT_249);
-    for (GenFeature supersetGenFeature : UML2GenModelUtil.getImplementedSupersetGenFeatures(genClass, true)) {
-    stringBuffer.append(TEXT_250);
-    stringBuffer.append(supersetGenFeature.getQualifiedFeatureAccessor());
-    stringBuffer.append(TEXT_251);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.uml2.common.edit.command.SupersetRemoveCommand"));
-    stringBuffer.append(TEXT_252);
-    stringBuffer.append(UML2GenModelUtil.getSubsetFeatureAccessorArray(genClass, supersetGenFeature));
-    stringBuffer.append(TEXT_253);
     }
+    stringBuffer.append(TEXT_249);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.command.Command"));
+    stringBuffer.append(TEXT_250);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.edit.domain.EditingDomain"));
+    stringBuffer.append(TEXT_251);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EObject"));
+    stringBuffer.append(TEXT_252);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EStructuralFeature"));
+    stringBuffer.append(TEXT_253);
+    stringBuffer.append(genModel.getImportedName(genModel.useGenerics() ? "java.util.Collection<?>" : "java.util.Collection"));
     stringBuffer.append(TEXT_254);
+    for (GenFeature supersetGenFeature : UML2GenModelUtil.getImplementedSupersetGenFeatures(genClass, true)) {
+    stringBuffer.append(TEXT_255);
+    stringBuffer.append(supersetGenFeature.getQualifiedFeatureAccessor());
+    stringBuffer.append(TEXT_256);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.uml2.common.edit.command.SupersetRemoveCommand"));
+    stringBuffer.append(TEXT_257);
+    stringBuffer.append(UML2GenModelUtil.getSubsetFeatureAccessorArray(genClass, supersetGenFeature));
+    stringBuffer.append(TEXT_258);
+    }
+    stringBuffer.append(TEXT_259);
     }
     if (!UML2GenModelUtil.getImplementedSubsetGenFeatures(genClass, true).isEmpty() || !UML2GenModelUtil.getImplementedSupersetGenFeatures(genClass, true).isEmpty()) {
-    stringBuffer.append(TEXT_255);
-    if (genModel.useClassOverrideAnnotation()) {
-    stringBuffer.append(TEXT_256);
-    }
-    stringBuffer.append(TEXT_257);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.command.Command"));
-    stringBuffer.append(TEXT_258);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.edit.domain.EditingDomain"));
-    stringBuffer.append(TEXT_259);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EObject"));
     stringBuffer.append(TEXT_260);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EStructuralFeature"));
+    if (genModel.useClassOverrideAnnotation()) {
     stringBuffer.append(TEXT_261);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EObject"));
+    }
     stringBuffer.append(TEXT_262);
-    stringBuffer.append(genModel.getImportedName(genModel.useGenerics() ? "java.util.Collection<?>" : "java.util.Collection"));
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.command.Command"));
     stringBuffer.append(TEXT_263);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.edit.domain.EditingDomain"));
+    stringBuffer.append(TEXT_264);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EObject"));
+    stringBuffer.append(TEXT_265);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EStructuralFeature"));
+    stringBuffer.append(TEXT_266);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EObject"));
+    stringBuffer.append(TEXT_267);
+    stringBuffer.append(genModel.getImportedName(genModel.useGenerics() ? "java.util.Collection<?>" : "java.util.Collection"));
+    stringBuffer.append(TEXT_268);
     { List<GenFeature> subsetSupersetGenFeatures = new UniqueEList.FastCompare<GenFeature>(); subsetSupersetGenFeatures.addAll(UML2GenModelUtil.getImplementedSubsetGenFeatures(genClass, true)); subsetSupersetGenFeatures.addAll(UML2GenModelUtil.getImplementedSupersetGenFeatures(genClass, true));
     for (GenFeature genFeature : subsetSupersetGenFeatures) {
-    stringBuffer.append(TEXT_264);
-    stringBuffer.append(genFeature.getQualifiedFeatureAccessor());
-    stringBuffer.append(TEXT_265);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.uml2.common.edit.command.SubsetSupersetReplaceCommand"));
-    stringBuffer.append(TEXT_266);
-    stringBuffer.append(UML2GenModelUtil.getSupersetFeatureAccessorArray(genClass, genFeature));
-    stringBuffer.append(TEXT_267);
-    stringBuffer.append(UML2GenModelUtil.getSubsetFeatureAccessorArray(genClass, genFeature));
-    stringBuffer.append(TEXT_268);
-    }
-    }
     stringBuffer.append(TEXT_269);
+    stringBuffer.append(genFeature.getQualifiedFeatureAccessor());
+    stringBuffer.append(TEXT_270);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.uml2.common.edit.command.SubsetSupersetReplaceCommand"));
+    stringBuffer.append(TEXT_271);
+    stringBuffer.append(UML2GenModelUtil.getSupersetFeatureAccessorArray(genClass, genFeature));
+    stringBuffer.append(TEXT_272);
+    stringBuffer.append(UML2GenModelUtil.getSubsetFeatureAccessorArray(genClass, genFeature));
+    stringBuffer.append(TEXT_273);
+    }
+    }
+    stringBuffer.append(TEXT_274);
     }
     if (!UML2GenModelUtil.getImplementedSubsetGenFeatures(genClass, false).isEmpty() || !UML2GenModelUtil.getImplementedSupersetGenFeatures(genClass, false).isEmpty()) {
-    stringBuffer.append(TEXT_270);
-    if (genModel.useClassOverrideAnnotation()) {
-    stringBuffer.append(TEXT_271);
-    }
-    stringBuffer.append(TEXT_272);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.command.Command"));
-    stringBuffer.append(TEXT_273);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.edit.domain.EditingDomain"));
-    stringBuffer.append(TEXT_274);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EObject"));
     stringBuffer.append(TEXT_275);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EStructuralFeature"));
+    if (genModel.useClassOverrideAnnotation()) {
     stringBuffer.append(TEXT_276);
+    }
+    stringBuffer.append(TEXT_277);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.command.Command"));
+    stringBuffer.append(TEXT_278);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.edit.domain.EditingDomain"));
+    stringBuffer.append(TEXT_279);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EObject"));
+    stringBuffer.append(TEXT_280);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.ecore.EStructuralFeature"));
+    stringBuffer.append(TEXT_281);
     { List<GenFeature> subsetSupersetGenFeatures = new UniqueEList.FastCompare<GenFeature>(); subsetSupersetGenFeatures.addAll(UML2GenModelUtil.getImplementedSubsetGenFeatures(genClass, false)); subsetSupersetGenFeatures.addAll(UML2GenModelUtil.getImplementedSupersetGenFeatures(genClass, false));
     for (GenFeature genFeature : subsetSupersetGenFeatures) {
-    stringBuffer.append(TEXT_277);
-    stringBuffer.append(genFeature.getQualifiedFeatureAccessor());
-    stringBuffer.append(TEXT_278);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.uml2.common.edit.command.SubsetSupersetSetCommand"));
-    stringBuffer.append(TEXT_279);
-    stringBuffer.append(UML2GenModelUtil.getSupersetFeatureAccessorArray(genClass, genFeature));
-    stringBuffer.append(TEXT_280);
-    stringBuffer.append(UML2GenModelUtil.getSubsetFeatureAccessorArray(genClass, genFeature));
-    stringBuffer.append(TEXT_281);
-    }
-    }
     stringBuffer.append(TEXT_282);
-    }
+    stringBuffer.append(genFeature.getQualifiedFeatureAccessor());
     stringBuffer.append(TEXT_283);
-    genModel.emitSortedImports();
+    stringBuffer.append(genModel.getImportedName("org.eclipse.uml2.common.edit.command.SubsetSupersetSetCommand"));
     stringBuffer.append(TEXT_284);
+    stringBuffer.append(UML2GenModelUtil.getSupersetFeatureAccessorArray(genClass, genFeature));
+    stringBuffer.append(TEXT_285);
+    stringBuffer.append(UML2GenModelUtil.getSubsetFeatureAccessorArray(genClass, genFeature));
+    stringBuffer.append(TEXT_286);
+    }
+    }
+    stringBuffer.append(TEXT_287);
+    }
+    stringBuffer.append(TEXT_288);
+    genModel.emitSortedImports();
+    stringBuffer.append(TEXT_289);
     return stringBuffer.toString();
   }
 }
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 dfc9fea..efa3e1a 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
@@ -3658,7 +3658,7 @@
     stringBuffer.append(genFeature.getGetAccessor());
     stringBuffer.append(TEXT_285);
     } else {
-    if (genModel.useGenerics() && ((genFeature.isContainer() || genFeature.isResolveProxies()) && !genFeature.isListType() && !genModel.isReflectiveDelegation() && genFeature.isUncheckedCast() || genFeature.isListType() && (genModel.isReflectiveDelegation() || genModel.isVirtualDelegation()) || genFeature.isListDataType() && genFeature.hasDelegateFeature())) {
+    if (genModel.useGenerics() && ((genFeature.isContainer() || genFeature.isResolveProxies()) && !genFeature.isListType() && !genModel.isReflectiveDelegation() && genFeature.isUncheckedCast(genClass) || genFeature.isListType() && (genModel.isReflectiveDelegation() || genModel.isVirtualDelegation()) || genFeature.isListDataType() && genFeature.hasDelegateFeature())) {
     stringBuffer.append(TEXT_286);
     }
     stringBuffer.append(TEXT_287);
@@ -7319,7 +7319,7 @@
     stringBuffer.append(TEXT_1867);
     if (genModel.useGenerics()) {
     for (GenFeature genFeature : genClass.getEInverseAddGenFeatures()) {
-    if (genFeature.isUncheckedCast()) {
+    if (genFeature.isUncheckedCast(genClass)) {
     stringBuffer.append(TEXT_1868);
     break; }
     }
@@ -7619,7 +7619,7 @@
     stringBuffer.append(TEXT_1999);
     if (genModel.useGenerics()) {
     for (GenFeature genFeature : genClass.getESetGenFeatures()) {
-    if (genFeature.isUncheckedCast() && !genFeature.isFeatureMapType() && !genFeature.isMapType()) {
+    if (genFeature.isUncheckedCast(genClass) && !genFeature.isFeatureMapType() && !genFeature.isMapType()) {
     stringBuffer.append(TEXT_2000);
     break; }
     }
