diff --git a/plugins/org.eclipse.uml2.codegen.ecore/src/org/eclipse/uml2/codegen/ecore/templates/model/OperationsClass.java b/plugins/org.eclipse.uml2.codegen.ecore/src/org/eclipse/uml2/codegen/ecore/templates/model/OperationsClass.java
index 1d29d9f..228859f 100644
--- a/plugins/org.eclipse.uml2.codegen.ecore/src/org/eclipse/uml2/codegen/ecore/templates/model/OperationsClass.java
+++ b/plugins/org.eclipse.uml2.codegen.ecore/src/org/eclipse/uml2/codegen/ecore/templates/model/OperationsClass.java
@@ -106,54 +106,56 @@
   protected final String TEXT_89 = "))";
   protected final String TEXT_90 = NL + "\t\t// TODO: implement this method" + NL + "\t\t// -> specify the condition that violates the invariant" + NL + "\t\t// -> verify the details of the diagnostic, including severity and message" + NL + "\t\t// Ensure that you remove @generated or mark it @generated NOT" + NL + "\t\tif (false)";
   protected final String TEXT_91 = NL + "\t\t{" + NL + "\t\t\tif (";
-  protected final String TEXT_92 = " != null)" + NL + "\t\t\t{" + NL + "\t\t\t\t";
-  protected final String TEXT_93 = ".add" + NL + "\t\t\t\t\t(new ";
-  protected final String TEXT_94 = NL + "\t\t\t\t\t\t(";
-  protected final String TEXT_95 = ".ERROR," + NL + "\t\t\t\t\t\t ";
-  protected final String TEXT_96 = ".DIAGNOSTIC_SOURCE," + NL + "\t\t\t\t\t\t ";
-  protected final String TEXT_97 = ".";
-  protected final String TEXT_98 = "," + NL + "\t\t\t\t\t\t org.eclipse.emf.ecore.plugin.EcorePlugin.INSTANCE.getString(\"_UI_GenericInvariant_diagnostic\", new Object[] { \"";
-  protected final String TEXT_99 = "\", org.eclipse.emf.ecore.util.EObjectValidator.getObjectLabel(";
-  protected final String TEXT_100 = ", ";
-  protected final String TEXT_101 = ") }),";
-  protected final String TEXT_102 = NL + "\t\t\t\t\t\t new Object [] { ";
-  protected final String TEXT_103 = " }));" + NL + "\t\t\t}" + NL + "\t\t\treturn false;" + NL + "\t\t}" + NL + "\t\treturn true;";
-  protected final String TEXT_104 = NL + "\t\tif (";
-  protected final String TEXT_105 = " == null)" + NL + "\t\t{" + NL + "\t\t\t";
-  protected final String TEXT_106 = ".Helper helper = EOCL_ENV.createOCLHelper();" + NL + "\t\t\thelper.setOperationContext(";
-  protected final String TEXT_107 = ", ";
-  protected final String TEXT_108 = ".getEAllOperations().get(";
-  protected final String TEXT_109 = "));" + NL + "\t\t\ttry" + NL + "\t\t\t{" + NL + "\t\t\t\t";
-  protected final String TEXT_110 = " = helper.createQuery(";
-  protected final String TEXT_111 = "__EOCL_EXP);" + NL + "\t\t\t}" + NL + "\t\t\tcatch (";
-  protected final String TEXT_112 = " pe)" + NL + "\t\t\t{" + NL + "\t\t\t\tthrow new UnsupportedOperationException(pe.getLocalizedMessage());" + NL + "\t\t\t}" + NL + "\t\t}" + NL + "\t\t";
-  protected final String TEXT_113 = ".Query query = EOCL_ENV.createQuery(";
-  protected final String TEXT_114 = ");";
-  protected final String TEXT_115 = NL + "\t\t";
-  protected final String TEXT_116 = "<?, ?, ?, ?, ?>";
-  protected final String TEXT_117 = " environment = query.getEvaluationEnvironment();";
-  protected final String TEXT_118 = NL + "\t\tenvironment.add(\"";
-  protected final String TEXT_119 = "\", ";
-  protected final String TEXT_120 = ");";
-  protected final String TEXT_121 = NL + "\t\t@SuppressWarnings(\"unchecked\")";
-  protected final String TEXT_122 = NL + "\t\t";
-  protected final String TEXT_123 = "<";
-  protected final String TEXT_124 = "> result = (";
+  protected final String TEXT_92 = " != null)" + NL + "\t\t\t{";
+  protected final String TEXT_93 = NL + "\t\t\t\t";
+  protected final String TEXT_94 = ".add" + NL + "\t\t\t\t\t(new ";
+  protected final String TEXT_95 = NL + "\t\t\t\t\t\t(";
+  protected final String TEXT_96 = ".ERROR," + NL + "\t\t\t\t\t\t ";
+  protected final String TEXT_97 = ".DIAGNOSTIC_SOURCE," + NL + "\t\t\t\t\t\t ";
+  protected final String TEXT_98 = ".";
+  protected final String TEXT_99 = "," + NL + "\t\t\t\t\t\t org.eclipse.emf.ecore.plugin.EcorePlugin.INSTANCE.getString(\"_UI_GenericInvariant_diagnostic\", new Object[] { \"";
+  protected final String TEXT_100 = "\", org.eclipse.emf.ecore.util.EObjectValidator.getObjectLabel(";
+  protected final String TEXT_101 = ", ";
+  protected final String TEXT_102 = ") }),";
+  protected final String TEXT_103 = NL + "\t\t\t\t\t\t new Object [] { ";
+  protected final String TEXT_104 = " }));";
+  protected final String TEXT_105 = NL + "\t\t\t}" + NL + "\t\t\treturn false;" + NL + "\t\t}" + NL + "\t\treturn true;";
+  protected final String TEXT_106 = NL + "\t\tif (";
+  protected final String TEXT_107 = " == null)" + NL + "\t\t{" + NL + "\t\t\t";
+  protected final String TEXT_108 = ".Helper helper = EOCL_ENV.createOCLHelper();" + NL + "\t\t\thelper.setOperationContext(";
+  protected final String TEXT_109 = ", ";
+  protected final String TEXT_110 = ".getEAllOperations().get(";
+  protected final String TEXT_111 = "));" + NL + "\t\t\ttry" + NL + "\t\t\t{" + NL + "\t\t\t\t";
+  protected final String TEXT_112 = " = helper.createQuery(";
+  protected final String TEXT_113 = "__EOCL_EXP);" + NL + "\t\t\t}" + NL + "\t\t\tcatch (";
+  protected final String TEXT_114 = " pe)" + NL + "\t\t\t{" + NL + "\t\t\t\tthrow new UnsupportedOperationException(pe.getLocalizedMessage());" + NL + "\t\t\t}" + NL + "\t\t}" + NL + "\t\t";
+  protected final String TEXT_115 = ".Query query = EOCL_ENV.createQuery(";
+  protected final String TEXT_116 = ");";
+  protected final String TEXT_117 = NL + "\t\t";
+  protected final String TEXT_118 = "<?, ?, ?, ?, ?>";
+  protected final String TEXT_119 = " environment = query.getEvaluationEnvironment();";
+  protected final String TEXT_120 = NL + "\t\tenvironment.add(\"";
+  protected final String TEXT_121 = "\", ";
+  protected final String TEXT_122 = ");";
+  protected final String TEXT_123 = NL + "\t\t@SuppressWarnings(\"unchecked\")";
+  protected final String TEXT_124 = NL + "\t\t";
   protected final String TEXT_125 = "<";
-  protected final String TEXT_126 = ">) query.evaluate(";
-  protected final String TEXT_127 = ");" + NL + "\t\treturn new ";
-  protected final String TEXT_128 = ".UnmodifiableEList<";
-  protected final String TEXT_129 = ">(result.size(), result.toArray());";
-  protected final String TEXT_130 = NL + "\t\treturn ((";
-  protected final String TEXT_131 = ") query.evaluate(";
-  protected final String TEXT_132 = ")).";
-  protected final String TEXT_133 = "();";
-  protected final String TEXT_134 = NL + "\t\treturn (";
-  protected final String TEXT_135 = ") query.evaluate(";
-  protected final String TEXT_136 = ");";
-  protected final String TEXT_137 = NL + "\t\t// TODO: implement this method" + NL + "\t\t// Ensure that you remove @generated or mark it @generated NOT" + NL + "\t\tthrow new UnsupportedOperationException();";
-  protected final String TEXT_138 = NL + "\t}" + NL;
-  protected final String TEXT_139 = NL + "} // ";
+  protected final String TEXT_126 = "> result = (";
+  protected final String TEXT_127 = "<";
+  protected final String TEXT_128 = ">) query.evaluate(";
+  protected final String TEXT_129 = ");" + NL + "\t\treturn new ";
+  protected final String TEXT_130 = ".UnmodifiableEList<";
+  protected final String TEXT_131 = ">(result.size(), result.toArray());";
+  protected final String TEXT_132 = NL + "\t\treturn ((";
+  protected final String TEXT_133 = ") query.evaluate(";
+  protected final String TEXT_134 = ")).";
+  protected final String TEXT_135 = "();";
+  protected final String TEXT_136 = NL + "\t\treturn (";
+  protected final String TEXT_137 = ") query.evaluate(";
+  protected final String TEXT_138 = ");";
+  protected final String TEXT_139 = NL + "\t\t// TODO: implement this method" + NL + "\t\t// Ensure that you remove @generated or mark it @generated NOT" + NL + "\t\tthrow new UnsupportedOperationException();";
+  protected final String TEXT_140 = NL + "\t}" + NL;
+  protected final String TEXT_141 = NL + "} // ";
 
   public String generate(Object argument)
   {
@@ -172,7 +174,7 @@
  *   IBM - initial API and implementation
  *   Kenn Hussey (Embarcadero Technologies) - 206636, 224693
  *	 Lutz Wrage - 242726
- *   Kenn Hussey - 344908, 284810
+ *   Kenn Hussey - 344908, 284810, 345083
  *
  * </copyright>
  */
@@ -399,29 +401,32 @@
     stringBuffer.append(TEXT_91);
     stringBuffer.append(diagnostics);
     stringBuffer.append(TEXT_92);
-    stringBuffer.append(diagnostics);
     stringBuffer.append(TEXT_93);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.util.BasicDiagnostic"));
+    stringBuffer.append(diagnostics);
     stringBuffer.append(TEXT_94);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.util.Diagnostic"));
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.util.BasicDiagnostic"));
     stringBuffer.append(TEXT_95);
-    stringBuffer.append(opClass.getGenPackage().getImportedValidatorClassName());
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.util.Diagnostic"));
     stringBuffer.append(TEXT_96);
     stringBuffer.append(opClass.getGenPackage().getImportedValidatorClassName());
     stringBuffer.append(TEXT_97);
-    stringBuffer.append(opClass.getOperationID(genOperation));
+    stringBuffer.append(opClass.getGenPackage().getImportedValidatorClassName());
     stringBuffer.append(TEXT_98);
-    stringBuffer.append(genOperation.getName());
+    stringBuffer.append(opClass.getOperationID(genOperation));
     stringBuffer.append(TEXT_99);
-    stringBuffer.append(genClass.safeName(genClass.getUncapName()));
+    stringBuffer.append(genOperation.getName());
     stringBuffer.append(TEXT_100);
-    stringBuffer.append(context);
+    stringBuffer.append(genClass.safeName(genClass.getUncapName()));
     stringBuffer.append(TEXT_101);
+    stringBuffer.append(context);
+    stringBuffer.append(TEXT_102);
     stringBuffer.append(genModel.getNonNLS());
     stringBuffer.append(genModel.getNonNLS(2));
-    stringBuffer.append(TEXT_102);
-    stringBuffer.append(genClass.safeName(genClass.getUncapName()));
     stringBuffer.append(TEXT_103);
+    stringBuffer.append(genClass.safeName(genClass.getUncapName()));
+    stringBuffer.append(TEXT_104);
+    //Operations/genOperation.diagnostics.override.javajetinc
+    stringBuffer.append(TEXT_105);
     } else if (UML2GenModelUtil.hasOCLBody(genOperation)) { String oclQry = UML2GenModelUtil.getUpperName(genOperation.getName()) + (genOperation.getGenParameters().size() == 0 ? "" : "__" + UML2GenModelUtil.getUpperName(genOperation.getParameterTypes("_", false))) + "__EOCL_QRY";
 		GenOperation redefinedGenOperation = genOperation;
 		while (UML2GenModelUtil.isDuplicate(redefinedGenOperation)) {
@@ -433,86 +438,86 @@
 			}
 		}
 		int index = genOperation.getGenClass().getAllGenOperations().indexOf(redefinedGenOperation);
-    stringBuffer.append(TEXT_104);
-    stringBuffer.append(oclQry);
-    stringBuffer.append(TEXT_105);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.ocl.ecore.OCL"));
     stringBuffer.append(TEXT_106);
-    stringBuffer.append(genOperation.getGenClass().getQualifiedClassifierAccessor());
-    stringBuffer.append(TEXT_107);
-    stringBuffer.append(genOperation.getGenClass().getQualifiedClassifierAccessor());
-    stringBuffer.append(TEXT_108);
-    stringBuffer.append(index);
-    stringBuffer.append(TEXT_109);
     stringBuffer.append(oclQry);
+    stringBuffer.append(TEXT_107);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.ocl.ecore.OCL"));
+    stringBuffer.append(TEXT_108);
+    stringBuffer.append(genOperation.getGenClass().getQualifiedClassifierAccessor());
+    stringBuffer.append(TEXT_109);
+    stringBuffer.append(genOperation.getGenClass().getQualifiedClassifierAccessor());
     stringBuffer.append(TEXT_110);
+    stringBuffer.append(index);
+    stringBuffer.append(TEXT_111);
+    stringBuffer.append(oclQry);
+    stringBuffer.append(TEXT_112);
     stringBuffer.append(UML2GenModelUtil.getUpperName(genOperation.getName()));
     stringBuffer.append(genOperation.getGenParameters().size() == 0 ? "" : "__" + UML2GenModelUtil.getUpperName(genOperation.getParameterTypes("_", false)));
-    stringBuffer.append(TEXT_111);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.ocl.ParserException"));
-    stringBuffer.append(TEXT_112);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.ocl.ecore.OCL"));
     stringBuffer.append(TEXT_113);
-    stringBuffer.append(oclQry);
+    stringBuffer.append(genModel.getImportedName("org.eclipse.ocl.ParserException"));
     stringBuffer.append(TEXT_114);
-    if (!genOperation.getGenParameters().isEmpty()) {
+    stringBuffer.append(genModel.getImportedName("org.eclipse.ocl.ecore.OCL"));
     stringBuffer.append(TEXT_115);
+    stringBuffer.append(oclQry);
+    stringBuffer.append(TEXT_116);
+    if (!genOperation.getGenParameters().isEmpty()) {
+    stringBuffer.append(TEXT_117);
     stringBuffer.append(genModel.getImportedName("org.eclipse.ocl.EvaluationEnvironment"));
     if (genModel.getComplianceLevel().getValue() >= GenJDKLevel.JDK50) {
-    stringBuffer.append(TEXT_116);
-    }
-    stringBuffer.append(TEXT_117);
-    for (GenParameter genParameter : genOperation.getGenParameters()) {
     stringBuffer.append(TEXT_118);
-    stringBuffer.append(genParameter.getName());
+    }
     stringBuffer.append(TEXT_119);
-    stringBuffer.append(genParameter.getName());
+    for (GenParameter genParameter : genOperation.getGenParameters()) {
     stringBuffer.append(TEXT_120);
+    stringBuffer.append(genParameter.getName());
+    stringBuffer.append(TEXT_121);
+    stringBuffer.append(genParameter.getName());
+    stringBuffer.append(TEXT_122);
     stringBuffer.append(genModel.getNonNLS());
     }
     }
     if (genOperation.isListType()) {
     if (genModel.getComplianceLevel().getValue() >= GenJDKLevel.JDK50) {
-    stringBuffer.append(TEXT_121);
-    }
-    stringBuffer.append(TEXT_122);
-    stringBuffer.append(genModel.getImportedName("java.util.Collection"));
     stringBuffer.append(TEXT_123);
-    stringBuffer.append(genOperation.getListItemType(null));
+    }
     stringBuffer.append(TEXT_124);
     stringBuffer.append(genModel.getImportedName("java.util.Collection"));
     stringBuffer.append(TEXT_125);
     stringBuffer.append(genOperation.getListItemType(null));
     stringBuffer.append(TEXT_126);
-    stringBuffer.append(genClass.safeName(genClass.getUncapName()));
+    stringBuffer.append(genModel.getImportedName("java.util.Collection"));
     stringBuffer.append(TEXT_127);
-    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.util.BasicEList"));
-    stringBuffer.append(TEXT_128);
     stringBuffer.append(genOperation.getListItemType(null));
+    stringBuffer.append(TEXT_128);
+    stringBuffer.append(genClass.safeName(genClass.getUncapName()));
     stringBuffer.append(TEXT_129);
-    } else if (genOperation.isPrimitiveType()) {
+    stringBuffer.append(genModel.getImportedName("org.eclipse.emf.common.util.BasicEList"));
     stringBuffer.append(TEXT_130);
-    stringBuffer.append(genOperation.getObjectType(null));
+    stringBuffer.append(genOperation.getListItemType(null));
     stringBuffer.append(TEXT_131);
-    stringBuffer.append(genClass.safeName(genClass.getUncapName()));
+    } else if (genOperation.isPrimitiveType()) {
     stringBuffer.append(TEXT_132);
-    stringBuffer.append(genOperation.getPrimitiveValueFunction());
+    stringBuffer.append(genOperation.getObjectType(null));
     stringBuffer.append(TEXT_133);
-    } else {
-    stringBuffer.append(TEXT_134);
-    stringBuffer.append(genOperation.getImportedType(null));
-    stringBuffer.append(TEXT_135);
     stringBuffer.append(genClass.safeName(genClass.getUncapName()));
+    stringBuffer.append(TEXT_134);
+    stringBuffer.append(genOperation.getPrimitiveValueFunction());
+    stringBuffer.append(TEXT_135);
+    } else {
     stringBuffer.append(TEXT_136);
+    stringBuffer.append(genOperation.getImportedType(null));
+    stringBuffer.append(TEXT_137);
+    stringBuffer.append(genClass.safeName(genClass.getUncapName()));
+    stringBuffer.append(TEXT_138);
     }
     } else {
-    stringBuffer.append(TEXT_137);
+    stringBuffer.append(TEXT_139);
     //Operations/genOperation.todo.override.javajetinc
     }
-    stringBuffer.append(TEXT_138);
+    stringBuffer.append(TEXT_140);
     //Operations/genOperation.override.javajetinc
     }
-    stringBuffer.append(TEXT_139);
+    stringBuffer.append(TEXT_141);
     stringBuffer.append(UML2GenModelUtil.getOperationsClassName(genClass));
     genModel.emitSortedImports();
     return stringBuffer.toString();
diff --git a/plugins/org.eclipse.uml2.codegen.ecore/templates/model/Class/genOperation.override.javajetinc b/plugins/org.eclipse.uml2.codegen.ecore/templates/model/Class/genOperation.override.javajetinc
index 5b6e00a..8a44a11 100644
--- a/plugins/org.eclipse.uml2.codegen.ecore/templates/model/Class/genOperation.override.javajetinc
+++ b/plugins/org.eclipse.uml2.codegen.ecore/templates/model/Class/genOperation.override.javajetinc
@@ -153,6 +153,8 @@
 		{
 			if (<%=diagnostics%> != null)
 			{
+<%@ include file="genOperation.diagnostics.override.javajetinc" fail="alternative" %>
+<%@ start %>
 				<%=diagnostics%>.add
 					(new <%=genModel.getImportedName("org.eclipse.emf.common.util.BasicDiagnostic")%>
 						(<%=genModel.getImportedName("org.eclipse.emf.common.util.Diagnostic")%>.ERROR,
@@ -160,6 +162,7 @@
 						 <%=opClass.getGenPackage().getImportedValidatorClassName()%>.<%=opClass.getOperationID(genOperation)%>,
 						 <%=genModel.getImportedName("org.eclipse.emf.ecore.plugin.EcorePlugin")%>.INSTANCE.getString("_UI_GenericInvariant_diagnostic", new Object[] { "<%=genOperation.getName()%>", <%=genModel.getImportedName("org.eclipse.emf.ecore.util.EObjectValidator")%>.getObjectLabel(this, <%=context%>) }),<%=genModel.getNonNLS()%><%=genModel.getNonNLS(2)%>
 						 new Object [] { this }));
+<%@ end %><%//genOperation.diagnostics.override.javajetinc%>
 			}
 			return false;
 		}
diff --git a/plugins/org.eclipse.uml2.codegen.ecore/templates/model/OperationsClass.javajet b/plugins/org.eclipse.uml2.codegen.ecore/templates/model/OperationsClass.javajet
index 46e5af0..8cc869d 100644
--- a/plugins/org.eclipse.uml2.codegen.ecore/templates/model/OperationsClass.javajet
+++ b/plugins/org.eclipse.uml2.codegen.ecore/templates/model/OperationsClass.javajet
@@ -1,4 +1,4 @@
-<%@ jet package="org.eclipse.uml2.codegen.ecore.templates.model" imports="org.eclipse.emf.codegen.ecore.genmodel.* org.eclipse.uml2.codegen.ecore.genmodel.util.UML2GenModelUtil" class="OperationsClass" version="$Id: OperationsClass.javajet,v 1.15 2011/05/09 03:27:09 khussey Exp $" %>
+<%@ jet package="org.eclipse.uml2.codegen.ecore.templates.model" imports="org.eclipse.emf.codegen.ecore.genmodel.* org.eclipse.uml2.codegen.ecore.genmodel.util.UML2GenModelUtil" class="OperationsClass" version="$Id: OperationsClass.javajet,v 1.16 2011/05/09 03:33:03 khussey Exp $" %>
 <%
 /**
  * <copyright>
@@ -13,7 +13,7 @@
  *   IBM - initial API and implementation
  *   Kenn Hussey (Embarcadero Technologies) - 206636, 224693
  *	 Lutz Wrage - 242726
- *   Kenn Hussey - 344908, 284810
+ *   Kenn Hussey - 344908, 284810, 345083
  *
  * </copyright>
  */
@@ -166,6 +166,8 @@
 		{
 			if (<%=diagnostics%> != null)
 			{
+<%@ include file="Operations/genOperation.diagnostics.override.javajetinc" fail="alternative" %>
+<%@ start %>
 				<%=diagnostics%>.add
 					(new <%=genModel.getImportedName("org.eclipse.emf.common.util.BasicDiagnostic")%>
 						(<%=genModel.getImportedName("org.eclipse.emf.common.util.Diagnostic")%>.ERROR,
@@ -173,6 +175,7 @@
 						 <%=opClass.getGenPackage().getImportedValidatorClassName()%>.<%=opClass.getOperationID(genOperation)%>,
 						 org.eclipse.emf.ecore.plugin.EcorePlugin.INSTANCE.getString("_UI_GenericInvariant_diagnostic", new Object[] { "<%=genOperation.getName()%>", org.eclipse.emf.ecore.util.EObjectValidator.getObjectLabel(<%=genClass.safeName(genClass.getUncapName())%>, <%=context%>) }),<%=genModel.getNonNLS()%><%=genModel.getNonNLS(2)%>
 						 new Object [] { <%=genClass.safeName(genClass.getUncapName())%> }));
+<%@ end %><%//Operations/genOperation.diagnostics.override.javajetinc%>
 			}
 			return false;
 		}
