diff --git a/examples/org.eclipse.ocl.examples.autogen/.classpath b/examples/org.eclipse.ocl.examples.autogen/.classpath
index 9fe0b9f..e2cbb51 100644
--- a/examples/org.eclipse.ocl.examples.autogen/.classpath
+++ b/examples/org.eclipse.ocl.examples.autogen/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="emf-gen"/>
 	<classpathentry kind="src" path="src"/>
diff --git a/examples/org.eclipse.ocl.examples.autogen/META-INF/MANIFEST.MF b/examples/org.eclipse.ocl.examples.autogen/META-INF/MANIFEST.MF
index 861a0e8..d4b6c88 100644
--- a/examples/org.eclipse.ocl.examples.autogen/META-INF/MANIFEST.MF
+++ b/examples/org.eclipse.ocl.examples.autogen/META-INF/MANIFEST.MF
@@ -6,7 +6,7 @@
 Bundle-ClassPath: .
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.ocl.examples.codegen;bundle-version="[2.0.0,3.0.0)";visibility:=reexport
 Bundle-ActivationPolicy: lazy
diff --git a/examples/org.eclipse.ocl.examples.autogen/build.properties b/examples/org.eclipse.ocl.examples.autogen/build.properties
index 715c1e0..b2f74ff 100644
--- a/examples/org.eclipse.ocl.examples.autogen/build.properties
+++ b/examples/org.eclipse.ocl.examples.autogen/build.properties
@@ -33,4 +33,3 @@
 		   src/
 output.. = bin/
 src.includes = about.html
-additional.bundles = org.eclipse.ocl.jdt.annotation7
diff --git a/examples/org.eclipse.ocl.examples.autogen/src/org/eclipse/ocl/examples/autogen/java/AutoCodeGenerator.java b/examples/org.eclipse.ocl.examples.autogen/src/org/eclipse/ocl/examples/autogen/java/AutoCodeGenerator.java
index 01b0a7d..b36ec68 100644
--- a/examples/org.eclipse.ocl.examples.autogen/src/org/eclipse/ocl/examples/autogen/java/AutoCodeGenerator.java
+++ b/examples/org.eclipse.ocl.examples.autogen/src/org/eclipse/ocl/examples/autogen/java/AutoCodeGenerator.java
@@ -64,8 +64,8 @@
 //	private static final Logger logger = Logger.getLogger(AutoCodeGenerator.class);
 	
 	protected final @NonNull AutoAnalyzer cgAnalyzer;
-	protected final @NonNull org.eclipse.ocl.pivot.Package asPackage;
-	protected final @Nullable org.eclipse.ocl.pivot.Package asSuperPackage;
+	protected final org.eclipse.ocl.pivot.@NonNull Package asPackage;
+	protected final org.eclipse.ocl.pivot.@Nullable Package asSuperPackage;
 	protected final @NonNull GenModel genModel;
 	protected final @NonNull GenPackage genPackage;
 	//protected final @Nullable GenPackage superGenPackage;
@@ -83,8 +83,8 @@
 	
 
 	public AutoCodeGenerator(@NonNull EnvironmentFactoryInternal environmentFactory,
-			@NonNull org.eclipse.ocl.pivot.Package asPackage,
-			@Nullable org.eclipse.ocl.pivot.Package asSuperPackage,
+			org.eclipse.ocl.pivot.@NonNull Package asPackage,
+			org.eclipse.ocl.pivot.@Nullable Package asSuperPackage,
 			@NonNull GenPackage genPackage, // @Nullable GenPackage superGenPackage,
 			@NonNull String projectPrefix,	// FIXME Since visitors/visitable package/name are really configured in the MWE file
 			@NonNull String projectName,    // there is no point of providing a different to compute it here. To improve the framework, make use of the
@@ -216,7 +216,7 @@
 		return cgClass;
 	}
 	
-	protected @Nullable CGClass getExternalClass(@NonNull org.eclipse.ocl.pivot.Class aClass) {
+	protected @Nullable CGClass getExternalClass(org.eclipse.ocl.pivot.@NonNull Class aClass) {
 		return getExternalClass(genModelHelper.getEcoreInterfaceClass(aClass));
 	}
 
@@ -254,7 +254,7 @@
 		}
 	}
 	
-	protected @NonNull org.eclipse.ocl.pivot.Class getVisitablePivotClass() {
+	protected org.eclipse.ocl.pivot.@NonNull Class getVisitablePivotClass() {
 		
 //		return ClassUtil.nonNullState(metamodelManager.getASClass(visitableClass)); 
 		for (GenPackage genPackage : genModel.getAllGenAndUsedGenPackagesWithClassifiers()) {
diff --git a/examples/org.eclipse.ocl.examples.autogen/src/org/eclipse/ocl/examples/autogen/lookup/LookupClassContext.java b/examples/org.eclipse.ocl.examples.autogen/src/org/eclipse/ocl/examples/autogen/lookup/LookupClassContext.java
index a53483f..9c6215e 100644
--- a/examples/org.eclipse.ocl.examples.autogen/src/org/eclipse/ocl/examples/autogen/lookup/LookupClassContext.java
+++ b/examples/org.eclipse.ocl.examples.autogen/src/org/eclipse/ocl/examples/autogen/lookup/LookupClassContext.java
@@ -34,7 +34,7 @@
 	public static final @NonNull String PARENT_NAME = "parent";
 	public static final @NonNull String PARENT_ENV_NAME = "parentEnv";
 	
-	public LookupClassContext(@NonNull LookupCodeGenerator codeGenerator, @NonNull org.eclipse.ocl.pivot.Package asPackage) {
+	public LookupClassContext(@NonNull LookupCodeGenerator codeGenerator, org.eclipse.ocl.pivot.@NonNull Package asPackage) {
 		super(codeGenerator);
 	}
 	
diff --git a/examples/org.eclipse.ocl.examples.autogen/src/org/eclipse/ocl/examples/autogen/lookup/LookupCodeGenerator.java b/examples/org.eclipse.ocl.examples.autogen/src/org/eclipse/ocl/examples/autogen/lookup/LookupCodeGenerator.java
index 89f1c44..3781f77 100644
--- a/examples/org.eclipse.ocl.examples.autogen/src/org/eclipse/ocl/examples/autogen/lookup/LookupCodeGenerator.java
+++ b/examples/org.eclipse.ocl.examples.autogen/src/org/eclipse/ocl/examples/autogen/lookup/LookupCodeGenerator.java
@@ -125,7 +125,7 @@
 		for (EObject root : resource.getContents()) {
 			if (root instanceof Model) {
 				org.eclipse.ocl.pivot.Package asPackage = ClassUtil.nonNullState(getPackage(genPackage, projectPrefix, environmentFactory));
-				for (@SuppressWarnings("null")@NonNull org.eclipse.ocl.pivot.Package oclDocPackage : ((Model)root).getOwnedPackages()) {
+				for (@SuppressWarnings("null")org.eclipse.ocl.pivot.@NonNull Package oclDocPackage : ((Model)root).getOwnedPackages()) {
 					if (samePrimaryPackage(oclDocPackage, asPackage, environmentFactory)) { 
 						org.eclipse.ocl.pivot.Package asSuperPackage = null;
 						if (superProjectPrefix != null) {
@@ -165,7 +165,7 @@
 		return null;
 	}
 	
-	private static boolean samePrimaryPackage(@NonNull org.eclipse.ocl.pivot.Package p1, @NonNull org.eclipse.ocl.pivot.Package p2, @NonNull EnvironmentFactory envFactory) {
+	private static boolean samePrimaryPackage(org.eclipse.ocl.pivot.@NonNull Package p1, org.eclipse.ocl.pivot.@NonNull Package p2, @NonNull EnvironmentFactory envFactory) {
 		MetamodelManager mm = envFactory.getMetamodelManager();
 		return mm.getPrimaryPackage(p1).equals(mm.getPrimaryPackage(p2));
 	}
@@ -184,12 +184,12 @@
 	protected final @NonNull Operation asEnvironmentAddElementsOfElementsOperation;
 	protected final @NonNull Operation asElementEnvOperation;
 	
-	protected final @NonNull org.eclipse.ocl.pivot.Class asEnvironmentType;
+	protected final org.eclipse.ocl.pivot.@NonNull Class asEnvironmentType;
 	
 	//
 	//	New AS elements
 	//
-	protected final @NonNull org.eclipse.ocl.pivot.Class asVisitorClass;
+	protected final org.eclipse.ocl.pivot.@NonNull Class asVisitorClass;
 	protected final @NonNull Variable asThisVariable;
 	protected final @NonNull Variable asContextVariable;
 	protected final @NonNull Property asChildProperty;
@@ -207,8 +207,8 @@
 	private @Nullable CGProperty cgIdResolverVariable = null;
 	private @Nullable CGProperty cgChildVariable = null;
 
-	protected LookupCodeGenerator(@NonNull EnvironmentFactoryInternal environmentFactory, @NonNull org.eclipse.ocl.pivot.Package asPackage,
-			@Nullable org.eclipse.ocl.pivot.Package asSuperPackage, @NonNull org.eclipse.ocl.pivot.Package asBasePackage, @NonNull GenPackage genPackage,
+	protected LookupCodeGenerator(@NonNull EnvironmentFactoryInternal environmentFactory, org.eclipse.ocl.pivot.@NonNull Package asPackage,
+			org.eclipse.ocl.pivot.@Nullable Package asSuperPackage, org.eclipse.ocl.pivot.@NonNull Package asBasePackage, @NonNull GenPackage genPackage,
 			@NonNull String projectPrefix, @NonNull String projectName, @NonNull String visitorPackage, @NonNull String visitorClass, @NonNull String visitableClass,
 			@Nullable String superProjectPrefix, @Nullable String superManualVisitorPackage, @Nullable String superVisitorClass,
 			@Nullable String baseVisitorPrefix, @Nullable String baseVisitorPackage) {
@@ -347,7 +347,7 @@
 		}
 	}
 
-	protected @NonNull org.eclipse.ocl.pivot.Class createASVisitorClass(@NonNull String packageName, @NonNull String className) {
+	protected org.eclipse.ocl.pivot.@NonNull Class createASVisitorClass(@NonNull String packageName, @NonNull String className) {
 		org.eclipse.ocl.pivot.Class asVisitorClass = PivotUtil.createClass(className);
 		String nsURI = "java://"+packageName;		// java: has no significance other than diagnostic readability
 		org.eclipse.ocl.pivot.Package asVisitorPackage = PivotUtil.createPackage(packageName, "viz", nsURI, IdManager.getRootPackageId(nsURI));
@@ -435,7 +435,7 @@
 
 	protected @NonNull Map<Operation, Operation> createVisitOperationDeclarations(@NonNull Map<Element, Element> reDefinitions) throws ParserException {
 		Map<Operation,Operation> envOperation2asOperation = new HashMap<Operation,Operation>();
-		for (@SuppressWarnings("null")@NonNull org.eclipse.ocl.pivot.Class asType : asPackage.getOwnedClasses()) {
+		for (@SuppressWarnings("null")org.eclipse.ocl.pivot.@NonNull Class asType : asPackage.getOwnedClasses()) {
 			for (Operation envOperation : asType.getOwnedOperations()) {
 				if (LookupClassContext.ENV_NAME.equals(envOperation.getName())) {
 					List<Parameter> asParameters = envOperation.getOwnedParameters();
diff --git a/examples/org.eclipse.ocl.examples.build/.classpath b/examples/org.eclipse.ocl.examples.build/.classpath
index 8e96f8b..1f7326b 100644
--- a/examples/org.eclipse.ocl.examples.build/.classpath
+++ b/examples/org.eclipse.ocl.examples.build/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry excluding="**/*.launch" kind="src" path="src"/>
 	<classpathentry kind="src" path="jet-gen"/>
diff --git a/examples/org.eclipse.ocl.examples.build/META-INF/MANIFEST.MF b/examples/org.eclipse.ocl.examples.build/META-INF/MANIFEST.MF
index c1dd0cf..119fb05 100644
--- a/examples/org.eclipse.ocl.examples.build/META-INF/MANIFEST.MF
+++ b/examples/org.eclipse.ocl.examples.build/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@
 Bundle-SymbolicName: org.eclipse.ocl.examples.build;singleton:=true
 Bundle-Version: 2.0.100.qualifier
 Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.core.resources,
  org.eclipse.core.runtime,
  org.eclipse.jdt.core,
diff --git a/examples/org.eclipse.ocl.examples.build/build.properties b/examples/org.eclipse.ocl.examples.build/build.properties
index 190f33b..52bc01f 100644
--- a/examples/org.eclipse.ocl.examples.build/build.properties
+++ b/examples/org.eclipse.ocl.examples.build/build.properties
@@ -17,6 +17,4 @@
                about.html,\
                plugin.properties,\
                templates/,\
-               build.properties,\
                plugin.xml
-additional.bundles = org.eclipse.ocl.jdt.annotation7
diff --git a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/latex/GenerateLaTeXForASModel.java b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/latex/GenerateLaTeXForASModel.java
index 437f7b5..3858424 100644
--- a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/latex/GenerateLaTeXForASModel.java
+++ b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/latex/GenerateLaTeXForASModel.java
@@ -31,7 +31,7 @@
 
 public abstract class GenerateLaTeXForASModel extends GenerateLaTeXUtils
 {
-	protected abstract @NonNull String generateLaTeX(@NonNull org.eclipse.ocl.pivot.Package asPackage);
+	protected abstract @NonNull String generateLaTeX(org.eclipse.ocl.pivot.@NonNull Package asPackage);
 
 	@Override
 	protected void invokeInternal(WorkflowContext ctx, ProgressMonitor monitor, Issues issues) {
diff --git a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/latex/GenerateLaTeXForCSModel.java b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/latex/GenerateLaTeXForCSModel.java
index f1ca3c1..4362dc4 100644
--- a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/latex/GenerateLaTeXForCSModel.java
+++ b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/latex/GenerateLaTeXForCSModel.java
@@ -42,9 +42,9 @@
 	protected String cs2asFile;
 	protected String cs2csFile;
 
-	protected abstract @NonNull String generateLaTeX(@NonNull org.eclipse.ocl.pivot.Package asPackage,
-			@NonNull Grammar grammar, @Nullable org.eclipse.ocl.pivot.Package cs2asPackage,
-			@Nullable org.eclipse.ocl.pivot.Package cs2csPackage);
+	protected abstract @NonNull String generateLaTeX(org.eclipse.ocl.pivot.@NonNull Package asPackage,
+			@NonNull Grammar grammar, org.eclipse.ocl.pivot.@Nullable Package cs2asPackage,
+			org.eclipse.ocl.pivot.@Nullable Package cs2csPackage);
 
 	@Override
 	protected void invokeInternal(WorkflowContext ctx, ProgressMonitor monitor, Issues issues) {
diff --git a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/latex/GenerateLaTeXUtils.java b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/latex/GenerateLaTeXUtils.java
index 12ef704..91b87a6 100644
--- a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/latex/GenerateLaTeXUtils.java
+++ b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/latex/GenerateLaTeXUtils.java
@@ -359,7 +359,7 @@
 		return s.toString();
 	}
 
-	protected String emitClassDef(@NonNull org.eclipse.ocl.pivot.Class asClass) {
+	protected String emitClassDef(org.eclipse.ocl.pivot.@NonNull Class asClass) {
 		String className = asClass.getName();
 		String packageName = asClass.getOwningPackage().getName();
 		if (className == null) className = "<<anon>>";
@@ -367,7 +367,7 @@
 		return  "#\\hypertarget#{" + encodeLabelText(packageName) + ":" + encodeLabelText(className) + "#}#{" /*+ encodeLabelText(className)*/ + "#}";
 	}
 
-	protected String emitClassRef(@NonNull org.eclipse.ocl.pivot.Class asClass) {
+	protected String emitClassRef(org.eclipse.ocl.pivot.@NonNull Class asClass) {
 		String className = asClass.getName();
 		String packageName = asClass.getOwningPackage().getName();
 		if (className == null) className = "<<anon>>";
@@ -595,7 +595,7 @@
 		return precedences;
 	}
 	
-	protected @Nullable org.eclipse.ocl.pivot.Package getPrimaryPackage(@NonNull PivotMetamodelManager metamodelManager, @Nullable Resource oclResource) {
+	protected org.eclipse.ocl.pivot.@Nullable Package getPrimaryPackage(@NonNull PivotMetamodelManager metamodelManager, @Nullable Resource oclResource) {
 		if (oclResource != null) {
 			for (EObject eContent : oclResource.getContents()) {
 				if (eContent instanceof RootCS) {
@@ -611,7 +611,7 @@
 		return null;
 	}
 	
-	protected @Nullable org.eclipse.ocl.pivot.Package getSecondaryPackage(@NonNull MetamodelManager metamodelManager, @Nullable Resource oclResource) {
+	protected org.eclipse.ocl.pivot.@Nullable Package getSecondaryPackage(@NonNull MetamodelManager metamodelManager, @Nullable Resource oclResource) {
 		if (oclResource != null) {
 			for (EObject eContent : oclResource.getContents()) {
 				if (eContent instanceof RootCS) {
@@ -627,7 +627,7 @@
 		return null;
 	}
 
-	protected @NonNull List<Property> getSortedAssociations(@NonNull org.eclipse.ocl.pivot.Class asClass) {
+	protected @NonNull List<Property> getSortedAssociations(org.eclipse.ocl.pivot.@NonNull Class asClass) {
 		Set<Property> allElements = new HashSet<Property>();
 		for (Property asProperty : asClass.getOwnedProperties()) {
 //			[let pAssociations : Sequence(Property) = pClass.ownedAttribute->select(e | not e.type.oclIsKindOf(DataType) and e.type.owningTemplateParameter->isEmpty())->asSequence()]
@@ -640,7 +640,7 @@
 		return sortedElements;
 	}
 
-	protected @NonNull List<Property> getSortedAttributes(@NonNull org.eclipse.ocl.pivot.Class asClass) {
+	protected @NonNull List<Property> getSortedAttributes(org.eclipse.ocl.pivot.@NonNull Class asClass) {
 		Set<Property> allElements = new HashSet<Property>();
 		for (Property asProperty : asClass.getOwnedProperties()) {
 			if (asProperty.getType() instanceof DataType) {
@@ -652,7 +652,7 @@
 		return sortedElements;
 	}
 
-	protected @NonNull List<org.eclipse.ocl.pivot.Class> getSortedClasses(@NonNull org.eclipse.ocl.pivot.Package asPackage) {
+	protected @NonNull List<org.eclipse.ocl.pivot.Class> getSortedClasses(org.eclipse.ocl.pivot.@NonNull Package asPackage) {
 		Set<org.eclipse.ocl.pivot.Class> allElements = new HashSet<org.eclipse.ocl.pivot.Class>();
 		allElements.addAll(asPackage.getOwnedClasses());
 		List<org.eclipse.ocl.pivot.Class> sortedElements = new ArrayList<org.eclipse.ocl.pivot.Class>(allElements);
@@ -684,7 +684,7 @@
 		return sortedElements;
 	}
 
-	protected @NonNull List<Iteration> getSortedIterations(@NonNull org.eclipse.ocl.pivot.Class asClass) {
+	protected @NonNull List<Iteration> getSortedIterations(org.eclipse.ocl.pivot.@NonNull Class asClass) {
 		Set<Iteration> allElements = new HashSet<Iteration>();
 		for (Operation asOperation : asClass.getOwnedOperations()) {
 			if (asOperation instanceof Iteration) {
@@ -708,7 +708,7 @@
 		return sortedMetamodels;
 	}
 
-	protected @NonNull List<Operation> getSortedOperations(@NonNull org.eclipse.ocl.pivot.Class asClass) {
+	protected @NonNull List<Operation> getSortedOperations(org.eclipse.ocl.pivot.@NonNull Class asClass) {
 		Set<Operation> allElements = new HashSet<Operation>();
 		for (Operation asOperation : asClass.getOwnedOperations()) {
 			if (!(asOperation instanceof Iteration)) {
@@ -731,7 +731,7 @@
 		return sortedRules;
 	}
 
-	protected @NonNull List<ParserRule> getSortedParserRules(@NonNull org.eclipse.ocl.pivot.Class asClass, @NonNull Grammar grammar) {
+	protected @NonNull List<ParserRule> getSortedParserRules(org.eclipse.ocl.pivot.@NonNull Class asClass, @NonNull Grammar grammar) {
 		EClassifier eClassifier = (EClassifier) ((PivotObjectImpl)asClass).getESObject();
 		List<ParserRule> sortedRules = new ArrayList<ParserRule>();
 		for (AbstractRule rule : grammar.getRules()) {
diff --git a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/textile/GenerateTextileForLibraryUtils.java b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/textile/GenerateTextileForLibraryUtils.java
index ff0f058..dd99b55 100644
--- a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/textile/GenerateTextileForLibraryUtils.java
+++ b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/textile/GenerateTextileForLibraryUtils.java
@@ -211,7 +211,7 @@
 		return markup;
 	}
 
-	protected @NonNull List<Property> getSortedAssociations(@NonNull org.eclipse.ocl.pivot.Class asClass) {
+	protected @NonNull List<Property> getSortedAssociations(org.eclipse.ocl.pivot.@NonNull Class asClass) {
 		Set<Property> allElements = new HashSet<Property>();
 		for (Property asProperty : asClass.getOwnedProperties()) {
 //			[let pAssociations : Sequence(Property) = pClass.ownedAttribute->select(e | not e.type.oclIsKindOf(DataType) and e.type.owningTemplateParameter->isEmpty())->asSequence()]
@@ -224,7 +224,7 @@
 		return sortedElements;
 	}
 
-	protected @NonNull List<Property> getSortedAttributes(@NonNull org.eclipse.ocl.pivot.Class asClass) {
+	protected @NonNull List<Property> getSortedAttributes(org.eclipse.ocl.pivot.@NonNull Class asClass) {
 		Set<Property> allElements = new HashSet<Property>();
 		for (Property asProperty : asClass.getOwnedProperties()) {
 			if (asProperty.getType() instanceof DataType) {
@@ -260,7 +260,7 @@
 		return sortedElements;
 	}
 
-	protected @NonNull List<Iteration> getSortedIterations(@NonNull org.eclipse.ocl.pivot.Class asClass) {
+	protected @NonNull List<Iteration> getSortedIterations(org.eclipse.ocl.pivot.@NonNull Class asClass) {
 		Set<Iteration> allElements = new HashSet<Iteration>();
 		for (Operation asOperation : asClass.getOwnedOperations()) {
 			if (asOperation instanceof Iteration) {
@@ -272,7 +272,7 @@
 		return sortedElements;
 	}
 
-	protected @NonNull List<Operation> getSortedOperations(@NonNull org.eclipse.ocl.pivot.Class asClass) {
+	protected @NonNull List<Operation> getSortedOperations(org.eclipse.ocl.pivot.@NonNull Class asClass) {
 		Set<Operation> allElements = new HashSet<Operation>();
 		for (Operation asOperation : asClass.getOwnedOperations()) {
 			if (!(asOperation instanceof Iteration)) {
diff --git a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/utilities/ConstraintMerger.java b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/utilities/ConstraintMerger.java
index cc1e33b..b2cf223 100644
--- a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/utilities/ConstraintMerger.java
+++ b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/utilities/ConstraintMerger.java
@@ -178,7 +178,7 @@
 		}
 	}
 
-	protected void mergeType(@NonNull MetamodelManager metamodelManager, @NonNull org.eclipse.ocl.pivot.Class primaryType, @NonNull org.eclipse.ocl.pivot.Class mergeType) {
+	protected void mergeType(@NonNull MetamodelManager metamodelManager, org.eclipse.ocl.pivot.@NonNull Class primaryType, org.eclipse.ocl.pivot.@NonNull Class mergeType) {
 		List<Constraint> mergeInvariants = mergeType.getOwnedInvariants();
 		List<Constraint> primaryInvariants = primaryType.getOwnedInvariants();
 		for (Constraint mergeInvariant : new ArrayList<Constraint>(mergeInvariants)) {
diff --git a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/GenerateOCLCommon.java b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/GenerateOCLCommon.java
index 001c35b..1a2c0a6 100644
--- a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/GenerateOCLCommon.java
+++ b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/GenerateOCLCommon.java
@@ -583,11 +583,11 @@
 		return '"' + property.getName() + '"';
 	}
 
-	protected @Nullable org.eclipse.ocl.pivot.Package getOrphanPackage(@NonNull org.eclipse.ocl.pivot.Package elem) {
+	protected org.eclipse.ocl.pivot.@Nullable Package getOrphanPackage(org.eclipse.ocl.pivot.@NonNull Package elem) {
 		return getOrphanPackage(getRootPackage(elem));
 	}
 
-	protected @Nullable org.eclipse.ocl.pivot.Package getOrphanPackage(@NonNull Model elem) {
+	protected org.eclipse.ocl.pivot.@Nullable Package getOrphanPackage(@NonNull Model elem) {
 		for (org.eclipse.ocl.pivot.Package pkg : getAllPackages(elem)) {
 			if (PivotConstants.ORPHANAGE_NAME.equals(pkg.getName())) {
 				return pkg;
@@ -628,7 +628,7 @@
 		return resourceSet;
 	}
 
-	protected @NonNull Model getRootPackage(@Nullable org.eclipse.ocl.pivot.Package elem) {
+	protected @NonNull Model getRootPackage(org.eclipse.ocl.pivot.@Nullable Package elem) {
 		EObject eObject = elem;
 		while (eObject != null) {
 			if (eObject instanceof Model) {
@@ -894,7 +894,7 @@
 		return pkge2iterations;
 	}
 
-/*	protected @NonNull List<Iteration> getSortedIterations(@NonNull org.eclipse.ocl.pivot.Class type, @NonNull List<Iteration> allIterations) {
+/*	protected @NonNull List<Iteration> getSortedIterations(org.eclipse.ocl.pivot.@NonNull Class type, @NonNull List<Iteration> allIterations) {
 		Set<Iteration> allElements = new HashSet<Iteration>();
 		for (Operation operation : type.getOwnedOperations()) {
 			if (allIterations.contains(operation)) {
@@ -1011,7 +1011,7 @@
 		return pkge2operations;
 	}
 
-/*	protected @NonNull List<Operation> getSortedOperations(@NonNull org.eclipse.ocl.pivot.Class type, @NonNull List<Operation> allOperations) {
+/*	protected @NonNull List<Operation> getSortedOperations(org.eclipse.ocl.pivot.@NonNull Class type, @NonNull List<Operation> allOperations) {
 		Set<Operation> allElements = new HashSet<Operation>();
 		for (Operation operation : type.getOwnedOperations()) {
 			if (allOperations.contains(operation)) {
@@ -1087,7 +1087,7 @@
 		return sortedElements;
 	}
 
-	protected @NonNull List<org.eclipse.ocl.pivot.Package> getSortedPackages(@NonNull org.eclipse.ocl.pivot.Package pkg) {
+	protected @NonNull List<org.eclipse.ocl.pivot.Package> getSortedPackages(org.eclipse.ocl.pivot.@NonNull Package pkg) {
 		List<org.eclipse.ocl.pivot.Package> sortedElements = new ArrayList<org.eclipse.ocl.pivot.Package>(pkg.getOwnedPackages());
 		Collections.sort(sortedElements, nameableComparator);
 		return sortedElements;
@@ -1162,13 +1162,13 @@
 		return pkge2properties;
 	}
 
-	protected @NonNull List<Property> getSortedProperties(@NonNull org.eclipse.ocl.pivot.Class type) {
+	protected @NonNull List<Property> getSortedProperties(org.eclipse.ocl.pivot.@NonNull Class type) {
 		List<Property> sortedElements = new ArrayList<Property>(type.getOwnedProperties());
 		Collections.sort(sortedElements, OCLinEcoreTablesUtils.propertyComparator);
 		return sortedElements;
 	}
 
-/*	protected @NonNull List<Property> getSortedProperties(@NonNull org.eclipse.ocl.pivot.Class type, @NonNull List<Property> allProperties) {
+/*	protected @NonNull List<Property> getSortedProperties(org.eclipse.ocl.pivot.@NonNull Class type, @NonNull List<Property> allProperties) {
 		Set<Property> allElements = new HashSet<Property>();
 		for (Property property : type.getOwnedProperties()) {
 			if (allProperties.contains(property)) {
@@ -1248,7 +1248,7 @@
 		return sortedElements;
 	}
 
-	protected @NonNull List<org.eclipse.ocl.pivot.Class> getSuperclassesInPackage(@NonNull org.eclipse.ocl.pivot.Class type) {
+	protected @NonNull List<org.eclipse.ocl.pivot.Class> getSuperclassesInPackage(org.eclipse.ocl.pivot.@NonNull Class type) {
 		List<org.eclipse.ocl.pivot.Class> allElements = new ArrayList<org.eclipse.ocl.pivot.Class>();
 		for (org.eclipse.ocl.pivot.Class superclass : type.getSuperClasses()) {
 			if (getRootPackage(superclass.getOwningPackage()) == getRootPackage(type.getOwningPackage())) {
diff --git a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/GenerateOCLmetamodel.java b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/GenerateOCLmetamodel.java
index 893e36a..7999870 100644
--- a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/GenerateOCLmetamodel.java
+++ b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/GenerateOCLmetamodel.java
@@ -140,7 +140,7 @@
 
 	protected abstract String generateMetamodel(@NonNull Model pivotModel);
 	
-	protected String getEcoreLiteral(@NonNull org.eclipse.ocl.pivot.Class elem) {
+	protected String getEcoreLiteral(org.eclipse.ocl.pivot.@NonNull Class elem) {
 		return nameQueries.getEcoreLiteral(elem);
 	}
 
diff --git a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/NameQueries.java b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/NameQueries.java
index ca37a7a..b68dbf5 100644
--- a/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/NameQueries.java
+++ b/examples/org.eclipse.ocl.examples.build/src/org/eclipse/ocl/examples/build/xtend/NameQueries.java
@@ -96,7 +96,7 @@
 		return "\"" + property.getName() + "\"";
 	}
 	
-	public @NonNull String getEcoreLiteral(@NonNull org.eclipse.ocl.pivot.Class type) {
+	public @NonNull String getEcoreLiteral(org.eclipse.ocl.pivot.@NonNull Class type) {
 		String nsURI = ClassUtil.nonNullModel(type.getOwningPackage().getURI());
 		GenPackage genPackage = ClassUtil.nonNullState(metamodelManager).getGenPackage(nsURI);
 		if (genPackage != null) {
@@ -105,7 +105,7 @@
 		return "\"" + type.getName() + "\"";
 	}
 	
-	public @Nullable String getEcoreQualifiedPackageInterfaceName(@NonNull org.eclipse.ocl.pivot.Package pkge) {
+	public @Nullable String getEcoreQualifiedPackageInterfaceName(org.eclipse.ocl.pivot.@NonNull Package pkge) {
 		String nsURI = ClassUtil.nonNullModel(pkge.getURI());
 		GenPackage genPackage = ClassUtil.nonNullState(metamodelManager).getGenPackage(nsURI);
 		if (genPackage == null) {
diff --git a/examples/org.eclipse.ocl.examples.codegen.asm3/.classpath b/examples/org.eclipse.ocl.examples.codegen.asm3/.classpath
index ebfac7b..1bdd253 100644
--- a/examples/org.eclipse.ocl.examples.codegen.asm3/.classpath
+++ b/examples/org.eclipse.ocl.examples.codegen.asm3/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry exported="true" kind="lib" path="lib/org.objectweb.asm_3.3.1.v201105211655.jar"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/examples/org.eclipse.ocl.examples.codegen.asm3/META-INF/MANIFEST.MF b/examples/org.eclipse.ocl.examples.codegen.asm3/META-INF/MANIFEST.MF
index 0e8f18f..2197908 100644
--- a/examples/org.eclipse.ocl.examples.codegen.asm3/META-INF/MANIFEST.MF
+++ b/examples/org.eclipse.ocl.examples.codegen.asm3/META-INF/MANIFEST.MF
@@ -5,7 +5,7 @@
 Bundle-Localization: plugin
 Bundle-SymbolicName: org.eclipse.ocl.examples.codegen.asm3;singleton:=true
 Bundle-Version: 2.0.100.qualifier
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Import-Package: org.apache.log4j;version="[1.2.15,2.0.0)"
 Export-Package: org.eclipse.ocl.examples.codegen.asm3
 Bundle-ClassPath: lib/org.objectweb.asm_3.3.1.v201105211655.jar,
diff --git a/examples/org.eclipse.ocl.examples.codegen.asm3/build.properties b/examples/org.eclipse.ocl.examples.codegen.asm3/build.properties
index 2ee3f9a..bd07989 100644
--- a/examples/org.eclipse.ocl.examples.codegen.asm3/build.properties
+++ b/examples/org.eclipse.ocl.examples.codegen.asm3/build.properties
@@ -12,10 +12,8 @@
 output.. = bin/
 bin.includes = META-INF/,\
                .,\
-               build.properties,\
                plugin.properties,\
                about.html,\
                lib/org.objectweb.asm_3.3.1.v201105211655.jar
 additional.bundles = org.eclipse.jdt.annotation
 src.includes = about.html
-additional.bundles = org.eclipse.ocl.jdt.annotation7
diff --git a/examples/org.eclipse.ocl.examples.codegen.asm5/.classpath b/examples/org.eclipse.ocl.examples.codegen.asm5/.classpath
index 098194c..eca7bdb 100644
--- a/examples/org.eclipse.ocl.examples.codegen.asm5/.classpath
+++ b/examples/org.eclipse.ocl.examples.codegen.asm5/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/examples/org.eclipse.ocl.examples.codegen.asm5/META-INF/MANIFEST.MF b/examples/org.eclipse.ocl.examples.codegen.asm5/META-INF/MANIFEST.MF
index 64ae045..fc3901b 100644
--- a/examples/org.eclipse.ocl.examples.codegen.asm5/META-INF/MANIFEST.MF
+++ b/examples/org.eclipse.ocl.examples.codegen.asm5/META-INF/MANIFEST.MF
@@ -5,7 +5,7 @@
 Bundle-Localization: plugin
 Bundle-SymbolicName: org.eclipse.ocl.examples.codegen.asm5;singleton:=true
 Bundle-Version: 2.0.100.qualifier
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.objectweb.asm;bundle-version="[4.0.0,6.0.0)";resolution:=optional
 Import-Package: org.apache.log4j;version="[1.2.15,2.0.0)"
 Export-Package: org.eclipse.ocl.examples.codegen.asm5
diff --git a/examples/org.eclipse.ocl.examples.codegen.asm5/build.properties b/examples/org.eclipse.ocl.examples.codegen.asm5/build.properties
index 93e4eaa..4f856d4 100644
--- a/examples/org.eclipse.ocl.examples.codegen.asm5/build.properties
+++ b/examples/org.eclipse.ocl.examples.codegen.asm5/build.properties
@@ -12,8 +12,6 @@
 output.. = bin/
 bin.includes = META-INF/,\
                .,\
-               build.properties,\
                plugin.properties,\
                about.html
 src.includes = about.html
-additional.bundles = org.eclipse.ocl.jdt.annotation7
diff --git a/examples/org.eclipse.ocl.examples.codegen/.classpath b/examples/org.eclipse.ocl.examples.codegen/.classpath
index 9fe0b9f..e2cbb51 100644
--- a/examples/org.eclipse.ocl.examples.codegen/.classpath
+++ b/examples/org.eclipse.ocl.examples.codegen/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="emf-gen"/>
 	<classpathentry kind="src" path="src"/>
diff --git a/examples/org.eclipse.ocl.examples.codegen/META-INF/MANIFEST.MF b/examples/org.eclipse.ocl.examples.codegen/META-INF/MANIFEST.MF
index ecae38b..508b364 100644
--- a/examples/org.eclipse.ocl.examples.codegen/META-INF/MANIFEST.MF
+++ b/examples/org.eclipse.ocl.examples.codegen/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@
 Bundle-SymbolicName: org.eclipse.ocl.examples.codegen;singleton:=true
 Bundle-Version: 2.0.100.qualifier
 Bundle-ClassPath: .
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.core.resources;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.emf.codegen.ecore;bundle-version="[2.7.0,3.0.0)";visibility:=reexport,
diff --git a/examples/org.eclipse.ocl.examples.codegen/build.properties b/examples/org.eclipse.ocl.examples.codegen/build.properties
index c5a8f81..a5fc17e 100644
--- a/examples/org.eclipse.ocl.examples.codegen/build.properties
+++ b/examples/org.eclipse.ocl.examples.codegen/build.properties
@@ -20,4 +20,3 @@
                model/,\
                build.properties
 src.includes = about.html
-additional.bundles = org.eclipse.ocl.jdt.annotation7
diff --git a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/analyzer/AS2CGVisitor.java b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/analyzer/AS2CGVisitor.java
index f49d62e..de004db 100644
--- a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/analyzer/AS2CGVisitor.java
+++ b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/analyzer/AS2CGVisitor.java
@@ -1098,7 +1098,7 @@
 	 * @since 1.3
 	 */
 	@Override
-	public @Nullable CGClass visitClass(@NonNull org.eclipse.ocl.pivot.Class element) {
+	public @Nullable CGClass visitClass(org.eclipse.ocl.pivot.@NonNull Class element) {
 		CGClass cgClass = CGModelFactory.eINSTANCE.createCGClass();
 		pushCurrentClass(cgClass);
 		setAst(cgClass, element);
@@ -1382,7 +1382,7 @@
 	}
 
 	@Override
-	public @Nullable CGPackage visitPackage(@NonNull org.eclipse.ocl.pivot.Package element) {
+	public @Nullable CGPackage visitPackage(org.eclipse.ocl.pivot.@NonNull Package element) {
 		CGPackage cgPackage = CGModelFactory.eINSTANCE.createCGPackage();
 		setAst(cgPackage, element);
 		for (org.eclipse.ocl.pivot.Class asType : element.getOwnedClasses()) {
diff --git a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/common/CodeGenHelper.java b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/common/CodeGenHelper.java
index 7b2c4cf..a373361 100644
--- a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/common/CodeGenHelper.java
+++ b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/common/CodeGenHelper.java
@@ -34,5 +34,5 @@
 	/**
 	 * Return the GenPackage for a type.
 	 */
-	@NonNull GenPackage getGenPackage(@NonNull org.eclipse.ocl.pivot.Class type);
+	@NonNull GenPackage getGenPackage(org.eclipse.ocl.pivot.@NonNull Class type);
 }
diff --git a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/common/PivotQueries.java b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/common/PivotQueries.java
index 18a266a..b04256f 100644
--- a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/common/PivotQueries.java
+++ b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/common/PivotQueries.java
@@ -22,7 +22,7 @@
 
 public class PivotQueries
 {
-	public static @NonNull LinkedHashSet<Operation> getOperations(@NonNull org.eclipse.ocl.pivot.Class type) {
+	public static @NonNull LinkedHashSet<Operation> getOperations(org.eclipse.ocl.pivot.@NonNull Class type) {
 		EnvironmentFactory environmentFactory = ClassUtil.nonNullState(PivotUtilInternal.findEnvironmentFactory(type));
 		PivotMetamodelManager metamodelManager = (PivotMetamodelManager) environmentFactory.getMetamodelManager();
 		LinkedHashSet<Operation> operations = new LinkedHashSet<Operation>();
@@ -35,7 +35,7 @@
 		return operations;
 	}
 	
-	public static @NonNull LinkedHashSet<Property> getProperties(@NonNull org.eclipse.ocl.pivot.Class type) {
+	public static @NonNull LinkedHashSet<Property> getProperties(org.eclipse.ocl.pivot.@NonNull Class type) {
 		EnvironmentFactory environmentFactory = ClassUtil.nonNullState(PivotUtilInternal.findEnvironmentFactory(type));
 		PivotMetamodelManager metamodelManager = (PivotMetamodelManager) environmentFactory.getMetamodelManager();
 		LinkedHashSet<Property> properties = new LinkedHashSet<Property>();
diff --git a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/dynamic/JavaGenModelCodeGenHelper.java b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/dynamic/JavaGenModelCodeGenHelper.java
index d8218cf..76080ce 100644
--- a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/dynamic/JavaGenModelCodeGenHelper.java
+++ b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/dynamic/JavaGenModelCodeGenHelper.java
@@ -91,7 +91,7 @@
 	}
 
 	@Override
-	public @NonNull GenPackage getGenPackage(@NonNull org.eclipse.ocl.pivot.Class type) {
+	public @NonNull GenPackage getGenPackage(org.eclipse.ocl.pivot.@NonNull Class type) {
 		org.eclipse.ocl.pivot.Package pPackage = type.getOwningPackage();
 		String nsURI = pPackage.getURI();
 		GenPackage genPackage = uriMap.get(nsURI);
diff --git a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/generator/AbstractCodeGenerator.java b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/generator/AbstractCodeGenerator.java
index c1d0630..276b27a 100644
--- a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/generator/AbstractCodeGenerator.java
+++ b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/generator/AbstractCodeGenerator.java
@@ -103,7 +103,7 @@
 	}
 
 	@Override
-	public @Nullable Operation isFinal(@NonNull Operation anOperation, @NonNull org.eclipse.ocl.pivot.Class staticType) {
+	public @Nullable Operation isFinal(@NonNull Operation anOperation, org.eclipse.ocl.pivot.@NonNull Class staticType) {
 		PivotMetamodelManager metamodelManager = environmentFactory.getMetamodelManager();
 		FinalAnalysis finalAnalysis = metamodelManager.getFinalAnalysis();
 		return finalAnalysis.isFinal(anOperation, metamodelManager.getCompleteClass(staticType));
diff --git a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/generator/AbstractGenModelHelper.java b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/generator/AbstractGenModelHelper.java
index 01955d4..88a7606 100644
--- a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/generator/AbstractGenModelHelper.java
+++ b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/generator/AbstractGenModelHelper.java
@@ -165,7 +165,7 @@
 	}
 
 	@Override
-	public @NonNull Class<?> getEcoreInterfaceClass(@NonNull org.eclipse.ocl.pivot.Class type) throws GenModelException {
+	public @NonNull Class<?> getEcoreInterfaceClass(org.eclipse.ocl.pivot.@NonNull Class type) throws GenModelException {
 		GenClassifier genClassifier = getGenClassifier(type);
 		String qualifiedInterfaceName;
 		if (genClassifier instanceof GenDataType) {
@@ -257,7 +257,7 @@
 	}
 	
 	@Override
-	public @Nullable String getEcoreInterfaceName(@NonNull org.eclipse.ocl.pivot.Class type) {
+	public @Nullable String getEcoreInterfaceName(org.eclipse.ocl.pivot.@NonNull Class type) {
 		try {
 			GenClassifier genClassifier = getGenClassifier(type);
 			return genClassifier instanceof GenDataType  
@@ -269,7 +269,7 @@
 	}
 	
 	@Override
-	public @Nullable String getEcoreClassName(@NonNull org.eclipse.ocl.pivot.Class type) {
+	public @Nullable String getEcoreClassName(org.eclipse.ocl.pivot.@NonNull Class type) {
 		try {
 			GenClassifier genClassifier = getGenClassifier(type);
 			return genClassifier instanceof GenDataType  
@@ -285,7 +285,7 @@
 		return metamodelManager.getEnvironmentFactory();
 	}
 	
-	protected @NonNull GenClass getGenClass(@NonNull org.eclipse.ocl.pivot.Class type) throws GenModelException {
+	protected @NonNull GenClass getGenClass(org.eclipse.ocl.pivot.@NonNull Class type) throws GenModelException {
 		GenPackage genPackage = getGenPackage(type);
 		if (genPackage != null) {
 			String name = type.getName();
@@ -339,7 +339,7 @@
 	} */
 	
 	@Override
-	public @NonNull GenClassifier getGenClassifier(@NonNull org.eclipse.ocl.pivot.Class type) throws GenModelException {
+	public @NonNull GenClassifier getGenClassifier(org.eclipse.ocl.pivot.@NonNull Class type) throws GenModelException {
 		GenPackage genPackage = getGenPackage(type);
 		if (genPackage != null) {
 			String name = type.getName();
@@ -350,7 +350,7 @@
 				}
 			}
 		}
-		for (@SuppressWarnings("null")@NonNull org.eclipse.ocl.pivot.Class partialType : metamodelManager.getPartialClasses(type)) {
+		for (@SuppressWarnings("null")org.eclipse.ocl.pivot.@NonNull Class partialType : metamodelManager.getPartialClasses(type)) {
 			genPackage = getGenPackage(partialType);
 			if (genPackage != null) {
 				String name = partialType.getName();
@@ -442,7 +442,7 @@
 	}
 
 	@Override
-	public @Nullable GenPackage getGenPackage(@NonNull org.eclipse.ocl.pivot.Package asPackage) {
+	public @Nullable GenPackage getGenPackage(org.eclipse.ocl.pivot.@NonNull Package asPackage) {
 		EObject eContainer = asPackage.eContainer();
 		if (eContainer instanceof Model) {
 			String nsURI = ((Model)eContainer).getExternalURI();
@@ -461,7 +461,7 @@
 	}
 
 	@Override
-	public @Nullable GenPackage getGenPackage(@NonNull org.eclipse.ocl.pivot.Class type) {
+	public @Nullable GenPackage getGenPackage(org.eclipse.ocl.pivot.@NonNull Class type) {
 		org.eclipse.ocl.pivot.Package asPackage = type.getOwningPackage();
 		if (asPackage == null) {
 			return null;
@@ -607,7 +607,7 @@
 	}
 	
 	@Override
-	public @Nullable String getQualifiedFactoryInterfaceName(@NonNull org.eclipse.ocl.pivot.Class type) {
+	public @Nullable String getQualifiedFactoryInterfaceName(org.eclipse.ocl.pivot.@NonNull Class type) {
 		GenPackage genPackage = getGenPackage(type);
 		if (genPackage == null) {
 			return null;
@@ -625,7 +625,7 @@
 	}
 	
 	@Override
-	public @Nullable String getQualifiedFactoryInstanceAccessor(@NonNull org.eclipse.ocl.pivot.Class type) {
+	public @Nullable String getQualifiedFactoryInstanceAccessor(org.eclipse.ocl.pivot.@NonNull Class type) {
 		GenPackage genPackage = getGenPackage(type);
 		if (genPackage == null) {
 			return null;
diff --git a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/generator/CodeGenerator.java b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/generator/CodeGenerator.java
index ccd1d8e..e6b82c1 100644
--- a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/generator/CodeGenerator.java
+++ b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/generator/CodeGenerator.java
@@ -53,7 +53,7 @@
 	@NonNull ReferencesVisitor createReferencesVisitor();
 	@NonNull TypeDescriptor getTypeDescriptor(@NonNull CGValuedElement cgElement);
 	@NonNull UnboxedDescriptor getUnboxedDescriptor(@NonNull ElementId elementId);
-	@Nullable Operation isFinal(@NonNull Operation anOperation, @NonNull org.eclipse.ocl.pivot.Class staticType);
+	@Nullable Operation isFinal(@NonNull Operation anOperation, org.eclipse.ocl.pivot.@NonNull Class staticType);
 
 	/**
 	 * Return true if asOperationCallExp may return a nonNull value,
diff --git a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/generator/GenModelHelper.java b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/generator/GenModelHelper.java
index 866741c..bb20573 100644
--- a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/generator/GenModelHelper.java
+++ b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/generator/GenModelHelper.java
@@ -33,18 +33,18 @@
 {
 	@NonNull Class<?> getAbstractOperationClass(@NonNull List<?> parameters);
 	@Nullable Class<?> getEcoreFactoryClass(@NonNull EPackage ePackage);
-	@NonNull Class<?> getEcoreInterfaceClass(@NonNull org.eclipse.ocl.pivot.Class owningType) throws GenModelException;
+	@NonNull Class<?> getEcoreInterfaceClass(org.eclipse.ocl.pivot.@NonNull Class owningType) throws GenModelException;
 	@Nullable String getEcoreInterfaceClassName(@NonNull EClass eClass);
 	@NonNull Class<?> getEcoreInterfaceClassifier(@NonNull EClassifier eClassifier) throws GenModelException;
 	@Nullable String getEcoreInterfaceClassifierName(@NonNull EClassifier eClassifier);
-	@Nullable String getEcoreInterfaceName(@NonNull org.eclipse.ocl.pivot.Class type);
-	@Nullable String getEcoreClassName(@NonNull org.eclipse.ocl.pivot.Class type);
+	@Nullable String getEcoreInterfaceName(org.eclipse.ocl.pivot.@NonNull Class type);
+	@Nullable String getEcoreClassName(org.eclipse.ocl.pivot.@NonNull Class type);
 	@NonNull EnvironmentFactory getEnvironmentFactory();
-//	@Nullable GenClass getGenClass(@NonNull org.eclipse.ocl.pivot.Class type);
-	@Nullable GenClassifier getGenClassifier(@NonNull org.eclipse.ocl.pivot.Class type);
+//	@Nullable GenClass getGenClass(org.eclipse.ocl.pivot.@NonNull Class type);
+	@Nullable GenClassifier getGenClassifier(org.eclipse.ocl.pivot.@NonNull Class type);
 	@Nullable GenOperation getGenOperation(@NonNull Operation operation);
-	@Nullable GenPackage getGenPackage(@NonNull org.eclipse.ocl.pivot.Package asPackage);
-	@Nullable GenPackage getGenPackage(@NonNull org.eclipse.ocl.pivot.Class type);
+	@Nullable GenPackage getGenPackage(org.eclipse.ocl.pivot.@NonNull Package asPackage);
+	@Nullable GenPackage getGenPackage(org.eclipse.ocl.pivot.@NonNull Class type);
 	@Nullable GenParameter getGenParameter(@NonNull Parameter parameter);
 	@NonNull String getGetAccessor(@NonNull Property aProperty) throws GenModelException;
 	@NonNull String getGetAccessor(@NonNull EStructuralFeature eStructuralFeature) throws GenModelException;
@@ -56,9 +56,9 @@
 	@NonNull String getOperationReturnType(@NonNull Operation operation) throws GenModelException;
 	@NonNull String getPropertyResultType(@NonNull Property property) throws GenModelException;
 	@Nullable String getQualifiedFactoryInterfaceName(@NonNull EPackage ePackage);
-	@Nullable String getQualifiedFactoryInterfaceName(@NonNull org.eclipse.ocl.pivot.Class type);
+	@Nullable String getQualifiedFactoryInterfaceName(org.eclipse.ocl.pivot.@NonNull Class type);
 	@Nullable String getQualifiedFactoryInstanceAccessor(@NonNull EPackage ePackage);
-	@Nullable String getQualifiedFactoryInstanceAccessor(@NonNull org.eclipse.ocl.pivot.Class type);
+	@Nullable String getQualifiedFactoryInstanceAccessor(org.eclipse.ocl.pivot.@NonNull Class type);
 	@Nullable String getQualifiedPackageInterfaceName(@NonNull EPackage ePackage);
 //	@Nullable String getQualifiedLiteraleName(@NonNull EPackage ePackage);
 //	@Nullable String getQualifiedOperationImplementationName(@NonNull CodeGenSnippet snippet, @NonNull Operation anOperation, @NonNull String stereotype);
diff --git a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/java/types/Id2BoxedDescriptorVisitor.java b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/java/types/Id2BoxedDescriptorVisitor.java
index c872f23..4f60941 100644
--- a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/java/types/Id2BoxedDescriptorVisitor.java
+++ b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/java/types/Id2BoxedDescriptorVisitor.java
@@ -80,7 +80,7 @@
 	}
 
 	protected EClassifier getEClassifier(@NonNull Type type) {
-		for (@SuppressWarnings("null")@NonNull org.eclipse.ocl.pivot.Class dType : metamodelManager.getPartialClasses(type)) {
+		for (@SuppressWarnings("null")org.eclipse.ocl.pivot.@NonNull Class dType : metamodelManager.getPartialClasses(type)) {
 			EClassifier eClass = (EClassifier) dType.getESObject();
 			if (eClass != null) {
 				return eClass;
diff --git a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/oclinecore/OCLinEcoreCG2JavaVisitor.java b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/oclinecore/OCLinEcoreCG2JavaVisitor.java
index 42f170c..ed89c19 100644
--- a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/oclinecore/OCLinEcoreCG2JavaVisitor.java
+++ b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/oclinecore/OCLinEcoreCG2JavaVisitor.java
@@ -128,7 +128,7 @@
 		return toString();
 	}
 
-	protected @NonNull String generateValidatorBody(@NonNull CGValuedElement cgBody, @NonNull Constraint asConstraint, @NonNull org.eclipse.ocl.pivot.Class asType) {
+	protected @NonNull String generateValidatorBody(@NonNull CGValuedElement cgBody, @NonNull Constraint asConstraint, org.eclipse.ocl.pivot.@NonNull Class asType) {
 		js.resetStream();
 		String ecoreConstraintName = asConstraint.getName();
 		String constraintName = ecoreConstraintName;
diff --git a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/oclinecore/OCLinEcoreTables.java b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/oclinecore/OCLinEcoreTables.java
index 822f371..244a53d 100644
--- a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/oclinecore/OCLinEcoreTables.java
+++ b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/oclinecore/OCLinEcoreTables.java
@@ -392,7 +392,7 @@
 			s.append("	public static class " + pagedName);
 			s.append(" {\n");
 			appendInitializationStart(pagedName);	
-			for (@SuppressWarnings("null")@NonNull org.eclipse.ocl.pivot.Class pClass : fragmentProperties.keySet()) {
+			for (@SuppressWarnings("null")org.eclipse.ocl.pivot.@NonNull Class pClass : fragmentProperties.keySet()) {
 				List<Property> sortedProperties = fragmentProperties.get(pClass);
 				s.append("\n");
 				s.append("		private static final " + atNonNull() + " ");
@@ -682,7 +682,7 @@
 		s.append("	}\n");
 	}
 
-	protected void declareType(@NonNull org.eclipse.ocl.pivot.Class pClass) {
+	protected void declareType(org.eclipse.ocl.pivot.@NonNull Class pClass) {
 		Class<?> typeClass =
 				pClass instanceof Enumeration ? EcoreExecutorEnumeration.class :
 				pClass instanceof InvalidType ? EcoreExecutorInvalidType.class :
@@ -1098,7 +1098,7 @@
 		s1.append(" *************************************************************************\n");
 		s1.append(" * This code is 100% auto-generated\n");
 		s1.append(" * from:\n");
-		for (@SuppressWarnings("null")@NonNull org.eclipse.ocl.pivot.Package dPackage : metamodelManager.getPartialPackages(pPackage, false)) {
+		for (@SuppressWarnings("null")org.eclipse.ocl.pivot.@NonNull Package dPackage : metamodelManager.getPartialPackages(pPackage, false)) {
 			EObject eRoot = ((EObject)dPackage).eContainer();
 			if (eRoot instanceof Model) {
 				s1.append(" *   " + deresolveFileName(((Model)eRoot).getExternalURI()) + "\n");
diff --git a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/oclinecore/OCLinEcoreTablesUtils.java b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/oclinecore/OCLinEcoreTablesUtils.java
index 8e96423..acb2c4b 100644
--- a/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/oclinecore/OCLinEcoreTablesUtils.java
+++ b/examples/org.eclipse.ocl.examples.codegen/src/org/eclipse/ocl/examples/codegen/oclinecore/OCLinEcoreTablesUtils.java
@@ -340,7 +340,7 @@
 		}
 
 		@Override
-		public @Nullable Object visitClass(@NonNull org.eclipse.ocl.pivot.Class type) {
+		public @Nullable Object visitClass(org.eclipse.ocl.pivot.@NonNull Class type) {
 //			TemplateParameter owningTemplateParameter = type.isTemplateParameter();
 //			if (owningTemplateParameter == null) {
 				type.accept(emitQualifiedLiteralVisitor);
@@ -494,7 +494,7 @@
 		}
 
 		@Override
-		public @Nullable Object visitClass(@NonNull org.eclipse.ocl.pivot.Class type) {
+		public @Nullable Object visitClass(org.eclipse.ocl.pivot.@NonNull Class type) {
 			s.append("Types.");
 			s.appendScopedTypeName(type);
 			return null;
@@ -547,7 +547,7 @@
 		}
 
 		@Override
-		public @Nullable Object visitPackage(@NonNull org.eclipse.ocl.pivot.Package pkge) {
+		public @Nullable Object visitPackage(org.eclipse.ocl.pivot.@NonNull Package pkge) {
 			s.append("_");
 			s.appendName(pkge);
 			return null;
@@ -587,7 +587,7 @@
 		}
 
 		@Override
-		public @Nullable Object visitClass(@NonNull org.eclipse.ocl.pivot.Class type) {
+		public @Nullable Object visitClass(org.eclipse.ocl.pivot.@NonNull Class type) {
 			s.appendClassReference(getQualifiedTablesClassName(type));
 			s.append(".Types.");
 			s.appendScopedTypeName(type);
@@ -654,7 +654,7 @@
 	protected final @NonNull PivotMetamodelManager metamodelManager;
 	protected final @NonNull EnvironmentFactoryInternal environmentFactory;
 	protected final @NonNull StandardLibraryInternal standardLibrary;
-	protected final @NonNull org.eclipse.ocl.pivot.Package pPackage;
+	protected final org.eclipse.ocl.pivot.@NonNull Package pPackage;
 	protected final @NonNull DeclareParameterTypeVisitor declareParameterTypeVisitor = new DeclareParameterTypeVisitor(s);
 	protected final @NonNull EmitLiteralVisitor emitLiteralVisitor = new EmitLiteralVisitor(s);
 	protected final @NonNull EmitQualifiedLiteralVisitor emitQualifiedLiteralVisitor = new EmitQualifiedLiteralVisitor(s);
@@ -675,13 +675,13 @@
 		activeClassesSortedByName = getActiveClassesSortedByName(pPackage);
 	}
 
-	protected @NonNull Iterable<org.eclipse.ocl.pivot.Class> getActiveClassesSortedByName(@NonNull org.eclipse.ocl.pivot.Package pPackage) {
+	protected @NonNull Iterable<org.eclipse.ocl.pivot.Class> getActiveClassesSortedByName(org.eclipse.ocl.pivot.@NonNull Package pPackage) {
 		List<org.eclipse.ocl.pivot.Class> sortedClasses = new ArrayList<org.eclipse.ocl.pivot.Class>(getActiveTypes(pPackage));
 		Collections.sort(sortedClasses, nameComparator);
 		return sortedClasses;
 	}
 	
-	protected @NonNull Set<? extends org.eclipse.ocl.pivot.Class> getActiveTypes(@NonNull org.eclipse.ocl.pivot.Package pPackage) {
+	protected @NonNull Set<? extends org.eclipse.ocl.pivot.Class> getActiveTypes(org.eclipse.ocl.pivot.@NonNull Package pPackage) {
 		Package oclstdlibPackage = standardLibrary.getBooleanType().getOwningPackage();
 		org.eclipse.ocl.pivot.Package pivotMetamodel = metamodelManager.getASmetamodel();
 		Type elementType = metamodelManager.getASClass("Element");
@@ -732,7 +732,7 @@
 		}
 	}
 
-	protected @NonNull Iterable<org.eclipse.ocl.pivot.Class> getAllProperSupertypesSortedByName(@NonNull org.eclipse.ocl.pivot.Class pClass) {
+	protected @NonNull Iterable<org.eclipse.ocl.pivot.Class> getAllProperSupertypesSortedByName(org.eclipse.ocl.pivot.@NonNull Class pClass) {
 		org.eclipse.ocl.pivot.Class theClass = metamodelManager.getPrimaryClass(pClass);
 		Map<org.eclipse.ocl.pivot.Class, Integer> results = new HashMap<org.eclipse.ocl.pivot.Class, Integer>();
 		getAllSuperClasses(results, theClass);
@@ -742,7 +742,7 @@
 		return sortedClasses;
 	}
 
-	protected @NonNull List<org.eclipse.ocl.pivot.Class> getAllSupertypesSortedByName(@NonNull org.eclipse.ocl.pivot.Class pClass) {
+	protected @NonNull List<org.eclipse.ocl.pivot.Class> getAllSupertypesSortedByName(org.eclipse.ocl.pivot.@NonNull Class pClass) {
 		Map<org.eclipse.ocl.pivot.Class, Integer> results = new HashMap<org.eclipse.ocl.pivot.Class, Integer>();
 		getAllSuperClasses(results, pClass);
 		List<org.eclipse.ocl.pivot.Class> sortedClasses = new ArrayList<org.eclipse.ocl.pivot.Class>(results.keySet());
@@ -751,7 +751,7 @@
 	}
 	
 	@SuppressWarnings("null")
-	protected int getAllSuperClasses(@NonNull Map<org.eclipse.ocl.pivot.Class, Integer> results, @NonNull org.eclipse.ocl.pivot.Class aClass) {
+	protected int getAllSuperClasses(@NonNull Map<org.eclipse.ocl.pivot.Class, Integer> results, org.eclipse.ocl.pivot.@NonNull Class aClass) {
 		org.eclipse.ocl.pivot.Class theClass = metamodelManager.getPrimaryClass(aClass);
 		Integer depth = results.get(theClass);
 		if (depth != null) {
@@ -772,7 +772,7 @@
 		return myDepth;
 	}
 	
-	protected @Nullable org.eclipse.ocl.pivot.Package getExtendedPackage(@NonNull org.eclipse.ocl.pivot.Package pPackage) {
+	protected org.eclipse.ocl.pivot.@Nullable Package getExtendedPackage(org.eclipse.ocl.pivot.@NonNull Package pPackage) {
 		Package oclstdlibPackage = standardLibrary.getBooleanType().getOwningPackage();
 		org.eclipse.ocl.pivot.Package pivotMetamodel = metamodelManager.getASmetamodel();
 		if (oclstdlibPackage == pPackage) {
@@ -790,7 +790,7 @@
 		return genPackage;
 	}
 	
-	protected @Nullable GenPackage getGenPackage(@NonNull org.eclipse.ocl.pivot.Class type) {
+	protected @Nullable GenPackage getGenPackage(org.eclipse.ocl.pivot.@NonNull Class type) {
 		org.eclipse.ocl.pivot.Package pPackage = type.getOwningPackage();
 		assert pPackage != null;
 		Package oclstdlibPackage = standardLibrary.getBooleanType().getOwningPackage();
@@ -824,7 +824,7 @@
 		return getGenPackage(pPackage);
 	}
 	
-	protected @Nullable GenPackage getGenPackage(@NonNull org.eclipse.ocl.pivot.Package asPackage) {
+	protected @Nullable GenPackage getGenPackage(org.eclipse.ocl.pivot.@NonNull Package asPackage) {
 		EPackage firstEPackage = genPackage.getEcorePackage();
 		if (firstEPackage.getName().equals(asPackage.getName())) {
 			return genPackage;
@@ -890,14 +890,14 @@
 		}
 	}
 
-	protected @NonNull Iterable<Operation> getLocalOperationsSortedBySignature(@NonNull org.eclipse.ocl.pivot.Class pClass) {
+	protected @NonNull Iterable<Operation> getLocalOperationsSortedBySignature(org.eclipse.ocl.pivot.@NonNull Class pClass) {
 		// cls.getOperations()->sortedBy(op2 : Operation | op2.getSignature())
 		List<Operation> sortedOperations = new ArrayList<Operation>(getOperations(pClass));
 		Collections.sort(sortedOperations, signatureComparator);
 		return sortedOperations;
 	}
 
-	protected @NonNull List<Property> getLocalPropertiesSortedByName(@NonNull org.eclipse.ocl.pivot.Class pClass) {
+	protected @NonNull List<Property> getLocalPropertiesSortedByName(org.eclipse.ocl.pivot.@NonNull Class pClass) {
 		List<Property> sortedProperties = new ArrayList<Property>();
 		for (/*@NonNull*/ Property property : getProperties(pClass)) {
 			assert property != null;
@@ -909,7 +909,7 @@
 		return sortedProperties;
 	}
 	
-	protected @NonNull LinkedHashSet<Operation> getOperations(@NonNull org.eclipse.ocl.pivot.Class type) {
+	protected @NonNull LinkedHashSet<Operation> getOperations(org.eclipse.ocl.pivot.@NonNull Class type) {
 		LinkedHashSet<Operation> operations = new LinkedHashSet<Operation>();
 		for (Operation operation : metamodelManager.getMemberOperations(type, false)) {
 			operations.add(operation);
@@ -920,7 +920,7 @@
 		return operations;
 	}
 
-	protected @NonNull Operation getOverloadOp(@NonNull org.eclipse.ocl.pivot.Class pClass, @NonNull Operation baseOp) {
+	protected @NonNull Operation getOverloadOp(org.eclipse.ocl.pivot.@NonNull Class pClass, @NonNull Operation baseOp) {
 		String baseSignature = getSignature(baseOp);
 		Map<org.eclipse.ocl.pivot.Class, Integer> results = new HashMap<org.eclipse.ocl.pivot.Class, Integer>();
 		getAllSuperClasses(results, pClass);
@@ -956,7 +956,7 @@
 		return asPackage;
 	}
 	
-	protected @NonNull LinkedHashSet<Property> getProperties(@NonNull org.eclipse.ocl.pivot.Class type) {
+	protected @NonNull LinkedHashSet<Property> getProperties(org.eclipse.ocl.pivot.@NonNull Class type) {
 		Set<String> names = new HashSet<String>();
 		LinkedHashSet<Property> properties = new LinkedHashSet<Property>();
 		for (@SuppressWarnings("null")@NonNull Property property : metamodelManager.getMemberProperties(type, true)) {
@@ -971,7 +971,7 @@
 		return properties;
 	}
 	
-	protected @NonNull String getQualifiedTablesClassName(@NonNull org.eclipse.ocl.pivot.Class type) {
+	protected @NonNull String getQualifiedTablesClassName(org.eclipse.ocl.pivot.@NonNull Class type) {
 		GenPackage genPackage = getGenPackage(type);
 		if (genPackage != null) {
 			return genPackage.getReflectionPackageName() + "." + getTablesClassName(genPackage);
@@ -981,7 +981,7 @@
 		}
 	}
 	
-	protected @NonNull String getQualifiedTablesClassName(@NonNull org.eclipse.ocl.pivot.Package pPackage) {
+	protected @NonNull String getQualifiedTablesClassName(org.eclipse.ocl.pivot.@NonNull Package pPackage) {
 		GenPackage genPackage = getGenPackage(pPackage);
 		if (genPackage != null) {
 			return genPackage.getReflectionPackageName() + "." + getTablesClassName(genPackage);
@@ -1178,7 +1178,7 @@
 		return false;
 	}
 	
-	protected void mergeLibrary(@NonNull org.eclipse.ocl.pivot.Package primaryPackage) {
+	protected void mergeLibrary(org.eclipse.ocl.pivot.@NonNull Package primaryPackage) {
 //		primaryPackage.setName("ocl");
 		List<org.eclipse.ocl.pivot.Class> primaryTypes = primaryPackage.getOwnedClasses();
 		for (Library library : metamodelManager.getLibraries()) {
diff --git a/examples/org.eclipse.ocl.examples.common/.classpath b/examples/org.eclipse.ocl.examples.common/.classpath
index 098194c..eca7bdb 100644
--- a/examples/org.eclipse.ocl.examples.common/.classpath
+++ b/examples/org.eclipse.ocl.examples.common/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/examples/org.eclipse.ocl.examples.common/META-INF/MANIFEST.MF b/examples/org.eclipse.ocl.examples.common/META-INF/MANIFEST.MF
index 462efe3..4593600 100644
--- a/examples/org.eclipse.ocl.examples.common/META-INF/MANIFEST.MF
+++ b/examples/org.eclipse.ocl.examples.common/META-INF/MANIFEST.MF
@@ -6,7 +6,7 @@
 Bundle-ClassPath: .
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.emf.ecore.xmi;bundle-version="[2.7.0,3.0.0)";visibility:=reexport,
  org.eclipse.emf.edit;bundle-version="[2.7.0,3.0.0)"
diff --git a/examples/org.eclipse.ocl.examples.common/build.properties b/examples/org.eclipse.ocl.examples.common/build.properties
index 9140297..f866186 100644
--- a/examples/org.eclipse.ocl.examples.common/build.properties
+++ b/examples/org.eclipse.ocl.examples.common/build.properties
@@ -11,11 +11,9 @@
 
 bin.includes = .,\
                META-INF/,\
-               build.properties,\
                plugin.properties,\
                about.html
 jars.compile.order = .
 source.. = src/
 output.. = bin/
 src.includes = about.html
-additional.bundles = org.eclipse.ocl.jdt.annotation7
diff --git a/examples/org.eclipse.ocl.examples.debug.ui/.classpath b/examples/org.eclipse.ocl.examples.debug.ui/.classpath
index 098194c..eca7bdb 100644
--- a/examples/org.eclipse.ocl.examples.debug.ui/.classpath
+++ b/examples/org.eclipse.ocl.examples.debug.ui/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/examples/org.eclipse.ocl.examples.debug.ui/META-INF/MANIFEST.MF b/examples/org.eclipse.ocl.examples.debug.ui/META-INF/MANIFEST.MF
index 3e215ec..a58ba7e 100644
--- a/examples/org.eclipse.ocl.examples.debug.ui/META-INF/MANIFEST.MF
+++ b/examples/org.eclipse.ocl.examples.debug.ui/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.ocl.examples.debug.ui;singleton:=true
 Bundle-Version: 2.0.100.qualifier
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
diff --git a/examples/org.eclipse.ocl.examples.debug.ui/build.properties b/examples/org.eclipse.ocl.examples.debug.ui/build.properties
index 6593aa1..3d8f6c9 100644
--- a/examples/org.eclipse.ocl.examples.debug.ui/build.properties
+++ b/examples/org.eclipse.ocl.examples.debug.ui/build.properties
@@ -13,9 +13,7 @@
 bin.includes = META-INF/,\
                .,\
                about.html,\
-               build.properties,\
                plugin.properties,\
                plugin.xml,\
                icons/
 src.includes = about.html
-additional.bundles = org.eclipse.ocl.jdt.annotation7
diff --git a/examples/org.eclipse.ocl.examples.debug.vm.ui/.classpath b/examples/org.eclipse.ocl.examples.debug.vm.ui/.classpath
index 098194c..eca7bdb 100644
--- a/examples/org.eclipse.ocl.examples.debug.vm.ui/.classpath
+++ b/examples/org.eclipse.ocl.examples.debug.vm.ui/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/examples/org.eclipse.ocl.examples.debug.vm.ui/META-INF/MANIFEST.MF b/examples/org.eclipse.ocl.examples.debug.vm.ui/META-INF/MANIFEST.MF
index afe0bbd..661bcf2 100644
--- a/examples/org.eclipse.ocl.examples.debug.vm.ui/META-INF/MANIFEST.MF
+++ b/examples/org.eclipse.ocl.examples.debug.vm.ui/META-INF/MANIFEST.MF
@@ -5,7 +5,7 @@
 Bundle-Localization: plugin
 Bundle-SymbolicName: org.eclipse.ocl.examples.debug.vm.ui;singleton:=true
 Bundle-Version: 2.0.100.qualifier
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Export-Package: org.eclipse.ocl.examples.debug.vm.ui,
  org.eclipse.ocl.examples.debug.vm.ui.actions,
  org.eclipse.ocl.examples.debug.vm.ui.launching,
diff --git a/examples/org.eclipse.ocl.examples.debug.vm.ui/build.properties b/examples/org.eclipse.ocl.examples.debug.vm.ui/build.properties
index d756290..62b8356 100644
--- a/examples/org.eclipse.ocl.examples.debug.vm.ui/build.properties
+++ b/examples/org.eclipse.ocl.examples.debug.vm.ui/build.properties
@@ -14,7 +14,5 @@
                .,\
                about.html,\
                plugin.properties,\
-               build.properties,\
                icons/
 src.includes = about.html
-additional.bundles = org.eclipse.ocl.jdt.annotation7
diff --git a/examples/org.eclipse.ocl.examples.debug.vm/.classpath b/examples/org.eclipse.ocl.examples.debug.vm/.classpath
index 098194c..eca7bdb 100644
--- a/examples/org.eclipse.ocl.examples.debug.vm/.classpath
+++ b/examples/org.eclipse.ocl.examples.debug.vm/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/examples/org.eclipse.ocl.examples.debug.vm/META-INF/MANIFEST.MF b/examples/org.eclipse.ocl.examples.debug.vm/META-INF/MANIFEST.MF
index a23b51c..a557619 100644
--- a/examples/org.eclipse.ocl.examples.debug.vm/META-INF/MANIFEST.MF
+++ b/examples/org.eclipse.ocl.examples.debug.vm/META-INF/MANIFEST.MF
@@ -5,7 +5,7 @@
 Bundle-Localization: plugin
 Bundle-SymbolicName: org.eclipse.ocl.examples.debug.vm;singleton:=true
 Bundle-Version: 2.0.100.qualifier
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Export-Package: org.eclipse.ocl.examples.debug.vm,
  org.eclipse.ocl.examples.debug.vm.core,
  org.eclipse.ocl.examples.debug.vm.data,
diff --git a/examples/org.eclipse.ocl.examples.debug.vm/build.properties b/examples/org.eclipse.ocl.examples.debug.vm/build.properties
index e93742a..5b819e5 100644
--- a/examples/org.eclipse.ocl.examples.debug.vm/build.properties
+++ b/examples/org.eclipse.ocl.examples.debug.vm/build.properties
@@ -13,8 +13,6 @@
 bin.includes = META-INF/,\
                .,\
                about.html,\
-               build.properties,\
                plugin.properties,\
                .options
 src.includes = about.html
-additional.bundles = org.eclipse.ocl.jdt.annotation7
diff --git a/examples/org.eclipse.ocl.examples.debug/.classpath b/examples/org.eclipse.ocl.examples.debug/.classpath
index 098194c..eca7bdb 100644
--- a/examples/org.eclipse.ocl.examples.debug/.classpath
+++ b/examples/org.eclipse.ocl.examples.debug/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/examples/org.eclipse.ocl.examples.debug/META-INF/MANIFEST.MF b/examples/org.eclipse.ocl.examples.debug/META-INF/MANIFEST.MF
index 7240ac6..969d331 100644
--- a/examples/org.eclipse.ocl.examples.debug/META-INF/MANIFEST.MF
+++ b/examples/org.eclipse.ocl.examples.debug/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.ocl.examples.debug;singleton:=true
 Bundle-Version: 2.0.100.qualifier
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
diff --git a/examples/org.eclipse.ocl.examples.debug/build.properties b/examples/org.eclipse.ocl.examples.debug/build.properties
index 1dcbef0..fe9e13c 100644
--- a/examples/org.eclipse.ocl.examples.debug/build.properties
+++ b/examples/org.eclipse.ocl.examples.debug/build.properties
@@ -13,8 +13,6 @@
 bin.includes = META-INF/,\
                .,\
                about.html,\
-               build.properties,\
                plugin.properties,\
                plugin.xml
 src.includes = about.html
-additional.bundles = org.eclipse.ocl.jdt.annotation7
diff --git a/examples/org.eclipse.ocl.examples.debug/src/org/eclipse/ocl/examples/debug/evaluator/AbstractOCLVMEvaluationVisitor.java b/examples/org.eclipse.ocl.examples.debug/src/org/eclipse/ocl/examples/debug/evaluator/AbstractOCLVMEvaluationVisitor.java
index 13895da..2d158b8 100644
--- a/examples/org.eclipse.ocl.examples.debug/src/org/eclipse/ocl/examples/debug/evaluator/AbstractOCLVMEvaluationVisitor.java
+++ b/examples/org.eclipse.ocl.examples.debug/src/org/eclipse/ocl/examples/debug/evaluator/AbstractOCLVMEvaluationVisitor.java
@@ -268,17 +268,17 @@
 	public abstract @NonNull OCLVMRootEvaluationVisitor getVMRootEvaluationVisitor();
  
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getStaticTypeOf(@Nullable Object value) {
+	public org.eclipse.ocl.pivot.@NonNull Class getStaticTypeOf(@Nullable Object value) {
 		return delegate.getStaticTypeOf(value);
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getStaticTypeOf(@Nullable Object value, @NonNull Object... values) {
+	public org.eclipse.ocl.pivot.@NonNull Class getStaticTypeOf(@Nullable Object value, @NonNull Object... values) {
 		return delegate.getStaticTypeOf(value, values);
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getStaticTypeOf(@Nullable Object value, @NonNull Iterable<?> values) {
+	public org.eclipse.ocl.pivot.@NonNull Class getStaticTypeOf(@Nullable Object value, @NonNull Iterable<?> values) {
 		return delegate.getStaticTypeOf(value, values);
 	}
 
diff --git a/examples/org.eclipse.ocl.examples.debug/src/org/eclipse/ocl/examples/debug/evaluator/OCLVMEvaluationVisitorDecorator.java b/examples/org.eclipse.ocl.examples.debug/src/org/eclipse/ocl/examples/debug/evaluator/OCLVMEvaluationVisitorDecorator.java
index 098c9c3..71dceb6 100644
--- a/examples/org.eclipse.ocl.examples.debug/src/org/eclipse/ocl/examples/debug/evaluator/OCLVMEvaluationVisitorDecorator.java
+++ b/examples/org.eclipse.ocl.examples.debug/src/org/eclipse/ocl/examples/debug/evaluator/OCLVMEvaluationVisitorDecorator.java
@@ -117,7 +117,7 @@
 	/**
      * Delegates to my decorated visitor.
      */
-	public @NonNull org.eclipse.ocl.pivot.Class getStaticTypeOf(@Nullable Object value) {
+	public org.eclipse.ocl.pivot.@NonNull Class getStaticTypeOf(@Nullable Object value) {
 		
 		return delegate.getStaticTypeOf(value);
 	}
@@ -125,7 +125,7 @@
 	/**
      * Delegates to my decorated visitor.
      */
-	public @NonNull org.eclipse.ocl.pivot.Class getStaticTypeOf(@Nullable Object value,
+	public org.eclipse.ocl.pivot.@NonNull Class getStaticTypeOf(@Nullable Object value,
 			@NonNull Object... values) {
 		return delegate.getStaticTypeOf(value, values);
 	}
@@ -133,7 +133,7 @@
 	/**
      * Delegates to my decorated visitor.
      */
-	public @NonNull org.eclipse.ocl.pivot.Class getStaticTypeOf(@Nullable Object value,
+	public org.eclipse.ocl.pivot.@NonNull Class getStaticTypeOf(@Nullable Object value,
 			@NonNull Iterable<?> values) {
 		return delegate.getStaticTypeOf(value, values);
 	}
diff --git a/examples/org.eclipse.ocl.examples.debug/src/org/eclipse/ocl/examples/debug/evaluator/OCLVMModelManager.java b/examples/org.eclipse.ocl.examples.debug/src/org/eclipse/ocl/examples/debug/evaluator/OCLVMModelManager.java
index 2330360..e030bf3 100644
--- a/examples/org.eclipse.ocl.examples.debug/src/org/eclipse/ocl/examples/debug/evaluator/OCLVMModelManager.java
+++ b/examples/org.eclipse.ocl.examples.debug/src/org/eclipse/ocl/examples/debug/evaluator/OCLVMModelManager.java
@@ -53,7 +53,7 @@
 //		allInstancesTypes.clear();
 	}
 
-	public @NonNull Set<EObject> get(@NonNull org.eclipse.ocl.pivot.Class type) {
+	public @NonNull Set<EObject> get(org.eclipse.ocl.pivot.@NonNull Class type) {
 		throw new UnsupportedOperationException();
 	}
 
diff --git a/examples/org.eclipse.ocl.examples.emf.validation.validity.ui/.classpath b/examples/org.eclipse.ocl.examples.emf.validation.validity.ui/.classpath
index 098194c..eca7bdb 100644
--- a/examples/org.eclipse.ocl.examples.emf.validation.validity.ui/.classpath
+++ b/examples/org.eclipse.ocl.examples.emf.validation.validity.ui/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/examples/org.eclipse.ocl.examples.emf.validation.validity.ui/META-INF/MANIFEST.MF b/examples/org.eclipse.ocl.examples.emf.validation.validity.ui/META-INF/MANIFEST.MF
index 7a8bb31..7d492a5 100644
--- a/examples/org.eclipse.ocl.examples.emf.validation.validity.ui/META-INF/MANIFEST.MF
+++ b/examples/org.eclipse.ocl.examples.emf.validation.validity.ui/META-INF/MANIFEST.MF
@@ -14,7 +14,7 @@
  org.eclipse.ocl.examples.ui;bundle-version="[1.2.0,2.0.0)",
  org.eclipse.ocl.pivot;bundle-version="[1.0.0,2.0.0)",
  org.eclipse.ocl.examples.debug.vm.ui;bundle-version="[2.0.0,3.0.0)"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ActivationPolicy: lazy
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/examples/org.eclipse.ocl.examples.emf.validation.validity.ui/build.properties b/examples/org.eclipse.ocl.examples.emf.validation.validity.ui/build.properties
index b18ef4d..7b3ff7b 100644
--- a/examples/org.eclipse.ocl.examples.emf.validation.validity.ui/build.properties
+++ b/examples/org.eclipse.ocl.examples.emf.validation.validity.ui/build.properties
@@ -15,7 +15,5 @@
                .,\
                icons/,\
                about.html,\
-               build.properties,\
                plugin.properties
 src.includes = about.html
-additional.bundles = org.eclipse.ocl.jdt.annotation7
diff --git a/examples/org.eclipse.ocl.examples.emf.validation.validity/.classpath b/examples/org.eclipse.ocl.examples.emf.validation.validity/.classpath
index 649304e..8fd5918 100644
--- a/examples/org.eclipse.ocl.examples.emf.validation.validity/.classpath
+++ b/examples/org.eclipse.ocl.examples.emf.validation.validity/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="src" path="emf-gen"/>
diff --git a/examples/org.eclipse.ocl.examples.emf.validation.validity/META-INF/MANIFEST.MF b/examples/org.eclipse.ocl.examples.emf.validation.validity/META-INF/MANIFEST.MF
index 749e030..dde8bc3 100644
--- a/examples/org.eclipse.ocl.examples.emf.validation.validity/META-INF/MANIFEST.MF
+++ b/examples/org.eclipse.ocl.examples.emf.validation.validity/META-INF/MANIFEST.MF
@@ -11,7 +11,7 @@
  org.eclipse.emf.ecore;bundle-version="[2.7.0,3.0.0)";visibility:=reexport,
  org.eclipse.emf.ecore.edit;bundle-version="[2.7.0,3.0.0)",
  org.eclipse.ocl.pivot;bundle-version="[1.0.0,2.0.0)"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Export-Package: org.eclipse.ocl.examples.emf.validation.validity,
  org.eclipse.ocl.examples.emf.validation.validity.export,
  org.eclipse.ocl.examples.emf.validation.validity.impl,
diff --git a/examples/org.eclipse.ocl.examples.emf.validation.validity/build.properties b/examples/org.eclipse.ocl.examples.emf.validation.validity/build.properties
index 43a8587..626a82d 100644
--- a/examples/org.eclipse.ocl.examples.emf.validation.validity/build.properties
+++ b/examples/org.eclipse.ocl.examples.emf.validation.validity/build.properties
@@ -13,7 +13,6 @@
 bin.includes = .,\
                model/,\
                META-INF/,\
-               build.properties,\
                plugin.xml,\
                plugin.properties,\
                about.html,\
@@ -25,4 +24,3 @@
 			emf-gen/
 output.. = bin/
 src.includes = about.html
-additional.bundles = org.eclipse.ocl.jdt.annotation7
diff --git a/examples/org.eclipse.ocl.examples.standalone/.classpath b/examples/org.eclipse.ocl.examples.standalone/.classpath
index 098194c..eca7bdb 100644
--- a/examples/org.eclipse.ocl.examples.standalone/.classpath
+++ b/examples/org.eclipse.ocl.examples.standalone/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/examples/org.eclipse.ocl.examples.standalone/META-INF/MANIFEST.MF b/examples/org.eclipse.ocl.examples.standalone/META-INF/MANIFEST.MF
index f90f928..83b715e 100644
--- a/examples/org.eclipse.ocl.examples.standalone/META-INF/MANIFEST.MF
+++ b/examples/org.eclipse.ocl.examples.standalone/META-INF/MANIFEST.MF
@@ -5,7 +5,7 @@
 Bundle-Localization: plugin
 Bundle-SymbolicName: org.eclipse.ocl.examples.standalone;singleton:=true
 Bundle-Version: 2.0.100.qualifier
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.core.resources;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.ocl.xtext.completeocl;bundle-version="[1.0.0,2.0.0)",
diff --git a/examples/org.eclipse.ocl.examples.standalone/build.properties b/examples/org.eclipse.ocl.examples.standalone/build.properties
index f33cc6d..e78d0e8 100644
--- a/examples/org.eclipse.ocl.examples.standalone/build.properties
+++ b/examples/org.eclipse.ocl.examples.standalone/build.properties
@@ -18,4 +18,3 @@
 source.. = src/
 output.. = bin/
 src.includes = about.html
-additional.bundles = org.eclipse.ocl.jdt.annotation7
diff --git a/examples/org.eclipse.ocl.examples.ui/.classpath b/examples/org.eclipse.ocl.examples.ui/.classpath
index 098194c..eca7bdb 100644
--- a/examples/org.eclipse.ocl.examples.ui/.classpath
+++ b/examples/org.eclipse.ocl.examples.ui/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/examples/org.eclipse.ocl.examples.ui/META-INF/MANIFEST.MF b/examples/org.eclipse.ocl.examples.ui/META-INF/MANIFEST.MF
index 4e816ee..58bba9e 100644
--- a/examples/org.eclipse.ocl.examples.ui/META-INF/MANIFEST.MF
+++ b/examples/org.eclipse.ocl.examples.ui/META-INF/MANIFEST.MF
@@ -10,5 +10,5 @@
  org.eclipse.ui;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.xtext.ui;bundle-version="[2.0.0,3.0.0)"
 Bundle-ActivationPolicy: lazy
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Export-Package: org.eclipse.ocl.examples.ui
diff --git a/examples/org.eclipse.ocl.examples.ui/build.properties b/examples/org.eclipse.ocl.examples.ui/build.properties
index 2c4b298..987ead8 100644
--- a/examples/org.eclipse.ocl.examples.ui/build.properties
+++ b/examples/org.eclipse.ocl.examples.ui/build.properties
@@ -13,8 +13,6 @@
 bin.includes = META-INF/,\
                .,\
                about.html,\
-               build.properties,\
                plugin.properties,\
                plugin.xml
 src.includes = about.html
-additional.bundles = org.eclipse.ocl.jdt.annotation7
diff --git a/examples/org.eclipse.ocl.examples.uml25/.classpath b/examples/org.eclipse.ocl.examples.uml25/.classpath
index 4f5dacf..f5988f8 100644
--- a/examples/org.eclipse.ocl.examples.uml25/.classpath
+++ b/examples/org.eclipse.ocl.examples.uml25/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="src" path="emf-gen"/>
diff --git a/examples/org.eclipse.ocl.examples.uml25/META-INF/MANIFEST.MF b/examples/org.eclipse.ocl.examples.uml25/META-INF/MANIFEST.MF
index 8e41e33..89c6e3d 100644
--- a/examples/org.eclipse.ocl.examples.uml25/META-INF/MANIFEST.MF
+++ b/examples/org.eclipse.ocl.examples.uml25/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.ocl.examples.uml25;singleton:=true
 Bundle-Version: 2.0.100.qualifier
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ActivationPolicy: lazy
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.uml2.uml;bundle-version="[4.0.0,6.0.0)",
diff --git a/examples/org.eclipse.ocl.examples.uml25/build.properties b/examples/org.eclipse.ocl.examples.uml25/build.properties
index 6a1738d..a33e5d4 100644
--- a/examples/org.eclipse.ocl.examples.uml25/build.properties
+++ b/examples/org.eclipse.ocl.examples.uml25/build.properties
@@ -18,4 +18,3 @@
                about.html,\
                build.properties
 src.includes = about.html
-additional.bundles = org.eclipse.ocl.jdt.annotation7
diff --git a/examples/org.eclipse.ocl.examples.validity/.classpath b/examples/org.eclipse.ocl.examples.validity/.classpath
index 098194c..eca7bdb 100644
--- a/examples/org.eclipse.ocl.examples.validity/.classpath
+++ b/examples/org.eclipse.ocl.examples.validity/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/examples/org.eclipse.ocl.examples.validity/META-INF/MANIFEST.MF b/examples/org.eclipse.ocl.examples.validity/META-INF/MANIFEST.MF
index bbcb977..518b1c1 100644
--- a/examples/org.eclipse.ocl.examples.validity/META-INF/MANIFEST.MF
+++ b/examples/org.eclipse.ocl.examples.validity/META-INF/MANIFEST.MF
@@ -19,7 +19,7 @@
  org.eclipse.ocl.examples.debug,
  org.eclipse.ocl.examples.xtext.console,
  org.eclipse.ocl.xtext.completeocl;bundle-version="[1.0.0,2.0.0)"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ActivationPolicy: lazy
 Export-Package: org.eclipse.ocl.examples.validity.locator,
  org.eclipse.ocl.examples.validity.plugin
diff --git a/examples/org.eclipse.ocl.examples.validity/build.properties b/examples/org.eclipse.ocl.examples.validity/build.properties
index ccd2ca7..c9b0905 100644
--- a/examples/org.eclipse.ocl.examples.validity/build.properties
+++ b/examples/org.eclipse.ocl.examples.validity/build.properties
@@ -15,7 +15,5 @@
                plugin.properties,\
                plugin.xml,\
                about.html,\
-               build.properties,\
                icons/
 src.includes = about.html
-additional.bundles = org.eclipse.ocl.jdt.annotation7
diff --git a/examples/org.eclipse.ocl.examples.xtext.console/.classpath b/examples/org.eclipse.ocl.examples.xtext.console/.classpath
index 098194c..eca7bdb 100644
--- a/examples/org.eclipse.ocl.examples.xtext.console/.classpath
+++ b/examples/org.eclipse.ocl.examples.xtext.console/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/examples/org.eclipse.ocl.examples.xtext.console/META-INF/MANIFEST.MF b/examples/org.eclipse.ocl.examples.xtext.console/META-INF/MANIFEST.MF
index 7bcaaf0..d84ab50 100644
--- a/examples/org.eclipse.ocl.examples.xtext.console/META-INF/MANIFEST.MF
+++ b/examples/org.eclipse.ocl.examples.xtext.console/META-INF/MANIFEST.MF
@@ -24,4 +24,4 @@
  org.eclipse.ocl.examples.debug.vm.ui;bundle-version="[2.0.0,3.0.0)"
 Eclipse-LazyStart: true
 Bundle-ActivationPolicy: lazy
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/examples/org.eclipse.ocl.examples.xtext.console/build.properties b/examples/org.eclipse.ocl.examples.xtext.console/build.properties
index 831f612..560d924 100644
--- a/examples/org.eclipse.ocl.examples.xtext.console/build.properties
+++ b/examples/org.eclipse.ocl.examples.xtext.console/build.properties
@@ -22,4 +22,3 @@
 javacSource = 1.5
 javacTarget = 1.5
 compilerArg = -warn:-serial,nls,unchecked
-additional.bundles = org.eclipse.ocl.jdt.annotation7
diff --git a/examples/org.eclipse.ocl.examples.xtext2lpg/.classpath b/examples/org.eclipse.ocl.examples.xtext2lpg/.classpath
index 319424d..4efde16 100644
--- a/examples/org.eclipse.ocl.examples.xtext2lpg/.classpath
+++ b/examples/org.eclipse.ocl.examples.xtext2lpg/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="emf-gen"/>
 	<classpathentry kind="src" path="xtend-gen"/>
diff --git a/examples/org.eclipse.ocl.examples.xtext2lpg/META-INF/MANIFEST.MF b/examples/org.eclipse.ocl.examples.xtext2lpg/META-INF/MANIFEST.MF
index 189e743..2cebd9c 100644
--- a/examples/org.eclipse.ocl.examples.xtext2lpg/META-INF/MANIFEST.MF
+++ b/examples/org.eclipse.ocl.examples.xtext2lpg/META-INF/MANIFEST.MF
@@ -6,7 +6,7 @@
 Bundle-ClassPath: .
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Export-Package: org.eclipse.ocl.examples.xtext2lpg,
  org.eclipse.ocl.examples.xtext2lpg.XBNF,
  org.eclipse.ocl.examples.xtext2lpg.XBNF.impl,
diff --git a/examples/org.eclipse.ocl.examples.xtext2lpg/build.properties b/examples/org.eclipse.ocl.examples.xtext2lpg/build.properties
index 04fad82..e8489a5 100644
--- a/examples/org.eclipse.ocl.examples.xtext2lpg/build.properties
+++ b/examples/org.eclipse.ocl.examples.xtext2lpg/build.properties
@@ -22,4 +22,3 @@
            xtend-gen/,\
            src
 output.. = bin/
-additional.bundles = org.eclipse.ocl.jdt.annotation7
diff --git a/plugins/org.eclipse.ocl.common/build.properties b/plugins/org.eclipse.ocl.common/build.properties
index 156caf4..3e435b5 100644
--- a/plugins/org.eclipse.ocl.common/build.properties
+++ b/plugins/org.eclipse.ocl.common/build.properties
@@ -14,7 +14,5 @@
                .,\
                plugin.properties,\
                about.html,\
-               build.properties,\
                plugin.xml
 src.includes = about.html
-additional.bundles = org.eclipse.ocl.jdt.annotation7
diff --git a/plugins/org.eclipse.ocl.pivot.ui/.classpath b/plugins/org.eclipse.ocl.pivot.ui/.classpath
index 098194c..eca7bdb 100644
--- a/plugins/org.eclipse.ocl.pivot.ui/.classpath
+++ b/plugins/org.eclipse.ocl.pivot.ui/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/plugins/org.eclipse.ocl.pivot.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.ocl.pivot.ui/META-INF/MANIFEST.MF
index c0388ee..77454e7 100644
--- a/plugins/org.eclipse.ocl.pivot.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.ocl.pivot.ui/META-INF/MANIFEST.MF
@@ -5,7 +5,7 @@
 Bundle-Localization: plugin
 Bundle-SymbolicName: org.eclipse.ocl.pivot.ui;singleton:=true
 Bundle-Version: 1.0.100.qualifier
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.ocl.xtext.completeocl.ui;bundle-version="[1.0.0,2.0.0)",
  org.eclipse.ocl.xtext.oclstdlib.ui;bundle-version="[1.0.0,2.0.0)",
  org.eclipse.xtext.ui;bundle-version="[2.3.0,3.0.0)";visibility:=reexport,
diff --git a/plugins/org.eclipse.ocl.pivot.ui/build.properties b/plugins/org.eclipse.ocl.pivot.ui/build.properties
index 7492bdb..2a7e491 100644
--- a/plugins/org.eclipse.ocl.pivot.ui/build.properties
+++ b/plugins/org.eclipse.ocl.pivot.ui/build.properties
@@ -13,8 +13,6 @@
 bin.includes = META-INF/,\
                .,\
                about.html,\
-               build.properties,\
                plugin.properties,\
                plugin.xml
-additional.bundles = org.eclipse.ocl.jdt.annotation7
 src.includes = about.html
diff --git a/plugins/org.eclipse.ocl.pivot.uml/.classpath b/plugins/org.eclipse.ocl.pivot.uml/.classpath
index 649304e..8fd5918 100644
--- a/plugins/org.eclipse.ocl.pivot.uml/.classpath
+++ b/plugins/org.eclipse.ocl.pivot.uml/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="src" path="emf-gen"/>
diff --git a/plugins/org.eclipse.ocl.pivot.uml/META-INF/MANIFEST.MF b/plugins/org.eclipse.ocl.pivot.uml/META-INF/MANIFEST.MF
index 86f232d..27b97c1 100644
--- a/plugins/org.eclipse.ocl.pivot.uml/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.ocl.pivot.uml/META-INF/MANIFEST.MF
@@ -5,7 +5,7 @@
 Bundle-Localization: plugin
 Bundle-SymbolicName: org.eclipse.ocl.pivot.uml;singleton:=true
 Bundle-Version: 1.0.100.qualifier
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.emf.validation;bundle-version="[1.4.0,2.0.0)";resolution:=optional,
  org.eclipse.uml2.codegen.ecore;bundle-version="[1.8.0,3.0.0)",
diff --git a/plugins/org.eclipse.ocl.pivot.uml/build.properties b/plugins/org.eclipse.ocl.pivot.uml/build.properties
index 393858a..f3f7ce5 100644
--- a/plugins/org.eclipse.ocl.pivot.uml/build.properties
+++ b/plugins/org.eclipse.ocl.pivot.uml/build.properties
@@ -15,8 +15,6 @@
                .,\
                plugin.properties,\
                about.html,\
-               build.properties,\
                plugin.xml,\
                model/
-additional.bundles = org.eclipse.ocl.jdt.annotation7
 src.includes = about.html
diff --git a/plugins/org.eclipse.ocl.pivot.uml/src/org/eclipse/ocl/pivot/uml/internal/as2es/AS2UMLDeclarationVisitor.java b/plugins/org.eclipse.ocl.pivot.uml/src/org/eclipse/ocl/pivot/uml/internal/as2es/AS2UMLDeclarationVisitor.java
index 6bb934b..4eeffd4 100644
--- a/plugins/org.eclipse.ocl.pivot.uml/src/org/eclipse/ocl/pivot/uml/internal/as2es/AS2UMLDeclarationVisitor.java
+++ b/plugins/org.eclipse.ocl.pivot.uml/src/org/eclipse/ocl/pivot/uml/internal/as2es/AS2UMLDeclarationVisitor.java
@@ -49,7 +49,7 @@
 		super(context);
 	}
 
-	protected void copyClassifier(@NonNull org.eclipse.uml2.uml.Classifier umlClassifier, @NonNull org.eclipse.ocl.pivot.Class pivotType) {
+	protected void copyClassifier(@NonNull org.eclipse.uml2.uml.Classifier umlClassifier, org.eclipse.ocl.pivot.@NonNull Class pivotType) {
 		copyNamedElement(umlClassifier, pivotType);
 		TemplateSignature pivotTemplateSignature = pivotType.getOwnedSignature();
 		if (pivotTemplateSignature != null) {
@@ -153,7 +153,7 @@
 	}
 
 	@Override
-	public org.eclipse.uml2.uml.Classifier visitClass(@NonNull org.eclipse.ocl.pivot.Class pivotClass) {
+	public org.eclipse.uml2.uml.Classifier visitClass(org.eclipse.ocl.pivot.@NonNull Class pivotClass) {
 		if (pivotClass.getOwnedBindings().size() > 0) {
 			return null;
 		}
diff --git a/plugins/org.eclipse.ocl.pivot.uml/src/org/eclipse/ocl/pivot/uml/internal/es2as/ModelAnalysis.java b/plugins/org.eclipse.ocl.pivot.uml/src/org/eclipse/ocl/pivot/uml/internal/es2as/ModelAnalysis.java
index ebc6444..7634021 100644
--- a/plugins/org.eclipse.ocl.pivot.uml/src/org/eclipse/ocl/pivot/uml/internal/es2as/ModelAnalysis.java
+++ b/plugins/org.eclipse.ocl.pivot.uml/src/org/eclipse/ocl/pivot/uml/internal/es2as/ModelAnalysis.java
@@ -418,7 +418,7 @@
 		return stereotype2extension;
 	}
 
-	protected void printMetatypes2StereotypeExtensions(@NonNull org.eclipse.ocl.pivot.Package asPackage,
+	protected void printMetatypes2StereotypeExtensions(org.eclipse.ocl.pivot.@NonNull Package asPackage,
 			@NonNull Map<Type, Set<StereotypeExtender>> metatype2typeExtensions) {
 		if (UML2AS.TYPE_EXTENSIONS.isActive()) {
 			StringBuffer s = new StringBuffer();
diff --git a/plugins/org.eclipse.ocl.pivot.uml/src/org/eclipse/ocl/pivot/uml/internal/es2as/ProfileAnalysis.java b/plugins/org.eclipse.ocl.pivot.uml/src/org/eclipse/ocl/pivot/uml/internal/es2as/ProfileAnalysis.java
index ebec253..5c90d72 100644
--- a/plugins/org.eclipse.ocl.pivot.uml/src/org/eclipse/ocl/pivot/uml/internal/es2as/ProfileAnalysis.java
+++ b/plugins/org.eclipse.ocl.pivot.uml/src/org/eclipse/ocl/pivot/uml/internal/es2as/ProfileAnalysis.java
@@ -215,7 +215,7 @@
 		}
 		if (UML2AS.ADD_PROFILE_APPLICATION.isActive()) {
 			StringBuffer s = new StringBuffer();
-			for (@SuppressWarnings("null")@NonNull org.eclipse.ocl.pivot.Package asPackage : package2metatype2applicableStereotypes.keySet()) {
+			for (@SuppressWarnings("null")org.eclipse.ocl.pivot.@NonNull Package asPackage : package2metatype2applicableStereotypes.keySet()) {
 				s.append("\n\t" + EcoreUtils.qualifiedNameFor(asPackage) + " : " + asPackage.getNsURI());
 				Map<Type, Set<Stereotype>> metatype2applicableStereotypes = package2metatype2applicableStereotypes.get(asPackage);
 				for (Type metatype : metatype2applicableStereotypes.keySet()) {
@@ -281,7 +281,7 @@
 		}
 		if (ADD_PROFILE_APPLICATION.isActive()) {
 			StringBuffer s = new StringBuffer();
-			for (@SuppressWarnings("null")@NonNull org.eclipse.ocl.pivot.Package asPackage : package2allAppliedProfiles.keySet()) {
+			for (@SuppressWarnings("null")org.eclipse.ocl.pivot.@NonNull Package asPackage : package2allAppliedProfiles.keySet()) {
 				s.append("\n\t" + EcoreUtils.qualifiedNameFor(asPackage) + " : " + asPackage.getNsURI());
 				Set<Profile> asPackageProfiles = package2allAppliedProfiles.get(asPackage);
 				for (Profile asProfile : asPackageProfiles) {
diff --git a/plugins/org.eclipse.ocl.pivot.uml/src/org/eclipse/ocl/pivot/uml/internal/es2as/UML2AS.java b/plugins/org.eclipse.ocl.pivot.uml/src/org/eclipse/ocl/pivot/uml/internal/es2as/UML2AS.java
index db6b21c..4c41926 100644
--- a/plugins/org.eclipse.ocl.pivot.uml/src/org/eclipse/ocl/pivot/uml/internal/es2as/UML2AS.java
+++ b/plugins/org.eclipse.ocl.pivot.uml/src/org/eclipse/ocl/pivot/uml/internal/es2as/UML2AS.java
@@ -315,7 +315,7 @@
 		}
 
 		@Override
-		public void addProperty(@NonNull org.eclipse.ocl.pivot.Class asType, @NonNull Property asProperty) {
+		public void addProperty(org.eclipse.ocl.pivot.@NonNull Class asType, @NonNull Property asProperty) {
 			root.addProperty(asType, asProperty);
 		}
 
@@ -519,7 +519,7 @@
 		}
 
 		@Override
-		public void addProperty(@NonNull org.eclipse.ocl.pivot.Class asType, @NonNull Property asProperty) {
+		public void addProperty(org.eclipse.ocl.pivot.@NonNull Class asType, @NonNull Property asProperty) {
 			List<Property> asProperties = type2properties.get(asType);
 			if (asProperties == null) {
 				asProperties = new ArrayList<Property>();
@@ -968,7 +968,7 @@
 
 	public abstract void addProfileApplication(@NonNull ProfileApplication asProfileApplication) ;
 
-	public abstract void addProperty(@NonNull org.eclipse.ocl.pivot.Class asType, @NonNull Property asProperty);
+	public abstract void addProperty(org.eclipse.ocl.pivot.@NonNull Class asType, @NonNull Property asProperty);
 
 	public abstract void addStereotype(@NonNull Stereotype asStereotype);
 
diff --git a/plugins/org.eclipse.ocl.pivot.uml/src/org/eclipse/ocl/pivot/uml/internal/es2as/UML2ASDeclarationSwitch.java b/plugins/org.eclipse.ocl.pivot.uml/src/org/eclipse/ocl/pivot/uml/internal/es2as/UML2ASDeclarationSwitch.java
index 4485782..c72432d 100644
--- a/plugins/org.eclipse.ocl.pivot.uml/src/org/eclipse/ocl/pivot/uml/internal/es2as/UML2ASDeclarationSwitch.java
+++ b/plugins/org.eclipse.ocl.pivot.uml/src/org/eclipse/ocl/pivot/uml/internal/es2as/UML2ASDeclarationSwitch.java
@@ -581,7 +581,7 @@
 		}
 	}
 
-	protected void copyClassOrInterface(@NonNull org.eclipse.ocl.pivot.Class pivotElement, @NonNull org.eclipse.uml2.uml.Classifier umlClassifier) {
+	protected void copyClassOrInterface(org.eclipse.ocl.pivot.@NonNull Class pivotElement, @NonNull org.eclipse.uml2.uml.Classifier umlClassifier) {
 		copyClassifier(pivotElement, umlClassifier);
 		pivotElement.setIsAbstract(umlClassifier.isAbstract());			
 		String instanceClassName = null;
@@ -610,7 +610,7 @@
 		converter.queueUse(umlClassifier);				// For superclasses
 	}
 
-	protected void copyClass(@NonNull org.eclipse.ocl.pivot.Class pivotElement, @NonNull org.eclipse.uml2.uml.Class umlClass) {
+	protected void copyClass(org.eclipse.ocl.pivot.@NonNull Class pivotElement, @NonNull org.eclipse.uml2.uml.Class umlClass) {
 		pivotElement.setIsInterface(false);			
 		copyClassOrInterface(pivotElement, umlClass);
 /*		for (org.eclipse.uml2.uml.Classifier umlType : umlClass.getNestedClassifiers()) {
@@ -624,7 +624,7 @@
 		doSwitchAll(pivotElement.getOwnedBehaviors(), umlClass.getOwnedBehaviors(), null);
 	}
 
-	protected void copyClassifier(@NonNull org.eclipse.ocl.pivot.Class pivotElement, @NonNull org.eclipse.uml2.uml.Classifier umlClassifier) {
+	protected void copyClassifier(org.eclipse.ocl.pivot.@NonNull Class pivotElement, @NonNull org.eclipse.uml2.uml.Classifier umlClassifier) {
 		copyNamespace(pivotElement, umlClassifier);
 		copyTemplateSignature(pivotElement, umlClassifier.getOwnedTemplateSignature());
 	}
@@ -697,7 +697,7 @@
 		converter.queueUse(umlNamespace);				// Defer for constraints
 	}
 
-	protected void copyPackage(@NonNull org.eclipse.ocl.pivot.Package pivotElement, @NonNull org.eclipse.uml2.uml.Package umlPackage) {
+	protected void copyPackage(org.eclipse.ocl.pivot.@NonNull Package pivotElement, @NonNull org.eclipse.uml2.uml.Package umlPackage) {
 //		EAnnotation eAnnotation = umlPackage.getEAnnotation(EcorePackage.eNS_URI);
 //		List<EAnnotation> exclusions = eAnnotation == null ? Collections.<EAnnotation>emptyList() : Collections.singletonList(eAnnotation);
 		copyNamespace(pivotElement, umlPackage);
diff --git a/plugins/org.eclipse.ocl.pivot.uml/src/org/eclipse/ocl/pivot/uml/internal/es2as/UML2ASUtil.java b/plugins/org.eclipse.ocl.pivot.uml/src/org/eclipse/ocl/pivot/uml/internal/es2as/UML2ASUtil.java
index be5e394..943383f 100644
--- a/plugins/org.eclipse.ocl.pivot.uml/src/org/eclipse/ocl/pivot/uml/internal/es2as/UML2ASUtil.java
+++ b/plugins/org.eclipse.ocl.pivot.uml/src/org/eclipse/ocl/pivot/uml/internal/es2as/UML2ASUtil.java
@@ -76,7 +76,7 @@
 	/**
 	 * Return the metaType of umlElement using the UML meta namespace identifiable from stereotype applications.
 	 */
-	public static @Nullable org.eclipse.ocl.pivot.Class getMetaType(@NonNull EnvironmentFactoryInternal environmentFactory, @NonNull org.eclipse.uml2.uml.Element umlElement) {
+	public static org.eclipse.ocl.pivot.@Nullable Class getMetaType(@NonNull EnvironmentFactoryInternal environmentFactory, @NonNull org.eclipse.uml2.uml.Element umlElement) {
 		PivotMetamodelManager metamodelManager = environmentFactory.getMetamodelManager();
 		EClass umlEClass = umlElement.eClass();
 		for (org.eclipse.uml2.uml.Stereotype umlStereotype : umlElement.getApplicableStereotypes()) {
diff --git a/plugins/org.eclipse.ocl.pivot.uml/src/org/eclipse/ocl/pivot/uml/internal/utilities/UMLEcoreTechnology.java b/plugins/org.eclipse.ocl.pivot.uml/src/org/eclipse/ocl/pivot/uml/internal/utilities/UMLEcoreTechnology.java
index d21dcf2..cffac61 100644
--- a/plugins/org.eclipse.ocl.pivot.uml/src/org/eclipse/ocl/pivot/uml/internal/utilities/UMLEcoreTechnology.java
+++ b/plugins/org.eclipse.ocl.pivot.uml/src/org/eclipse/ocl/pivot/uml/internal/utilities/UMLEcoreTechnology.java
@@ -142,7 +142,7 @@
 	}
 
 	@Override
-	public @NonNull PackageId getMetapackageId(@NonNull EnvironmentFactoryInternal environmentFactory, @NonNull org.eclipse.ocl.pivot.Package asPackage) {
+	public @NonNull PackageId getMetapackageId(@NonNull EnvironmentFactoryInternal environmentFactory, org.eclipse.ocl.pivot.@NonNull Package asPackage) {
 		if (asPackage instanceof PivotObjectImpl) {
 			EObject eTarget = ((PivotObjectImpl)asPackage).getESObject();
 			if (eTarget != null) {
diff --git a/plugins/org.eclipse.ocl.pivot.uml/src/org/eclipse/ocl/pivot/uml/internal/utilities/UMLIdResolver.java b/plugins/org.eclipse.ocl.pivot.uml/src/org/eclipse/ocl/pivot/uml/internal/utilities/UMLIdResolver.java
index 644d318..db18a46 100644
--- a/plugins/org.eclipse.ocl.pivot.uml/src/org/eclipse/ocl/pivot/uml/internal/utilities/UMLIdResolver.java
+++ b/plugins/org.eclipse.ocl.pivot.uml/src/org/eclipse/ocl/pivot/uml/internal/utilities/UMLIdResolver.java
@@ -55,7 +55,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getDynamicTypeOf(@Nullable Object value) {
+	public org.eclipse.ocl.pivot.@NonNull Class getDynamicTypeOf(@Nullable Object value) {
 		if (value instanceof org.eclipse.uml2.uml.Element) {
 			org.eclipse.ocl.pivot.Class metaType = UML2ASUtil.getMetaType(metamodelManager.getEnvironmentFactory(), (org.eclipse.uml2.uml.Element)value);
 			if (metaType != null) {
@@ -76,7 +76,7 @@
 	}
 
 	@Override
-	protected @Nullable org.eclipse.ocl.pivot.Package getPivotlessEPackage(@NonNull EPackage ePackage) {
+	protected org.eclipse.ocl.pivot.@Nullable Package getPivotlessEPackage(@NonNull EPackage ePackage) {
 		org.eclipse.ocl.pivot.Package asPackage = null;
 		EObject eContainer = ePackage.eContainer();
 		if (eContainer instanceof EAnnotation) {
@@ -97,7 +97,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getStaticTypeOf(@Nullable Object value) {
+	public org.eclipse.ocl.pivot.@NonNull Class getStaticTypeOf(@Nullable Object value) {
 		if (value instanceof org.eclipse.uml2.uml.Element) {
 			try {				// FIXME Find a more efficient way to ensure Profiles are imported and applied
 				org.eclipse.uml2.uml.Element umlElement = (org.eclipse.uml2.uml.Element)value;
@@ -132,7 +132,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getType(@NonNull EClassifier eClassifier) {
+	public org.eclipse.ocl.pivot.@NonNull Class getType(@NonNull EClassifier eClassifier) {
 		EPackage ePackage = eClassifier.getEPackage();
 		if (ePackage == UMLPackage.eINSTANCE) {
 			// ?? getPivotOf to discover the pivoted type name, then getPivotType for the pivoted name
diff --git a/plugins/org.eclipse.ocl.pivot.uml/src/org/eclipse/ocl/pivot/uml/internal/validation/UMLOCLEValidator.java b/plugins/org.eclipse.ocl.pivot.uml/src/org/eclipse/ocl/pivot/uml/internal/validation/UMLOCLEValidator.java
index 01ba916..f3753bb 100644
--- a/plugins/org.eclipse.ocl.pivot.uml/src/org/eclipse/ocl/pivot/uml/internal/validation/UMLOCLEValidator.java
+++ b/plugins/org.eclipse.ocl.pivot.uml/src/org/eclipse/ocl/pivot/uml/internal/validation/UMLOCLEValidator.java
@@ -206,7 +206,7 @@
 	}
 
 	@Deprecated  // Obsolete use SuperCompleteClasses
-	protected static void gatherTypes(@NonNull Set<org.eclipse.ocl.pivot.Type> allTypes, @NonNull Set<org.eclipse.ocl.pivot.Constraint> allConstraints, @NonNull org.eclipse.ocl.pivot.Class newType) {
+	protected static void gatherTypes(@NonNull Set<org.eclipse.ocl.pivot.Type> allTypes, @NonNull Set<org.eclipse.ocl.pivot.Constraint> allConstraints, org.eclipse.ocl.pivot.@NonNull Class newType) {
 		if (allTypes.add(newType)) {
 			allConstraints.addAll(newType.getOwnedInvariants());
 			for (org.eclipse.ocl.pivot.Class superType : newType.getSuperClasses()) {
diff --git a/plugins/org.eclipse.ocl.pivot/.classpath b/plugins/org.eclipse.ocl.pivot/.classpath
index 9fe0b9f..e2cbb51 100644
--- a/plugins/org.eclipse.ocl.pivot/.classpath
+++ b/plugins/org.eclipse.ocl.pivot/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="emf-gen"/>
 	<classpathentry kind="src" path="src"/>
diff --git a/plugins/org.eclipse.ocl.pivot/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.ocl.pivot/.settings/org.eclipse.jdt.core.prefs
index c2987db..b074e4d 100644
--- a/plugins/org.eclipse.ocl.pivot/.settings/org.eclipse.jdt.core.prefs
+++ b/plugins/org.eclipse.ocl.pivot/.settings/org.eclipse.jdt.core.prefs
@@ -5,9 +5,9 @@
 org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
 org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.compliance=1.8
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
@@ -93,7 +93,7 @@
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
 org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.7
+org.eclipse.jdt.core.compiler.source=1.8
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=20
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
diff --git a/plugins/org.eclipse.ocl.pivot/META-INF/MANIFEST.MF b/plugins/org.eclipse.ocl.pivot/META-INF/MANIFEST.MF
index 8cb7f45..e647493 100644
--- a/plugins/org.eclipse.ocl.pivot/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.ocl.pivot/META-INF/MANIFEST.MF
@@ -9,8 +9,9 @@
  org.eclipse.emf.codegen.ecore;bundle-version="[2.7.0,3.0.0)",
  org.eclipse.emf.ecore.xmi;bundle-version="[2.7.0,3.0.0)";visibility:=reexport,
  org.eclipse.emf.edit;bundle-version="[2.7.0,3.0.0)";visibility:=reexport,
- org.eclipse.ocl.common;bundle-version="[1.3.0,2.0.0)";visibility:=reexport
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+ org.eclipse.ocl.common;bundle-version="[1.3.0,2.0.0)";visibility:=reexport,
+ org.eclipse.jdt.annotation;bundle-version="[2.0.0,3.0.0)";visibility:=reexport
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Export-Package: org.eclipse.ocl.pivot,
  org.eclipse.ocl.pivot.evaluation,
  org.eclipse.ocl.pivot.ids,
diff --git a/plugins/org.eclipse.ocl.pivot/build.properties b/plugins/org.eclipse.ocl.pivot/build.properties
index 02a8f0a..c2bb6d9 100644
--- a/plugins/org.eclipse.ocl.pivot/build.properties
+++ b/plugins/org.eclipse.ocl.pivot/build.properties
@@ -13,7 +13,6 @@
 bin.includes = .,\
                model/,\
                META-INF/,\
-               build.properties,\
                plugin.xml,\
                plugin.properties,\
                about.html,\
@@ -28,4 +27,4 @@
            emf-gen/
 output.. = bin/
 src.includes = about.html
-additional.bundles = org.eclipse.ocl.jdt.annotation7
+
diff --git a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/CollectionType.java b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/CollectionType.java
index 56271d5..0a3ed1d 100644
--- a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/CollectionType.java
+++ b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/CollectionType.java
@@ -142,7 +142,7 @@
 	void setLowerValue(@NonNull IntegerValue lower);
 	void setUpperValue(@NonNull UnlimitedNaturalValue upper);
 	
-	@NonNull org.eclipse.ocl.pivot.Class getContainerType();		// NB There is no ExecutorCollectionType
+	org.eclipse.ocl.pivot.@NonNull Class getContainerType();		// NB There is no ExecutorCollectionType
 	@NonNull IntegerValue getLowerValue();		
 	@Override
 	@NonNull CollectionTypeId getTypeId();
diff --git a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/CompleteClass.java b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/CompleteClass.java
index 0bf1b18..64ae103 100644
--- a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/CompleteClass.java
+++ b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/CompleteClass.java
@@ -82,12 +82,12 @@
 	boolean conformsTo(@NonNull Type elementType);
 	boolean conformsTo(@NonNull CompleteClass thatCompleteClass);
 	
-	@NonNull org.eclipse.ocl.pivot.Class getPrimaryClass();
+	org.eclipse.ocl.pivot.@NonNull Class getPrimaryClass();
 
 	@Nullable CollectionType findCollectionType(@NonNull CollectionTypeParameters<Type> typeParameters);
 	@Nullable MapType findMapType(@NonNull MapTypeParameters<Type, Type> typeParameters);
 	@NonNull CollectionType getCollectionType(@NonNull CollectionTypeParameters<Type> typeParameters);
-	@NonNull org.eclipse.ocl.pivot.Class getBehavioralClass();
+	org.eclipse.ocl.pivot.@NonNull Class getBehavioralClass();
 	@NonNull CompleteInheritance getCompleteInheritance();
 	@NonNull MapType getMapType(@NonNull MapTypeParameters<Type, Type> typeParameters);
 	@Nullable Operation getOperation(@NonNull OperationId operationId);
diff --git a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/CompleteEnvironment.java b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/CompleteEnvironment.java
index 1c9bb38..2721c18 100644
--- a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/CompleteEnvironment.java
+++ b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/CompleteEnvironment.java
@@ -105,18 +105,18 @@
 	/**
 	 * Return the specialized collection type for the containerType for elementType.
 	 */
-	@NonNull CollectionType getCollectionType(@NonNull org.eclipse.ocl.pivot.Class containerType, @NonNull Type elementType, boolean isNullFree, @Nullable IntegerValue lower, @Nullable UnlimitedNaturalValue upper);
+	@NonNull CollectionType getCollectionType(org.eclipse.ocl.pivot.@NonNull Class containerType, @NonNull Type elementType, boolean isNullFree, @Nullable IntegerValue lower, @Nullable UnlimitedNaturalValue upper);
 	/**
 	 * @deprecated add isNullFree argument
 	 */
 	@Deprecated
-	@NonNull CollectionType getCollectionType(@NonNull org.eclipse.ocl.pivot.Class containerType, @NonNull Type elementType, @Nullable IntegerValue lower, @Nullable UnlimitedNaturalValue upper);
+	@NonNull CollectionType getCollectionType(org.eclipse.ocl.pivot.@NonNull Class containerType, @NonNull Type elementType, @Nullable IntegerValue lower, @Nullable UnlimitedNaturalValue upper);
 
-	@NonNull MapType getMapType(@NonNull org.eclipse.ocl.pivot.Class containerType, @NonNull Type keyType, @NonNull Type valueType);
+	@NonNull MapType getMapType(org.eclipse.ocl.pivot.@NonNull Class containerType, @NonNull Type keyType, @NonNull Type valueType);
 
-	org.eclipse.ocl.pivot.Package getNestedPackage(@NonNull org.eclipse.ocl.pivot.Package parentPackage, @NonNull String name);
+	org.eclipse.ocl.pivot.Package getNestedPackage(org.eclipse.ocl.pivot.@NonNull Package parentPackage, @NonNull String name);
 	
-    Type getNestedType(@NonNull org.eclipse.ocl.pivot.Package parentPackage, @NonNull String name);
+    Type getNestedType(org.eclipse.ocl.pivot.@NonNull Package parentPackage, @NonNull String name);
 
 	/**
 	 * Return the instance of the OrderedSet metatype whose elements are of elementType.
diff --git a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/CompleteModel.java b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/CompleteModel.java
index db24785..b59fb75 100644
--- a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/CompleteModel.java
+++ b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/CompleteModel.java
@@ -138,9 +138,9 @@
 //	@NonNull <T extends CollectionType> T getCollectionType(@NonNull T containerType, @NonNull Type elementType, @Nullable IntegerValue lower, @Nullable UnlimitedNaturalValue upper);
 	@NonNull CompleteClass getCompleteClass(@NonNull Type partialClass);
 	@NonNull CompleteEnvironment getCompleteEnvironment();
-	@NonNull CompletePackage getCompletePackage(@NonNull org.eclipse.ocl.pivot.Package asPackage);
+	@NonNull CompletePackage getCompletePackage(org.eclipse.ocl.pivot.@NonNull Package asPackage);
 	@Nullable CompletePackage getCompletePackageByURI(@NonNull String packageURI);
 	@NonNull Iterable<? extends CompletePackage> getAllCompletePackagesWithUris();
 	@NonNull LambdaType getLambdaType(@NonNull String typeName, @NonNull Type contextType, @NonNull List<? extends Type> parameterTypes, @NonNull Type resultType);
-	@Nullable org.eclipse.ocl.pivot.Package getRootPackage(@NonNull String completeURIorName);
+	org.eclipse.ocl.pivot.@Nullable Package getRootPackage(@NonNull String completeURIorName);
 } // CompleteModel
diff --git a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/CompletePackage.java b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/CompletePackage.java
index eb44954..cb5f038 100644
--- a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/CompletePackage.java
+++ b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/CompletePackage.java
@@ -122,7 +122,7 @@
 	 */
 	CompleteClass getOwnedCompleteClass(String name);
 
-	@NonNull CompleteClass getCompleteClass(@NonNull org.eclipse.ocl.pivot.Class pivotType);
+	@NonNull CompleteClass getCompleteClass(org.eclipse.ocl.pivot.@NonNull Class pivotType);
 
 
 	org.eclipse.ocl.pivot.Package getPrimaryPackage();
diff --git a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/Package.java b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/Package.java
index f725ab3..da318ea 100644
--- a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/Package.java
+++ b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/Package.java
@@ -211,5 +211,5 @@
 
 	@Nullable EPackage getEPackage();
 	@NonNull PackageId getPackageId();
-	@Nullable org.eclipse.ocl.pivot.Class getOwnedClass(String className);
+	org.eclipse.ocl.pivot.@Nullable Class getOwnedClass(String className);
 } // Package
diff --git a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/PivotTables.java b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/PivotTables.java
index 6f95e15..72f02d7 100644
--- a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/PivotTables.java
+++ b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/PivotTables.java
@@ -2638,7 +2638,7 @@
 			Fragments._Annotation__NamedElement /* 4 */,
 			Fragments._Annotation__Annotation /* 5 */
 		};
-		private static final @NonNull int[] __Annotation = { 1,1,2,1,1,1 };
+		private static final int[] __Annotation = { 1,1,2,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _AnyType =
 		{
@@ -2655,7 +2655,7 @@
 			Fragments._AnyType__Class /* 6 */,
 			Fragments._AnyType__AnyType /* 7 */
 		};
-		private static final @NonNull int[] __AnyType = { 1,1,3,1,2,2,1,1 };
+		private static final int[] __AnyType = { 1,1,3,1,2,2,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _AssociationClass =
 		{
@@ -2672,7 +2672,7 @@
 			Fragments._AssociationClass__Class /* 6 */,
 			Fragments._AssociationClass__AssociationClass /* 7 */
 		};
-		private static final @NonNull int[] __AssociationClass = { 1,1,3,1,2,2,1,1 };
+		private static final int[] __AssociationClass = { 1,1,3,1,2,2,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _AssociationClassCallExp =
 		{
@@ -2689,7 +2689,7 @@
 			Fragments._AssociationClassCallExp__NavigationCallExp /* 9 */,
 			Fragments._AssociationClassCallExp__AssociationClassCallExp /* 10 */
 		};
-		private static final @NonNull int[] __AssociationClassCallExp = { 1,1,2,1,1,1,1,1,1,1,1 };
+		private static final int[] __AssociationClassCallExp = { 1,1,2,1,1,1,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _AssociativityKind =
 		{
@@ -2708,7 +2708,7 @@
 			Fragments._AssociativityKind__Enumeration /* 8 */,
 			Fragments._AssociativityKind__AssociativityKind /* 9 */
 		};
-		private static final @NonNull int[] __AssociativityKind = { 1,1,3,1,2,2,1,1,1,1 };
+		private static final int[] __AssociativityKind = { 1,1,3,1,2,2,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _BagType =
 		{
@@ -2727,7 +2727,7 @@
 			Fragments._BagType__CollectionType /* 8 */,
 			Fragments._BagType__BagType /* 9 */
 		};
-		private static final @NonNull int[] __BagType = { 1,1,3,1,2,2,1,1,1,1 };
+		private static final int[] __BagType = { 1,1,3,1,2,2,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Behavior =
 		{
@@ -2744,7 +2744,7 @@
 			Fragments._Behavior__Class /* 6 */,
 			Fragments._Behavior__Behavior /* 7 */
 		};
-		private static final @NonNull int[] __Behavior = { 1,1,3,1,2,2,1,1 };
+		private static final int[] __Behavior = { 1,1,3,1,2,2,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _BooleanLiteralExp =
 		{
@@ -2760,7 +2760,7 @@
 			Fragments._BooleanLiteralExp__PrimitiveLiteralExp /* 8 */,
 			Fragments._BooleanLiteralExp__BooleanLiteralExp /* 9 */
 		};
-		private static final @NonNull int[] __BooleanLiteralExp = { 1,1,2,1,1,1,1,1,1,1 };
+		private static final int[] __BooleanLiteralExp = { 1,1,2,1,1,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _CallExp =
 		{
@@ -2774,7 +2774,7 @@
 			Fragments._CallExp__OCLExpression /* 6 */,
 			Fragments._CallExp__CallExp /* 7 */
 		};
-		private static final @NonNull int[] __CallExp = { 1,1,2,1,1,1,1,1 };
+		private static final int[] __CallExp = { 1,1,2,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _CallOperationAction =
 		{
@@ -2786,7 +2786,7 @@
 			Fragments._CallOperationAction__NamedElement /* 4 */,
 			Fragments._CallOperationAction__CallOperationAction /* 5 */
 		};
-		private static final @NonNull int[] __CallOperationAction = { 1,1,2,1,1,1 };
+		private static final int[] __CallOperationAction = { 1,1,2,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Class =
 		{
@@ -2802,7 +2802,7 @@
 			Fragments._Class__Type /* 5 */,
 			Fragments._Class__Class /* 6 */
 		};
-		private static final @NonNull int[] __Class = { 1,1,3,1,2,2,1 };
+		private static final int[] __Class = { 1,1,3,1,2,2,1 };
 
 		private static final @NonNull ExecutorFragment[] _CollectionItem =
 		{
@@ -2816,7 +2816,7 @@
 			Fragments._CollectionItem__CollectionLiteralPart /* 6 */,
 			Fragments._CollectionItem__CollectionItem /* 7 */
 		};
-		private static final @NonNull int[] __CollectionItem = { 1,1,2,1,1,1,1,1 };
+		private static final int[] __CollectionItem = { 1,1,2,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _CollectionKind =
 		{
@@ -2835,7 +2835,7 @@
 			Fragments._CollectionKind__Enumeration /* 8 */,
 			Fragments._CollectionKind__CollectionKind /* 9 */
 		};
-		private static final @NonNull int[] __CollectionKind = { 1,1,3,1,2,2,1,1,1,1 };
+		private static final int[] __CollectionKind = { 1,1,3,1,2,2,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _CollectionLiteralExp =
 		{
@@ -2850,7 +2850,7 @@
 			Fragments._CollectionLiteralExp__LiteralExp /* 7 */,
 			Fragments._CollectionLiteralExp__CollectionLiteralExp /* 8 */
 		};
-		private static final @NonNull int[] __CollectionLiteralExp = { 1,1,2,1,1,1,1,1,1 };
+		private static final int[] __CollectionLiteralExp = { 1,1,2,1,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _CollectionLiteralPart =
 		{
@@ -2863,7 +2863,7 @@
 			Fragments._CollectionLiteralPart__TypedElement /* 5 */,
 			Fragments._CollectionLiteralPart__CollectionLiteralPart /* 6 */
 		};
-		private static final @NonNull int[] __CollectionLiteralPart = { 1,1,2,1,1,1,1 };
+		private static final int[] __CollectionLiteralPart = { 1,1,2,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _CollectionRange =
 		{
@@ -2877,7 +2877,7 @@
 			Fragments._CollectionRange__CollectionLiteralPart /* 6 */,
 			Fragments._CollectionRange__CollectionRange /* 7 */
 		};
-		private static final @NonNull int[] __CollectionRange = { 1,1,2,1,1,1,1,1 };
+		private static final int[] __CollectionRange = { 1,1,2,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _CollectionType =
 		{
@@ -2895,7 +2895,7 @@
 			Fragments._CollectionType__DataType /* 7 */,
 			Fragments._CollectionType__CollectionType /* 8 */
 		};
-		private static final @NonNull int[] __CollectionType = { 1,1,3,1,2,2,1,1,1 };
+		private static final int[] __CollectionType = { 1,1,3,1,2,2,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Comment =
 		{
@@ -2905,7 +2905,7 @@
 			Fragments._Comment__Element /* 3 */,
 			Fragments._Comment__Comment /* 4 */
 		};
-		private static final @NonNull int[] __Comment = { 1,1,1,1,1 };
+		private static final int[] __Comment = { 1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _CompleteClass =
 		{
@@ -2917,7 +2917,7 @@
 			Fragments._CompleteClass__NamedElement /* 4 */,
 			Fragments._CompleteClass__CompleteClass /* 5 */
 		};
-		private static final @NonNull int[] __CompleteClass = { 1,1,2,1,1,1 };
+		private static final int[] __CompleteClass = { 1,1,2,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _CompleteEnvironment =
 		{
@@ -2927,7 +2927,7 @@
 			Fragments._CompleteEnvironment__Element /* 3 */,
 			Fragments._CompleteEnvironment__CompleteEnvironment /* 4 */
 		};
-		private static final @NonNull int[] __CompleteEnvironment = { 1,1,1,1,1 };
+		private static final int[] __CompleteEnvironment = { 1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _CompleteModel =
 		{
@@ -2939,7 +2939,7 @@
 			Fragments._CompleteModel__NamedElement /* 4 */,
 			Fragments._CompleteModel__CompleteModel /* 5 */
 		};
-		private static final @NonNull int[] __CompleteModel = { 1,1,2,1,1,1 };
+		private static final int[] __CompleteModel = { 1,1,2,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _CompletePackage =
 		{
@@ -2951,7 +2951,7 @@
 			Fragments._CompletePackage__NamedElement /* 4 */,
 			Fragments._CompletePackage__CompletePackage /* 5 */
 		};
-		private static final @NonNull int[] __CompletePackage = { 1,1,2,1,1,1 };
+		private static final int[] __CompletePackage = { 1,1,2,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _ConnectionPointReference =
 		{
@@ -2964,7 +2964,7 @@
 			Fragments._ConnectionPointReference__Vertex /* 5 */,
 			Fragments._ConnectionPointReference__ConnectionPointReference /* 6 */
 		};
-		private static final @NonNull int[] __ConnectionPointReference = { 1,1,2,1,1,1,1 };
+		private static final int[] __ConnectionPointReference = { 1,1,2,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Constraint =
 		{
@@ -2976,7 +2976,7 @@
 			Fragments._Constraint__NamedElement /* 4 */,
 			Fragments._Constraint__Constraint /* 5 */
 		};
-		private static final @NonNull int[] __Constraint = { 1,1,2,1,1,1 };
+		private static final int[] __Constraint = { 1,1,2,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _DataType =
 		{
@@ -2993,7 +2993,7 @@
 			Fragments._DataType__Class /* 6 */,
 			Fragments._DataType__DataType /* 7 */
 		};
-		private static final @NonNull int[] __DataType = { 1,1,3,1,2,2,1,1 };
+		private static final int[] __DataType = { 1,1,3,1,2,2,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Detail =
 		{
@@ -3005,7 +3005,7 @@
 			Fragments._Detail__NamedElement /* 4 */,
 			Fragments._Detail__Detail /* 5 */
 		};
-		private static final @NonNull int[] __Detail = { 1,1,2,1,1,1 };
+		private static final int[] __Detail = { 1,1,2,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _DynamicBehavior =
 		{
@@ -3025,7 +3025,7 @@
 			Fragments._DynamicBehavior__DynamicType /* 7 */,
 			Fragments._DynamicBehavior__DynamicBehavior /* 8 */
 		};
-		private static final @NonNull int[] __DynamicBehavior = { 1,1,3,1,3,2,1,2,1 };
+		private static final int[] __DynamicBehavior = { 1,1,3,1,3,2,1,2,1 };
 
 		private static final @NonNull ExecutorFragment[] _DynamicElement =
 		{
@@ -3035,7 +3035,7 @@
 			Fragments._DynamicElement__Element /* 3 */,
 			Fragments._DynamicElement__DynamicElement /* 4 */
 		};
-		private static final @NonNull int[] __DynamicElement = { 1,1,1,1,1 };
+		private static final int[] __DynamicElement = { 1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _DynamicProperty =
 		{
@@ -3045,7 +3045,7 @@
 			Fragments._DynamicProperty__Element /* 3 */,
 			Fragments._DynamicProperty__DynamicProperty /* 4 */
 		};
-		private static final @NonNull int[] __DynamicProperty = { 1,1,1,1,1 };
+		private static final int[] __DynamicProperty = { 1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _DynamicType =
 		{
@@ -3063,7 +3063,7 @@
 			Fragments._DynamicType__Class /* 6 */,
 			Fragments._DynamicType__DynamicType /* 7 */
 		};
-		private static final @NonNull int[] __DynamicType = { 1,1,3,1,3,2,1,1 };
+		private static final int[] __DynamicType = { 1,1,3,1,3,2,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _DynamicValueSpecification =
 		{
@@ -3077,7 +3077,7 @@
 			Fragments._DynamicValueSpecification__ValueSpecification /* 6 */,
 			Fragments._DynamicValueSpecification__DynamicValueSpecification /* 7 */
 		};
-		private static final @NonNull int[] __DynamicValueSpecification = { 1,1,2,1,1,1,1,1 };
+		private static final int[] __DynamicValueSpecification = { 1,1,2,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Element =
 		{
@@ -3086,7 +3086,7 @@
 			Fragments._Element__Visitable /* 2 */,
 			Fragments._Element__Element /* 3 */
 		};
-		private static final @NonNull int[] __Element = { 1,1,1,1 };
+		private static final int[] __Element = { 1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _ElementExtension =
 		{
@@ -3103,7 +3103,7 @@
 			Fragments._ElementExtension__Class /* 6 */,
 			Fragments._ElementExtension__ElementExtension /* 7 */
 		};
-		private static final @NonNull int[] __ElementExtension = { 1,1,3,1,2,2,1,1 };
+		private static final int[] __ElementExtension = { 1,1,3,1,2,2,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _EnumLiteralExp =
 		{
@@ -3118,7 +3118,7 @@
 			Fragments._EnumLiteralExp__LiteralExp /* 7 */,
 			Fragments._EnumLiteralExp__EnumLiteralExp /* 8 */
 		};
-		private static final @NonNull int[] __EnumLiteralExp = { 1,1,2,1,1,1,1,1,1 };
+		private static final int[] __EnumLiteralExp = { 1,1,2,1,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Enumeration =
 		{
@@ -3136,7 +3136,7 @@
 			Fragments._Enumeration__DataType /* 7 */,
 			Fragments._Enumeration__Enumeration /* 8 */
 		};
-		private static final @NonNull int[] __Enumeration = { 1,1,3,1,2,2,1,1,1 };
+		private static final int[] __Enumeration = { 1,1,3,1,2,2,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _EnumerationLiteral =
 		{
@@ -3149,7 +3149,7 @@
 			Fragments._EnumerationLiteral__InstanceSpecification /* 5 */,
 			Fragments._EnumerationLiteral__EnumerationLiteral /* 6 */
 		};
-		private static final @NonNull int[] __EnumerationLiteral = { 1,1,2,1,1,1,1 };
+		private static final int[] __EnumerationLiteral = { 1,1,2,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _ExpressionInOCL =
 		{
@@ -3164,7 +3164,7 @@
 			Fragments._ExpressionInOCL__LanguageExpression /* 7 */,
 			Fragments._ExpressionInOCL__ExpressionInOCL /* 8 */
 		};
-		private static final @NonNull int[] __ExpressionInOCL = { 1,1,2,1,1,1,1,1,1 };
+		private static final int[] __ExpressionInOCL = { 1,1,2,1,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Feature =
 		{
@@ -3177,7 +3177,7 @@
 			Fragments._Feature__TypedElement /* 5 */,
 			Fragments._Feature__Feature /* 6 */
 		};
-		private static final @NonNull int[] __Feature = { 1,1,2,1,1,1,1 };
+		private static final int[] __Feature = { 1,1,2,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _FeatureCallExp =
 		{
@@ -3192,7 +3192,7 @@
 			Fragments._FeatureCallExp__CallExp /* 7 */,
 			Fragments._FeatureCallExp__FeatureCallExp /* 8 */
 		};
-		private static final @NonNull int[] __FeatureCallExp = { 1,1,2,1,1,1,1,1,1 };
+		private static final int[] __FeatureCallExp = { 1,1,2,1,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _FinalState =
 		{
@@ -3208,7 +3208,7 @@
 			Fragments._FinalState__State /* 6 */,
 			Fragments._FinalState__FinalState /* 7 */
 		};
-		private static final @NonNull int[] __FinalState = { 1,2,2,1,1,2,1,1 };
+		private static final int[] __FinalState = { 1,2,2,1,1,2,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _IfExp =
 		{
@@ -3222,7 +3222,7 @@
 			Fragments._IfExp__OCLExpression /* 6 */,
 			Fragments._IfExp__IfExp /* 7 */
 		};
-		private static final @NonNull int[] __IfExp = { 1,1,2,1,1,1,1,1 };
+		private static final int[] __IfExp = { 1,1,2,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Import =
 		{
@@ -3234,7 +3234,7 @@
 			Fragments._Import__NamedElement /* 4 */,
 			Fragments._Import__Import /* 5 */
 		};
-		private static final @NonNull int[] __Import = { 1,1,2,1,1,1 };
+		private static final int[] __Import = { 1,1,2,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _InstanceSpecification =
 		{
@@ -3246,7 +3246,7 @@
 			Fragments._InstanceSpecification__NamedElement /* 4 */,
 			Fragments._InstanceSpecification__InstanceSpecification /* 5 */
 		};
-		private static final @NonNull int[] __InstanceSpecification = { 1,1,2,1,1,1 };
+		private static final int[] __InstanceSpecification = { 1,1,2,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _IntegerLiteralExp =
 		{
@@ -3263,7 +3263,7 @@
 			Fragments._IntegerLiteralExp__NumericLiteralExp /* 9 */,
 			Fragments._IntegerLiteralExp__IntegerLiteralExp /* 10 */
 		};
-		private static final @NonNull int[] __IntegerLiteralExp = { 1,1,2,1,1,1,1,1,1,1,1 };
+		private static final int[] __IntegerLiteralExp = { 1,1,2,1,1,1,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _InvalidLiteralExp =
 		{
@@ -3278,7 +3278,7 @@
 			Fragments._InvalidLiteralExp__LiteralExp /* 7 */,
 			Fragments._InvalidLiteralExp__InvalidLiteralExp /* 8 */
 		};
-		private static final @NonNull int[] __InvalidLiteralExp = { 1,1,2,1,1,1,1,1,1 };
+		private static final int[] __InvalidLiteralExp = { 1,1,2,1,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _InvalidType =
 		{
@@ -3295,7 +3295,7 @@
 			Fragments._InvalidType__Class /* 6 */,
 			Fragments._InvalidType__InvalidType /* 7 */
 		};
-		private static final @NonNull int[] __InvalidType = { 1,1,3,1,2,2,1,1 };
+		private static final int[] __InvalidType = { 1,1,3,1,2,2,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _IterateExp =
 		{
@@ -3312,7 +3312,7 @@
 			Fragments._IterateExp__LoopExp /* 8 */,
 			Fragments._IterateExp__IterateExp /* 9 */
 		};
-		private static final @NonNull int[] __IterateExp = { 1,1,3,1,1,1,1,1,1,1 };
+		private static final int[] __IterateExp = { 1,1,3,1,1,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Iteration =
 		{
@@ -3329,7 +3329,7 @@
 			Fragments._Iteration__Operation /* 7 */,
 			Fragments._Iteration__Iteration /* 8 */
 		};
-		private static final @NonNull int[] __Iteration = { 1,1,2,1,2,2,1,1,1 };
+		private static final int[] __Iteration = { 1,1,2,1,2,2,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _IteratorExp =
 		{
@@ -3346,7 +3346,7 @@
 			Fragments._IteratorExp__LoopExp /* 8 */,
 			Fragments._IteratorExp__IteratorExp /* 9 */
 		};
-		private static final @NonNull int[] __IteratorExp = { 1,1,3,1,1,1,1,1,1,1 };
+		private static final int[] __IteratorExp = { 1,1,3,1,1,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _LambdaType =
 		{
@@ -3364,7 +3364,7 @@
 			Fragments._LambdaType__DataType /* 7 */,
 			Fragments._LambdaType__LambdaType /* 8 */
 		};
-		private static final @NonNull int[] __LambdaType = { 1,1,3,1,2,2,1,1,1 };
+		private static final int[] __LambdaType = { 1,1,3,1,2,2,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _LanguageExpression =
 		{
@@ -3378,7 +3378,7 @@
 			Fragments._LanguageExpression__ValueSpecification /* 6 */,
 			Fragments._LanguageExpression__LanguageExpression /* 7 */
 		};
-		private static final @NonNull int[] __LanguageExpression = { 1,1,2,1,1,1,1,1 };
+		private static final int[] __LanguageExpression = { 1,1,2,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _LetExp =
 		{
@@ -3392,7 +3392,7 @@
 			Fragments._LetExp__OCLExpression /* 6 */,
 			Fragments._LetExp__LetExp /* 7 */
 		};
-		private static final @NonNull int[] __LetExp = { 1,1,2,1,1,1,1,1 };
+		private static final int[] __LetExp = { 1,1,2,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Library =
 		{
@@ -3406,14 +3406,14 @@
 			Fragments._Library__Package /* 6 */,
 			Fragments._Library__Library /* 7 */
 		};
-		private static final @NonNull int[] __Library = { 1,1,2,1,1,1,1,1 };
+		private static final int[] __Library = { 1,1,2,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _LibraryFeature =
 		{
 			Fragments._LibraryFeature__OclAny /* 0 */,
 			Fragments._LibraryFeature__LibraryFeature /* 1 */
 		};
-		private static final @NonNull int[] __LibraryFeature = { 1,1 };
+		private static final int[] __LibraryFeature = { 1,1 };
 
 		private static final @NonNull ExecutorFragment[] _LiteralExp =
 		{
@@ -3427,7 +3427,7 @@
 			Fragments._LiteralExp__OCLExpression /* 6 */,
 			Fragments._LiteralExp__LiteralExp /* 7 */
 		};
-		private static final @NonNull int[] __LiteralExp = { 1,1,2,1,1,1,1,1 };
+		private static final int[] __LiteralExp = { 1,1,2,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _LoopExp =
 		{
@@ -3442,7 +3442,7 @@
 			Fragments._LoopExp__CallExp /* 7 */,
 			Fragments._LoopExp__LoopExp /* 8 */
 		};
-		private static final @NonNull int[] __LoopExp = { 1,1,2,1,1,1,1,1,1 };
+		private static final int[] __LoopExp = { 1,1,2,1,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _MapLiteralExp =
 		{
@@ -3457,7 +3457,7 @@
 			Fragments._MapLiteralExp__LiteralExp /* 7 */,
 			Fragments._MapLiteralExp__MapLiteralExp /* 8 */
 		};
-		private static final @NonNull int[] __MapLiteralExp = { 1,1,2,1,1,1,1,1,1 };
+		private static final int[] __MapLiteralExp = { 1,1,2,1,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _MapLiteralPart =
 		{
@@ -3467,7 +3467,7 @@
 			Fragments._MapLiteralPart__Element /* 3 */,
 			Fragments._MapLiteralPart__MapLiteralPart /* 4 */
 		};
-		private static final @NonNull int[] __MapLiteralPart = { 1,1,1,1,1 };
+		private static final int[] __MapLiteralPart = { 1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _MapType =
 		{
@@ -3485,7 +3485,7 @@
 			Fragments._MapType__DataType /* 7 */,
 			Fragments._MapType__MapType /* 8 */
 		};
-		private static final @NonNull int[] __MapType = { 1,1,3,1,2,2,1,1,1 };
+		private static final int[] __MapType = { 1,1,3,1,2,2,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _MessageExp =
 		{
@@ -3499,7 +3499,7 @@
 			Fragments._MessageExp__OCLExpression /* 6 */,
 			Fragments._MessageExp__MessageExp /* 7 */
 		};
-		private static final @NonNull int[] __MessageExp = { 1,1,2,1,1,1,1,1 };
+		private static final int[] __MessageExp = { 1,1,2,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _MessageType =
 		{
@@ -3516,7 +3516,7 @@
 			Fragments._MessageType__Class /* 6 */,
 			Fragments._MessageType__MessageType /* 7 */
 		};
-		private static final @NonNull int[] __MessageType = { 1,1,3,1,2,2,1,1 };
+		private static final int[] __MessageType = { 1,1,3,1,2,2,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Model =
 		{
@@ -3529,7 +3529,7 @@
 			Fragments._Model__Namespace /* 5 */,
 			Fragments._Model__Model /* 6 */
 		};
-		private static final @NonNull int[] __Model = { 1,1,2,1,1,1,1 };
+		private static final int[] __Model = { 1,1,2,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _MorePivotable =
 		{
@@ -3537,7 +3537,7 @@
 			Fragments._MorePivotable__OclElement /* 1 */,
 			Fragments._MorePivotable__MorePivotable /* 2 */
 		};
-		private static final @NonNull int[] __MorePivotable = { 1,1,1 };
+		private static final int[] __MorePivotable = { 1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Nameable =
 		{
@@ -3545,7 +3545,7 @@
 			Fragments._Nameable__OclElement /* 1 */,
 			Fragments._Nameable__Nameable /* 2 */
 		};
-		private static final @NonNull int[] __Nameable = { 1,1,1 };
+		private static final int[] __Nameable = { 1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _NamedElement =
 		{
@@ -3556,7 +3556,7 @@
 			Fragments._NamedElement__Element /* 3 */,
 			Fragments._NamedElement__NamedElement /* 4 */
 		};
-		private static final @NonNull int[] __NamedElement = { 1,1,2,1,1 };
+		private static final int[] __NamedElement = { 1,1,2,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Namespace =
 		{
@@ -3568,7 +3568,7 @@
 			Fragments._Namespace__NamedElement /* 4 */,
 			Fragments._Namespace__Namespace /* 5 */
 		};
-		private static final @NonNull int[] __Namespace = { 1,1,2,1,1,1 };
+		private static final int[] __Namespace = { 1,1,2,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _NavigationCallExp =
 		{
@@ -3584,7 +3584,7 @@
 			Fragments._NavigationCallExp__FeatureCallExp /* 8 */,
 			Fragments._NavigationCallExp__NavigationCallExp /* 9 */
 		};
-		private static final @NonNull int[] __NavigationCallExp = { 1,1,2,1,1,1,1,1,1,1 };
+		private static final int[] __NavigationCallExp = { 1,1,2,1,1,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _NullLiteralExp =
 		{
@@ -3600,7 +3600,7 @@
 			Fragments._NullLiteralExp__PrimitiveLiteralExp /* 8 */,
 			Fragments._NullLiteralExp__NullLiteralExp /* 9 */
 		};
-		private static final @NonNull int[] __NullLiteralExp = { 1,1,2,1,1,1,1,1,1,1 };
+		private static final int[] __NullLiteralExp = { 1,1,2,1,1,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _NumericLiteralExp =
 		{
@@ -3616,7 +3616,7 @@
 			Fragments._NumericLiteralExp__PrimitiveLiteralExp /* 8 */,
 			Fragments._NumericLiteralExp__NumericLiteralExp /* 9 */
 		};
-		private static final @NonNull int[] __NumericLiteralExp = { 1,1,2,1,1,1,1,1,1,1 };
+		private static final int[] __NumericLiteralExp = { 1,1,2,1,1,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _OCLExpression =
 		{
@@ -3629,14 +3629,14 @@
 			Fragments._OCLExpression__TypedElement /* 5 */,
 			Fragments._OCLExpression__OCLExpression /* 6 */
 		};
-		private static final @NonNull int[] __OCLExpression = { 1,1,2,1,1,1,1 };
+		private static final int[] __OCLExpression = { 1,1,2,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Object =
 		{
 			Fragments._Object__OclAny /* 0 */,
 			Fragments._Object__Object /* 1 */
 		};
-		private static final @NonNull int[] __Object = { 1,1 };
+		private static final int[] __Object = { 1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Operation =
 		{
@@ -3652,7 +3652,7 @@
 			Fragments._Operation__Feature /* 6 */,
 			Fragments._Operation__Operation /* 7 */
 		};
-		private static final @NonNull int[] __Operation = { 1,1,2,1,2,2,1,1 };
+		private static final int[] __Operation = { 1,1,2,1,2,2,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _OperationCallExp =
 		{
@@ -3669,7 +3669,7 @@
 			Fragments._OperationCallExp__FeatureCallExp /* 8 */,
 			Fragments._OperationCallExp__OperationCallExp /* 9 */
 		};
-		private static final @NonNull int[] __OperationCallExp = { 1,1,3,1,1,1,1,1,1,1 };
+		private static final int[] __OperationCallExp = { 1,1,3,1,1,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _OppositePropertyCallExp =
 		{
@@ -3686,7 +3686,7 @@
 			Fragments._OppositePropertyCallExp__NavigationCallExp /* 9 */,
 			Fragments._OppositePropertyCallExp__OppositePropertyCallExp /* 10 */
 		};
-		private static final @NonNull int[] __OppositePropertyCallExp = { 1,1,2,1,1,1,1,1,1,1,1 };
+		private static final int[] __OppositePropertyCallExp = { 1,1,2,1,1,1,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _OrderedSetType =
 		{
@@ -3705,7 +3705,7 @@
 			Fragments._OrderedSetType__CollectionType /* 8 */,
 			Fragments._OrderedSetType__OrderedSetType /* 9 */
 		};
-		private static final @NonNull int[] __OrderedSetType = { 1,1,3,1,2,2,1,1,1,1 };
+		private static final int[] __OrderedSetType = { 1,1,3,1,2,2,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _OrphanCompletePackage =
 		{
@@ -3718,7 +3718,7 @@
 			Fragments._OrphanCompletePackage__CompletePackage /* 5 */,
 			Fragments._OrphanCompletePackage__OrphanCompletePackage /* 6 */
 		};
-		private static final @NonNull int[] __OrphanCompletePackage = { 1,1,2,1,1,1,1 };
+		private static final int[] __OrphanCompletePackage = { 1,1,2,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Package =
 		{
@@ -3731,7 +3731,7 @@
 			Fragments._Package__Namespace /* 5 */,
 			Fragments._Package__Package /* 6 */
 		};
-		private static final @NonNull int[] __Package = { 1,1,2,1,1,1,1 };
+		private static final int[] __Package = { 1,1,2,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Parameter =
 		{
@@ -3745,7 +3745,7 @@
 			Fragments._Parameter__VariableDeclaration /* 6 */,
 			Fragments._Parameter__Parameter /* 7 */
 		};
-		private static final @NonNull int[] __Parameter = { 1,1,2,1,1,1,1,1 };
+		private static final int[] __Parameter = { 1,1,2,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Pivotable =
 		{
@@ -3753,7 +3753,7 @@
 			Fragments._Pivotable__OclElement /* 1 */,
 			Fragments._Pivotable__Pivotable /* 2 */
 		};
-		private static final @NonNull int[] __Pivotable = { 1,1,1 };
+		private static final int[] __Pivotable = { 1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Precedence =
 		{
@@ -3765,7 +3765,7 @@
 			Fragments._Precedence__NamedElement /* 4 */,
 			Fragments._Precedence__Precedence /* 5 */
 		};
-		private static final @NonNull int[] __Precedence = { 1,1,2,1,1,1 };
+		private static final int[] __Precedence = { 1,1,2,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _PrimitiveCompletePackage =
 		{
@@ -3778,7 +3778,7 @@
 			Fragments._PrimitiveCompletePackage__CompletePackage /* 5 */,
 			Fragments._PrimitiveCompletePackage__PrimitiveCompletePackage /* 6 */
 		};
-		private static final @NonNull int[] __PrimitiveCompletePackage = { 1,1,2,1,1,1,1 };
+		private static final int[] __PrimitiveCompletePackage = { 1,1,2,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _PrimitiveLiteralExp =
 		{
@@ -3793,7 +3793,7 @@
 			Fragments._PrimitiveLiteralExp__LiteralExp /* 7 */,
 			Fragments._PrimitiveLiteralExp__PrimitiveLiteralExp /* 8 */
 		};
-		private static final @NonNull int[] __PrimitiveLiteralExp = { 1,1,2,1,1,1,1,1,1 };
+		private static final int[] __PrimitiveLiteralExp = { 1,1,2,1,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _PrimitiveType =
 		{
@@ -3811,7 +3811,7 @@
 			Fragments._PrimitiveType__DataType /* 7 */,
 			Fragments._PrimitiveType__PrimitiveType /* 8 */
 		};
-		private static final @NonNull int[] __PrimitiveType = { 1,1,3,1,2,2,1,1,1 };
+		private static final int[] __PrimitiveType = { 1,1,3,1,2,2,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Profile =
 		{
@@ -3825,7 +3825,7 @@
 			Fragments._Profile__Package /* 6 */,
 			Fragments._Profile__Profile /* 7 */
 		};
-		private static final @NonNull int[] __Profile = { 1,1,2,1,1,1,1,1 };
+		private static final int[] __Profile = { 1,1,2,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _ProfileApplication =
 		{
@@ -3835,7 +3835,7 @@
 			Fragments._ProfileApplication__Element /* 3 */,
 			Fragments._ProfileApplication__ProfileApplication /* 4 */
 		};
-		private static final @NonNull int[] __ProfileApplication = { 1,1,1,1,1 };
+		private static final int[] __ProfileApplication = { 1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Property =
 		{
@@ -3849,7 +3849,7 @@
 			Fragments._Property__Feature /* 6 */,
 			Fragments._Property__Property /* 7 */
 		};
-		private static final @NonNull int[] __Property = { 1,1,2,1,1,1,1,1 };
+		private static final int[] __Property = { 1,1,2,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _PropertyCallExp =
 		{
@@ -3867,7 +3867,7 @@
 			Fragments._PropertyCallExp__NavigationCallExp /* 9 */,
 			Fragments._PropertyCallExp__PropertyCallExp /* 10 */
 		};
-		private static final @NonNull int[] __PropertyCallExp = { 1,1,3,1,1,1,1,1,1,1,1 };
+		private static final int[] __PropertyCallExp = { 1,1,3,1,1,1,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Pseudostate =
 		{
@@ -3880,7 +3880,7 @@
 			Fragments._Pseudostate__Vertex /* 5 */,
 			Fragments._Pseudostate__Pseudostate /* 6 */
 		};
-		private static final @NonNull int[] __Pseudostate = { 1,1,2,1,1,1,1 };
+		private static final int[] __Pseudostate = { 1,1,2,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _PseudostateKind =
 		{
@@ -3899,7 +3899,7 @@
 			Fragments._PseudostateKind__Enumeration /* 8 */,
 			Fragments._PseudostateKind__PseudostateKind /* 9 */
 		};
-		private static final @NonNull int[] __PseudostateKind = { 1,1,3,1,2,2,1,1,1,1 };
+		private static final int[] __PseudostateKind = { 1,1,3,1,2,2,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _RealLiteralExp =
 		{
@@ -3916,7 +3916,7 @@
 			Fragments._RealLiteralExp__NumericLiteralExp /* 9 */,
 			Fragments._RealLiteralExp__RealLiteralExp /* 10 */
 		};
-		private static final @NonNull int[] __RealLiteralExp = { 1,1,2,1,1,1,1,1,1,1,1 };
+		private static final int[] __RealLiteralExp = { 1,1,2,1,1,1,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _ReferringElement =
 		{
@@ -3924,7 +3924,7 @@
 			Fragments._ReferringElement__OclElement /* 1 */,
 			Fragments._ReferringElement__ReferringElement /* 2 */
 		};
-		private static final @NonNull int[] __ReferringElement = { 1,1,1 };
+		private static final int[] __ReferringElement = { 1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Region =
 		{
@@ -3937,7 +3937,7 @@
 			Fragments._Region__Namespace /* 5 */,
 			Fragments._Region__Region /* 6 */
 		};
-		private static final @NonNull int[] __Region = { 1,1,2,1,1,1,1 };
+		private static final int[] __Region = { 1,1,2,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _SelfType =
 		{
@@ -3954,7 +3954,7 @@
 			Fragments._SelfType__Class /* 6 */,
 			Fragments._SelfType__SelfType /* 7 */
 		};
-		private static final @NonNull int[] __SelfType = { 1,1,3,1,2,2,1,1 };
+		private static final int[] __SelfType = { 1,1,3,1,2,2,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _SendSignalAction =
 		{
@@ -3966,7 +3966,7 @@
 			Fragments._SendSignalAction__NamedElement /* 4 */,
 			Fragments._SendSignalAction__SendSignalAction /* 5 */
 		};
-		private static final @NonNull int[] __SendSignalAction = { 1,1,2,1,1,1 };
+		private static final int[] __SendSignalAction = { 1,1,2,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _SequenceType =
 		{
@@ -3985,7 +3985,7 @@
 			Fragments._SequenceType__CollectionType /* 8 */,
 			Fragments._SequenceType__SequenceType /* 9 */
 		};
-		private static final @NonNull int[] __SequenceType = { 1,1,3,1,2,2,1,1,1,1 };
+		private static final int[] __SequenceType = { 1,1,3,1,2,2,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _SetType =
 		{
@@ -4004,7 +4004,7 @@
 			Fragments._SetType__CollectionType /* 8 */,
 			Fragments._SetType__SetType /* 9 */
 		};
-		private static final @NonNull int[] __SetType = { 1,1,3,1,2,2,1,1,1,1 };
+		private static final int[] __SetType = { 1,1,3,1,2,2,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _ShadowExp =
 		{
@@ -4018,7 +4018,7 @@
 			Fragments._ShadowExp__OCLExpression /* 6 */,
 			Fragments._ShadowExp__ShadowExp /* 7 */
 		};
-		private static final @NonNull int[] __ShadowExp = { 1,1,2,1,1,1,1,1 };
+		private static final int[] __ShadowExp = { 1,1,2,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _ShadowPart =
 		{
@@ -4031,7 +4031,7 @@
 			Fragments._ShadowPart__TypedElement /* 5 */,
 			Fragments._ShadowPart__ShadowPart /* 6 */
 		};
-		private static final @NonNull int[] __ShadowPart = { 1,1,2,1,1,1,1 };
+		private static final int[] __ShadowPart = { 1,1,2,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Signal =
 		{
@@ -4048,7 +4048,7 @@
 			Fragments._Signal__Class /* 6 */,
 			Fragments._Signal__Signal /* 7 */
 		};
-		private static final @NonNull int[] __Signal = { 1,1,3,1,2,2,1,1 };
+		private static final int[] __Signal = { 1,1,3,1,2,2,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Slot =
 		{
@@ -4058,7 +4058,7 @@
 			Fragments._Slot__Element /* 3 */,
 			Fragments._Slot__Slot /* 4 */
 		};
-		private static final @NonNull int[] __Slot = { 1,1,1,1,1 };
+		private static final int[] __Slot = { 1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _StandardLibrary =
 		{
@@ -4068,7 +4068,7 @@
 			Fragments._StandardLibrary__Element /* 3 */,
 			Fragments._StandardLibrary__StandardLibrary /* 4 */
 		};
-		private static final @NonNull int[] __StandardLibrary = { 1,1,1,1,1 };
+		private static final int[] __StandardLibrary = { 1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _State =
 		{
@@ -4083,7 +4083,7 @@
 			Fragments._State__Vertex /* 5 */,
 			Fragments._State__State /* 6 */
 		};
-		private static final @NonNull int[] __State = { 1,2,2,1,1,2,1 };
+		private static final int[] __State = { 1,2,2,1,1,2,1 };
 
 		private static final @NonNull ExecutorFragment[] _StateExp =
 		{
@@ -4097,7 +4097,7 @@
 			Fragments._StateExp__OCLExpression /* 6 */,
 			Fragments._StateExp__StateExp /* 7 */
 		};
-		private static final @NonNull int[] __StateExp = { 1,1,2,1,1,1,1,1 };
+		private static final int[] __StateExp = { 1,1,2,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _StateMachine =
 		{
@@ -4115,7 +4115,7 @@
 			Fragments._StateMachine__Behavior /* 7 */,
 			Fragments._StateMachine__StateMachine /* 8 */
 		};
-		private static final @NonNull int[] __StateMachine = { 1,1,3,1,2,2,1,1,1 };
+		private static final int[] __StateMachine = { 1,1,3,1,2,2,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Stereotype =
 		{
@@ -4132,7 +4132,7 @@
 			Fragments._Stereotype__Class /* 6 */,
 			Fragments._Stereotype__Stereotype /* 7 */
 		};
-		private static final @NonNull int[] __Stereotype = { 1,1,3,1,2,2,1,1 };
+		private static final int[] __Stereotype = { 1,1,3,1,2,2,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _StereotypeExtender =
 		{
@@ -4142,7 +4142,7 @@
 			Fragments._StereotypeExtender__Element /* 3 */,
 			Fragments._StereotypeExtender__StereotypeExtender /* 4 */
 		};
-		private static final @NonNull int[] __StereotypeExtender = { 1,1,1,1,1 };
+		private static final int[] __StereotypeExtender = { 1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _StringLiteralExp =
 		{
@@ -4158,7 +4158,7 @@
 			Fragments._StringLiteralExp__PrimitiveLiteralExp /* 8 */,
 			Fragments._StringLiteralExp__StringLiteralExp /* 9 */
 		};
-		private static final @NonNull int[] __StringLiteralExp = { 1,1,2,1,1,1,1,1,1,1 };
+		private static final int[] __StringLiteralExp = { 1,1,2,1,1,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _TemplateBinding =
 		{
@@ -4168,7 +4168,7 @@
 			Fragments._TemplateBinding__Element /* 3 */,
 			Fragments._TemplateBinding__TemplateBinding /* 4 */
 		};
-		private static final @NonNull int[] __TemplateBinding = { 1,1,1,1,1 };
+		private static final int[] __TemplateBinding = { 1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _TemplateParameter =
 		{
@@ -4182,7 +4182,7 @@
 			Fragments._TemplateParameter__Type /* 5 */,
 			Fragments._TemplateParameter__TemplateParameter /* 6 */
 		};
-		private static final @NonNull int[] __TemplateParameter = { 1,1,3,1,1,1,1 };
+		private static final int[] __TemplateParameter = { 1,1,3,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _TemplateParameterSubstitution =
 		{
@@ -4192,7 +4192,7 @@
 			Fragments._TemplateParameterSubstitution__Element /* 3 */,
 			Fragments._TemplateParameterSubstitution__TemplateParameterSubstitution /* 4 */
 		};
-		private static final @NonNull int[] __TemplateParameterSubstitution = { 1,1,1,1,1 };
+		private static final int[] __TemplateParameterSubstitution = { 1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _TemplateSignature =
 		{
@@ -4202,7 +4202,7 @@
 			Fragments._TemplateSignature__Element /* 3 */,
 			Fragments._TemplateSignature__TemplateSignature /* 4 */
 		};
-		private static final @NonNull int[] __TemplateSignature = { 1,1,1,1,1 };
+		private static final int[] __TemplateSignature = { 1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _TemplateableElement =
 		{
@@ -4212,14 +4212,14 @@
 			Fragments._TemplateableElement__Element /* 3 */,
 			Fragments._TemplateableElement__TemplateableElement /* 4 */
 		};
-		private static final @NonNull int[] __TemplateableElement = { 1,1,1,1,1 };
+		private static final int[] __TemplateableElement = { 1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Throwable =
 		{
 			Fragments._Throwable__OclAny /* 0 */,
 			Fragments._Throwable__Throwable /* 1 */
 		};
-		private static final @NonNull int[] __Throwable = { 1,1 };
+		private static final int[] __Throwable = { 1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Transition =
 		{
@@ -4232,7 +4232,7 @@
 			Fragments._Transition__Namespace /* 5 */,
 			Fragments._Transition__Transition /* 6 */
 		};
-		private static final @NonNull int[] __Transition = { 1,1,2,1,1,1,1 };
+		private static final int[] __Transition = { 1,1,2,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _TransitionKind =
 		{
@@ -4251,7 +4251,7 @@
 			Fragments._TransitionKind__Enumeration /* 8 */,
 			Fragments._TransitionKind__TransitionKind /* 9 */
 		};
-		private static final @NonNull int[] __TransitionKind = { 1,1,3,1,2,2,1,1,1,1 };
+		private static final int[] __TransitionKind = { 1,1,3,1,2,2,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Trigger =
 		{
@@ -4263,7 +4263,7 @@
 			Fragments._Trigger__NamedElement /* 4 */,
 			Fragments._Trigger__Trigger /* 5 */
 		};
-		private static final @NonNull int[] __Trigger = { 1,1,2,1,1,1 };
+		private static final int[] __Trigger = { 1,1,2,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _TupleLiteralExp =
 		{
@@ -4278,7 +4278,7 @@
 			Fragments._TupleLiteralExp__LiteralExp /* 7 */,
 			Fragments._TupleLiteralExp__TupleLiteralExp /* 8 */
 		};
-		private static final @NonNull int[] __TupleLiteralExp = { 1,1,2,1,1,1,1,1,1 };
+		private static final int[] __TupleLiteralExp = { 1,1,2,1,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _TupleLiteralPart =
 		{
@@ -4292,7 +4292,7 @@
 			Fragments._TupleLiteralPart__VariableDeclaration /* 6 */,
 			Fragments._TupleLiteralPart__TupleLiteralPart /* 7 */
 		};
-		private static final @NonNull int[] __TupleLiteralPart = { 1,1,2,1,1,1,1,1 };
+		private static final int[] __TupleLiteralPart = { 1,1,2,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _TupleType =
 		{
@@ -4310,7 +4310,7 @@
 			Fragments._TupleType__DataType /* 7 */,
 			Fragments._TupleType__TupleType /* 8 */
 		};
-		private static final @NonNull int[] __TupleType = { 1,1,3,1,2,2,1,1,1 };
+		private static final int[] __TupleType = { 1,1,3,1,2,2,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Type =
 		{
@@ -4323,7 +4323,7 @@
 			Fragments._Type__NamedElement /* 4 */,
 			Fragments._Type__Type /* 5 */
 		};
-		private static final @NonNull int[] __Type = { 1,1,3,1,1,1 };
+		private static final int[] __Type = { 1,1,3,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _TypeExp =
 		{
@@ -4338,7 +4338,7 @@
 			Fragments._TypeExp__OCLExpression /* 6 */,
 			Fragments._TypeExp__TypeExp /* 7 */
 		};
-		private static final @NonNull int[] __TypeExp = { 1,1,3,1,1,1,1,1 };
+		private static final int[] __TypeExp = { 1,1,3,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _TypedElement =
 		{
@@ -4350,7 +4350,7 @@
 			Fragments._TypedElement__NamedElement /* 4 */,
 			Fragments._TypedElement__TypedElement /* 5 */
 		};
-		private static final @NonNull int[] __TypedElement = { 1,1,2,1,1,1 };
+		private static final int[] __TypedElement = { 1,1,2,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _UnlimitedNaturalLiteralExp =
 		{
@@ -4367,7 +4367,7 @@
 			Fragments._UnlimitedNaturalLiteralExp__NumericLiteralExp /* 9 */,
 			Fragments._UnlimitedNaturalLiteralExp__UnlimitedNaturalLiteralExp /* 10 */
 		};
-		private static final @NonNull int[] __UnlimitedNaturalLiteralExp = { 1,1,2,1,1,1,1,1,1,1,1 };
+		private static final int[] __UnlimitedNaturalLiteralExp = { 1,1,2,1,1,1,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _UnspecifiedValueExp =
 		{
@@ -4381,7 +4381,7 @@
 			Fragments._UnspecifiedValueExp__OCLExpression /* 6 */,
 			Fragments._UnspecifiedValueExp__UnspecifiedValueExp /* 7 */
 		};
-		private static final @NonNull int[] __UnspecifiedValueExp = { 1,1,2,1,1,1,1,1 };
+		private static final int[] __UnspecifiedValueExp = { 1,1,2,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _ValueSpecification =
 		{
@@ -4394,7 +4394,7 @@
 			Fragments._ValueSpecification__TypedElement /* 5 */,
 			Fragments._ValueSpecification__ValueSpecification /* 6 */
 		};
-		private static final @NonNull int[] __ValueSpecification = { 1,1,2,1,1,1,1 };
+		private static final int[] __ValueSpecification = { 1,1,2,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Variable =
 		{
@@ -4408,7 +4408,7 @@
 			Fragments._Variable__VariableDeclaration /* 6 */,
 			Fragments._Variable__Variable /* 7 */
 		};
-		private static final @NonNull int[] __Variable = { 1,1,2,1,1,1,1,1 };
+		private static final int[] __Variable = { 1,1,2,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _VariableDeclaration =
 		{
@@ -4421,7 +4421,7 @@
 			Fragments._VariableDeclaration__TypedElement /* 5 */,
 			Fragments._VariableDeclaration__VariableDeclaration /* 6 */
 		};
-		private static final @NonNull int[] __VariableDeclaration = { 1,1,2,1,1,1,1 };
+		private static final int[] __VariableDeclaration = { 1,1,2,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _VariableExp =
 		{
@@ -4436,7 +4436,7 @@
 			Fragments._VariableExp__OCLExpression /* 6 */,
 			Fragments._VariableExp__VariableExp /* 7 */
 		};
-		private static final @NonNull int[] __VariableExp = { 1,1,3,1,1,1,1,1 };
+		private static final int[] __VariableExp = { 1,1,3,1,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Vertex =
 		{
@@ -4448,7 +4448,7 @@
 			Fragments._Vertex__NamedElement /* 4 */,
 			Fragments._Vertex__Vertex /* 5 */
 		};
-		private static final @NonNull int[] __Vertex = { 1,1,2,1,1,1 };
+		private static final int[] __Vertex = { 1,1,2,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Visitable =
 		{
@@ -4456,7 +4456,7 @@
 			Fragments._Visitable__OclElement /* 1 */,
 			Fragments._Visitable__Visitable /* 2 */
 		};
-		private static final @NonNull int[] __Visitable = { 1,1,1 };
+		private static final int[] __Visitable = { 1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _VoidType =
 		{
@@ -4473,7 +4473,7 @@
 			Fragments._VoidType__Class /* 6 */,
 			Fragments._VoidType__VoidType /* 7 */
 		};
-		private static final @NonNull int[] __VoidType = { 1,1,3,1,2,2,1,1 };
+		private static final int[] __VoidType = { 1,1,3,1,2,2,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _WildcardType =
 		{
@@ -4490,7 +4490,7 @@
 			Fragments._WildcardType__Class /* 6 */,
 			Fragments._WildcardType__WildcardType /* 7 */
 		};
-		private static final @NonNull int[] __WildcardType = { 1,1,3,1,2,2,1,1 };
+		private static final int[] __WildcardType = { 1,1,3,1,2,2,1,1 };
 
 		/**
 		 *	Install the fragment descriptors in the class descriptors.
diff --git a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/StandardLibrary.java b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/StandardLibrary.java
index 0d73578..01b7ed5 100644
--- a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/StandardLibrary.java
+++ b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/StandardLibrary.java
@@ -69,7 +69,7 @@
      * 
      * @return the <tt>Bag(T)</tt> type (an instance of BagType)
      */
-	@NonNull org.eclipse.ocl.pivot.Class getBagType();
+	org.eclipse.ocl.pivot.@NonNull Class getBagType();
 	
     /**
      * Obtains the instance of the PrimitiveType metatype, named
@@ -77,7 +77,7 @@
      * 
      * @return the <tt>Boolean</tt> type (an instance of PrimitiveType)
      */
-	@NonNull org.eclipse.ocl.pivot.Class getBooleanType();
+	org.eclipse.ocl.pivot.@NonNull Class getBooleanType();
 	
     /**
      * Obtains the single instance of the org.eclipse.ocl.pivot.Class metatype, named
@@ -85,7 +85,7 @@
      * 
      * @return the <tt>Class</tt> type (an instance of Class)
      */
-	@NonNull org.eclipse.ocl.pivot.Class getClassType();
+	org.eclipse.ocl.pivot.@NonNull Class getClassType();
 	
     /**
      * Obtains the generic instance of the CollectionType metatype, named
@@ -93,14 +93,14 @@
      * 
      * @return the <tt>Collection(T)</tt> type (an instance of CollectionType)
      */
-	@NonNull org.eclipse.ocl.pivot.Class getCollectionType();
+	org.eclipse.ocl.pivot.@NonNull Class getCollectionType();
 
 	/**
 	 * @deprecated add isNullFree argument
 	 */
 	@Deprecated
-	@NonNull CollectionType getCollectionType(@NonNull org.eclipse.ocl.pivot.Class containerType, @NonNull Type elementType, @Nullable IntegerValue lower, @Nullable UnlimitedNaturalValue upper);
-	@NonNull CollectionType getCollectionType(@NonNull org.eclipse.ocl.pivot.Class containerType, @NonNull Type elementType, boolean isNullFree, @Nullable IntegerValue lower, @Nullable UnlimitedNaturalValue upper);
+	@NonNull CollectionType getCollectionType(org.eclipse.ocl.pivot.@NonNull Class containerType, @NonNull Type elementType, @Nullable IntegerValue lower, @Nullable UnlimitedNaturalValue upper);
+	@NonNull CollectionType getCollectionType(org.eclipse.ocl.pivot.@NonNull Class containerType, @NonNull Type elementType, boolean isNullFree, @Nullable IntegerValue lower, @Nullable UnlimitedNaturalValue upper);
 	
     /**
      * Obtains the single instance of the EnumerationType metatype, named
@@ -108,12 +108,12 @@
      * 
      * @return the <tt>Enumeration</tt> type (an instance of Enumeration)
      */
-	@NonNull org.eclipse.ocl.pivot.Class getEnumerationType();
+	org.eclipse.ocl.pivot.@NonNull Class getEnumerationType();
 
 	/**
 	 * Return the Inheritance dispatch table for a given type.
 	 */
-	@NonNull CompleteInheritance getInheritance(@NonNull org.eclipse.ocl.pivot.Class type);
+	@NonNull CompleteInheritance getInheritance(org.eclipse.ocl.pivot.@NonNull Class type);
 	
     /**
      * Obtains the instance of the PrimitiveType metatype, named
@@ -121,16 +121,16 @@
      * 
      * @return the <tt>Integer</tt> type (an instance of PrimitiveType)
      */
-	@NonNull org.eclipse.ocl.pivot.Class getIntegerType();
+	org.eclipse.ocl.pivot.@NonNull Class getIntegerType();
 
-	@NonNull org.eclipse.ocl.pivot.Class getMapType();
+	org.eclipse.ocl.pivot.@NonNull Class getMapType();
 
-	@NonNull MapType getMapType(@NonNull org.eclipse.ocl.pivot.Class containerType, @NonNull Type keyType, @NonNull Type valueType);
+	@NonNull MapType getMapType(org.eclipse.ocl.pivot.@NonNull Class containerType, @NonNull Type keyType, @NonNull Type valueType);
 
 	/**
 	 * Return the instance of the Metaclass metatype whose class is classType.
 	 */
-	@NonNull org.eclipse.ocl.pivot.Class getMetaclass(@NonNull Type classType);
+	org.eclipse.ocl.pivot.@NonNull Class getMetaclass(@NonNull Type classType);
 
     /**
      * Returns the meta-type of a given type.
@@ -145,7 +145,7 @@
      * 
      * @return the <tt>OclAny</tt> type (an instance of AnyType)
      */
-	@NonNull org.eclipse.ocl.pivot.Class getOclAnyType();
+	org.eclipse.ocl.pivot.@NonNull Class getOclAnyType();
 	
     /**
      * Obtains the single instance of the OclComparable metatype, named
@@ -153,7 +153,7 @@
      * 
      * @return the <tt>OclAny</tt> type (an instance of Class)
      */
-	@NonNull org.eclipse.ocl.pivot.Class getOclComparableType();
+	org.eclipse.ocl.pivot.@NonNull Class getOclComparableType();
 
     /**
      * Obtains the single instance of the Class metatype, named
@@ -161,7 +161,7 @@
      * 
      * @return the <tt>OclElement</tt> type (an instance of Class)
      */
-	@NonNull org.eclipse.ocl.pivot.Class getOclElementType();
+	org.eclipse.ocl.pivot.@NonNull Class getOclElementType();
 
 	@NonNull Operation getOclInvalidOperation();
 	
@@ -171,7 +171,7 @@
      * 
      * @return the <tt>OclInvalid</tt> type (an instance of InvalidType)
      */
-	@NonNull org.eclipse.ocl.pivot.Class getOclInvalidType();
+	org.eclipse.ocl.pivot.@NonNull Class getOclInvalidType();
 	
     /**
      * Obtains the generic instance of the MessageType metatype, named
@@ -179,7 +179,7 @@
      * 
      * @return the <tt>OclMessage</tt> type (an instance of MessageType)
      */
-	@NonNull org.eclipse.ocl.pivot.Class getOclMessageType();
+	org.eclipse.ocl.pivot.@NonNull Class getOclMessageType();
 
     /**
      * Obtains the single instance of the OclSelf pseudo-metatype, named
@@ -187,7 +187,7 @@
      * 
      * @return the <tt>OclSelf</tt> type (an instance of SelfType)
      */
-	@NonNull org.eclipse.ocl.pivot.Class getOclSelfType();
+	org.eclipse.ocl.pivot.@NonNull Class getOclSelfType();
 	
     /**
      * Obtains the single instance of the OclSummable metatype, named
@@ -195,7 +195,7 @@
      * 
      * @return the <tt>OclAny</tt> type (an instance of Class)
      */
-	@NonNull org.eclipse.ocl.pivot.Class getOclSummableType();
+	org.eclipse.ocl.pivot.@NonNull Class getOclSummableType();
 	
     /**
      * Obtains the single instance of the OclTupleType metatype, named
@@ -203,7 +203,7 @@
      * 
      * @return the <tt>OclTuple</tt> type (an instance of Class)
      */
-	@NonNull org.eclipse.ocl.pivot.Class getOclTupleType();
+	org.eclipse.ocl.pivot.@NonNull Class getOclTupleType();
 	
 	Type getOclType(@NonNull String typeName);
 	
@@ -213,7 +213,7 @@
      * 
      * @return the <tt>OclVoid</tt> type (an instance of VoidType)
      */
-	@NonNull org.eclipse.ocl.pivot.Class getOclVoidType();
+	org.eclipse.ocl.pivot.@NonNull Class getOclVoidType();
 	
     Element getOperationTemplateParameter(@NonNull Operation anOperation, int index);
 
@@ -223,7 +223,7 @@
      * 
      * @return the <tt>OrderedCollection(T)</tt> type (an instance of CollectionType)
      */
-	@NonNull org.eclipse.ocl.pivot.Class getOrderedCollectionType();
+	org.eclipse.ocl.pivot.@NonNull Class getOrderedCollectionType();
 
 	/**
      * Obtains the generic instance of the OrderedSetType metatype, named
@@ -231,12 +231,12 @@
      * 
      * @return the <tt>OrderedSet(T)</tt> type (an instance of OrderedSetType)
      */
-	@NonNull org.eclipse.ocl.pivot.Class getOrderedSetType();
+	org.eclipse.ocl.pivot.@NonNull Class getOrderedSetType();
 
 	/**
      * Obtains the package containing the library types
      */
-	@NonNull org.eclipse.ocl.pivot.Package getPackage();
+	org.eclipse.ocl.pivot.@NonNull Package getPackage();
 	
     Type getPrimitiveType(@NonNull PrimitiveTypeId id);
 
@@ -246,7 +246,7 @@
      * 
      * @return the <tt>Real</tt> type (an instance of PrimitiveType)
      */
-	@NonNull org.eclipse.ocl.pivot.Class getRealType();
+	org.eclipse.ocl.pivot.@NonNull Class getRealType();
 
 	org.eclipse.ocl.pivot.Package getRootPackage(@NonNull String name);
 	
@@ -256,7 +256,7 @@
      * 
      * @return the <tt>Sequence(T)</tt> type (an instance of SequenceType)
      */
-	@NonNull org.eclipse.ocl.pivot.Class getSequenceType();
+	org.eclipse.ocl.pivot.@NonNull Class getSequenceType();
 	
     /**
      * Obtains the generic instance of the SetType metatype, named
@@ -264,7 +264,7 @@
      * 
      * @return the <tt>Set(T)</tt> type (an instance of SetType)
      */
-	@NonNull org.eclipse.ocl.pivot.Class getSetType();
+	org.eclipse.ocl.pivot.@NonNull Class getSetType();
 
     /**
      * Obtains the instance of the PrimitiveType metatype, named
@@ -272,7 +272,7 @@
      * 
      * @return the <tt>String</tt> type (an instance of PrimitiveType)
      */
-	@NonNull org.eclipse.ocl.pivot.Class getStringType();
+	org.eclipse.ocl.pivot.@NonNull Class getStringType();
 
 	/**
      * Obtains the generic instance of the UniqueCollection metatype, named
@@ -280,7 +280,7 @@
      * 
      * @return the <tt>Set(T)</tt> type (an instance of CollectionType)
      */
-	@NonNull org.eclipse.ocl.pivot.Class getUniqueCollectionType();
+	org.eclipse.ocl.pivot.@NonNull Class getUniqueCollectionType();
    
     /**
      * Obtains the instance of the PrimitiveType metatype,
@@ -289,5 +289,5 @@
      * @return the <tt>UnlimitedNatural</tt> type (an instance of
      *     PrimitiveType)
      */
-	@NonNull org.eclipse.ocl.pivot.Class getUnlimitedNaturalType();
+	org.eclipse.ocl.pivot.@NonNull Class getUnlimitedNaturalType();
 } // StandardLibrary
diff --git a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/Type.java b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/Type.java
index e0e1add..b83b5e5 100644
--- a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/Type.java
+++ b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/Type.java
@@ -38,7 +38,7 @@
 	 */
 	Type flattenedType();
 
-	@Nullable org.eclipse.ocl.pivot.Class isClass();
+	org.eclipse.ocl.pivot.@Nullable Class isClass();
 
 	@Nullable TemplateParameter isTemplateParameter();
 
@@ -67,7 +67,7 @@
 	/**
 	 * Return the unique executable form of this type within standardLibrary.
 	 */
-	@NonNull org.eclipse.ocl.pivot.Class getNormalizedType(@NonNull StandardLibrary standardLibrary);
+	org.eclipse.ocl.pivot.@NonNull Class getNormalizedType(@NonNull StandardLibrary standardLibrary);
 
 	/**
 	 * Return a unique StandardLibrary-independent identifier for this type.
diff --git a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/ClassImpl.java b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/ClassImpl.java
index 639fc1f..ad01fa0 100644
--- a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/ClassImpl.java
+++ b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/ClassImpl.java
@@ -1162,7 +1162,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getNormalizedType(@NonNull StandardLibrary standardLibrary) {
+	public org.eclipse.ocl.pivot.@NonNull Class getNormalizedType(@NonNull StandardLibrary standardLibrary) {
 		try {
 			return getInheritance(standardLibrary).getPivotClass();
 		}
@@ -1302,7 +1302,7 @@
 	}
 	
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class isClass() {
+	public org.eclipse.ocl.pivot.@NonNull Class isClass() {
 		return this;
 	}
 
diff --git a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/CollectionTypeImpl.java b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/CollectionTypeImpl.java
index ee50357..10ecdf2 100644
--- a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/CollectionTypeImpl.java
+++ b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/CollectionTypeImpl.java
@@ -652,7 +652,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getCommonType(@NonNull IdResolver idResolver, @NonNull Type type) {
+	public org.eclipse.ocl.pivot.@NonNull Class getCommonType(@NonNull IdResolver idResolver, @NonNull Type type) {
 		CompleteEnvironment environment = idResolver.getEnvironment();
 		StandardLibrary standardLibrary = environment.getOwnedStandardLibrary();
 		CompleteInheritance thisInheritance = this.getInheritance(standardLibrary);
diff --git a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/CompleteClassImpl.java b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/CompleteClassImpl.java
index 00cc425..814ef73 100644
--- a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/CompleteClassImpl.java
+++ b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/CompleteClassImpl.java
@@ -353,7 +353,7 @@
 	}
 
 	@Override
-	public void addClass(@NonNull org.eclipse.ocl.pivot.Class partialClass) {
+	public void addClass(org.eclipse.ocl.pivot.@NonNull Class partialClass) {
 		partialClasses.add(partialClass);
 	}
 
@@ -382,7 +382,7 @@
 	 * Eliminate a partialClass from a CompleteClass returning true if the CompleteClass is empty.
 	 */
 	@Override
-	public void didAddClass(@NonNull org.eclipse.ocl.pivot.Class partialClass) {
+	public void didAddClass(org.eclipse.ocl.pivot.@NonNull Class partialClass) {
 		partialClasses.add(partialClass);
 	}
 
@@ -390,7 +390,7 @@
 	 * Eliminate a partialClass from a CompleteClass returning true if the CompleteClass is empty.
 	 */
 	@Override
-	public boolean didRemoveClass(@NonNull org.eclipse.ocl.pivot.Class partialClass) {
+	public boolean didRemoveClass(org.eclipse.ocl.pivot.@NonNull Class partialClass) {
 		partialClasses.remove(partialClass);
 		return partialClasses.size() <= 0;		// FIXME Need to invalidate all derived inheritances
 	}
@@ -411,7 +411,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getBehavioralClass() {
+	public org.eclipse.ocl.pivot.@NonNull Class getBehavioralClass() {
 		for (org.eclipse.ocl.pivot.Class partialClass : partialClasses) {
 			if (partialClass != null) {
 				if (partialClass instanceof DataType) {
@@ -496,7 +496,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getPrimaryClass() {
+	public org.eclipse.ocl.pivot.@NonNull Class getPrimaryClass() {
 		for (org.eclipse.ocl.pivot.Class partialClass : partialClasses) {
 			if (partialClass != null) {
 				return partialClass;
diff --git a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/CompleteEnvironmentImpl.java b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/CompleteEnvironmentImpl.java
index 5db9e5e..7f3da93 100644
--- a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/CompleteEnvironmentImpl.java
+++ b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/CompleteEnvironmentImpl.java
@@ -383,7 +383,7 @@
 	private boolean isCodeGeneration = false;
 	
 	@Override
-	public void addOrphanClass(@NonNull org.eclipse.ocl.pivot.Class pivotElement) {
+	public void addOrphanClass(org.eclipse.ocl.pivot.@NonNull Class pivotElement) {
 		if (pivotElement.getUnspecializedElement() != null) {
 			assert pivotElement.getUnspecializedElement().getUnspecializedElement() == null;
 		}
@@ -588,14 +588,14 @@
 	}
 
 	@Override
-	public void didAddClass(@NonNull org.eclipse.ocl.pivot.Class partialClass, @NonNull CompleteClassInternal completeClass) {
+	public void didAddClass(org.eclipse.ocl.pivot.@NonNull Class partialClass, @NonNull CompleteClassInternal completeClass) {
 //		assert partialClass.getUnspecializedElement() == null;
 		CompleteClass oldCompleteClass = class2completeClass.put(partialClass, completeClass);
 		assert (oldCompleteClass == null) ||(oldCompleteClass == completeClass);
 	}
 	
 	@Override
-	public void didRemoveClass(@NonNull org.eclipse.ocl.pivot.Class pivotType) {
+	public void didRemoveClass(org.eclipse.ocl.pivot.@NonNull Class pivotType) {
 		class2completeClass.remove(pivotType);
 	}
 
@@ -638,13 +638,13 @@
 	}
 	
 	@Override
-	public @NonNull CollectionType getCollectionType(@NonNull org.eclipse.ocl.pivot.Class containerType, @NonNull Type elementType, boolean isNullFree, @Nullable IntegerValue lower, @Nullable UnlimitedNaturalValue upper) {
+	public @NonNull CollectionType getCollectionType(org.eclipse.ocl.pivot.@NonNull Class containerType, @NonNull Type elementType, boolean isNullFree, @Nullable IntegerValue lower, @Nullable UnlimitedNaturalValue upper) {
 		PivotMetamodelManager metamodelManager = environmentFactory.getMetamodelManager();
 		return getCollectionType((CollectionType)metamodelManager.getPrimaryClass(containerType), metamodelManager.getPrimaryType(elementType), isNullFree, lower, upper);
 	}
 	
 	@Override
-	public @NonNull CollectionType getCollectionType(@NonNull org.eclipse.ocl.pivot.Class containerType, @NonNull Type elementType, @Nullable IntegerValue lower, @Nullable UnlimitedNaturalValue upper) {
+	public @NonNull CollectionType getCollectionType(org.eclipse.ocl.pivot.@NonNull Class containerType, @NonNull Type elementType, @Nullable IntegerValue lower, @Nullable UnlimitedNaturalValue upper) {
 		PivotMetamodelManager metamodelManager = environmentFactory.getMetamodelManager();
 		return getCollectionType((CollectionType)metamodelManager.getPrimaryClass(containerType), metamodelManager.getPrimaryType(elementType), false, lower, upper);
 	}
@@ -745,7 +745,7 @@
 	}
 	
 	@Override
-	public @NonNull MapType getMapType(@NonNull org.eclipse.ocl.pivot.Class containerType, @NonNull Type keyType, @NonNull Type valueType) {
+	public @NonNull MapType getMapType(org.eclipse.ocl.pivot.@NonNull Class containerType, @NonNull Type keyType, @NonNull Type valueType) {
 		PivotMetamodelManager metamodelManager = environmentFactory.getMetamodelManager();
 		return getMapType((MapType)metamodelManager.getPrimaryClass(containerType), metamodelManager.getPrimaryType(keyType), metamodelManager.getPrimaryType(valueType));
 	}
@@ -776,7 +776,7 @@
 //	}
 
 	@Override
-	public org.eclipse.ocl.pivot.Package getNestedPackage(@NonNull org.eclipse.ocl.pivot.Package domainPackage, @NonNull String name) {
+	public org.eclipse.ocl.pivot.Package getNestedPackage(org.eclipse.ocl.pivot.@NonNull Package domainPackage, @NonNull String name) {
 		PivotMetamodelManager metamodelManager = environmentFactory.getMetamodelManager();
 		CompletePackage completePackage = metamodelManager.getCompletePackage(domainPackage);
 		CompletePackage memberPackage = completePackage.getOwnedCompletePackage(name);
@@ -784,7 +784,7 @@
 	}
 
 	@Override
-	public org.eclipse.ocl.pivot.Class getNestedType(@NonNull org.eclipse.ocl.pivot.Package domainPackage, @NonNull String name) {
+	public org.eclipse.ocl.pivot.Class getNestedType(org.eclipse.ocl.pivot.@NonNull Package domainPackage, @NonNull String name) {
 		PivotMetamodelManager metamodelManager = environmentFactory.getMetamodelManager();
 		CompletePackage completePackage = metamodelManager.getCompletePackage(domainPackage);
 		return completePackage.getMemberType(name);
diff --git a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/CompleteModelImpl.java b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/CompleteModelImpl.java
index b0dbedb..0e1e893 100644
--- a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/CompleteModelImpl.java
+++ b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/CompleteModelImpl.java
@@ -415,7 +415,7 @@
 	}
 
 	@Override
-	public void didAddClass(@NonNull org.eclipse.ocl.pivot.Class partialClass, @NonNull CompleteClassInternal completeClass) {
+	public void didAddClass(org.eclipse.ocl.pivot.@NonNull Class partialClass, @NonNull CompleteClassInternal completeClass) {
 		completeEnvironment.didAddClass(partialClass, completeClass);
 	}
 
@@ -425,7 +425,7 @@
 	}
 
 	@Override
-	public void didAddNestedPackage(@NonNull org.eclipse.ocl.pivot.Package pivotPackage) {
+	public void didAddNestedPackage(org.eclipse.ocl.pivot.@NonNull Package pivotPackage) {
 		ownedCompletePackages.didAddPackage(pivotPackage);
 	}
 	
@@ -435,7 +435,7 @@
 	}
 	
 	@Override
-	public void didRemoveClass(@NonNull org.eclipse.ocl.pivot.Class pivotType) {
+	public void didRemoveClass(org.eclipse.ocl.pivot.@NonNull Class pivotType) {
 		completeEnvironment.didRemoveClass(pivotType);
 	}
 
@@ -448,7 +448,7 @@
 	}
 
 	@Override
-	public void didRemoveNestedPackage(@NonNull org.eclipse.ocl.pivot.Package pivotPackage) {
+	public void didRemoveNestedPackage(org.eclipse.ocl.pivot.@NonNull Package pivotPackage) {
 		ownedCompletePackages.didRemovePackage(pivotPackage);
 	}
 	
@@ -510,7 +510,7 @@
 	}
 
 	@Override
-	public @NonNull CompletePackageInternal getCompletePackage(@NonNull org.eclipse.ocl.pivot.Package asPackage) {
+	public @NonNull CompletePackageInternal getCompletePackage(org.eclipse.ocl.pivot.@NonNull Package asPackage) {
 		return ownedCompletePackages.getCompletePackage(asPackage);
 	}
 
@@ -682,7 +682,7 @@
 	}
 
 	@Override
-	public @Nullable org.eclipse.ocl.pivot.Package getRootPackage(@NonNull String completeURIorName) {
+	public org.eclipse.ocl.pivot.@Nullable Package getRootPackage(@NonNull String completeURIorName) {
 		CompletePackage completePackage = completeURIs.getCompletePackage(completeURIorName);
 		if (completePackage != null) {
 			return completePackage.getPrimaryPackage();
@@ -721,7 +721,7 @@
 		return this;
 	}
 
-/*	public void removedType(@NonNull org.eclipse.ocl.pivot.Class pivotType) {
+/*	public void removedType(org.eclipse.ocl.pivot.@NonNull Class pivotType) {
 		CompleteClass completeClass = class2completeClass.get(pivotType);
 		if (completeClass != null) {
 //			completeClass.dispose();
@@ -729,7 +729,7 @@
 	} */
 
 	@Override
-	public void resolveSuperClasses(@NonNull org.eclipse.ocl.pivot.Class specializedClass, @NonNull org.eclipse.ocl.pivot.Class unspecializedClass) {
+	public void resolveSuperClasses(org.eclipse.ocl.pivot.@NonNull Class specializedClass, org.eclipse.ocl.pivot.@NonNull Class unspecializedClass) {
 		List<TemplateBinding> specializedTemplateBindings = specializedClass.getOwnedBindings();
 		for (org.eclipse.ocl.pivot.Class superClass : unspecializedClass.getSuperClasses()) {
 			List<TemplateBinding> superTemplateBindings = superClass.getOwnedBindings();
@@ -757,7 +757,7 @@
 						}
 					}
 				}
-				@NonNull org.eclipse.ocl.pivot.Class unspecializedSuperClass = PivotUtil.getUnspecializedTemplateableElement(superClass);
+				org.eclipse.ocl.pivot.@NonNull Class unspecializedSuperClass = PivotUtil.getUnspecializedTemplateableElement(superClass);
 				CompleteClassInternal superCompleteClass = environmentFactory.getMetamodelManager().getCompleteClass(unspecializedSuperClass);
 				org.eclipse.ocl.pivot.Class superPivotClass = superCompleteClass.getPrimaryClass();
 				if (superPivotClass instanceof CollectionType) {
diff --git a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/CompletePackageImpl.java b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/CompletePackageImpl.java
index 46de20f..2ef6440 100644
--- a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/CompletePackageImpl.java
+++ b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/CompletePackageImpl.java
@@ -419,7 +419,7 @@
 		}
 	}
 
-	protected void didAddNestedPackage(@NonNull CompleteModel completeModel, @NonNull org.eclipse.ocl.pivot.Package pivotPackage) {
+	protected void didAddNestedPackage(@NonNull CompleteModel completeModel, org.eclipse.ocl.pivot.@NonNull Package pivotPackage) {
 /*		CompletePackage completePackage = null;
 		String name = pivotPackage.getName();
 //		String packageURI = pivotPackage.getURI();
@@ -445,33 +445,33 @@
 //		}
 	}
 
-	public void didAddClass(@NonNull org.eclipse.ocl.pivot.Class partialClass) {
+	public void didAddClass(org.eclipse.ocl.pivot.@NonNull Class partialClass) {
 		if (ownedCompleteClasses != null) {
 			ownedCompleteClasses.didAddClass(partialClass);
 		}
 	}
 
-	public void didAddNestedPackage(@NonNull org.eclipse.ocl.pivot.Package nestedPackage) {
+	public void didAddNestedPackage(org.eclipse.ocl.pivot.@NonNull Package nestedPackage) {
 		getOwnedCompletePackages().didAddPackage(nestedPackage);
 	}
 
-	public void didAddPartialPackage(@NonNull org.eclipse.ocl.pivot.Package partialPackage) {
+	public void didAddPartialPackage(org.eclipse.ocl.pivot.@NonNull Package partialPackage) {
 		if (ownedCompleteClasses != null) {
 			ownedCompleteClasses.didAddPackage(partialPackage);
 		}
 	}
 
-	public void didRemoveClass(@NonNull org.eclipse.ocl.pivot.Class partialClass) {
+	public void didRemoveClass(org.eclipse.ocl.pivot.@NonNull Class partialClass) {
 		if (ownedCompleteClasses != null) {
 			ownedCompleteClasses.didRemoveClass(partialClass);
 		}
 	}
 
-	public void didRemoveNestedPackage(@NonNull org.eclipse.ocl.pivot.Package nestedPackage) {
+	public void didRemoveNestedPackage(org.eclipse.ocl.pivot.@NonNull Package nestedPackage) {
 		getOwnedCompletePackages().didRemovePackage(nestedPackage);
 	}
 
-	public void didRemovePartialPackage(@NonNull org.eclipse.ocl.pivot.Package partialPackage) {
+	public void didRemovePartialPackage(org.eclipse.ocl.pivot.@NonNull Package partialPackage) {
 		if (ownedCompleteClasses != null) {
 			ownedCompleteClasses.didRemovePackage(partialPackage);
 		}
@@ -496,7 +496,7 @@
 	}
 
 	@Override
-	public @NonNull CompleteClassInternal getCompleteClass(@NonNull org.eclipse.ocl.pivot.Class pivotType) {
+	public @NonNull CompleteClassInternal getCompleteClass(org.eclipse.ocl.pivot.@NonNull Class pivotType) {
 		return ClassUtil.nonNullState(getOwnedCompleteClass(pivotType.getName()));
 	}
 
@@ -684,7 +684,7 @@
 	}
 
 	@Override
-	public final @NonNull org.eclipse.ocl.pivot.Package getPrimaryPackage() {
+	public final org.eclipse.ocl.pivot.@NonNull Package getPrimaryPackage() {
 		for (org.eclipse.ocl.pivot.Package partialPackage : getPartialPackages()) {
 			if (partialPackage != null) {
 				return partialPackage;
diff --git a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/ElementImpl.java b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/ElementImpl.java
index 79d17d4..4f4849f 100644
--- a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/ElementImpl.java
+++ b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/ElementImpl.java
@@ -200,7 +200,7 @@
 		final @NonNull /*@NonInvalid*/ IdResolver idResolver = evaluator.getIdResolver();
 		final @NonNull /*@NonInvalid*/ StandardLibrary standardLibrary = idResolver.getStandardLibrary();
 		final @NonNull /*@NonInvalid*/ SetValue oclAsSet = OclAnyOclAsSetOperation.INSTANCE.evaluate(evaluator, PivotTables.SET_CLSSid_Element, this);
-		final @NonNull org.eclipse.ocl.pivot.Class TYPE_closure_0 = evaluator.getStaticTypeOf(oclAsSet);
+		final org.eclipse.ocl.pivot.@NonNull Class TYPE_closure_0 = evaluator.getStaticTypeOf(oclAsSet);
 		final @NonNull LibraryIteration IMPL_closure_0 = (LibraryIteration)TYPE_closure_0.lookupImplementation(standardLibrary, OCLstdlibTables.Operations._Set__closure);
 		final @NonNull Object ACC_closure_0 = IMPL_closure_0.createAccumulatorValue(evaluator, PivotTables.SET_CLSSid_Element, PivotTables.SET_CLSSid_Element);
 		/**
diff --git a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/ModelImpl.java b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/ModelImpl.java
index 2d6ee0b..0615170 100644
--- a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/ModelImpl.java
+++ b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/ModelImpl.java
@@ -356,13 +356,13 @@
 		rootListeners2.addListener(rootListener);
 	}
 
-	protected void didAddPackage(@NonNull org.eclipse.ocl.pivot.Package partialPackage) {
+	protected void didAddPackage(org.eclipse.ocl.pivot.@NonNull Package partialPackage) {
 		if (rootListeners != null) {
 			rootListeners.didAddPackage(partialPackage);
 		}
 	}
 
-	protected void didRemovePackage(@NonNull org.eclipse.ocl.pivot.Package partialPackage) {
+	protected void didRemovePackage(org.eclipse.ocl.pivot.@NonNull Package partialPackage) {
 		if (rootListeners != null) {
 			rootListeners.didRemovePackage(partialPackage);
 		}
diff --git a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/OrphanCompletePackageImpl.java b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/OrphanCompletePackageImpl.java
index e1c404e..befbe4a 100644
--- a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/OrphanCompletePackageImpl.java
+++ b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/OrphanCompletePackageImpl.java
@@ -78,7 +78,7 @@
 	}
 
 	@Override
-	public void assertSamePackage(@Nullable org.eclipse.ocl.pivot.Package domainPackage) {
+	public void assertSamePackage(org.eclipse.ocl.pivot.@Nullable Package domainPackage) {
 		assert domainPackage != null;
 		org.eclipse.ocl.pivot.Package parentPackage = domainPackage.getOwningPackage();
 		assert parentPackage == null;
@@ -106,7 +106,7 @@
 	}
 
 	@Override
-	public @NonNull CompleteClassInternal getCompleteClass(@NonNull org.eclipse.ocl.pivot.Class type) {
+	public @NonNull CompleteClassInternal getCompleteClass(org.eclipse.ocl.pivot.@NonNull Class type) {
 		WeakReference<OrphanCompleteClassImpl> ref = class2orphanCompleteClass.get(type);
 		if (ref != null) {
 			OrphanCompleteClassImpl orphanCompleteClass = ref.get();
@@ -114,7 +114,7 @@
 				return orphanCompleteClass;
 			}
 		}
-		final @NonNull org.eclipse.ocl.pivot.Class orphanClass = type;
+		final org.eclipse.ocl.pivot.@NonNull Class orphanClass = type;
 		OrphanCompleteClassImpl completeClass = new OrphanCompleteClassImpl();
 		completeClass.setName(orphanClass.getName());
 		completeClass.getPartialClasses().add(orphanClass);
diff --git a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/PackageImpl.java b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/PackageImpl.java
index 6f9487f..fe37420 100644
--- a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/PackageImpl.java
+++ b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/PackageImpl.java
@@ -603,25 +603,25 @@
 		return packageId;
 	}
 
-	protected void didAddClass(@NonNull org.eclipse.ocl.pivot.Class partialClass) {
+	protected void didAddClass(org.eclipse.ocl.pivot.@NonNull Class partialClass) {
 		if (packageListeners != null) {
 			packageListeners.didAddClass(partialClass);
 		}
 	}
 
-	protected void didAddPackage(@NonNull org.eclipse.ocl.pivot.Package partialPackage) {
+	protected void didAddPackage(org.eclipse.ocl.pivot.@NonNull Package partialPackage) {
 		if (packageListeners != null) {
 			packageListeners.didAddPackage(partialPackage);
 		}
 	}
 
-	protected void didRemoveClass(@NonNull org.eclipse.ocl.pivot.Class partialClass) {
+	protected void didRemoveClass(org.eclipse.ocl.pivot.@NonNull Class partialClass) {
 		if (packageListeners != null) {
 			packageListeners.didRemoveClass(partialClass);
 		}
 	}
 
-	protected void didRemovePackage(@NonNull org.eclipse.ocl.pivot.Package partialPackage) {
+	protected void didRemovePackage(org.eclipse.ocl.pivot.@NonNull Package partialPackage) {
 		if (packageListeners != null) {
 			packageListeners.didRemovePackage(partialPackage);
 		}
@@ -635,7 +635,7 @@
 
 	@Override
 	
-	public @Nullable org.eclipse.ocl.pivot.Class getOwnedClass(String className) {
+	public org.eclipse.ocl.pivot.@Nullable Class getOwnedClass(String className) {
 		return NameUtil.getNameable(getOwnedClasses(), className);
 	}
 
diff --git a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/PrimitiveCompletePackageImpl.java b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/PrimitiveCompletePackageImpl.java
index 6774038..d40449e 100644
--- a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/PrimitiveCompletePackageImpl.java
+++ b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/PrimitiveCompletePackageImpl.java
@@ -51,7 +51,7 @@
 	}
 
 	@Override
-	public @NonNull CompleteClassInternal getCompleteClass(final @NonNull org.eclipse.ocl.pivot.Class primitiveType) {
+	public @NonNull CompleteClassInternal getCompleteClass(final org.eclipse.ocl.pivot.@NonNull Class primitiveType) {
 		String name = primitiveType.getName();
 		CompleteClassInternal completeClass = getOwnedCompleteClass(name);
 		if (completeClass == null) {
diff --git a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/PropertyCallExpImpl.java b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/PropertyCallExpImpl.java
index 2c470a9..0929d54 100644
--- a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/PropertyCallExpImpl.java
+++ b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/PropertyCallExpImpl.java
@@ -430,7 +430,7 @@
 	 * @generated NOT
 	 */
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getSpecializedReferredPropertyOwningType()
+	public org.eclipse.ocl.pivot.@NonNull Class getSpecializedReferredPropertyOwningType()
 	{
 		Property referredProperty = getReferredProperty();
 		org.eclipse.ocl.pivot.Class referencedType = referredProperty.getOwningClass();
@@ -461,7 +461,7 @@
 	 * @generated NOT
 	 */
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getSpecializedReferredPropertyType()
+	public org.eclipse.ocl.pivot.@NonNull Class getSpecializedReferredPropertyType()
 	{
 		Property referredProperty = getReferredProperty();
 		Type referencedType = referredProperty.getType();
diff --git a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/StandardLibraryImpl.java b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/StandardLibraryImpl.java
index 3eab48b..d21c18c 100644
--- a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/StandardLibraryImpl.java
+++ b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/StandardLibraryImpl.java
@@ -360,23 +360,23 @@
 
 	private @Nullable BagType bagType = null;
 	private @Nullable PrimitiveType booleanType = null;
-	private @Nullable org.eclipse.ocl.pivot.Class classType = null;
+	private org.eclipse.ocl.pivot.@Nullable Class classType = null;
 	private @Nullable CollectionType collectionType = null;
-	private @Nullable org.eclipse.ocl.pivot.Class enumerationType = null;
+	private org.eclipse.ocl.pivot.@Nullable Class enumerationType = null;
 	private @Nullable PrimitiveType integerType = null;
-	private @Nullable org.eclipse.ocl.pivot.Package libraryPackage = null;
+	private org.eclipse.ocl.pivot.@Nullable Package libraryPackage = null;
 	private @Nullable MapType mapType = null;
 	private @Nullable AnyType oclAnyType = null;
-	private @Nullable org.eclipse.ocl.pivot.Class oclComparableType = null;
-	private @Nullable org.eclipse.ocl.pivot.Class oclElementType = null;
+	private org.eclipse.ocl.pivot.@Nullable Class oclComparableType = null;
+	private org.eclipse.ocl.pivot.@Nullable Class oclElementType = null;
 	private @Nullable Operation oclInvalidOperation = null;
 	private @Nullable Property oclInvalidProperty = null;
 	private @Nullable InvalidType oclInvalidType = null;
-	private @Nullable org.eclipse.ocl.pivot.Class oclLambdaType = null;
+	private org.eclipse.ocl.pivot.@Nullable Class oclLambdaType = null;
 	private @Nullable SelfType oclSelfType = null;
-	private @Nullable org.eclipse.ocl.pivot.Class oclSummableType = null;
-	private @Nullable org.eclipse.ocl.pivot.Class oclTupleType = null;
-	private @Nullable org.eclipse.ocl.pivot.Class oclTypeType = null;
+	private org.eclipse.ocl.pivot.@Nullable Class oclSummableType = null;
+	private org.eclipse.ocl.pivot.@Nullable Class oclTupleType = null;
+	private org.eclipse.ocl.pivot.@Nullable Class oclTypeType = null;
 	private @Nullable VoidType oclVoidType = null;
 	private @Nullable CollectionType orderedCollectionType = null;
 	private @Nullable OrderedSetType orderedSetType = null;
@@ -408,7 +408,7 @@
 	}
 
 	@Override
-	public void defineLibraryType(@NonNull org.eclipse.ocl.pivot.Class pivotType) {
+	public void defineLibraryType(org.eclipse.ocl.pivot.@NonNull Class pivotType) {
 		Map<String, org.eclipse.ocl.pivot.Class> nameToLibraryTypeMap2 = nameToLibraryTypeMap;
 		if (nameToLibraryTypeMap2 == null) {
 			nameToLibraryTypeMap = nameToLibraryTypeMap2 = new HashMap<String, org.eclipse.ocl.pivot.Class>();
@@ -429,7 +429,7 @@
 	 * Return the pivot model class for className with the Pivot Model.
 	 */
 	@Override
-	public @Nullable org.eclipse.ocl.pivot.Class getASClass(@NonNull String className) {
+	public org.eclipse.ocl.pivot.@Nullable Class getASClass(@NonNull String className) {
 		return environmentFactory.getMetamodelManager().getASClass(className);
 	}
 
@@ -519,7 +519,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getClassType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getClassType() {
 		org.eclipse.ocl.pivot.Class classType2 = classType;
 		if (classType2 == null) {
 			classType2 = classType = resolveRequiredSimpleType(org.eclipse.ocl.pivot.Class.class, TypeId.CLASS_NAME);		
@@ -537,13 +537,13 @@
 	}
 
 	@Override
-	public @NonNull CollectionType getCollectionType(@NonNull org.eclipse.ocl.pivot.Class containerType,
+	public @NonNull CollectionType getCollectionType(org.eclipse.ocl.pivot.@NonNull Class containerType,
 			@NonNull Type elementType, boolean isNullFree, @Nullable IntegerValue lower, @Nullable UnlimitedNaturalValue upper) {
 		return environmentFactory.getCompleteEnvironment().getCollectionType(containerType, elementType, isNullFree, lower, upper);
 	}
 
 	@Override
-	public @NonNull CollectionType getCollectionType(@NonNull org.eclipse.ocl.pivot.Class containerType,
+	public @NonNull CollectionType getCollectionType(org.eclipse.ocl.pivot.@NonNull Class containerType,
 			@NonNull Type elementType, @Nullable IntegerValue lower, @Nullable UnlimitedNaturalValue upper) {
 		return environmentFactory.getCompleteEnvironment().getCollectionType(containerType, elementType, false, lower, upper);
 	}
@@ -559,7 +559,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getEnumerationType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getEnumerationType() {
 		org.eclipse.ocl.pivot.Class enumerationType2 = enumerationType;
 		if (enumerationType2 == null) {
 			enumerationType2 = enumerationType = resolveRequiredSimpleType(org.eclipse.ocl.pivot.Class.class, TypeId.ENUMERATION_NAME);		
@@ -569,7 +569,7 @@
 
 	@Override
 	@NonNull
-	public CompleteInheritance getInheritance(@NonNull org.eclipse.ocl.pivot.Class type) {
+	public CompleteInheritance getInheritance(org.eclipse.ocl.pivot.@NonNull Class type) {
 		return environmentFactory.getMetamodelManager().getInheritance(type);
 	}
 
@@ -602,13 +602,13 @@
 	}
 
 	@Override
-	public @NonNull MapType getMapType(@NonNull org.eclipse.ocl.pivot.Class containerType,
+	public @NonNull MapType getMapType(org.eclipse.ocl.pivot.@NonNull Class containerType,
 			@NonNull Type keyType, @NonNull Type valueType) {
 		return environmentFactory.getCompleteEnvironment().getMapType(containerType, keyType, valueType);
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getMetaclass(@NonNull Type classType) {
+	public org.eclipse.ocl.pivot.@NonNull Class getMetaclass(@NonNull Type classType) {
 		return environmentFactory.getMetamodelManager().getMetaclass(classType);
 	}
 
@@ -637,7 +637,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getOclComparableType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getOclComparableType() {
 		org.eclipse.ocl.pivot.Class oclComparableType2 = oclComparableType;
 		if (oclComparableType2 == null) {
 			oclComparableType2 = oclComparableType = resolveRequiredSimpleType(org.eclipse.ocl.pivot.Class.class, TypeId.OCL_COMPARABLE_NAME);		
@@ -646,7 +646,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getOclElementType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getOclElementType() {
 		org.eclipse.ocl.pivot.Class oclElementType2 = oclElementType;
 		if (oclElementType2 == null) {
 			oclElementType2 = oclElementType = resolveRequiredSimpleType(org.eclipse.ocl.pivot.Class.class, "OclElement");		
@@ -704,7 +704,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getOclLambdaType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getOclLambdaType() {
 		org.eclipse.ocl.pivot.Class oclLambdaType2 = oclLambdaType;
 		if (oclLambdaType2 == null) {
 			oclLambdaType2 = oclLambdaType = resolveRequiredSimpleType(org.eclipse.ocl.pivot.Class.class, "OclLambda");		
@@ -713,7 +713,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getOclMessageType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getOclMessageType() {
 		return getRequiredLibraryType("OclMessage");
 	}
 
@@ -727,7 +727,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getOclSummableType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getOclSummableType() {
 		org.eclipse.ocl.pivot.Class oclSummableType2 = oclSummableType;
 		if (oclSummableType2 == null) {
 			oclSummableType2 = oclSummableType = resolveRequiredSimpleType(org.eclipse.ocl.pivot.Class.class, TypeId.OCL_SUMMABLE_NAME);		
@@ -736,7 +736,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getOclTupleType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getOclTupleType() {
 		org.eclipse.ocl.pivot.Class oclTupleType2 = oclTupleType;
 		if (oclTupleType2 == null) {
 			oclTupleType2 = oclTupleType = resolveRequiredSimpleType(org.eclipse.ocl.pivot.Class.class, "OclTuple");		
@@ -750,7 +750,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getOclTypeType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getOclTypeType() {
 		org.eclipse.ocl.pivot.Class oclTypeType2 = oclTypeType;
 		if (oclTypeType2 == null) {
 			oclTypeType2 = oclTypeType = resolveRequiredSimpleType(org.eclipse.ocl.pivot.Class.class, "OclType");		
@@ -792,7 +792,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Package getPackage() {
+	public org.eclipse.ocl.pivot.@NonNull Package getPackage() {
 		org.eclipse.ocl.pivot.Package libraryPackage2 = libraryPackage;
 		if (libraryPackage2 == null) {
 			libraryPackage2 = libraryPackage = getOclAnyType().getOwningPackage();
@@ -816,7 +816,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getRequiredLibraryType(@NonNull String typeName) {
+	public org.eclipse.ocl.pivot.@NonNull Class getRequiredLibraryType(@NonNull String typeName) {
 		org.eclipse.ocl.pivot.Class type = getLibraryType(typeName);
 		if (type == null) {
 //			nameToLibraryTypeMap = null;
@@ -833,7 +833,7 @@
 	}
 
 	@Override
-	public @Nullable org.eclipse.ocl.pivot.Package getRootPackage(@NonNull String completeURIorName) {
+	public org.eclipse.ocl.pivot.@Nullable Package getRootPackage(@NonNull String completeURIorName) {
 		Package rootPackage = completeModel.getRootPackage(completeURIorName);
 		if (rootPackage == null) {
 			if (PivotConstants.METAMODEL_NAME.equals(completeURIorName)) {
diff --git a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/TemplateParameterImpl.java b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/TemplateParameterImpl.java
index a4817a4..b3ff030 100644
--- a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/TemplateParameterImpl.java
+++ b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/internal/TemplateParameterImpl.java
@@ -364,7 +364,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getNormalizedType(@NonNull StandardLibrary standardLibrary) {
+	public org.eclipse.ocl.pivot.@NonNull Class getNormalizedType(@NonNull StandardLibrary standardLibrary) {
 		try {
 			return getInheritance(standardLibrary).getPivotClass();
 		}
@@ -412,7 +412,7 @@
 	}
 	
 	@Override
-	public @Nullable org.eclipse.ocl.pivot.Class isClass() {
+	public org.eclipse.ocl.pivot.@Nullable Class isClass() {
 		return null;
 	}
 
diff --git a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/oclstdlib/OCLstdlibTables.java b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/oclstdlib/OCLstdlibTables.java
index b5385dd..3fb1d9c 100644
--- a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/oclstdlib/OCLstdlibTables.java
+++ b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/oclstdlib/OCLstdlibTables.java
@@ -1058,21 +1058,21 @@
 			Fragments._Bag__Collection /* 1 */,
 			Fragments._Bag__Bag /* 2 */
 		};
-		private static final @NonNull int[] __Bag = { 1,1,1 };
+		private static final int[] __Bag = { 1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Boolean =
 		{
 			Fragments._Boolean__OclAny /* 0 */,
 			Fragments._Boolean__Boolean /* 1 */
 		};
-		private static final @NonNull int[] __Boolean = { 1,1 };
+		private static final int[] __Boolean = { 1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Collection =
 		{
 			Fragments._Collection__OclAny /* 0 */,
 			Fragments._Collection__Collection /* 1 */
 		};
-		private static final @NonNull int[] __Collection = { 1,1 };
+		private static final int[] __Collection = { 1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Integer =
 		{
@@ -1082,34 +1082,34 @@
 			Fragments._Integer__Real /* 2 */,
 			Fragments._Integer__Integer /* 3 */
 		};
-		private static final @NonNull int[] __Integer = { 1,2,1,1 };
+		private static final int[] __Integer = { 1,2,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Map =
 		{
 			Fragments._Map__OclAny /* 0 */,
 			Fragments._Map__Map /* 1 */
 		};
-		private static final @NonNull int[] __Map = { 1,1 };
+		private static final int[] __Map = { 1,1 };
 
 		private static final @NonNull ExecutorFragment[] _OclAny =
 		{
 			Fragments._OclAny__OclAny /* 0 */
 		};
-		private static final @NonNull int[] __OclAny = { 1 };
+		private static final int[] __OclAny = { 1 };
 
 		private static final @NonNull ExecutorFragment[] _OclComparable =
 		{
 			Fragments._OclComparable__OclAny /* 0 */,
 			Fragments._OclComparable__OclComparable /* 1 */
 		};
-		private static final @NonNull int[] __OclComparable = { 1,1 };
+		private static final int[] __OclComparable = { 1,1 };
 
 		private static final @NonNull ExecutorFragment[] _OclElement =
 		{
 			Fragments._OclElement__OclAny /* 0 */,
 			Fragments._OclElement__OclElement /* 1 */
 		};
-		private static final @NonNull int[] __OclElement = { 1,1 };
+		private static final int[] __OclElement = { 1,1 };
 
 		private static final @NonNull ExecutorFragment[] _OclInvalid =
 		{
@@ -1117,49 +1117,49 @@
 			Fragments._OclInvalid__OclVoid /* 1 */,
 			Fragments._OclInvalid__OclInvalid /* 2 */
 		};
-		private static final @NonNull int[] __OclInvalid = { 1,1,1 };
+		private static final int[] __OclInvalid = { 1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _OclLambda =
 		{
 			Fragments._OclLambda__OclAny /* 0 */,
 			Fragments._OclLambda__OclLambda /* 1 */
 		};
-		private static final @NonNull int[] __OclLambda = { 1,1 };
+		private static final int[] __OclLambda = { 1,1 };
 
 		private static final @NonNull ExecutorFragment[] _OclMessage =
 		{
 			Fragments._OclMessage__OclAny /* 0 */,
 			Fragments._OclMessage__OclMessage /* 1 */
 		};
-		private static final @NonNull int[] __OclMessage = { 1,1 };
+		private static final int[] __OclMessage = { 1,1 };
 
 		private static final @NonNull ExecutorFragment[] _OclSelf =
 		{
 			Fragments._OclSelf__OclAny /* 0 */,
 			Fragments._OclSelf__OclSelf /* 1 */
 		};
-		private static final @NonNull int[] __OclSelf = { 1,1 };
+		private static final int[] __OclSelf = { 1,1 };
 
 		private static final @NonNull ExecutorFragment[] _OclState =
 		{
 			Fragments._OclState__OclAny /* 0 */,
 			Fragments._OclState__OclState /* 1 */
 		};
-		private static final @NonNull int[] __OclState = { 1,1 };
+		private static final int[] __OclState = { 1,1 };
 
 		private static final @NonNull ExecutorFragment[] _OclSummable =
 		{
 			Fragments._OclSummable__OclAny /* 0 */,
 			Fragments._OclSummable__OclSummable /* 1 */
 		};
-		private static final @NonNull int[] __OclSummable = { 1,1 };
+		private static final int[] __OclSummable = { 1,1 };
 
 		private static final @NonNull ExecutorFragment[] _OclTuple =
 		{
 			Fragments._OclTuple__OclAny /* 0 */,
 			Fragments._OclTuple__OclTuple /* 1 */
 		};
-		private static final @NonNull int[] __OclTuple = { 1,1 };
+		private static final int[] __OclTuple = { 1,1 };
 
 		private static final @NonNull ExecutorFragment[] _OclType =
 		{
@@ -1167,14 +1167,14 @@
 			Fragments._OclType__OclElement /* 1 */,
 			Fragments._OclType__OclType /* 2 */
 		};
-		private static final @NonNull int[] __OclType = { 1,1,1 };
+		private static final int[] __OclType = { 1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _OclVoid =
 		{
 			Fragments._OclVoid__OclAny /* 0 */,
 			Fragments._OclVoid__OclVoid /* 1 */
 		};
-		private static final @NonNull int[] __OclVoid = { 1,1 };
+		private static final int[] __OclVoid = { 1,1 };
 
 		private static final @NonNull ExecutorFragment[] _OrderedCollection =
 		{
@@ -1182,7 +1182,7 @@
 			Fragments._OrderedCollection__Collection /* 1 */,
 			Fragments._OrderedCollection__OrderedCollection /* 2 */
 		};
-		private static final @NonNull int[] __OrderedCollection = { 1,1,1 };
+		private static final int[] __OrderedCollection = { 1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _OrderedSet =
 		{
@@ -1192,7 +1192,7 @@
 			Fragments._OrderedSet__UniqueCollection /* 2 */,
 			Fragments._OrderedSet__OrderedSet /* 3 */
 		};
-		private static final @NonNull int[] __OrderedSet = { 1,1,2,1 };
+		private static final int[] __OrderedSet = { 1,1,2,1 };
 
 		private static final @NonNull ExecutorFragment[] _Real =
 		{
@@ -1201,7 +1201,7 @@
 			Fragments._Real__OclSummable /* 1 */,
 			Fragments._Real__Real /* 2 */
 		};
-		private static final @NonNull int[] __Real = { 1,2,1 };
+		private static final int[] __Real = { 1,2,1 };
 
 		private static final @NonNull ExecutorFragment[] _Sequence =
 		{
@@ -1210,7 +1210,7 @@
 			Fragments._Sequence__OrderedCollection /* 2 */,
 			Fragments._Sequence__Sequence /* 3 */
 		};
-		private static final @NonNull int[] __Sequence = { 1,1,1,1 };
+		private static final int[] __Sequence = { 1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Set =
 		{
@@ -1219,7 +1219,7 @@
 			Fragments._Set__UniqueCollection /* 2 */,
 			Fragments._Set__Set /* 3 */
 		};
-		private static final @NonNull int[] __Set = { 1,1,1,1 };
+		private static final int[] __Set = { 1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _String =
 		{
@@ -1228,7 +1228,7 @@
 			Fragments._String__OclSummable /* 1 */,
 			Fragments._String__String /* 2 */
 		};
-		private static final @NonNull int[] __String = { 1,2,1 };
+		private static final int[] __String = { 1,2,1 };
 
 		private static final @NonNull ExecutorFragment[] _UniqueCollection =
 		{
@@ -1236,7 +1236,7 @@
 			Fragments._UniqueCollection__Collection /* 1 */,
 			Fragments._UniqueCollection__UniqueCollection /* 2 */
 		};
-		private static final @NonNull int[] __UniqueCollection = { 1,1,1 };
+		private static final int[] __UniqueCollection = { 1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _UnlimitedNatural =
 		{
@@ -1244,7 +1244,7 @@
 			Fragments._UnlimitedNatural__OclComparable /* 1 */,
 			Fragments._UnlimitedNatural__UnlimitedNatural /* 2 */
 		};
-		private static final @NonNull int[] __UnlimitedNatural = { 1,1,1 };
+		private static final int[] __UnlimitedNatural = { 1,1,1 };
 
 		/**
 		 *	Install the fragment descriptors in the class descriptors.
diff --git a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/util/AbstractDelegatingVisitor.java b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/util/AbstractDelegatingVisitor.java
index 6ae7546..43989b1 100644
--- a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/util/AbstractDelegatingVisitor.java
+++ b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/util/AbstractDelegatingVisitor.java
@@ -52,607 +52,607 @@
 	}
 
 	@Override
-	public @Nullable R visiting(@NonNull org.eclipse.ocl.pivot.util.Visitable visitable) {
+	public @Nullable R visiting(org.eclipse.ocl.pivot.util.@NonNull Visitable visitable) {
 		return delegate.visiting(visitable);
 	}
 
 	@Override
-	public @Nullable R visitAnnotation(@NonNull org.eclipse.ocl.pivot.Annotation object) {
+	public @Nullable R visitAnnotation(org.eclipse.ocl.pivot.@NonNull Annotation object) {
 		return delegate.visitAnnotation(object);
 	}
 
 	@Override
-	public @Nullable R visitAnyType(@NonNull org.eclipse.ocl.pivot.AnyType object) {
+	public @Nullable R visitAnyType(org.eclipse.ocl.pivot.@NonNull AnyType object) {
 		return delegate.visitAnyType(object);
 	}
 
 	@Override
-	public @Nullable R visitAssociationClass(@NonNull org.eclipse.ocl.pivot.AssociationClass object) {
+	public @Nullable R visitAssociationClass(org.eclipse.ocl.pivot.@NonNull AssociationClass object) {
 		return delegate.visitAssociationClass(object);
 	}
 
 	@Override
-	public @Nullable R visitAssociationClassCallExp(@NonNull org.eclipse.ocl.pivot.AssociationClassCallExp object) {
+	public @Nullable R visitAssociationClassCallExp(org.eclipse.ocl.pivot.@NonNull AssociationClassCallExp object) {
 		return delegate.visitAssociationClassCallExp(object);
 	}
 
 	@Override
-	public @Nullable R visitBagType(@NonNull org.eclipse.ocl.pivot.BagType object) {
+	public @Nullable R visitBagType(org.eclipse.ocl.pivot.@NonNull BagType object) {
 		return delegate.visitBagType(object);
 	}
 
 	@Override
-	public @Nullable R visitBehavior(@NonNull org.eclipse.ocl.pivot.Behavior object) {
+	public @Nullable R visitBehavior(org.eclipse.ocl.pivot.@NonNull Behavior object) {
 		return delegate.visitBehavior(object);
 	}
 
 	@Override
-	public @Nullable R visitBooleanLiteralExp(@NonNull org.eclipse.ocl.pivot.BooleanLiteralExp object) {
+	public @Nullable R visitBooleanLiteralExp(org.eclipse.ocl.pivot.@NonNull BooleanLiteralExp object) {
 		return delegate.visitBooleanLiteralExp(object);
 	}
 
 	@Override
-	public @Nullable R visitCallExp(@NonNull org.eclipse.ocl.pivot.CallExp object) {
+	public @Nullable R visitCallExp(org.eclipse.ocl.pivot.@NonNull CallExp object) {
 		return delegate.visitCallExp(object);
 	}
 
 	@Override
-	public @Nullable R visitCallOperationAction(@NonNull org.eclipse.ocl.pivot.CallOperationAction object) {
+	public @Nullable R visitCallOperationAction(org.eclipse.ocl.pivot.@NonNull CallOperationAction object) {
 		return delegate.visitCallOperationAction(object);
 	}
 
 	@Override
-	public @Nullable R visitClass(@NonNull org.eclipse.ocl.pivot.Class object) {
+	public @Nullable R visitClass(org.eclipse.ocl.pivot.@NonNull Class object) {
 		return delegate.visitClass(object);
 	}
 
 	@Override
-	public @Nullable R visitCollectionItem(@NonNull org.eclipse.ocl.pivot.CollectionItem object) {
+	public @Nullable R visitCollectionItem(org.eclipse.ocl.pivot.@NonNull CollectionItem object) {
 		return delegate.visitCollectionItem(object);
 	}
 
 	@Override
-	public @Nullable R visitCollectionLiteralExp(@NonNull org.eclipse.ocl.pivot.CollectionLiteralExp object) {
+	public @Nullable R visitCollectionLiteralExp(org.eclipse.ocl.pivot.@NonNull CollectionLiteralExp object) {
 		return delegate.visitCollectionLiteralExp(object);
 	}
 
 	@Override
-	public @Nullable R visitCollectionLiteralPart(@NonNull org.eclipse.ocl.pivot.CollectionLiteralPart object) {
+	public @Nullable R visitCollectionLiteralPart(org.eclipse.ocl.pivot.@NonNull CollectionLiteralPart object) {
 		return delegate.visitCollectionLiteralPart(object);
 	}
 
 	@Override
-	public @Nullable R visitCollectionRange(@NonNull org.eclipse.ocl.pivot.CollectionRange object) {
+	public @Nullable R visitCollectionRange(org.eclipse.ocl.pivot.@NonNull CollectionRange object) {
 		return delegate.visitCollectionRange(object);
 	}
 
 	@Override
-	public @Nullable R visitCollectionType(@NonNull org.eclipse.ocl.pivot.CollectionType object) {
+	public @Nullable R visitCollectionType(org.eclipse.ocl.pivot.@NonNull CollectionType object) {
 		return delegate.visitCollectionType(object);
 	}
 
 	@Override
-	public @Nullable R visitComment(@NonNull org.eclipse.ocl.pivot.Comment object) {
+	public @Nullable R visitComment(org.eclipse.ocl.pivot.@NonNull Comment object) {
 		return delegate.visitComment(object);
 	}
 
 	@Override
-	public @Nullable R visitCompleteClass(@NonNull org.eclipse.ocl.pivot.CompleteClass object) {
+	public @Nullable R visitCompleteClass(org.eclipse.ocl.pivot.@NonNull CompleteClass object) {
 		return delegate.visitCompleteClass(object);
 	}
 
 	@Override
-	public @Nullable R visitCompleteEnvironment(@NonNull org.eclipse.ocl.pivot.CompleteEnvironment object) {
+	public @Nullable R visitCompleteEnvironment(org.eclipse.ocl.pivot.@NonNull CompleteEnvironment object) {
 		return delegate.visitCompleteEnvironment(object);
 	}
 
 	@Override
-	public @Nullable R visitCompleteModel(@NonNull org.eclipse.ocl.pivot.CompleteModel object) {
+	public @Nullable R visitCompleteModel(org.eclipse.ocl.pivot.@NonNull CompleteModel object) {
 		return delegate.visitCompleteModel(object);
 	}
 
 	@Override
-	public @Nullable R visitCompletePackage(@NonNull org.eclipse.ocl.pivot.CompletePackage object) {
+	public @Nullable R visitCompletePackage(org.eclipse.ocl.pivot.@NonNull CompletePackage object) {
 		return delegate.visitCompletePackage(object);
 	}
 
 	@Override
-	public @Nullable R visitConnectionPointReference(@NonNull org.eclipse.ocl.pivot.ConnectionPointReference object) {
+	public @Nullable R visitConnectionPointReference(org.eclipse.ocl.pivot.@NonNull ConnectionPointReference object) {
 		return delegate.visitConnectionPointReference(object);
 	}
 
 	@Override
-	public @Nullable R visitConstraint(@NonNull org.eclipse.ocl.pivot.Constraint object) {
+	public @Nullable R visitConstraint(org.eclipse.ocl.pivot.@NonNull Constraint object) {
 		return delegate.visitConstraint(object);
 	}
 
 	@Override
-	public @Nullable R visitDataType(@NonNull org.eclipse.ocl.pivot.DataType object) {
+	public @Nullable R visitDataType(org.eclipse.ocl.pivot.@NonNull DataType object) {
 		return delegate.visitDataType(object);
 	}
 
 	@Override
-	public @Nullable R visitDetail(@NonNull org.eclipse.ocl.pivot.Detail object) {
+	public @Nullable R visitDetail(org.eclipse.ocl.pivot.@NonNull Detail object) {
 		return delegate.visitDetail(object);
 	}
 
 	@Override
-	public @Nullable R visitDynamicBehavior(@NonNull org.eclipse.ocl.pivot.DynamicBehavior object) {
+	public @Nullable R visitDynamicBehavior(org.eclipse.ocl.pivot.@NonNull DynamicBehavior object) {
 		return delegate.visitDynamicBehavior(object);
 	}
 
 	@Override
-	public @Nullable R visitDynamicElement(@NonNull org.eclipse.ocl.pivot.DynamicElement object) {
+	public @Nullable R visitDynamicElement(org.eclipse.ocl.pivot.@NonNull DynamicElement object) {
 		return delegate.visitDynamicElement(object);
 	}
 
 	@Override
-	public @Nullable R visitDynamicProperty(@NonNull org.eclipse.ocl.pivot.DynamicProperty object) {
+	public @Nullable R visitDynamicProperty(org.eclipse.ocl.pivot.@NonNull DynamicProperty object) {
 		return delegate.visitDynamicProperty(object);
 	}
 
 	@Override
-	public @Nullable R visitDynamicType(@NonNull org.eclipse.ocl.pivot.DynamicType object) {
+	public @Nullable R visitDynamicType(org.eclipse.ocl.pivot.@NonNull DynamicType object) {
 		return delegate.visitDynamicType(object);
 	}
 
 	@Override
-	public @Nullable R visitDynamicValueSpecification(@NonNull org.eclipse.ocl.pivot.DynamicValueSpecification object) {
+	public @Nullable R visitDynamicValueSpecification(org.eclipse.ocl.pivot.@NonNull DynamicValueSpecification object) {
 		return delegate.visitDynamicValueSpecification(object);
 	}
 
 	@Override
-	public @Nullable R visitElement(@NonNull org.eclipse.ocl.pivot.Element object) {
+	public @Nullable R visitElement(org.eclipse.ocl.pivot.@NonNull Element object) {
 		return delegate.visitElement(object);
 	}
 
 	@Override
-	public @Nullable R visitElementExtension(@NonNull org.eclipse.ocl.pivot.ElementExtension object) {
+	public @Nullable R visitElementExtension(org.eclipse.ocl.pivot.@NonNull ElementExtension object) {
 		return delegate.visitElementExtension(object);
 	}
 
 	@Override
-	public @Nullable R visitEnumLiteralExp(@NonNull org.eclipse.ocl.pivot.EnumLiteralExp object) {
+	public @Nullable R visitEnumLiteralExp(org.eclipse.ocl.pivot.@NonNull EnumLiteralExp object) {
 		return delegate.visitEnumLiteralExp(object);
 	}
 
 	@Override
-	public @Nullable R visitEnumeration(@NonNull org.eclipse.ocl.pivot.Enumeration object) {
+	public @Nullable R visitEnumeration(org.eclipse.ocl.pivot.@NonNull Enumeration object) {
 		return delegate.visitEnumeration(object);
 	}
 
 	@Override
-	public @Nullable R visitEnumerationLiteral(@NonNull org.eclipse.ocl.pivot.EnumerationLiteral object) {
+	public @Nullable R visitEnumerationLiteral(org.eclipse.ocl.pivot.@NonNull EnumerationLiteral object) {
 		return delegate.visitEnumerationLiteral(object);
 	}
 
 	@Override
-	public @Nullable R visitExpressionInOCL(@NonNull org.eclipse.ocl.pivot.ExpressionInOCL object) {
+	public @Nullable R visitExpressionInOCL(org.eclipse.ocl.pivot.@NonNull ExpressionInOCL object) {
 		return delegate.visitExpressionInOCL(object);
 	}
 
 	@Override
-	public @Nullable R visitFeature(@NonNull org.eclipse.ocl.pivot.Feature object) {
+	public @Nullable R visitFeature(org.eclipse.ocl.pivot.@NonNull Feature object) {
 		return delegate.visitFeature(object);
 	}
 
 	@Override
-	public @Nullable R visitFeatureCallExp(@NonNull org.eclipse.ocl.pivot.FeatureCallExp object) {
+	public @Nullable R visitFeatureCallExp(org.eclipse.ocl.pivot.@NonNull FeatureCallExp object) {
 		return delegate.visitFeatureCallExp(object);
 	}
 
 	@Override
-	public @Nullable R visitFinalState(@NonNull org.eclipse.ocl.pivot.FinalState object) {
+	public @Nullable R visitFinalState(org.eclipse.ocl.pivot.@NonNull FinalState object) {
 		return delegate.visitFinalState(object);
 	}
 
 	@Override
-	public @Nullable R visitIfExp(@NonNull org.eclipse.ocl.pivot.IfExp object) {
+	public @Nullable R visitIfExp(org.eclipse.ocl.pivot.@NonNull IfExp object) {
 		return delegate.visitIfExp(object);
 	}
 
 	@Override
-	public @Nullable R visitImport(@NonNull org.eclipse.ocl.pivot.Import object) {
+	public @Nullable R visitImport(org.eclipse.ocl.pivot.@NonNull Import object) {
 		return delegate.visitImport(object);
 	}
 
 	@Override
-	public @Nullable R visitInstanceSpecification(@NonNull org.eclipse.ocl.pivot.InstanceSpecification object) {
+	public @Nullable R visitInstanceSpecification(org.eclipse.ocl.pivot.@NonNull InstanceSpecification object) {
 		return delegate.visitInstanceSpecification(object);
 	}
 
 	@Override
-	public @Nullable R visitIntegerLiteralExp(@NonNull org.eclipse.ocl.pivot.IntegerLiteralExp object) {
+	public @Nullable R visitIntegerLiteralExp(org.eclipse.ocl.pivot.@NonNull IntegerLiteralExp object) {
 		return delegate.visitIntegerLiteralExp(object);
 	}
 
 	@Override
-	public @Nullable R visitInvalidLiteralExp(@NonNull org.eclipse.ocl.pivot.InvalidLiteralExp object) {
+	public @Nullable R visitInvalidLiteralExp(org.eclipse.ocl.pivot.@NonNull InvalidLiteralExp object) {
 		return delegate.visitInvalidLiteralExp(object);
 	}
 
 	@Override
-	public @Nullable R visitInvalidType(@NonNull org.eclipse.ocl.pivot.InvalidType object) {
+	public @Nullable R visitInvalidType(org.eclipse.ocl.pivot.@NonNull InvalidType object) {
 		return delegate.visitInvalidType(object);
 	}
 
 	@Override
-	public @Nullable R visitIterateExp(@NonNull org.eclipse.ocl.pivot.IterateExp object) {
+	public @Nullable R visitIterateExp(org.eclipse.ocl.pivot.@NonNull IterateExp object) {
 		return delegate.visitIterateExp(object);
 	}
 
 	@Override
-	public @Nullable R visitIteration(@NonNull org.eclipse.ocl.pivot.Iteration object) {
+	public @Nullable R visitIteration(org.eclipse.ocl.pivot.@NonNull Iteration object) {
 		return delegate.visitIteration(object);
 	}
 
 	@Override
-	public @Nullable R visitIteratorExp(@NonNull org.eclipse.ocl.pivot.IteratorExp object) {
+	public @Nullable R visitIteratorExp(org.eclipse.ocl.pivot.@NonNull IteratorExp object) {
 		return delegate.visitIteratorExp(object);
 	}
 
 	@Override
-	public @Nullable R visitLambdaType(@NonNull org.eclipse.ocl.pivot.LambdaType object) {
+	public @Nullable R visitLambdaType(org.eclipse.ocl.pivot.@NonNull LambdaType object) {
 		return delegate.visitLambdaType(object);
 	}
 
 	@Override
-	public @Nullable R visitLanguageExpression(@NonNull org.eclipse.ocl.pivot.LanguageExpression object) {
+	public @Nullable R visitLanguageExpression(org.eclipse.ocl.pivot.@NonNull LanguageExpression object) {
 		return delegate.visitLanguageExpression(object);
 	}
 
 	@Override
-	public @Nullable R visitLetExp(@NonNull org.eclipse.ocl.pivot.LetExp object) {
+	public @Nullable R visitLetExp(org.eclipse.ocl.pivot.@NonNull LetExp object) {
 		return delegate.visitLetExp(object);
 	}
 
 	@Override
-	public @Nullable R visitLibrary(@NonNull org.eclipse.ocl.pivot.Library object) {
+	public @Nullable R visitLibrary(org.eclipse.ocl.pivot.@NonNull Library object) {
 		return delegate.visitLibrary(object);
 	}
 
 	@Override
-	public @Nullable R visitLiteralExp(@NonNull org.eclipse.ocl.pivot.LiteralExp object) {
+	public @Nullable R visitLiteralExp(org.eclipse.ocl.pivot.@NonNull LiteralExp object) {
 		return delegate.visitLiteralExp(object);
 	}
 
 	@Override
-	public @Nullable R visitLoopExp(@NonNull org.eclipse.ocl.pivot.LoopExp object) {
+	public @Nullable R visitLoopExp(org.eclipse.ocl.pivot.@NonNull LoopExp object) {
 		return delegate.visitLoopExp(object);
 	}
 
 	@Override
-	public @Nullable R visitMapLiteralExp(@NonNull org.eclipse.ocl.pivot.MapLiteralExp object) {
+	public @Nullable R visitMapLiteralExp(org.eclipse.ocl.pivot.@NonNull MapLiteralExp object) {
 		return delegate.visitMapLiteralExp(object);
 	}
 
 	@Override
-	public @Nullable R visitMapLiteralPart(@NonNull org.eclipse.ocl.pivot.MapLiteralPart object) {
+	public @Nullable R visitMapLiteralPart(org.eclipse.ocl.pivot.@NonNull MapLiteralPart object) {
 		return delegate.visitMapLiteralPart(object);
 	}
 
 	@Override
-	public @Nullable R visitMapType(@NonNull org.eclipse.ocl.pivot.MapType object) {
+	public @Nullable R visitMapType(org.eclipse.ocl.pivot.@NonNull MapType object) {
 		return delegate.visitMapType(object);
 	}
 
 	@Override
-	public @Nullable R visitMessageExp(@NonNull org.eclipse.ocl.pivot.MessageExp object) {
+	public @Nullable R visitMessageExp(org.eclipse.ocl.pivot.@NonNull MessageExp object) {
 		return delegate.visitMessageExp(object);
 	}
 
 	@Override
-	public @Nullable R visitMessageType(@NonNull org.eclipse.ocl.pivot.MessageType object) {
+	public @Nullable R visitMessageType(org.eclipse.ocl.pivot.@NonNull MessageType object) {
 		return delegate.visitMessageType(object);
 	}
 
 	@Override
-	public @Nullable R visitModel(@NonNull org.eclipse.ocl.pivot.Model object) {
+	public @Nullable R visitModel(org.eclipse.ocl.pivot.@NonNull Model object) {
 		return delegate.visitModel(object);
 	}
 
 	@Override
-	public @Nullable R visitNamedElement(@NonNull org.eclipse.ocl.pivot.NamedElement object) {
+	public @Nullable R visitNamedElement(org.eclipse.ocl.pivot.@NonNull NamedElement object) {
 		return delegate.visitNamedElement(object);
 	}
 
 	@Override
-	public @Nullable R visitNamespace(@NonNull org.eclipse.ocl.pivot.Namespace object) {
+	public @Nullable R visitNamespace(org.eclipse.ocl.pivot.@NonNull Namespace object) {
 		return delegate.visitNamespace(object);
 	}
 
 	@Override
-	public @Nullable R visitNavigationCallExp(@NonNull org.eclipse.ocl.pivot.NavigationCallExp object) {
+	public @Nullable R visitNavigationCallExp(org.eclipse.ocl.pivot.@NonNull NavigationCallExp object) {
 		return delegate.visitNavigationCallExp(object);
 	}
 
 	@Override
-	public @Nullable R visitNullLiteralExp(@NonNull org.eclipse.ocl.pivot.NullLiteralExp object) {
+	public @Nullable R visitNullLiteralExp(org.eclipse.ocl.pivot.@NonNull NullLiteralExp object) {
 		return delegate.visitNullLiteralExp(object);
 	}
 
 	@Override
-	public @Nullable R visitNumericLiteralExp(@NonNull org.eclipse.ocl.pivot.NumericLiteralExp object) {
+	public @Nullable R visitNumericLiteralExp(org.eclipse.ocl.pivot.@NonNull NumericLiteralExp object) {
 		return delegate.visitNumericLiteralExp(object);
 	}
 
 	@Override
-	public @Nullable R visitOCLExpression(@NonNull org.eclipse.ocl.pivot.OCLExpression object) {
+	public @Nullable R visitOCLExpression(org.eclipse.ocl.pivot.@NonNull OCLExpression object) {
 		return delegate.visitOCLExpression(object);
 	}
 
 	@Override
-	public @Nullable R visitOperation(@NonNull org.eclipse.ocl.pivot.Operation object) {
+	public @Nullable R visitOperation(org.eclipse.ocl.pivot.@NonNull Operation object) {
 		return delegate.visitOperation(object);
 	}
 
 	@Override
-	public @Nullable R visitOperationCallExp(@NonNull org.eclipse.ocl.pivot.OperationCallExp object) {
+	public @Nullable R visitOperationCallExp(org.eclipse.ocl.pivot.@NonNull OperationCallExp object) {
 		return delegate.visitOperationCallExp(object);
 	}
 
 	@Override
-	public @Nullable R visitOppositePropertyCallExp(@NonNull org.eclipse.ocl.pivot.OppositePropertyCallExp object) {
+	public @Nullable R visitOppositePropertyCallExp(org.eclipse.ocl.pivot.@NonNull OppositePropertyCallExp object) {
 		return delegate.visitOppositePropertyCallExp(object);
 	}
 
 	@Override
-	public @Nullable R visitOrderedSetType(@NonNull org.eclipse.ocl.pivot.OrderedSetType object) {
+	public @Nullable R visitOrderedSetType(org.eclipse.ocl.pivot.@NonNull OrderedSetType object) {
 		return delegate.visitOrderedSetType(object);
 	}
 
 	@Override
-	public @Nullable R visitOrphanCompletePackage(@NonNull org.eclipse.ocl.pivot.OrphanCompletePackage object) {
+	public @Nullable R visitOrphanCompletePackage(org.eclipse.ocl.pivot.@NonNull OrphanCompletePackage object) {
 		return delegate.visitOrphanCompletePackage(object);
 	}
 
 	@Override
-	public @Nullable R visitPackage(@NonNull org.eclipse.ocl.pivot.Package object) {
+	public @Nullable R visitPackage(org.eclipse.ocl.pivot.@NonNull Package object) {
 		return delegate.visitPackage(object);
 	}
 
 	@Override
-	public @Nullable R visitParameter(@NonNull org.eclipse.ocl.pivot.Parameter object) {
+	public @Nullable R visitParameter(org.eclipse.ocl.pivot.@NonNull Parameter object) {
 		return delegate.visitParameter(object);
 	}
 
 	@Override
-	public @Nullable R visitPrecedence(@NonNull org.eclipse.ocl.pivot.Precedence object) {
+	public @Nullable R visitPrecedence(org.eclipse.ocl.pivot.@NonNull Precedence object) {
 		return delegate.visitPrecedence(object);
 	}
 
 	@Override
-	public @Nullable R visitPrimitiveCompletePackage(@NonNull org.eclipse.ocl.pivot.PrimitiveCompletePackage object) {
+	public @Nullable R visitPrimitiveCompletePackage(org.eclipse.ocl.pivot.@NonNull PrimitiveCompletePackage object) {
 		return delegate.visitPrimitiveCompletePackage(object);
 	}
 
 	@Override
-	public @Nullable R visitPrimitiveLiteralExp(@NonNull org.eclipse.ocl.pivot.PrimitiveLiteralExp object) {
+	public @Nullable R visitPrimitiveLiteralExp(org.eclipse.ocl.pivot.@NonNull PrimitiveLiteralExp object) {
 		return delegate.visitPrimitiveLiteralExp(object);
 	}
 
 	@Override
-	public @Nullable R visitPrimitiveType(@NonNull org.eclipse.ocl.pivot.PrimitiveType object) {
+	public @Nullable R visitPrimitiveType(org.eclipse.ocl.pivot.@NonNull PrimitiveType object) {
 		return delegate.visitPrimitiveType(object);
 	}
 
 	@Override
-	public @Nullable R visitProfile(@NonNull org.eclipse.ocl.pivot.Profile object) {
+	public @Nullable R visitProfile(org.eclipse.ocl.pivot.@NonNull Profile object) {
 		return delegate.visitProfile(object);
 	}
 
 	@Override
-	public @Nullable R visitProfileApplication(@NonNull org.eclipse.ocl.pivot.ProfileApplication object) {
+	public @Nullable R visitProfileApplication(org.eclipse.ocl.pivot.@NonNull ProfileApplication object) {
 		return delegate.visitProfileApplication(object);
 	}
 
 	@Override
-	public @Nullable R visitProperty(@NonNull org.eclipse.ocl.pivot.Property object) {
+	public @Nullable R visitProperty(org.eclipse.ocl.pivot.@NonNull Property object) {
 		return delegate.visitProperty(object);
 	}
 
 	@Override
-	public @Nullable R visitPropertyCallExp(@NonNull org.eclipse.ocl.pivot.PropertyCallExp object) {
+	public @Nullable R visitPropertyCallExp(org.eclipse.ocl.pivot.@NonNull PropertyCallExp object) {
 		return delegate.visitPropertyCallExp(object);
 	}
 
 	@Override
-	public @Nullable R visitPseudostate(@NonNull org.eclipse.ocl.pivot.Pseudostate object) {
+	public @Nullable R visitPseudostate(org.eclipse.ocl.pivot.@NonNull Pseudostate object) {
 		return delegate.visitPseudostate(object);
 	}
 
 	@Override
-	public @Nullable R visitRealLiteralExp(@NonNull org.eclipse.ocl.pivot.RealLiteralExp object) {
+	public @Nullable R visitRealLiteralExp(org.eclipse.ocl.pivot.@NonNull RealLiteralExp object) {
 		return delegate.visitRealLiteralExp(object);
 	}
 
 	@Override
-	public @Nullable R visitRegion(@NonNull org.eclipse.ocl.pivot.Region object) {
+	public @Nullable R visitRegion(org.eclipse.ocl.pivot.@NonNull Region object) {
 		return delegate.visitRegion(object);
 	}
 
 	@Override
-	public @Nullable R visitSelfType(@NonNull org.eclipse.ocl.pivot.SelfType object) {
+	public @Nullable R visitSelfType(org.eclipse.ocl.pivot.@NonNull SelfType object) {
 		return delegate.visitSelfType(object);
 	}
 
 	@Override
-	public @Nullable R visitSendSignalAction(@NonNull org.eclipse.ocl.pivot.SendSignalAction object) {
+	public @Nullable R visitSendSignalAction(org.eclipse.ocl.pivot.@NonNull SendSignalAction object) {
 		return delegate.visitSendSignalAction(object);
 	}
 
 	@Override
-	public @Nullable R visitSequenceType(@NonNull org.eclipse.ocl.pivot.SequenceType object) {
+	public @Nullable R visitSequenceType(org.eclipse.ocl.pivot.@NonNull SequenceType object) {
 		return delegate.visitSequenceType(object);
 	}
 
 	@Override
-	public @Nullable R visitSetType(@NonNull org.eclipse.ocl.pivot.SetType object) {
+	public @Nullable R visitSetType(org.eclipse.ocl.pivot.@NonNull SetType object) {
 		return delegate.visitSetType(object);
 	}
 
 	@Override
-	public @Nullable R visitShadowExp(@NonNull org.eclipse.ocl.pivot.ShadowExp object) {
+	public @Nullable R visitShadowExp(org.eclipse.ocl.pivot.@NonNull ShadowExp object) {
 		return delegate.visitShadowExp(object);
 	}
 
 	@Override
-	public @Nullable R visitShadowPart(@NonNull org.eclipse.ocl.pivot.ShadowPart object) {
+	public @Nullable R visitShadowPart(org.eclipse.ocl.pivot.@NonNull ShadowPart object) {
 		return delegate.visitShadowPart(object);
 	}
 
 	@Override
-	public @Nullable R visitSignal(@NonNull org.eclipse.ocl.pivot.Signal object) {
+	public @Nullable R visitSignal(org.eclipse.ocl.pivot.@NonNull Signal object) {
 		return delegate.visitSignal(object);
 	}
 
 	@Override
-	public @Nullable R visitSlot(@NonNull org.eclipse.ocl.pivot.Slot object) {
+	public @Nullable R visitSlot(org.eclipse.ocl.pivot.@NonNull Slot object) {
 		return delegate.visitSlot(object);
 	}
 
 	@Override
-	public @Nullable R visitStandardLibrary(@NonNull org.eclipse.ocl.pivot.StandardLibrary object) {
+	public @Nullable R visitStandardLibrary(org.eclipse.ocl.pivot.@NonNull StandardLibrary object) {
 		return delegate.visitStandardLibrary(object);
 	}
 
 	@Override
-	public @Nullable R visitState(@NonNull org.eclipse.ocl.pivot.State object) {
+	public @Nullable R visitState(org.eclipse.ocl.pivot.@NonNull State object) {
 		return delegate.visitState(object);
 	}
 
 	@Override
-	public @Nullable R visitStateExp(@NonNull org.eclipse.ocl.pivot.StateExp object) {
+	public @Nullable R visitStateExp(org.eclipse.ocl.pivot.@NonNull StateExp object) {
 		return delegate.visitStateExp(object);
 	}
 
 	@Override
-	public @Nullable R visitStateMachine(@NonNull org.eclipse.ocl.pivot.StateMachine object) {
+	public @Nullable R visitStateMachine(org.eclipse.ocl.pivot.@NonNull StateMachine object) {
 		return delegate.visitStateMachine(object);
 	}
 
 	@Override
-	public @Nullable R visitStereotype(@NonNull org.eclipse.ocl.pivot.Stereotype object) {
+	public @Nullable R visitStereotype(org.eclipse.ocl.pivot.@NonNull Stereotype object) {
 		return delegate.visitStereotype(object);
 	}
 
 	@Override
-	public @Nullable R visitStereotypeExtender(@NonNull org.eclipse.ocl.pivot.StereotypeExtender object) {
+	public @Nullable R visitStereotypeExtender(org.eclipse.ocl.pivot.@NonNull StereotypeExtender object) {
 		return delegate.visitStereotypeExtender(object);
 	}
 
 	@Override
-	public @Nullable R visitStringLiteralExp(@NonNull org.eclipse.ocl.pivot.StringLiteralExp object) {
+	public @Nullable R visitStringLiteralExp(org.eclipse.ocl.pivot.@NonNull StringLiteralExp object) {
 		return delegate.visitStringLiteralExp(object);
 	}
 
 	@Override
-	public @Nullable R visitTemplateBinding(@NonNull org.eclipse.ocl.pivot.TemplateBinding object) {
+	public @Nullable R visitTemplateBinding(org.eclipse.ocl.pivot.@NonNull TemplateBinding object) {
 		return delegate.visitTemplateBinding(object);
 	}
 
 	@Override
-	public @Nullable R visitTemplateParameter(@NonNull org.eclipse.ocl.pivot.TemplateParameter object) {
+	public @Nullable R visitTemplateParameter(org.eclipse.ocl.pivot.@NonNull TemplateParameter object) {
 		return delegate.visitTemplateParameter(object);
 	}
 
 	@Override
-	public @Nullable R visitTemplateParameterSubstitution(@NonNull org.eclipse.ocl.pivot.TemplateParameterSubstitution object) {
+	public @Nullable R visitTemplateParameterSubstitution(org.eclipse.ocl.pivot.@NonNull TemplateParameterSubstitution object) {
 		return delegate.visitTemplateParameterSubstitution(object);
 	}
 
 	@Override
-	public @Nullable R visitTemplateSignature(@NonNull org.eclipse.ocl.pivot.TemplateSignature object) {
+	public @Nullable R visitTemplateSignature(org.eclipse.ocl.pivot.@NonNull TemplateSignature object) {
 		return delegate.visitTemplateSignature(object);
 	}
 
 	@Override
-	public @Nullable R visitTemplateableElement(@NonNull org.eclipse.ocl.pivot.TemplateableElement object) {
+	public @Nullable R visitTemplateableElement(org.eclipse.ocl.pivot.@NonNull TemplateableElement object) {
 		return delegate.visitTemplateableElement(object);
 	}
 
 	@Override
-	public @Nullable R visitTransition(@NonNull org.eclipse.ocl.pivot.Transition object) {
+	public @Nullable R visitTransition(org.eclipse.ocl.pivot.@NonNull Transition object) {
 		return delegate.visitTransition(object);
 	}
 
 	@Override
-	public @Nullable R visitTrigger(@NonNull org.eclipse.ocl.pivot.Trigger object) {
+	public @Nullable R visitTrigger(org.eclipse.ocl.pivot.@NonNull Trigger object) {
 		return delegate.visitTrigger(object);
 	}
 
 	@Override
-	public @Nullable R visitTupleLiteralExp(@NonNull org.eclipse.ocl.pivot.TupleLiteralExp object) {
+	public @Nullable R visitTupleLiteralExp(org.eclipse.ocl.pivot.@NonNull TupleLiteralExp object) {
 		return delegate.visitTupleLiteralExp(object);
 	}
 
 	@Override
-	public @Nullable R visitTupleLiteralPart(@NonNull org.eclipse.ocl.pivot.TupleLiteralPart object) {
+	public @Nullable R visitTupleLiteralPart(org.eclipse.ocl.pivot.@NonNull TupleLiteralPart object) {
 		return delegate.visitTupleLiteralPart(object);
 	}
 
 	@Override
-	public @Nullable R visitTupleType(@NonNull org.eclipse.ocl.pivot.TupleType object) {
+	public @Nullable R visitTupleType(org.eclipse.ocl.pivot.@NonNull TupleType object) {
 		return delegate.visitTupleType(object);
 	}
 
 	@Override
-	public @Nullable R visitType(@NonNull org.eclipse.ocl.pivot.Type object) {
+	public @Nullable R visitType(org.eclipse.ocl.pivot.@NonNull Type object) {
 		return delegate.visitType(object);
 	}
 
 	@Override
-	public @Nullable R visitTypeExp(@NonNull org.eclipse.ocl.pivot.TypeExp object) {
+	public @Nullable R visitTypeExp(org.eclipse.ocl.pivot.@NonNull TypeExp object) {
 		return delegate.visitTypeExp(object);
 	}
 
 	@Override
-	public @Nullable R visitTypedElement(@NonNull org.eclipse.ocl.pivot.TypedElement object) {
+	public @Nullable R visitTypedElement(org.eclipse.ocl.pivot.@NonNull TypedElement object) {
 		return delegate.visitTypedElement(object);
 	}
 
 	@Override
-	public @Nullable R visitUnlimitedNaturalLiteralExp(@NonNull org.eclipse.ocl.pivot.UnlimitedNaturalLiteralExp object) {
+	public @Nullable R visitUnlimitedNaturalLiteralExp(org.eclipse.ocl.pivot.@NonNull UnlimitedNaturalLiteralExp object) {
 		return delegate.visitUnlimitedNaturalLiteralExp(object);
 	}
 
 	@Override
-	public @Nullable R visitUnspecifiedValueExp(@NonNull org.eclipse.ocl.pivot.UnspecifiedValueExp object) {
+	public @Nullable R visitUnspecifiedValueExp(org.eclipse.ocl.pivot.@NonNull UnspecifiedValueExp object) {
 		return delegate.visitUnspecifiedValueExp(object);
 	}
 
 	@Override
-	public @Nullable R visitValueSpecification(@NonNull org.eclipse.ocl.pivot.ValueSpecification object) {
+	public @Nullable R visitValueSpecification(org.eclipse.ocl.pivot.@NonNull ValueSpecification object) {
 		return delegate.visitValueSpecification(object);
 	}
 
 	@Override
-	public @Nullable R visitVariable(@NonNull org.eclipse.ocl.pivot.Variable object) {
+	public @Nullable R visitVariable(org.eclipse.ocl.pivot.@NonNull Variable object) {
 		return delegate.visitVariable(object);
 	}
 
 	@Override
-	public @Nullable R visitVariableDeclaration(@NonNull org.eclipse.ocl.pivot.VariableDeclaration object) {
+	public @Nullable R visitVariableDeclaration(org.eclipse.ocl.pivot.@NonNull VariableDeclaration object) {
 		return delegate.visitVariableDeclaration(object);
 	}
 
 	@Override
-	public @Nullable R visitVariableExp(@NonNull org.eclipse.ocl.pivot.VariableExp object) {
+	public @Nullable R visitVariableExp(org.eclipse.ocl.pivot.@NonNull VariableExp object) {
 		return delegate.visitVariableExp(object);
 	}
 
 	@Override
-	public @Nullable R visitVertex(@NonNull org.eclipse.ocl.pivot.Vertex object) {
+	public @Nullable R visitVertex(org.eclipse.ocl.pivot.@NonNull Vertex object) {
 		return delegate.visitVertex(object);
 	}
 
 	@Override
-	public @Nullable R visitVoidType(@NonNull org.eclipse.ocl.pivot.VoidType object) {
+	public @Nullable R visitVoidType(org.eclipse.ocl.pivot.@NonNull VoidType object) {
 		return delegate.visitVoidType(object);
 	}
 
 	@Override
-	public @Nullable R visitWildcardType(@NonNull org.eclipse.ocl.pivot.WildcardType object) {
+	public @Nullable R visitWildcardType(org.eclipse.ocl.pivot.@NonNull WildcardType object) {
 		return delegate.visitWildcardType(object);
 	}
 }
diff --git a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/util/AbstractExtendingVisitor.java b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/util/AbstractExtendingVisitor.java
index b748703..8ee22ad 100644
--- a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/util/AbstractExtendingVisitor.java
+++ b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/util/AbstractExtendingVisitor.java
@@ -39,602 +39,602 @@
 	}	
 
 	@Override
-	public @Nullable R visitAnnotation(@NonNull org.eclipse.ocl.pivot.Annotation object) {
+	public @Nullable R visitAnnotation(org.eclipse.ocl.pivot.@NonNull Annotation object) {
 		return visitNamedElement(object);
 	}
 
 	@Override
-	public @Nullable R visitAnyType(@NonNull org.eclipse.ocl.pivot.AnyType object) {
+	public @Nullable R visitAnyType(org.eclipse.ocl.pivot.@NonNull AnyType object) {
 		return visitClass(object);
 	}
 
 	@Override
-	public @Nullable R visitAssociationClass(@NonNull org.eclipse.ocl.pivot.AssociationClass object) {
+	public @Nullable R visitAssociationClass(org.eclipse.ocl.pivot.@NonNull AssociationClass object) {
 		return visitClass(object);
 	}
 
 	@Override
-	public @Nullable R visitAssociationClassCallExp(@NonNull org.eclipse.ocl.pivot.AssociationClassCallExp object) {
+	public @Nullable R visitAssociationClassCallExp(org.eclipse.ocl.pivot.@NonNull AssociationClassCallExp object) {
 		return visitNavigationCallExp(object);
 	}
 
 	@Override
-	public @Nullable R visitBagType(@NonNull org.eclipse.ocl.pivot.BagType object) {
+	public @Nullable R visitBagType(org.eclipse.ocl.pivot.@NonNull BagType object) {
 		return visitCollectionType(object);
 	}
 
 	@Override
-	public @Nullable R visitBehavior(@NonNull org.eclipse.ocl.pivot.Behavior object) {
+	public @Nullable R visitBehavior(org.eclipse.ocl.pivot.@NonNull Behavior object) {
 		return visitClass(object);
 	}
 
 	@Override
-	public @Nullable R visitBooleanLiteralExp(@NonNull org.eclipse.ocl.pivot.BooleanLiteralExp object) {
+	public @Nullable R visitBooleanLiteralExp(org.eclipse.ocl.pivot.@NonNull BooleanLiteralExp object) {
 		return visitPrimitiveLiteralExp(object);
 	}
 
 	@Override
-	public @Nullable R visitCallExp(@NonNull org.eclipse.ocl.pivot.CallExp object) {
+	public @Nullable R visitCallExp(org.eclipse.ocl.pivot.@NonNull CallExp object) {
 		return visitOCLExpression(object);
 	}
 
 	@Override
-	public @Nullable R visitCallOperationAction(@NonNull org.eclipse.ocl.pivot.CallOperationAction object) {
+	public @Nullable R visitCallOperationAction(org.eclipse.ocl.pivot.@NonNull CallOperationAction object) {
 		return visitNamedElement(object);
 	}
 
 	@Override
-	public @Nullable R visitClass(@NonNull org.eclipse.ocl.pivot.Class object) {
+	public @Nullable R visitClass(org.eclipse.ocl.pivot.@NonNull Class object) {
 		return visitType(object);
 	}
 
 	@Override
-	public @Nullable R visitCollectionItem(@NonNull org.eclipse.ocl.pivot.CollectionItem object) {
+	public @Nullable R visitCollectionItem(org.eclipse.ocl.pivot.@NonNull CollectionItem object) {
 		return visitCollectionLiteralPart(object);
 	}
 
 	@Override
-	public @Nullable R visitCollectionLiteralExp(@NonNull org.eclipse.ocl.pivot.CollectionLiteralExp object) {
+	public @Nullable R visitCollectionLiteralExp(org.eclipse.ocl.pivot.@NonNull CollectionLiteralExp object) {
 		return visitLiteralExp(object);
 	}
 
 	@Override
-	public @Nullable R visitCollectionLiteralPart(@NonNull org.eclipse.ocl.pivot.CollectionLiteralPart object) {
+	public @Nullable R visitCollectionLiteralPart(org.eclipse.ocl.pivot.@NonNull CollectionLiteralPart object) {
 		return visitTypedElement(object);
 	}
 
 	@Override
-	public @Nullable R visitCollectionRange(@NonNull org.eclipse.ocl.pivot.CollectionRange object) {
+	public @Nullable R visitCollectionRange(org.eclipse.ocl.pivot.@NonNull CollectionRange object) {
 		return visitCollectionLiteralPart(object);
 	}
 
 	@Override
-	public @Nullable R visitCollectionType(@NonNull org.eclipse.ocl.pivot.CollectionType object) {
+	public @Nullable R visitCollectionType(org.eclipse.ocl.pivot.@NonNull CollectionType object) {
 		return visitDataType(object);
 	}
 
 	@Override
-	public @Nullable R visitComment(@NonNull org.eclipse.ocl.pivot.Comment object) {
+	public @Nullable R visitComment(org.eclipse.ocl.pivot.@NonNull Comment object) {
 		return visitElement(object);
 	}
 
 	@Override
-	public @Nullable R visitCompleteClass(@NonNull org.eclipse.ocl.pivot.CompleteClass object) {
+	public @Nullable R visitCompleteClass(org.eclipse.ocl.pivot.@NonNull CompleteClass object) {
 		return visitNamedElement(object);
 	}
 
 	@Override
-	public @Nullable R visitCompleteEnvironment(@NonNull org.eclipse.ocl.pivot.CompleteEnvironment object) {
+	public @Nullable R visitCompleteEnvironment(org.eclipse.ocl.pivot.@NonNull CompleteEnvironment object) {
 		return visitElement(object);
 	}
 
 	@Override
-	public @Nullable R visitCompleteModel(@NonNull org.eclipse.ocl.pivot.CompleteModel object) {
+	public @Nullable R visitCompleteModel(org.eclipse.ocl.pivot.@NonNull CompleteModel object) {
 		return visitNamedElement(object);
 	}
 
 	@Override
-	public @Nullable R visitCompletePackage(@NonNull org.eclipse.ocl.pivot.CompletePackage object) {
+	public @Nullable R visitCompletePackage(org.eclipse.ocl.pivot.@NonNull CompletePackage object) {
 		return visitNamedElement(object);
 	}
 
 	@Override
-	public @Nullable R visitConnectionPointReference(@NonNull org.eclipse.ocl.pivot.ConnectionPointReference object) {
+	public @Nullable R visitConnectionPointReference(org.eclipse.ocl.pivot.@NonNull ConnectionPointReference object) {
 		return visitVertex(object);
 	}
 
 	@Override
-	public @Nullable R visitConstraint(@NonNull org.eclipse.ocl.pivot.Constraint object) {
+	public @Nullable R visitConstraint(org.eclipse.ocl.pivot.@NonNull Constraint object) {
 		return visitNamedElement(object);
 	}
 
 	@Override
-	public @Nullable R visitDataType(@NonNull org.eclipse.ocl.pivot.DataType object) {
+	public @Nullable R visitDataType(org.eclipse.ocl.pivot.@NonNull DataType object) {
 		return visitClass(object);
 	}
 
 	@Override
-	public @Nullable R visitDetail(@NonNull org.eclipse.ocl.pivot.Detail object) {
+	public @Nullable R visitDetail(org.eclipse.ocl.pivot.@NonNull Detail object) {
 		return visitNamedElement(object);
 	}
 
 	@Override
-	public @Nullable R visitDynamicBehavior(@NonNull org.eclipse.ocl.pivot.DynamicBehavior object) {
+	public @Nullable R visitDynamicBehavior(org.eclipse.ocl.pivot.@NonNull DynamicBehavior object) {
 		return visitBehavior(object);
 	}
 
 	@Override
-	public @Nullable R visitDynamicElement(@NonNull org.eclipse.ocl.pivot.DynamicElement object) {
+	public @Nullable R visitDynamicElement(org.eclipse.ocl.pivot.@NonNull DynamicElement object) {
 		return visitElement(object);
 	}
 
 	@Override
-	public @Nullable R visitDynamicProperty(@NonNull org.eclipse.ocl.pivot.DynamicProperty object) {
+	public @Nullable R visitDynamicProperty(org.eclipse.ocl.pivot.@NonNull DynamicProperty object) {
 		return visitElement(object);
 	}
 
 	@Override
-	public @Nullable R visitDynamicType(@NonNull org.eclipse.ocl.pivot.DynamicType object) {
+	public @Nullable R visitDynamicType(org.eclipse.ocl.pivot.@NonNull DynamicType object) {
 		return visitClass(object);
 	}
 
 	@Override
-	public @Nullable R visitDynamicValueSpecification(@NonNull org.eclipse.ocl.pivot.DynamicValueSpecification object) {
+	public @Nullable R visitDynamicValueSpecification(org.eclipse.ocl.pivot.@NonNull DynamicValueSpecification object) {
 		return visitValueSpecification(object);
 	}
 
 	@Override
-	public @Nullable R visitElement(@NonNull org.eclipse.ocl.pivot.Element object) {
+	public @Nullable R visitElement(org.eclipse.ocl.pivot.@NonNull Element object) {
 		return visiting(object);
 	}
 
 	@Override
-	public @Nullable R visitElementExtension(@NonNull org.eclipse.ocl.pivot.ElementExtension object) {
+	public @Nullable R visitElementExtension(org.eclipse.ocl.pivot.@NonNull ElementExtension object) {
 		return visitClass(object);
 	}
 
 	@Override
-	public @Nullable R visitEnumLiteralExp(@NonNull org.eclipse.ocl.pivot.EnumLiteralExp object) {
+	public @Nullable R visitEnumLiteralExp(org.eclipse.ocl.pivot.@NonNull EnumLiteralExp object) {
 		return visitLiteralExp(object);
 	}
 
 	@Override
-	public @Nullable R visitEnumeration(@NonNull org.eclipse.ocl.pivot.Enumeration object) {
+	public @Nullable R visitEnumeration(org.eclipse.ocl.pivot.@NonNull Enumeration object) {
 		return visitDataType(object);
 	}
 
 	@Override
-	public @Nullable R visitEnumerationLiteral(@NonNull org.eclipse.ocl.pivot.EnumerationLiteral object) {
+	public @Nullable R visitEnumerationLiteral(org.eclipse.ocl.pivot.@NonNull EnumerationLiteral object) {
 		return visitInstanceSpecification(object);
 	}
 
 	@Override
-	public @Nullable R visitExpressionInOCL(@NonNull org.eclipse.ocl.pivot.ExpressionInOCL object) {
+	public @Nullable R visitExpressionInOCL(org.eclipse.ocl.pivot.@NonNull ExpressionInOCL object) {
 		return visitLanguageExpression(object);
 	}
 
 	@Override
-	public @Nullable R visitFeature(@NonNull org.eclipse.ocl.pivot.Feature object) {
+	public @Nullable R visitFeature(org.eclipse.ocl.pivot.@NonNull Feature object) {
 		return visitTypedElement(object);
 	}
 
 	@Override
-	public @Nullable R visitFeatureCallExp(@NonNull org.eclipse.ocl.pivot.FeatureCallExp object) {
+	public @Nullable R visitFeatureCallExp(org.eclipse.ocl.pivot.@NonNull FeatureCallExp object) {
 		return visitCallExp(object);
 	}
 
 	@Override
-	public @Nullable R visitFinalState(@NonNull org.eclipse.ocl.pivot.FinalState object) {
+	public @Nullable R visitFinalState(org.eclipse.ocl.pivot.@NonNull FinalState object) {
 		return visitState(object);
 	}
 
 	@Override
-	public @Nullable R visitIfExp(@NonNull org.eclipse.ocl.pivot.IfExp object) {
+	public @Nullable R visitIfExp(org.eclipse.ocl.pivot.@NonNull IfExp object) {
 		return visitOCLExpression(object);
 	}
 
 	@Override
-	public @Nullable R visitImport(@NonNull org.eclipse.ocl.pivot.Import object) {
+	public @Nullable R visitImport(org.eclipse.ocl.pivot.@NonNull Import object) {
 		return visitNamedElement(object);
 	}
 
 	@Override
-	public @Nullable R visitInstanceSpecification(@NonNull org.eclipse.ocl.pivot.InstanceSpecification object) {
+	public @Nullable R visitInstanceSpecification(org.eclipse.ocl.pivot.@NonNull InstanceSpecification object) {
 		return visitNamedElement(object);
 	}
 
 	@Override
-	public @Nullable R visitIntegerLiteralExp(@NonNull org.eclipse.ocl.pivot.IntegerLiteralExp object) {
+	public @Nullable R visitIntegerLiteralExp(org.eclipse.ocl.pivot.@NonNull IntegerLiteralExp object) {
 		return visitNumericLiteralExp(object);
 	}
 
 	@Override
-	public @Nullable R visitInvalidLiteralExp(@NonNull org.eclipse.ocl.pivot.InvalidLiteralExp object) {
+	public @Nullable R visitInvalidLiteralExp(org.eclipse.ocl.pivot.@NonNull InvalidLiteralExp object) {
 		return visitLiteralExp(object);
 	}
 
 	@Override
-	public @Nullable R visitInvalidType(@NonNull org.eclipse.ocl.pivot.InvalidType object) {
+	public @Nullable R visitInvalidType(org.eclipse.ocl.pivot.@NonNull InvalidType object) {
 		return visitClass(object);
 	}
 
 	@Override
-	public @Nullable R visitIterateExp(@NonNull org.eclipse.ocl.pivot.IterateExp object) {
+	public @Nullable R visitIterateExp(org.eclipse.ocl.pivot.@NonNull IterateExp object) {
 		return visitLoopExp(object);
 	}
 
 	@Override
-	public @Nullable R visitIteration(@NonNull org.eclipse.ocl.pivot.Iteration object) {
+	public @Nullable R visitIteration(org.eclipse.ocl.pivot.@NonNull Iteration object) {
 		return visitOperation(object);
 	}
 
 	@Override
-	public @Nullable R visitIteratorExp(@NonNull org.eclipse.ocl.pivot.IteratorExp object) {
+	public @Nullable R visitIteratorExp(org.eclipse.ocl.pivot.@NonNull IteratorExp object) {
 		return visitLoopExp(object);
 	}
 
 	@Override
-	public @Nullable R visitLambdaType(@NonNull org.eclipse.ocl.pivot.LambdaType object) {
+	public @Nullable R visitLambdaType(org.eclipse.ocl.pivot.@NonNull LambdaType object) {
 		return visitDataType(object);
 	}
 
 	@Override
-	public @Nullable R visitLanguageExpression(@NonNull org.eclipse.ocl.pivot.LanguageExpression object) {
+	public @Nullable R visitLanguageExpression(org.eclipse.ocl.pivot.@NonNull LanguageExpression object) {
 		return visitValueSpecification(object);
 	}
 
 	@Override
-	public @Nullable R visitLetExp(@NonNull org.eclipse.ocl.pivot.LetExp object) {
+	public @Nullable R visitLetExp(org.eclipse.ocl.pivot.@NonNull LetExp object) {
 		return visitOCLExpression(object);
 	}
 
 	@Override
-	public @Nullable R visitLibrary(@NonNull org.eclipse.ocl.pivot.Library object) {
+	public @Nullable R visitLibrary(org.eclipse.ocl.pivot.@NonNull Library object) {
 		return visitPackage(object);
 	}
 
 	@Override
-	public @Nullable R visitLiteralExp(@NonNull org.eclipse.ocl.pivot.LiteralExp object) {
+	public @Nullable R visitLiteralExp(org.eclipse.ocl.pivot.@NonNull LiteralExp object) {
 		return visitOCLExpression(object);
 	}
 
 	@Override
-	public @Nullable R visitLoopExp(@NonNull org.eclipse.ocl.pivot.LoopExp object) {
+	public @Nullable R visitLoopExp(org.eclipse.ocl.pivot.@NonNull LoopExp object) {
 		return visitCallExp(object);
 	}
 
 	@Override
-	public @Nullable R visitMapLiteralExp(@NonNull org.eclipse.ocl.pivot.MapLiteralExp object) {
+	public @Nullable R visitMapLiteralExp(org.eclipse.ocl.pivot.@NonNull MapLiteralExp object) {
 		return visitLiteralExp(object);
 	}
 
 	@Override
-	public @Nullable R visitMapLiteralPart(@NonNull org.eclipse.ocl.pivot.MapLiteralPart object) {
+	public @Nullable R visitMapLiteralPart(org.eclipse.ocl.pivot.@NonNull MapLiteralPart object) {
 		return visitElement(object);
 	}
 
 	@Override
-	public @Nullable R visitMapType(@NonNull org.eclipse.ocl.pivot.MapType object) {
+	public @Nullable R visitMapType(org.eclipse.ocl.pivot.@NonNull MapType object) {
 		return visitDataType(object);
 	}
 
 	@Override
-	public @Nullable R visitMessageExp(@NonNull org.eclipse.ocl.pivot.MessageExp object) {
+	public @Nullable R visitMessageExp(org.eclipse.ocl.pivot.@NonNull MessageExp object) {
 		return visitOCLExpression(object);
 	}
 
 	@Override
-	public @Nullable R visitMessageType(@NonNull org.eclipse.ocl.pivot.MessageType object) {
+	public @Nullable R visitMessageType(org.eclipse.ocl.pivot.@NonNull MessageType object) {
 		return visitClass(object);
 	}
 
 	@Override
-	public @Nullable R visitModel(@NonNull org.eclipse.ocl.pivot.Model object) {
+	public @Nullable R visitModel(org.eclipse.ocl.pivot.@NonNull Model object) {
 		return visitNamespace(object);
 	}
 
 	@Override
-	public @Nullable R visitNamedElement(@NonNull org.eclipse.ocl.pivot.NamedElement object) {
+	public @Nullable R visitNamedElement(org.eclipse.ocl.pivot.@NonNull NamedElement object) {
 		return visitElement(object);
 	}
 
 	@Override
-	public @Nullable R visitNamespace(@NonNull org.eclipse.ocl.pivot.Namespace object) {
+	public @Nullable R visitNamespace(org.eclipse.ocl.pivot.@NonNull Namespace object) {
 		return visitNamedElement(object);
 	}
 
 	@Override
-	public @Nullable R visitNavigationCallExp(@NonNull org.eclipse.ocl.pivot.NavigationCallExp object) {
+	public @Nullable R visitNavigationCallExp(org.eclipse.ocl.pivot.@NonNull NavigationCallExp object) {
 		return visitFeatureCallExp(object);
 	}
 
 	@Override
-	public @Nullable R visitNullLiteralExp(@NonNull org.eclipse.ocl.pivot.NullLiteralExp object) {
+	public @Nullable R visitNullLiteralExp(org.eclipse.ocl.pivot.@NonNull NullLiteralExp object) {
 		return visitPrimitiveLiteralExp(object);
 	}
 
 	@Override
-	public @Nullable R visitNumericLiteralExp(@NonNull org.eclipse.ocl.pivot.NumericLiteralExp object) {
+	public @Nullable R visitNumericLiteralExp(org.eclipse.ocl.pivot.@NonNull NumericLiteralExp object) {
 		return visitPrimitiveLiteralExp(object);
 	}
 
 	@Override
-	public @Nullable R visitOCLExpression(@NonNull org.eclipse.ocl.pivot.OCLExpression object) {
+	public @Nullable R visitOCLExpression(org.eclipse.ocl.pivot.@NonNull OCLExpression object) {
 		return visitTypedElement(object);
 	}
 
 	@Override
-	public @Nullable R visitOperation(@NonNull org.eclipse.ocl.pivot.Operation object) {
+	public @Nullable R visitOperation(org.eclipse.ocl.pivot.@NonNull Operation object) {
 		return visitFeature(object);
 	}
 
 	@Override
-	public @Nullable R visitOperationCallExp(@NonNull org.eclipse.ocl.pivot.OperationCallExp object) {
+	public @Nullable R visitOperationCallExp(org.eclipse.ocl.pivot.@NonNull OperationCallExp object) {
 		return visitFeatureCallExp(object);
 	}
 
 	@Override
-	public @Nullable R visitOppositePropertyCallExp(@NonNull org.eclipse.ocl.pivot.OppositePropertyCallExp object) {
+	public @Nullable R visitOppositePropertyCallExp(org.eclipse.ocl.pivot.@NonNull OppositePropertyCallExp object) {
 		return visitNavigationCallExp(object);
 	}
 
 	@Override
-	public @Nullable R visitOrderedSetType(@NonNull org.eclipse.ocl.pivot.OrderedSetType object) {
+	public @Nullable R visitOrderedSetType(org.eclipse.ocl.pivot.@NonNull OrderedSetType object) {
 		return visitCollectionType(object);
 	}
 
 	@Override
-	public @Nullable R visitOrphanCompletePackage(@NonNull org.eclipse.ocl.pivot.OrphanCompletePackage object) {
+	public @Nullable R visitOrphanCompletePackage(org.eclipse.ocl.pivot.@NonNull OrphanCompletePackage object) {
 		return visitCompletePackage(object);
 	}
 
 	@Override
-	public @Nullable R visitPackage(@NonNull org.eclipse.ocl.pivot.Package object) {
+	public @Nullable R visitPackage(org.eclipse.ocl.pivot.@NonNull Package object) {
 		return visitNamespace(object);
 	}
 
 	@Override
-	public @Nullable R visitParameter(@NonNull org.eclipse.ocl.pivot.Parameter object) {
+	public @Nullable R visitParameter(org.eclipse.ocl.pivot.@NonNull Parameter object) {
 		return visitVariableDeclaration(object);
 	}
 
 	@Override
-	public @Nullable R visitPrecedence(@NonNull org.eclipse.ocl.pivot.Precedence object) {
+	public @Nullable R visitPrecedence(org.eclipse.ocl.pivot.@NonNull Precedence object) {
 		return visitNamedElement(object);
 	}
 
 	@Override
-	public @Nullable R visitPrimitiveCompletePackage(@NonNull org.eclipse.ocl.pivot.PrimitiveCompletePackage object) {
+	public @Nullable R visitPrimitiveCompletePackage(org.eclipse.ocl.pivot.@NonNull PrimitiveCompletePackage object) {
 		return visitCompletePackage(object);
 	}
 
 	@Override
-	public @Nullable R visitPrimitiveLiteralExp(@NonNull org.eclipse.ocl.pivot.PrimitiveLiteralExp object) {
+	public @Nullable R visitPrimitiveLiteralExp(org.eclipse.ocl.pivot.@NonNull PrimitiveLiteralExp object) {
 		return visitLiteralExp(object);
 	}
 
 	@Override
-	public @Nullable R visitPrimitiveType(@NonNull org.eclipse.ocl.pivot.PrimitiveType object) {
+	public @Nullable R visitPrimitiveType(org.eclipse.ocl.pivot.@NonNull PrimitiveType object) {
 		return visitDataType(object);
 	}
 
 	@Override
-	public @Nullable R visitProfile(@NonNull org.eclipse.ocl.pivot.Profile object) {
+	public @Nullable R visitProfile(org.eclipse.ocl.pivot.@NonNull Profile object) {
 		return visitPackage(object);
 	}
 
 	@Override
-	public @Nullable R visitProfileApplication(@NonNull org.eclipse.ocl.pivot.ProfileApplication object) {
+	public @Nullable R visitProfileApplication(org.eclipse.ocl.pivot.@NonNull ProfileApplication object) {
 		return visitElement(object);
 	}
 
 	@Override
-	public @Nullable R visitProperty(@NonNull org.eclipse.ocl.pivot.Property object) {
+	public @Nullable R visitProperty(org.eclipse.ocl.pivot.@NonNull Property object) {
 		return visitFeature(object);
 	}
 
 	@Override
-	public @Nullable R visitPropertyCallExp(@NonNull org.eclipse.ocl.pivot.PropertyCallExp object) {
+	public @Nullable R visitPropertyCallExp(org.eclipse.ocl.pivot.@NonNull PropertyCallExp object) {
 		return visitNavigationCallExp(object);
 	}
 
 	@Override
-	public @Nullable R visitPseudostate(@NonNull org.eclipse.ocl.pivot.Pseudostate object) {
+	public @Nullable R visitPseudostate(org.eclipse.ocl.pivot.@NonNull Pseudostate object) {
 		return visitVertex(object);
 	}
 
 	@Override
-	public @Nullable R visitRealLiteralExp(@NonNull org.eclipse.ocl.pivot.RealLiteralExp object) {
+	public @Nullable R visitRealLiteralExp(org.eclipse.ocl.pivot.@NonNull RealLiteralExp object) {
 		return visitNumericLiteralExp(object);
 	}
 
 	@Override
-	public @Nullable R visitRegion(@NonNull org.eclipse.ocl.pivot.Region object) {
+	public @Nullable R visitRegion(org.eclipse.ocl.pivot.@NonNull Region object) {
 		return visitNamespace(object);
 	}
 
 	@Override
-	public @Nullable R visitSelfType(@NonNull org.eclipse.ocl.pivot.SelfType object) {
+	public @Nullable R visitSelfType(org.eclipse.ocl.pivot.@NonNull SelfType object) {
 		return visitClass(object);
 	}
 
 	@Override
-	public @Nullable R visitSendSignalAction(@NonNull org.eclipse.ocl.pivot.SendSignalAction object) {
+	public @Nullable R visitSendSignalAction(org.eclipse.ocl.pivot.@NonNull SendSignalAction object) {
 		return visitNamedElement(object);
 	}
 
 	@Override
-	public @Nullable R visitSequenceType(@NonNull org.eclipse.ocl.pivot.SequenceType object) {
+	public @Nullable R visitSequenceType(org.eclipse.ocl.pivot.@NonNull SequenceType object) {
 		return visitCollectionType(object);
 	}
 
 	@Override
-	public @Nullable R visitSetType(@NonNull org.eclipse.ocl.pivot.SetType object) {
+	public @Nullable R visitSetType(org.eclipse.ocl.pivot.@NonNull SetType object) {
 		return visitCollectionType(object);
 	}
 
 	@Override
-	public @Nullable R visitShadowExp(@NonNull org.eclipse.ocl.pivot.ShadowExp object) {
+	public @Nullable R visitShadowExp(org.eclipse.ocl.pivot.@NonNull ShadowExp object) {
 		return visitOCLExpression(object);
 	}
 
 	@Override
-	public @Nullable R visitShadowPart(@NonNull org.eclipse.ocl.pivot.ShadowPart object) {
+	public @Nullable R visitShadowPart(org.eclipse.ocl.pivot.@NonNull ShadowPart object) {
 		return visitTypedElement(object);
 	}
 
 	@Override
-	public @Nullable R visitSignal(@NonNull org.eclipse.ocl.pivot.Signal object) {
+	public @Nullable R visitSignal(org.eclipse.ocl.pivot.@NonNull Signal object) {
 		return visitClass(object);
 	}
 
 	@Override
-	public @Nullable R visitSlot(@NonNull org.eclipse.ocl.pivot.Slot object) {
+	public @Nullable R visitSlot(org.eclipse.ocl.pivot.@NonNull Slot object) {
 		return visitElement(object);
 	}
 
 	@Override
-	public @Nullable R visitStandardLibrary(@NonNull org.eclipse.ocl.pivot.StandardLibrary object) {
+	public @Nullable R visitStandardLibrary(org.eclipse.ocl.pivot.@NonNull StandardLibrary object) {
 		return visitElement(object);
 	}
 
 	@Override
-	public @Nullable R visitState(@NonNull org.eclipse.ocl.pivot.State object) {
+	public @Nullable R visitState(org.eclipse.ocl.pivot.@NonNull State object) {
 		return visitNamespace(object);
 	}
 
 	@Override
-	public @Nullable R visitStateExp(@NonNull org.eclipse.ocl.pivot.StateExp object) {
+	public @Nullable R visitStateExp(org.eclipse.ocl.pivot.@NonNull StateExp object) {
 		return visitOCLExpression(object);
 	}
 
 	@Override
-	public @Nullable R visitStateMachine(@NonNull org.eclipse.ocl.pivot.StateMachine object) {
+	public @Nullable R visitStateMachine(org.eclipse.ocl.pivot.@NonNull StateMachine object) {
 		return visitBehavior(object);
 	}
 
 	@Override
-	public @Nullable R visitStereotype(@NonNull org.eclipse.ocl.pivot.Stereotype object) {
+	public @Nullable R visitStereotype(org.eclipse.ocl.pivot.@NonNull Stereotype object) {
 		return visitClass(object);
 	}
 
 	@Override
-	public @Nullable R visitStereotypeExtender(@NonNull org.eclipse.ocl.pivot.StereotypeExtender object) {
+	public @Nullable R visitStereotypeExtender(org.eclipse.ocl.pivot.@NonNull StereotypeExtender object) {
 		return visitElement(object);
 	}
 
 	@Override
-	public @Nullable R visitStringLiteralExp(@NonNull org.eclipse.ocl.pivot.StringLiteralExp object) {
+	public @Nullable R visitStringLiteralExp(org.eclipse.ocl.pivot.@NonNull StringLiteralExp object) {
 		return visitPrimitiveLiteralExp(object);
 	}
 
 	@Override
-	public @Nullable R visitTemplateBinding(@NonNull org.eclipse.ocl.pivot.TemplateBinding object) {
+	public @Nullable R visitTemplateBinding(org.eclipse.ocl.pivot.@NonNull TemplateBinding object) {
 		return visitElement(object);
 	}
 
 	@Override
-	public @Nullable R visitTemplateParameter(@NonNull org.eclipse.ocl.pivot.TemplateParameter object) {
+	public @Nullable R visitTemplateParameter(org.eclipse.ocl.pivot.@NonNull TemplateParameter object) {
 		return visitType(object);
 	}
 
 	@Override
-	public @Nullable R visitTemplateParameterSubstitution(@NonNull org.eclipse.ocl.pivot.TemplateParameterSubstitution object) {
+	public @Nullable R visitTemplateParameterSubstitution(org.eclipse.ocl.pivot.@NonNull TemplateParameterSubstitution object) {
 		return visitElement(object);
 	}
 
 	@Override
-	public @Nullable R visitTemplateSignature(@NonNull org.eclipse.ocl.pivot.TemplateSignature object) {
+	public @Nullable R visitTemplateSignature(org.eclipse.ocl.pivot.@NonNull TemplateSignature object) {
 		return visitElement(object);
 	}
 
 	@Override
-	public @Nullable R visitTemplateableElement(@NonNull org.eclipse.ocl.pivot.TemplateableElement object) {
+	public @Nullable R visitTemplateableElement(org.eclipse.ocl.pivot.@NonNull TemplateableElement object) {
 		return visitElement(object);
 	}
 
 	@Override
-	public @Nullable R visitTransition(@NonNull org.eclipse.ocl.pivot.Transition object) {
+	public @Nullable R visitTransition(org.eclipse.ocl.pivot.@NonNull Transition object) {
 		return visitNamespace(object);
 	}
 
 	@Override
-	public @Nullable R visitTrigger(@NonNull org.eclipse.ocl.pivot.Trigger object) {
+	public @Nullable R visitTrigger(org.eclipse.ocl.pivot.@NonNull Trigger object) {
 		return visitNamedElement(object);
 	}
 
 	@Override
-	public @Nullable R visitTupleLiteralExp(@NonNull org.eclipse.ocl.pivot.TupleLiteralExp object) {
+	public @Nullable R visitTupleLiteralExp(org.eclipse.ocl.pivot.@NonNull TupleLiteralExp object) {
 		return visitLiteralExp(object);
 	}
 
 	@Override
-	public @Nullable R visitTupleLiteralPart(@NonNull org.eclipse.ocl.pivot.TupleLiteralPart object) {
+	public @Nullable R visitTupleLiteralPart(org.eclipse.ocl.pivot.@NonNull TupleLiteralPart object) {
 		return visitVariableDeclaration(object);
 	}
 
 	@Override
-	public @Nullable R visitTupleType(@NonNull org.eclipse.ocl.pivot.TupleType object) {
+	public @Nullable R visitTupleType(org.eclipse.ocl.pivot.@NonNull TupleType object) {
 		return visitDataType(object);
 	}
 
 	@Override
-	public @Nullable R visitType(@NonNull org.eclipse.ocl.pivot.Type object) {
+	public @Nullable R visitType(org.eclipse.ocl.pivot.@NonNull Type object) {
 		return visitNamedElement(object);
 	}
 
 	@Override
-	public @Nullable R visitTypeExp(@NonNull org.eclipse.ocl.pivot.TypeExp object) {
+	public @Nullable R visitTypeExp(org.eclipse.ocl.pivot.@NonNull TypeExp object) {
 		return visitOCLExpression(object);
 	}
 
 	@Override
-	public @Nullable R visitTypedElement(@NonNull org.eclipse.ocl.pivot.TypedElement object) {
+	public @Nullable R visitTypedElement(org.eclipse.ocl.pivot.@NonNull TypedElement object) {
 		return visitNamedElement(object);
 	}
 
 	@Override
-	public @Nullable R visitUnlimitedNaturalLiteralExp(@NonNull org.eclipse.ocl.pivot.UnlimitedNaturalLiteralExp object) {
+	public @Nullable R visitUnlimitedNaturalLiteralExp(org.eclipse.ocl.pivot.@NonNull UnlimitedNaturalLiteralExp object) {
 		return visitNumericLiteralExp(object);
 	}
 
 	@Override
-	public @Nullable R visitUnspecifiedValueExp(@NonNull org.eclipse.ocl.pivot.UnspecifiedValueExp object) {
+	public @Nullable R visitUnspecifiedValueExp(org.eclipse.ocl.pivot.@NonNull UnspecifiedValueExp object) {
 		return visitOCLExpression(object);
 	}
 
 	@Override
-	public @Nullable R visitValueSpecification(@NonNull org.eclipse.ocl.pivot.ValueSpecification object) {
+	public @Nullable R visitValueSpecification(org.eclipse.ocl.pivot.@NonNull ValueSpecification object) {
 		return visitTypedElement(object);
 	}
 
 	@Override
-	public @Nullable R visitVariable(@NonNull org.eclipse.ocl.pivot.Variable object) {
+	public @Nullable R visitVariable(org.eclipse.ocl.pivot.@NonNull Variable object) {
 		return visitVariableDeclaration(object);
 	}
 
 	@Override
-	public @Nullable R visitVariableDeclaration(@NonNull org.eclipse.ocl.pivot.VariableDeclaration object) {
+	public @Nullable R visitVariableDeclaration(org.eclipse.ocl.pivot.@NonNull VariableDeclaration object) {
 		return visitTypedElement(object);
 	}
 
 	@Override
-	public @Nullable R visitVariableExp(@NonNull org.eclipse.ocl.pivot.VariableExp object) {
+	public @Nullable R visitVariableExp(org.eclipse.ocl.pivot.@NonNull VariableExp object) {
 		return visitOCLExpression(object);
 	}
 
 	@Override
-	public @Nullable R visitVertex(@NonNull org.eclipse.ocl.pivot.Vertex object) {
+	public @Nullable R visitVertex(org.eclipse.ocl.pivot.@NonNull Vertex object) {
 		return visitNamedElement(object);
 	}
 
 	@Override
-	public @Nullable R visitVoidType(@NonNull org.eclipse.ocl.pivot.VoidType object) {
+	public @Nullable R visitVoidType(org.eclipse.ocl.pivot.@NonNull VoidType object) {
 		return visitClass(object);
 	}
 
 	@Override
-	public @Nullable R visitWildcardType(@NonNull org.eclipse.ocl.pivot.WildcardType object) {
+	public @Nullable R visitWildcardType(org.eclipse.ocl.pivot.@NonNull WildcardType object) {
 		return visitClass(object);
 	}
 }
diff --git a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/util/AbstractNullVisitor.java b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/util/AbstractNullVisitor.java
index 21009f4..2c9e4ad 100644
--- a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/util/AbstractNullVisitor.java
+++ b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/util/AbstractNullVisitor.java
@@ -35,602 +35,602 @@
 	}	
 
 	@Override
-	public @Nullable R visitAnnotation(@NonNull org.eclipse.ocl.pivot.Annotation object) {
+	public @Nullable R visitAnnotation(org.eclipse.ocl.pivot.@NonNull Annotation object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitAnyType(@NonNull org.eclipse.ocl.pivot.AnyType object) {
+	public @Nullable R visitAnyType(org.eclipse.ocl.pivot.@NonNull AnyType object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitAssociationClass(@NonNull org.eclipse.ocl.pivot.AssociationClass object) {
+	public @Nullable R visitAssociationClass(org.eclipse.ocl.pivot.@NonNull AssociationClass object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitAssociationClassCallExp(@NonNull org.eclipse.ocl.pivot.AssociationClassCallExp object) {
+	public @Nullable R visitAssociationClassCallExp(org.eclipse.ocl.pivot.@NonNull AssociationClassCallExp object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitBagType(@NonNull org.eclipse.ocl.pivot.BagType object) {
+	public @Nullable R visitBagType(org.eclipse.ocl.pivot.@NonNull BagType object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitBehavior(@NonNull org.eclipse.ocl.pivot.Behavior object) {
+	public @Nullable R visitBehavior(org.eclipse.ocl.pivot.@NonNull Behavior object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitBooleanLiteralExp(@NonNull org.eclipse.ocl.pivot.BooleanLiteralExp object) {
+	public @Nullable R visitBooleanLiteralExp(org.eclipse.ocl.pivot.@NonNull BooleanLiteralExp object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitCallExp(@NonNull org.eclipse.ocl.pivot.CallExp object) {
+	public @Nullable R visitCallExp(org.eclipse.ocl.pivot.@NonNull CallExp object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitCallOperationAction(@NonNull org.eclipse.ocl.pivot.CallOperationAction object) {
+	public @Nullable R visitCallOperationAction(org.eclipse.ocl.pivot.@NonNull CallOperationAction object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitClass(@NonNull org.eclipse.ocl.pivot.Class object) {
+	public @Nullable R visitClass(org.eclipse.ocl.pivot.@NonNull Class object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitCollectionItem(@NonNull org.eclipse.ocl.pivot.CollectionItem object) {
+	public @Nullable R visitCollectionItem(org.eclipse.ocl.pivot.@NonNull CollectionItem object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitCollectionLiteralExp(@NonNull org.eclipse.ocl.pivot.CollectionLiteralExp object) {
+	public @Nullable R visitCollectionLiteralExp(org.eclipse.ocl.pivot.@NonNull CollectionLiteralExp object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitCollectionLiteralPart(@NonNull org.eclipse.ocl.pivot.CollectionLiteralPart object) {
+	public @Nullable R visitCollectionLiteralPart(org.eclipse.ocl.pivot.@NonNull CollectionLiteralPart object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitCollectionRange(@NonNull org.eclipse.ocl.pivot.CollectionRange object) {
+	public @Nullable R visitCollectionRange(org.eclipse.ocl.pivot.@NonNull CollectionRange object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitCollectionType(@NonNull org.eclipse.ocl.pivot.CollectionType object) {
+	public @Nullable R visitCollectionType(org.eclipse.ocl.pivot.@NonNull CollectionType object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitComment(@NonNull org.eclipse.ocl.pivot.Comment object) {
+	public @Nullable R visitComment(org.eclipse.ocl.pivot.@NonNull Comment object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitCompleteClass(@NonNull org.eclipse.ocl.pivot.CompleteClass object) {
+	public @Nullable R visitCompleteClass(org.eclipse.ocl.pivot.@NonNull CompleteClass object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitCompleteEnvironment(@NonNull org.eclipse.ocl.pivot.CompleteEnvironment object) {
+	public @Nullable R visitCompleteEnvironment(org.eclipse.ocl.pivot.@NonNull CompleteEnvironment object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitCompleteModel(@NonNull org.eclipse.ocl.pivot.CompleteModel object) {
+	public @Nullable R visitCompleteModel(org.eclipse.ocl.pivot.@NonNull CompleteModel object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitCompletePackage(@NonNull org.eclipse.ocl.pivot.CompletePackage object) {
+	public @Nullable R visitCompletePackage(org.eclipse.ocl.pivot.@NonNull CompletePackage object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitConnectionPointReference(@NonNull org.eclipse.ocl.pivot.ConnectionPointReference object) {
+	public @Nullable R visitConnectionPointReference(org.eclipse.ocl.pivot.@NonNull ConnectionPointReference object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitConstraint(@NonNull org.eclipse.ocl.pivot.Constraint object) {
+	public @Nullable R visitConstraint(org.eclipse.ocl.pivot.@NonNull Constraint object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitDataType(@NonNull org.eclipse.ocl.pivot.DataType object) {
+	public @Nullable R visitDataType(org.eclipse.ocl.pivot.@NonNull DataType object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitDetail(@NonNull org.eclipse.ocl.pivot.Detail object) {
+	public @Nullable R visitDetail(org.eclipse.ocl.pivot.@NonNull Detail object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitDynamicBehavior(@NonNull org.eclipse.ocl.pivot.DynamicBehavior object) {
+	public @Nullable R visitDynamicBehavior(org.eclipse.ocl.pivot.@NonNull DynamicBehavior object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitDynamicElement(@NonNull org.eclipse.ocl.pivot.DynamicElement object) {
+	public @Nullable R visitDynamicElement(org.eclipse.ocl.pivot.@NonNull DynamicElement object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitDynamicProperty(@NonNull org.eclipse.ocl.pivot.DynamicProperty object) {
+	public @Nullable R visitDynamicProperty(org.eclipse.ocl.pivot.@NonNull DynamicProperty object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitDynamicType(@NonNull org.eclipse.ocl.pivot.DynamicType object) {
+	public @Nullable R visitDynamicType(org.eclipse.ocl.pivot.@NonNull DynamicType object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitDynamicValueSpecification(@NonNull org.eclipse.ocl.pivot.DynamicValueSpecification object) {
+	public @Nullable R visitDynamicValueSpecification(org.eclipse.ocl.pivot.@NonNull DynamicValueSpecification object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitElement(@NonNull org.eclipse.ocl.pivot.Element object) {
+	public @Nullable R visitElement(org.eclipse.ocl.pivot.@NonNull Element object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitElementExtension(@NonNull org.eclipse.ocl.pivot.ElementExtension object) {
+	public @Nullable R visitElementExtension(org.eclipse.ocl.pivot.@NonNull ElementExtension object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitEnumLiteralExp(@NonNull org.eclipse.ocl.pivot.EnumLiteralExp object) {
+	public @Nullable R visitEnumLiteralExp(org.eclipse.ocl.pivot.@NonNull EnumLiteralExp object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitEnumeration(@NonNull org.eclipse.ocl.pivot.Enumeration object) {
+	public @Nullable R visitEnumeration(org.eclipse.ocl.pivot.@NonNull Enumeration object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitEnumerationLiteral(@NonNull org.eclipse.ocl.pivot.EnumerationLiteral object) {
+	public @Nullable R visitEnumerationLiteral(org.eclipse.ocl.pivot.@NonNull EnumerationLiteral object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitExpressionInOCL(@NonNull org.eclipse.ocl.pivot.ExpressionInOCL object) {
+	public @Nullable R visitExpressionInOCL(org.eclipse.ocl.pivot.@NonNull ExpressionInOCL object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitFeature(@NonNull org.eclipse.ocl.pivot.Feature object) {
+	public @Nullable R visitFeature(org.eclipse.ocl.pivot.@NonNull Feature object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitFeatureCallExp(@NonNull org.eclipse.ocl.pivot.FeatureCallExp object) {
+	public @Nullable R visitFeatureCallExp(org.eclipse.ocl.pivot.@NonNull FeatureCallExp object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitFinalState(@NonNull org.eclipse.ocl.pivot.FinalState object) {
+	public @Nullable R visitFinalState(org.eclipse.ocl.pivot.@NonNull FinalState object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitIfExp(@NonNull org.eclipse.ocl.pivot.IfExp object) {
+	public @Nullable R visitIfExp(org.eclipse.ocl.pivot.@NonNull IfExp object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitImport(@NonNull org.eclipse.ocl.pivot.Import object) {
+	public @Nullable R visitImport(org.eclipse.ocl.pivot.@NonNull Import object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitInstanceSpecification(@NonNull org.eclipse.ocl.pivot.InstanceSpecification object) {
+	public @Nullable R visitInstanceSpecification(org.eclipse.ocl.pivot.@NonNull InstanceSpecification object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitIntegerLiteralExp(@NonNull org.eclipse.ocl.pivot.IntegerLiteralExp object) {
+	public @Nullable R visitIntegerLiteralExp(org.eclipse.ocl.pivot.@NonNull IntegerLiteralExp object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitInvalidLiteralExp(@NonNull org.eclipse.ocl.pivot.InvalidLiteralExp object) {
+	public @Nullable R visitInvalidLiteralExp(org.eclipse.ocl.pivot.@NonNull InvalidLiteralExp object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitInvalidType(@NonNull org.eclipse.ocl.pivot.InvalidType object) {
+	public @Nullable R visitInvalidType(org.eclipse.ocl.pivot.@NonNull InvalidType object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitIterateExp(@NonNull org.eclipse.ocl.pivot.IterateExp object) {
+	public @Nullable R visitIterateExp(org.eclipse.ocl.pivot.@NonNull IterateExp object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitIteration(@NonNull org.eclipse.ocl.pivot.Iteration object) {
+	public @Nullable R visitIteration(org.eclipse.ocl.pivot.@NonNull Iteration object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitIteratorExp(@NonNull org.eclipse.ocl.pivot.IteratorExp object) {
+	public @Nullable R visitIteratorExp(org.eclipse.ocl.pivot.@NonNull IteratorExp object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitLambdaType(@NonNull org.eclipse.ocl.pivot.LambdaType object) {
+	public @Nullable R visitLambdaType(org.eclipse.ocl.pivot.@NonNull LambdaType object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitLanguageExpression(@NonNull org.eclipse.ocl.pivot.LanguageExpression object) {
+	public @Nullable R visitLanguageExpression(org.eclipse.ocl.pivot.@NonNull LanguageExpression object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitLetExp(@NonNull org.eclipse.ocl.pivot.LetExp object) {
+	public @Nullable R visitLetExp(org.eclipse.ocl.pivot.@NonNull LetExp object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitLibrary(@NonNull org.eclipse.ocl.pivot.Library object) {
+	public @Nullable R visitLibrary(org.eclipse.ocl.pivot.@NonNull Library object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitLiteralExp(@NonNull org.eclipse.ocl.pivot.LiteralExp object) {
+	public @Nullable R visitLiteralExp(org.eclipse.ocl.pivot.@NonNull LiteralExp object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitLoopExp(@NonNull org.eclipse.ocl.pivot.LoopExp object) {
+	public @Nullable R visitLoopExp(org.eclipse.ocl.pivot.@NonNull LoopExp object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitMapLiteralExp(@NonNull org.eclipse.ocl.pivot.MapLiteralExp object) {
+	public @Nullable R visitMapLiteralExp(org.eclipse.ocl.pivot.@NonNull MapLiteralExp object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitMapLiteralPart(@NonNull org.eclipse.ocl.pivot.MapLiteralPart object) {
+	public @Nullable R visitMapLiteralPart(org.eclipse.ocl.pivot.@NonNull MapLiteralPart object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitMapType(@NonNull org.eclipse.ocl.pivot.MapType object) {
+	public @Nullable R visitMapType(org.eclipse.ocl.pivot.@NonNull MapType object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitMessageExp(@NonNull org.eclipse.ocl.pivot.MessageExp object) {
+	public @Nullable R visitMessageExp(org.eclipse.ocl.pivot.@NonNull MessageExp object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitMessageType(@NonNull org.eclipse.ocl.pivot.MessageType object) {
+	public @Nullable R visitMessageType(org.eclipse.ocl.pivot.@NonNull MessageType object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitModel(@NonNull org.eclipse.ocl.pivot.Model object) {
+	public @Nullable R visitModel(org.eclipse.ocl.pivot.@NonNull Model object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitNamedElement(@NonNull org.eclipse.ocl.pivot.NamedElement object) {
+	public @Nullable R visitNamedElement(org.eclipse.ocl.pivot.@NonNull NamedElement object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitNamespace(@NonNull org.eclipse.ocl.pivot.Namespace object) {
+	public @Nullable R visitNamespace(org.eclipse.ocl.pivot.@NonNull Namespace object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitNavigationCallExp(@NonNull org.eclipse.ocl.pivot.NavigationCallExp object) {
+	public @Nullable R visitNavigationCallExp(org.eclipse.ocl.pivot.@NonNull NavigationCallExp object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitNullLiteralExp(@NonNull org.eclipse.ocl.pivot.NullLiteralExp object) {
+	public @Nullable R visitNullLiteralExp(org.eclipse.ocl.pivot.@NonNull NullLiteralExp object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitNumericLiteralExp(@NonNull org.eclipse.ocl.pivot.NumericLiteralExp object) {
+	public @Nullable R visitNumericLiteralExp(org.eclipse.ocl.pivot.@NonNull NumericLiteralExp object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitOCLExpression(@NonNull org.eclipse.ocl.pivot.OCLExpression object) {
+	public @Nullable R visitOCLExpression(org.eclipse.ocl.pivot.@NonNull OCLExpression object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitOperation(@NonNull org.eclipse.ocl.pivot.Operation object) {
+	public @Nullable R visitOperation(org.eclipse.ocl.pivot.@NonNull Operation object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitOperationCallExp(@NonNull org.eclipse.ocl.pivot.OperationCallExp object) {
+	public @Nullable R visitOperationCallExp(org.eclipse.ocl.pivot.@NonNull OperationCallExp object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitOppositePropertyCallExp(@NonNull org.eclipse.ocl.pivot.OppositePropertyCallExp object) {
+	public @Nullable R visitOppositePropertyCallExp(org.eclipse.ocl.pivot.@NonNull OppositePropertyCallExp object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitOrderedSetType(@NonNull org.eclipse.ocl.pivot.OrderedSetType object) {
+	public @Nullable R visitOrderedSetType(org.eclipse.ocl.pivot.@NonNull OrderedSetType object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitOrphanCompletePackage(@NonNull org.eclipse.ocl.pivot.OrphanCompletePackage object) {
+	public @Nullable R visitOrphanCompletePackage(org.eclipse.ocl.pivot.@NonNull OrphanCompletePackage object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitPackage(@NonNull org.eclipse.ocl.pivot.Package object) {
+	public @Nullable R visitPackage(org.eclipse.ocl.pivot.@NonNull Package object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitParameter(@NonNull org.eclipse.ocl.pivot.Parameter object) {
+	public @Nullable R visitParameter(org.eclipse.ocl.pivot.@NonNull Parameter object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitPrecedence(@NonNull org.eclipse.ocl.pivot.Precedence object) {
+	public @Nullable R visitPrecedence(org.eclipse.ocl.pivot.@NonNull Precedence object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitPrimitiveCompletePackage(@NonNull org.eclipse.ocl.pivot.PrimitiveCompletePackage object) {
+	public @Nullable R visitPrimitiveCompletePackage(org.eclipse.ocl.pivot.@NonNull PrimitiveCompletePackage object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitPrimitiveLiteralExp(@NonNull org.eclipse.ocl.pivot.PrimitiveLiteralExp object) {
+	public @Nullable R visitPrimitiveLiteralExp(org.eclipse.ocl.pivot.@NonNull PrimitiveLiteralExp object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitPrimitiveType(@NonNull org.eclipse.ocl.pivot.PrimitiveType object) {
+	public @Nullable R visitPrimitiveType(org.eclipse.ocl.pivot.@NonNull PrimitiveType object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitProfile(@NonNull org.eclipse.ocl.pivot.Profile object) {
+	public @Nullable R visitProfile(org.eclipse.ocl.pivot.@NonNull Profile object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitProfileApplication(@NonNull org.eclipse.ocl.pivot.ProfileApplication object) {
+	public @Nullable R visitProfileApplication(org.eclipse.ocl.pivot.@NonNull ProfileApplication object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitProperty(@NonNull org.eclipse.ocl.pivot.Property object) {
+	public @Nullable R visitProperty(org.eclipse.ocl.pivot.@NonNull Property object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitPropertyCallExp(@NonNull org.eclipse.ocl.pivot.PropertyCallExp object) {
+	public @Nullable R visitPropertyCallExp(org.eclipse.ocl.pivot.@NonNull PropertyCallExp object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitPseudostate(@NonNull org.eclipse.ocl.pivot.Pseudostate object) {
+	public @Nullable R visitPseudostate(org.eclipse.ocl.pivot.@NonNull Pseudostate object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitRealLiteralExp(@NonNull org.eclipse.ocl.pivot.RealLiteralExp object) {
+	public @Nullable R visitRealLiteralExp(org.eclipse.ocl.pivot.@NonNull RealLiteralExp object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitRegion(@NonNull org.eclipse.ocl.pivot.Region object) {
+	public @Nullable R visitRegion(org.eclipse.ocl.pivot.@NonNull Region object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitSelfType(@NonNull org.eclipse.ocl.pivot.SelfType object) {
+	public @Nullable R visitSelfType(org.eclipse.ocl.pivot.@NonNull SelfType object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitSendSignalAction(@NonNull org.eclipse.ocl.pivot.SendSignalAction object) {
+	public @Nullable R visitSendSignalAction(org.eclipse.ocl.pivot.@NonNull SendSignalAction object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitSequenceType(@NonNull org.eclipse.ocl.pivot.SequenceType object) {
+	public @Nullable R visitSequenceType(org.eclipse.ocl.pivot.@NonNull SequenceType object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitSetType(@NonNull org.eclipse.ocl.pivot.SetType object) {
+	public @Nullable R visitSetType(org.eclipse.ocl.pivot.@NonNull SetType object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitShadowExp(@NonNull org.eclipse.ocl.pivot.ShadowExp object) {
+	public @Nullable R visitShadowExp(org.eclipse.ocl.pivot.@NonNull ShadowExp object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitShadowPart(@NonNull org.eclipse.ocl.pivot.ShadowPart object) {
+	public @Nullable R visitShadowPart(org.eclipse.ocl.pivot.@NonNull ShadowPart object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitSignal(@NonNull org.eclipse.ocl.pivot.Signal object) {
+	public @Nullable R visitSignal(org.eclipse.ocl.pivot.@NonNull Signal object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitSlot(@NonNull org.eclipse.ocl.pivot.Slot object) {
+	public @Nullable R visitSlot(org.eclipse.ocl.pivot.@NonNull Slot object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitStandardLibrary(@NonNull org.eclipse.ocl.pivot.StandardLibrary object) {
+	public @Nullable R visitStandardLibrary(org.eclipse.ocl.pivot.@NonNull StandardLibrary object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitState(@NonNull org.eclipse.ocl.pivot.State object) {
+	public @Nullable R visitState(org.eclipse.ocl.pivot.@NonNull State object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitStateExp(@NonNull org.eclipse.ocl.pivot.StateExp object) {
+	public @Nullable R visitStateExp(org.eclipse.ocl.pivot.@NonNull StateExp object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitStateMachine(@NonNull org.eclipse.ocl.pivot.StateMachine object) {
+	public @Nullable R visitStateMachine(org.eclipse.ocl.pivot.@NonNull StateMachine object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitStereotype(@NonNull org.eclipse.ocl.pivot.Stereotype object) {
+	public @Nullable R visitStereotype(org.eclipse.ocl.pivot.@NonNull Stereotype object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitStereotypeExtender(@NonNull org.eclipse.ocl.pivot.StereotypeExtender object) {
+	public @Nullable R visitStereotypeExtender(org.eclipse.ocl.pivot.@NonNull StereotypeExtender object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitStringLiteralExp(@NonNull org.eclipse.ocl.pivot.StringLiteralExp object) {
+	public @Nullable R visitStringLiteralExp(org.eclipse.ocl.pivot.@NonNull StringLiteralExp object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitTemplateBinding(@NonNull org.eclipse.ocl.pivot.TemplateBinding object) {
+	public @Nullable R visitTemplateBinding(org.eclipse.ocl.pivot.@NonNull TemplateBinding object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitTemplateParameter(@NonNull org.eclipse.ocl.pivot.TemplateParameter object) {
+	public @Nullable R visitTemplateParameter(org.eclipse.ocl.pivot.@NonNull TemplateParameter object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitTemplateParameterSubstitution(@NonNull org.eclipse.ocl.pivot.TemplateParameterSubstitution object) {
+	public @Nullable R visitTemplateParameterSubstitution(org.eclipse.ocl.pivot.@NonNull TemplateParameterSubstitution object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitTemplateSignature(@NonNull org.eclipse.ocl.pivot.TemplateSignature object) {
+	public @Nullable R visitTemplateSignature(org.eclipse.ocl.pivot.@NonNull TemplateSignature object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitTemplateableElement(@NonNull org.eclipse.ocl.pivot.TemplateableElement object) {
+	public @Nullable R visitTemplateableElement(org.eclipse.ocl.pivot.@NonNull TemplateableElement object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitTransition(@NonNull org.eclipse.ocl.pivot.Transition object) {
+	public @Nullable R visitTransition(org.eclipse.ocl.pivot.@NonNull Transition object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitTrigger(@NonNull org.eclipse.ocl.pivot.Trigger object) {
+	public @Nullable R visitTrigger(org.eclipse.ocl.pivot.@NonNull Trigger object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitTupleLiteralExp(@NonNull org.eclipse.ocl.pivot.TupleLiteralExp object) {
+	public @Nullable R visitTupleLiteralExp(org.eclipse.ocl.pivot.@NonNull TupleLiteralExp object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitTupleLiteralPart(@NonNull org.eclipse.ocl.pivot.TupleLiteralPart object) {
+	public @Nullable R visitTupleLiteralPart(org.eclipse.ocl.pivot.@NonNull TupleLiteralPart object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitTupleType(@NonNull org.eclipse.ocl.pivot.TupleType object) {
+	public @Nullable R visitTupleType(org.eclipse.ocl.pivot.@NonNull TupleType object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitType(@NonNull org.eclipse.ocl.pivot.Type object) {
+	public @Nullable R visitType(org.eclipse.ocl.pivot.@NonNull Type object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitTypeExp(@NonNull org.eclipse.ocl.pivot.TypeExp object) {
+	public @Nullable R visitTypeExp(org.eclipse.ocl.pivot.@NonNull TypeExp object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitTypedElement(@NonNull org.eclipse.ocl.pivot.TypedElement object) {
+	public @Nullable R visitTypedElement(org.eclipse.ocl.pivot.@NonNull TypedElement object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitUnlimitedNaturalLiteralExp(@NonNull org.eclipse.ocl.pivot.UnlimitedNaturalLiteralExp object) {
+	public @Nullable R visitUnlimitedNaturalLiteralExp(org.eclipse.ocl.pivot.@NonNull UnlimitedNaturalLiteralExp object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitUnspecifiedValueExp(@NonNull org.eclipse.ocl.pivot.UnspecifiedValueExp object) {
+	public @Nullable R visitUnspecifiedValueExp(org.eclipse.ocl.pivot.@NonNull UnspecifiedValueExp object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitValueSpecification(@NonNull org.eclipse.ocl.pivot.ValueSpecification object) {
+	public @Nullable R visitValueSpecification(org.eclipse.ocl.pivot.@NonNull ValueSpecification object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitVariable(@NonNull org.eclipse.ocl.pivot.Variable object) {
+	public @Nullable R visitVariable(org.eclipse.ocl.pivot.@NonNull Variable object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitVariableDeclaration(@NonNull org.eclipse.ocl.pivot.VariableDeclaration object) {
+	public @Nullable R visitVariableDeclaration(org.eclipse.ocl.pivot.@NonNull VariableDeclaration object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitVariableExp(@NonNull org.eclipse.ocl.pivot.VariableExp object) {
+	public @Nullable R visitVariableExp(org.eclipse.ocl.pivot.@NonNull VariableExp object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitVertex(@NonNull org.eclipse.ocl.pivot.Vertex object) {
+	public @Nullable R visitVertex(org.eclipse.ocl.pivot.@NonNull Vertex object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitVoidType(@NonNull org.eclipse.ocl.pivot.VoidType object) {
+	public @Nullable R visitVoidType(org.eclipse.ocl.pivot.@NonNull VoidType object) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visitWildcardType(@NonNull org.eclipse.ocl.pivot.WildcardType object) {
+	public @Nullable R visitWildcardType(org.eclipse.ocl.pivot.@NonNull WildcardType object) {
 		return null;
 	}
 }
diff --git a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/util/AbstractVisitor.java b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/util/AbstractVisitor.java
index d232570..41a70b0 100644
--- a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/util/AbstractVisitor.java
+++ b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/util/AbstractVisitor.java
@@ -57,7 +57,7 @@
 	 * @return <code>null</code> if the visitable is <code>null</code>;
 	 *	 otherwise, the result of visiting it
 	 */
-	public @Nullable R safeVisit(@Nullable org.eclipse.ocl.pivot.util.Visitable v) {
+	public @Nullable R safeVisit(org.eclipse.ocl.pivot.@Nullable util.Visitable v) {
 		return (v == null) ? null : v.accept(this);
 	}
 	
@@ -68,11 +68,11 @@
 	 * @return <code>null</code> if the visitable is <code>null</code>;
 	 *	 otherwise, the result of visiting it
 	 */
-	public @Nullable R visit(@NonNull org.eclipse.ocl.pivot.util.Visitable v) {
+	public @Nullable R visit(org.eclipse.ocl.pivot.util.@NonNull Visitable v) {
 		return v.accept(this);
 	}
 
-	//	public @Nullable R visiting(@NonNull org.eclipse.ocl.pivot.util.Visitable visitable) {
+	//	public @Nullable R visiting(org.eclipse.ocl.pivot.util.@NonNull Visitable visitable) {
 	//		return null;
 	//	}
 }
diff --git a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/util/AbstractWrappingVisitor.java b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/util/AbstractWrappingVisitor.java
index 81943cd..5b1ebfc 100644
--- a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/util/AbstractWrappingVisitor.java
+++ b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/util/AbstractWrappingVisitor.java
@@ -39,7 +39,7 @@
 	 * 
 	 * @return a rethrown RuntimeException or a RuntimeException-wrapped non-RuntimeException.
 	 */
-	protected @Nullable R badVisit(@NonNull org.eclipse.ocl.pivot.util.Visitable visitable, @Nullable P prologue, @NonNull Throwable e) throws RuntimeException {
+	protected @Nullable R badVisit(org.eclipse.ocl.pivot.util.@NonNull Visitable visitable, @Nullable P prologue, @NonNull Throwable e) throws RuntimeException {
 		if (e instanceof Exception) {
 			throw (RuntimeException)e;
 		}
@@ -64,7 +64,7 @@
 	 * 
 	 * @return the epilogue result, which defaults to the delegated result.
 	 */
-	protected @Nullable R postVisit(@NonNull org.eclipse.ocl.pivot.util.Visitable visitable, @Nullable P prologue, @Nullable R result) {
+	protected @Nullable R postVisit(org.eclipse.ocl.pivot.util.@NonNull Visitable visitable, @Nullable P prologue, @Nullable R result) {
 		return result;
 	}
 
@@ -73,17 +73,17 @@
 	 * 
 	 * @return the prologue result, which defauilts to null.
 	 */
-	protected @Nullable P preVisit(@NonNull org.eclipse.ocl.pivot.util.Visitable visitable) {
+	protected @Nullable P preVisit(org.eclipse.ocl.pivot.util.@NonNull Visitable visitable) {
 		return null;
 	}
 
 	@Override
-	public @Nullable R visiting(@NonNull org.eclipse.ocl.pivot.util.Visitable visitable) {
+	public @Nullable R visiting(org.eclipse.ocl.pivot.util.@NonNull Visitable visitable) {
 		throw new UnsupportedOperationException();		// Cannot happen since all methods delegate.
 	}
 
 	@Override
-	public @Nullable R visitAnnotation(@NonNull org.eclipse.ocl.pivot.Annotation object) {
+	public @Nullable R visitAnnotation(org.eclipse.ocl.pivot.@NonNull Annotation object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitAnnotation(object);
@@ -95,7 +95,7 @@
 	}
 
 	@Override
-	public @Nullable R visitAnyType(@NonNull org.eclipse.ocl.pivot.AnyType object) {
+	public @Nullable R visitAnyType(org.eclipse.ocl.pivot.@NonNull AnyType object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitAnyType(object);
@@ -107,7 +107,7 @@
 	}
 
 	@Override
-	public @Nullable R visitAssociationClass(@NonNull org.eclipse.ocl.pivot.AssociationClass object) {
+	public @Nullable R visitAssociationClass(org.eclipse.ocl.pivot.@NonNull AssociationClass object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitAssociationClass(object);
@@ -119,7 +119,7 @@
 	}
 
 	@Override
-	public @Nullable R visitAssociationClassCallExp(@NonNull org.eclipse.ocl.pivot.AssociationClassCallExp object) {
+	public @Nullable R visitAssociationClassCallExp(org.eclipse.ocl.pivot.@NonNull AssociationClassCallExp object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitAssociationClassCallExp(object);
@@ -131,7 +131,7 @@
 	}
 
 	@Override
-	public @Nullable R visitBagType(@NonNull org.eclipse.ocl.pivot.BagType object) {
+	public @Nullable R visitBagType(org.eclipse.ocl.pivot.@NonNull BagType object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitBagType(object);
@@ -143,7 +143,7 @@
 	}
 
 	@Override
-	public @Nullable R visitBehavior(@NonNull org.eclipse.ocl.pivot.Behavior object) {
+	public @Nullable R visitBehavior(org.eclipse.ocl.pivot.@NonNull Behavior object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitBehavior(object);
@@ -155,7 +155,7 @@
 	}
 
 	@Override
-	public @Nullable R visitBooleanLiteralExp(@NonNull org.eclipse.ocl.pivot.BooleanLiteralExp object) {
+	public @Nullable R visitBooleanLiteralExp(org.eclipse.ocl.pivot.@NonNull BooleanLiteralExp object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitBooleanLiteralExp(object);
@@ -167,7 +167,7 @@
 	}
 
 	@Override
-	public @Nullable R visitCallExp(@NonNull org.eclipse.ocl.pivot.CallExp object) {
+	public @Nullable R visitCallExp(org.eclipse.ocl.pivot.@NonNull CallExp object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitCallExp(object);
@@ -179,7 +179,7 @@
 	}
 
 	@Override
-	public @Nullable R visitCallOperationAction(@NonNull org.eclipse.ocl.pivot.CallOperationAction object) {
+	public @Nullable R visitCallOperationAction(org.eclipse.ocl.pivot.@NonNull CallOperationAction object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitCallOperationAction(object);
@@ -191,7 +191,7 @@
 	}
 
 	@Override
-	public @Nullable R visitClass(@NonNull org.eclipse.ocl.pivot.Class object) {
+	public @Nullable R visitClass(org.eclipse.ocl.pivot.@NonNull Class object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitClass(object);
@@ -203,7 +203,7 @@
 	}
 
 	@Override
-	public @Nullable R visitCollectionItem(@NonNull org.eclipse.ocl.pivot.CollectionItem object) {
+	public @Nullable R visitCollectionItem(org.eclipse.ocl.pivot.@NonNull CollectionItem object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitCollectionItem(object);
@@ -215,7 +215,7 @@
 	}
 
 	@Override
-	public @Nullable R visitCollectionLiteralExp(@NonNull org.eclipse.ocl.pivot.CollectionLiteralExp object) {
+	public @Nullable R visitCollectionLiteralExp(org.eclipse.ocl.pivot.@NonNull CollectionLiteralExp object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitCollectionLiteralExp(object);
@@ -227,7 +227,7 @@
 	}
 
 	@Override
-	public @Nullable R visitCollectionLiteralPart(@NonNull org.eclipse.ocl.pivot.CollectionLiteralPart object) {
+	public @Nullable R visitCollectionLiteralPart(org.eclipse.ocl.pivot.@NonNull CollectionLiteralPart object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitCollectionLiteralPart(object);
@@ -239,7 +239,7 @@
 	}
 
 	@Override
-	public @Nullable R visitCollectionRange(@NonNull org.eclipse.ocl.pivot.CollectionRange object) {
+	public @Nullable R visitCollectionRange(org.eclipse.ocl.pivot.@NonNull CollectionRange object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitCollectionRange(object);
@@ -251,7 +251,7 @@
 	}
 
 	@Override
-	public @Nullable R visitCollectionType(@NonNull org.eclipse.ocl.pivot.CollectionType object) {
+	public @Nullable R visitCollectionType(org.eclipse.ocl.pivot.@NonNull CollectionType object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitCollectionType(object);
@@ -263,7 +263,7 @@
 	}
 
 	@Override
-	public @Nullable R visitComment(@NonNull org.eclipse.ocl.pivot.Comment object) {
+	public @Nullable R visitComment(org.eclipse.ocl.pivot.@NonNull Comment object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitComment(object);
@@ -275,7 +275,7 @@
 	}
 
 	@Override
-	public @Nullable R visitCompleteClass(@NonNull org.eclipse.ocl.pivot.CompleteClass object) {
+	public @Nullable R visitCompleteClass(org.eclipse.ocl.pivot.@NonNull CompleteClass object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitCompleteClass(object);
@@ -287,7 +287,7 @@
 	}
 
 	@Override
-	public @Nullable R visitCompleteEnvironment(@NonNull org.eclipse.ocl.pivot.CompleteEnvironment object) {
+	public @Nullable R visitCompleteEnvironment(org.eclipse.ocl.pivot.@NonNull CompleteEnvironment object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitCompleteEnvironment(object);
@@ -299,7 +299,7 @@
 	}
 
 	@Override
-	public @Nullable R visitCompleteModel(@NonNull org.eclipse.ocl.pivot.CompleteModel object) {
+	public @Nullable R visitCompleteModel(org.eclipse.ocl.pivot.@NonNull CompleteModel object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitCompleteModel(object);
@@ -311,7 +311,7 @@
 	}
 
 	@Override
-	public @Nullable R visitCompletePackage(@NonNull org.eclipse.ocl.pivot.CompletePackage object) {
+	public @Nullable R visitCompletePackage(org.eclipse.ocl.pivot.@NonNull CompletePackage object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitCompletePackage(object);
@@ -323,7 +323,7 @@
 	}
 
 	@Override
-	public @Nullable R visitConnectionPointReference(@NonNull org.eclipse.ocl.pivot.ConnectionPointReference object) {
+	public @Nullable R visitConnectionPointReference(org.eclipse.ocl.pivot.@NonNull ConnectionPointReference object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitConnectionPointReference(object);
@@ -335,7 +335,7 @@
 	}
 
 	@Override
-	public @Nullable R visitConstraint(@NonNull org.eclipse.ocl.pivot.Constraint object) {
+	public @Nullable R visitConstraint(org.eclipse.ocl.pivot.@NonNull Constraint object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitConstraint(object);
@@ -347,7 +347,7 @@
 	}
 
 	@Override
-	public @Nullable R visitDataType(@NonNull org.eclipse.ocl.pivot.DataType object) {
+	public @Nullable R visitDataType(org.eclipse.ocl.pivot.@NonNull DataType object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitDataType(object);
@@ -359,7 +359,7 @@
 	}
 
 	@Override
-	public @Nullable R visitDetail(@NonNull org.eclipse.ocl.pivot.Detail object) {
+	public @Nullable R visitDetail(org.eclipse.ocl.pivot.@NonNull Detail object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitDetail(object);
@@ -371,7 +371,7 @@
 	}
 
 	@Override
-	public @Nullable R visitDynamicBehavior(@NonNull org.eclipse.ocl.pivot.DynamicBehavior object) {
+	public @Nullable R visitDynamicBehavior(org.eclipse.ocl.pivot.@NonNull DynamicBehavior object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitDynamicBehavior(object);
@@ -383,7 +383,7 @@
 	}
 
 	@Override
-	public @Nullable R visitDynamicElement(@NonNull org.eclipse.ocl.pivot.DynamicElement object) {
+	public @Nullable R visitDynamicElement(org.eclipse.ocl.pivot.@NonNull DynamicElement object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitDynamicElement(object);
@@ -395,7 +395,7 @@
 	}
 
 	@Override
-	public @Nullable R visitDynamicProperty(@NonNull org.eclipse.ocl.pivot.DynamicProperty object) {
+	public @Nullable R visitDynamicProperty(org.eclipse.ocl.pivot.@NonNull DynamicProperty object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitDynamicProperty(object);
@@ -407,7 +407,7 @@
 	}
 
 	@Override
-	public @Nullable R visitDynamicType(@NonNull org.eclipse.ocl.pivot.DynamicType object) {
+	public @Nullable R visitDynamicType(org.eclipse.ocl.pivot.@NonNull DynamicType object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitDynamicType(object);
@@ -419,7 +419,7 @@
 	}
 
 	@Override
-	public @Nullable R visitDynamicValueSpecification(@NonNull org.eclipse.ocl.pivot.DynamicValueSpecification object) {
+	public @Nullable R visitDynamicValueSpecification(org.eclipse.ocl.pivot.@NonNull DynamicValueSpecification object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitDynamicValueSpecification(object);
@@ -431,7 +431,7 @@
 	}
 
 	@Override
-	public @Nullable R visitElement(@NonNull org.eclipse.ocl.pivot.Element object) {
+	public @Nullable R visitElement(org.eclipse.ocl.pivot.@NonNull Element object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitElement(object);
@@ -443,7 +443,7 @@
 	}
 
 	@Override
-	public @Nullable R visitElementExtension(@NonNull org.eclipse.ocl.pivot.ElementExtension object) {
+	public @Nullable R visitElementExtension(org.eclipse.ocl.pivot.@NonNull ElementExtension object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitElementExtension(object);
@@ -455,7 +455,7 @@
 	}
 
 	@Override
-	public @Nullable R visitEnumLiteralExp(@NonNull org.eclipse.ocl.pivot.EnumLiteralExp object) {
+	public @Nullable R visitEnumLiteralExp(org.eclipse.ocl.pivot.@NonNull EnumLiteralExp object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitEnumLiteralExp(object);
@@ -467,7 +467,7 @@
 	}
 
 	@Override
-	public @Nullable R visitEnumeration(@NonNull org.eclipse.ocl.pivot.Enumeration object) {
+	public @Nullable R visitEnumeration(org.eclipse.ocl.pivot.@NonNull Enumeration object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitEnumeration(object);
@@ -479,7 +479,7 @@
 	}
 
 	@Override
-	public @Nullable R visitEnumerationLiteral(@NonNull org.eclipse.ocl.pivot.EnumerationLiteral object) {
+	public @Nullable R visitEnumerationLiteral(org.eclipse.ocl.pivot.@NonNull EnumerationLiteral object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitEnumerationLiteral(object);
@@ -491,7 +491,7 @@
 	}
 
 	@Override
-	public @Nullable R visitExpressionInOCL(@NonNull org.eclipse.ocl.pivot.ExpressionInOCL object) {
+	public @Nullable R visitExpressionInOCL(org.eclipse.ocl.pivot.@NonNull ExpressionInOCL object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitExpressionInOCL(object);
@@ -503,7 +503,7 @@
 	}
 
 	@Override
-	public @Nullable R visitFeature(@NonNull org.eclipse.ocl.pivot.Feature object) {
+	public @Nullable R visitFeature(org.eclipse.ocl.pivot.@NonNull Feature object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitFeature(object);
@@ -515,7 +515,7 @@
 	}
 
 	@Override
-	public @Nullable R visitFeatureCallExp(@NonNull org.eclipse.ocl.pivot.FeatureCallExp object) {
+	public @Nullable R visitFeatureCallExp(org.eclipse.ocl.pivot.@NonNull FeatureCallExp object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitFeatureCallExp(object);
@@ -527,7 +527,7 @@
 	}
 
 	@Override
-	public @Nullable R visitFinalState(@NonNull org.eclipse.ocl.pivot.FinalState object) {
+	public @Nullable R visitFinalState(org.eclipse.ocl.pivot.@NonNull FinalState object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitFinalState(object);
@@ -539,7 +539,7 @@
 	}
 
 	@Override
-	public @Nullable R visitIfExp(@NonNull org.eclipse.ocl.pivot.IfExp object) {
+	public @Nullable R visitIfExp(org.eclipse.ocl.pivot.@NonNull IfExp object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitIfExp(object);
@@ -551,7 +551,7 @@
 	}
 
 	@Override
-	public @Nullable R visitImport(@NonNull org.eclipse.ocl.pivot.Import object) {
+	public @Nullable R visitImport(org.eclipse.ocl.pivot.@NonNull Import object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitImport(object);
@@ -563,7 +563,7 @@
 	}
 
 	@Override
-	public @Nullable R visitInstanceSpecification(@NonNull org.eclipse.ocl.pivot.InstanceSpecification object) {
+	public @Nullable R visitInstanceSpecification(org.eclipse.ocl.pivot.@NonNull InstanceSpecification object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitInstanceSpecification(object);
@@ -575,7 +575,7 @@
 	}
 
 	@Override
-	public @Nullable R visitIntegerLiteralExp(@NonNull org.eclipse.ocl.pivot.IntegerLiteralExp object) {
+	public @Nullable R visitIntegerLiteralExp(org.eclipse.ocl.pivot.@NonNull IntegerLiteralExp object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitIntegerLiteralExp(object);
@@ -587,7 +587,7 @@
 	}
 
 	@Override
-	public @Nullable R visitInvalidLiteralExp(@NonNull org.eclipse.ocl.pivot.InvalidLiteralExp object) {
+	public @Nullable R visitInvalidLiteralExp(org.eclipse.ocl.pivot.@NonNull InvalidLiteralExp object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitInvalidLiteralExp(object);
@@ -599,7 +599,7 @@
 	}
 
 	@Override
-	public @Nullable R visitInvalidType(@NonNull org.eclipse.ocl.pivot.InvalidType object) {
+	public @Nullable R visitInvalidType(org.eclipse.ocl.pivot.@NonNull InvalidType object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitInvalidType(object);
@@ -611,7 +611,7 @@
 	}
 
 	@Override
-	public @Nullable R visitIterateExp(@NonNull org.eclipse.ocl.pivot.IterateExp object) {
+	public @Nullable R visitIterateExp(org.eclipse.ocl.pivot.@NonNull IterateExp object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitIterateExp(object);
@@ -623,7 +623,7 @@
 	}
 
 	@Override
-	public @Nullable R visitIteration(@NonNull org.eclipse.ocl.pivot.Iteration object) {
+	public @Nullable R visitIteration(org.eclipse.ocl.pivot.@NonNull Iteration object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitIteration(object);
@@ -635,7 +635,7 @@
 	}
 
 	@Override
-	public @Nullable R visitIteratorExp(@NonNull org.eclipse.ocl.pivot.IteratorExp object) {
+	public @Nullable R visitIteratorExp(org.eclipse.ocl.pivot.@NonNull IteratorExp object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitIteratorExp(object);
@@ -647,7 +647,7 @@
 	}
 
 	@Override
-	public @Nullable R visitLambdaType(@NonNull org.eclipse.ocl.pivot.LambdaType object) {
+	public @Nullable R visitLambdaType(org.eclipse.ocl.pivot.@NonNull LambdaType object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitLambdaType(object);
@@ -659,7 +659,7 @@
 	}
 
 	@Override
-	public @Nullable R visitLanguageExpression(@NonNull org.eclipse.ocl.pivot.LanguageExpression object) {
+	public @Nullable R visitLanguageExpression(org.eclipse.ocl.pivot.@NonNull LanguageExpression object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitLanguageExpression(object);
@@ -671,7 +671,7 @@
 	}
 
 	@Override
-	public @Nullable R visitLetExp(@NonNull org.eclipse.ocl.pivot.LetExp object) {
+	public @Nullable R visitLetExp(org.eclipse.ocl.pivot.@NonNull LetExp object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitLetExp(object);
@@ -683,7 +683,7 @@
 	}
 
 	@Override
-	public @Nullable R visitLibrary(@NonNull org.eclipse.ocl.pivot.Library object) {
+	public @Nullable R visitLibrary(org.eclipse.ocl.pivot.@NonNull Library object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitLibrary(object);
@@ -695,7 +695,7 @@
 	}
 
 	@Override
-	public @Nullable R visitLiteralExp(@NonNull org.eclipse.ocl.pivot.LiteralExp object) {
+	public @Nullable R visitLiteralExp(org.eclipse.ocl.pivot.@NonNull LiteralExp object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitLiteralExp(object);
@@ -707,7 +707,7 @@
 	}
 
 	@Override
-	public @Nullable R visitLoopExp(@NonNull org.eclipse.ocl.pivot.LoopExp object) {
+	public @Nullable R visitLoopExp(org.eclipse.ocl.pivot.@NonNull LoopExp object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitLoopExp(object);
@@ -719,7 +719,7 @@
 	}
 
 	@Override
-	public @Nullable R visitMapLiteralExp(@NonNull org.eclipse.ocl.pivot.MapLiteralExp object) {
+	public @Nullable R visitMapLiteralExp(org.eclipse.ocl.pivot.@NonNull MapLiteralExp object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitMapLiteralExp(object);
@@ -731,7 +731,7 @@
 	}
 
 	@Override
-	public @Nullable R visitMapLiteralPart(@NonNull org.eclipse.ocl.pivot.MapLiteralPart object) {
+	public @Nullable R visitMapLiteralPart(org.eclipse.ocl.pivot.@NonNull MapLiteralPart object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitMapLiteralPart(object);
@@ -743,7 +743,7 @@
 	}
 
 	@Override
-	public @Nullable R visitMapType(@NonNull org.eclipse.ocl.pivot.MapType object) {
+	public @Nullable R visitMapType(org.eclipse.ocl.pivot.@NonNull MapType object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitMapType(object);
@@ -755,7 +755,7 @@
 	}
 
 	@Override
-	public @Nullable R visitMessageExp(@NonNull org.eclipse.ocl.pivot.MessageExp object) {
+	public @Nullable R visitMessageExp(org.eclipse.ocl.pivot.@NonNull MessageExp object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitMessageExp(object);
@@ -767,7 +767,7 @@
 	}
 
 	@Override
-	public @Nullable R visitMessageType(@NonNull org.eclipse.ocl.pivot.MessageType object) {
+	public @Nullable R visitMessageType(org.eclipse.ocl.pivot.@NonNull MessageType object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitMessageType(object);
@@ -779,7 +779,7 @@
 	}
 
 	@Override
-	public @Nullable R visitModel(@NonNull org.eclipse.ocl.pivot.Model object) {
+	public @Nullable R visitModel(org.eclipse.ocl.pivot.@NonNull Model object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitModel(object);
@@ -791,7 +791,7 @@
 	}
 
 	@Override
-	public @Nullable R visitNamedElement(@NonNull org.eclipse.ocl.pivot.NamedElement object) {
+	public @Nullable R visitNamedElement(org.eclipse.ocl.pivot.@NonNull NamedElement object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitNamedElement(object);
@@ -803,7 +803,7 @@
 	}
 
 	@Override
-	public @Nullable R visitNamespace(@NonNull org.eclipse.ocl.pivot.Namespace object) {
+	public @Nullable R visitNamespace(org.eclipse.ocl.pivot.@NonNull Namespace object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitNamespace(object);
@@ -815,7 +815,7 @@
 	}
 
 	@Override
-	public @Nullable R visitNavigationCallExp(@NonNull org.eclipse.ocl.pivot.NavigationCallExp object) {
+	public @Nullable R visitNavigationCallExp(org.eclipse.ocl.pivot.@NonNull NavigationCallExp object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitNavigationCallExp(object);
@@ -827,7 +827,7 @@
 	}
 
 	@Override
-	public @Nullable R visitNullLiteralExp(@NonNull org.eclipse.ocl.pivot.NullLiteralExp object) {
+	public @Nullable R visitNullLiteralExp(org.eclipse.ocl.pivot.@NonNull NullLiteralExp object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitNullLiteralExp(object);
@@ -839,7 +839,7 @@
 	}
 
 	@Override
-	public @Nullable R visitNumericLiteralExp(@NonNull org.eclipse.ocl.pivot.NumericLiteralExp object) {
+	public @Nullable R visitNumericLiteralExp(org.eclipse.ocl.pivot.@NonNull NumericLiteralExp object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitNumericLiteralExp(object);
@@ -851,7 +851,7 @@
 	}
 
 	@Override
-	public @Nullable R visitOCLExpression(@NonNull org.eclipse.ocl.pivot.OCLExpression object) {
+	public @Nullable R visitOCLExpression(org.eclipse.ocl.pivot.@NonNull OCLExpression object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitOCLExpression(object);
@@ -863,7 +863,7 @@
 	}
 
 	@Override
-	public @Nullable R visitOperation(@NonNull org.eclipse.ocl.pivot.Operation object) {
+	public @Nullable R visitOperation(org.eclipse.ocl.pivot.@NonNull Operation object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitOperation(object);
@@ -875,7 +875,7 @@
 	}
 
 	@Override
-	public @Nullable R visitOperationCallExp(@NonNull org.eclipse.ocl.pivot.OperationCallExp object) {
+	public @Nullable R visitOperationCallExp(org.eclipse.ocl.pivot.@NonNull OperationCallExp object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitOperationCallExp(object);
@@ -887,7 +887,7 @@
 	}
 
 	@Override
-	public @Nullable R visitOppositePropertyCallExp(@NonNull org.eclipse.ocl.pivot.OppositePropertyCallExp object) {
+	public @Nullable R visitOppositePropertyCallExp(org.eclipse.ocl.pivot.@NonNull OppositePropertyCallExp object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitOppositePropertyCallExp(object);
@@ -899,7 +899,7 @@
 	}
 
 	@Override
-	public @Nullable R visitOrderedSetType(@NonNull org.eclipse.ocl.pivot.OrderedSetType object) {
+	public @Nullable R visitOrderedSetType(org.eclipse.ocl.pivot.@NonNull OrderedSetType object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitOrderedSetType(object);
@@ -911,7 +911,7 @@
 	}
 
 	@Override
-	public @Nullable R visitOrphanCompletePackage(@NonNull org.eclipse.ocl.pivot.OrphanCompletePackage object) {
+	public @Nullable R visitOrphanCompletePackage(org.eclipse.ocl.pivot.@NonNull OrphanCompletePackage object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitOrphanCompletePackage(object);
@@ -923,7 +923,7 @@
 	}
 
 	@Override
-	public @Nullable R visitPackage(@NonNull org.eclipse.ocl.pivot.Package object) {
+	public @Nullable R visitPackage(org.eclipse.ocl.pivot.@NonNull Package object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitPackage(object);
@@ -935,7 +935,7 @@
 	}
 
 	@Override
-	public @Nullable R visitParameter(@NonNull org.eclipse.ocl.pivot.Parameter object) {
+	public @Nullable R visitParameter(org.eclipse.ocl.pivot.@NonNull Parameter object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitParameter(object);
@@ -947,7 +947,7 @@
 	}
 
 	@Override
-	public @Nullable R visitPrecedence(@NonNull org.eclipse.ocl.pivot.Precedence object) {
+	public @Nullable R visitPrecedence(org.eclipse.ocl.pivot.@NonNull Precedence object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitPrecedence(object);
@@ -959,7 +959,7 @@
 	}
 
 	@Override
-	public @Nullable R visitPrimitiveCompletePackage(@NonNull org.eclipse.ocl.pivot.PrimitiveCompletePackage object) {
+	public @Nullable R visitPrimitiveCompletePackage(org.eclipse.ocl.pivot.@NonNull PrimitiveCompletePackage object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitPrimitiveCompletePackage(object);
@@ -971,7 +971,7 @@
 	}
 
 	@Override
-	public @Nullable R visitPrimitiveLiteralExp(@NonNull org.eclipse.ocl.pivot.PrimitiveLiteralExp object) {
+	public @Nullable R visitPrimitiveLiteralExp(org.eclipse.ocl.pivot.@NonNull PrimitiveLiteralExp object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitPrimitiveLiteralExp(object);
@@ -983,7 +983,7 @@
 	}
 
 	@Override
-	public @Nullable R visitPrimitiveType(@NonNull org.eclipse.ocl.pivot.PrimitiveType object) {
+	public @Nullable R visitPrimitiveType(org.eclipse.ocl.pivot.@NonNull PrimitiveType object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitPrimitiveType(object);
@@ -995,7 +995,7 @@
 	}
 
 	@Override
-	public @Nullable R visitProfile(@NonNull org.eclipse.ocl.pivot.Profile object) {
+	public @Nullable R visitProfile(org.eclipse.ocl.pivot.@NonNull Profile object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitProfile(object);
@@ -1007,7 +1007,7 @@
 	}
 
 	@Override
-	public @Nullable R visitProfileApplication(@NonNull org.eclipse.ocl.pivot.ProfileApplication object) {
+	public @Nullable R visitProfileApplication(org.eclipse.ocl.pivot.@NonNull ProfileApplication object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitProfileApplication(object);
@@ -1019,7 +1019,7 @@
 	}
 
 	@Override
-	public @Nullable R visitProperty(@NonNull org.eclipse.ocl.pivot.Property object) {
+	public @Nullable R visitProperty(org.eclipse.ocl.pivot.@NonNull Property object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitProperty(object);
@@ -1031,7 +1031,7 @@
 	}
 
 	@Override
-	public @Nullable R visitPropertyCallExp(@NonNull org.eclipse.ocl.pivot.PropertyCallExp object) {
+	public @Nullable R visitPropertyCallExp(org.eclipse.ocl.pivot.@NonNull PropertyCallExp object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitPropertyCallExp(object);
@@ -1043,7 +1043,7 @@
 	}
 
 	@Override
-	public @Nullable R visitPseudostate(@NonNull org.eclipse.ocl.pivot.Pseudostate object) {
+	public @Nullable R visitPseudostate(org.eclipse.ocl.pivot.@NonNull Pseudostate object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitPseudostate(object);
@@ -1055,7 +1055,7 @@
 	}
 
 	@Override
-	public @Nullable R visitRealLiteralExp(@NonNull org.eclipse.ocl.pivot.RealLiteralExp object) {
+	public @Nullable R visitRealLiteralExp(org.eclipse.ocl.pivot.@NonNull RealLiteralExp object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitRealLiteralExp(object);
@@ -1067,7 +1067,7 @@
 	}
 
 	@Override
-	public @Nullable R visitRegion(@NonNull org.eclipse.ocl.pivot.Region object) {
+	public @Nullable R visitRegion(org.eclipse.ocl.pivot.@NonNull Region object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitRegion(object);
@@ -1079,7 +1079,7 @@
 	}
 
 	@Override
-	public @Nullable R visitSelfType(@NonNull org.eclipse.ocl.pivot.SelfType object) {
+	public @Nullable R visitSelfType(org.eclipse.ocl.pivot.@NonNull SelfType object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitSelfType(object);
@@ -1091,7 +1091,7 @@
 	}
 
 	@Override
-	public @Nullable R visitSendSignalAction(@NonNull org.eclipse.ocl.pivot.SendSignalAction object) {
+	public @Nullable R visitSendSignalAction(org.eclipse.ocl.pivot.@NonNull SendSignalAction object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitSendSignalAction(object);
@@ -1103,7 +1103,7 @@
 	}
 
 	@Override
-	public @Nullable R visitSequenceType(@NonNull org.eclipse.ocl.pivot.SequenceType object) {
+	public @Nullable R visitSequenceType(org.eclipse.ocl.pivot.@NonNull SequenceType object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitSequenceType(object);
@@ -1115,7 +1115,7 @@
 	}
 
 	@Override
-	public @Nullable R visitSetType(@NonNull org.eclipse.ocl.pivot.SetType object) {
+	public @Nullable R visitSetType(org.eclipse.ocl.pivot.@NonNull SetType object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitSetType(object);
@@ -1127,7 +1127,7 @@
 	}
 
 	@Override
-	public @Nullable R visitShadowExp(@NonNull org.eclipse.ocl.pivot.ShadowExp object) {
+	public @Nullable R visitShadowExp(org.eclipse.ocl.pivot.@NonNull ShadowExp object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitShadowExp(object);
@@ -1139,7 +1139,7 @@
 	}
 
 	@Override
-	public @Nullable R visitShadowPart(@NonNull org.eclipse.ocl.pivot.ShadowPart object) {
+	public @Nullable R visitShadowPart(org.eclipse.ocl.pivot.@NonNull ShadowPart object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitShadowPart(object);
@@ -1151,7 +1151,7 @@
 	}
 
 	@Override
-	public @Nullable R visitSignal(@NonNull org.eclipse.ocl.pivot.Signal object) {
+	public @Nullable R visitSignal(org.eclipse.ocl.pivot.@NonNull Signal object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitSignal(object);
@@ -1163,7 +1163,7 @@
 	}
 
 	@Override
-	public @Nullable R visitSlot(@NonNull org.eclipse.ocl.pivot.Slot object) {
+	public @Nullable R visitSlot(org.eclipse.ocl.pivot.@NonNull Slot object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitSlot(object);
@@ -1175,7 +1175,7 @@
 	}
 
 	@Override
-	public @Nullable R visitStandardLibrary(@NonNull org.eclipse.ocl.pivot.StandardLibrary object) {
+	public @Nullable R visitStandardLibrary(org.eclipse.ocl.pivot.@NonNull StandardLibrary object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitStandardLibrary(object);
@@ -1187,7 +1187,7 @@
 	}
 
 	@Override
-	public @Nullable R visitState(@NonNull org.eclipse.ocl.pivot.State object) {
+	public @Nullable R visitState(org.eclipse.ocl.pivot.@NonNull State object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitState(object);
@@ -1199,7 +1199,7 @@
 	}
 
 	@Override
-	public @Nullable R visitStateExp(@NonNull org.eclipse.ocl.pivot.StateExp object) {
+	public @Nullable R visitStateExp(org.eclipse.ocl.pivot.@NonNull StateExp object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitStateExp(object);
@@ -1211,7 +1211,7 @@
 	}
 
 	@Override
-	public @Nullable R visitStateMachine(@NonNull org.eclipse.ocl.pivot.StateMachine object) {
+	public @Nullable R visitStateMachine(org.eclipse.ocl.pivot.@NonNull StateMachine object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitStateMachine(object);
@@ -1223,7 +1223,7 @@
 	}
 
 	@Override
-	public @Nullable R visitStereotype(@NonNull org.eclipse.ocl.pivot.Stereotype object) {
+	public @Nullable R visitStereotype(org.eclipse.ocl.pivot.@NonNull Stereotype object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitStereotype(object);
@@ -1235,7 +1235,7 @@
 	}
 
 	@Override
-	public @Nullable R visitStereotypeExtender(@NonNull org.eclipse.ocl.pivot.StereotypeExtender object) {
+	public @Nullable R visitStereotypeExtender(org.eclipse.ocl.pivot.@NonNull StereotypeExtender object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitStereotypeExtender(object);
@@ -1247,7 +1247,7 @@
 	}
 
 	@Override
-	public @Nullable R visitStringLiteralExp(@NonNull org.eclipse.ocl.pivot.StringLiteralExp object) {
+	public @Nullable R visitStringLiteralExp(org.eclipse.ocl.pivot.@NonNull StringLiteralExp object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitStringLiteralExp(object);
@@ -1259,7 +1259,7 @@
 	}
 
 	@Override
-	public @Nullable R visitTemplateBinding(@NonNull org.eclipse.ocl.pivot.TemplateBinding object) {
+	public @Nullable R visitTemplateBinding(org.eclipse.ocl.pivot.@NonNull TemplateBinding object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitTemplateBinding(object);
@@ -1271,7 +1271,7 @@
 	}
 
 	@Override
-	public @Nullable R visitTemplateParameter(@NonNull org.eclipse.ocl.pivot.TemplateParameter object) {
+	public @Nullable R visitTemplateParameter(org.eclipse.ocl.pivot.@NonNull TemplateParameter object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitTemplateParameter(object);
@@ -1283,7 +1283,7 @@
 	}
 
 	@Override
-	public @Nullable R visitTemplateParameterSubstitution(@NonNull org.eclipse.ocl.pivot.TemplateParameterSubstitution object) {
+	public @Nullable R visitTemplateParameterSubstitution(org.eclipse.ocl.pivot.@NonNull TemplateParameterSubstitution object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitTemplateParameterSubstitution(object);
@@ -1295,7 +1295,7 @@
 	}
 
 	@Override
-	public @Nullable R visitTemplateSignature(@NonNull org.eclipse.ocl.pivot.TemplateSignature object) {
+	public @Nullable R visitTemplateSignature(org.eclipse.ocl.pivot.@NonNull TemplateSignature object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitTemplateSignature(object);
@@ -1307,7 +1307,7 @@
 	}
 
 	@Override
-	public @Nullable R visitTemplateableElement(@NonNull org.eclipse.ocl.pivot.TemplateableElement object) {
+	public @Nullable R visitTemplateableElement(org.eclipse.ocl.pivot.@NonNull TemplateableElement object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitTemplateableElement(object);
@@ -1319,7 +1319,7 @@
 	}
 
 	@Override
-	public @Nullable R visitTransition(@NonNull org.eclipse.ocl.pivot.Transition object) {
+	public @Nullable R visitTransition(org.eclipse.ocl.pivot.@NonNull Transition object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitTransition(object);
@@ -1331,7 +1331,7 @@
 	}
 
 	@Override
-	public @Nullable R visitTrigger(@NonNull org.eclipse.ocl.pivot.Trigger object) {
+	public @Nullable R visitTrigger(org.eclipse.ocl.pivot.@NonNull Trigger object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitTrigger(object);
@@ -1343,7 +1343,7 @@
 	}
 
 	@Override
-	public @Nullable R visitTupleLiteralExp(@NonNull org.eclipse.ocl.pivot.TupleLiteralExp object) {
+	public @Nullable R visitTupleLiteralExp(org.eclipse.ocl.pivot.@NonNull TupleLiteralExp object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitTupleLiteralExp(object);
@@ -1355,7 +1355,7 @@
 	}
 
 	@Override
-	public @Nullable R visitTupleLiteralPart(@NonNull org.eclipse.ocl.pivot.TupleLiteralPart object) {
+	public @Nullable R visitTupleLiteralPart(org.eclipse.ocl.pivot.@NonNull TupleLiteralPart object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitTupleLiteralPart(object);
@@ -1367,7 +1367,7 @@
 	}
 
 	@Override
-	public @Nullable R visitTupleType(@NonNull org.eclipse.ocl.pivot.TupleType object) {
+	public @Nullable R visitTupleType(org.eclipse.ocl.pivot.@NonNull TupleType object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitTupleType(object);
@@ -1379,7 +1379,7 @@
 	}
 
 	@Override
-	public @Nullable R visitType(@NonNull org.eclipse.ocl.pivot.Type object) {
+	public @Nullable R visitType(org.eclipse.ocl.pivot.@NonNull Type object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitType(object);
@@ -1391,7 +1391,7 @@
 	}
 
 	@Override
-	public @Nullable R visitTypeExp(@NonNull org.eclipse.ocl.pivot.TypeExp object) {
+	public @Nullable R visitTypeExp(org.eclipse.ocl.pivot.@NonNull TypeExp object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitTypeExp(object);
@@ -1403,7 +1403,7 @@
 	}
 
 	@Override
-	public @Nullable R visitTypedElement(@NonNull org.eclipse.ocl.pivot.TypedElement object) {
+	public @Nullable R visitTypedElement(org.eclipse.ocl.pivot.@NonNull TypedElement object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitTypedElement(object);
@@ -1415,7 +1415,7 @@
 	}
 
 	@Override
-	public @Nullable R visitUnlimitedNaturalLiteralExp(@NonNull org.eclipse.ocl.pivot.UnlimitedNaturalLiteralExp object) {
+	public @Nullable R visitUnlimitedNaturalLiteralExp(org.eclipse.ocl.pivot.@NonNull UnlimitedNaturalLiteralExp object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitUnlimitedNaturalLiteralExp(object);
@@ -1427,7 +1427,7 @@
 	}
 
 	@Override
-	public @Nullable R visitUnspecifiedValueExp(@NonNull org.eclipse.ocl.pivot.UnspecifiedValueExp object) {
+	public @Nullable R visitUnspecifiedValueExp(org.eclipse.ocl.pivot.@NonNull UnspecifiedValueExp object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitUnspecifiedValueExp(object);
@@ -1439,7 +1439,7 @@
 	}
 
 	@Override
-	public @Nullable R visitValueSpecification(@NonNull org.eclipse.ocl.pivot.ValueSpecification object) {
+	public @Nullable R visitValueSpecification(org.eclipse.ocl.pivot.@NonNull ValueSpecification object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitValueSpecification(object);
@@ -1451,7 +1451,7 @@
 	}
 
 	@Override
-	public @Nullable R visitVariable(@NonNull org.eclipse.ocl.pivot.Variable object) {
+	public @Nullable R visitVariable(org.eclipse.ocl.pivot.@NonNull Variable object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitVariable(object);
@@ -1463,7 +1463,7 @@
 	}
 
 	@Override
-	public @Nullable R visitVariableDeclaration(@NonNull org.eclipse.ocl.pivot.VariableDeclaration object) {
+	public @Nullable R visitVariableDeclaration(org.eclipse.ocl.pivot.@NonNull VariableDeclaration object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitVariableDeclaration(object);
@@ -1475,7 +1475,7 @@
 	}
 
 	@Override
-	public @Nullable R visitVariableExp(@NonNull org.eclipse.ocl.pivot.VariableExp object) {
+	public @Nullable R visitVariableExp(org.eclipse.ocl.pivot.@NonNull VariableExp object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitVariableExp(object);
@@ -1487,7 +1487,7 @@
 	}
 
 	@Override
-	public @Nullable R visitVertex(@NonNull org.eclipse.ocl.pivot.Vertex object) {
+	public @Nullable R visitVertex(org.eclipse.ocl.pivot.@NonNull Vertex object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitVertex(object);
@@ -1499,7 +1499,7 @@
 	}
 
 	@Override
-	public @Nullable R visitVoidType(@NonNull org.eclipse.ocl.pivot.VoidType object) {
+	public @Nullable R visitVoidType(org.eclipse.ocl.pivot.@NonNull VoidType object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitVoidType(object);
@@ -1511,7 +1511,7 @@
 	}
 
 	@Override
-	public @Nullable R visitWildcardType(@NonNull org.eclipse.ocl.pivot.WildcardType object) {
+	public @Nullable R visitWildcardType(org.eclipse.ocl.pivot.@NonNull WildcardType object) {
 		P prologue = preVisit(object);
 		try {
 			R result = delegate.visitWildcardType(object);
diff --git a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/util/Visitable.java b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/util/Visitable.java
index 4689daf..ad48eb6 100644
--- a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/util/Visitable.java
+++ b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/util/Visitable.java
@@ -36,7 +36,7 @@
 	 * @param visitor
 	 * @return the result of the visit.
 	 */
-	@Nullable <R> R accept(@NonNull org.eclipse.ocl.pivot.util.Visitor<R> visitor);
+	@Nullable <R> R accept(org.eclipse.ocl.pivot.util.@NonNull Visitor<R> visitor);
 	
 	EClass eClass();
 }
diff --git a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/util/Visitor.java b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/util/Visitor.java
index c3b5f4c..60ced35 100644
--- a/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/util/Visitor.java
+++ b/plugins/org.eclipse.ocl.pivot/emf-gen/org/eclipse/ocl/pivot/util/Visitor.java
@@ -38,126 +38,126 @@
 	 * Return the result of visiting a visitable for which no more specific pivot type method
 	 * is available.
 	 */
-	@Nullable R visiting(@NonNull org.eclipse.ocl.pivot.util.Visitable visitable);
+	@Nullable R visiting(org.eclipse.ocl.pivot.util.@NonNull Visitable visitable);
 
-	@Nullable R visitAnnotation(@NonNull org.eclipse.ocl.pivot.Annotation object);
-	@Nullable R visitAnyType(@NonNull org.eclipse.ocl.pivot.AnyType object);
-	@Nullable R visitAssociationClass(@NonNull org.eclipse.ocl.pivot.AssociationClass object);
-	@Nullable R visitAssociationClassCallExp(@NonNull org.eclipse.ocl.pivot.AssociationClassCallExp object);
-	@Nullable R visitBagType(@NonNull org.eclipse.ocl.pivot.BagType object);
-	@Nullable R visitBehavior(@NonNull org.eclipse.ocl.pivot.Behavior object);
-	@Nullable R visitBooleanLiteralExp(@NonNull org.eclipse.ocl.pivot.BooleanLiteralExp object);
-	@Nullable R visitCallExp(@NonNull org.eclipse.ocl.pivot.CallExp object);
-	@Nullable R visitCallOperationAction(@NonNull org.eclipse.ocl.pivot.CallOperationAction object);
-	@Nullable R visitClass(@NonNull org.eclipse.ocl.pivot.Class object);
-	@Nullable R visitCollectionItem(@NonNull org.eclipse.ocl.pivot.CollectionItem object);
-	@Nullable R visitCollectionLiteralExp(@NonNull org.eclipse.ocl.pivot.CollectionLiteralExp object);
-	@Nullable R visitCollectionLiteralPart(@NonNull org.eclipse.ocl.pivot.CollectionLiteralPart object);
-	@Nullable R visitCollectionRange(@NonNull org.eclipse.ocl.pivot.CollectionRange object);
-	@Nullable R visitCollectionType(@NonNull org.eclipse.ocl.pivot.CollectionType object);
-	@Nullable R visitComment(@NonNull org.eclipse.ocl.pivot.Comment object);
-	@Nullable R visitCompleteClass(@NonNull org.eclipse.ocl.pivot.CompleteClass object);
-	@Nullable R visitCompleteEnvironment(@NonNull org.eclipse.ocl.pivot.CompleteEnvironment object);
-	@Nullable R visitCompleteModel(@NonNull org.eclipse.ocl.pivot.CompleteModel object);
-	@Nullable R visitCompletePackage(@NonNull org.eclipse.ocl.pivot.CompletePackage object);
-	@Nullable R visitConnectionPointReference(@NonNull org.eclipse.ocl.pivot.ConnectionPointReference object);
-	@Nullable R visitConstraint(@NonNull org.eclipse.ocl.pivot.Constraint object);
-	@Nullable R visitDataType(@NonNull org.eclipse.ocl.pivot.DataType object);
-	@Nullable R visitDetail(@NonNull org.eclipse.ocl.pivot.Detail object);
-	@Nullable R visitDynamicBehavior(@NonNull org.eclipse.ocl.pivot.DynamicBehavior object);
-	@Nullable R visitDynamicElement(@NonNull org.eclipse.ocl.pivot.DynamicElement object);
-	@Nullable R visitDynamicProperty(@NonNull org.eclipse.ocl.pivot.DynamicProperty object);
-	@Nullable R visitDynamicType(@NonNull org.eclipse.ocl.pivot.DynamicType object);
-	@Nullable R visitDynamicValueSpecification(@NonNull org.eclipse.ocl.pivot.DynamicValueSpecification object);
-	@Nullable R visitElement(@NonNull org.eclipse.ocl.pivot.Element object);
-	@Nullable R visitElementExtension(@NonNull org.eclipse.ocl.pivot.ElementExtension object);
-	@Nullable R visitEnumLiteralExp(@NonNull org.eclipse.ocl.pivot.EnumLiteralExp object);
-	@Nullable R visitEnumeration(@NonNull org.eclipse.ocl.pivot.Enumeration object);
-	@Nullable R visitEnumerationLiteral(@NonNull org.eclipse.ocl.pivot.EnumerationLiteral object);
-	@Nullable R visitExpressionInOCL(@NonNull org.eclipse.ocl.pivot.ExpressionInOCL object);
-	@Nullable R visitFeature(@NonNull org.eclipse.ocl.pivot.Feature object);
-	@Nullable R visitFeatureCallExp(@NonNull org.eclipse.ocl.pivot.FeatureCallExp object);
-	@Nullable R visitFinalState(@NonNull org.eclipse.ocl.pivot.FinalState object);
-	@Nullable R visitIfExp(@NonNull org.eclipse.ocl.pivot.IfExp object);
-	@Nullable R visitImport(@NonNull org.eclipse.ocl.pivot.Import object);
-	@Nullable R visitInstanceSpecification(@NonNull org.eclipse.ocl.pivot.InstanceSpecification object);
-	@Nullable R visitIntegerLiteralExp(@NonNull org.eclipse.ocl.pivot.IntegerLiteralExp object);
-	@Nullable R visitInvalidLiteralExp(@NonNull org.eclipse.ocl.pivot.InvalidLiteralExp object);
-	@Nullable R visitInvalidType(@NonNull org.eclipse.ocl.pivot.InvalidType object);
-	@Nullable R visitIterateExp(@NonNull org.eclipse.ocl.pivot.IterateExp object);
-	@Nullable R visitIteration(@NonNull org.eclipse.ocl.pivot.Iteration object);
-	@Nullable R visitIteratorExp(@NonNull org.eclipse.ocl.pivot.IteratorExp object);
-	@Nullable R visitLambdaType(@NonNull org.eclipse.ocl.pivot.LambdaType object);
-	@Nullable R visitLanguageExpression(@NonNull org.eclipse.ocl.pivot.LanguageExpression object);
-	@Nullable R visitLetExp(@NonNull org.eclipse.ocl.pivot.LetExp object);
-	@Nullable R visitLibrary(@NonNull org.eclipse.ocl.pivot.Library object);
-	@Nullable R visitLiteralExp(@NonNull org.eclipse.ocl.pivot.LiteralExp object);
-	@Nullable R visitLoopExp(@NonNull org.eclipse.ocl.pivot.LoopExp object);
-	@Nullable R visitMapLiteralExp(@NonNull org.eclipse.ocl.pivot.MapLiteralExp object);
-	@Nullable R visitMapLiteralPart(@NonNull org.eclipse.ocl.pivot.MapLiteralPart object);
-	@Nullable R visitMapType(@NonNull org.eclipse.ocl.pivot.MapType object);
-	@Nullable R visitMessageExp(@NonNull org.eclipse.ocl.pivot.MessageExp object);
-	@Nullable R visitMessageType(@NonNull org.eclipse.ocl.pivot.MessageType object);
-	@Nullable R visitModel(@NonNull org.eclipse.ocl.pivot.Model object);
-	@Nullable R visitNamedElement(@NonNull org.eclipse.ocl.pivot.NamedElement object);
-	@Nullable R visitNamespace(@NonNull org.eclipse.ocl.pivot.Namespace object);
-	@Nullable R visitNavigationCallExp(@NonNull org.eclipse.ocl.pivot.NavigationCallExp object);
-	@Nullable R visitNullLiteralExp(@NonNull org.eclipse.ocl.pivot.NullLiteralExp object);
-	@Nullable R visitNumericLiteralExp(@NonNull org.eclipse.ocl.pivot.NumericLiteralExp object);
-	@Nullable R visitOCLExpression(@NonNull org.eclipse.ocl.pivot.OCLExpression object);
-	@Nullable R visitOperation(@NonNull org.eclipse.ocl.pivot.Operation object);
-	@Nullable R visitOperationCallExp(@NonNull org.eclipse.ocl.pivot.OperationCallExp object);
-	@Nullable R visitOppositePropertyCallExp(@NonNull org.eclipse.ocl.pivot.OppositePropertyCallExp object);
-	@Nullable R visitOrderedSetType(@NonNull org.eclipse.ocl.pivot.OrderedSetType object);
-	@Nullable R visitOrphanCompletePackage(@NonNull org.eclipse.ocl.pivot.OrphanCompletePackage object);
-	@Nullable R visitPackage(@NonNull org.eclipse.ocl.pivot.Package object);
-	@Nullable R visitParameter(@NonNull org.eclipse.ocl.pivot.Parameter object);
-	@Nullable R visitPrecedence(@NonNull org.eclipse.ocl.pivot.Precedence object);
-	@Nullable R visitPrimitiveCompletePackage(@NonNull org.eclipse.ocl.pivot.PrimitiveCompletePackage object);
-	@Nullable R visitPrimitiveLiteralExp(@NonNull org.eclipse.ocl.pivot.PrimitiveLiteralExp object);
-	@Nullable R visitPrimitiveType(@NonNull org.eclipse.ocl.pivot.PrimitiveType object);
-	@Nullable R visitProfile(@NonNull org.eclipse.ocl.pivot.Profile object);
-	@Nullable R visitProfileApplication(@NonNull org.eclipse.ocl.pivot.ProfileApplication object);
-	@Nullable R visitProperty(@NonNull org.eclipse.ocl.pivot.Property object);
-	@Nullable R visitPropertyCallExp(@NonNull org.eclipse.ocl.pivot.PropertyCallExp object);
-	@Nullable R visitPseudostate(@NonNull org.eclipse.ocl.pivot.Pseudostate object);
-	@Nullable R visitRealLiteralExp(@NonNull org.eclipse.ocl.pivot.RealLiteralExp object);
-	@Nullable R visitRegion(@NonNull org.eclipse.ocl.pivot.Region object);
-	@Nullable R visitSelfType(@NonNull org.eclipse.ocl.pivot.SelfType object);
-	@Nullable R visitSendSignalAction(@NonNull org.eclipse.ocl.pivot.SendSignalAction object);
-	@Nullable R visitSequenceType(@NonNull org.eclipse.ocl.pivot.SequenceType object);
-	@Nullable R visitSetType(@NonNull org.eclipse.ocl.pivot.SetType object);
-	@Nullable R visitShadowExp(@NonNull org.eclipse.ocl.pivot.ShadowExp object);
-	@Nullable R visitShadowPart(@NonNull org.eclipse.ocl.pivot.ShadowPart object);
-	@Nullable R visitSignal(@NonNull org.eclipse.ocl.pivot.Signal object);
-	@Nullable R visitSlot(@NonNull org.eclipse.ocl.pivot.Slot object);
-	@Nullable R visitStandardLibrary(@NonNull org.eclipse.ocl.pivot.StandardLibrary object);
-	@Nullable R visitState(@NonNull org.eclipse.ocl.pivot.State object);
-	@Nullable R visitStateExp(@NonNull org.eclipse.ocl.pivot.StateExp object);
-	@Nullable R visitStateMachine(@NonNull org.eclipse.ocl.pivot.StateMachine object);
-	@Nullable R visitStereotype(@NonNull org.eclipse.ocl.pivot.Stereotype object);
-	@Nullable R visitStereotypeExtender(@NonNull org.eclipse.ocl.pivot.StereotypeExtender object);
-	@Nullable R visitStringLiteralExp(@NonNull org.eclipse.ocl.pivot.StringLiteralExp object);
-	@Nullable R visitTemplateBinding(@NonNull org.eclipse.ocl.pivot.TemplateBinding object);
-	@Nullable R visitTemplateParameter(@NonNull org.eclipse.ocl.pivot.TemplateParameter object);
-	@Nullable R visitTemplateParameterSubstitution(@NonNull org.eclipse.ocl.pivot.TemplateParameterSubstitution object);
-	@Nullable R visitTemplateSignature(@NonNull org.eclipse.ocl.pivot.TemplateSignature object);
-	@Nullable R visitTemplateableElement(@NonNull org.eclipse.ocl.pivot.TemplateableElement object);
-	@Nullable R visitTransition(@NonNull org.eclipse.ocl.pivot.Transition object);
-	@Nullable R visitTrigger(@NonNull org.eclipse.ocl.pivot.Trigger object);
-	@Nullable R visitTupleLiteralExp(@NonNull org.eclipse.ocl.pivot.TupleLiteralExp object);
-	@Nullable R visitTupleLiteralPart(@NonNull org.eclipse.ocl.pivot.TupleLiteralPart object);
-	@Nullable R visitTupleType(@NonNull org.eclipse.ocl.pivot.TupleType object);
-	@Nullable R visitType(@NonNull org.eclipse.ocl.pivot.Type object);
-	@Nullable R visitTypeExp(@NonNull org.eclipse.ocl.pivot.TypeExp object);
-	@Nullable R visitTypedElement(@NonNull org.eclipse.ocl.pivot.TypedElement object);
-	@Nullable R visitUnlimitedNaturalLiteralExp(@NonNull org.eclipse.ocl.pivot.UnlimitedNaturalLiteralExp object);
-	@Nullable R visitUnspecifiedValueExp(@NonNull org.eclipse.ocl.pivot.UnspecifiedValueExp object);
-	@Nullable R visitValueSpecification(@NonNull org.eclipse.ocl.pivot.ValueSpecification object);
-	@Nullable R visitVariable(@NonNull org.eclipse.ocl.pivot.Variable object);
-	@Nullable R visitVariableDeclaration(@NonNull org.eclipse.ocl.pivot.VariableDeclaration object);
-	@Nullable R visitVariableExp(@NonNull org.eclipse.ocl.pivot.VariableExp object);
-	@Nullable R visitVertex(@NonNull org.eclipse.ocl.pivot.Vertex object);
-	@Nullable R visitVoidType(@NonNull org.eclipse.ocl.pivot.VoidType object);
-	@Nullable R visitWildcardType(@NonNull org.eclipse.ocl.pivot.WildcardType object);
+	@Nullable R visitAnnotation(org.eclipse.ocl.pivot.@NonNull Annotation object);
+	@Nullable R visitAnyType(org.eclipse.ocl.pivot.@NonNull AnyType object);
+	@Nullable R visitAssociationClass(org.eclipse.ocl.pivot.@NonNull AssociationClass object);
+	@Nullable R visitAssociationClassCallExp(org.eclipse.ocl.pivot.@NonNull AssociationClassCallExp object);
+	@Nullable R visitBagType(org.eclipse.ocl.pivot.@NonNull BagType object);
+	@Nullable R visitBehavior(org.eclipse.ocl.pivot.@NonNull Behavior object);
+	@Nullable R visitBooleanLiteralExp(org.eclipse.ocl.pivot.@NonNull BooleanLiteralExp object);
+	@Nullable R visitCallExp(org.eclipse.ocl.pivot.@NonNull CallExp object);
+	@Nullable R visitCallOperationAction(org.eclipse.ocl.pivot.@NonNull CallOperationAction object);
+	@Nullable R visitClass(org.eclipse.ocl.pivot.@NonNull Class object);
+	@Nullable R visitCollectionItem(org.eclipse.ocl.pivot.@NonNull CollectionItem object);
+	@Nullable R visitCollectionLiteralExp(org.eclipse.ocl.pivot.@NonNull CollectionLiteralExp object);
+	@Nullable R visitCollectionLiteralPart(org.eclipse.ocl.pivot.@NonNull CollectionLiteralPart object);
+	@Nullable R visitCollectionRange(org.eclipse.ocl.pivot.@NonNull CollectionRange object);
+	@Nullable R visitCollectionType(org.eclipse.ocl.pivot.@NonNull CollectionType object);
+	@Nullable R visitComment(org.eclipse.ocl.pivot.@NonNull Comment object);
+	@Nullable R visitCompleteClass(org.eclipse.ocl.pivot.@NonNull CompleteClass object);
+	@Nullable R visitCompleteEnvironment(org.eclipse.ocl.pivot.@NonNull CompleteEnvironment object);
+	@Nullable R visitCompleteModel(org.eclipse.ocl.pivot.@NonNull CompleteModel object);
+	@Nullable R visitCompletePackage(org.eclipse.ocl.pivot.@NonNull CompletePackage object);
+	@Nullable R visitConnectionPointReference(org.eclipse.ocl.pivot.@NonNull ConnectionPointReference object);
+	@Nullable R visitConstraint(org.eclipse.ocl.pivot.@NonNull Constraint object);
+	@Nullable R visitDataType(org.eclipse.ocl.pivot.@NonNull DataType object);
+	@Nullable R visitDetail(org.eclipse.ocl.pivot.@NonNull Detail object);
+	@Nullable R visitDynamicBehavior(org.eclipse.ocl.pivot.@NonNull DynamicBehavior object);
+	@Nullable R visitDynamicElement(org.eclipse.ocl.pivot.@NonNull DynamicElement object);
+	@Nullable R visitDynamicProperty(org.eclipse.ocl.pivot.@NonNull DynamicProperty object);
+	@Nullable R visitDynamicType(org.eclipse.ocl.pivot.@NonNull DynamicType object);
+	@Nullable R visitDynamicValueSpecification(org.eclipse.ocl.pivot.@NonNull DynamicValueSpecification object);
+	@Nullable R visitElement(org.eclipse.ocl.pivot.@NonNull Element object);
+	@Nullable R visitElementExtension(org.eclipse.ocl.pivot.@NonNull ElementExtension object);
+	@Nullable R visitEnumLiteralExp(org.eclipse.ocl.pivot.@NonNull EnumLiteralExp object);
+	@Nullable R visitEnumeration(org.eclipse.ocl.pivot.@NonNull Enumeration object);
+	@Nullable R visitEnumerationLiteral(org.eclipse.ocl.pivot.@NonNull EnumerationLiteral object);
+	@Nullable R visitExpressionInOCL(org.eclipse.ocl.pivot.@NonNull ExpressionInOCL object);
+	@Nullable R visitFeature(org.eclipse.ocl.pivot.@NonNull Feature object);
+	@Nullable R visitFeatureCallExp(org.eclipse.ocl.pivot.@NonNull FeatureCallExp object);
+	@Nullable R visitFinalState(org.eclipse.ocl.pivot.@NonNull FinalState object);
+	@Nullable R visitIfExp(org.eclipse.ocl.pivot.@NonNull IfExp object);
+	@Nullable R visitImport(org.eclipse.ocl.pivot.@NonNull Import object);
+	@Nullable R visitInstanceSpecification(org.eclipse.ocl.pivot.@NonNull InstanceSpecification object);
+	@Nullable R visitIntegerLiteralExp(org.eclipse.ocl.pivot.@NonNull IntegerLiteralExp object);
+	@Nullable R visitInvalidLiteralExp(org.eclipse.ocl.pivot.@NonNull InvalidLiteralExp object);
+	@Nullable R visitInvalidType(org.eclipse.ocl.pivot.@NonNull InvalidType object);
+	@Nullable R visitIterateExp(org.eclipse.ocl.pivot.@NonNull IterateExp object);
+	@Nullable R visitIteration(org.eclipse.ocl.pivot.@NonNull Iteration object);
+	@Nullable R visitIteratorExp(org.eclipse.ocl.pivot.@NonNull IteratorExp object);
+	@Nullable R visitLambdaType(org.eclipse.ocl.pivot.@NonNull LambdaType object);
+	@Nullable R visitLanguageExpression(org.eclipse.ocl.pivot.@NonNull LanguageExpression object);
+	@Nullable R visitLetExp(org.eclipse.ocl.pivot.@NonNull LetExp object);
+	@Nullable R visitLibrary(org.eclipse.ocl.pivot.@NonNull Library object);
+	@Nullable R visitLiteralExp(org.eclipse.ocl.pivot.@NonNull LiteralExp object);
+	@Nullable R visitLoopExp(org.eclipse.ocl.pivot.@NonNull LoopExp object);
+	@Nullable R visitMapLiteralExp(org.eclipse.ocl.pivot.@NonNull MapLiteralExp object);
+	@Nullable R visitMapLiteralPart(org.eclipse.ocl.pivot.@NonNull MapLiteralPart object);
+	@Nullable R visitMapType(org.eclipse.ocl.pivot.@NonNull MapType object);
+	@Nullable R visitMessageExp(org.eclipse.ocl.pivot.@NonNull MessageExp object);
+	@Nullable R visitMessageType(org.eclipse.ocl.pivot.@NonNull MessageType object);
+	@Nullable R visitModel(org.eclipse.ocl.pivot.@NonNull Model object);
+	@Nullable R visitNamedElement(org.eclipse.ocl.pivot.@NonNull NamedElement object);
+	@Nullable R visitNamespace(org.eclipse.ocl.pivot.@NonNull Namespace object);
+	@Nullable R visitNavigationCallExp(org.eclipse.ocl.pivot.@NonNull NavigationCallExp object);
+	@Nullable R visitNullLiteralExp(org.eclipse.ocl.pivot.@NonNull NullLiteralExp object);
+	@Nullable R visitNumericLiteralExp(org.eclipse.ocl.pivot.@NonNull NumericLiteralExp object);
+	@Nullable R visitOCLExpression(org.eclipse.ocl.pivot.@NonNull OCLExpression object);
+	@Nullable R visitOperation(org.eclipse.ocl.pivot.@NonNull Operation object);
+	@Nullable R visitOperationCallExp(org.eclipse.ocl.pivot.@NonNull OperationCallExp object);
+	@Nullable R visitOppositePropertyCallExp(org.eclipse.ocl.pivot.@NonNull OppositePropertyCallExp object);
+	@Nullable R visitOrderedSetType(org.eclipse.ocl.pivot.@NonNull OrderedSetType object);
+	@Nullable R visitOrphanCompletePackage(org.eclipse.ocl.pivot.@NonNull OrphanCompletePackage object);
+	@Nullable R visitPackage(org.eclipse.ocl.pivot.@NonNull Package object);
+	@Nullable R visitParameter(org.eclipse.ocl.pivot.@NonNull Parameter object);
+	@Nullable R visitPrecedence(org.eclipse.ocl.pivot.@NonNull Precedence object);
+	@Nullable R visitPrimitiveCompletePackage(org.eclipse.ocl.pivot.@NonNull PrimitiveCompletePackage object);
+	@Nullable R visitPrimitiveLiteralExp(org.eclipse.ocl.pivot.@NonNull PrimitiveLiteralExp object);
+	@Nullable R visitPrimitiveType(org.eclipse.ocl.pivot.@NonNull PrimitiveType object);
+	@Nullable R visitProfile(org.eclipse.ocl.pivot.@NonNull Profile object);
+	@Nullable R visitProfileApplication(org.eclipse.ocl.pivot.@NonNull ProfileApplication object);
+	@Nullable R visitProperty(org.eclipse.ocl.pivot.@NonNull Property object);
+	@Nullable R visitPropertyCallExp(org.eclipse.ocl.pivot.@NonNull PropertyCallExp object);
+	@Nullable R visitPseudostate(org.eclipse.ocl.pivot.@NonNull Pseudostate object);
+	@Nullable R visitRealLiteralExp(org.eclipse.ocl.pivot.@NonNull RealLiteralExp object);
+	@Nullable R visitRegion(org.eclipse.ocl.pivot.@NonNull Region object);
+	@Nullable R visitSelfType(org.eclipse.ocl.pivot.@NonNull SelfType object);
+	@Nullable R visitSendSignalAction(org.eclipse.ocl.pivot.@NonNull SendSignalAction object);
+	@Nullable R visitSequenceType(org.eclipse.ocl.pivot.@NonNull SequenceType object);
+	@Nullable R visitSetType(org.eclipse.ocl.pivot.@NonNull SetType object);
+	@Nullable R visitShadowExp(org.eclipse.ocl.pivot.@NonNull ShadowExp object);
+	@Nullable R visitShadowPart(org.eclipse.ocl.pivot.@NonNull ShadowPart object);
+	@Nullable R visitSignal(org.eclipse.ocl.pivot.@NonNull Signal object);
+	@Nullable R visitSlot(org.eclipse.ocl.pivot.@NonNull Slot object);
+	@Nullable R visitStandardLibrary(org.eclipse.ocl.pivot.@NonNull StandardLibrary object);
+	@Nullable R visitState(org.eclipse.ocl.pivot.@NonNull State object);
+	@Nullable R visitStateExp(org.eclipse.ocl.pivot.@NonNull StateExp object);
+	@Nullable R visitStateMachine(org.eclipse.ocl.pivot.@NonNull StateMachine object);
+	@Nullable R visitStereotype(org.eclipse.ocl.pivot.@NonNull Stereotype object);
+	@Nullable R visitStereotypeExtender(org.eclipse.ocl.pivot.@NonNull StereotypeExtender object);
+	@Nullable R visitStringLiteralExp(org.eclipse.ocl.pivot.@NonNull StringLiteralExp object);
+	@Nullable R visitTemplateBinding(org.eclipse.ocl.pivot.@NonNull TemplateBinding object);
+	@Nullable R visitTemplateParameter(org.eclipse.ocl.pivot.@NonNull TemplateParameter object);
+	@Nullable R visitTemplateParameterSubstitution(org.eclipse.ocl.pivot.@NonNull TemplateParameterSubstitution object);
+	@Nullable R visitTemplateSignature(org.eclipse.ocl.pivot.@NonNull TemplateSignature object);
+	@Nullable R visitTemplateableElement(org.eclipse.ocl.pivot.@NonNull TemplateableElement object);
+	@Nullable R visitTransition(org.eclipse.ocl.pivot.@NonNull Transition object);
+	@Nullable R visitTrigger(org.eclipse.ocl.pivot.@NonNull Trigger object);
+	@Nullable R visitTupleLiteralExp(org.eclipse.ocl.pivot.@NonNull TupleLiteralExp object);
+	@Nullable R visitTupleLiteralPart(org.eclipse.ocl.pivot.@NonNull TupleLiteralPart object);
+	@Nullable R visitTupleType(org.eclipse.ocl.pivot.@NonNull TupleType object);
+	@Nullable R visitType(org.eclipse.ocl.pivot.@NonNull Type object);
+	@Nullable R visitTypeExp(org.eclipse.ocl.pivot.@NonNull TypeExp object);
+	@Nullable R visitTypedElement(org.eclipse.ocl.pivot.@NonNull TypedElement object);
+	@Nullable R visitUnlimitedNaturalLiteralExp(org.eclipse.ocl.pivot.@NonNull UnlimitedNaturalLiteralExp object);
+	@Nullable R visitUnspecifiedValueExp(org.eclipse.ocl.pivot.@NonNull UnspecifiedValueExp object);
+	@Nullable R visitValueSpecification(org.eclipse.ocl.pivot.@NonNull ValueSpecification object);
+	@Nullable R visitVariable(org.eclipse.ocl.pivot.@NonNull Variable object);
+	@Nullable R visitVariableDeclaration(org.eclipse.ocl.pivot.@NonNull VariableDeclaration object);
+	@Nullable R visitVariableExp(org.eclipse.ocl.pivot.@NonNull VariableExp object);
+	@Nullable R visitVertex(org.eclipse.ocl.pivot.@NonNull Vertex object);
+	@Nullable R visitVoidType(org.eclipse.ocl.pivot.@NonNull VoidType object);
+	@Nullable R visitWildcardType(org.eclipse.ocl.pivot.@NonNull WildcardType object);
 }
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/CompleteInheritance.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/CompleteInheritance.java
index e97408b..68a798f 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/CompleteInheritance.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/CompleteInheritance.java
@@ -55,7 +55,7 @@
 	@Nullable Operation getMemberOperation(@NonNull OperationId id);
 	@Nullable Property getMemberProperty(@NonNull String name);
 
-	@NonNull org.eclipse.ocl.pivot.Class getPivotClass();
+	org.eclipse.ocl.pivot.@NonNull Class getPivotClass();
 
 	@NonNull InheritanceFragment getSelfFragment();
 	
@@ -65,7 +65,7 @@
 	@NonNull IndexableIterable<InheritanceFragment> getSuperFragments(int depth);
 
 	@Deprecated // Use getPivotClass
-	@NonNull org.eclipse.ocl.pivot.Class getType();
+	org.eclipse.ocl.pivot.@NonNull Class getType();
 	
 	boolean isOclAny();
 	boolean isSubInheritanceOf(@NonNull CompleteInheritance inheritance);
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/evaluation/Evaluator.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/evaluation/Evaluator.java
index 7ae3539..95502b6 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/evaluation/Evaluator.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/evaluation/Evaluator.java
@@ -63,9 +63,9 @@
 
 	@NonNull StandardLibrary getStandardLibrary();
 
-	@NonNull org.eclipse.ocl.pivot.Class getStaticTypeOf(@Nullable Object value);
-	@NonNull org.eclipse.ocl.pivot.Class getStaticTypeOf(@Nullable Object value, @NonNull Object... values);
-	@NonNull org.eclipse.ocl.pivot.Class getStaticTypeOf(@Nullable Object value, @NonNull Iterable<?> values);
+	org.eclipse.ocl.pivot.@NonNull Class getStaticTypeOf(@Nullable Object value);
+	org.eclipse.ocl.pivot.@NonNull Class getStaticTypeOf(@Nullable Object value, @NonNull Object... values);
+	org.eclipse.ocl.pivot.@NonNull Class getStaticTypeOf(@Nullable Object value, @NonNull Iterable<?> values);
 	
 	/**
 	 * Return true if the evaluation has been canceled.
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/evaluation/ModelManager.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/evaluation/ModelManager.java
index 9cbad2a..48477bf 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/evaluation/ModelManager.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/evaluation/ModelManager.java
@@ -27,10 +27,10 @@
 	{
 		@Override
 		@SuppressWarnings("null")
-		public @NonNull Set<EObject> get(@NonNull org.eclipse.ocl.pivot.Class type) {
+		public @NonNull Set<EObject> get(org.eclipse.ocl.pivot.@NonNull Class type) {
 			return Collections.emptySet();
 		}
 	};
 
-	@NonNull Set<EObject> get(@NonNull org.eclipse.ocl.pivot.Class type);
+	@NonNull Set<EObject> get(org.eclipse.ocl.pivot.@NonNull Class type);
 }
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/ids/IdManager.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/ids/IdManager.java
index 53a47fe..13e4fa3 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/ids/IdManager.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/ids/IdManager.java
@@ -207,7 +207,7 @@
     /**
      * Return the classId for aType.
      */
-	public static @NonNull ClassId getClassId(@NonNull org.eclipse.ocl.pivot.Class aType) {
+	public static @NonNull ClassId getClassId(org.eclipse.ocl.pivot.@NonNull Class aType) {
 		String name = aType.getName();
 		assert name != null;
 		org.eclipse.ocl.pivot.Package parentPackage = aType.getOwningPackage();
@@ -242,7 +242,7 @@
     /**
      * Return the dataTypeId for aType.
       */
-	public static @NonNull DataTypeId getDataTypeId(@NonNull org.eclipse.ocl.pivot.Class aType) {
+	public static @NonNull DataTypeId getDataTypeId(org.eclipse.ocl.pivot.@NonNull Class aType) {
 		String name = aType.getName();
 		assert name != null;
 		org.eclipse.ocl.pivot.Package parentPackage = aType.getOwningPackage();
@@ -399,7 +399,7 @@
     /**
      * Return the typeId for aPackage.
      */
-	public static @NonNull PackageId getPackageId(@NonNull org.eclipse.ocl.pivot.Package aPackage) {
+	public static @NonNull PackageId getPackageId(org.eclipse.ocl.pivot.@NonNull Package aPackage) {
 		String nsURI = aPackage.getURI();
 		if (nsURI != null) {
 			return getNsURIPackageId(nsURI, aPackage.getNsPrefix(), aPackage.getEPackage());
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/ids/IdResolver.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/ids/IdResolver.java
index 67e304d..eccbb90 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/ids/IdResolver.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/ids/IdResolver.java
@@ -91,7 +91,7 @@
 	
 	@NonNull EList<Object> ecoreValuesOfEach(@Nullable Class<?> instanceClass, @NonNull Object... values);
 
-	@NonNull org.eclipse.ocl.pivot.Class getClass(@NonNull TypeId typeId, @Nullable Object context);
+	org.eclipse.ocl.pivot.@NonNull Class getClass(@NonNull TypeId typeId, @Nullable Object context);
 
 	@NonNull Type getCollectionType(@NonNull CollectionTypeId typeId);
 
@@ -105,29 +105,29 @@
 
 	@NonNull CompleteInheritance getInheritance(@NonNull EClassifier eClassifier);
 	
-	@NonNull org.eclipse.ocl.pivot.Class getJavaType(@NonNull Class<?> javaClass);
+	org.eclipse.ocl.pivot.@NonNull Class getJavaType(@NonNull Class<?> javaClass);
 
 	@NonNull Type getMapType(@NonNull MapTypeId typeId);
 
 	@NonNull Operation getOperation(@NonNull OperationId operationId);
 	
-	@NonNull org.eclipse.ocl.pivot.Package getPackage(@NonNull PackageId packageId);
+	org.eclipse.ocl.pivot.@NonNull Package getPackage(@NonNull PackageId packageId);
 
 	@NonNull Property getProperty(@NonNull PropertyId propertyId);
 
 	@NonNull StandardLibrary getStandardLibrary();
 
-	@NonNull org.eclipse.ocl.pivot.Class getStaticTypeOf(@Nullable Object value);
+	org.eclipse.ocl.pivot.@NonNull Class getStaticTypeOf(@Nullable Object value);
 
-	@NonNull org.eclipse.ocl.pivot.Class getStaticTypeOf(@Nullable Object value, Object... values);
+	org.eclipse.ocl.pivot.@NonNull Class getStaticTypeOf(@Nullable Object value, Object... values);
 
-	@NonNull org.eclipse.ocl.pivot.Class getStaticTypeOf(@Nullable Object value, @NonNull Iterable<?> values);
+	org.eclipse.ocl.pivot.@NonNull Class getStaticTypeOf(@Nullable Object value, @NonNull Iterable<?> values);
 
 	@NonNull TypedElement getTuplePart(@NonNull String name, @NonNull TypeId typeId);
 
 	@NonNull TupleType getTupleType(@NonNull TupleTypeId typeId);
 
-	@NonNull org.eclipse.ocl.pivot.Class getType(@NonNull EClassifier eClassifier);
+	org.eclipse.ocl.pivot.@NonNull Class getType(@NonNull EClassifier eClassifier);
 
 	@NonNull Type getType(@NonNull TypeId typeId, @Nullable Object context);
 
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/attributes/PackageAttribution.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/attributes/PackageAttribution.java
index d058afb..1ac114f 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/attributes/PackageAttribution.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/attributes/PackageAttribution.java
@@ -32,7 +32,7 @@
 //		if (targetPackage.getImportedPackage().size() > 0) {
 			Set<org.eclipse.ocl.pivot.Package> allPackages = new HashSet<org.eclipse.ocl.pivot.Package>();
 			gatherAllPackages(environmentFactory, allPackages, targetPackage);
-			for (@SuppressWarnings("null")@NonNull org.eclipse.ocl.pivot.Package aPackage : allPackages) {
+			for (@SuppressWarnings("null")org.eclipse.ocl.pivot.@NonNull Package aPackage : allPackages) {
 				environmentView.addAllPackages(aPackage);
 				environmentView.addAllTypes(aPackage);
 			}
@@ -45,12 +45,12 @@
 	}
 
 	private void gatherAllPackages(@NonNull EnvironmentFactoryInternal environmentFactory, @NonNull Set<org.eclipse.ocl.pivot.Package> allPackages,
-			@NonNull org.eclipse.ocl.pivot.Package targetPackage) {
+			org.eclipse.ocl.pivot.@NonNull Package targetPackage) {
 		PivotMetamodelManager metamodelManager = environmentFactory.getMetamodelManager();
 		org.eclipse.ocl.pivot.Package primaryPackage = metamodelManager.getPrimaryElement(targetPackage);
 		if (allPackages.add(primaryPackage)) {
-			for (@SuppressWarnings("null")@NonNull org.eclipse.ocl.pivot.Package partialPackage : metamodelManager.getPartialPackages(primaryPackage, false)) {
-				for (@SuppressWarnings("null")@NonNull org.eclipse.ocl.pivot.Package importedPackage : partialPackage.getImportedPackages()) {
+			for (@SuppressWarnings("null")org.eclipse.ocl.pivot.@NonNull Package partialPackage : metamodelManager.getPartialPackages(primaryPackage, false)) {
+				for (@SuppressWarnings("null")org.eclipse.ocl.pivot.@NonNull Package importedPackage : partialPackage.getImportedPackages()) {
 					gatherAllPackages(environmentFactory, allPackages, importedPackage);
 				}
 			}
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/AbstractCompletePackages.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/AbstractCompletePackages.java
index 06733c8..17d508d 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/AbstractCompletePackages.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/AbstractCompletePackages.java
@@ -56,7 +56,7 @@
 		didAdd(completePackage);
 	}
 
-	public abstract @NonNull CompletePackageInternal createCompletePackage(@NonNull org.eclipse.ocl.pivot.Package partialPackage);
+	public abstract @NonNull CompletePackageInternal createCompletePackage(org.eclipse.ocl.pivot.@NonNull Package partialPackage);
 
 	protected void didAdd(@NonNull CompletePackage completePackage) {
 		CompletePackageInternal completePackageInternal = (CompletePackageInternal)completePackage;
@@ -73,7 +73,7 @@
 		getCompleteModel().didAddCompletePackage(completePackageInternal);
 	}
 
-	public void didAddPackage(@NonNull org.eclipse.ocl.pivot.Package pivotPackage) {
+	public void didAddPackage(org.eclipse.ocl.pivot.@NonNull Package pivotPackage) {
 		CompletePackage completePackage = null;
 		String name = pivotPackage.getName();
 		String packageURI = pivotPackage.getURI();
@@ -105,7 +105,7 @@
 		getCompleteModel().didRemoveCompletePackage(completePackageInternal);
 	}
 
-	public void didRemovePackage(@NonNull org.eclipse.ocl.pivot.Package partialPackage) {
+	public void didRemovePackage(org.eclipse.ocl.pivot.@NonNull Package partialPackage) {
 		CompletePackage completePackage = getCompletePackage(partialPackage);
 		List<Package> partialPackages = completePackage.getPartialPackages();
 		partialPackages.remove(partialPackage);
@@ -126,7 +126,7 @@
 
 	protected abstract CompleteModelInternal getCompleteModel();
 
-	public @NonNull CompletePackageInternal getCompletePackage(@NonNull org.eclipse.ocl.pivot.Package pivotPackage) {
+	public @NonNull CompletePackageInternal getCompletePackage(org.eclipse.ocl.pivot.@NonNull Package pivotPackage) {
 		CompletePackageInternal completePackage = null;
 		if (pivotPackage instanceof CompletePackageInternal) {
 			((CompletePackageInternal)pivotPackage).assertSamePackage(pivotPackage);
@@ -166,7 +166,7 @@
 		return name2completePackage.get(name);
 	}
 	
-	protected abstract @NonNull CompletePackageInternal getOwnedCompletePackage(@NonNull org.eclipse.ocl.pivot.Package pivotPackage);
+	protected abstract @NonNull CompletePackageInternal getOwnedCompletePackage(org.eclipse.ocl.pivot.@NonNull Package pivotPackage);
 
 	protected abstract @NonNull Iterable<org.eclipse.ocl.pivot.Package> getPartialPackages();
 
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/ClassListeners.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/ClassListeners.java
index eeb774e..188efe2 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/ClassListeners.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/ClassListeners.java
@@ -22,10 +22,10 @@
 	{
 		void didAddOperation(@NonNull Operation partialOperation);
 		void didAddProperty(@NonNull Property partialProperty);
-		void didAddSuperClass(@NonNull org.eclipse.ocl.pivot.Class partialClass);
+		void didAddSuperClass(org.eclipse.ocl.pivot.@NonNull Class partialClass);
 		void didRemoveOperation(@NonNull Operation partialOperation);
 		void didRemoveProperty(@NonNull Property partialProperty);
-		void didRemoveSuperClass(@NonNull org.eclipse.ocl.pivot.Class partialClass);
+		void didRemoveSuperClass(org.eclipse.ocl.pivot.@NonNull Class partialClass);
 	}
 
 	public synchronized void didAddOperation(@NonNull Operation partialOperation) {
@@ -60,7 +60,7 @@
 		}
 	}
 
-	public synchronized void didAddSuperClass(@NonNull org.eclipse.ocl.pivot.Class partialClass) {
+	public synchronized void didAddSuperClass(org.eclipse.ocl.pivot.@NonNull Class partialClass) {
 		boolean doFlush = false;
 		for (WeakReference<L> ref : listeners) {
 			L listener = ref.get();
@@ -108,7 +108,7 @@
 		}
 	}
 
-	public synchronized void didRemoveSuperClass(@NonNull org.eclipse.ocl.pivot.Class partialClass) {
+	public synchronized void didRemoveSuperClass(org.eclipse.ocl.pivot.@NonNull Class partialClass) {
 		boolean doFlush = false;
 		for (WeakReference<L> ref : listeners) {
 			L listener = ref.get();
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/CompleteClassInternal.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/CompleteClassInternal.java
index f6027fa..da3c8a9 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/CompleteClassInternal.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/CompleteClassInternal.java
@@ -17,10 +17,10 @@
 
 public interface CompleteClassInternal extends CompleteClass
 {
-	void addClass(@NonNull org.eclipse.ocl.pivot.Class partialClass);
-	void didAddClass(@NonNull org.eclipse.ocl.pivot.Class partialClass);
+	void addClass(org.eclipse.ocl.pivot.@NonNull Class partialClass);
+	void didAddClass(org.eclipse.ocl.pivot.@NonNull Class partialClass);
 //	@NonNull CompleteInheritance createCompleteInheritance();
-	boolean didRemoveClass(@NonNull org.eclipse.ocl.pivot.Class partialClass);
+	boolean didRemoveClass(org.eclipse.ocl.pivot.@NonNull Class partialClass);
 	void dispose();
 	void uninstall();
 	@Override
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/CompleteClasses.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/CompleteClasses.java
index 2f5a0eb..7cded15 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/CompleteClasses.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/CompleteClasses.java
@@ -277,7 +277,7 @@
 		}
 	}
 
-	public void didAddClass(@NonNull org.eclipse.ocl.pivot.Class partialClass) {
+	public void didAddClass(org.eclipse.ocl.pivot.@NonNull Class partialClass) {
 		if (name2completeClass != null) {
 			CompleteClassInternal completeClass = name2completeClass.get(partialClass.getName());
 			if (completeClass == null) {
@@ -289,7 +289,7 @@
 		}
 	}
 
-	public void didAddPackage(@NonNull org.eclipse.ocl.pivot.Package partialPackage) {
+	public void didAddPackage(org.eclipse.ocl.pivot.@NonNull Package partialPackage) {
 		if (name2completeClass != null) {
 			doRefreshPartialClasses(partialPackage);
 		}
@@ -313,7 +313,7 @@
 		}
 	}
 
-	public void didRemoveClass(@NonNull org.eclipse.ocl.pivot.Class partialClass) {
+	public void didRemoveClass(org.eclipse.ocl.pivot.@NonNull Class partialClass) {
 		if (name2completeClass != null) {
 			CompleteClassInternal completeClass = name2completeClass.get(partialClass.getName());
 			if ((completeClass != null) && completeClass.didRemoveClass(partialClass)) {
@@ -326,7 +326,7 @@
 		}
 	}
 
-	public void didRemovePackage(@NonNull org.eclipse.ocl.pivot.Package partialPackage) {
+	public void didRemovePackage(org.eclipse.ocl.pivot.@NonNull Package partialPackage) {
 		Map<String, CompleteClassInternal> name2completeClass2 = name2completeClass;
 		if (name2completeClass2 != null) {
 			for (org.eclipse.ocl.pivot.Class partialClass : partialPackage.getOwnedClasses()) {
@@ -337,7 +337,7 @@
 		}
 	}
 	
-	protected void doRefreshPartialClass(@NonNull org.eclipse.ocl.pivot.Class partialClass) {
+	protected void doRefreshPartialClass(org.eclipse.ocl.pivot.@NonNull Class partialClass) {
 		Map<String, CompleteClassInternal> name2completeClass2 = name2completeClass;
 		assert name2completeClass2 != null;
 		CompleteModelInternal completeModel = getCompleteModel();
@@ -392,7 +392,7 @@
 		return name2completeClass2;
 	}
 
-	protected void doRefreshPartialClasses(@NonNull org.eclipse.ocl.pivot.Package partialPackage) {
+	protected void doRefreshPartialClasses(org.eclipse.ocl.pivot.@NonNull Package partialPackage) {
 		for (org.eclipse.ocl.pivot.Class partialClass : partialPackage.getOwnedClasses()) {
 			if (partialClass != null) {
 				doRefreshPartialClass(partialClass);
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/CompleteEnvironmentInternal.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/CompleteEnvironmentInternal.java
index 9df8734..3fddbcf 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/CompleteEnvironmentInternal.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/CompleteEnvironmentInternal.java
@@ -26,12 +26,12 @@
 
 public interface CompleteEnvironmentInternal extends CompleteEnvironment
 {
-	void addOrphanClass(@NonNull org.eclipse.ocl.pivot.Class pivotElement);
+	void addOrphanClass(org.eclipse.ocl.pivot.@NonNull Class pivotElement);
 	boolean conformsTo(@NonNull Type firstType, @NonNull TemplateParameterSubstitutions firstSubstitutions,
 			@NonNull Type secondType, @NonNull TemplateParameterSubstitutions secondSubstitutions);
 	void dispose();
-	void didAddClass(@NonNull org.eclipse.ocl.pivot.Class partialClass, @NonNull CompleteClassInternal completeClass);
-	void didRemoveClass(@NonNull org.eclipse.ocl.pivot.Class partialClass);
+	void didAddClass(org.eclipse.ocl.pivot.@NonNull Class partialClass, @NonNull CompleteClassInternal completeClass);
+	void didRemoveClass(org.eclipse.ocl.pivot.@NonNull Class partialClass);
 	@Nullable CollectionType findCollectionType(@NonNull CompleteClassInternal completeClass, @NonNull CollectionTypeParameters<Type> typeParameters);
 	@Nullable MapType findMapType(@NonNull CompleteClassInternal completeClass, @NonNull MapTypeParameters<Type, Type> typeParameters);
 	@NonNull CollectionType getCollectionType(@NonNull CompleteClassInternal completeClass, @NonNull CollectionTypeParameters<Type> typeParameters);
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/CompleteInheritanceImpl.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/CompleteInheritanceImpl.java
index e19bfc4..17bae9b 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/CompleteInheritanceImpl.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/CompleteInheritanceImpl.java
@@ -116,7 +116,7 @@
 	}
 	
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getPivotClass() {
+	public org.eclipse.ocl.pivot.@NonNull Class getPivotClass() {
 		return getCompleteClass().getPrimaryClass();
 	}
 
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/CompleteModelInternal.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/CompleteModelInternal.java
index 01202e3..5c6ec9f 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/CompleteModelInternal.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/CompleteModelInternal.java
@@ -35,10 +35,10 @@
 
 public interface CompleteModelInternal extends CompleteModel
 {
-	void didAddClass(@NonNull org.eclipse.ocl.pivot.Class partialClass, @NonNull CompleteClassInternal completeClass);
+	void didAddClass(org.eclipse.ocl.pivot.@NonNull Class partialClass, @NonNull CompleteClassInternal completeClass);
 	void didAddCompletePackage(@NonNull CompletePackageInternal completePackage);
 	void didRemoveCompletePackage(@NonNull CompletePackageInternal completePackage);
-	void didRemoveClass(@NonNull org.eclipse.ocl.pivot.Class partialClass);
+	void didRemoveClass(org.eclipse.ocl.pivot.@NonNull Class partialClass);
 	@Nullable CollectionType findCollectionType(@NonNull CompleteClassInternal completeClass, @NonNull CollectionTypeParameters<Type> typeParameters);
 	@Nullable MapType findMapType(@NonNull CompleteClassInternal completeClass, @NonNull MapTypeParameters<Type, Type> typeParameters);
 	@Override
@@ -47,7 +47,7 @@
 	@Override
 	@NonNull CompleteClassInternal getCompleteClass(@NonNull Type partialClass);
 	@Override
-	@NonNull CompletePackageInternal getCompletePackage(@NonNull org.eclipse.ocl.pivot.Package partialPackage);
+	@NonNull CompletePackageInternal getCompletePackage(org.eclipse.ocl.pivot.@NonNull Package partialPackage);
 	@Override
 	@Nullable CompletePackageInternal getCompletePackageByURI(@NonNull String packageURI);
 	@NonNull CompleteURIs getCompleteURIs();
@@ -66,11 +66,11 @@
 	@NonNull TupleType getTupleType(@NonNull String typeName, @NonNull Collection<? extends TypedElement> parts,
 			@Nullable TemplateParameterSubstitutions bindings);	
 
-	void resolveSuperClasses(@NonNull org.eclipse.ocl.pivot.Class specializedClass, @NonNull org.eclipse.ocl.pivot.Class unspecializedClass);
+	void resolveSuperClasses(org.eclipse.ocl.pivot.@NonNull Class specializedClass, org.eclipse.ocl.pivot.@NonNull Class unspecializedClass);
 	void dispose();
 	void didAddPartialModel(@NonNull Model partialModel);
-	void didAddNestedPackage(@NonNull org.eclipse.ocl.pivot.Package pivotPackage);
-	void didRemoveNestedPackage(@NonNull org.eclipse.ocl.pivot.Package pivotPackage);
+	void didAddNestedPackage(org.eclipse.ocl.pivot.@NonNull Package pivotPackage);
+	void didRemoveNestedPackage(org.eclipse.ocl.pivot.@NonNull Package pivotPackage);
 	void didRemovePartialModel(@NonNull Model partialModel);
 	@Nullable String getCompleteURI(@Nullable String nsURI);
 	@NonNull TupleTypeManager getTupleManager();
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/CompletePackageInternal.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/CompletePackageInternal.java
index 60f824f..f592b1f 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/CompletePackageInternal.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/CompletePackageInternal.java
@@ -17,7 +17,7 @@
 public interface CompletePackageInternal extends CompletePackage
 {
 	@Override
-	@NonNull CompleteClassInternal getCompleteClass(@NonNull org.eclipse.ocl.pivot.Class pivotType);
+	@NonNull CompleteClassInternal getCompleteClass(org.eclipse.ocl.pivot.@NonNull Class pivotType);
 	@NonNull CompleteInheritanceImpl getCompleteInheritance(@NonNull CompleteClassInternal completeClass);
 	@Override
 	@NonNull CompleteModelInternal getCompleteModel();
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/CompleteURIs.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/CompleteURIs.java
index 20d695a..2ab3d1b 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/CompleteURIs.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/CompleteURIs.java
@@ -140,7 +140,7 @@
 		packageURIs.add(packageURI);
 	}
 
-	public @Nullable CompletePackageInternal getCompletePackage(@NonNull org.eclipse.ocl.pivot.Package pivotPackage) {
+	public @Nullable CompletePackageInternal getCompletePackage(org.eclipse.ocl.pivot.@NonNull Package pivotPackage) {
 		String packageURI = pivotPackage.getURI();
 		if (packageURI == null) {
 			return null;
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/ModelListeners.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/ModelListeners.java
index 278684b..2bddc5f 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/ModelListeners.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/ModelListeners.java
@@ -18,11 +18,11 @@
 {
 	public static interface IModelListener extends AbstractListeners.IAbstractListener
 	{
-		void didAddPackage(@NonNull org.eclipse.ocl.pivot.Package partialPackage);
-		void didRemovePackage(@NonNull org.eclipse.ocl.pivot.Package partialPackage);
+		void didAddPackage(org.eclipse.ocl.pivot.@NonNull Package partialPackage);
+		void didRemovePackage(org.eclipse.ocl.pivot.@NonNull Package partialPackage);
 	}
 
-	public synchronized void didAddPackage(@NonNull org.eclipse.ocl.pivot.Package partialPackage) {
+	public synchronized void didAddPackage(org.eclipse.ocl.pivot.@NonNull Package partialPackage) {
 		boolean doFlush = false;
 		for (WeakReference<L> ref : listeners) {
 			L listener = ref.get();
@@ -38,7 +38,7 @@
 		}
 	}
 
-	public synchronized void didRemovePackage(@NonNull org.eclipse.ocl.pivot.Package partialPackage) {
+	public synchronized void didRemovePackage(org.eclipse.ocl.pivot.@NonNull Package partialPackage) {
 		boolean doFlush = false;
 		for (WeakReference<L> ref : listeners) {
 			L listener = ref.get();
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/NestedCompletePackages.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/NestedCompletePackages.java
index 29b729f..ed665e9 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/NestedCompletePackages.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/NestedCompletePackages.java
@@ -27,7 +27,7 @@
 	}
 
 	@Override
-	public @NonNull CompletePackageInternal createCompletePackage(@NonNull org.eclipse.ocl.pivot.Package partialPackage) {
+	public @NonNull CompletePackageInternal createCompletePackage(org.eclipse.ocl.pivot.@NonNull Package partialPackage) {
 		CompletePackageInternal completePackage = (CompletePackageInternal) PivotFactory.eINSTANCE.createCompletePackage();
 		completePackage.init(partialPackage.getName(), partialPackage.getNsPrefix(), partialPackage.getURI());
 		return completePackage;
@@ -54,7 +54,7 @@
 	}
 
 	@Override
-	public @NonNull CompletePackageInternal getOwnedCompletePackage(@NonNull org.eclipse.ocl.pivot.Package partialPackage) {
+	public @NonNull CompletePackageInternal getOwnedCompletePackage(org.eclipse.ocl.pivot.@NonNull Package partialPackage) {
 		CompletePackageInternal completePackage = null;
 		String uri = partialPackage.getURI();
 		if (uri != null) {
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/PackageListeners.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/PackageListeners.java
index 260ce57..5f5b7ef 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/PackageListeners.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/PackageListeners.java
@@ -18,11 +18,11 @@
 {
 	public static interface IPackageListener extends IModelListener
 	{
-		void didAddClass(@NonNull org.eclipse.ocl.pivot.Class partialClass);
-		void didRemoveClass(@NonNull org.eclipse.ocl.pivot.Class partialClass);
+		void didAddClass(org.eclipse.ocl.pivot.@NonNull Class partialClass);
+		void didRemoveClass(org.eclipse.ocl.pivot.@NonNull Class partialClass);
 	}
 
-	public synchronized void didAddClass(@NonNull org.eclipse.ocl.pivot.Class partialClass) {
+	public synchronized void didAddClass(org.eclipse.ocl.pivot.@NonNull Class partialClass) {
 		boolean doFlush = false;
 		for (WeakReference<L> ref : listeners) {
 			IPackageListener listener = ref.get();
@@ -38,7 +38,7 @@
 		}
 	}
 
-	public synchronized void didRemoveClass(@NonNull org.eclipse.ocl.pivot.Class partialClass) {
+	public synchronized void didRemoveClass(org.eclipse.ocl.pivot.@NonNull Class partialClass) {
 		boolean doFlush = false;
 		for (WeakReference<L> ref : listeners) {
 			IPackageListener listener = ref.get();
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/PartialClasses.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/PartialClasses.java
index 72c0674..48a9b53 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/PartialClasses.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/PartialClasses.java
@@ -181,7 +181,7 @@
 		return superCompleteClasses2;
 	}
 
-	protected @NonNull Property createExtensionProperty(@NonNull ElementExtension stereotypeInstance, @NonNull org.eclipse.ocl.pivot.Class baseType) {
+	protected @NonNull Property createExtensionProperty(@NonNull ElementExtension stereotypeInstance, org.eclipse.ocl.pivot.@NonNull Class baseType) {
 		Stereotype stereotype = stereotypeInstance.getStereotype();
 		Map<String, PartialProperties> name2partialProperties2 = name2partialProperties;
 		assert name2partialProperties2 != null;
@@ -215,7 +215,7 @@
 		return extensionProperty;
 	}
 
-	protected @NonNull org.eclipse.ocl.pivot.Class createSpecialization(@NonNull TemplateParameters templateArguments) {
+	protected org.eclipse.ocl.pivot.@NonNull Class createSpecialization(@NonNull TemplateParameters templateArguments) {
 		org.eclipse.ocl.pivot.Class unspecializedType = getCompleteClass().getPrimaryClass();
 		String typeName = unspecializedType.getName();
 		TemplateSignature templateSignature = unspecializedType.getOwnedSignature();
@@ -309,7 +309,7 @@
 	}
 
 	@Override
-	public void didAddSuperClass(@NonNull org.eclipse.ocl.pivot.Class partialClass) {
+	public void didAddSuperClass(org.eclipse.ocl.pivot.@NonNull Class partialClass) {
 		if (completeInheritance != null) {
 			completeInheritance.uninstall();
 		}
@@ -344,7 +344,7 @@
 	}
 
 	@Override
-	public void didRemoveSuperClass(@NonNull org.eclipse.ocl.pivot.Class partialClass) {
+	public void didRemoveSuperClass(org.eclipse.ocl.pivot.@NonNull Class partialClass) {
 		if (completeInheritance != null) {
 			completeInheritance.uninstall();
 		}
@@ -676,11 +676,11 @@
 		return partials.get();
 	}
 
-	public synchronized @NonNull org.eclipse.ocl.pivot.Class getSpecializedType(@NonNull List<? extends Type> templateArguments) {
+	public synchronized org.eclipse.ocl.pivot.@NonNull Class getSpecializedType(@NonNull List<? extends Type> templateArguments) {
 		return getSpecializedType(TypeUtil.createTemplateParameters(templateArguments));
 	}
 
-	public synchronized @NonNull org.eclipse.ocl.pivot.Class getSpecializedType(@NonNull TemplateParameters templateArguments) {
+	public synchronized org.eclipse.ocl.pivot.@NonNull Class getSpecializedType(@NonNull TemplateParameters templateArguments) {
 		TemplateSignature templateSignature = getCompleteClass().getPrimaryClass().getOwnedSignature();
 		List<TemplateParameter> templateParameters = templateSignature.getOwnedParameters();
 		int iMax = templateParameters.size();
@@ -751,7 +751,7 @@
 		});
 	}
 
-	protected void initExtensionPropertiesFrom(@NonNull org.eclipse.ocl.pivot.Class baseType, @NonNull Stereotype stereotype) {
+	protected void initExtensionPropertiesFrom(org.eclipse.ocl.pivot.@NonNull Class baseType, @NonNull Stereotype stereotype) {
 		PivotMetamodelManager metamodelManager = getMetamodelManager();
 		ElementExtension elementExtension = metamodelManager.getElementExtension(baseType, stereotype);
 		Map<String, PartialProperties> name2partialProperties2 = name2partialProperties;
@@ -764,7 +764,7 @@
 		}
 	}
 
-	public void initMemberFeaturesFrom(@NonNull org.eclipse.ocl.pivot.Class pivotType) {
+	public void initMemberFeaturesFrom(org.eclipse.ocl.pivot.@NonNull Class pivotType) {
 		if (name2partialOperations != null) {
 			initMemberOperationsFrom(pivotType);
 		}	
@@ -784,7 +784,7 @@
 //			}
 			for (CompleteClass superCompleteClass : getSuperCompleteClasses()) {
 				if (superCompleteClass != null) {
-					for (@SuppressWarnings("null")@NonNull org.eclipse.ocl.pivot.Class superType : superCompleteClass.getPartialClasses()) {
+					for (@SuppressWarnings("null")org.eclipse.ocl.pivot.@NonNull Class superType : superCompleteClass.getPartialClasses()) {
 						org.eclipse.ocl.pivot.Class unspecializedType = PivotUtil.getUnspecializedTemplateableElement(superType);
 						CompleteClass unspecializedCompleteClass = getCompleteModel().getCompleteClass(unspecializedType);
 						for (org.eclipse.ocl.pivot.Class unspecializedPartialType : unspecializedCompleteClass.getPartialClasses()) {
@@ -801,7 +801,7 @@
 		return name2partialOperations2;
 	}
 
-	private void initMemberOperationsFrom(@NonNull org.eclipse.ocl.pivot.Class type) {
+	private void initMemberOperationsFrom(org.eclipse.ocl.pivot.@NonNull Class type) {
 		if (INIT_MEMBER_OPERATIONS.isActive()) {
 			INIT_MEMBER_OPERATIONS.println(this + " from " + type);
 		}
@@ -821,7 +821,7 @@
 			Set<Type> extendedTypes = null;
 			for (CompleteClass superCompleteClass : getSuperCompleteClasses()) {
 				if (superCompleteClass != null) {
-					for (@SuppressWarnings("null")@NonNull org.eclipse.ocl.pivot.Class superType : superCompleteClass.getPartialClasses()) {
+					for (@SuppressWarnings("null")org.eclipse.ocl.pivot.@NonNull Class superType : superCompleteClass.getPartialClasses()) {
 						org.eclipse.ocl.pivot.Class unspecializedType = PivotUtil.getUnspecializedTemplateableElement(superType);
 						List<StereotypeExtender> extendedBys = unspecializedType.getExtenders();
 						if (extendedBys.size() > 0) {
@@ -850,7 +850,7 @@
 							}
 						}
 						CompleteClass unspecializedCompleteClass = getCompleteModel().getCompleteClass(unspecializedType);
-						for (@SuppressWarnings("null")@NonNull org.eclipse.ocl.pivot.Class unspecializedPartialType : unspecializedCompleteClass.getPartialClasses()) {
+						for (@SuppressWarnings("null")org.eclipse.ocl.pivot.@NonNull Class unspecializedPartialType : unspecializedCompleteClass.getPartialClasses()) {
 							initMemberPropertiesFrom(unspecializedPartialType);
 							List<ElementExtension> extensions = unspecializedPartialType.getOwnedExtensions();
 							if (extensions.size() > 0) {
@@ -871,7 +871,7 @@
 				Set<Stereotype> allStereotypes = new HashSet<Stereotype>();
 				gatherAllStereotypes(allStereotypes, extendingStereotypes);
 				for (@SuppressWarnings("null")@NonNull Stereotype stereotype : allStereotypes) {
-					@NonNull org.eclipse.ocl.pivot.Class baseType = pivotClass;
+					org.eclipse.ocl.pivot.@NonNull Class baseType = pivotClass;
 					initExtensionPropertiesFrom(baseType, stereotype);
 				}
 			}
@@ -900,7 +900,7 @@
 		return name2partialProperties2;
 	}
 
-	protected void initMemberPropertiesFrom(@NonNull org.eclipse.ocl.pivot.Class asType) {
+	protected void initMemberPropertiesFrom(org.eclipse.ocl.pivot.@NonNull Class asType) {
 		org.eclipse.ocl.pivot.Class asPrimaryType = PivotUtil.getUnspecializedTemplateableElement(asType);
 		if (INIT_MEMBER_PROPERTIES.isActive()) {
 			INIT_MEMBER_PROPERTIES.println(this + " from " + asPrimaryType + " " + NameUtil.debugSimpleName(asPrimaryType));
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/PartialModels.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/PartialModels.java
index 98e8000..506443d 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/PartialModels.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/PartialModels.java
@@ -72,7 +72,7 @@
 	}
 
 	@Override
-	public void didAddPackage(@NonNull org.eclipse.ocl.pivot.Package partialPackage) {
+	public void didAddPackage(org.eclipse.ocl.pivot.@NonNull Package partialPackage) {
 		getCompleteModel().didAddNestedPackage(partialPackage);
 	}
 	
@@ -97,7 +97,7 @@
 	}
 
 	@Override
-	public void didRemovePackage(@NonNull org.eclipse.ocl.pivot.Package partialPackage) {
+	public void didRemovePackage(org.eclipse.ocl.pivot.@NonNull Package partialPackage) {
 		getCompleteModel().didRemoveNestedPackage(partialPackage);
 	}
 	
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/PartialPackages.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/PartialPackages.java
index 0cb460c..1ff0092 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/PartialPackages.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/PartialPackages.java
@@ -69,7 +69,7 @@
 		super.addUnique(index, partialPackage);
 	}
 
-	protected void didAdd(@NonNull org.eclipse.ocl.pivot.Package partialPackage) {
+	protected void didAdd(org.eclipse.ocl.pivot.@NonNull Package partialPackage) {
 		if (PARTIAL_PACKAGES.isActive()) {
 			PARTIAL_PACKAGES.println("Do-didAdd " + this + " " + partialPackage);
 		}
@@ -78,7 +78,7 @@
 	}
 
 	@Override
-	public void didAddPackage(@NonNull org.eclipse.ocl.pivot.Package nestedPackage) {
+	public void didAddPackage(org.eclipse.ocl.pivot.@NonNull Package nestedPackage) {
 		getCompletePackage().didAddNestedPackage(nestedPackage);
 	}
 
@@ -139,17 +139,17 @@
 	}
 
 	@Override
-	public void didRemovePackage(@NonNull org.eclipse.ocl.pivot.Package nestedPackage) {
+	public void didRemovePackage(org.eclipse.ocl.pivot.@NonNull Package nestedPackage) {
 		getCompletePackage().didRemoveNestedPackage(nestedPackage);
 	}
 
 	@Override
-	public void didAddClass(@NonNull org.eclipse.ocl.pivot.Class partialClass) {
+	public void didAddClass(org.eclipse.ocl.pivot.@NonNull Class partialClass) {
 		getCompletePackage().didAddClass(partialClass);
 	}
 
 	@Override
-	public void didRemoveClass(@NonNull org.eclipse.ocl.pivot.Class partialClass) {
+	public void didRemoveClass(org.eclipse.ocl.pivot.@NonNull Class partialClass) {
 		CompleteInheritanceImpl completeInheritance = name2inheritance.remove(partialClass.getName());
 //		System.out.println("PartialPackage.didRemoveClass " + partialClass);
 		getCompletePackage().didRemoveClass(partialClass);
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/RootCompletePackages.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/RootCompletePackages.java
index 407d518..398ff79 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/RootCompletePackages.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/RootCompletePackages.java
@@ -31,13 +31,13 @@
 	}
 
 	@Override
-	public @NonNull CompletePackageInternal createCompletePackage(@NonNull org.eclipse.ocl.pivot.Package partialPackage) {
+	public @NonNull CompletePackageInternal createCompletePackage(org.eclipse.ocl.pivot.@NonNull Package partialPackage) {
 		CompletePackageInternal completePackage = (CompletePackageInternal) PivotFactory.eINSTANCE.createCompletePackage();
 		completePackage.init(partialPackage.getName(), partialPackage.getNsPrefix(), partialPackage.getURI());
 		return completePackage;
 	}
 	
-	protected @NonNull CompletePackageInternal createRootCompletePackage(@NonNull org.eclipse.ocl.pivot.Package pivotPackage) {
+	protected @NonNull CompletePackageInternal createRootCompletePackage(org.eclipse.ocl.pivot.@NonNull Package pivotPackage) {
 		if (Orphanage.isTypeOrphanage(pivotPackage)) {
 			return getCompleteModel().getOrphanCompletePackage();
 		}
@@ -80,7 +80,7 @@
 	}
 
 	@Override
-	public @NonNull CompletePackageInternal getOwnedCompletePackage(@NonNull org.eclipse.ocl.pivot.Package pivotPackage) {
+	public @NonNull CompletePackageInternal getOwnedCompletePackage(org.eclipse.ocl.pivot.@NonNull Package pivotPackage) {
 		//
 		//	Try to find package by packageURI
 		//
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/StandardLibraryInternal.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/StandardLibraryInternal.java
index c5bf80f..c1ce6fe 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/StandardLibraryInternal.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/complete/StandardLibraryInternal.java
@@ -31,7 +31,7 @@
 	@Nullable Operation basicGetOclInvalidOperation();
 	@Nullable Property basicGetOclInvalidProperty();
 	@Nullable InvalidType basicGetOclInvalidType();
-	void defineLibraryType(@NonNull org.eclipse.ocl.pivot.Class pivotType);
+	void defineLibraryType(org.eclipse.ocl.pivot.@NonNull Class pivotType);
 	void dispose();
 	@Override
 	@NonNull BagType getBagType();
@@ -50,18 +50,18 @@
 	@NonNull Property getOclInvalidProperty();
 	@Override
 	@NonNull InvalidType getOclInvalidType();
-	@NonNull org.eclipse.ocl.pivot.Class getOclLambdaType();
-	@NonNull org.eclipse.ocl.pivot.Class getOclTypeType();
+	org.eclipse.ocl.pivot.@NonNull Class getOclLambdaType();
+	org.eclipse.ocl.pivot.@NonNull Class getOclTypeType();
 	@Override
 	@NonNull VoidType getOclVoidType();
 	@Override
 	@NonNull CollectionType getOrderedCollectionType();
 	@Override
 	@NonNull OrderedSetType getOrderedSetType();
-	@Nullable org.eclipse.ocl.pivot.Class getASClass(@NonNull String className);
+	org.eclipse.ocl.pivot.@Nullable Class getASClass(@NonNull String className);
 	@Override
 	@NonNull PrimitiveType getRealType();
-	@NonNull org.eclipse.ocl.pivot.Class getRequiredLibraryType(@NonNull String typeName);
+	org.eclipse.ocl.pivot.@NonNull Class getRequiredLibraryType(@NonNull String typeName);
 	@Override
 	@NonNull SequenceType getSequenceType();
 	@Override
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/context/AbstractBase2ASConversion.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/context/AbstractBase2ASConversion.java
index 5085cb0..b5dd8aa 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/context/AbstractBase2ASConversion.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/context/AbstractBase2ASConversion.java
@@ -66,7 +66,7 @@
 		}
 	}
 
-	public void refreshNsURI(@NonNull org.eclipse.ocl.pivot.Package pivotPackage, String newNsURI) {
+	public void refreshNsURI(org.eclipse.ocl.pivot.@NonNull Package pivotPackage, String newNsURI) {
 		String oldNsURI = pivotPackage.getURI();
 		if ((newNsURI != oldNsURI) && ((newNsURI == null) || !newNsURI.equals(oldNsURI))) {
 			pivotPackage.setURI(newNsURI);
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/context/ClassContext.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/context/ClassContext.java
index f5e23b8..febf62d 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/context/ClassContext.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/context/ClassContext.java
@@ -23,17 +23,17 @@
  */
 public class ClassContext extends AbstractParserContext
 {
-	protected final @Nullable org.eclipse.ocl.pivot.Class classContext;
+	protected final org.eclipse.ocl.pivot.@Nullable Class classContext;
 	protected final @Nullable Type instanceContext;
 	
-	public ClassContext(@NonNull EnvironmentFactory environmentFactory, @Nullable URI uri, @Nullable org.eclipse.ocl.pivot.Class classContext, @Nullable Type instanceContext) {
+	public ClassContext(@NonNull EnvironmentFactory environmentFactory, @Nullable URI uri, org.eclipse.ocl.pivot.@Nullable Class classContext, @Nullable Type instanceContext) {
 		super(environmentFactory, uri);
  		this.classContext = classContext != null ? getMetamodelManager().getPrimaryClass(classContext) : null;
 		this.instanceContext = instanceContext;
 	}
 
 	@Override
-	public @Nullable org.eclipse.ocl.pivot.Class getClassContext() {
+	public org.eclipse.ocl.pivot.@Nullable Class getClassContext() {
 		return classContext;
 	}
 
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/delegate/AbstractDelegatedBehavior.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/delegate/AbstractDelegatedBehavior.java
index 8e36f09..000749b 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/delegate/AbstractDelegatedBehavior.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/delegate/AbstractDelegatedBehavior.java
@@ -85,7 +85,7 @@
 		for (DelegateDomain delegateDomain : adapter.getAllDelegateDomains()) {
 			String uri = delegateDomain.getURI();
 			if (hasDelegateAnnotation(eObject, ePackage, uri)) {
-				F factory = getFactory(delegateDomain, eObject);
+				@Nullable F factory = getFactory(delegateDomain, eObject);
 				if (factory == null) {
 					factory = getDefaultFactory();
 				}
@@ -106,7 +106,7 @@
 		for (DelegateDomain delegateDomain : adapter.getAllDelegateDomains()) {
 			String uri = delegateDomain.getURI();
 			if (eObject.getEAnnotation(uri) != null) {
-				F factory = getFactory(delegateDomain, eObject);
+				@Nullable F factory = getFactory(delegateDomain, eObject);
 				if (factory == null) {
 					factory = getDefaultFactory();
 				}
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/delegate/DelegateDomain.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/delegate/DelegateDomain.java
index 6d665a7..7ff2988 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/delegate/DelegateDomain.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/delegate/DelegateDomain.java
@@ -57,7 +57,7 @@
 		interface Registry
 				extends Map<String, Object> {
 
-			@NonNull Factory.Registry INSTANCE = new Impl();
+			Factory.@NonNull Registry INSTANCE = new Impl();
 
 			DelegateDomain.Factory getFactory(@NonNull String uri);
 
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/delegate/DelegateInstaller.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/delegate/DelegateInstaller.java
index 8618d33..eaff15a 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/delegate/DelegateInstaller.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/delegate/DelegateInstaller.java
@@ -316,7 +316,7 @@
 	 * @param metamodelManager
 	 * @param pivotPackage
 	 */
-	private boolean installDelegates(@NonNull org.eclipse.ocl.pivot.Class pivotType) {
+	private boolean installDelegates(org.eclipse.ocl.pivot.@NonNull Class pivotType) {
 		boolean hasDelegates = false;
 		PivotMetamodelManager metamodelManager = environmentFactory.getMetamodelManager();
 		Type primaryType = metamodelManager.getPrimaryType(pivotType);
@@ -417,7 +417,7 @@
 		}
 	}
 	
-	public void installDelegates(@NonNull EClassifier eClassifier, @NonNull org.eclipse.ocl.pivot.Class pivotType) {
+	public void installDelegates(@NonNull EClassifier eClassifier, org.eclipse.ocl.pivot.@NonNull Class pivotType) {
 		StringBuilder s = null;
 		PivotMetamodelManager metamodelManager = environmentFactory.getMetamodelManager();
 		for (Constraint pivotConstraint : metamodelManager.getLocalInvariants(pivotType)) {
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/delegate/DelegateResourceAdapter.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/delegate/DelegateResourceAdapter.java
index d4391c0..146d0ae 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/delegate/DelegateResourceAdapter.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/delegate/DelegateResourceAdapter.java
@@ -79,7 +79,7 @@
 	    }
 	}
 
-	protected void installPackages(@NonNull EPackage.Registry packageRegistry, @NonNull List<? extends EObject> contents) {
+	protected void installPackages(EPackage.@NonNull Registry packageRegistry, @NonNull List<? extends EObject> contents) {
 		for (EObject eObject : contents) {
 			if (eObject instanceof EPackage) {
 				EPackage ePackage = (EPackage)eObject;
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/delegate/InvocationBehavior.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/delegate/InvocationBehavior.java
index 94cc93c..201c171 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/delegate/InvocationBehavior.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/delegate/InvocationBehavior.java
@@ -41,12 +41,12 @@
 //	}
 
 	@Override
-	public @Nullable InvocationDelegate.Factory getDefaultFactory() {
+	public InvocationDelegate.@Nullable Factory getDefaultFactory() {
 		return InvocationDelegate.Factory.Registry.INSTANCE.getFactory(getName());
 	}
 
 	@Override
-	public @NonNull InvocationDelegate.Factory.Registry getDefaultRegistry() {
+	public InvocationDelegate.Factory.@NonNull Registry getDefaultRegistry() {
 		return ClassUtil.nonNullEMF(InvocationDelegate.Factory.Registry.INSTANCE);
 	}
 
@@ -56,7 +56,7 @@
 	}
 
 	@Override
-	public @Nullable InvocationDelegate.Factory getFactory(@NonNull DelegateDomain delegateDomain, @NonNull EOperation eOperation) {
+	public InvocationDelegate.@Nullable Factory getFactory(@NonNull DelegateDomain delegateDomain, @NonNull EOperation eOperation) {
 		InvocationDelegate.Factory.Registry registry = DelegateResourceSetAdapter.getRegistry(
 			eOperation, getRegistryClass(), getDefaultRegistry());
 	    return registry != null ? registry.getFactory(delegateDomain.getURI()) : null;
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/ecore/as2es/AS2Ecore.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/ecore/as2es/AS2Ecore.java
index 2f79b48..111bcff 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/ecore/as2es/AS2Ecore.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/ecore/as2es/AS2Ecore.java
@@ -381,7 +381,7 @@
 	/**
 	 * Return tre if asPackage is a Pivot Metamodel.
 	 */
-	public boolean isPivot(@NonNull org.eclipse.ocl.pivot.Package asPackage) {
+	public boolean isPivot(org.eclipse.ocl.pivot.@NonNull Package asPackage) {
 		List<org.eclipse.ocl.pivot.Class> asTypes = asPackage.getOwnedClasses();
 		if (NameUtil.getNameable(asTypes, PivotPackage.Literals.ENUMERATION_LITERAL.getName()) == null) {
 			return false;
@@ -425,7 +425,7 @@
 		}
 	}
 
-	protected void setGenerationInProgress(@NonNull org.eclipse.ocl.pivot.Package asPackage, boolean isGenerating) {
+	protected void setGenerationInProgress(org.eclipse.ocl.pivot.@NonNull Package asPackage, boolean isGenerating) {
 		String nsUri = asPackage.getURI();
 		if (nsUri != null) {
 			ProjectManager projectManager = environmentFactory.getProjectManager();
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/ecore/as2es/AS2EcoreDeclarationVisitor.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/ecore/as2es/AS2EcoreDeclarationVisitor.java
index 8ae066f..b0aa6bc 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/ecore/as2es/AS2EcoreDeclarationVisitor.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/ecore/as2es/AS2EcoreDeclarationVisitor.java
@@ -197,7 +197,7 @@
 		this.delegateInstaller = context.getDelegateInstaller();
 	}
 
-	protected void copyClassifier(@NonNull EClassifier eClassifier, @NonNull org.eclipse.ocl.pivot.Class pivotType) {
+	protected void copyClassifier(@NonNull EClassifier eClassifier, org.eclipse.ocl.pivot.@NonNull Class pivotType) {
 		copyNamedElement(eClassifier, pivotType);
 		@SuppressWarnings("null")@NonNull List<ETypeParameter> eTypeParameters = eClassifier.getETypeParameters();
 		copyTemplateSignature(eTypeParameters, pivotType);
@@ -415,7 +415,7 @@
 	}
 
 	@Override
-	public EObject visitClass(@NonNull org.eclipse.ocl.pivot.Class pivotClass) {
+	public EObject visitClass(org.eclipse.ocl.pivot.@NonNull Class pivotClass) {
 		if (pivotClass.getOwnedBindings().size() > 0) {
 			return null;
 		}
@@ -655,7 +655,7 @@
 	public Object visitModel(@NonNull Model pivotModel) {
 		EModelElement firstElement = null;
 		List<EObject> outputObjects = new ArrayList<EObject>();
-		for (@SuppressWarnings("null")@NonNull org.eclipse.ocl.pivot.Package pivotObject : pivotModel.getOwnedPackages()) {
+		for (@SuppressWarnings("null")org.eclipse.ocl.pivot.@NonNull Package pivotObject : pivotModel.getOwnedPackages()) {
 			if (!Orphanage.isTypeOrphanage(pivotObject) && !PivotUtilInternal.isImplicitPackage(pivotObject)) {
 				Object ecoreObject = safeVisit(pivotObject);
 				if (ecoreObject instanceof EObject) {
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/ecore/as2es/AS2EcoreReferenceVisitor.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/ecore/as2es/AS2EcoreReferenceVisitor.java
index 24aa4c1..8e0fff0 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/ecore/as2es/AS2EcoreReferenceVisitor.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/ecore/as2es/AS2EcoreReferenceVisitor.java
@@ -310,7 +310,7 @@
 	}
 
 	@Override
-	public EObject visitClass(@NonNull org.eclipse.ocl.pivot.Class pivotClass) {
+	public EObject visitClass(org.eclipse.ocl.pivot.@NonNull Class pivotClass) {
 		EClass eClass = context.getCreated(EClass.class, pivotClass);
 		safeVisitAll(EClass.class, eClass.getEGenericSuperTypes(), eClass.getESuperTypes(), pivotClass.getSuperClasses());
 		return eClass;
@@ -371,7 +371,7 @@
 	}
 
 	@Override
-	public EObject visitPackage(@NonNull org.eclipse.ocl.pivot.Package pivotPackage) {
+	public EObject visitPackage(org.eclipse.ocl.pivot.@NonNull Package pivotPackage) {
 		EPackage ePackage = context.getCreated(EPackage.class, pivotPackage);
 		if (ePackage == null) {
 			return null;
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/ecore/as2es/AS2EcoreTypeRefVisitor.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/ecore/as2es/AS2EcoreTypeRefVisitor.java
index 0b47332..69b3410 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/ecore/as2es/AS2EcoreTypeRefVisitor.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/ecore/as2es/AS2EcoreTypeRefVisitor.java
@@ -60,7 +60,7 @@
 		this.standardLibrary = context.getStandardLibrary();
 	}
 
-	public EGenericType resolveEGenericType(@NonNull org.eclipse.ocl.pivot.Class type) {
+	public EGenericType resolveEGenericType(org.eclipse.ocl.pivot.@NonNull Class type) {
 		EObject eType = safeVisit(type);
 		if (eType instanceof EGenericType) {
 			return (EGenericType) eType;
@@ -108,7 +108,7 @@
 	}
 
 	@Override
-	public EObject visitClass(@NonNull org.eclipse.ocl.pivot.Class pivotType) {
+	public EObject visitClass(org.eclipse.ocl.pivot.@NonNull Class pivotType) {
 		if (pivotType.getOwnedBindings().size() == 0) {
 			EClassifier eClassifier = context.getCreated(EClassifier.class, pivotType);
 			if (eClassifier != null) {
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/ecore/es2as/Ecore2ASDeclarationSwitch.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/ecore/es2as/Ecore2ASDeclarationSwitch.java
index 1d73416..d9ec917 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/ecore/es2as/Ecore2ASDeclarationSwitch.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/ecore/es2as/Ecore2ASDeclarationSwitch.java
@@ -598,7 +598,7 @@
 		return excludedAnnotations;
 	}
 
-	protected void copyClassifier(@NonNull org.eclipse.ocl.pivot.Class pivotElement, @NonNull EClassifier eClassifier, @Nullable List<EAnnotation> excludedAnnotations) {
+	protected void copyClassifier(org.eclipse.ocl.pivot.@NonNull Class pivotElement, @NonNull EClassifier eClassifier, @Nullable List<EAnnotation> excludedAnnotations) {
 		excludedAnnotations = refreshTypeConstraints(pivotElement, eClassifier, excludedAnnotations);
 		copyNamedElement(pivotElement, eClassifier);
 		copyAnnotatedElement(pivotElement, eClassifier, excludedAnnotations);
@@ -782,7 +782,7 @@
 		}
 	}
 
-	protected List<EAnnotation> refreshTypeConstraints(@NonNull org.eclipse.ocl.pivot.Class pivotElement, @NonNull EClassifier eClassifier, @Nullable List<EAnnotation> excludedAnnotations) {
+	protected List<EAnnotation> refreshTypeConstraints(org.eclipse.ocl.pivot.@NonNull Class pivotElement, @NonNull EClassifier eClassifier, @Nullable List<EAnnotation> excludedAnnotations) {
 		EMap<String, String> oclAnnotationDetails = null;
 		Map<String, Constraint> newConstraintMap = null;
 		Map<String, Constraint> oldInvariantMap = null;
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/elements/AbstractExecutorType.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/elements/AbstractExecutorType.java
index d05ada9..b75e085 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/elements/AbstractExecutorType.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/elements/AbstractExecutorType.java
@@ -102,12 +102,12 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getNormalizedType( @NonNull StandardLibrary standardLibrary) {
+	public org.eclipse.ocl.pivot.@NonNull Class getNormalizedType( @NonNull StandardLibrary standardLibrary) {
 		throw new UnsupportedOperationException();
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getPivotClass() {
+	public org.eclipse.ocl.pivot.@NonNull Class getPivotClass() {
 		throw new UnsupportedOperationException();
 	}
 
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/evaluation/AbstractEvaluationVisitor.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/evaluation/AbstractEvaluationVisitor.java
index aa4047c..94bbb35 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/evaluation/AbstractEvaluationVisitor.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/evaluation/AbstractEvaluationVisitor.java
@@ -218,17 +218,17 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getStaticTypeOf(@Nullable Object value) {
+	public org.eclipse.ocl.pivot.@NonNull Class getStaticTypeOf(@Nullable Object value) {
 		return environmentFactory.getIdResolver().getStaticTypeOf(value);
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getStaticTypeOf(@Nullable Object value, @NonNull Object... values) {
+	public org.eclipse.ocl.pivot.@NonNull Class getStaticTypeOf(@Nullable Object value, @NonNull Object... values) {
 		return environmentFactory.getIdResolver().getStaticTypeOf(value, values);
 	}
  
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getStaticTypeOf(@Nullable Object value, @NonNull Iterable<?> values) {
+	public org.eclipse.ocl.pivot.@NonNull Class getStaticTypeOf(@Nullable Object value, @NonNull Iterable<?> values) {
 		return environmentFactory.getIdResolver().getStaticTypeOf(value, values);
 	}
  
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/evaluation/OCLEvaluationVisitor.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/evaluation/OCLEvaluationVisitor.java
index 6568a57..cfe7525 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/evaluation/OCLEvaluationVisitor.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/evaluation/OCLEvaluationVisitor.java
@@ -182,7 +182,7 @@
 		return this;
 	}
 
-	public @NonNull LibraryFeature lookupImplementation(@NonNull org.eclipse.ocl.pivot.Class dynamicType, @NonNull Operation staticOperation) {
+	public @NonNull LibraryFeature lookupImplementation(org.eclipse.ocl.pivot.@NonNull Class dynamicType, @NonNull Operation staticOperation) {
 		CompleteInheritance inheritance = metamodelManager.getInheritance(dynamicType);
 		return inheritance.getPivotClass().lookupImplementation(standardLibrary, staticOperation);
 	}
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/evaluation/TracingEvaluationVisitor.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/evaluation/TracingEvaluationVisitor.java
index 3a3e6cb..2437a8c 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/evaluation/TracingEvaluationVisitor.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/evaluation/TracingEvaluationVisitor.java
@@ -128,17 +128,17 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getStaticTypeOf(@Nullable Object value) {
+	public org.eclipse.ocl.pivot.@NonNull Class getStaticTypeOf(@Nullable Object value) {
 		return delegate.getStaticTypeOf(value);
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getStaticTypeOf(@Nullable Object value, @NonNull Object... values) {
+	public org.eclipse.ocl.pivot.@NonNull Class getStaticTypeOf(@Nullable Object value, @NonNull Object... values) {
 		return delegate.getStaticTypeOf(value, values);
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getStaticTypeOf(@Nullable Object value, @NonNull Iterable<?> values) {
+	public org.eclipse.ocl.pivot.@NonNull Class getStaticTypeOf(@Nullable Object value, @NonNull Iterable<?> values) {
 		return delegate.getStaticTypeOf(value, values);
 	}
 
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/executor/AbstractSpecializedType.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/executor/AbstractSpecializedType.java
index 623c24a..776ed3e 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/executor/AbstractSpecializedType.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/executor/AbstractSpecializedType.java
@@ -18,9 +18,9 @@
 
 public abstract class AbstractSpecializedType extends AbstractExecutorClass
 {
-	protected final @NonNull org.eclipse.ocl.pivot.Class containerType;
+	protected final org.eclipse.ocl.pivot.@NonNull Class containerType;
 	
-	public AbstractSpecializedType(@NonNull String name, @NonNull org.eclipse.ocl.pivot.Class containerType) {
+	public AbstractSpecializedType(@NonNull String name, org.eclipse.ocl.pivot.@NonNull Class containerType) {
 		super(name, 0);
 		this.containerType = containerType;
 	}
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/executor/ExecutorCollectionType.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/executor/ExecutorCollectionType.java
index c36563a..1ffd106 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/executor/ExecutorCollectionType.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/executor/ExecutorCollectionType.java
@@ -34,7 +34,7 @@
 	protected final @NonNull UnlimitedNaturalValue upper;
 	protected final @NonNull CollectionTypeId typeId;
 	
-	public ExecutorCollectionType(@NonNull String name, @NonNull org.eclipse.ocl.pivot.Class containerType,
+	public ExecutorCollectionType(@NonNull String name, org.eclipse.ocl.pivot.@NonNull Class containerType,
 			@NonNull Type elementType, boolean isNullFree, @Nullable IntegerValue lower, @Nullable UnlimitedNaturalValue upper) {
 		super(name, containerType);
 		this.elementType = elementType;
@@ -56,7 +56,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getCommonType(@NonNull IdResolver idResolver, @NonNull Type type) {
+	public org.eclipse.ocl.pivot.@NonNull Class getCommonType(@NonNull IdResolver idResolver, @NonNull Type type) {
 		StandardLibrary standardLibrary = idResolver.getStandardLibrary();
 		if (!(type instanceof ExecutorCollectionType)) {
 			return standardLibrary.getOclAnyType();
@@ -93,7 +93,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getContainerType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getContainerType() {
 		return containerType;
 	}
 
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/executor/ExecutorMapType.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/executor/ExecutorMapType.java
index 88ade3a..8f188d5 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/executor/ExecutorMapType.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/executor/ExecutorMapType.java
@@ -29,7 +29,7 @@
 	protected final @NonNull MapTypeId typeId;
 	
 	public ExecutorMapType(@NonNull String name,
-			@NonNull org.eclipse.ocl.pivot.Class containerType, @NonNull Type keyType, @NonNull Type valueType) {
+			org.eclipse.ocl.pivot.@NonNull Class containerType, @NonNull Type keyType, @NonNull Type valueType) {
 		super(name, containerType);
 		this.keyType = keyType;
 		this.valueType = valueType;
@@ -48,7 +48,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getCommonType(@NonNull IdResolver idResolver, @NonNull Type type) {
+	public org.eclipse.ocl.pivot.@NonNull Class getCommonType(@NonNull IdResolver idResolver, @NonNull Type type) {
 		StandardLibrary standardLibrary = idResolver.getStandardLibrary();
 		if (!(type instanceof ExecutorMapType)) {
 			return standardLibrary.getOclAnyType();
@@ -70,7 +70,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getContainerType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getContainerType() {
 		return containerType;
 	}
 
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/executor/ExecutorTupleType.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/executor/ExecutorTupleType.java
index 8612439..2da5a74 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/executor/ExecutorTupleType.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/executor/ExecutorTupleType.java
@@ -43,7 +43,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getCommonType(@NonNull IdResolver idResolver, @NonNull Type type) {
+	public org.eclipse.ocl.pivot.@NonNull Class getCommonType(@NonNull IdResolver idResolver, @NonNull Type type) {
 		if (type != this) {
 			return idResolver.getStandardLibrary().getOclAnyType();
 		}
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/executor/PivotExecutorStandardLibrary.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/executor/PivotExecutorStandardLibrary.java
index 397b56d..e1dc4aa 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/executor/PivotExecutorStandardLibrary.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/executor/PivotExecutorStandardLibrary.java
@@ -47,7 +47,7 @@
 		PivotTables.PACKAGE.getClass();
 	}
 
-	protected @NonNull org.eclipse.ocl.pivot.Package createPackage(@NonNull org.eclipse.ocl.pivot.Package domainPackage) {
+	protected org.eclipse.ocl.pivot.@NonNull Package createPackage(org.eclipse.ocl.pivot.@NonNull Package domainPackage) {
 		org.eclipse.ocl.pivot.Package pivotPackage = PivotFactory.eINSTANCE.createPackage();
 		pivotPackage.setName(domainPackage.getName());
 		pivotPackage.setURI(domainPackage.getURI());
@@ -60,24 +60,24 @@
 		return pivotPackage;
 	}
 
-	protected @NonNull org.eclipse.ocl.pivot.Class createType(@NonNull org.eclipse.ocl.pivot.Class domainType) {
+	protected org.eclipse.ocl.pivot.@NonNull Class createType(org.eclipse.ocl.pivot.@NonNull Class domainType) {
 		org.eclipse.ocl.pivot.Class pivotType = PivotFactory.eINSTANCE.createClass();
 		pivotType.setName(domainType.getName());
 		return pivotType;
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getClassType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getClassType() {
 		return environmentFactory.getStandardLibrary().getClassType();
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getEnumerationType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getEnumerationType() {
 		return environmentFactory.getStandardLibrary().getEnumerationType();
 	}
 
 	@Override
-	public @NonNull CompleteInheritance getInheritance(@NonNull org.eclipse.ocl.pivot.Class type) {
+	public @NonNull CompleteInheritance getInheritance(org.eclipse.ocl.pivot.@NonNull Class type) {
 		return environmentFactory.getMetamodelManager().getInheritance(type);
 	}
 
@@ -86,7 +86,7 @@
 	}
 
 	@Override
-	public @Nullable org.eclipse.ocl.pivot.Package getNsURIPackage(@NonNull String nsURI) {
+	public org.eclipse.ocl.pivot.@Nullable Package getNsURIPackage(@NonNull String nsURI) {
 		throw new UnsupportedOperationException();
 	}
 
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/helper/OCLHelperImpl.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/helper/OCLHelperImpl.java
index ba39066..3d3cf65 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/helper/OCLHelperImpl.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/helper/OCLHelperImpl.java
@@ -41,7 +41,7 @@
 	protected final @NonNull OCL ocl;
 	protected final @Nullable EObject context;
 //	private Diagnostic problems;
-	private @Nullable org.eclipse.ocl.pivot.Class contextClass = null;
+	private org.eclipse.ocl.pivot.@Nullable Class contextClass = null;
 	private @Nullable Operation contextOperation = null;
 	private @Nullable Property contextProperty = null;
 
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/ecore/EcoreExecutorManager.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/ecore/EcoreExecutorManager.java
index 0d66294..89a8c81 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/ecore/EcoreExecutorManager.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/ecore/EcoreExecutorManager.java
@@ -188,7 +188,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getStaticTypeOf(@Nullable Object value) {
+	public org.eclipse.ocl.pivot.@NonNull Class getStaticTypeOf(@Nullable Object value) {
 		IdResolver idResolver2 = idResolver;
 		if (idResolver2 == null) {
 			idResolver = idResolver2 = createIdResolver();
@@ -197,7 +197,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getStaticTypeOf(@Nullable Object value, @NonNull Object... values) {
+	public org.eclipse.ocl.pivot.@NonNull Class getStaticTypeOf(@Nullable Object value, @NonNull Object... values) {
 		IdResolver idResolver2 = idResolver;
 		if (idResolver2 == null) {
 			idResolver = idResolver2 = createIdResolver();
@@ -206,7 +206,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getStaticTypeOf(@Nullable Object value, @NonNull Iterable<?> values) {
+	public org.eclipse.ocl.pivot.@NonNull Class getStaticTypeOf(@Nullable Object value, @NonNull Iterable<?> values) {
 		IdResolver idResolver2 = idResolver;
 		if (idResolver2 == null) {
 			idResolver = idResolver2 = createIdResolver();
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/ecore/EcoreIdResolver.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/ecore/EcoreIdResolver.java
index 14aadea..a0ff09d 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/ecore/EcoreIdResolver.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/ecore/EcoreIdResolver.java
@@ -60,7 +60,7 @@
 	}
 
 	@Override
-	protected @NonNull org.eclipse.ocl.pivot.Package addEPackage(@NonNull EPackage ePackage) {
+	protected org.eclipse.ocl.pivot.@NonNull Package addEPackage(@NonNull EPackage ePackage) {
 		String nsURI = ePackage.getNsURI();
 		org.eclipse.ocl.pivot.Package asPackage = nsURI2package.get(nsURI);
 		if (asPackage == null) {
@@ -126,7 +126,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getType(@NonNull EClassifier eClassifier) {
+	public org.eclipse.ocl.pivot.@NonNull Class getType(@NonNull EClassifier eClassifier) {
 		return getInheritance(eClassifier).getPivotClass();
 	}
 
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/ecore/EcoreReflectiveType.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/ecore/EcoreReflectiveType.java
index a5cde05..f901b81 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/ecore/EcoreReflectiveType.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/ecore/EcoreReflectiveType.java
@@ -137,7 +137,7 @@
 	}
 	
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Package getOwningPackage() {
+	public org.eclipse.ocl.pivot.@NonNull Package getOwningPackage() {
 		return evaluationPackage;
 	}
 
@@ -186,7 +186,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getPivotClass() {
+	public org.eclipse.ocl.pivot.@NonNull Class getPivotClass() {
 		return this;
 	}
 
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/AbstractIdResolver.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/AbstractIdResolver.java
index 6cd15ad..1645ee5 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/AbstractIdResolver.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/AbstractIdResolver.java
@@ -263,9 +263,9 @@
 		this.standardLibrary = environment.getOwnedStandardLibrary();
 	}
 
-	protected abstract @NonNull org.eclipse.ocl.pivot.Package addEPackage(@NonNull EPackage ePackage);
+	protected abstract org.eclipse.ocl.pivot.@NonNull Package addEPackage(@NonNull EPackage ePackage);
 
-	private void addPackage(@NonNull org.eclipse.ocl.pivot.Package userPackage) {
+	private void addPackage(org.eclipse.ocl.pivot.@NonNull Package userPackage) {
 		String nsURI = userPackage.getURI();
 		if (nsURI != null) {
 			nsURI2package.put(nsURI, userPackage);
@@ -689,18 +689,18 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getClass(@NonNull TypeId typeId, @Nullable Object context) {
+	public org.eclipse.ocl.pivot.@NonNull Class getClass(@NonNull TypeId typeId, @Nullable Object context) {
 		Element type = typeId.accept(this);
 		assert type != null;
 		return (org.eclipse.ocl.pivot.Class)type;
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getCollectionType(@NonNull CollectionTypeId typeId) {
+	public org.eclipse.ocl.pivot.@NonNull Class getCollectionType(@NonNull CollectionTypeId typeId) {
 		return getCollectionType(typeId, false, null, null);
 	}
 
-	public @NonNull org.eclipse.ocl.pivot.Class getCollectionType(@NonNull CollectionTypeId typeId, boolean isNullFree, @Nullable IntegerValue lower, @Nullable UnlimitedNaturalValue upper) {
+	public org.eclipse.ocl.pivot.@NonNull Class getCollectionType(@NonNull CollectionTypeId typeId, boolean isNullFree, @Nullable IntegerValue lower, @Nullable UnlimitedNaturalValue upper) {
 		CollectionTypeId generalizedId = typeId.getGeneralizedId();
 		if ((typeId == generalizedId) && !isNullFree && (lower == null) && (upper == null)) {
 			if (generalizedId == TypeId.BAG) {
@@ -750,7 +750,7 @@
 	}
 	
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getDynamicTypeOf(@Nullable Object value) {
+	public org.eclipse.ocl.pivot.@NonNull Class getDynamicTypeOf(@Nullable Object value) {
 		if (value instanceof CollectionValue) {
 			CollectionValue collectionValue = (CollectionValue) value;
 			Type elementType = getDynamicTypeOf(collectionValue.iterable());
@@ -808,7 +808,7 @@
 	}
 
 	@Override
-	public synchronized @NonNull org.eclipse.ocl.pivot.Class getJavaType(@NonNull Class<?> javaClass) {
+	public synchronized org.eclipse.ocl.pivot.@NonNull Class getJavaType(@NonNull Class<?> javaClass) {
 		org.eclipse.ocl.pivot.Class type = key2type.get(javaClass);
 		if (type != null) {
 			return type;
@@ -827,7 +827,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getMapType(@NonNull MapTypeId typeId) {
+	public org.eclipse.ocl.pivot.@NonNull Class getMapType(@NonNull MapTypeId typeId) {
 		MapTypeId generalizedId = typeId.getGeneralizedId();
 		if (typeId == generalizedId) {
 			if (generalizedId == TypeId.MAP) {
@@ -861,7 +861,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Package getPackage(@NonNull PackageId packageId) {
+	public org.eclipse.ocl.pivot.@NonNull Package getPackage(@NonNull PackageId packageId) {
 		Element element = packageId.accept(this);
 		if (element instanceof org.eclipse.ocl.pivot.Package) {
 			return (org.eclipse.ocl.pivot.Package) element;
@@ -884,7 +884,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getStaticTypeOf(@Nullable Object value) {
+	public org.eclipse.ocl.pivot.@NonNull Class getStaticTypeOf(@Nullable Object value) {
 		if (value instanceof Type) {
 			org.eclipse.ocl.pivot.Class type = key2type.get(value);
 			if (type == null) {
@@ -945,7 +945,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getStaticTypeOf(@Nullable Object value, Object... values) {
+	public org.eclipse.ocl.pivot.@NonNull Class getStaticTypeOf(@Nullable Object value, Object... values) {
 		Object bestTypeId = getTypeKeyOf(value);
 		org.eclipse.ocl.pivot.Class bestType = key2type.get(bestTypeId);
 		assert bestType != null;
@@ -975,7 +975,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getStaticTypeOf(@Nullable Object value, @NonNull Iterable<?> values) {
+	public org.eclipse.ocl.pivot.@NonNull Class getStaticTypeOf(@Nullable Object value, @NonNull Iterable<?> values) {
 		Object bestTypeKey = getTypeKeyOf(value);
 		org.eclipse.ocl.pivot.Class bestType = key2type.get(bestTypeKey);
 		assert bestType != null;
@@ -1330,7 +1330,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Package visitNestedPackageId(@NonNull NestedPackageId packageId) {
+	public org.eclipse.ocl.pivot.@NonNull Package visitNestedPackageId(@NonNull NestedPackageId packageId) {
 		org.eclipse.ocl.pivot.Package parentPackage = (org.eclipse.ocl.pivot.Package) packageId.getParent().accept(this);
 		assert parentPackage != null;
 		org.eclipse.ocl.pivot.Package nestedPackage = environment.getNestedPackage(parentPackage, packageId.getName());
@@ -1341,7 +1341,7 @@
 	}
 
 /*	@Override
-	public @NonNull org.eclipse.ocl.pivot.Package visitNsURIPackageId(@NonNull NsURIPackageId id) {
+	public org.eclipse.ocl.pivot.@NonNull Package visitNsURIPackageId(@NonNull NsURIPackageId id) {
 		org.eclipse.ocl.pivot.Package nsURIPackage = standardLibrary.getNsURIPackage(id.getNsURI());
 		if (nsURIPackage == null) {
 			throw new UnsupportedOperationException();
@@ -1350,7 +1350,7 @@
 	} */
 
 	@Override
-	public synchronized @NonNull org.eclipse.ocl.pivot.Package visitNsURIPackageId(@NonNull NsURIPackageId id) {
+	public synchronized org.eclipse.ocl.pivot.@NonNull Package visitNsURIPackageId(@NonNull NsURIPackageId id) {
 		String nsURI = id.getNsURI();
 		org.eclipse.ocl.pivot.Package knownPackage = nsURI2package.get(nsURI);
 		if (knownPackage != null) {
@@ -1434,7 +1434,7 @@
 	}
 
 /*	@Override
-	public @NonNull org.eclipse.ocl.pivot.Package visitRootPackageId(@NonNull RootPackageId id) {
+	public org.eclipse.ocl.pivot.@NonNull Package visitRootPackageId(@NonNull RootPackageId id) {
 		String completeURIorName = id.getName();
 		org.eclipse.ocl.pivot.Package rootPackage = standardLibrary.getRootPackage(completeURIorName);
 		if (rootPackage == null) {
@@ -1444,7 +1444,7 @@
 	} */
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Package visitRootPackageId(@NonNull RootPackageId id) {
+	public org.eclipse.ocl.pivot.@NonNull Package visitRootPackageId(@NonNull RootPackageId id) {
 		if (id == IdManager.METAMODEL) {
 			return ClassUtil.nonNullState(getStandardLibrary().getPackage());
 		}
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/AbstractReflectiveInheritanceType.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/AbstractReflectiveInheritanceType.java
index c63b128..b4d2a22 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/AbstractReflectiveInheritanceType.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/AbstractReflectiveInheritanceType.java
@@ -45,12 +45,12 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getNormalizedType(@NonNull StandardLibrary standardLibrary) {
+	public org.eclipse.ocl.pivot.@NonNull Class getNormalizedType(@NonNull StandardLibrary standardLibrary) {
 		return getPivotClass();
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class isClass() {
+	public org.eclipse.ocl.pivot.@NonNull Class isClass() {
 		return getPivotClass();
 	}
 
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/DomainReflectivePackage.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/DomainReflectivePackage.java
index 06d49ef..a420d21 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/DomainReflectivePackage.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/DomainReflectivePackage.java
@@ -26,16 +26,16 @@
 public class DomainReflectivePackage extends ReflectivePackage
 {
 	protected final @NonNull StandardLibrary standardLibrary;
-	protected final @NonNull org.eclipse.ocl.pivot.Package domainPackage;
+	protected final org.eclipse.ocl.pivot.@NonNull Package domainPackage;
 
-	public DomainReflectivePackage(@NonNull StandardLibrary standardLibrary, @NonNull org.eclipse.ocl.pivot.Package domainPackage) {
+	public DomainReflectivePackage(@NonNull StandardLibrary standardLibrary, org.eclipse.ocl.pivot.@NonNull Package domainPackage) {
 		super(ClassUtil.nonNullPivot(domainPackage.getName()), domainPackage.getNsPrefix(), domainPackage.getURI(), domainPackage.getPackageId());
 		this.standardLibrary = standardLibrary;
 		this.domainPackage = domainPackage;
 	}
 
 	@Override
-	protected @NonNull ReflectiveInheritance createInheritance(@NonNull org.eclipse.ocl.pivot.Class domainClass) {
+	protected @NonNull ReflectiveInheritance createInheritance(org.eclipse.ocl.pivot.@NonNull Class domainClass) {
 		return new DomainReflectiveType(this, domainClass);
 	}
 
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/DomainReflectiveType.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/DomainReflectiveType.java
index fb7e3fb..13c802d 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/DomainReflectiveType.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/DomainReflectiveType.java
@@ -31,10 +31,10 @@
 public class DomainReflectiveType extends AbstractReflectiveInheritanceType
 {
 	protected final @NonNull DomainReflectivePackage evaluationPackage;
-	protected final @NonNull org.eclipse.ocl.pivot.Class domainClass;
+	protected final org.eclipse.ocl.pivot.@NonNull Class domainClass;
 	private /*@LazyNonNull*/ DomainProperties allProperties;
 
-	public DomainReflectiveType(@NonNull DomainReflectivePackage evaluationPackage, @NonNull org.eclipse.ocl.pivot.Class domainClass) {
+	public DomainReflectiveType(@NonNull DomainReflectivePackage evaluationPackage, org.eclipse.ocl.pivot.@NonNull Class domainClass) {
 		super(ClassUtil.nonNullModel(domainClass.getName()), computeFlags(domainClass));
 		this.evaluationPackage = evaluationPackage;
 		this.domainClass = domainClass;
@@ -143,12 +143,12 @@
 	}
 	
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Package getOwningPackage() {
+	public org.eclipse.ocl.pivot.@NonNull Package getOwningPackage() {
 		return evaluationPackage;
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getPivotClass() {
+	public org.eclipse.ocl.pivot.@NonNull Class getPivotClass() {
 		return domainClass;
 	}
 
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/ExecutableStandardLibrary.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/ExecutableStandardLibrary.java
index 23c809a..e7648f4 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/ExecutableStandardLibrary.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/ExecutableStandardLibrary.java
@@ -96,7 +96,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getBagType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getBagType() {
 		return OCLstdlibTables.Types._Bag;
 	}
 
@@ -111,22 +111,22 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getBooleanType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getBooleanType() {
 		return OCLstdlibTables.Types._Boolean;
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getCollectionType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getCollectionType() {
 		return OCLstdlibTables.Types._Collection;
 	}
 
 	@Override
-	public @NonNull CollectionType getCollectionType(@NonNull org.eclipse.ocl.pivot.Class genericType, @NonNull Type elementType, @Nullable IntegerValue lower, @Nullable UnlimitedNaturalValue upper) {
+	public @NonNull CollectionType getCollectionType(org.eclipse.ocl.pivot.@NonNull Class genericType, @NonNull Type elementType, @Nullable IntegerValue lower, @Nullable UnlimitedNaturalValue upper) {
 		return getCollectionType(genericType, elementType, false, lower, upper);
 	}
 
 	@Override
-	public synchronized @NonNull CollectionType getCollectionType(@NonNull org.eclipse.ocl.pivot.Class genericType, @NonNull Type elementType, boolean isNullFree, @Nullable IntegerValue lower, @Nullable UnlimitedNaturalValue upper) {
+	public synchronized @NonNull CollectionType getCollectionType(org.eclipse.ocl.pivot.@NonNull Class genericType, @NonNull Type elementType, boolean isNullFree, @Nullable IntegerValue lower, @Nullable UnlimitedNaturalValue upper) {
 		IntegerValue lower2 = lower;
 		UnlimitedNaturalValue upper2 = upper;
 		if (lower2 == null) {
@@ -153,7 +153,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getIntegerType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getIntegerType() {
 		return OCLstdlibTables.Types._Integer;
 	}
 
@@ -164,12 +164,12 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getMapType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getMapType() {
 		return OCLstdlibTables.Types._Map;
 	}
 
 	@Override
-	public synchronized @NonNull MapType getMapType(@NonNull org.eclipse.ocl.pivot.Class genericType, @NonNull Type keyType, @NonNull Type valueType) {
+	public synchronized @NonNull MapType getMapType(org.eclipse.ocl.pivot.@NonNull Class genericType, @NonNull Type keyType, @NonNull Type valueType) {
 		MapTypeParameters<Type, Type> typeParameters = TypeUtil.createMapTypeParameters(keyType, valueType);
 		ExecutorMapType specializedType = null;
 		Map<MapTypeParameters<Type, Type>, WeakReference<ExecutorMapType>> map = mapSpecializations.get(genericType);
@@ -189,7 +189,7 @@
 
 	// FIXME cf MetamodelManager
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getMetaclass(@NonNull Type classType) {
+	public org.eclipse.ocl.pivot.@NonNull Class getMetaclass(@NonNull Type classType) {
 		org.eclipse.ocl.pivot.Class metaType = null;
 		if (classType instanceof CollectionType) {
 			CollectionType collectionType = (CollectionType)classType;
@@ -227,57 +227,57 @@
 	}
 
 	@Override
-	public @Nullable org.eclipse.ocl.pivot.Package getNestedPackage(@NonNull org.eclipse.ocl.pivot.Package parentPackage, @NonNull String name) {
+	public org.eclipse.ocl.pivot.@Nullable Package getNestedPackage(org.eclipse.ocl.pivot.@NonNull Package parentPackage, @NonNull String name) {
 		return NameUtil.getNameable(parentPackage.getOwnedPackages(), name);
 	}
 
 	@Override
-	public @Nullable org.eclipse.ocl.pivot.Class getNestedType(@NonNull org.eclipse.ocl.pivot.Package parentPackage, @NonNull String name) {
+	public org.eclipse.ocl.pivot.@Nullable Class getNestedType(org.eclipse.ocl.pivot.@NonNull Package parentPackage, @NonNull String name) {
 		return NameUtil.getNameable(parentPackage.getOwnedClasses(), name);
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getOclAnyType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getOclAnyType() {
 		return OCLstdlibTables.Types._OclAny;
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getOclComparableType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getOclComparableType() {
 		return OCLstdlibTables.Types._OclComparable;
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getOclElementType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getOclElementType() {
 		return OCLstdlibTables.Types._OclElement;
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getOclInvalidType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getOclInvalidType() {
 		return OCLstdlibTables.Types._OclInvalid;
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getOclMessageType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getOclMessageType() {
 		return OCLstdlibTables.Types._OclMessage;
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getOclSelfType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getOclSelfType() {
 		return OCLstdlibTables.Types._OclSelf;
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getOclSummableType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getOclSummableType() {
 		return OCLstdlibTables.Types._OclSummable;
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getOclTupleType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getOclTupleType() {
 		return OCLstdlibTables.Types._OclTuple;
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getOclVoidType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getOclVoidType() {
 		return OCLstdlibTables.Types._OclVoid;
 	}
 
@@ -287,12 +287,12 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getOrderedCollectionType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getOrderedCollectionType() {
 		return OCLstdlibTables.Types._OrderedCollection;
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getOrderedSetType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getOrderedSetType() {
 		return OCLstdlibTables.Types._OrderedSet;
 	}
 
@@ -322,11 +322,11 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Package getPackage() {
+	public org.eclipse.ocl.pivot.@NonNull Package getPackage() {
 		return OCLstdlibTables.PACKAGE;
 	}
 
-	public @Nullable org.eclipse.ocl.pivot.Class getPivotType(@NonNull String className) {
+	public org.eclipse.ocl.pivot.@Nullable Class getPivotType(@NonNull String className) {
 		throw new UnsupportedOperationException();
 	}	
 
@@ -336,7 +336,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getRealType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getRealType() {
 		return OCLstdlibTables.Types._Real;
 	}
 
@@ -346,7 +346,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getSequenceType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getSequenceType() {
 		return OCLstdlibTables.Types._Sequence;
 	}
 
@@ -361,7 +361,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getSetType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getSetType() {
 		return OCLstdlibTables.Types._Set;
 	}
 
@@ -390,7 +390,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getStringType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getStringType() {
 		return OCLstdlibTables.Types._String;
 	}
 
@@ -458,12 +458,12 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getUniqueCollectionType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getUniqueCollectionType() {
 		return OCLstdlibTables.Types._UniqueCollection;
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getUnlimitedNaturalType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getUnlimitedNaturalType() {
 		return OCLstdlibTables.Types._UnlimitedNatural;
 	}
 	
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/ExecutorManager.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/ExecutorManager.java
index 8ae9192..98bc97b 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/ExecutorManager.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/ExecutorManager.java
@@ -175,17 +175,17 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getStaticTypeOf(@Nullable Object value) {
+	public org.eclipse.ocl.pivot.@NonNull Class getStaticTypeOf(@Nullable Object value) {
 		return getIdResolver().getStaticTypeOf(value);
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getStaticTypeOf(@Nullable Object value, @NonNull Object... values) {
+	public org.eclipse.ocl.pivot.@NonNull Class getStaticTypeOf(@Nullable Object value, @NonNull Object... values) {
 		return getIdResolver().getStaticTypeOf(value, values);
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getStaticTypeOf(@Nullable Object value, @NonNull Iterable<?> values) {
+	public org.eclipse.ocl.pivot.@NonNull Class getStaticTypeOf(@Nullable Object value, @NonNull Iterable<?> values) {
 		return getIdResolver().getStaticTypeOf(value, values);
 	}
 
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/ExecutorPackage.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/ExecutorPackage.java
index af718c2..e6a0f9c 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/ExecutorPackage.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/ExecutorPackage.java
@@ -84,7 +84,7 @@
 	}
 
 	@Override
-	public @Nullable org.eclipse.ocl.pivot.Class getOwnedClass(String typeName) {
+	public org.eclipse.ocl.pivot.@Nullable Class getOwnedClass(String typeName) {
 		List<org.eclipse.ocl.pivot.Class> ownedClasses = getOwnedClasses();
 		int index = Collections.binarySearch(ownedClasses, new StringNameable(typeName), NameUtil.NameableComparator.INSTANCE);
 		if (index >= 0) {
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/ExecutorStandardLibrary.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/ExecutorStandardLibrary.java
index 3d18a2b..806ddcd 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/ExecutorStandardLibrary.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/ExecutorStandardLibrary.java
@@ -70,7 +70,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getClassType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getClassType() {
 		Map<EcoreExecutorPackage, List<EcoreExecutorPackage>> extensions2 = extensions;
 		if (extensions2 == null) {
 			throw new IllegalStateException("No extension package registered to define Class type"); //$NON-NLS-1$
@@ -86,7 +86,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getEnumerationType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getEnumerationType() {
 		Map<EcoreExecutorPackage, List<EcoreExecutorPackage>> extensions2 = extensions;
 		if (extensions2 == null) {
 			throw new IllegalStateException("No extension package registered to define Enumeration type"); //$NON-NLS-1$
@@ -102,7 +102,7 @@
 	}
 
 	@Override
-	public @NonNull CompleteInheritance getInheritance(@NonNull org.eclipse.ocl.pivot.Class domainClass) {
+	public @NonNull CompleteInheritance getInheritance(org.eclipse.ocl.pivot.@NonNull Class domainClass) {
 		if (domainClass instanceof CompleteInheritance) {
 			return (CompleteInheritance) domainClass;
 		}
@@ -161,7 +161,7 @@
 	}
 
 	@Override
-	public @Nullable org.eclipse.ocl.pivot.Class getNestedType(@NonNull org.eclipse.ocl.pivot.Package parentPackage, @NonNull String name) {
+	public org.eclipse.ocl.pivot.@Nullable Class getNestedType(org.eclipse.ocl.pivot.@NonNull Package parentPackage, @NonNull String name) {
 		org.eclipse.ocl.pivot.Class nestedType = NameUtil.getNameable(parentPackage.getOwnedClasses(), name);
 		if (nestedType != null) {
 			return nestedType;
@@ -207,7 +207,7 @@
 	}
 
 	@Override
-	public @Nullable org.eclipse.ocl.pivot.Class getPivotType(@NonNull String className) {
+	public org.eclipse.ocl.pivot.@Nullable Class getPivotType(@NonNull String className) {
 		Map<EcoreExecutorPackage, List<EcoreExecutorPackage>> extensions2 = extensions;
 		if (extensions2 != null) {
 			for (@SuppressWarnings("null")@NonNull List<EcoreExecutorPackage> packages : extensions2.values()) {
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/ExecutorType.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/ExecutorType.java
index 4a5375d..ac44151 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/ExecutorType.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/ExecutorType.java
@@ -52,7 +52,7 @@
 	 */
 	private int[] indexes = null;
 	
-	protected final @NonNull org.eclipse.ocl.pivot.Package evaluationPackage;
+	protected final org.eclipse.ocl.pivot.@NonNull Package evaluationPackage;
 	private final @NonNull TemplateParameters typeParameters;
 	private /*@LazyNonNull*/ DomainProperties allProperties;
 	
@@ -148,7 +148,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getNormalizedType(@NonNull StandardLibrary standardLibrary) {
+	public org.eclipse.ocl.pivot.@NonNull Class getNormalizedType(@NonNull StandardLibrary standardLibrary) {
 		return this;
 	}
 
@@ -168,7 +168,7 @@
 	}
 	
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Package getOwningPackage() {
+	public org.eclipse.ocl.pivot.@NonNull Package getOwningPackage() {
 		return evaluationPackage;
 	}
 
@@ -178,7 +178,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getPivotClass() {
+	public org.eclipse.ocl.pivot.@NonNull Class getPivotClass() {
 		return this;
 	}
 
@@ -221,7 +221,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class isClass() {
+	public org.eclipse.ocl.pivot.@NonNull Class isClass() {
 		return this;
 	}
 
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/ExecutorTypeParameter.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/ExecutorTypeParameter.java
index ffe466e..7cdada9 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/ExecutorTypeParameter.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/ExecutorTypeParameter.java
@@ -53,7 +53,7 @@
 	}
 	
 	@Override
-	public @Nullable org.eclipse.ocl.pivot.Class isClass() {
+	public org.eclipse.ocl.pivot.@Nullable Class isClass() {
 		return null;
 	}
 
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/JavaType.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/JavaType.java
index 7f0c347..9766fc4 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/JavaType.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/JavaType.java
@@ -40,7 +40,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getCommonType(@NonNull IdResolver idResolver, @NonNull Type type) {
+	public org.eclipse.ocl.pivot.@NonNull Class getCommonType(@NonNull IdResolver idResolver, @NonNull Type type) {
 		if (this == type) {
 			return this;
 		}
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/LazyModelManager.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/LazyModelManager.java
index cd0a10d..3db22d5 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/LazyModelManager.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/LazyModelManager.java
@@ -75,7 +75,7 @@
 	 * @param type a class in the model
 	 */
 	@Override
-	public @NonNull Set<EObject> get(@NonNull org.eclipse.ocl.pivot.Class type) {
+	public @NonNull Set<EObject> get(org.eclipse.ocl.pivot.@NonNull Class type) {
 		// TODO: Optimize by parsing ahead of time to find all EClasses that we will query
 		Set<EObject> result = modelManager.get(type);		
 		if (result == null) {
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/ReflectiveInheritance.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/ReflectiveInheritance.java
index b6c1e01..35f3e4c 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/ReflectiveInheritance.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/ReflectiveInheritance.java
@@ -33,7 +33,7 @@
  */
 public abstract class ReflectiveInheritance extends AbstractExecutorClass
 {	
-	protected static int computeFlags(@NonNull org.eclipse.ocl.pivot.Class domainClass) {
+	protected static int computeFlags(org.eclipse.ocl.pivot.@NonNull Class domainClass) {
 		int flags = 0;
 		if (domainClass instanceof CollectionType) {
 			CollectionType collectionType = (CollectionType)domainClass;
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/ReflectivePackage.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/ReflectivePackage.java
index fa67bfe..c4c0370 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/ReflectivePackage.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/executor/ReflectivePackage.java
@@ -43,11 +43,11 @@
 		return class2inheritance2;
 	}
 
-	protected abstract @NonNull CompleteInheritance createInheritance(@NonNull org.eclipse.ocl.pivot.Class domainClass);
+	protected abstract @NonNull CompleteInheritance createInheritance(org.eclipse.ocl.pivot.@NonNull Class domainClass);
 
 	protected abstract @NonNull List<org.eclipse.ocl.pivot.Class> getDomainClasses();
 
-	public @NonNull CompleteInheritance getInheritance(@NonNull org.eclipse.ocl.pivot.Class domainClass) {
+	public @NonNull CompleteInheritance getInheritance(org.eclipse.ocl.pivot.@NonNull Class domainClass) {
 		Map<org.eclipse.ocl.pivot.Class, CompleteInheritance> class2inheritance2 = class2inheritance;
 		if (class2inheritance2 == null) {
 			class2inheritance2 = computeClasses();
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/lookup/SingleResultEnvironmentImpl.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/lookup/SingleResultEnvironmentImpl.java
index 67ba043..a860073 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/lookup/SingleResultEnvironmentImpl.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/lookup/SingleResultEnvironmentImpl.java
@@ -199,7 +199,7 @@
 	private static final class MergedPackageDisambiguator extends Disambiguator<org.eclipse.ocl.pivot.Package>
 	{
 		@Override
-		public int compare(@NonNull EnvironmentFactory environmentFactory, @NonNull org.eclipse.ocl.pivot.Package match1, @NonNull org.eclipse.ocl.pivot.Package match2) {
+		public int compare(@NonNull EnvironmentFactory environmentFactory, org.eclipse.ocl.pivot.@NonNull Package match1, org.eclipse.ocl.pivot.@NonNull Package match2) {
 			CompleteModel completeModel = environmentFactory.getCompleteModel();
 			CompletePackage completePackage1 = completeModel.getCompletePackage(match1);
 			CompletePackage completePackage2 = completeModel.getCompletePackage(match2);
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/LambdaTypeManager.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/LambdaTypeManager.java
index 737d9da..ec3ec1f 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/LambdaTypeManager.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/LambdaTypeManager.java
@@ -29,7 +29,7 @@
 public class LambdaTypeManager
 {
 	protected final @NonNull CompleteEnvironmentInternal completeEnvironment;
-	protected final @NonNull org.eclipse.ocl.pivot.Class oclLambdaType;
+	protected final org.eclipse.ocl.pivot.@NonNull Class oclLambdaType;
 	
 	/**
 	 * Map from from context type via first parameter type, which may be null, to list of lambda types sharing context and first parameter types. 
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/MetamodelManagerInternal.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/MetamodelManagerInternal.java
index 6c7d5a7..ec80df2 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/MetamodelManagerInternal.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/MetamodelManagerInternal.java
@@ -51,25 +51,25 @@
 
 	@Nullable ParserContext createParserContext(@NonNull Element element, Object... todoParameters);
 
-	@Nullable org.eclipse.ocl.pivot.Package getASmetamodel();
+	org.eclipse.ocl.pivot.@Nullable Package getASmetamodel();
 	
 	@NonNull Iterable<Constraint> getAllInvariants(@NonNull Type pivotType);
 
-	@NonNull org.eclipse.ocl.pivot.Class getCollectionType(@NonNull String collectionTypeName, @NonNull Type elementType, boolean isNullFree, @Nullable IntegerValue lower, @Nullable UnlimitedNaturalValue upper);
+	org.eclipse.ocl.pivot.@NonNull Class getCollectionType(@NonNull String collectionTypeName, @NonNull Type elementType, boolean isNullFree, @Nullable IntegerValue lower, @Nullable UnlimitedNaturalValue upper);
 
 	@NonNull CompleteClassInternal getCompleteClass(@NonNull Type pivotType);
 	
 	@Override
 	@NonNull CompleteModelInternal getCompleteModel();
 
-	@NonNull CompletePackage getCompletePackage(@NonNull org.eclipse.ocl.pivot.Package asPackage);
+	@NonNull CompletePackage getCompletePackage(org.eclipse.ocl.pivot.@NonNull Package asPackage);
 
 	@Override
 	@NonNull EnvironmentFactoryInternal getEnvironmentFactory();
 
 	@Nullable GenPackage getGenPackage(@NonNull String nsURI);
 
-	@Nullable org.eclipse.ocl.pivot.Class getPrimaryType(@NonNull String nsURI, @NonNull String path, String... extraPath);
+	org.eclipse.ocl.pivot.@Nullable Class getPrimaryType(@NonNull String nsURI, @NonNull String path, String... extraPath);
 
 	@Override
 	@NonNull StandardLibraryInternal getStandardLibrary();
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/Orphanage.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/Orphanage.java
index 200f1b3..09104c3 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/Orphanage.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/Orphanage.java
@@ -421,7 +421,7 @@
 	/**
 	 * Return true if asPackage is an orphanage for synthesized types.
 	 */
-	public static boolean isTypeOrphanage(@Nullable org.eclipse.ocl.pivot.Package asPackage) {
+	public static boolean isTypeOrphanage(org.eclipse.ocl.pivot.@Nullable Package asPackage) {
 		if (asPackage == null) {
 			return false;
 		}
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/PivotExecutorManager.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/PivotExecutorManager.java
index 879fb47..8e06b6e 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/PivotExecutorManager.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/PivotExecutorManager.java
@@ -96,17 +96,17 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getStaticTypeOf(@Nullable Object value) {
+	public org.eclipse.ocl.pivot.@NonNull Class getStaticTypeOf(@Nullable Object value) {
 		return idResolver.getStaticTypeOf(value);
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getStaticTypeOf(@Nullable Object value, @NonNull Object... values) {
+	public org.eclipse.ocl.pivot.@NonNull Class getStaticTypeOf(@Nullable Object value, @NonNull Object... values) {
 		return idResolver.getStaticTypeOf(value, values);
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getStaticTypeOf(@Nullable Object value, @NonNull Iterable<?> values) {
+	public org.eclipse.ocl.pivot.@NonNull Class getStaticTypeOf(@Nullable Object value, @NonNull Iterable<?> values) {
 		return idResolver.getStaticTypeOf(value, values);
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/PivotIdResolver.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/PivotIdResolver.java
index 109da8e..26bac05 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/PivotIdResolver.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/PivotIdResolver.java
@@ -52,7 +52,7 @@
 	}
 
 	@Override
-	protected @NonNull org.eclipse.ocl.pivot.Package addEPackage(@NonNull EPackage ePackage) {
+	protected org.eclipse.ocl.pivot.@NonNull Package addEPackage(@NonNull EPackage ePackage) {
 		String nsURI = ePackage.getNsURI();
 		org.eclipse.ocl.pivot.Package asPackage = nsURI2package.get(nsURI);
 		if (asPackage == null) {
@@ -73,7 +73,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getClass(@NonNull TypeId typeId, @Nullable Object context) {
+	public org.eclipse.ocl.pivot.@NonNull Class getClass(@NonNull TypeId typeId, @Nullable Object context) {
 		Element type = typeId.accept(this);
 		assert type != null;
 		return (org.eclipse.ocl.pivot.Class)type;
@@ -84,12 +84,12 @@
 		return metamodelManager.getInheritance(getType(eClassifier));
 	}
 
-	protected @Nullable org.eclipse.ocl.pivot.Package getPivotlessEPackage(@NonNull EPackage ePackage) {
+	protected org.eclipse.ocl.pivot.@Nullable Package getPivotlessEPackage(@NonNull EPackage ePackage) {
 		return null;
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getStaticTypeOf(@Nullable Object value) {
+	public org.eclipse.ocl.pivot.@NonNull Class getStaticTypeOf(@Nullable Object value) {
 		if (value instanceof ElementExtension) {
 			Stereotype asStereotype = ((ElementExtension)value).getStereotype();
 			return asStereotype != null ? asStereotype : metamodelManager.getStandardLibrary().getOclInvalidType();
@@ -104,7 +104,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getType(@NonNull EClassifier eClassifier) {
+	public org.eclipse.ocl.pivot.@NonNull Class getType(@NonNull EClassifier eClassifier) {
 		EObject eType = eClassifier;
 		EPackage ePackage = eClassifier.getEPackage();
 		if (ePackage == PivotPackage.eINSTANCE){
@@ -163,7 +163,7 @@
 	}
 
 	@Override
-	public synchronized @NonNull org.eclipse.ocl.pivot.Package visitNsURIPackageId(@NonNull NsURIPackageId id) {
+	public synchronized org.eclipse.ocl.pivot.@NonNull Package visitNsURIPackageId(@NonNull NsURIPackageId id) {
 		String nsURI = id.getNsURI();
 		org.eclipse.ocl.pivot.Package nsURIPackage = standardLibrary.getNsURIPackage(nsURI);
 		if (nsURIPackage != null) {
@@ -182,7 +182,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Package visitRootPackageId(@NonNull RootPackageId id) {
+	public org.eclipse.ocl.pivot.@NonNull Package visitRootPackageId(@NonNull RootPackageId id) {
 		String completeURIorName = id.getName();
 		org.eclipse.ocl.pivot.Package rootPackage = standardLibrary.getRootPackage(completeURIorName);
 		if (rootPackage == null) {
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/PivotMetamodelManager.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/PivotMetamodelManager.java
index 2951934..2885097 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/PivotMetamodelManager.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/PivotMetamodelManager.java
@@ -153,7 +153,7 @@
 		}
 
 		@Override
-		protected @NonNull Iterable<Operation> getInnerIterable(@NonNull org.eclipse.ocl.pivot.Class model) {
+		protected @NonNull Iterable<Operation> getInnerIterable(org.eclipse.ocl.pivot.@NonNull Class model) {
 			return ClassUtil.nonNullEMF(model.getOwnedOperations());
 		}
 
@@ -178,7 +178,7 @@
 		}
 
 		@Override
-		protected @NonNull Iterable<Property> getInnerIterable(@NonNull org.eclipse.ocl.pivot.Class model) {
+		protected @NonNull Iterable<Property> getInnerIterable(org.eclipse.ocl.pivot.@NonNull Class model) {
 			return ClassUtil.nonNullEMF(model.getOwnedProperties());
 		}
 
@@ -201,7 +201,7 @@
 		}
 
 		@Override
-		protected @NonNull Iterable<Constraint> getInnerIterable(@NonNull org.eclipse.ocl.pivot.Class model) {
+		protected @NonNull Iterable<Constraint> getInnerIterable(org.eclipse.ocl.pivot.@NonNull Class model) {
 			return ClassUtil.nonNullEMF(model.getOwnedInvariants());
 		}
 	}
@@ -683,7 +683,7 @@
 		return asUnlimitedNatural;
 	}
 
-	public @NonNull WildcardType createWildcardType(@Nullable org.eclipse.ocl.pivot.Class lowerBound, @Nullable org.eclipse.ocl.pivot.Class upperBound) {
+	public @NonNull WildcardType createWildcardType(org.eclipse.ocl.pivot.@Nullable Class lowerBound, org.eclipse.ocl.pivot.@Nullable Class upperBound) {
 		WildcardType wildcardType = PivotFactory.eINSTANCE.createWildcardType();
 		wildcardType.setName("?");			// Name is not significant
 		wildcardType.setLowerBound(lowerBound != null ? lowerBound : standardLibrary.getOclAnyType());
@@ -774,7 +774,7 @@
 	 * Return the pivot model class for className with the Pivot Model.
 	 */
 	@Override
-	public @Nullable org.eclipse.ocl.pivot.Class getASClass(@NonNull String className) {
+	public org.eclipse.ocl.pivot.@Nullable Class getASClass(@NonNull String className) {
 		if (asMetamodel == null) {
 			getASmetamodel();
 			if (asMetamodel == null) {
@@ -828,7 +828,7 @@
 	}
 
 	@Override
-	public @Nullable org.eclipse.ocl.pivot.Package getASmetamodel() {
+	public org.eclipse.ocl.pivot.@Nullable Package getASmetamodel() {
 		if ((asMetamodel == null) && autoLoadASmetamodel) {
 			org.eclipse.ocl.pivot.Package stdlibPackage = null;
 			standardLibrary.getOclAnyType();				// Load a default library if necessary.
@@ -862,7 +862,7 @@
 		Set<Constraint> knownInvariants = new HashSet<Constraint>();
 		for (CompleteClass superType : getAllSuperCompleteClasses(pivotType)) {
 			if (superType != null) {
-				for (@SuppressWarnings("null")@NonNull org.eclipse.ocl.pivot.Class partialSuperType : superType.getPartialClasses()) {
+				for (@SuppressWarnings("null")org.eclipse.ocl.pivot.@NonNull Class partialSuperType : superType.getPartialClasses()) {
 					org.eclipse.ocl.pivot.Package partialPackage = partialSuperType.getOwningPackage();
 					if (!(partialPackage instanceof PackageImpl) || !((PackageImpl)partialPackage).isIgnoreInvariants()) {
 						knownInvariants.addAll(partialSuperType.getOwnedInvariants());
@@ -921,7 +921,7 @@
 	}
 
 	@Deprecated
-	public @NonNull Iterable<org.eclipse.ocl.pivot.Class> getAllTypes(@NonNull org.eclipse.ocl.pivot.Class pivotType) {
+	public @NonNull Iterable<org.eclipse.ocl.pivot.Class> getAllTypes(org.eclipse.ocl.pivot.@NonNull Class pivotType) {
 //		if (pivotType == null) {
 //			return EMPTY_TYPE_LIST;
 //		}
@@ -992,12 +992,12 @@
 	 * @deprecated add isNullFree argument
 	 */
 	@Deprecated
-	public @NonNull org.eclipse.ocl.pivot.Class getCollectionType(@NonNull String collectionTypeName, @NonNull Type elementType, @Nullable IntegerValue lower, @Nullable UnlimitedNaturalValue upper) {
+	public org.eclipse.ocl.pivot.@NonNull Class getCollectionType(@NonNull String collectionTypeName, @NonNull Type elementType, @Nullable IntegerValue lower, @Nullable UnlimitedNaturalValue upper) {
 		return getCollectionType(collectionTypeName, elementType, false, lower, upper);
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getCollectionType(@NonNull String collectionTypeName, @NonNull Type elementType, boolean isNullFree, @Nullable IntegerValue lower, @Nullable UnlimitedNaturalValue upper) {
+	public org.eclipse.ocl.pivot.@NonNull Class getCollectionType(@NonNull String collectionTypeName, @NonNull Type elementType, boolean isNullFree, @Nullable IntegerValue lower, @Nullable UnlimitedNaturalValue upper) {
 		if (elementType.eIsProxy()) {
 			return standardLibrary.getOclInvalidType();
 		}
@@ -1057,7 +1057,7 @@
 	}
 	
 	@Override
-	public @NonNull CompletePackage getCompletePackage(@NonNull org.eclipse.ocl.pivot.Package asPackage) {
+	public @NonNull CompletePackage getCompletePackage(org.eclipse.ocl.pivot.@NonNull Package asPackage) {
 		if (!libraryLoadInProgress && asMetamodel == null) {
 			getASmetamodel();
 		}
@@ -1150,7 +1150,7 @@
 	 * class/package name hierarchy. THis is typically used to create a merge contribution
 	 * for thatClass in thisModel avoiding the need to modify thatClass.
 	 */
-	public org.eclipse.ocl.pivot.Class getEquivalentClass(@NonNull Model thisModel, @NonNull org.eclipse.ocl.pivot.Class thatClass) {
+	public org.eclipse.ocl.pivot.Class getEquivalentClass(@NonNull Model thisModel, org.eclipse.ocl.pivot.@NonNull Class thatClass) {
 		Model thatModel = PivotUtil.getContainingModel(thatClass);
 		if (thisModel == thatModel) {
 			return thatClass;
@@ -1339,7 +1339,7 @@
 		return precedenceManager.getInfixPrecedence(operatorName);
 	}
 
-	public @NonNull CompleteInheritance getInheritance(@NonNull org.eclipse.ocl.pivot.Class type) {
+	public @NonNull CompleteInheritance getInheritance(org.eclipse.ocl.pivot.@NonNull Class type) {
 		org.eclipse.ocl.pivot.Class type1 = getPrimaryClass(type);
 		org.eclipse.ocl.pivot.Class unspecializedType = (org.eclipse.ocl.pivot.Class) type1.getUnspecializedElement();
 		org.eclipse.ocl.pivot.Class theType = unspecializedType != null ? unspecializedType : type1;
@@ -1350,7 +1350,7 @@
 	public @NonNull List<Library> getLibraries() { return asLibraries; }
 	public @Nullable Resource getLibraryResource() { return asLibraryResource; }
 
-	public @Nullable org.eclipse.ocl.pivot.Class getLibraryType(@NonNull String string, @NonNull List<? extends Type> templateArguments) {
+	public org.eclipse.ocl.pivot.@Nullable Class getLibraryType(@NonNull String string, @NonNull List<? extends Type> templateArguments) {
 		org.eclipse.ocl.pivot.Class libraryType = standardLibrary.getRequiredLibraryType(string);
 		return getLibraryType(libraryType, templateArguments);
 	}
@@ -1394,7 +1394,7 @@
 		}
 	}
 
-	public @NonNull Iterable<Constraint> getLocalInvariants(@NonNull org.eclipse.ocl.pivot.Class type) {
+	public @NonNull Iterable<Constraint> getLocalInvariants(org.eclipse.ocl.pivot.@NonNull Class type) {
 		type = PivotUtil.getUnspecializedTemplateableElement(type);
 		return new CompleteElementInvariantsIterable(getAllTypes(type));
 	}
@@ -1403,28 +1403,28 @@
 		return lockingAnnotation;
 	}
 
-	public @NonNull org.eclipse.ocl.pivot.Class getMapType(@NonNull String mapTypeName, @NonNull Type keyType, @NonNull Type valueType) {
+	public org.eclipse.ocl.pivot.@NonNull Class getMapType(@NonNull String mapTypeName, @NonNull Type keyType, @NonNull Type valueType) {
 		if (keyType.eIsProxy() || valueType.eIsProxy()) {
 			return standardLibrary.getOclInvalidType();
 		}
 		return completeEnvironment.getMapType(standardLibrary.getRequiredLibraryType(mapTypeName), keyType, valueType);
 	}
 
-	public @NonNull Iterable<Operation> getMemberOperations(@NonNull org.eclipse.ocl.pivot.Class type, boolean selectStatic) {
+	public @NonNull Iterable<Operation> getMemberOperations(org.eclipse.ocl.pivot.@NonNull Class type, boolean selectStatic) {
 		type = PivotUtil.getUnspecializedTemplateableElement(type);
 		return new CompleteTypeOperationsIterable(getAllTypes(type), selectStatic);
 	}
 
-	public @NonNull Iterable<? extends CompletePackage> getMemberPackages(@NonNull org.eclipse.ocl.pivot.Package pkg) {
+	public @NonNull Iterable<? extends CompletePackage> getMemberPackages(org.eclipse.ocl.pivot.@NonNull Package pkg) {
 		return getCompletePackage(pkg).getOwnedCompletePackages();
 	}
 
-	public @NonNull Iterable<Property> getMemberProperties(@NonNull org.eclipse.ocl.pivot.Class type, boolean selectStatic) {
+	public @NonNull Iterable<Property> getMemberProperties(org.eclipse.ocl.pivot.@NonNull Class type, boolean selectStatic) {
 		type = PivotUtil.getUnspecializedTemplateableElement(type);
 		return new CompleteClassPropertiesIterable(getAllTypes(type), selectStatic);
 	}
 
-	public @NonNull org.eclipse.ocl.pivot.Class getMetaclass(@NonNull Type domainInstanceType) {
+	public org.eclipse.ocl.pivot.@NonNull Class getMetaclass(@NonNull Type domainInstanceType) {
 		org.eclipse.ocl.pivot.Class metaType = null;
 		if (domainInstanceType instanceof CollectionType) {
 			CollectionType collectionType = (CollectionType)domainInstanceType;
@@ -1471,7 +1471,7 @@
 		return singletonList;
 	}
 
-	public @NonNull Iterable<? extends org.eclipse.ocl.pivot.Package> getPartialPackages(@NonNull org.eclipse.ocl.pivot.Package pkg, boolean loadASmetamodelFirst) {
+	public @NonNull Iterable<? extends org.eclipse.ocl.pivot.Package> getPartialPackages(org.eclipse.ocl.pivot.@NonNull Package pkg, boolean loadASmetamodelFirst) {
 		if (!libraryLoadInProgress && loadASmetamodelFirst && (asMetamodel == null)) {
 			getASmetamodel();
 		}
@@ -1541,7 +1541,7 @@
 	/**
 	 * Lookup a primary package by its URI and optionally a sub-package path.
 	 */
-	public @Nullable org.eclipse.ocl.pivot.Package getPrimaryPackage(@NonNull String nsURI, String... subPackagePath) {
+	public org.eclipse.ocl.pivot.@Nullable Package getPrimaryPackage(@NonNull String nsURI, String... subPackagePath) {
 		CompletePackage completePackage = completeModel.getCompletePackageByURI(nsURI);
 		if (completePackage == null) {
 			return null;
@@ -1563,7 +1563,7 @@
 	/**
 	 * Lookup a primary sub-package.
 	 *
-	public @Nullable PackageServer getPrimaryPackage(@NonNull org.eclipse.ocl.pivot.Package parentPackage, @NonNull String subPackageName) {
+	public @Nullable PackageServer getPrimaryPackage(org.eclipse.ocl.pivot.@NonNull Package parentPackage, @NonNull String subPackageName) {
 		PackageTracker packageTracker = packageManager.findPackageTracker(parentPackage);
 		if (packageTracker != null) {
 			return packageTracker.getPackageServer().getMemberPackage(subPackageName);
@@ -1574,7 +1574,7 @@
 	} */
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Package getPrimaryPackage(@NonNull org.eclipse.ocl.pivot.Package aPackage) {
+	public org.eclipse.ocl.pivot.@NonNull Package getPrimaryPackage(org.eclipse.ocl.pivot.@NonNull Package aPackage) {
 		return ClassUtil.nonNullState(getCompletePackage(aPackage).getPrimaryPackage());
 	}
 
@@ -1611,7 +1611,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getPrimaryClass(@NonNull org.eclipse.ocl.pivot.Class type) {
+	public org.eclipse.ocl.pivot.@NonNull Class getPrimaryClass(org.eclipse.ocl.pivot.@NonNull Class type) {
 		if (/*(type instanceof Type) &&*/ !isTypeServeable(type)) {
 			return type;
 		}
@@ -1641,7 +1641,7 @@
 	}
 
 	@Override
-	public @Nullable org.eclipse.ocl.pivot.Class getPrimaryType(@NonNull String nsURI, @NonNull String path, String... extraPath) {
+	public org.eclipse.ocl.pivot.@Nullable Class getPrimaryType(@NonNull String nsURI, @NonNull String path, String... extraPath) {
 		CompletePackage completePackage = completeModel.getCompletePackageByURI(nsURI);
 		if (completePackage == null) {
 			return null;
@@ -1697,7 +1697,7 @@
 		return standardLibrary;
 	}
 	
-	public Iterable<CompleteClass> getSuperCompleteClasses(@NonNull org.eclipse.ocl.pivot.Class pivotType) {
+	public Iterable<CompleteClass> getSuperCompleteClasses(org.eclipse.ocl.pivot.@NonNull Class pivotType) {
 		if (!libraryLoadInProgress && (asMetamodel == null) && (pivotType == standardLibrary.getClassType()))  {
 			getASmetamodel();
 		}
@@ -1849,7 +1849,7 @@
 		return libraryLoadInProgress;	
 	}
 
-	public boolean isSuperClassOf(@NonNull org.eclipse.ocl.pivot.Class unspecializedFirstType, @NonNull org.eclipse.ocl.pivot.Class secondType) {
+	public boolean isSuperClassOf(org.eclipse.ocl.pivot.@NonNull Class unspecializedFirstType, org.eclipse.ocl.pivot.@NonNull Class secondType) {
 		CompleteClass firstCompleteClass = getCompleteClass(unspecializedFirstType);
 		CompleteClass secondCompleteClass = getCompleteClass(secondType);
 		return isSuperCompleteClassOf(firstCompleteClass, secondCompleteClass);
@@ -1911,7 +1911,7 @@
 	 * 
 	 * @param asLibrary
 	 */
-	protected void loadASmetamodel(@NonNull org.eclipse.ocl.pivot.Package asLibrary) {
+	protected void loadASmetamodel(org.eclipse.ocl.pivot.@NonNull Package asLibrary) {
 		for (org.eclipse.ocl.pivot.Package libPackage : getPartialPackages(asLibrary, false)) {
 			if (NameUtil.getNameable(libPackage.getOwnedClasses(), PivotPackage.Literals.ELEMENT.getName()) != null) {
 				setASmetamodel(libPackage);	// Custom meta-model
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/PrecedenceManager.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/PrecedenceManager.java
index 3f63314..7aabdf4 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/PrecedenceManager.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/PrecedenceManager.java
@@ -156,7 +156,7 @@
 		}
 	}
 
-	protected void compilePrecedenceType(@NonNull List<String> errors, @NonNull org.eclipse.ocl.pivot.Class pivotType) {
+	protected void compilePrecedenceType(@NonNull List<String> errors, org.eclipse.ocl.pivot.@NonNull Class pivotType) {
 		for (Operation operation : pivotType.getOwnedOperations()) {
 			if (operation != null) {
 				compilePrecedenceOperation(errors, operation);
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/TemplateParameterSubstitutionVisitor.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/TemplateParameterSubstitutionVisitor.java
index 3e21b13..6a8c19c 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/TemplateParameterSubstitutionVisitor.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/TemplateParameterSubstitutionVisitor.java
@@ -378,7 +378,7 @@
 	}
 
 	@Override
-	public @Nullable Object visitClass(@NonNull org.eclipse.ocl.pivot.Class object) {
+	public @Nullable Object visitClass(org.eclipse.ocl.pivot.@NonNull Class object) {
 		for (TemplateBinding templateBinding : object.getOwnedBindings()) {
 			for (TemplateParameterSubstitution templateParameterSubstitution : templateBinding.getOwnedSubstitutions()) {
 				safeVisit(templateParameterSubstitution.getActual());
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/TemplateSpecialisation.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/TemplateSpecialisation.java
index d227b9c..aa36bca 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/TemplateSpecialisation.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/TemplateSpecialisation.java
@@ -132,7 +132,7 @@
 		return null;
 	}
 
-	public @NonNull org.eclipse.ocl.pivot.Class getSpecialisation(@NonNull Type referredType) {
+	public org.eclipse.ocl.pivot.@NonNull Class getSpecialisation(@NonNull Type referredType) {
 		Type specialisation = getResolution(referredType);
 		return (org.eclipse.ocl.pivot.Class) (specialisation != null ? specialisation : referredType);	// FIXME cast
 	}
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/TupleTypeManager.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/TupleTypeManager.java
index 369c3c9..d4819f1 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/TupleTypeManager.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/manager/TupleTypeManager.java
@@ -113,7 +113,7 @@
 
 	protected final @NonNull CompleteEnvironmentInternal completeEnvironment;
 	protected final @NonNull PivotMetamodelManager metamodelManager;
-	protected final @NonNull org.eclipse.ocl.pivot.Class oclTupleType;
+	protected final org.eclipse.ocl.pivot.@NonNull Class oclTupleType;
 	
 	/**
 	 * Map from the tuple typeId to the tuple type. 
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/prettyprint/PrettyPrintVisitor.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/prettyprint/PrettyPrintVisitor.java
index bb0845c..612ed1c 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/prettyprint/PrettyPrintVisitor.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/prettyprint/PrettyPrintVisitor.java
@@ -89,7 +89,7 @@
 	}
 
 	@Override
-	public Object visitExpressionInOCL(@NonNull org.eclipse.ocl.pivot.ExpressionInOCL object) {
+	public Object visitExpressionInOCL(org.eclipse.ocl.pivot.@NonNull ExpressionInOCL object) {
 		if (object.getBody() != null) {
 			return super.visitExpressionInOCL(object);
 		}
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/resource/ASSaver.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/resource/ASSaver.java
index 4338aa6..06a10dd 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/resource/ASSaver.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/resource/ASSaver.java
@@ -90,7 +90,7 @@
 		}
 	}
 
-	public boolean addSpecializingElement(@NonNull Element object, @NonNull org.eclipse.ocl.pivot.Class referredType) {
+	public boolean addSpecializingElement(@NonNull Element object, org.eclipse.ocl.pivot.@NonNull Class referredType) {
 		if (PivotUtilInternal.isLibraryType(referredType)) {
 			return false;
 		}
@@ -126,7 +126,7 @@
 		}
 	}
 
-	protected @NonNull org.eclipse.ocl.pivot.Class getOrphanClass(@NonNull org.eclipse.ocl.pivot.Package orphanagePackage) {
+	protected org.eclipse.ocl.pivot.@NonNull Class getOrphanClass(org.eclipse.ocl.pivot.@NonNull Package orphanagePackage) {
 		org.eclipse.ocl.pivot.Class orphanageClass2 = orphanageClass;
 		if (orphanageClass2 == null) {
 			orphanageClass = orphanageClass2 = PivotFactory.eINSTANCE.createAnyType();		// No superclasses
@@ -136,7 +136,7 @@
 		return orphanageClass2;
 	}
 
-	protected @NonNull org.eclipse.ocl.pivot.Package getOrphanPackage(@NonNull Resource resource) {
+	protected org.eclipse.ocl.pivot.@NonNull Package getOrphanPackage(@NonNull Resource resource) {
 		Package orphanage2 = orphanage;
 		if (orphanage2 == null) {
 			orphanage = orphanage2 = PivotFactory.eINSTANCE.createPackage();
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/scoping/EnvironmentView.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/scoping/EnvironmentView.java
index edad1f6..2f87d60 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/scoping/EnvironmentView.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/scoping/EnvironmentView.java
@@ -157,7 +157,7 @@
 	private static final class MergedPackageDisambiguator extends Disambiguator<org.eclipse.ocl.pivot.Package>
 	{
 		@Override
-		public int compare(@NonNull EnvironmentFactoryInternal environmentFactory, @NonNull org.eclipse.ocl.pivot.Package match1, @NonNull org.eclipse.ocl.pivot.Package match2) {
+		public int compare(@NonNull EnvironmentFactoryInternal environmentFactory, org.eclipse.ocl.pivot.@NonNull Package match1, org.eclipse.ocl.pivot.@NonNull Package match2) {
 			CompleteModelInternal completeModel = environmentFactory.getCompleteModel();
 			CompletePackageInternal completePackage1 = completeModel.getCompletePackage(match1);
 			CompletePackageInternal completePackage2 = completeModel.getCompletePackage(match2);
@@ -261,7 +261,7 @@
 		return (name == null) || PivotUtil.conformsTo(requiredType, eClass) || ((requiredType != null) && PivotUtil.conformsTo(eClass, requiredType));
 	}
 
-	public void addAllElements(@NonNull org.eclipse.ocl.pivot.Class asClass, @NonNull ScopeView scopeView) {
+	public void addAllElements(org.eclipse.ocl.pivot.@NonNull Class asClass, @NonNull ScopeView scopeView) {
 		Attribution attribution = PivotUtilInternal.getAttribution(asClass);
 		attribution.computeLookup(asClass, this, scopeView);
 		org.eclipse.ocl.pivot.Class asUnspecializedClass = PivotUtil.getUnspecializedTemplateableElement(asClass);
@@ -299,7 +299,7 @@
 		}
 	}
 
-	public void addAllOperations(@NonNull org.eclipse.ocl.pivot.Class type, @Nullable FeatureFilter featureFilter) {
+	public void addAllOperations(org.eclipse.ocl.pivot.@NonNull Class type, @Nullable FeatureFilter featureFilter) {
 		if (accepts(PivotPackage.Literals.ITERATION)		// If ITERATION is acceptable then so too is OPERATION
 				&& (requiredType != PivotPackage.Literals.NAMESPACE)) {			// Don't really want operations when looking for NAMESPACE
 			assert environmentFactory.getMetamodelManager().isTypeServeable(type);
@@ -323,7 +323,7 @@
 		}
 	}
 
-	public void addAllPackages(@NonNull org.eclipse.ocl.pivot.Package pkge) {
+	public void addAllPackages(org.eclipse.ocl.pivot.@NonNull Package pkge) {
 		if (accepts(PivotPackage.Literals.PACKAGE)) {
 			CompletePackage parentCompletePackage = environmentFactory.getMetamodelManager().getCompletePackage(pkge);
 			String name2 = name;
@@ -403,7 +403,7 @@
 		}
 	}
 	
-	public void addAllProperties(@NonNull org.eclipse.ocl.pivot.Class type, @Nullable FeatureFilter featureFilter) {
+	public void addAllProperties(org.eclipse.ocl.pivot.@NonNull Class type, @Nullable FeatureFilter featureFilter) {
 		if (accepts(PivotPackage.Literals.PROPERTY)
 			&& (requiredType != PivotPackage.Literals.NAMESPACE)) {			// Don't really want properties when looking for NAMESPACE
 			assert environmentFactory.getMetamodelManager().isTypeServeable(type);
@@ -472,7 +472,7 @@
 		}
 	}
 
-	public void addAllTypes(@NonNull org.eclipse.ocl.pivot.Package pkge) {
+	public void addAllTypes(org.eclipse.ocl.pivot.@NonNull Package pkge) {
 		if (accepts(PivotPackage.Literals.CLASS)) {
 			CompletePackage completePackage = environmentFactory.getMetamodelManager().getCompletePackage(pkge);
 			String name2 = name;
@@ -667,7 +667,7 @@
 		}
 	}
 
-	public void addLibContents(@NonNull org.eclipse.ocl.pivot.Class libType, @NonNull ScopeView scopeView) {
+	public void addLibContents(org.eclipse.ocl.pivot.@NonNull Class libType, @NonNull ScopeView scopeView) {
 		addElementsOfScope(libType, scopeView);
 		for (org.eclipse.ocl.pivot.Class superClass : libType.getSuperClasses()) {
 			if (superClass != null) {
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/utilities/AbstractContents.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/utilities/AbstractContents.java
index 099b3e2..5349b26 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/utilities/AbstractContents.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/utilities/AbstractContents.java
@@ -128,23 +128,23 @@
 		return createCollectionType(PivotFactory.eINSTANCE.createSetType(), name, lower, upper, templateParameter);
 	}
 
-	protected @NonNull AnyType getAnyType(@NonNull org.eclipse.ocl.pivot.Package asPackage, @NonNull String name) {
+	protected @NonNull AnyType getAnyType(org.eclipse.ocl.pivot.@NonNull Package asPackage, @NonNull String name) {
 		return (AnyType) ClassUtil.nonNullState(asPackage.getOwnedClass(name));
 	}
 
-	protected @NonNull BagType getBagType(@NonNull org.eclipse.ocl.pivot.Package asPackage, @NonNull String name) {
+	protected @NonNull BagType getBagType(org.eclipse.ocl.pivot.@NonNull Package asPackage, @NonNull String name) {
 		return (BagType) ClassUtil.nonNullState(asPackage.getOwnedClass(name));
 	}
 
-	protected @NonNull org.eclipse.ocl.pivot.Class getClass(@NonNull org.eclipse.ocl.pivot.Package asPackage, @NonNull String name) {
+	protected org.eclipse.ocl.pivot.@NonNull Class getClass(org.eclipse.ocl.pivot.@NonNull Package asPackage, @NonNull String name) {
 		return ClassUtil.nonNullState(asPackage.getOwnedClass(name));
 	}
 
-	protected @NonNull CollectionType getCollectionType(@NonNull org.eclipse.ocl.pivot.Package asPackage, @NonNull String name) {
+	protected @NonNull CollectionType getCollectionType(org.eclipse.ocl.pivot.@NonNull Package asPackage, @NonNull String name) {
 		return (CollectionType) ClassUtil.nonNullState(asPackage.getOwnedClass(name));
 	}
 
-	protected @NonNull InvalidType getInvalidType(@NonNull org.eclipse.ocl.pivot.Package asPackage, @NonNull String name) {
+	protected @NonNull InvalidType getInvalidType(org.eclipse.ocl.pivot.@NonNull Package asPackage, @NonNull String name) {
 		return (InvalidType) ClassUtil.nonNullState(asPackage.getOwnedClass(name));
 	}
 
@@ -158,27 +158,27 @@
 		return ClassUtil.nonNullState((Model) resource.getContents().get(0));
 	}
 
-	protected @NonNull OrderedSetType getOrderedSetType(@NonNull org.eclipse.ocl.pivot.Package asPackage, @NonNull String name) {
+	protected @NonNull OrderedSetType getOrderedSetType(org.eclipse.ocl.pivot.@NonNull Package asPackage, @NonNull String name) {
 		return (OrderedSetType) ClassUtil.nonNullState(asPackage.getOwnedClass(name));
 	}
 
-	protected @NonNull org.eclipse.ocl.pivot.Package getPackage(@NonNull Model asModel, @NonNull String name) {
+	protected org.eclipse.ocl.pivot.@NonNull Package getPackage(@NonNull Model asModel, @NonNull String name) {
 		return ClassUtil.nonNullState(NameUtil.getNameable(asModel.getOwnedPackages(), name));
 	}
 
-	protected @NonNull PrimitiveType getPrimitiveType(@NonNull org.eclipse.ocl.pivot.Package asPackage, @NonNull String name) {
+	protected @NonNull PrimitiveType getPrimitiveType(org.eclipse.ocl.pivot.@NonNull Package asPackage, @NonNull String name) {
 		return (PrimitiveType) ClassUtil.nonNullState(asPackage.getOwnedClass(name));
 	}
 
-	protected @NonNull Property getProperty(@NonNull org.eclipse.ocl.pivot.Class asClass, @NonNull String name) {
+	protected @NonNull Property getProperty(org.eclipse.ocl.pivot.@NonNull Class asClass, @NonNull String name) {
 		return ClassUtil.nonNullState(NameUtil.getNameable(asClass.getOwnedProperties(), name));
 	}
 
-	protected @NonNull SequenceType getSequenceType(@NonNull org.eclipse.ocl.pivot.Package asPackage, @NonNull String name) {
+	protected @NonNull SequenceType getSequenceType(org.eclipse.ocl.pivot.@NonNull Package asPackage, @NonNull String name) {
 		return (SequenceType) ClassUtil.nonNullState(asPackage.getOwnedClass(name));
 	}
 
-	protected @NonNull SetType getSetType(@NonNull org.eclipse.ocl.pivot.Package asPackage, @NonNull String name) {
+	protected @NonNull SetType getSetType(org.eclipse.ocl.pivot.@NonNull Package asPackage, @NonNull String name) {
 		return (SetType) ClassUtil.nonNullState(asPackage.getOwnedClass(name));
 	}
 
@@ -186,7 +186,7 @@
 		return ClassUtil.nonNullState(templateableElement.getOwnedSignature().getOwnedParameters().get(index));
 	}
 
-	protected @NonNull VoidType getVoidType(@NonNull org.eclipse.ocl.pivot.Package asPackage, @NonNull String name) {
+	protected @NonNull VoidType getVoidType(org.eclipse.ocl.pivot.@NonNull Package asPackage, @NonNull String name) {
 		return (VoidType) ClassUtil.nonNullState(asPackage.getOwnedClass(name));
 	}
 
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/utilities/EcoreTechnology.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/utilities/EcoreTechnology.java
index 2235652..e9e7d1d 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/utilities/EcoreTechnology.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/utilities/EcoreTechnology.java
@@ -53,7 +53,7 @@
 	}
 
 	@Override
-	public @NonNull PackageId getMetapackageId(@NonNull EnvironmentFactoryInternal environmentFactory, @NonNull org.eclipse.ocl.pivot.Package asPackage) {
+	public @NonNull PackageId getMetapackageId(@NonNull EnvironmentFactoryInternal environmentFactory, org.eclipse.ocl.pivot.@NonNull Package asPackage) {
 		if (asPackage instanceof PivotObjectImpl) {
 			EObject eTarget = ((PivotObjectImpl)asPackage).getESObject();
 			if (eTarget != null) {
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/utilities/PivotUtilInternal.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/utilities/PivotUtilInternal.java
index 4282573..a78fd40 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/utilities/PivotUtilInternal.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/utilities/PivotUtilInternal.java
@@ -483,7 +483,7 @@
 	/**
 	 * Return true if the sole purpose of asPackage is to host implicit opposite properties.
 	 */
-	public static boolean isImplicitPackage(@NonNull org.eclipse.ocl.pivot.Package asPackage) {
+	public static boolean isImplicitPackage(org.eclipse.ocl.pivot.@NonNull Package asPackage) {
 		boolean hasImplicits = false;
 		if (!asPackage.getOwnedAnnotations().isEmpty()) {
 			return false;
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/utilities/Technology.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/utilities/Technology.java
index f3267de..aa4962b 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/utilities/Technology.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/utilities/Technology.java
@@ -46,7 +46,7 @@
 
 	RootPackageId getMetamodelId(@NonNull EnvironmentFactoryInternal environmentFactory, @NonNull EPackage eObject2);
 
-	@NonNull PackageId getMetapackageId(@NonNull EnvironmentFactoryInternal environmentFactory, @NonNull org.eclipse.ocl.pivot.Package asPackage);
+	@NonNull PackageId getMetapackageId(@NonNull EnvironmentFactoryInternal environmentFactory, org.eclipse.ocl.pivot.@NonNull Package asPackage);
 
 	@Nullable String getOriginalName(@NonNull ENamedElement eNamedElement);
 
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/validation/EcoreOCLEValidator.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/validation/EcoreOCLEValidator.java
index 663eb7d..f555aeb 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/validation/EcoreOCLEValidator.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/validation/EcoreOCLEValidator.java
@@ -233,7 +233,7 @@
 	public static final @NonNull TracingOption VALIDATE_INSTANCE = new TracingOption(PivotPlugin.PLUGIN_ID, "validate/instance");
 	public static final @NonNull TracingOption VALIDATE_OPAQUE_ELEMENT = new TracingOption(PivotPlugin.PLUGIN_ID, "validate/opaqueElement");
 
-	protected static void gatherTypes(@NonNull Set<org.eclipse.ocl.pivot.Class> allTypes, @NonNull Set<Constraint> allConstraints, @NonNull org.eclipse.ocl.pivot.Class newType) {
+	protected static void gatherTypes(@NonNull Set<org.eclipse.ocl.pivot.Class> allTypes, @NonNull Set<Constraint> allConstraints, org.eclipse.ocl.pivot.@NonNull Class newType) {
 		if (allTypes.add(newType)) {
 			allConstraints.addAll(newType.getOwnedInvariants());
 			for (org.eclipse.ocl.pivot.Class superType : newType.getSuperClasses()) {
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/types/AbstractInheritance.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/types/AbstractInheritance.java
index d2c984c..aaf0bf9 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/types/AbstractInheritance.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/types/AbstractInheritance.java
@@ -187,7 +187,7 @@
 	}
 
 	@Override
-	public @NonNull org.eclipse.ocl.pivot.Class getType() {
+	public org.eclipse.ocl.pivot.@NonNull Class getType() {
 		return getPivotClass();
 	}
 
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/AS2MonikerVisitor.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/AS2MonikerVisitor.java
index d677211..c53c09b 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/AS2MonikerVisitor.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/AS2MonikerVisitor.java
@@ -201,7 +201,7 @@
 	}
 
 	@Override
-	public Object visitClass(@NonNull org.eclipse.ocl.pivot.Class object) {
+	public Object visitClass(org.eclipse.ocl.pivot.@NonNull Class object) {
 		if (!object.getOwnedBindings().isEmpty()) {
 			Type templateableClass = PivotUtil.getUnspecializedTemplateableElement(object);
 			context.appendParent(templateableClass, MONIKER_SCOPE_SEPARATOR);
@@ -439,7 +439,7 @@
 	}
 
 	@Override
-	public Object visitPackage(@NonNull org.eclipse.ocl.pivot.Package object) {
+	public Object visitPackage(org.eclipse.ocl.pivot.@NonNull Package object) {
 //		if (!object.hasMoniker()) {
 //			throw new IllegalStateException("No moniker has been configured for " + object);
 //		}
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/AS2XMIidVisitor.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/AS2XMIidVisitor.java
index 6eab475..c514687 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/AS2XMIidVisitor.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/AS2XMIidVisitor.java
@@ -201,7 +201,7 @@
 	}
 
 	@Override
-	public Boolean visitClass(@NonNull org.eclipse.ocl.pivot.Class object) {
+	public Boolean visitClass(org.eclipse.ocl.pivot.@NonNull Class object) {
 		if (Orphanage.isTypeOrphanage(object.getOwningPackage())) {
 			return false;
 		}
@@ -289,7 +289,7 @@
 	}
 
 	@Override
-	public @Nullable Boolean visitPackage(@NonNull org.eclipse.ocl.pivot.Package object) {
+	public @Nullable Boolean visitPackage(org.eclipse.ocl.pivot.@NonNull Package object) {
 		String name = object.getName();
 		if (name != null) {
 			s.append(PACKAGE_PREFIX);
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/ASSaverLocateVisitor.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/ASSaverLocateVisitor.java
index 014e51d..3abd767 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/ASSaverLocateVisitor.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/ASSaverLocateVisitor.java
@@ -39,7 +39,7 @@
 	}
 
 	@Override
-	public Object visitClass(@NonNull org.eclipse.ocl.pivot.Class object) {
+	public Object visitClass(org.eclipse.ocl.pivot.@NonNull Class object) {
 		for (org.eclipse.ocl.pivot.Class superClass : object.getSuperClasses()) {
 			if (superClass.getOwnedBindings().size() > 0) {
 				context.addSpecializingElement(object);
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/ASSaverNormalizeVisitor.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/ASSaverNormalizeVisitor.java
index 896c54f..a1f7d4b 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/ASSaverNormalizeVisitor.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/ASSaverNormalizeVisitor.java
@@ -67,14 +67,14 @@
 	}
 
 	@Override
-	public Object visitClass(@NonNull org.eclipse.ocl.pivot.Class object) {
+	public Object visitClass(org.eclipse.ocl.pivot.@NonNull Class object) {
 		List<Property> ownedAttributes = object.getOwnedProperties();
 		ClassUtil.sort(ownedAttributes, PropertyComparator.INSTANCE);
 		return null;
 	}
 
 	@Override
-	public Object visitPackage(@NonNull org.eclipse.ocl.pivot.Package object) {
+	public Object visitPackage(org.eclipse.ocl.pivot.@NonNull Package object) {
 		if (!(object instanceof Orphanage)) {			// The Orphanage is not assignable/sortable
 			@NonNull List<org.eclipse.ocl.pivot.Class> ownedTypes = object.getOwnedClasses();
 			ClassUtil.sort(ownedTypes, TypeComparator.INSTANCE);
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/ASSaverResolveVisitor.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/ASSaverResolveVisitor.java
index d662e3d..68ea0d6 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/ASSaverResolveVisitor.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/ASSaverResolveVisitor.java
@@ -39,7 +39,7 @@
 	}
 
 	@Override
-	public Object visitClass(@NonNull org.eclipse.ocl.pivot.Class object) {
+	public Object visitClass(org.eclipse.ocl.pivot.@NonNull Class object) {
 		List<org.eclipse.ocl.pivot.Class> superClasses = object.getSuperClasses();
 		for (int i = 0; i < superClasses.size(); i++) {
 			org.eclipse.ocl.pivot.Class referredClass = superClasses.get(i);
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/AbstractEnvironmentFactory.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/AbstractEnvironmentFactory.java
index 3b1abdd..b5822fb 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/AbstractEnvironmentFactory.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/AbstractEnvironmentFactory.java
@@ -496,7 +496,7 @@
      * @return the user model's classifier for this context object, or the
      *     context itself if it is a classifier
      */
-	protected @NonNull org.eclipse.ocl.pivot.Class getClassifier(@NonNull Object context) {
+	protected org.eclipse.ocl.pivot.@NonNull Class getClassifier(@NonNull Object context) {
 		PivotMetamodelManager metamodelManager = getMetamodelManager();
 		org.eclipse.ocl.pivot.Class dClass = getIdResolver().getStaticTypeOf(context);
 		return metamodelManager.getPrimaryClass(dClass);
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/ClassUtil.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/ClassUtil.java
index adc8bfd..360079a 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/ClassUtil.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/ClassUtil.java
@@ -36,7 +36,7 @@
 	 * @return cast object or null
 	 */
 	@SuppressWarnings("unchecked")
-	public static <T extends Object> T asClassOrNull(Object object, Class<T> requiredClass) {
+	public static <T extends Object> @Nullable T asClassOrNull(Object object, Class<T> requiredClass) {
 		if (object == null)
 			return null;
 		if (requiredClass == null)
@@ -138,7 +138,7 @@
 	 * @return the non-null cast of anObject if safe
 	 */
 	@SuppressWarnings("unchecked")
-	public static <T> T isInstanceOf(Object anObject, Class<T> aClass) {
+	public static <T> @Nullable T isInstanceOf(Object anObject, Class<T> aClass) {
 		if (anObject == null)
 			return null;
 		Class<?> objectClass = anObject.getClass();
@@ -161,7 +161,7 @@
 	/**
 	 * Return aT, checking the assertion that this call would not be necessary if EMF had comprehensive @NonNull annotations.
 	 */
-	public static @NonNull <T> T nonNullEMF(@Nullable T aT) {// FIXME remove once EMF guarantees non-null
+	public static <T> @NonNull T nonNullEMF(@Nullable T aT) {// FIXME remove once EMF guarantees non-null
 		assert aT != null;
 		return aT;
 	}
@@ -172,7 +172,7 @@
 	 *<p>
 	 * Return aT, checking the assertion that this call would not be necessary if the Ecore model was guaranteed to be valid.
 	 */
-	public static @NonNull <T> T nonNullModel(@Nullable T aT) {
+	public static <T> @NonNull T nonNullModel(@Nullable T aT) {
 		assert aT != null;			// FIXME Change to InvalidModelException
 		return aT;
 	}
@@ -180,7 +180,7 @@
 	/**
 	 * Return aT, checking the assertion that this call would not be necessary if the Pivot model was guaranteed to be valid.
 	 */
-	public static @NonNull <T> T nonNullPivot(@Nullable T aT) {
+	public static <T> @NonNull T nonNullPivot(@Nullable T aT) {
 		assert aT != null;			// FIXME Change to InvalidModelException
 		return aT;
 	}
@@ -194,7 +194,7 @@
 	 * <p>
 	 * Return aT, throwing an IllegalStateException if null.
 	 */
-	public static @NonNull <T> T nonNullState(@Nullable T aT) {
+	public static <T> @NonNull T nonNullState(@Nullable T aT) {
 		if (aT == null) {
 			throw new IllegalStateException();
 		}
@@ -247,12 +247,12 @@
 		}
 	}
 
-	public static <T> T getAdapter(@NonNull Class<T> adapterClass, @NonNull Notifier notifier) {
+	public static <T> @Nullable T getAdapter(@NonNull Class<T> adapterClass, @NonNull Notifier notifier) {
 		List<Adapter> eAdapters = nonNullEMF(notifier.eAdapters());
 		return getAdapter(adapterClass, eAdapters);
 	}
 
-	public static <T> T getAdapter(@NonNull Class<T> adapterClass, @NonNull List<Adapter> eAdapters) {
+	public static <T> @Nullable T getAdapter(@NonNull Class<T> adapterClass, @NonNull List<Adapter> eAdapters) {
 		Adapter adapter = EcoreUtil.getAdapter(eAdapters, adapterClass);
 		if (adapter == null) {
 			return null;
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/MetamodelManager.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/MetamodelManager.java
index 1a9fe71..b0e73c9 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/MetamodelManager.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/MetamodelManager.java
@@ -25,7 +25,7 @@
 
 public interface MetamodelManager
 {
-	@Nullable org.eclipse.ocl.pivot.Class getASClass(@NonNull String className);
+	org.eclipse.ocl.pivot.@Nullable Class getASClass(@NonNull String className);
 
 	@Nullable <T extends Element> T getASOf(@NonNull Class<T> pivotClass, @Nullable EObject eObject) throws ParserException;
 
@@ -39,11 +39,11 @@
 
 	@NonNull EnvironmentFactory getEnvironmentFactory();
 
-	@NonNull org.eclipse.ocl.pivot.Class getPrimaryClass(@NonNull org.eclipse.ocl.pivot.Class pivotClass);
+	org.eclipse.ocl.pivot.@NonNull Class getPrimaryClass(org.eclipse.ocl.pivot.@NonNull Class pivotClass);
 	
 	@NonNull Operation getPrimaryOperation(@NonNull Operation pivotOperation);
 
-	@NonNull org.eclipse.ocl.pivot.Package getPrimaryPackage(@NonNull org.eclipse.ocl.pivot.Package eObject);
+	org.eclipse.ocl.pivot.@NonNull Package getPrimaryPackage(org.eclipse.ocl.pivot.@NonNull Package eObject);
 
 	@NonNull Property getPrimaryProperty(@NonNull Property pivotProperty);
 
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/OCL.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/OCL.java
index 060303a..f7e1f5f 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/OCL.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/OCL.java
@@ -435,7 +435,7 @@
 		return environmentFactory.getCompleteEnvironment();
 	}
 
-	public @NonNull org.eclipse.ocl.pivot.Class getContextType(@Nullable Object contextObject) {
+	public org.eclipse.ocl.pivot.@NonNull Class getContextType(@Nullable Object contextObject) {
 		MetamodelManagerInternal metamodelManager = environmentFactory.getMetamodelManager();
 		IdResolver idResolver = getIdResolver();
 		org.eclipse.ocl.pivot.Class staticTypeOf = idResolver.getStaticTypeOf(contextObject);
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/PivotUtil.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/PivotUtil.java
index e448f76..2499b7c 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/PivotUtil.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/PivotUtil.java
@@ -185,14 +185,14 @@
 		return createCollectionType(PivotFactory.eINSTANCE.createBagType(), unspecializedType, elementType);
 	}
 
-	public static @NonNull org.eclipse.ocl.pivot.Class createClass(/*@NonNull*/ EClass eClass) {
+	public static org.eclipse.ocl.pivot.@NonNull Class createClass(/*@NonNull*/ EClass eClass) {
 		org.eclipse.ocl.pivot.Class pivotType = PivotFactory.eINSTANCE.createClass();
 		pivotType.setName(eClass.getName());
 		((PivotObjectImpl)pivotType).setESObject(eClass);
 		return pivotType;
 	}
 
-	public static @NonNull org.eclipse.ocl.pivot.Class createClass(@NonNull String name) {
+	public static org.eclipse.ocl.pivot.@NonNull Class createClass(@NonNull String name) {
 		org.eclipse.ocl.pivot.Class pivotType = PivotFactory.eINSTANCE.createClass();
 		pivotType.setName(name);
 		return pivotType;
@@ -381,21 +381,21 @@
 		return createCollectionType(PivotFactory.eINSTANCE.createOrderedSetType(), unspecializedType, elementType);
 	}
 
-	public static @NonNull org.eclipse.ocl.pivot.Package createOwnedPackage(@NonNull Model parentRoot, @NonNull String name) {
+	public static org.eclipse.ocl.pivot.@NonNull Package createOwnedPackage(@NonNull Model parentRoot, @NonNull String name) {
 		@SuppressWarnings("null")
 		org.eclipse.ocl.pivot.Package aPackage = PivotUtil.createPackage(org.eclipse.ocl.pivot.Package.class, PivotPackage.Literals.PACKAGE, name, null, null);
 		parentRoot.getOwnedPackages().add(aPackage);
 		return aPackage;
 	}
 
-	public static @NonNull org.eclipse.ocl.pivot.Package createOwnedPackage(@NonNull org.eclipse.ocl.pivot.Package parentPackage, @NonNull String name) {
+	public static org.eclipse.ocl.pivot.@NonNull Package createOwnedPackage(org.eclipse.ocl.pivot.@NonNull Package parentPackage, @NonNull String name) {
 		@SuppressWarnings("null")
 		org.eclipse.ocl.pivot.Package aPackage = PivotUtil.createPackage(org.eclipse.ocl.pivot.Package.class, PivotPackage.Literals.PACKAGE, name, null, null);
 		parentPackage.getOwnedPackages().add(aPackage);
 		return aPackage;
 	}
 
-	public static @NonNull org.eclipse.ocl.pivot.Package createPackage(/*@NonNull*/ EPackage ePackage, @Nullable String nsPrefix, @NonNull String nsURI) {
+	public static org.eclipse.ocl.pivot.@NonNull Package createPackage(/*@NonNull*/ EPackage ePackage, @Nullable String nsPrefix, @NonNull String nsURI) {
 		Package pivotPackage = PivotFactory.eINSTANCE.createPackage();
 		pivotPackage.setName(ePackage.getName());
 		pivotPackage.setNsPrefix(nsPrefix);
@@ -404,7 +404,7 @@
 		return pivotPackage;
 	}
 
-	public static @NonNull org.eclipse.ocl.pivot.Package createPackage(@NonNull String name, @Nullable String nsPrefix, @NonNull String nsURI, @Nullable PackageId packageId) {
+	public static org.eclipse.ocl.pivot.@NonNull Package createPackage(@NonNull String name, @Nullable String nsPrefix, @NonNull String nsURI, @Nullable PackageId packageId) {
 		Package pivotPackage = PivotFactory.eINSTANCE.createPackage();
 		pivotPackage.setName(name);
 		pivotPackage.setNsPrefix(nsPrefix);
@@ -738,7 +738,7 @@
 		return null;
 	}
 
-	public static @Nullable org.eclipse.ocl.pivot.Package getContainingPackage(@Nullable EObject element) {
+	public static org.eclipse.ocl.pivot.@Nullable Package getContainingPackage(@Nullable EObject element) {
 		for (EObject eObject = element; eObject != null; eObject = eObject.eContainer()) {
 			if (eObject instanceof org.eclipse.ocl.pivot.Package) {
 				return (org.eclipse.ocl.pivot.Package)eObject;
@@ -830,7 +830,7 @@
 		}
 	}
 
-	public static @Nullable org.eclipse.ocl.pivot.Package getPackage(@NonNull EObject object) {
+	public static org.eclipse.ocl.pivot.@Nullable Package getPackage(@NonNull EObject object) {
 		for (EObject eObject = object; eObject != null; eObject = eObject.eContainer()) {
 			if (eObject instanceof org.eclipse.ocl.pivot.Package) {
 				return (org.eclipse.ocl.pivot.Package)eObject;
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/ToStringVisitor.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/ToStringVisitor.java
index 4a5208c..854ec2a 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/ToStringVisitor.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/ToStringVisitor.java
@@ -412,7 +412,7 @@
 	 * @return <code>null</code>
 	 */
 	@Override
-	public @Nullable String safeVisit(@Nullable org.eclipse.ocl.pivot.util.Visitable v) {
+	public @Nullable String safeVisit(org.eclipse.ocl.pivot.@Nullable util.Visitable v) {
 		if (v == null) {
 			append(NULL_PLACEHOLDER);
 		}
@@ -475,7 +475,7 @@
 	}
 
 	@Override
-	public String visitClass(@NonNull org.eclipse.ocl.pivot.Class cls) {
+	public String visitClass(org.eclipse.ocl.pivot.@NonNull Class cls) {
 		org.eclipse.ocl.pivot.Package pkg = cls.getOwningPackage();
 		if (pkg == null) {
 			append("null::");
@@ -1008,7 +1008,7 @@
 	}
 
 	@Override
-	public String visitPackage(@NonNull org.eclipse.ocl.pivot.Package pkg) {
+	public String visitPackage(org.eclipse.ocl.pivot.@NonNull Package pkg) {
 		appendQualifiedName(pkg.getOwningPackage(), "::", pkg);
 		return null;
 	}
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/ValueUtil.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/ValueUtil.java
index a1624f5..37deb5e 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/ValueUtil.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/ValueUtil.java
@@ -150,7 +150,7 @@
 		}
 	}
 
-	public static @NonNull org.eclipse.ocl.pivot.Class asClass(@Nullable Object value) {
+	public static org.eclipse.ocl.pivot.@NonNull Class asClass(@Nullable Object value) {
 		if (value instanceof org.eclipse.ocl.pivot.Class) {
 			return (org.eclipse.ocl.pivot.Class)value;
 		}
diff --git a/plugins/org.eclipse.ocl.xtext.base.ui/.classpath b/plugins/org.eclipse.ocl.xtext.base.ui/.classpath
index 6a42377..f0c5549 100644
--- a/plugins/org.eclipse.ocl.xtext.base.ui/.classpath
+++ b/plugins/org.eclipse.ocl.xtext.base.ui/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="src" path="src-gen"/>
diff --git a/plugins/org.eclipse.ocl.xtext.base.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.ocl.xtext.base.ui/META-INF/MANIFEST.MF
index c382c15..778de05 100644
--- a/plugins/org.eclipse.ocl.xtext.base.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.ocl.xtext.base.ui/META-INF/MANIFEST.MF
@@ -17,7 +17,7 @@
  org.eclipse.uml2.uml;bundle-version="[4.0.0,6.0.0)",
  org.eclipse.pde.core;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.xtext.builder;bundle-version="[2.3.0,3.0.0)"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Export-Package: org.eclipse.ocl.xtext.base.ui,
  org.eclipse.ocl.xtext.base.ui.autoedit,
  org.eclipse.ocl.xtext.base.ui.commands,
diff --git a/plugins/org.eclipse.ocl.xtext.base.ui/build.properties b/plugins/org.eclipse.ocl.xtext.base.ui/build.properties
index aeb1514..cba4ca2 100644
--- a/plugins/org.eclipse.ocl.xtext.base.ui/build.properties
+++ b/plugins/org.eclipse.ocl.xtext.base.ui/build.properties
@@ -14,8 +14,6 @@
 bin.includes = META-INF/,\
                .,\
                about.html,\
-               build.properties,\
                plugin.xml,\
                plugin.properties
 src.includes = about.html
-additional.bundles = org.eclipse.ocl.jdt.annotation7
diff --git a/plugins/org.eclipse.ocl.xtext.base/.classpath b/plugins/org.eclipse.ocl.xtext.base/.classpath
index 6898740..60541c0 100644
--- a/plugins/org.eclipse.ocl.xtext.base/.classpath
+++ b/plugins/org.eclipse.ocl.xtext.base/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="emf-gen"/>
 	<classpathentry kind="src" path="src-gen"/>
diff --git a/plugins/org.eclipse.ocl.xtext.base/META-INF/MANIFEST.MF b/plugins/org.eclipse.ocl.xtext.base/META-INF/MANIFEST.MF
index 4052f94..d05f4b0 100644
--- a/plugins/org.eclipse.ocl.xtext.base/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.ocl.xtext.base/META-INF/MANIFEST.MF
@@ -6,7 +6,7 @@
 Bundle-ClassPath: .
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Import-Package: org.apache.log4j;version="[1.2.15,2.0.0)"
 Export-Package: org.eclipse.ocl.xtext.base,
  org.eclipse.ocl.xtext.base.as2cs,
diff --git a/plugins/org.eclipse.ocl.xtext.base/build.properties b/plugins/org.eclipse.ocl.xtext.base/build.properties
index 1f9ca91..684d01f 100644
--- a/plugins/org.eclipse.ocl.xtext.base/build.properties
+++ b/plugins/org.eclipse.ocl.xtext.base/build.properties
@@ -15,7 +15,6 @@
                plugin.xml,\
                plugin.properties,\
                about.html,\
-               build.properties,\
                .options
 jars.compile.order = .
 source.. = emf-gen/,\
@@ -23,4 +22,3 @@
            src/
 output.. = bin/
 src.includes = about.html
-additional.bundles = org.eclipse.ocl.jdt.annotation7
diff --git a/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/as2cs/AS2CSConversion.java b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/as2cs/AS2CSConversion.java
index 6d60cef..cdeb044 100644
--- a/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/as2cs/AS2CSConversion.java
+++ b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/as2cs/AS2CSConversion.java
@@ -306,7 +306,7 @@
 		}
 	}
 
-	protected <T extends ClassCS> T refreshClassifier(@NonNull Class<T> csClass, /*@NonNull*/ EClass csEClass, @NonNull org.eclipse.ocl.pivot.Class object) {
+	protected <T extends ClassCS> T refreshClassifier(@NonNull Class<T> csClass, /*@NonNull*/ EClass csEClass, org.eclipse.ocl.pivot.@NonNull Class object) {
 		T csElement = refreshNamedElement(csClass, csEClass, object);
 		List<ConstraintCS> csInvariants = visitDeclarations(ConstraintCS.class, object.getOwnedInvariants(), null);
 		for (ConstraintCS csInvariant : csInvariants) {
diff --git a/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/as2cs/BaseDeclarationVisitor.java b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/as2cs/BaseDeclarationVisitor.java
index 3a93c09..c69c98f 100644
--- a/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/as2cs/BaseDeclarationVisitor.java
+++ b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/as2cs/BaseDeclarationVisitor.java
@@ -80,7 +80,7 @@
 	public void postProcess(@NonNull BaseCSResource csResource, @NonNull Map<Namespace, List<String>> importedNamespaces) {}
 
 	@Override
-	public ElementCS visitAnnotation(@NonNull org.eclipse.ocl.pivot.Annotation object) {
+	public ElementCS visitAnnotation(org.eclipse.ocl.pivot.@NonNull Annotation object) {
 		AnnotationCS csElement = context.refreshNamedElement(AnnotationCS.class, BaseCSPackage.Literals.ANNOTATION_CS, object, null);
 		context.refreshList(csElement.getOwnedContents(), context.visitDeclarations(ModelElementCS.class, object.getOwnedContents(), null));
 		context.refreshList(csElement.getOwnedDetails(), context.visitDeclarations(DetailCS.class, object.getOwnedDetails(), null));
@@ -105,7 +105,7 @@
 	}
 
 	@Override
-	public ElementCS visitClass(@NonNull org.eclipse.ocl.pivot.Class object) {
+	public ElementCS visitClass(org.eclipse.ocl.pivot.@NonNull Class object) {
 		org.eclipse.ocl.pivot.Class savedScope = context.setScope(object);
 		StructuredClassCS csElement = context.refreshClassifier(StructuredClassCS.class, BaseCSPackage.Literals.STRUCTURED_CLASS_CS, object);
 		context.refreshList(csElement.getOwnedProperties(), context.visitDeclarations(StructuralFeatureCS.class, object.getOwnedProperties(),
@@ -163,7 +163,7 @@
 	}
 
 	@Override
-	public ElementCS visitEnumeration(@NonNull org.eclipse.ocl.pivot.Enumeration object) {
+	public ElementCS visitEnumeration(org.eclipse.ocl.pivot.@NonNull Enumeration object) {
 		EnumerationCS csElement = context.refreshClassifier(EnumerationCS.class, BaseCSPackage.Literals.ENUMERATION_CS, object);
 		context.refreshList(csElement.getOwnedLiterals(), context.visitDeclarations(EnumerationLiteralCS.class, object.getOwnedLiterals(), null));
 		csElement.setIsSerializable(object.isIsSerializable());
@@ -224,7 +224,7 @@
 	}
 
 	@Override
-	public ElementCS visitPackage(@NonNull org.eclipse.ocl.pivot.Package object) {
+	public ElementCS visitPackage(org.eclipse.ocl.pivot.@NonNull Package object) {
 		PackageCS csPackage = context.refreshNamedElement(PackageCS.class, BaseCSPackage.Literals.PACKAGE_CS, object);
 		context.refreshList(csPackage.getOwnedClasses(), context.visitDeclarations(ClassCS.class, object.getOwnedClasses(), null));
 		csPackage.setNsPrefix(object.getNsPrefix());
diff --git a/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/as2cs/BaseReferenceVisitor.java b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/as2cs/BaseReferenceVisitor.java
index f178c3a..5ca5928 100644
--- a/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/as2cs/BaseReferenceVisitor.java
+++ b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/as2cs/BaseReferenceVisitor.java
@@ -45,7 +45,7 @@
 	}
 
 	@Override
-	public ElementCS visitClass(@NonNull org.eclipse.ocl.pivot.Class object) {
+	public ElementCS visitClass(org.eclipse.ocl.pivot.@NonNull Class object) {
 		org.eclipse.ocl.pivot.Class scopeClass = context.getScope();
 		org.eclipse.ocl.pivot.Package scopePackage = scopeClass != null ? PivotUtil.getPackage(scopeClass) : null;
 		TypedTypeRefCS csRef = BaseCSFactory.eINSTANCE.createTypedTypeRefCS();
diff --git a/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/cs2as/BaseCSContainmentVisitor.java b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/cs2as/BaseCSContainmentVisitor.java
index dc847ef..0d4bf2c 100644
--- a/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/cs2as/BaseCSContainmentVisitor.java
+++ b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/cs2as/BaseCSContainmentVisitor.java
@@ -111,7 +111,7 @@
 	}
 
 
-	protected Continuation<?> refreshClass(@NonNull org.eclipse.ocl.pivot.Class pivotElement, @NonNull StructuredClassCS csElement) {
+	protected Continuation<?> refreshClass(org.eclipse.ocl.pivot.@NonNull Class pivotElement, @NonNull StructuredClassCS csElement) {
 		pivotElement.setIsAbstract(csElement.isIsAbstract());
 		pivotElement.setIsInterface(csElement.isIsInterface());
 //		pivotElement.setIsStatic(qualifiers.contains("static"));
@@ -121,7 +121,7 @@
 		return null;
 	}
 
-	protected Type refreshClassifier(@NonNull org.eclipse.ocl.pivot.Class pivotElement, @NonNull ClassCS csElement) {
+	protected Type refreshClassifier(org.eclipse.ocl.pivot.@NonNull Class pivotElement, @NonNull ClassCS csElement) {
 		if (csElement.eIsSet(BaseCSPackage.Literals.CLASS_CS__INSTANCE_CLASS_NAME)) {
 			pivotElement.setInstanceClassName(csElement.getInstanceClassName());
 		}
diff --git a/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/cs2as/CS2ASConversion.java b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/cs2as/CS2ASConversion.java
index b2010ae..3c90372 100644
--- a/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/cs2as/CS2ASConversion.java
+++ b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/cs2as/CS2ASConversion.java
@@ -563,12 +563,12 @@
 		return (T) intermediateCache.get(key);
 	}
 
-	public @Nullable org.eclipse.ocl.pivot.Package getOldPackageByQualifiedName(@NonNull PackageCS csElement) {
+	public org.eclipse.ocl.pivot.@Nullable Package getOldPackageByQualifiedName(@NonNull PackageCS csElement) {
 		String qualifiedName = getQualifiedName(new StringBuilder(), csElement);
 		return oldPackagesByQualifiedName.get(qualifiedName);
 	}
 
-	public @Nullable org.eclipse.ocl.pivot.Package getOldPackageBySimpleName(@NonNull String name) {
+	public org.eclipse.ocl.pivot.@Nullable Package getOldPackageBySimpleName(@NonNull String name) {
 		return oldPackagesByName.get(name);
 	}
 
@@ -576,7 +576,7 @@
 		return operatorsHavePrecedence;
 	}
 
-	protected @NonNull String getQualifiedName(@NonNull StringBuilder s, @NonNull org.eclipse.ocl.pivot.Package pkg) {
+	protected @NonNull String getQualifiedName(@NonNull StringBuilder s, org.eclipse.ocl.pivot.@NonNull Package pkg) {
 		org.eclipse.ocl.pivot.Package nestingPackage = pkg.getOwningPackage();
 		if (nestingPackage != null) {
 			getQualifiedName(s, nestingPackage);
diff --git a/plugins/org.eclipse.ocl.xtext.completeocl.ui/.classpath b/plugins/org.eclipse.ocl.xtext.completeocl.ui/.classpath
index 6a42377..f0c5549 100644
--- a/plugins/org.eclipse.ocl.xtext.completeocl.ui/.classpath
+++ b/plugins/org.eclipse.ocl.xtext.completeocl.ui/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="src" path="src-gen"/>
diff --git a/plugins/org.eclipse.ocl.xtext.completeocl.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.ocl.xtext.completeocl.ui/META-INF/MANIFEST.MF
index e8c32dc..9a63899 100644
--- a/plugins/org.eclipse.ocl.xtext.completeocl.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.ocl.xtext.completeocl.ui/META-INF/MANIFEST.MF
@@ -10,7 +10,7 @@
  org.eclipse.ocl.xtext.oclinecore.ui;bundle-version="[1.0.0,2.0.0)";visibility:=reexport,
  org.eclipse.xtext.builder;bundle-version="[2.3.0,3.0.0)"
 Import-Package: org.apache.log4j;version="[1.2.15,2.0.0)"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Export-Package: org.eclipse.ocl.xtext.completeocl.ui,
  org.eclipse.ocl.xtext.completeocl.ui.commands,
  org.eclipse.ocl.xtext.completeocl.ui.contentassist,
diff --git a/plugins/org.eclipse.ocl.xtext.completeocl.ui/build.properties b/plugins/org.eclipse.ocl.xtext.completeocl.ui/build.properties
index aab8636..b75d7ae 100644
--- a/plugins/org.eclipse.ocl.xtext.completeocl.ui/build.properties
+++ b/plugins/org.eclipse.ocl.xtext.completeocl.ui/build.properties
@@ -13,9 +13,7 @@
                .,\
                plugin.xml,\
                about.html,\
-               build.properties,\
                plugin.properties,\
                icons/,\
                templates/
 src.includes = about.html
-additional.bundles = org.eclipse.ocl.jdt.annotation7
diff --git a/plugins/org.eclipse.ocl.xtext.completeocl/.classpath b/plugins/org.eclipse.ocl.xtext.completeocl/.classpath
index 6898740..60541c0 100644
--- a/plugins/org.eclipse.ocl.xtext.completeocl/.classpath
+++ b/plugins/org.eclipse.ocl.xtext.completeocl/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="emf-gen"/>
 	<classpathentry kind="src" path="src-gen"/>
diff --git a/plugins/org.eclipse.ocl.xtext.completeocl/META-INF/MANIFEST.MF b/plugins/org.eclipse.ocl.xtext.completeocl/META-INF/MANIFEST.MF
index c7da736..79905b9 100644
--- a/plugins/org.eclipse.ocl.xtext.completeocl/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.ocl.xtext.completeocl/META-INF/MANIFEST.MF
@@ -11,7 +11,7 @@
  org.eclipse.ocl.xtext.essentialocl;bundle-version="[1.0.0,2.0.0)";visibility:=reexport,
  org.eclipse.emf.validation;bundle-version="[1.0.0,2.0.0)";resolution:=optional,
  org.eclipse.ocl.pivot.uml;bundle-version="[1.0.0,2.0.0)"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Import-Package: org.apache.log4j;version="[1.2.15,2.0.0)"
 Export-Package: org.eclipse.ocl.xtext.completeocl,
  org.eclipse.ocl.xtext.completeocl.as2cs,
diff --git a/plugins/org.eclipse.ocl.xtext.completeocl/build.properties b/plugins/org.eclipse.ocl.xtext.completeocl/build.properties
index a9d88aa..22fc74d 100644
--- a/plugins/org.eclipse.ocl.xtext.completeocl/build.properties
+++ b/plugins/org.eclipse.ocl.xtext.completeocl/build.properties
@@ -15,8 +15,6 @@
                .,\
                plugin.xml,\
                about.html,\
-               build.properties,\
                plugin.properties,\
                model/
 src.includes = about.html
-additional.bundles = org.eclipse.ocl.jdt.annotation7
diff --git a/plugins/org.eclipse.ocl.xtext.completeocl/src/org/eclipse/ocl/xtext/completeocl/as2cs/CompleteOCLDeclarationVisitor.java b/plugins/org.eclipse.ocl.xtext.completeocl/src/org/eclipse/ocl/xtext/completeocl/as2cs/CompleteOCLDeclarationVisitor.java
index 6701155..474534e 100644
--- a/plugins/org.eclipse.ocl.xtext.completeocl/src/org/eclipse/ocl/xtext/completeocl/as2cs/CompleteOCLDeclarationVisitor.java
+++ b/plugins/org.eclipse.ocl.xtext.completeocl/src/org/eclipse/ocl/xtext/completeocl/as2cs/CompleteOCLDeclarationVisitor.java
@@ -95,7 +95,7 @@
 		}
 	}
 
-	protected void importPackage(@NonNull org.eclipse.ocl.pivot.Package aPackage) {
+	protected void importPackage(org.eclipse.ocl.pivot.@NonNull Package aPackage) {
 		context.importNamespace(aPackage, null);
 		org.eclipse.ocl.pivot.Package nestingPackage = null;
 		while ((nestingPackage = aPackage.getOwningPackage()) != null) {
@@ -123,7 +123,7 @@
 	}
 
 	@Override
-	public ElementCS visitClass(@NonNull org.eclipse.ocl.pivot.Class object) {
+	public ElementCS visitClass(org.eclipse.ocl.pivot.@NonNull Class object) {
 		List<Constraint> ownedInvariant = object.getOwnedInvariants();
 		if (ownedInvariant.size() <= 0) {
 			return null;
@@ -187,7 +187,7 @@
 	}
 
 	@Override
-	public ElementCS visitEnumeration(@NonNull org.eclipse.ocl.pivot.Enumeration object) {
+	public ElementCS visitEnumeration(org.eclipse.ocl.pivot.@NonNull Enumeration object) {
 		return visitType(object);
 	}
 
@@ -224,7 +224,7 @@
 	}
 
 	@Override
-	public ElementCS visitPackage(@NonNull org.eclipse.ocl.pivot.Package object) {
+	public ElementCS visitPackage(org.eclipse.ocl.pivot.@NonNull Package object) {
 		ElementCS csElement = null;
 		assert object.eContainer() != null;
 		List<ContextDeclCS> contexts = new ArrayList<ContextDeclCS>();
diff --git a/plugins/org.eclipse.ocl.xtext.completeocl/src/org/eclipse/ocl/xtext/completeocl/cs2as/CompleteOCLCSContainmentVisitor.java b/plugins/org.eclipse.ocl.xtext.completeocl/src/org/eclipse/ocl/xtext/completeocl/cs2as/CompleteOCLCSContainmentVisitor.java
index 6dd592a..5e9a84e 100644
--- a/plugins/org.eclipse.ocl.xtext.completeocl/src/org/eclipse/ocl/xtext/completeocl/cs2as/CompleteOCLCSContainmentVisitor.java
+++ b/plugins/org.eclipse.ocl.xtext.completeocl/src/org/eclipse/ocl/xtext/completeocl/cs2as/CompleteOCLCSContainmentVisitor.java
@@ -103,7 +103,7 @@
 		ownedOperations = operationContextDecls->collect(o | contextOperation(o))->union(defOperations.ast())->sortedBy(name),
 		ownedProperties = propertyContextDecls->collect(p | contextProperty(p))->union(defProperties.ast())->sortedBy(name)
 	} */
-	private @NonNull org.eclipse.ocl.pivot.Class contextClass(@NonNull org.eclipse.ocl.pivot.Class modelClass,
+	private org.eclipse.ocl.pivot.@NonNull Class contextClass(org.eclipse.ocl.pivot.@NonNull Class modelClass,
 			@NonNull List<ContextDeclCS> contextDecls) {
 		List<ConstraintCS> allInvariants = new ArrayList<ConstraintCS>();
 		List<ClassifierContextDeclCS> classifierContextDecls = new ArrayList<ClassifierContextDeclCS>();
@@ -216,7 +216,7 @@
 --		ownedInvariants = packageInvariants.ast(),
 		ownedClasses = modelClasses->sortedBy(name)->collect(c | contextClass(c, allContextDecls->select(cd | cd.referredClass() = c)))
 	} */
-	private @NonNull org.eclipse.ocl.pivot.Package contextPackage(@NonNull org.eclipse.ocl.pivot.Package modelPackage,
+	private org.eclipse.ocl.pivot.@NonNull Package contextPackage(org.eclipse.ocl.pivot.@NonNull Package modelPackage,
 			@NonNull List<PackageDeclarationCS> packageDecls, @NonNull List<ContextDeclCS> contextDecls) {
 		List<ConstraintCS> packageInvariants = new ArrayList<ConstraintCS>();
 		List<ContextDeclCS> allContextDecls = new ArrayList<ContextDeclCS>(contextDecls);
@@ -285,7 +285,7 @@
 		return contextProperty;
 	}
 
-	private @Nullable org.eclipse.ocl.pivot.Class getReferredClass(ContextDeclCS csContext) {
+	private org.eclipse.ocl.pivot.@Nullable Class getReferredClass(ContextDeclCS csContext) {
 		if (csContext instanceof ClassifierContextDeclCS) {
 			return ((ClassifierContextDeclCS)csContext).getReferredClass();
 		}
@@ -300,7 +300,7 @@
 		return null;
 	}
 
-	private @Nullable org.eclipse.ocl.pivot.Package getReferredPackage(@NonNull ContextDeclCS csContext) {
+	private org.eclipse.ocl.pivot.@Nullable Package getReferredPackage(@NonNull ContextDeclCS csContext) {
 		org.eclipse.ocl.pivot.Class modelClass = getReferredClass(csContext);
 		return modelClass != null ? modelClass.getOwningPackage() : null;
 	}
diff --git a/plugins/org.eclipse.ocl.xtext.essentialocl.ui/.classpath b/plugins/org.eclipse.ocl.xtext.essentialocl.ui/.classpath
index 6a42377..f0c5549 100644
--- a/plugins/org.eclipse.ocl.xtext.essentialocl.ui/.classpath
+++ b/plugins/org.eclipse.ocl.xtext.essentialocl.ui/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="src" path="src-gen"/>
diff --git a/plugins/org.eclipse.ocl.xtext.essentialocl.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.ocl.xtext.essentialocl.ui/META-INF/MANIFEST.MF
index 594a606..23b0ff5 100644
--- a/plugins/org.eclipse.ocl.xtext.essentialocl.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.ocl.xtext.essentialocl.ui/META-INF/MANIFEST.MF
@@ -12,7 +12,7 @@
  org.eclipse.ui.ide;bundle-version="[3.5.0,4.0.0)";visibility:=reexport,
  org.eclipse.xtext.builder;bundle-version="[2.3.0,3.0.0)"
 Import-Package: org.apache.log4j;version="[1.2.15,2.0.0)"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-Activator: org.eclipse.ocl.xtext.essentialocl.ui.internal.EssentialOCLActivator
 Export-Package: org.eclipse.ocl.xtext.essentialocl.ui,
  org.eclipse.ocl.xtext.essentialocl.ui.contentassist,
diff --git a/plugins/org.eclipse.ocl.xtext.essentialocl.ui/build.properties b/plugins/org.eclipse.ocl.xtext.essentialocl.ui/build.properties
index ab71677..20f46d0 100644
--- a/plugins/org.eclipse.ocl.xtext.essentialocl.ui/build.properties
+++ b/plugins/org.eclipse.ocl.xtext.essentialocl.ui/build.properties
@@ -14,8 +14,6 @@
                plugin.xml,\
                plugin.properties,\
                about.html,\
-               build.properties,\
                icons/,\
                templates/
 src.includes = about.html
-additional.bundles = org.eclipse.ocl.jdt.annotation7
diff --git a/plugins/org.eclipse.ocl.xtext.essentialocl/.classpath b/plugins/org.eclipse.ocl.xtext.essentialocl/.classpath
index 6898740..60541c0 100644
--- a/plugins/org.eclipse.ocl.xtext.essentialocl/.classpath
+++ b/plugins/org.eclipse.ocl.xtext.essentialocl/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="emf-gen"/>
 	<classpathentry kind="src" path="src-gen"/>
diff --git a/plugins/org.eclipse.ocl.xtext.essentialocl/META-INF/MANIFEST.MF b/plugins/org.eclipse.ocl.xtext.essentialocl/META-INF/MANIFEST.MF
index aa40192..de2cb37 100644
--- a/plugins/org.eclipse.ocl.xtext.essentialocl/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.ocl.xtext.essentialocl/META-INF/MANIFEST.MF
@@ -6,7 +6,7 @@
 Bundle-ClassPath: .
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Import-Package: org.apache.log4j;version="[1.2.15,2.0.0)"
 Export-Package: org.eclipse.ocl.xtext.essentialocl,
  org.eclipse.ocl.xtext.essentialocl.as2cs,
diff --git a/plugins/org.eclipse.ocl.xtext.essentialocl/build.properties b/plugins/org.eclipse.ocl.xtext.essentialocl/build.properties
index f50152d..f9e4df9 100644
--- a/plugins/org.eclipse.ocl.xtext.essentialocl/build.properties
+++ b/plugins/org.eclipse.ocl.xtext.essentialocl/build.properties
@@ -22,4 +22,3 @@
            emf-gen/
 output.. = bin/
 src.includes = about.html
-additional.bundles = org.eclipse.ocl.jdt.annotation7
diff --git a/plugins/org.eclipse.ocl.xtext.essentialocl/src/org/eclipse/ocl/xtext/essentialocl/as2cs/EssentialOCLReferenceVisitor.java b/plugins/org.eclipse.ocl.xtext.essentialocl/src/org/eclipse/ocl/xtext/essentialocl/as2cs/EssentialOCLReferenceVisitor.java
index b7892ae..c3333f2 100644
--- a/plugins/org.eclipse.ocl.xtext.essentialocl/src/org/eclipse/ocl/xtext/essentialocl/as2cs/EssentialOCLReferenceVisitor.java
+++ b/plugins/org.eclipse.ocl.xtext.essentialocl/src/org/eclipse/ocl/xtext/essentialocl/as2cs/EssentialOCLReferenceVisitor.java
@@ -55,7 +55,7 @@
 	}
 
 	@Override
-	public ElementCS visitClass(@NonNull org.eclipse.ocl.pivot.Class object) {
+	public ElementCS visitClass(org.eclipse.ocl.pivot.@NonNull Class object) {
 		return visitType(object);
 	}
 
diff --git a/plugins/org.eclipse.ocl.xtext.markup.ui/.classpath b/plugins/org.eclipse.ocl.xtext.markup.ui/.classpath
index 6a42377..f0c5549 100644
--- a/plugins/org.eclipse.ocl.xtext.markup.ui/.classpath
+++ b/plugins/org.eclipse.ocl.xtext.markup.ui/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="src" path="src-gen"/>
diff --git a/plugins/org.eclipse.ocl.xtext.markup.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.ocl.xtext.markup.ui/META-INF/MANIFEST.MF
index 2338c5a..87989de 100644
--- a/plugins/org.eclipse.ocl.xtext.markup.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.ocl.xtext.markup.ui/META-INF/MANIFEST.MF
@@ -9,7 +9,7 @@
  org.eclipse.ocl.xtext.markup;bundle-version="[1.0.0,2.0.0)";visibility:=reexport,
  org.eclipse.ocl.xtext.base.ui;bundle-version="[1.0.0,2.0.0)";visibility:=reexport
 Import-Package: org.apache.log4j;version="[1.2.15,2.0.0)"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Export-Package: org.eclipse.ocl.xtext.markup.ui,
  org.eclipse.ocl.xtext.markup.ui.contentassist,
  org.eclipse.ocl.xtext.markup.ui.contentassist.antlr,
diff --git a/plugins/org.eclipse.ocl.xtext.markup.ui/build.properties b/plugins/org.eclipse.ocl.xtext.markup.ui/build.properties
index 5a67cb6..07b9538 100644
--- a/plugins/org.eclipse.ocl.xtext.markup.ui/build.properties
+++ b/plugins/org.eclipse.ocl.xtext.markup.ui/build.properties
@@ -14,8 +14,6 @@
 bin.includes = META-INF/,\
                .,\
                about.html,\
-               build.properties,\
                plugin.xml,\
                plugin.properties
 src.includes = about.html
-additional.bundles = org.eclipse.ocl.jdt.annotation7
diff --git a/plugins/org.eclipse.ocl.xtext.markup/.classpath b/plugins/org.eclipse.ocl.xtext.markup/.classpath
index 6898740..60541c0 100644
--- a/plugins/org.eclipse.ocl.xtext.markup/.classpath
+++ b/plugins/org.eclipse.ocl.xtext.markup/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="emf-gen"/>
 	<classpathentry kind="src" path="src-gen"/>
diff --git a/plugins/org.eclipse.ocl.xtext.markup/META-INF/MANIFEST.MF b/plugins/org.eclipse.ocl.xtext.markup/META-INF/MANIFEST.MF
index aa26f88..a4b70f1 100644
--- a/plugins/org.eclipse.ocl.xtext.markup/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.ocl.xtext.markup/META-INF/MANIFEST.MF
@@ -6,7 +6,7 @@
 Bundle-ClassPath: .
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Import-Package: org.apache.log4j;version="[1.2.15,2.0.0)"
 Export-Package: org.eclipse.ocl.xtext.markup,
  org.eclipse.ocl.xtext.markup.formatting,
diff --git a/plugins/org.eclipse.ocl.xtext.markup/build.properties b/plugins/org.eclipse.ocl.xtext.markup/build.properties
index 497cbaf..3415fae 100644
--- a/plugins/org.eclipse.ocl.xtext.markup/build.properties
+++ b/plugins/org.eclipse.ocl.xtext.markup/build.properties
@@ -22,4 +22,3 @@
            src/
 output.. = bin/
 src.includes = about.html
-additional.bundles = org.eclipse.ocl.jdt.annotation7
diff --git a/plugins/org.eclipse.ocl.xtext.oclinecore.ui/.classpath b/plugins/org.eclipse.ocl.xtext.oclinecore.ui/.classpath
index 6a42377..f0c5549 100644
--- a/plugins/org.eclipse.ocl.xtext.oclinecore.ui/.classpath
+++ b/plugins/org.eclipse.ocl.xtext.oclinecore.ui/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="src" path="src-gen"/>
diff --git a/plugins/org.eclipse.ocl.xtext.oclinecore.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.ocl.xtext.oclinecore.ui/META-INF/MANIFEST.MF
index 5829ab4..dedd507 100644
--- a/plugins/org.eclipse.ocl.xtext.oclinecore.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.ocl.xtext.oclinecore.ui/META-INF/MANIFEST.MF
@@ -16,7 +16,7 @@
  org.eclipse.xtext.builder;bundle-version="[2.3.0,3.0.0)",
  org.eclipse.ocl.pivot.uml;bundle-version="[1.0.0,2.0.0)"
 Import-Package: org.apache.log4j;version="[1.2.15,2.0.0)"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Export-Package: org.eclipse.ocl.xtext.oclinecore.ui,
  org.eclipse.ocl.xtext.oclinecore.ui.commands,
  org.eclipse.ocl.xtext.oclinecore.ui.contentassist,
diff --git a/plugins/org.eclipse.ocl.xtext.oclinecore.ui/build.properties b/plugins/org.eclipse.ocl.xtext.oclinecore.ui/build.properties
index aab8636..b75d7ae 100644
--- a/plugins/org.eclipse.ocl.xtext.oclinecore.ui/build.properties
+++ b/plugins/org.eclipse.ocl.xtext.oclinecore.ui/build.properties
@@ -13,9 +13,7 @@
                .,\
                plugin.xml,\
                about.html,\
-               build.properties,\
                plugin.properties,\
                icons/,\
                templates/
 src.includes = about.html
-additional.bundles = org.eclipse.ocl.jdt.annotation7
diff --git a/plugins/org.eclipse.ocl.xtext.oclinecore/.classpath b/plugins/org.eclipse.ocl.xtext.oclinecore/.classpath
index 6898740..60541c0 100644
--- a/plugins/org.eclipse.ocl.xtext.oclinecore/.classpath
+++ b/plugins/org.eclipse.ocl.xtext.oclinecore/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="emf-gen"/>
 	<classpathentry kind="src" path="src-gen"/>
diff --git a/plugins/org.eclipse.ocl.xtext.oclinecore/META-INF/MANIFEST.MF b/plugins/org.eclipse.ocl.xtext.oclinecore/META-INF/MANIFEST.MF
index 6f708be..7520932 100644
--- a/plugins/org.eclipse.ocl.xtext.oclinecore/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.ocl.xtext.oclinecore/META-INF/MANIFEST.MF
@@ -24,4 +24,4 @@
  org.eclipse.ocl.xtext.oclinecorecs.impl,
  org.eclipse.ocl.xtext.oclinecorecs.util
 Bundle-Activator: org.eclipse.ocl.xtext.oclinecore.utilities.OCLinEcorePlugin$Implementation
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/plugins/org.eclipse.ocl.xtext.oclinecore/build.properties b/plugins/org.eclipse.ocl.xtext.oclinecore/build.properties
index 6461d6d..674c5a1 100644
--- a/plugins/org.eclipse.ocl.xtext.oclinecore/build.properties
+++ b/plugins/org.eclipse.ocl.xtext.oclinecore/build.properties
@@ -16,7 +16,5 @@
                plugin.xml,\
                plugin.properties,\
                about.html,\
-               build.properties,\
                model/
 src.includes = about.html
-additional.bundles = org.eclipse.ocl.jdt.annotation7
diff --git a/plugins/org.eclipse.ocl.xtext.oclinecore/src/org/eclipse/ocl/xtext/oclinecore/as2cs/OCLinEcoreDeclarationVisitor.java b/plugins/org.eclipse.ocl.xtext.oclinecore/src/org/eclipse/ocl/xtext/oclinecore/as2cs/OCLinEcoreDeclarationVisitor.java
index 74d4923..b0a0e72 100644
--- a/plugins/org.eclipse.ocl.xtext.oclinecore/src/org/eclipse/ocl/xtext/oclinecore/as2cs/OCLinEcoreDeclarationVisitor.java
+++ b/plugins/org.eclipse.ocl.xtext.oclinecore/src/org/eclipse/ocl/xtext/oclinecore/as2cs/OCLinEcoreDeclarationVisitor.java
@@ -41,7 +41,7 @@
 			new Predicate<org.eclipse.ocl.pivot.Package>()
 	{
 		@Override
-		public boolean filter(@NonNull org.eclipse.ocl.pivot.Package asPackage) {
+		public boolean filter(org.eclipse.ocl.pivot.@NonNull Package asPackage) {
 			return !PivotUtilInternal.isImplicitPackage(asPackage);
 		}
 	};
diff --git a/plugins/org.eclipse.ocl.xtext.oclstdlib.ui/.classpath b/plugins/org.eclipse.ocl.xtext.oclstdlib.ui/.classpath
index 6a42377..f0c5549 100644
--- a/plugins/org.eclipse.ocl.xtext.oclstdlib.ui/.classpath
+++ b/plugins/org.eclipse.ocl.xtext.oclstdlib.ui/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="src" path="src-gen"/>
diff --git a/plugins/org.eclipse.ocl.xtext.oclstdlib.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.ocl.xtext.oclstdlib.ui/META-INF/MANIFEST.MF
index abb4795..fa39602 100644
--- a/plugins/org.eclipse.ocl.xtext.oclstdlib.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.ocl.xtext.oclstdlib.ui/META-INF/MANIFEST.MF
@@ -11,7 +11,7 @@
  org.eclipse.jdt.core;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.xtext.builder;bundle-version="[2.3.0,3.0.0)"
 Import-Package: org.apache.log4j;version="[1.2.15,2.0.0)"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Export-Package: org.eclipse.ocl.xtext.oclstdlib.ui,
  org.eclipse.ocl.xtext.oclstdlib.ui.contentassist,
  org.eclipse.ocl.xtext.oclstdlib.ui.contentassist.antlr,
diff --git a/plugins/org.eclipse.ocl.xtext.oclstdlib.ui/build.properties b/plugins/org.eclipse.ocl.xtext.oclstdlib.ui/build.properties
index f5ef202..3974765 100644
--- a/plugins/org.eclipse.ocl.xtext.oclstdlib.ui/build.properties
+++ b/plugins/org.eclipse.ocl.xtext.oclstdlib.ui/build.properties
@@ -14,8 +14,6 @@
                plugin.xml,\
                plugin.properties,\
                about.html,\
-               build.properties,\
                templates/,\
                icons/
 src.includes = about.html
-additional.bundles = org.eclipse.ocl.jdt.annotation7
diff --git a/plugins/org.eclipse.ocl.xtext.oclstdlib/.classpath b/plugins/org.eclipse.ocl.xtext.oclstdlib/.classpath
index 6898740..60541c0 100644
--- a/plugins/org.eclipse.ocl.xtext.oclstdlib/.classpath
+++ b/plugins/org.eclipse.ocl.xtext.oclstdlib/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="emf-gen"/>
 	<classpathentry kind="src" path="src-gen"/>
diff --git a/plugins/org.eclipse.ocl.xtext.oclstdlib/META-INF/MANIFEST.MF b/plugins/org.eclipse.ocl.xtext.oclstdlib/META-INF/MANIFEST.MF
index 83db7b3..d6569fb 100644
--- a/plugins/org.eclipse.ocl.xtext.oclstdlib/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.ocl.xtext.oclstdlib/META-INF/MANIFEST.MF
@@ -10,7 +10,7 @@
  org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)",
  org.eclipse.jdt.core;bundle-version="[3.5.0,4.0.0)", 
  org.eclipse.ocl.xtext.essentialocl;bundle-version="[1.0.0,2.0.0)";visibility:=reexport
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Export-Package: org.eclipse.ocl.xtext.oclstdlib,
  org.eclipse.ocl.xtext.oclstdlib.cs2as,
  org.eclipse.ocl.xtext.oclstdlib.formatting,
diff --git a/plugins/org.eclipse.ocl.xtext.oclstdlib/build.properties b/plugins/org.eclipse.ocl.xtext.oclstdlib/build.properties
index 6461d6d..674c5a1 100644
--- a/plugins/org.eclipse.ocl.xtext.oclstdlib/build.properties
+++ b/plugins/org.eclipse.ocl.xtext.oclstdlib/build.properties
@@ -16,7 +16,5 @@
                plugin.xml,\
                plugin.properties,\
                about.html,\
-               build.properties,\
                model/
 src.includes = about.html
-additional.bundles = org.eclipse.ocl.jdt.annotation7
diff --git a/tests/org.eclipse.ocl.examples.consumers.tests/.classpath b/tests/org.eclipse.ocl.examples.consumers.tests/.classpath
index 098194c..eca7bdb 100644
--- a/tests/org.eclipse.ocl.examples.consumers.tests/.classpath
+++ b/tests/org.eclipse.ocl.examples.consumers.tests/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/tests/org.eclipse.ocl.examples.consumers.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.ocl.examples.consumers.tests/META-INF/MANIFEST.MF
index 3116733..01a0f66 100644
--- a/tests/org.eclipse.ocl.examples.consumers.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.ocl.examples.consumers.tests/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.ocl.examples.consumers.tests
 Bundle-Version: 2.0.100.qualifier
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-Vendor: %providerName
 Require-Bundle: org.junit,
  org.eclipse.ocl.examples.xtext.tests,
diff --git a/tests/org.eclipse.ocl.examples.consumers.tests/build.properties b/tests/org.eclipse.ocl.examples.consumers.tests/build.properties
index 35eb000..afdcdb1 100644
--- a/tests/org.eclipse.ocl.examples.consumers.tests/build.properties
+++ b/tests/org.eclipse.ocl.examples.consumers.tests/build.properties
@@ -16,4 +16,3 @@
                plugin.properties,\
                build.properties
 src.includes = about.html
-additional.bundles = org.eclipse.ocl.jdt.annotation7
diff --git a/tests/org.eclipse.ocl.examples.validity.test/.classpath b/tests/org.eclipse.ocl.examples.validity.test/.classpath
index 649304e..8fd5918 100644
--- a/tests/org.eclipse.ocl.examples.validity.test/.classpath
+++ b/tests/org.eclipse.ocl.examples.validity.test/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="src" path="emf-gen"/>
diff --git a/tests/org.eclipse.ocl.examples.validity.test/META-INF/MANIFEST.MF b/tests/org.eclipse.ocl.examples.validity.test/META-INF/MANIFEST.MF
index 8aa9ff4..c273df1 100644
--- a/tests/org.eclipse.ocl.examples.validity.test/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.ocl.examples.validity.test/META-INF/MANIFEST.MF
@@ -6,7 +6,7 @@
 Bundle-ClassPath: .
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.eclipse.core.runtime,
  org.eclipse.ocl.examples.emf.validation.validity,
  org.eclipse.ocl.examples.emf.validation.validity.ui,
diff --git a/tests/org.eclipse.ocl.examples.validity.test/build.properties b/tests/org.eclipse.ocl.examples.validity.test/build.properties
index ca4f81e..c84e8ef 100644
--- a/tests/org.eclipse.ocl.examples.validity.test/build.properties
+++ b/tests/org.eclipse.ocl.examples.validity.test/build.properties
@@ -20,4 +20,3 @@
            src/
 output.. = bin/
 src.includes = about.html
-additional.bundles = org.eclipse.ocl.jdt.annotation7
diff --git a/tests/org.eclipse.ocl.examples.xtext.tests/.classpath b/tests/org.eclipse.ocl.examples.xtext.tests/.classpath
index 098194c..eca7bdb 100644
--- a/tests/org.eclipse.ocl.examples.xtext.tests/.classpath
+++ b/tests/org.eclipse.ocl.examples.xtext.tests/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/tests/org.eclipse.ocl.examples.xtext.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.ocl.examples.xtext.tests/META-INF/MANIFEST.MF
index f6cf95e..c7f0050 100644
--- a/tests/org.eclipse.ocl.examples.xtext.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.ocl.examples.xtext.tests/META-INF/MANIFEST.MF
@@ -35,7 +35,7 @@
  org.eclipse.ocl.examples.validity;bundle-version="[2.0.0,3.0.0)",
  org.eclipse.ocl.examples.project.royalandloyal;resolution:=optional
 Bundle-ActivationPolicy: lazy
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-Vendor: %providerName
 Export-Package: codegen.company,
  codegen.company.impl,
diff --git a/tests/org.eclipse.ocl.examples.xtext.tests/build.properties b/tests/org.eclipse.ocl.examples.xtext.tests/build.properties
index d1eac0d..d27c5a1 100644
--- a/tests/org.eclipse.ocl.examples.xtext.tests/build.properties
+++ b/tests/org.eclipse.ocl.examples.xtext.tests/build.properties
@@ -19,5 +19,4 @@
 jars.compile.order = .
 source.. = src/
 output.. = bin/
-additional.bundles = org.eclipse.ocl.jdt.annotation7
 src.includes = about.html
diff --git a/tests/org.eclipse.ocl.examples.xtext.tests/src/codegen/company/CodegencompanyTables.java b/tests/org.eclipse.ocl.examples.xtext.tests/src/codegen/company/CodegencompanyTables.java
index c9fb192..279b2d2 100644
--- a/tests/org.eclipse.ocl.examples.xtext.tests/src/codegen/company/CodegencompanyTables.java
+++ b/tests/org.eclipse.ocl.examples.xtext.tests/src/codegen/company/CodegencompanyTables.java
@@ -315,7 +315,7 @@
 			Fragments._Company__OclElement /* 1 */,
 			Fragments._Company__Company /* 2 */
 		};
-		private static final @NonNull int[] __Company = { 1,1,1 };
+		private static final int[] __Company = { 1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _CompanySizeKind =
 		{
@@ -334,7 +334,7 @@
 			Fragments._CompanySizeKind__Enumeration /* 8 */,
 			Fragments._CompanySizeKind__CompanySizeKind /* 9 */
 		};
-		private static final @NonNull int[] __CompanySizeKind = { 1,1,3,1,2,2,1,1,1,1 };
+		private static final int[] __CompanySizeKind = { 1,1,3,1,2,2,1,1,1,1 };
 
 		private static final @NonNull ExecutorFragment[] _Employee =
 		{
@@ -342,7 +342,7 @@
 			Fragments._Employee__OclElement /* 1 */,
 			Fragments._Employee__Employee /* 2 */
 		};
-		private static final @NonNull int[] __Employee = { 1,1,1 };
+		private static final int[] __Employee = { 1,1,1 };
 
 		/**
 		 *	Install the fragment descriptors in the class descriptors.
diff --git a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateClassifierOperationsTest.java b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateClassifierOperationsTest.java
index 3c1d635..19d77f5 100644
--- a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateClassifierOperationsTest.java
+++ b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateClassifierOperationsTest.java
@@ -45,14 +45,14 @@
         // pkg1::pkg3::pkg5
         // pkg1::pkg3::pkg5::george
         @NonNull Model root = PivotUtil.createModel(null);
-        @NonNull org.eclipse.ocl.pivot.Package pkg1 = PivotUtil.createOwnedPackage(root, "pkg1");
-        @NonNull org.eclipse.ocl.pivot.Package pkg2 = PivotUtil.createOwnedPackage(pkg1, "pkg2");
-        @NonNull org.eclipse.ocl.pivot.Package jim = PivotUtil.createOwnedPackage(pkg2, "jim");
-        @NonNull org.eclipse.ocl.pivot.Package bob = PivotUtil.createOwnedPackage(pkg1, "bob");
-        @NonNull org.eclipse.ocl.pivot.Package pkg3 = PivotUtil.createOwnedPackage(pkg1, "pkg3");
-        @NonNull org.eclipse.ocl.pivot.Package pkg4 = PivotUtil.createOwnedPackage(pkg3, "pkg4");
-        @NonNull org.eclipse.ocl.pivot.Package pkg5 = PivotUtil.createOwnedPackage(pkg3, "pkg5");
-        @NonNull org.eclipse.ocl.pivot.Package george = PivotUtil.createOwnedPackage(pkg5, "george");
+        org.eclipse.ocl.pivot.@NonNull Package pkg1 = PivotUtil.createOwnedPackage(root, "pkg1");
+        org.eclipse.ocl.pivot.@NonNull Package pkg2 = PivotUtil.createOwnedPackage(pkg1, "pkg2");
+        org.eclipse.ocl.pivot.@NonNull Package jim = PivotUtil.createOwnedPackage(pkg2, "jim");
+        org.eclipse.ocl.pivot.@NonNull Package bob = PivotUtil.createOwnedPackage(pkg1, "bob");
+        org.eclipse.ocl.pivot.@NonNull Package pkg3 = PivotUtil.createOwnedPackage(pkg1, "pkg3");
+        org.eclipse.ocl.pivot.@NonNull Package pkg4 = PivotUtil.createOwnedPackage(pkg3, "pkg4");
+        org.eclipse.ocl.pivot.@NonNull Package pkg5 = PivotUtil.createOwnedPackage(pkg3, "pkg5");
+        org.eclipse.ocl.pivot.@NonNull Package george = PivotUtil.createOwnedPackage(pkg5, "george");
 		
 		public MyOCL(@NonNull String testPackageName, @NonNull String name) {
 			super(testPackageName, name, OCL.NO_PROJECTS);
diff --git a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateOclAnyOperationsTest4.java b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateOclAnyOperationsTest4.java
index 097af5b..523510d 100644
--- a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateOclAnyOperationsTest4.java
+++ b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateOclAnyOperationsTest4.java
@@ -62,14 +62,14 @@
         // pkg1::pkg3::pkg5
         // pkg1::pkg3::pkg5::george
         @NonNull Model root = PivotUtil.createModel(null);
-        @NonNull org.eclipse.ocl.pivot.Package pkg1 = PivotUtil.createOwnedPackage(root, "pkg1");
-        @NonNull org.eclipse.ocl.pivot.Package pkg2 = PivotUtil.createOwnedPackage(pkg1, "pkg2");
-        @NonNull org.eclipse.ocl.pivot.Package jim = PivotUtil.createOwnedPackage(pkg2, "jim");
-        @NonNull org.eclipse.ocl.pivot.Package bob = PivotUtil.createOwnedPackage(pkg1, "bob");
-        @NonNull org.eclipse.ocl.pivot.Package pkg3 = PivotUtil.createOwnedPackage(pkg1, "pkg3");
-        @NonNull org.eclipse.ocl.pivot.Package pkg4 = PivotUtil.createOwnedPackage(pkg3, "pkg4");
-        @NonNull org.eclipse.ocl.pivot.Package pkg5 = PivotUtil.createOwnedPackage(pkg3, "pkg5");
-        @NonNull org.eclipse.ocl.pivot.Package george = PivotUtil.createOwnedPackage(pkg5, "george");
+        org.eclipse.ocl.pivot.@NonNull Package pkg1 = PivotUtil.createOwnedPackage(root, "pkg1");
+        org.eclipse.ocl.pivot.@NonNull Package pkg2 = PivotUtil.createOwnedPackage(pkg1, "pkg2");
+        org.eclipse.ocl.pivot.@NonNull Package jim = PivotUtil.createOwnedPackage(pkg2, "jim");
+        org.eclipse.ocl.pivot.@NonNull Package bob = PivotUtil.createOwnedPackage(pkg1, "bob");
+        org.eclipse.ocl.pivot.@NonNull Package pkg3 = PivotUtil.createOwnedPackage(pkg1, "pkg3");
+        org.eclipse.ocl.pivot.@NonNull Package pkg4 = PivotUtil.createOwnedPackage(pkg3, "pkg4");
+        org.eclipse.ocl.pivot.@NonNull Package pkg5 = PivotUtil.createOwnedPackage(pkg3, "pkg5");
+        org.eclipse.ocl.pivot.@NonNull Package george = PivotUtil.createOwnedPackage(pkg5, "george");
 		
 		public MyOCL(@NonNull String testPackageName, @NonNull String name) {
 			super(testPackageName, name, useCodeGen ? getProjectMap() : OCL.NO_PROJECTS);
diff --git a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/IteratorsTest4.java b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/IteratorsTest4.java
index 15cb2ba..4287a53 100644
--- a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/IteratorsTest4.java
+++ b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/IteratorsTest4.java
@@ -92,14 +92,14 @@
         // pkg1::pkg3::pkg5
         // pkg1::pkg3::pkg5::george
         @NonNull Model root = PivotUtil.createModel(null);
-        @NonNull org.eclipse.ocl.pivot.Package pkg1 = PivotUtil.createOwnedPackage(root, "pkg1");
-        @NonNull org.eclipse.ocl.pivot.Package pkg2 = PivotUtil.createOwnedPackage(pkg1, "pkg2");
-        @NonNull org.eclipse.ocl.pivot.Package jim = PivotUtil.createOwnedPackage(pkg2, "jim");
-        @NonNull org.eclipse.ocl.pivot.Package bob = PivotUtil.createOwnedPackage(pkg1, "bob");
-        @NonNull org.eclipse.ocl.pivot.Package pkg3 = PivotUtil.createOwnedPackage(pkg1, "pkg3");
-        @NonNull org.eclipse.ocl.pivot.Package pkg4 = PivotUtil.createOwnedPackage(pkg3, "pkg4");
-        @NonNull org.eclipse.ocl.pivot.Package pkg5 = PivotUtil.createOwnedPackage(pkg3, "pkg5");
-        @NonNull org.eclipse.ocl.pivot.Package george = PivotUtil.createOwnedPackage(pkg5, "george");
+        org.eclipse.ocl.pivot.@NonNull Package pkg1 = PivotUtil.createOwnedPackage(root, "pkg1");
+        org.eclipse.ocl.pivot.@NonNull Package pkg2 = PivotUtil.createOwnedPackage(pkg1, "pkg2");
+        org.eclipse.ocl.pivot.@NonNull Package jim = PivotUtil.createOwnedPackage(pkg2, "jim");
+        org.eclipse.ocl.pivot.@NonNull Package bob = PivotUtil.createOwnedPackage(pkg1, "bob");
+        org.eclipse.ocl.pivot.@NonNull Package pkg3 = PivotUtil.createOwnedPackage(pkg1, "pkg3");
+        org.eclipse.ocl.pivot.@NonNull Package pkg4 = PivotUtil.createOwnedPackage(pkg3, "pkg4");
+        org.eclipse.ocl.pivot.@NonNull Package pkg5 = PivotUtil.createOwnedPackage(pkg3, "pkg5");
+        org.eclipse.ocl.pivot.@NonNull Package george = PivotUtil.createOwnedPackage(pkg5, "george");
 		
 		public MyOCL(@NonNull String testPackageName, @NonNull String name) {
 			super(testPackageName, name, useCodeGen ? getProjectMap() : OCL.NO_PROJECTS);
@@ -561,7 +561,7 @@
 		MyOCL ocl = createOCL();
 		MetamodelManager metamodelManager = ocl.getMetamodelManager();
 		IdResolver idResolver = ocl.getIdResolver();
-    	@SuppressWarnings("null") @NonNull org.eclipse.ocl.pivot.Class packageMetaclass = metamodelManager.getASClass("Package");
+    	@SuppressWarnings("null") org.eclipse.ocl.pivot.@NonNull Class packageMetaclass = metamodelManager.getASClass("Package");
 		CollectionTypeId typeId = TypeId.SET.getSpecializedId(packageMetaclass.getTypeId());
         Property ownedPackages = getAttribute(packageMetaclass, "ownedPackages", packageMetaclass);
         Property owningPackage = getAttribute(packageMetaclass, "owningPackage", packageMetaclass);
@@ -649,8 +649,8 @@
 		MyOCL ocl = createOCL();
 		MetamodelManager metamodelManager = ocl.getMetamodelManager();
 		IdResolver idResolver = ocl.getIdResolver();
-    	@SuppressWarnings("null") @NonNull org.eclipse.ocl.pivot.Class packageMetaclass = metamodelManager.getASClass("Package");
-    	@SuppressWarnings("null") @NonNull org.eclipse.ocl.pivot.Class propertyMetaclass = metamodelManager.getASClass("Property");
+    	@SuppressWarnings("null") org.eclipse.ocl.pivot.@NonNull Class packageMetaclass = metamodelManager.getASClass("Package");
+    	@SuppressWarnings("null") org.eclipse.ocl.pivot.@NonNull Class propertyMetaclass = metamodelManager.getASClass("Property");
 		CollectionTypeId typeId = TypeId.SET.getSpecializedId(packageMetaclass.getTypeId());
         Property owningPackage = getAttribute(packageMetaclass, "owningPackage", packageMetaclass);
         SetValue expected = idResolver.createSetOfEach(typeId, owningPackage, packageMetaclass, packageMetaclass.eContainer(), packageMetaclass.eContainer().eContainer());
diff --git a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/PivotTestSuite.java b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/PivotTestSuite.java
index 7ae1cf4..36aa507 100644
--- a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/PivotTestSuite.java
+++ b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/PivotTestSuite.java
@@ -199,7 +199,7 @@
 	 * @param type The '<em><b>Type</b></em>' of the {@link org.eclipse.uml2.uml.Property} to retrieve, or <code>null</code>.
 	 * @return The first {@link org.eclipse.uml2.uml.Property} with the specified '<em><b>Name</b></em>', and '<em><b>Type</b></em>', or <code>null</code>.
 	 */
-	protected Property getAttribute(@NonNull org.eclipse.ocl.pivot.Class classifier, @NonNull String name, @NonNull Type type) {
+	protected Property getAttribute(org.eclipse.ocl.pivot.@NonNull Class classifier, @NonNull String name, @NonNull Type type) {
 		Property feature = NameUtil.getNameable(classifier.getOwnedProperties(), name);
 		if (feature == null)
 			return null;
diff --git a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/TestOCL.java b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/TestOCL.java
index 409a383..51c0400 100644
--- a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/TestOCL.java
+++ b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/TestOCL.java
@@ -87,7 +87,7 @@
 		this.testName = testName;
 	}
 
-	public void addSupertype(@NonNull org.eclipse.ocl.pivot.Class aClass, @NonNull org.eclipse.ocl.pivot.Class superClass) {
+	public void addSupertype(org.eclipse.ocl.pivot.@NonNull Class aClass, org.eclipse.ocl.pivot.@NonNull Class superClass) {
 		aClass.getSuperClasses().add(superClass);
 	}
     
@@ -96,7 +96,7 @@
 	 * with a diagnostic of severity containing a message that is the result of messageTemplate
 	 * resolved by bindings.
 	 */
-	public void assertBadInvariant(@NonNull Class<?> exception, int severity, @Nullable org.eclipse.ocl.pivot.Class contextType,
+	public void assertBadInvariant(@NonNull Class<?> exception, int severity, org.eclipse.ocl.pivot.@Nullable Class contextType,
     		@NonNull String expression, /*@NonNull*/ String messageTemplate, Object... bindings) {
 		CSResource resource = null;
         try {
@@ -130,7 +130,7 @@
 	 * @throws IOException 
 	 */
     @SuppressWarnings("null")
-	public void assertBadQuery(@NonNull Class<?> exception, int severity, @Nullable org.eclipse.ocl.pivot.Class contextType, @NonNull String expression, /*@NonNull*/ String messageTemplate, Object... bindings) {
+	public void assertBadQuery(@NonNull Class<?> exception, int severity, org.eclipse.ocl.pivot.@Nullable Class contextType, @NonNull String expression, /*@NonNull*/ String messageTemplate, Object... bindings) {
 		BaseCSResource csResource = null;
 		try {
 			ParserContext classContext = new ClassContext(getEnvironmentFactory(), null, contextType, null);
@@ -157,7 +157,7 @@
 	/**
 	 * Assert that an expression can be parsed as an invariant for a context and return the invariant.
 	 */
-	public @Nullable ExpressionInOCL assertInvariant(@NonNull org.eclipse.ocl.pivot.Class context, @NonNull String expression) {
+	public @Nullable ExpressionInOCL assertInvariant(org.eclipse.ocl.pivot.@NonNull Class context, @NonNull String expression) {
 		try {
 			ExpressionInOCL result = createInvariant(context, expression);
 			return result;
@@ -544,7 +544,7 @@
 		}
 	}
 
-	public void assertSemanticErrorQuery(@Nullable org.eclipse.ocl.pivot.Class contextType, @NonNull String expression, String messageTemplate, Object... bindings) {
+	public void assertSemanticErrorQuery(org.eclipse.ocl.pivot.@Nullable Class contextType, @NonNull String expression, String messageTemplate, Object... bindings) {
 		assertBadQuery(SemanticException.class, Diagnostic.ERROR, contextType, expression, messageTemplate, bindings);	   
 	}
 
@@ -553,7 +553,7 @@
    	 * for evaluation on an object of contextType. No evaluation is performed since no
    	 * object of contextType need exist. 
    	 */
-	public void assertValidQuery(@NonNull org.eclipse.ocl.pivot.Class contextType, @NonNull String expression) throws Exception {
+	public void assertValidQuery(org.eclipse.ocl.pivot.@NonNull Class contextType, @NonNull String expression) throws Exception {
 		ExpressionInOCL query = createQuery(contextType, expression);
 		PivotTestCase.assertNoValidationErrors(expression, query);
 	}
@@ -564,7 +564,7 @@
 	 * resolved by bindings.
 	 * @throws IOException 
 	 */
-    public void assertValidationErrorQuery(@Nullable org.eclipse.ocl.pivot.Class contextType, @NonNull String expression,
+    public void assertValidationErrorQuery(org.eclipse.ocl.pivot.@Nullable Class contextType, @NonNull String expression,
 		   String messageTemplate, Object... bindings) {
 		BaseCSResource csResource = null;
 		try {
@@ -620,7 +620,7 @@
 		return eAttribute;
 	}
 
-	public @NonNull org.eclipse.ocl.pivot.Class createOwnedClass(org.eclipse.ocl.pivot.Package aPackage, String name, boolean isAbstract) {
+	public org.eclipse.ocl.pivot.@NonNull Class createOwnedClass(org.eclipse.ocl.pivot.Package aPackage, String name, boolean isAbstract) {
 		org.eclipse.ocl.pivot.Class eClass = PivotFactory.eINSTANCE.createClass();
 		eClass.setName(name);
 		eClass.setIsAbstract(isAbstract);
@@ -794,7 +794,7 @@
 		return getIdResolver().createSetOfEach(TypeId.SET.getSpecializedId(TypeId.OCL_VOID));
 	}
 
-	public @NonNull org.eclipse.ocl.pivot.Package getUMLMetamodel() {
+	public org.eclipse.ocl.pivot.@NonNull Package getUMLMetamodel() {
 		MetamodelManagerInternal metamodelManager = getMetamodelManager();
 		return ClassUtil.nonNullState(metamodelManager.getASmetamodel());
 	}
@@ -808,7 +808,7 @@
 	/**
 	 * Create a Resource to register a binding-dependent pkg for access with a given nsPrefix and nsUri.
 	 */
-	public @NonNull org.eclipse.ocl.pivot.Package registerPackage(@NonNull org.eclipse.ocl.pivot.Package pkg, @NonNull String nsPrefix, @NonNull String nsUri) {
+	public org.eclipse.ocl.pivot.@NonNull Package registerPackage(org.eclipse.ocl.pivot.@NonNull Package pkg, @NonNull String nsPrefix, @NonNull String nsUri) {
 		pkg.setNsPrefix(nsPrefix);
         pkg.setURI(nsUri);
 		Resource resource = new ResourceImpl(URI.createURI(nsUri));
