Updatest to datatypes model

Modified mixed element on TEL to remove required validation issue
diff --git a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/model/datatypes.ecore b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/model/datatypes.ecore
index 58907c6..210ef0b 100644
--- a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/model/datatypes.ecore
+++ b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/model/datatypes.ecore
@@ -99,9 +99,16 @@
   <eClassifiers xsi:type="ecore:EClass" name="TEL" eSuperTypes="#//URL">
     <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
       <details key="kind" value="mixed"/>
-      <details key="name" value=""/>
     </eAnnotations>
     <eOperations name="getText" ordered="false" lowerBound="1" eType="ecore:EDataType ../../org.eclipse.uml2.types/model/Types.ecore#//String"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="mixed" ordered="false"
+        upperBound="-1" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">
+      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
+        <details key="name" value=""/>
+        <details key="namespace" value=""/>
+        <details key="kind" value="elementWildcard"/>
+      </eAnnotations>
+    </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EReference" name="useablePeriod" ordered="false"
         upperBound="-1" eType="#//SXCM_TS" containment="true">
       <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
@@ -115,14 +122,6 @@
         <details key="kind" value="attribute"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="mixed" unique="false" upperBound="-1"
-        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EFeatureMapEntry">
-      <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
-        <details key="name" value="mixed"/>
-        <details key="namespace" value=""/>
-        <details key="kind" value="elementWildcard"/>
-      </eAnnotations>
-    </eStructuralFeatures>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="URL" abstract="true" eSuperTypes="#//ANY">
     <eOperations name="URL" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean">
diff --git a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/model/datatypes.genmodel b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/model/datatypes.genmodel
index a95cce2..510432c 100644
--- a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/model/datatypes.genmodel
+++ b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/model/datatypes.genmodel
@@ -88,11 +88,11 @@
     </genClasses>
     <genClasses xsi:type="genmodel:GenClass" ecoreClass="datatypes.ecore#//TEL">
       <genFeatures xsi:type="genmodel:GenFeature" property="None" children="true"
-          createChild="true" ecoreFeature="ecore:EReference datatypes.ecore#//TEL/useablePeriod"/>
-      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute datatypes.ecore#//TEL/use"/>
-      <genFeatures xsi:type="genmodel:GenFeature" property="None" children="true"
           createChild="true" ecoreFeature="ecore:EAttribute datatypes.ecore#//TEL/mixed"
           pluralizationException="true"/>
+      <genFeatures xsi:type="genmodel:GenFeature" property="None" children="true"
+          createChild="true" ecoreFeature="ecore:EReference datatypes.ecore#//TEL/useablePeriod"/>
+      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute datatypes.ecore#//TEL/use"/>
       <genOperations xsi:type="genmodel:GenOperation" ecoreOperation="datatypes.ecore#//TEL/getText"/>
     </genClasses>
     <genClasses xsi:type="genmodel:GenClass" image="false" ecoreClass="datatypes.ecore#//URL">
diff --git a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/model/datatypes.uml b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/model/datatypes.uml
index 04076e7..c5589fa 100644
--- a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/model/datatypes.uml
+++ b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/model/datatypes.uml
@@ -989,7 +989,7 @@
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_6Ew5sD58Ed6cla2oXsPtlA"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_6Ew5sT58Ed6cla2oXsPtlA" value="*"/>
       </ownedAttribute>
-      <ownedAttribute xmi:id="_nOeI4AFcEeqg4I9dpN7mPg" name="mixed" visibility="private" isOrdered="true" isUnique="false">
+      <ownedAttribute xmi:id="_nOeI4AFcEeqg4I9dpN7mPg" name="mixed" visibility="private">
         <type xmi:type="uml:PrimitiveType" href="pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EFeatureMapEntry"/>
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_nOeI4QFcEeqg4I9dpN7mPg"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_nOeI4gFcEeqg4I9dpN7mPg" value="*"/>
@@ -1742,6 +1742,6 @@
   <Ecore:EAttribute xmi:id="_FiyloFcVEeGCdLgBm6VHOQ" isUnsettable="true" base_Property="_TrUQkE-pEd6lBqYlbulQZA"/>
   <Ecore:EAttribute xmi:id="_KS9ycAT5EeOFTql9pPvb9Q" xmlName="valueSet" xmlNamespace="urn:hl7-org:sdtc" xmlFeatureKind="Attribute" base_Property="_8Y3PEAT4EeOFTql9pPvb9Q"/>
   <Ecore:EAttribute xmi:id="_dewR4AT5EeOFTql9pPvb9Q" xmlName="valueSetVersion" xmlNamespace="urn:hl7-org:sdtc" xmlFeatureKind="Attribute" base_Property="_T4IV4AT5EeOFTql9pPvb9Q"/>
-  <Ecore:EAttribute xmi:id="_CpgGkAGdEeqg4I9dpN7mPg" xmlName="mixed" xmlNamespace="" xmlFeatureKind="ElementWildcard" base_Property="_nOeI4AFcEeqg4I9dpN7mPg"/>
+  <Ecore:EAttribute xmi:id="_CpgGkAGdEeqg4I9dpN7mPg" xmlName="" xmlNamespace="" xmlFeatureKind="ElementWildcard" base_Property="_nOeI4AFcEeqg4I9dpN7mPg"/>
   <Ecore:EClass xmi:id="_0urgUAIyEeq4qM3HrOJ9Gw" xmlName="" base_Class="_22o_kD52Ed6cla2oXsPtlA" xmlContentKind="Mixed"/>
 </xmi:XMI>
diff --git a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/DatatypesPackage.java b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/DatatypesPackage.java
index ea60925..a082daa 100644
--- a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/DatatypesPackage.java
+++ b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/DatatypesPackage.java
@@ -305,13 +305,22 @@
 	int TEL__VALUE = URL__VALUE;

 

 	/**

+	 * The feature id for the '<em><b>Mixed</b></em>' attribute list.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	int TEL__MIXED = URL_FEATURE_COUNT + 0;

+

+	/**

 	 * The feature id for the '<em><b>Useable Period</b></em>' containment reference list.

 	 * <!-- begin-user-doc -->

 	 * <!-- end-user-doc -->

 	 * @generated

 	 * @ordered

 	 */

-	int TEL__USEABLE_PERIOD = URL_FEATURE_COUNT + 0;

+	int TEL__USEABLE_PERIOD = URL_FEATURE_COUNT + 1;

 

 	/**

 	 * The feature id for the '<em><b>Use</b></em>' attribute list.

@@ -320,16 +329,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	int TEL__USE = URL_FEATURE_COUNT + 1;

-

-	/**

-	 * The feature id for the '<em><b>Mixed</b></em>' attribute list.

-	 * <!-- begin-user-doc -->

-	 * <!-- end-user-doc -->

-	 * @generated

-	 * @ordered

-	 */

-	int TEL__MIXED = URL_FEATURE_COUNT + 2;

+	int TEL__USE = URL_FEATURE_COUNT + 2;

 

 	/**

 	 * The number of structural features of the '<em>TEL</em>' class.

diff --git a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/TEL.java b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/TEL.java
index df4749c..a8b07ab 100644
--- a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/TEL.java
+++ b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/TEL.java
@@ -23,13 +23,13 @@
  * The following features are supported:

  * </p>

  * <ul>

+ *   <li>{@link org.eclipse.mdht.uml.hl7.datatypes.TEL#getMixed <em>Mixed</em>}</li>

  *   <li>{@link org.eclipse.mdht.uml.hl7.datatypes.TEL#getUseablePeriods <em>Useable Period</em>}</li>

  *   <li>{@link org.eclipse.mdht.uml.hl7.datatypes.TEL#getUses <em>Use</em>}</li>

- *   <li>{@link org.eclipse.mdht.uml.hl7.datatypes.TEL#getMixed <em>Mixed</em>}</li>

  * </ul>

  *

  * @see org.eclipse.mdht.uml.hl7.datatypes.DatatypesPackage#getTEL()

- * @model extendedMetaData="kind='mixed' name=''"

+ * @model extendedMetaData="kind='mixed'"

  * @generated

  */

 public interface TEL extends URL {

@@ -103,8 +103,8 @@
 	 * <!-- end-user-doc -->

 	 * @return the value of the '<em>Mixed</em>' attribute list.

 	 * @see org.eclipse.mdht.uml.hl7.datatypes.DatatypesPackage#getTEL_Mixed()

-	 * @model unique="false" dataType="org.eclipse.emf.ecore.EFeatureMapEntry" many="true"

-	 *        extendedMetaData="name='mixed' namespace='' kind='elementWildcard'"

+	 * @model dataType="org.eclipse.emf.ecore.EFeatureMapEntry" many="true" ordered="false"

+	 *        extendedMetaData="name='' namespace='' kind='elementWildcard'"

 	 * @generated

 	 */

 	FeatureMap getMixed();

diff --git a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/impl/DatatypesPackageImpl.java b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/impl/DatatypesPackageImpl.java
index 0505942..49e5cea 100644
--- a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/impl/DatatypesPackageImpl.java
+++ b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/impl/DatatypesPackageImpl.java
@@ -630,7 +630,7 @@
 	 */

 	@Override

 	public EReference getTEL_UseablePeriod() {

-		return (EReference) telEClass.getEStructuralFeatures().get(0);

+		return (EReference) telEClass.getEStructuralFeatures().get(1);

 	}

 

 	/**

@@ -640,7 +640,7 @@
 	 */

 	@Override

 	public EAttribute getTEL_Use() {

-		return (EAttribute) telEClass.getEStructuralFeatures().get(1);

+		return (EAttribute) telEClass.getEStructuralFeatures().get(2);

 	}

 

 	/**

@@ -650,7 +650,7 @@
 	 */

 	@Override

 	public EAttribute getTEL_Mixed() {

-		return (EAttribute) telEClass.getEStructuralFeatures().get(2);

+		return (EAttribute) telEClass.getEStructuralFeatures().get(0);

 	}

 

 	/**

@@ -2301,9 +2301,9 @@
 		createEAttribute(edEClass, ED__INTEGRITY_CHECK_ALGORITHM);

 

 		telEClass = createEClass(TEL);

+		createEAttribute(telEClass, TEL__MIXED);

 		createEReference(telEClass, TEL__USEABLE_PERIOD);

 		createEAttribute(telEClass, TEL__USE);

-		createEAttribute(telEClass, TEL__MIXED);

 

 		urlEClass = createEClass(URL);

 		createEAttribute(urlEClass, URL__VALUE);

@@ -2688,16 +2688,18 @@
 		initEClass(

 			telEClass, org.eclipse.mdht.uml.hl7.datatypes.TEL.class, "TEL", !IS_ABSTRACT, !IS_INTERFACE,

 			IS_GENERATED_INSTANCE_CLASS);

+		initEAttribute(

+			getTEL_Mixed(), ecorePackage.getEFeatureMapEntry(), "mixed", null, 0, -1,

+			org.eclipse.mdht.uml.hl7.datatypes.TEL.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE,

+			!IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);

 		initEReference(

-			getTEL_UseablePeriod(), this.getSXCM_TS(), null, "useablePeriod", null, 0, -1, null, !IS_TRANSIENT,

-			!IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED,

-			!IS_ORDERED);

+			getTEL_UseablePeriod(), this.getSXCM_TS(), null, "useablePeriod", null, 0, -1,

+			org.eclipse.mdht.uml.hl7.datatypes.TEL.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE,

+			!IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);

 		initEAttribute(

-			getTEL_Use(), theVocabPackage.getTelecommunicationAddressUse(), "use", null, 0, -1, null, !IS_TRANSIENT,

-			!IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);

-		initEAttribute(

-			getTEL_Mixed(), ecorePackage.getEFeatureMapEntry(), "mixed", null, 0, -1, null, !IS_TRANSIENT, !IS_VOLATILE,

-			IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

+			getTEL_Use(), theVocabPackage.getTelecommunicationAddressUse(), "use", null, 0, -1,

+			org.eclipse.mdht.uml.hl7.datatypes.TEL.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_UNSETTABLE,

+			!IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED);

 

 		addEOperation(telEClass, theTypesPackage.getString(), "getText", 1, 1, IS_UNIQUE, !IS_ORDERED);

 

@@ -4222,12 +4224,11 @@
 		addAnnotation(getED_Mixed(), source, new String[] { "name", "mixed", "kind", "elementWildcard" });

 		addAnnotation(getED_Reference(), source, new String[] { "namespace", "urn:hl7-org:v3", "kind", "element" });

 		addAnnotation(getED_Thumbnail(), source, new String[] { "namespace", "urn:hl7-org:v3", "kind", "element" });

-		addAnnotation(telEClass, source, new String[] { "kind", "mixed", "name", "" });

+		addAnnotation(telEClass, source, new String[] { "kind", "mixed" });

+		addAnnotation(getTEL_Mixed(), source, new String[] { "name", "", "namespace", "", "kind", "elementWildcard" });

 		addAnnotation(getTEL_UseablePeriod(), source, new String[] { "namespace", "urn:hl7-org:v3" });

 		addAnnotation(getTEL_Use(), source, new String[] { "kind", "attribute" });

 		addAnnotation(

-			getTEL_Mixed(), source, new String[] { "name", "mixed", "namespace", "", "kind", "elementWildcard" });

-		addAnnotation(

 			tsTypeEDataType, source,

 			new String[] { "pattern", "[0-9]{1,8}|([0-9]{9,14}|[0-9]{14,14}\\.[0-9]+)([+\\-][0-9]{1,4})?" });

 		addAnnotation(

diff --git a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/impl/TELImpl.java b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/impl/TELImpl.java
index 52d4665..763c3a5 100644
--- a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/impl/TELImpl.java
+++ b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/impl/TELImpl.java
@@ -35,15 +35,25 @@
  * The following features are implemented:

  * </p>

  * <ul>

+ *   <li>{@link org.eclipse.mdht.uml.hl7.datatypes.impl.TELImpl#getMixed <em>Mixed</em>}</li>

  *   <li>{@link org.eclipse.mdht.uml.hl7.datatypes.impl.TELImpl#getUseablePeriods <em>Useable Period</em>}</li>

  *   <li>{@link org.eclipse.mdht.uml.hl7.datatypes.impl.TELImpl#getUses <em>Use</em>}</li>

- *   <li>{@link org.eclipse.mdht.uml.hl7.datatypes.impl.TELImpl#getMixed <em>Mixed</em>}</li>

  * </ul>

  *

  * @generated

  */

 public class TELImpl extends URLImpl implements TEL {

 	/**

+	 * The cached value of the '{@link #getMixed() <em>Mixed</em>}' attribute list.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @see #getMixed()

+	 * @generated

+	 * @ordered

+	 */

+	protected FeatureMap mixed;

+

+	/**

 	 * The cached value of the '{@link #getUseablePeriods() <em>Useable Period</em>}' containment reference list.

 	 * <!-- begin-user-doc -->

 	 * <!-- end-user-doc -->

@@ -64,16 +74,6 @@
 	protected EList<TelecommunicationAddressUse> uses;

 

 	/**

-	 * The cached value of the '{@link #getMixed() <em>Mixed</em>}' attribute list.

-	 * <!-- begin-user-doc -->

-	 * <!-- end-user-doc -->

-	 * @see #getMixed()

-	 * @generated

-	 * @ordered

-	 */

-	protected FeatureMap mixed;

-

-	/**

 	 * <!-- begin-user-doc -->

 	 * <!-- end-user-doc -->

 	 * @generated

@@ -172,10 +172,10 @@
 	@Override

 	public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) {

 		switch (featureID) {

-			case DatatypesPackage.TEL__USEABLE_PERIOD:

-				return ((InternalEList<?>) getUseablePeriods()).basicRemove(otherEnd, msgs);

 			case DatatypesPackage.TEL__MIXED:

 				return ((InternalEList<?>) getMixed()).basicRemove(otherEnd, msgs);

+			case DatatypesPackage.TEL__USEABLE_PERIOD:

+				return ((InternalEList<?>) getUseablePeriods()).basicRemove(otherEnd, msgs);

 		}

 		return super.eInverseRemove(otherEnd, featureID, msgs);

 	}

@@ -188,15 +188,15 @@
 	@Override

 	public Object eGet(int featureID, boolean resolve, boolean coreType) {

 		switch (featureID) {

-			case DatatypesPackage.TEL__USEABLE_PERIOD:

-				return getUseablePeriods();

-			case DatatypesPackage.TEL__USE:

-				return getUses();

 			case DatatypesPackage.TEL__MIXED:

 				if (coreType) {

 					return getMixed();

 				}

 				return ((FeatureMap.Internal) getMixed()).getWrapper();

+			case DatatypesPackage.TEL__USEABLE_PERIOD:

+				return getUseablePeriods();

+			case DatatypesPackage.TEL__USE:

+				return getUses();

 		}

 		return super.eGet(featureID, resolve, coreType);

 	}

@@ -210,6 +210,9 @@
 	@Override

 	public void eSet(int featureID, Object newValue) {

 		switch (featureID) {

+			case DatatypesPackage.TEL__MIXED:

+				((FeatureMap.Internal) getMixed()).set(newValue);

+				return;

 			case DatatypesPackage.TEL__USEABLE_PERIOD:

 				getUseablePeriods().clear();

 				getUseablePeriods().addAll((Collection<? extends SXCM_TS>) newValue);

@@ -218,9 +221,6 @@
 				getUses().clear();

 				getUses().addAll((Collection<? extends TelecommunicationAddressUse>) newValue);

 				return;

-			case DatatypesPackage.TEL__MIXED:

-				((FeatureMap.Internal) getMixed()).set(newValue);

-				return;

 		}

 		super.eSet(featureID, newValue);

 	}

@@ -233,15 +233,15 @@
 	@Override

 	public void eUnset(int featureID) {

 		switch (featureID) {

+			case DatatypesPackage.TEL__MIXED:

+				getMixed().clear();

+				return;

 			case DatatypesPackage.TEL__USEABLE_PERIOD:

 				getUseablePeriods().clear();

 				return;

 			case DatatypesPackage.TEL__USE:

 				unsetUses();

 				return;

-			case DatatypesPackage.TEL__MIXED:

-				getMixed().clear();

-				return;

 		}

 		super.eUnset(featureID);

 	}

@@ -254,12 +254,12 @@
 	@Override

 	public boolean eIsSet(int featureID) {

 		switch (featureID) {

+			case DatatypesPackage.TEL__MIXED:

+				return mixed != null && !mixed.isEmpty();

 			case DatatypesPackage.TEL__USEABLE_PERIOD:

 				return useablePeriods != null && !useablePeriods.isEmpty();

 			case DatatypesPackage.TEL__USE:

 				return isSetUses();

-			case DatatypesPackage.TEL__MIXED:

-				return mixed != null && !mixed.isEmpty();

 		}

 		return super.eIsSet(featureID);

 	}

@@ -276,10 +276,10 @@
 		}

 

 		StringBuilder result = new StringBuilder(super.toString());

-		result.append(" (use: ");

-		result.append(uses);

-		result.append(", mixed: ");

+		result.append(" (mixed: ");

 		result.append(mixed);

+		result.append(", use: ");

+		result.append(uses);

 		result.append(')');

 		return result.toString();

 	}

diff --git a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/ADOperations.java b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/ADOperations.java
index 91c01aa..e77c2aa 100644
--- a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/ADOperations.java
+++ b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/ADOperations.java
@@ -20,6 +20,7 @@
 import org.eclipse.mdht.uml.hl7.datatypes.AD;

 import org.eclipse.mdht.uml.hl7.datatypes.DatatypesFactory;

 import org.eclipse.mdht.uml.hl7.datatypes.DatatypesPackage;

+import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesUtil;

 import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesValidator;

 import org.eclipse.mdht.uml.hl7.vocab.AddressPartType;

 import org.eclipse.ocl.ParserException;

@@ -103,7 +104,12 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static final OCL EOCL_ENV = OCL.newInstance();

+	protected static final ThreadLocal<OCL> EOCL_ENV = new ThreadLocal<OCL>() {

+		@Override

+		public OCL initialValue() {

+			return OCL.newInstance();

+		}

+	};

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -132,7 +138,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_DELIMITER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_DELIMITER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -145,17 +151,23 @@
 	 * @generated

 	 */

 	public static boolean validateDelimiter(AD ad, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_DELIMITER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.AD);

-			try {

-				VALIDATE_DELIMITER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_DELIMITER__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "ADDelimiter", "ERROR");

+

+		if (VALIDATE_DELIMITER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.AD);

+				try {

+					VALIDATE_DELIMITER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_DELIMITER__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_DELIMITER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ad)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_DELIMITER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(ad)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -190,7 +202,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_COUNTRY__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_COUNTRY__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -203,17 +215,23 @@
 	 * @generated

 	 */

 	public static boolean validateCountry(AD ad, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_COUNTRY__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.AD);

-			try {

-				VALIDATE_COUNTRY__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_COUNTRY__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "ADCountry", "ERROR");

+

+		if (VALIDATE_COUNTRY__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.AD);

+				try {

+					VALIDATE_COUNTRY__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_COUNTRY__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_COUNTRY__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ad)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_COUNTRY__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(ad)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -248,7 +266,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_STATE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_STATE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -261,17 +279,23 @@
 	 * @generated

 	 */

 	public static boolean validateState(AD ad, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_STATE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.AD);

-			try {

-				VALIDATE_STATE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_STATE__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "ADState", "ERROR");

+

+		if (VALIDATE_STATE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.AD);

+				try {

+					VALIDATE_STATE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_STATE__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_STATE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ad)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_STATE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(ad)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -306,7 +330,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_COUNTY__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_COUNTY__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -319,17 +343,23 @@
 	 * @generated

 	 */

 	public static boolean validateCounty(AD ad, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_COUNTY__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.AD);

-			try {

-				VALIDATE_COUNTY__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_COUNTY__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "ADCounty", "ERROR");

+

+		if (VALIDATE_COUNTY__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.AD);

+				try {

+					VALIDATE_COUNTY__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_COUNTY__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_COUNTY__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ad)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_COUNTY__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(ad)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -364,7 +394,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_CITY__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_CITY__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -377,17 +407,23 @@
 	 * @generated

 	 */

 	public static boolean validateCity(AD ad, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_CITY__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.AD);

-			try {

-				VALIDATE_CITY__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_CITY__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "ADCity", "ERROR");

+

+		if (VALIDATE_CITY__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.AD);

+				try {

+					VALIDATE_CITY__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_CITY__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_CITY__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ad)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_CITY__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(ad)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -422,7 +458,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_POSTAL_CODE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_POSTAL_CODE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -435,17 +471,23 @@
 	 * @generated

 	 */

 	public static boolean validatePostalCode(AD ad, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_POSTAL_CODE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.AD);

-			try {

-				VALIDATE_POSTAL_CODE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_POSTAL_CODE__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "ADPostalCode", "ERROR");

+

+		if (VALIDATE_POSTAL_CODE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.AD);

+				try {

+					VALIDATE_POSTAL_CODE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_POSTAL_CODE__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_POSTAL_CODE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ad)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_POSTAL_CODE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(ad)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -480,7 +522,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_STREET_ADDRESS_LINE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_STREET_ADDRESS_LINE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -493,17 +535,23 @@
 	 * @generated

 	 */

 	public static boolean validateStreetAddressLine(AD ad, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_STREET_ADDRESS_LINE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.AD);

-			try {

-				VALIDATE_STREET_ADDRESS_LINE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_STREET_ADDRESS_LINE__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "ADStreetAddressLine", "ERROR");

+

+		if (VALIDATE_STREET_ADDRESS_LINE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.AD);

+				try {

+					VALIDATE_STREET_ADDRESS_LINE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_STREET_ADDRESS_LINE__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_STREET_ADDRESS_LINE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ad)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_STREET_ADDRESS_LINE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(ad)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -539,7 +587,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_HOUSE_NUMBER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_HOUSE_NUMBER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -552,17 +600,23 @@
 	 * @generated

 	 */

 	public static boolean validateHouseNumber(AD ad, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_HOUSE_NUMBER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.AD);

-			try {

-				VALIDATE_HOUSE_NUMBER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_HOUSE_NUMBER__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "ADHouseNumber", "ERROR");

+

+		if (VALIDATE_HOUSE_NUMBER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.AD);

+				try {

+					VALIDATE_HOUSE_NUMBER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_HOUSE_NUMBER__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_HOUSE_NUMBER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ad)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_HOUSE_NUMBER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(ad)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -597,7 +651,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_HOUSE_NUMBER_NUMERIC__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_HOUSE_NUMBER_NUMERIC__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -610,17 +664,24 @@
 	 * @generated

 	 */

 	public static boolean validateHouseNumberNumeric(AD ad, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_HOUSE_NUMBER_NUMERIC__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.AD);

-			try {

-				VALIDATE_HOUSE_NUMBER_NUMERIC__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_HOUSE_NUMBER_NUMERIC__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "ADHouseNumberNumeric", "ERROR");

+

+		if (VALIDATE_HOUSE_NUMBER_NUMERIC__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.AD);

+				try {

+					VALIDATE_HOUSE_NUMBER_NUMERIC__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_HOUSE_NUMBER_NUMERIC__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_HOUSE_NUMBER_NUMERIC__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ad)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_HOUSE_NUMBER_NUMERIC__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(

+			ad)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -656,7 +717,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_DIRECTION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_DIRECTION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -669,17 +730,23 @@
 	 * @generated

 	 */

 	public static boolean validateDirection(AD ad, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_DIRECTION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.AD);

-			try {

-				VALIDATE_DIRECTION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_DIRECTION__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "ADDirection", "ERROR");

+

+		if (VALIDATE_DIRECTION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.AD);

+				try {

+					VALIDATE_DIRECTION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_DIRECTION__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_DIRECTION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ad)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_DIRECTION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(ad)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -714,7 +781,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_STREET_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_STREET_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -727,17 +794,23 @@
 	 * @generated

 	 */

 	public static boolean validateStreetName(AD ad, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_STREET_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.AD);

-			try {

-				VALIDATE_STREET_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_STREET_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "ADStreetName", "ERROR");

+

+		if (VALIDATE_STREET_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.AD);

+				try {

+					VALIDATE_STREET_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_STREET_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_STREET_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ad)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_STREET_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(ad)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -772,7 +845,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_STREET_NAME_BASE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_STREET_NAME_BASE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -785,17 +858,23 @@
 	 * @generated

 	 */

 	public static boolean validateStreetNameBase(AD ad, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_STREET_NAME_BASE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.AD);

-			try {

-				VALIDATE_STREET_NAME_BASE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_STREET_NAME_BASE__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "ADStreetNameBase", "ERROR");

+

+		if (VALIDATE_STREET_NAME_BASE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.AD);

+				try {

+					VALIDATE_STREET_NAME_BASE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_STREET_NAME_BASE__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_STREET_NAME_BASE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ad)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_STREET_NAME_BASE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(ad)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -830,7 +909,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_STREET_NAME_TYPE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_STREET_NAME_TYPE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -843,17 +922,23 @@
 	 * @generated

 	 */

 	public static boolean validateStreetNameType(AD ad, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_STREET_NAME_TYPE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.AD);

-			try {

-				VALIDATE_STREET_NAME_TYPE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_STREET_NAME_TYPE__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "ADStreetNameType", "ERROR");

+

+		if (VALIDATE_STREET_NAME_TYPE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.AD);

+				try {

+					VALIDATE_STREET_NAME_TYPE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_STREET_NAME_TYPE__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_STREET_NAME_TYPE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ad)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_STREET_NAME_TYPE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(ad)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -888,7 +973,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_ADDITIONAL_LOCATOR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_ADDITIONAL_LOCATOR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -901,17 +986,23 @@
 	 * @generated

 	 */

 	public static boolean validateAdditionalLocator(AD ad, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_ADDITIONAL_LOCATOR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.AD);

-			try {

-				VALIDATE_ADDITIONAL_LOCATOR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_ADDITIONAL_LOCATOR__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "ADAdditionalLocator", "ERROR");

+

+		if (VALIDATE_ADDITIONAL_LOCATOR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.AD);

+				try {

+					VALIDATE_ADDITIONAL_LOCATOR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_ADDITIONAL_LOCATOR__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_ADDITIONAL_LOCATOR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ad)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_ADDITIONAL_LOCATOR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(ad)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -947,7 +1038,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_UNIT_ID__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_UNIT_ID__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -960,17 +1051,23 @@
 	 * @generated

 	 */

 	public static boolean validateUnitID(AD ad, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_UNIT_ID__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.AD);

-			try {

-				VALIDATE_UNIT_ID__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_UNIT_ID__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "ADUnitID", "ERROR");

+

+		if (VALIDATE_UNIT_ID__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.AD);

+				try {

+					VALIDATE_UNIT_ID__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_UNIT_ID__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_UNIT_ID__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ad)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_UNIT_ID__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(ad)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -1005,7 +1102,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_UNIT_TYPE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_UNIT_TYPE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -1018,17 +1115,23 @@
 	 * @generated

 	 */

 	public static boolean validateUnitType(AD ad, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_UNIT_TYPE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.AD);

-			try {

-				VALIDATE_UNIT_TYPE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_UNIT_TYPE__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "ADUnitType", "ERROR");

+

+		if (VALIDATE_UNIT_TYPE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.AD);

+				try {

+					VALIDATE_UNIT_TYPE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_UNIT_TYPE__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_UNIT_TYPE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ad)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_UNIT_TYPE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(ad)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -1063,7 +1166,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_CARE_OF__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_CARE_OF__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -1076,17 +1179,23 @@
 	 * @generated

 	 */

 	public static boolean validateCareOf(AD ad, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_CARE_OF__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.AD);

-			try {

-				VALIDATE_CARE_OF__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_CARE_OF__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "ADCareOf", "ERROR");

+

+		if (VALIDATE_CARE_OF__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.AD);

+				try {

+					VALIDATE_CARE_OF__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_CARE_OF__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_CARE_OF__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ad)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_CARE_OF__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(ad)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -1121,7 +1230,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_CENSUS_TRACT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_CENSUS_TRACT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -1134,17 +1243,23 @@
 	 * @generated

 	 */

 	public static boolean validateCensusTract(AD ad, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_CENSUS_TRACT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.AD);

-			try {

-				VALIDATE_CENSUS_TRACT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_CENSUS_TRACT__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "ADCensusTract", "ERROR");

+

+		if (VALIDATE_CENSUS_TRACT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.AD);

+				try {

+					VALIDATE_CENSUS_TRACT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_CENSUS_TRACT__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_CENSUS_TRACT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ad)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_CENSUS_TRACT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(ad)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -1179,7 +1294,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_DELIVERY_ADDRESS_LINE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_DELIVERY_ADDRESS_LINE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -1192,17 +1307,24 @@
 	 * @generated

 	 */

 	public static boolean validateDeliveryAddressLine(AD ad, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_DELIVERY_ADDRESS_LINE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.AD);

-			try {

-				VALIDATE_DELIVERY_ADDRESS_LINE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_DELIVERY_ADDRESS_LINE__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "ADDeliveryAddressLine", "ERROR");

+

+		if (VALIDATE_DELIVERY_ADDRESS_LINE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.AD);

+				try {

+					VALIDATE_DELIVERY_ADDRESS_LINE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_DELIVERY_ADDRESS_LINE__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_DELIVERY_ADDRESS_LINE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ad)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_DELIVERY_ADDRESS_LINE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(

+			ad)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -1238,7 +1360,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_DELIVERY_INSTALLATION_TYPE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_DELIVERY_INSTALLATION_TYPE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -1252,17 +1374,24 @@
 	 */

 	public static boolean validateDeliveryInstallationType(AD ad, DiagnosticChain diagnostics,

 			Map<Object, Object> context) {

-		if (VALIDATE_DELIVERY_INSTALLATION_TYPE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.AD);

-			try {

-				VALIDATE_DELIVERY_INSTALLATION_TYPE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_DELIVERY_INSTALLATION_TYPE__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "ADDeliveryInstallationType", "ERROR");

+

+		if (VALIDATE_DELIVERY_INSTALLATION_TYPE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.AD);

+				try {

+					VALIDATE_DELIVERY_INSTALLATION_TYPE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_DELIVERY_INSTALLATION_TYPE__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_DELIVERY_INSTALLATION_TYPE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ad)) {

+		if (!EOCL_ENV.get().createQuery(

+			VALIDATE_DELIVERY_INSTALLATION_TYPE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(ad)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -1298,7 +1427,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_DELIVERY_INSTALLATION_AREA__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_DELIVERY_INSTALLATION_AREA__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -1312,17 +1441,24 @@
 	 */

 	public static boolean validateDeliveryInstallationArea(AD ad, DiagnosticChain diagnostics,

 			Map<Object, Object> context) {

-		if (VALIDATE_DELIVERY_INSTALLATION_AREA__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.AD);

-			try {

-				VALIDATE_DELIVERY_INSTALLATION_AREA__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_DELIVERY_INSTALLATION_AREA__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "ADDeliveryInstallationArea", "ERROR");

+

+		if (VALIDATE_DELIVERY_INSTALLATION_AREA__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.AD);

+				try {

+					VALIDATE_DELIVERY_INSTALLATION_AREA__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_DELIVERY_INSTALLATION_AREA__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_DELIVERY_INSTALLATION_AREA__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ad)) {

+		if (!EOCL_ENV.get().createQuery(

+			VALIDATE_DELIVERY_INSTALLATION_AREA__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(ad)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -1358,7 +1494,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_DELIVERY_INSTALLATION_QUALIFIER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_DELIVERY_INSTALLATION_QUALIFIER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -1372,17 +1508,25 @@
 	 */

 	public static boolean validateDeliveryInstallationQualifier(AD ad, DiagnosticChain diagnostics,

 			Map<Object, Object> context) {

-		if (VALIDATE_DELIVERY_INSTALLATION_QUALIFIER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.AD);

-			try {

-				VALIDATE_DELIVERY_INSTALLATION_QUALIFIER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_DELIVERY_INSTALLATION_QUALIFIER__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "ADDeliveryInstallationQualifier", "ERROR");

+

+		if (VALIDATE_DELIVERY_INSTALLATION_QUALIFIER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.AD);

+				try {

+					VALIDATE_DELIVERY_INSTALLATION_QUALIFIER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(

+							VALIDATE_DELIVERY_INSTALLATION_QUALIFIER__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_DELIVERY_INSTALLATION_QUALIFIER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ad)) {

+		if (!EOCL_ENV.get().createQuery(

+			VALIDATE_DELIVERY_INSTALLATION_QUALIFIER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(ad)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -1418,7 +1562,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_DELIVERY_MODE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_DELIVERY_MODE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -1431,17 +1575,23 @@
 	 * @generated

 	 */

 	public static boolean validateDeliveryMode(AD ad, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_DELIVERY_MODE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.AD);

-			try {

-				VALIDATE_DELIVERY_MODE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_DELIVERY_MODE__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "ADDeliveryMode", "ERROR");

+

+		if (VALIDATE_DELIVERY_MODE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.AD);

+				try {

+					VALIDATE_DELIVERY_MODE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_DELIVERY_MODE__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_DELIVERY_MODE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ad)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_DELIVERY_MODE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(ad)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -1476,7 +1626,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_DELIVERY_MODE_IDENTIFIER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_DELIVERY_MODE_IDENTIFIER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -1490,17 +1640,24 @@
 	 */

 	public static boolean validateDeliveryModeIdentifier(AD ad, DiagnosticChain diagnostics,

 			Map<Object, Object> context) {

-		if (VALIDATE_DELIVERY_MODE_IDENTIFIER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.AD);

-			try {

-				VALIDATE_DELIVERY_MODE_IDENTIFIER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_DELIVERY_MODE_IDENTIFIER__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "ADDeliveryModeIdentifier", "ERROR");

+

+		if (VALIDATE_DELIVERY_MODE_IDENTIFIER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.AD);

+				try {

+					VALIDATE_DELIVERY_MODE_IDENTIFIER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_DELIVERY_MODE_IDENTIFIER__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_DELIVERY_MODE_IDENTIFIER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ad)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_DELIVERY_MODE_IDENTIFIER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(

+			ad)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -1536,7 +1693,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_BUILDING_NUMBER_SUFFIX__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_BUILDING_NUMBER_SUFFIX__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -1550,17 +1707,24 @@
 	 */

 	public static boolean validateBuildingNumberSuffix(AD ad, DiagnosticChain diagnostics,

 			Map<Object, Object> context) {

-		if (VALIDATE_BUILDING_NUMBER_SUFFIX__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.AD);

-			try {

-				VALIDATE_BUILDING_NUMBER_SUFFIX__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_BUILDING_NUMBER_SUFFIX__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "ADBuildingNumberSuffix", "ERROR");

+

+		if (VALIDATE_BUILDING_NUMBER_SUFFIX__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.AD);

+				try {

+					VALIDATE_BUILDING_NUMBER_SUFFIX__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_BUILDING_NUMBER_SUFFIX__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_BUILDING_NUMBER_SUFFIX__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ad)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_BUILDING_NUMBER_SUFFIX__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(

+			ad)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -1596,7 +1760,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_POST_BOX__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_POST_BOX__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -1609,17 +1773,23 @@
 	 * @generated

 	 */

 	public static boolean validatePostBox(AD ad, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_POST_BOX__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.AD);

-			try {

-				VALIDATE_POST_BOX__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_POST_BOX__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "ADPostBox", "ERROR");

+

+		if (VALIDATE_POST_BOX__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.AD);

+				try {

+					VALIDATE_POST_BOX__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_POST_BOX__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_POST_BOX__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ad)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_POST_BOX__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(ad)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -1654,7 +1824,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_PRECINCT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_PRECINCT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -1667,17 +1837,23 @@
 	 * @generated

 	 */

 	public static boolean validatePrecinct(AD ad, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_PRECINCT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.AD);

-			try {

-				VALIDATE_PRECINCT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_PRECINCT__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "ADPrecinct", "ERROR");

+

+		if (VALIDATE_PRECINCT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.AD);

+				try {

+					VALIDATE_PRECINCT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_PRECINCT__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_PRECINCT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ad)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_PRECINCT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(ad)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

diff --git a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/ANYOperations.java b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/ANYOperations.java
index bd19c1e..ef253d4 100644
--- a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/ANYOperations.java
+++ b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/ANYOperations.java
@@ -12,6 +12,7 @@
 

 import org.eclipse.emf.ecore.EStructuralFeature;

 import org.eclipse.mdht.uml.hl7.datatypes.ANY;

+import org.eclipse.ocl.ecore.OCL;

 

 /**

  * <!-- begin-user-doc -->

@@ -33,6 +34,20 @@
  */

 public class ANYOperations {

 	/**

+	 * The cached environment for evaluating OCL expressions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	protected static final ThreadLocal<OCL> EOCL_ENV = new ThreadLocal<OCL>() {

+		@Override

+		public OCL initialValue() {

+			return OCL.newInstance();

+		}

+	};

+

+	/**

 	 * <!-- begin-user-doc -->

 	 * <!-- end-user-doc -->

 	 * @generated

diff --git a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/BLOperations.java b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/BLOperations.java
index d955b63..77274ab 100644
--- a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/BLOperations.java
+++ b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/BLOperations.java
@@ -17,6 +17,7 @@
 import org.eclipse.emf.common.util.DiagnosticChain;

 import org.eclipse.mdht.uml.hl7.datatypes.BL;

 import org.eclipse.mdht.uml.hl7.datatypes.DatatypesPackage;

+import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesUtil;

 import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesValidator;

 import org.eclipse.ocl.ParserException;

 import org.eclipse.ocl.ecore.Constraint;

@@ -44,7 +45,12 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static final OCL EOCL_ENV = OCL.newInstance();

+	protected static final ThreadLocal<OCL> EOCL_ENV = new ThreadLocal<OCL>() {

+		@Override

+		public OCL initialValue() {

+			return OCL.newInstance();

+		}

+	};

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -73,7 +79,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_BL__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_BL__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -86,17 +92,23 @@
 	 * @generated

 	 */

 	public static boolean validateBL(BL bl, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_BL__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.BL);

-			try {

-				VALIDATE_BL__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_BL__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "BLBL", "ERROR");

+

+		if (VALIDATE_BL__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.BL);

+				try {

+					VALIDATE_BL__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_BL__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_BL__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(bl)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_BL__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(bl)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

diff --git a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/BNOperations.java b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/BNOperations.java
index a5e95a8..ab281a4 100644
--- a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/BNOperations.java
+++ b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/BNOperations.java
@@ -17,6 +17,7 @@
 import org.eclipse.emf.common.util.DiagnosticChain;

 import org.eclipse.mdht.uml.hl7.datatypes.BN;

 import org.eclipse.mdht.uml.hl7.datatypes.DatatypesPackage;

+import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesUtil;

 import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesValidator;

 import org.eclipse.ocl.ParserException;

 import org.eclipse.ocl.ecore.Constraint;

@@ -38,6 +39,20 @@
  */

 public class BNOperations extends BLOperations {

 	/**

+	 * The cached environment for evaluating OCL expressions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	protected static final ThreadLocal<OCL> EOCL_ENV = new ThreadLocal<OCL>() {

+		@Override

+		public OCL initialValue() {

+			return OCL.newInstance();

+		}

+	};

+

+	/**

 	 * <!-- begin-user-doc -->

 	 * <!-- end-user-doc -->

 	 * @generated

@@ -64,7 +79,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_NULL_FLAVOR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_NULL_FLAVOR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -77,17 +92,23 @@
 	 * @generated

 	 */

 	public static boolean validateNullFlavor(BN bn, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_NULL_FLAVOR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.BN);

-			try {

-				VALIDATE_NULL_FLAVOR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_NULL_FLAVOR__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "BNNullFlavor", "ERROR");

+

+		if (VALIDATE_NULL_FLAVOR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.BN);

+				try {

+					VALIDATE_NULL_FLAVOR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_NULL_FLAVOR__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_NULL_FLAVOR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(bn)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_NULL_FLAVOR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(bn)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

diff --git a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/CEOperations.java b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/CEOperations.java
index 2932662..28c4149 100644
--- a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/CEOperations.java
+++ b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/CEOperations.java
@@ -17,6 +17,7 @@
 import org.eclipse.emf.common.util.DiagnosticChain;

 import org.eclipse.mdht.uml.hl7.datatypes.CE;

 import org.eclipse.mdht.uml.hl7.datatypes.DatatypesPackage;

+import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesUtil;

 import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesValidator;

 import org.eclipse.ocl.ParserException;

 import org.eclipse.ocl.ecore.Constraint;

@@ -44,7 +45,12 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static final OCL EOCL_ENV = OCL.newInstance();

+	protected static final ThreadLocal<OCL> EOCL_ENV = new ThreadLocal<OCL>() {

+		@Override

+		public OCL initialValue() {

+			return OCL.newInstance();

+		}

+	};

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -73,7 +79,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_QUALIFIER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_QUALIFIER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -86,17 +92,23 @@
 	 * @generated

 	 */

 	public static boolean validateQualifier(CE ce, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_QUALIFIER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.CE);

-			try {

-				VALIDATE_QUALIFIER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_QUALIFIER__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "CEQualifier", "ERROR");

+

+		if (VALIDATE_QUALIFIER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.CE);

+				try {

+					VALIDATE_QUALIFIER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_QUALIFIER__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_QUALIFIER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ce)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_QUALIFIER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(ce)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

diff --git a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/CROperations.java b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/CROperations.java
index 00343df..9d0ae7b 100644
--- a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/CROperations.java
+++ b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/CROperations.java
@@ -17,6 +17,7 @@
 import org.eclipse.emf.common.util.DiagnosticChain;

 import org.eclipse.mdht.uml.hl7.datatypes.CR;

 import org.eclipse.mdht.uml.hl7.datatypes.DatatypesPackage;

+import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesUtil;

 import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesValidator;

 import org.eclipse.ocl.ParserException;

 import org.eclipse.ocl.ecore.Constraint;

@@ -44,7 +45,12 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static final OCL EOCL_ENV = OCL.newInstance();

+	protected static final ThreadLocal<OCL> EOCL_ENV = new ThreadLocal<OCL>() {

+		@Override

+		public OCL initialValue() {

+			return OCL.newInstance();

+		}

+	};

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -73,7 +79,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_CR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_CR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -86,17 +92,23 @@
 	 * @generated

 	 */

 	public static boolean validateCR(CR cr, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_CR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.CR);

-			try {

-				VALIDATE_CR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_CR__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "CRCR", "ERROR");

+

+		if (VALIDATE_CR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.CR);

+				try {

+					VALIDATE_CR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_CR__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_CR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(cr)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_CR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(cr)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

diff --git a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/CSOperations.java b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/CSOperations.java
index 297d4d0..308c407 100644
--- a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/CSOperations.java
+++ b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/CSOperations.java
@@ -17,6 +17,7 @@
 import org.eclipse.emf.common.util.DiagnosticChain;

 import org.eclipse.mdht.uml.hl7.datatypes.CS;

 import org.eclipse.mdht.uml.hl7.datatypes.DatatypesPackage;

+import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesUtil;

 import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesValidator;

 import org.eclipse.ocl.ParserException;

 import org.eclipse.ocl.ecore.Constraint;

@@ -42,6 +43,20 @@
  */

 public class CSOperations extends CVOperations {

 	/**

+	 * The cached environment for evaluating OCL expressions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	protected static final ThreadLocal<OCL> EOCL_ENV = new ThreadLocal<OCL>() {

+		@Override

+		public OCL initialValue() {

+			return OCL.newInstance();

+		}

+	};

+

+	/**

 	 * <!-- begin-user-doc -->

 	 * <!-- end-user-doc -->

 	 * @generated

@@ -68,7 +83,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_ORIGINAL_TEXT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_ORIGINAL_TEXT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -81,17 +96,23 @@
 	 * @generated

 	 */

 	public static boolean validateOriginalText(CS cs, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_ORIGINAL_TEXT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.CS);

-			try {

-				VALIDATE_ORIGINAL_TEXT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_ORIGINAL_TEXT__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "CSOriginalText", "ERROR");

+

+		if (VALIDATE_ORIGINAL_TEXT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.CS);

+				try {

+					VALIDATE_ORIGINAL_TEXT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_ORIGINAL_TEXT__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_ORIGINAL_TEXT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(cs)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_ORIGINAL_TEXT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(cs)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -126,7 +147,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_CODE_SYSTEM__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_CODE_SYSTEM__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -139,17 +160,23 @@
 	 * @generated

 	 */

 	public static boolean validateCodeSystem(CS cs, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_CODE_SYSTEM__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.CS);

-			try {

-				VALIDATE_CODE_SYSTEM__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_CODE_SYSTEM__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "CSCodeSystem", "ERROR");

+

+		if (VALIDATE_CODE_SYSTEM__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.CS);

+				try {

+					VALIDATE_CODE_SYSTEM__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_CODE_SYSTEM__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_CODE_SYSTEM__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(cs)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_CODE_SYSTEM__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(cs)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -184,7 +211,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_CODE_SYSTEM_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_CODE_SYSTEM_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -197,17 +224,23 @@
 	 * @generated

 	 */

 	public static boolean validateCodeSystemName(CS cs, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_CODE_SYSTEM_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.CS);

-			try {

-				VALIDATE_CODE_SYSTEM_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_CODE_SYSTEM_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "CSCodeSystemName", "ERROR");

+

+		if (VALIDATE_CODE_SYSTEM_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.CS);

+				try {

+					VALIDATE_CODE_SYSTEM_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_CODE_SYSTEM_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_CODE_SYSTEM_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(cs)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_CODE_SYSTEM_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(cs)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -242,7 +275,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_CODE_SYSTEM_VERSION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_CODE_SYSTEM_VERSION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -255,17 +288,23 @@
 	 * @generated

 	 */

 	public static boolean validateCodeSystemVersion(CS cs, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_CODE_SYSTEM_VERSION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.CS);

-			try {

-				VALIDATE_CODE_SYSTEM_VERSION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_CODE_SYSTEM_VERSION__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "CSCodeSystemVersion", "ERROR");

+

+		if (VALIDATE_CODE_SYSTEM_VERSION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.CS);

+				try {

+					VALIDATE_CODE_SYSTEM_VERSION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_CODE_SYSTEM_VERSION__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_CODE_SYSTEM_VERSION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(cs)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_CODE_SYSTEM_VERSION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(cs)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -301,7 +340,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_DISPLAY_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_DISPLAY_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -314,17 +353,23 @@
 	 * @generated

 	 */

 	public static boolean validateDisplayName(CS cs, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_DISPLAY_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.CS);

-			try {

-				VALIDATE_DISPLAY_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_DISPLAY_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "CSDisplayName", "ERROR");

+

+		if (VALIDATE_DISPLAY_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.CS);

+				try {

+					VALIDATE_DISPLAY_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_DISPLAY_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_DISPLAY_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(cs)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_DISPLAY_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(cs)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

diff --git a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/CVOperations.java b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/CVOperations.java
index 680a73e..5d16795 100644
--- a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/CVOperations.java
+++ b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/CVOperations.java
@@ -17,6 +17,7 @@
 import org.eclipse.emf.common.util.DiagnosticChain;

 import org.eclipse.mdht.uml.hl7.datatypes.CV;

 import org.eclipse.mdht.uml.hl7.datatypes.DatatypesPackage;

+import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesUtil;

 import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesValidator;

 import org.eclipse.ocl.ParserException;

 import org.eclipse.ocl.ecore.Constraint;

@@ -38,6 +39,20 @@
  */

 public class CVOperations extends CEOperations {

 	/**

+	 * The cached environment for evaluating OCL expressions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	protected static final ThreadLocal<OCL> EOCL_ENV = new ThreadLocal<OCL>() {

+		@Override

+		public OCL initialValue() {

+			return OCL.newInstance();

+		}

+	};

+

+	/**

 	 * <!-- begin-user-doc -->

 	 * <!-- end-user-doc -->

 	 * @generated

@@ -64,7 +79,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_TRANSLATION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_TRANSLATION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -77,17 +92,23 @@
 	 * @generated

 	 */

 	public static boolean validateTranslation(CV cv, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_TRANSLATION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.CV);

-			try {

-				VALIDATE_TRANSLATION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_TRANSLATION__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "CVTranslation", "ERROR");

+

+		if (VALIDATE_TRANSLATION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.CV);

+				try {

+					VALIDATE_TRANSLATION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_TRANSLATION__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_TRANSLATION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(cv)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_TRANSLATION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(cv)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

diff --git a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/EDOperations.java b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/EDOperations.java
index 74a6ea4..72ceff1 100644
--- a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/EDOperations.java
+++ b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/EDOperations.java
@@ -19,6 +19,7 @@
 import org.eclipse.emf.ecore.util.FeatureMapUtil;

 import org.eclipse.mdht.uml.hl7.datatypes.DatatypesPackage;

 import org.eclipse.mdht.uml.hl7.datatypes.ED;

+import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesUtil;

 import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesValidator;

 import org.eclipse.ocl.ParserException;

 import org.eclipse.ocl.ecore.Constraint;

@@ -51,7 +52,12 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static final OCL EOCL_ENV = OCL.newInstance();

+	protected static final ThreadLocal<OCL> EOCL_ENV = new ThreadLocal<OCL>() {

+		@Override

+		public OCL initialValue() {

+			return OCL.newInstance();

+		}

+	};

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -80,7 +86,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_THUMBNAIL_THUMBNAIL__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_THUMBNAIL_THUMBNAIL__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -93,17 +99,23 @@
 	 * @generated

 	 */

 	public static boolean validateThumbnailThumbnail(ED ed, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_THUMBNAIL_THUMBNAIL__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.ED);

-			try {

-				VALIDATE_THUMBNAIL_THUMBNAIL__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_THUMBNAIL_THUMBNAIL__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "EDThumbnailThumbnail", "ERROR");

+

+		if (VALIDATE_THUMBNAIL_THUMBNAIL__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.ED);

+				try {

+					VALIDATE_THUMBNAIL_THUMBNAIL__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_THUMBNAIL_THUMBNAIL__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_THUMBNAIL_THUMBNAIL__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ed)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_THUMBNAIL_THUMBNAIL__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(ed)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

diff --git a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/EIVL_eventOperations.java b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/EIVL_eventOperations.java
index 50a8082..ace9694 100644
--- a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/EIVL_eventOperations.java
+++ b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/EIVL_eventOperations.java
@@ -17,6 +17,7 @@
 import org.eclipse.emf.common.util.DiagnosticChain;

 import org.eclipse.mdht.uml.hl7.datatypes.DatatypesPackage;

 import org.eclipse.mdht.uml.hl7.datatypes.EIVL_event;

+import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesUtil;

 import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesValidator;

 import org.eclipse.mdht.uml.hl7.vocab.TimingEvent;

 import org.eclipse.ocl.ParserException;

@@ -44,6 +45,20 @@
  */

 public class EIVL_eventOperations extends CEOperations {

 	/**

+	 * The cached environment for evaluating OCL expressions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	protected static final ThreadLocal<OCL> EOCL_ENV = new ThreadLocal<OCL>() {

+		@Override

+		public OCL initialValue() {

+			return OCL.newInstance();

+		}

+	};

+

+	/**

 	 * <!-- begin-user-doc -->

 	 * <!-- end-user-doc -->

 	 * @generated

@@ -70,7 +85,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_ORIGINAL_TEXT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_ORIGINAL_TEXT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -84,17 +99,24 @@
 	 */

 	public static boolean validateOriginalText(EIVL_event eivL_event, DiagnosticChain diagnostics,

 			Map<Object, Object> context) {

-		if (VALIDATE_ORIGINAL_TEXT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.EIVL_EVENT);

-			try {

-				VALIDATE_ORIGINAL_TEXT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_ORIGINAL_TEXT__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "EIVL_eventOriginalText", "ERROR");

+

+		if (VALIDATE_ORIGINAL_TEXT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.EIVL_EVENT);

+				try {

+					VALIDATE_ORIGINAL_TEXT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_ORIGINAL_TEXT__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_ORIGINAL_TEXT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(eivL_event)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_ORIGINAL_TEXT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(

+			eivL_event)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -130,7 +152,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_TRANSLATION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_TRANSLATION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -144,17 +166,23 @@
 	 */

 	public static boolean validateTranslation(EIVL_event eivL_event, DiagnosticChain diagnostics,

 			Map<Object, Object> context) {

-		if (VALIDATE_TRANSLATION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.EIVL_EVENT);

-			try {

-				VALIDATE_TRANSLATION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_TRANSLATION__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "EIVL_eventTranslation", "ERROR");

+

+		if (VALIDATE_TRANSLATION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.EIVL_EVENT);

+				try {

+					VALIDATE_TRANSLATION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_TRANSLATION__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_TRANSLATION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(eivL_event)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_TRANSLATION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(eivL_event)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -190,7 +218,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_CODE_SYSTEM__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_CODE_SYSTEM__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -204,17 +232,23 @@
 	 */

 	public static boolean validateCodeSystem(EIVL_event eivL_event, DiagnosticChain diagnostics,

 			Map<Object, Object> context) {

-		if (VALIDATE_CODE_SYSTEM__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.EIVL_EVENT);

-			try {

-				VALIDATE_CODE_SYSTEM__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_CODE_SYSTEM__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "EIVL_eventCodeSystem", "ERROR");

+

+		if (VALIDATE_CODE_SYSTEM__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.EIVL_EVENT);

+				try {

+					VALIDATE_CODE_SYSTEM__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_CODE_SYSTEM__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_CODE_SYSTEM__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(eivL_event)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_CODE_SYSTEM__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(eivL_event)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -250,7 +284,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_CODE_SYSTEM_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_CODE_SYSTEM_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -264,17 +298,24 @@
 	 */

 	public static boolean validateCodeSystemName(EIVL_event eivL_event, DiagnosticChain diagnostics,

 			Map<Object, Object> context) {

-		if (VALIDATE_CODE_SYSTEM_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.EIVL_EVENT);

-			try {

-				VALIDATE_CODE_SYSTEM_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_CODE_SYSTEM_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "EIVL_eventCodeSystemName", "ERROR");

+

+		if (VALIDATE_CODE_SYSTEM_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.EIVL_EVENT);

+				try {

+					VALIDATE_CODE_SYSTEM_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_CODE_SYSTEM_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_CODE_SYSTEM_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(eivL_event)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_CODE_SYSTEM_NAME__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(

+			eivL_event)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

diff --git a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/ENOperations.java b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/ENOperations.java
index c862f5b..4ec1169 100644
--- a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/ENOperations.java
+++ b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/ENOperations.java
@@ -20,6 +20,7 @@
 import org.eclipse.mdht.uml.hl7.datatypes.DatatypesFactory;

 import org.eclipse.mdht.uml.hl7.datatypes.DatatypesPackage;

 import org.eclipse.mdht.uml.hl7.datatypes.EN;

+import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesUtil;

 import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesValidator;

 import org.eclipse.mdht.uml.hl7.vocab.EntityNamePartType;

 import org.eclipse.ocl.ParserException;

@@ -60,7 +61,12 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static final OCL EOCL_ENV = OCL.newInstance();

+	protected static final ThreadLocal<OCL> EOCL_ENV = new ThreadLocal<OCL>() {

+		@Override

+		public OCL initialValue() {

+			return OCL.newInstance();

+		}

+	};

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -89,7 +95,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_DELIMITER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_DELIMITER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -102,17 +108,23 @@
 	 * @generated

 	 */

 	public static boolean validateDelimiter(EN en, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_DELIMITER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.EN);

-			try {

-				VALIDATE_DELIMITER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_DELIMITER__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "ENDelimiter", "ERROR");

+

+		if (VALIDATE_DELIMITER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.EN);

+				try {

+					VALIDATE_DELIMITER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_DELIMITER__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_DELIMITER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(en)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_DELIMITER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(en)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -147,7 +159,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_FAMILY__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_FAMILY__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -160,17 +172,23 @@
 	 * @generated

 	 */

 	public static boolean validateFamily(EN en, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_FAMILY__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.EN);

-			try {

-				VALIDATE_FAMILY__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_FAMILY__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "ENFamily", "ERROR");

+

+		if (VALIDATE_FAMILY__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.EN);

+				try {

+					VALIDATE_FAMILY__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_FAMILY__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_FAMILY__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(en)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_FAMILY__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(en)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -205,7 +223,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_GIVEN__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_GIVEN__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -218,17 +236,23 @@
 	 * @generated

 	 */

 	public static boolean validateGiven(EN en, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_GIVEN__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.EN);

-			try {

-				VALIDATE_GIVEN__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_GIVEN__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "ENGiven", "ERROR");

+

+		if (VALIDATE_GIVEN__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.EN);

+				try {

+					VALIDATE_GIVEN__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_GIVEN__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_GIVEN__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(en)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_GIVEN__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(en)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -263,7 +287,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_PREFIX__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_PREFIX__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -276,17 +300,23 @@
 	 * @generated

 	 */

 	public static boolean validatePrefix(EN en, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_PREFIX__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.EN);

-			try {

-				VALIDATE_PREFIX__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_PREFIX__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "ENPrefix", "ERROR");

+

+		if (VALIDATE_PREFIX__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.EN);

+				try {

+					VALIDATE_PREFIX__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_PREFIX__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_PREFIX__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(en)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_PREFIX__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(en)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -321,7 +351,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_SUFFIX__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_SUFFIX__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -334,17 +364,23 @@
 	 * @generated

 	 */

 	public static boolean validateSuffix(EN en, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_SUFFIX__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.EN);

-			try {

-				VALIDATE_SUFFIX__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_SUFFIX__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "ENSuffix", "ERROR");

+

+		if (VALIDATE_SUFFIX__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.EN);

+				try {

+					VALIDATE_SUFFIX__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_SUFFIX__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_SUFFIX__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(en)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_SUFFIX__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(en)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

diff --git a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/IIOperations.java b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/IIOperations.java
index b3db773..2d6d340 100644
--- a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/IIOperations.java
+++ b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/IIOperations.java
@@ -17,6 +17,7 @@
 import org.eclipse.emf.common.util.DiagnosticChain;

 import org.eclipse.mdht.uml.hl7.datatypes.DatatypesPackage;

 import org.eclipse.mdht.uml.hl7.datatypes.II;

+import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesUtil;

 import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesValidator;

 import org.eclipse.ocl.ParserException;

 import org.eclipse.ocl.ecore.Constraint;

@@ -44,7 +45,12 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static final OCL EOCL_ENV = OCL.newInstance();

+	protected static final ThreadLocal<OCL> EOCL_ENV = new ThreadLocal<OCL>() {

+		@Override

+		public OCL initialValue() {

+			return OCL.newInstance();

+		}

+	};

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -73,7 +79,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_II__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_II__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -86,17 +92,23 @@
 	 * @generated

 	 */

 	public static boolean validateII(II ii, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_II__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.II);

-			try {

-				VALIDATE_II__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_II__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "IIII", "ERROR");

+

+		if (VALIDATE_II__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.II);

+				try {

+					VALIDATE_II__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_II__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_II__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ii)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_II__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(ii)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

diff --git a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/INTOperations.java b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/INTOperations.java
index 449af62..60b4c5c 100644
--- a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/INTOperations.java
+++ b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/INTOperations.java
@@ -18,6 +18,7 @@
 import org.eclipse.emf.common.util.DiagnosticChain;

 import org.eclipse.mdht.uml.hl7.datatypes.DatatypesPackage;

 import org.eclipse.mdht.uml.hl7.datatypes.INT;

+import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesUtil;

 import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesValidator;

 import org.eclipse.ocl.ParserException;

 import org.eclipse.ocl.ecore.Constraint;

@@ -46,7 +47,12 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static final OCL EOCL_ENV = OCL.newInstance();

+	protected static final ThreadLocal<OCL> EOCL_ENV = new ThreadLocal<OCL>() {

+		@Override

+		public OCL initialValue() {

+			return OCL.newInstance();

+		}

+	};

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -75,7 +81,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_INT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_INT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -88,17 +94,23 @@
 	 * @generated

 	 */

 	public static boolean validateINT(INT int_, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_INT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.INT);

-			try {

-				VALIDATE_INT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_INT__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "INTINT", "ERROR");

+

+		if (VALIDATE_INT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.INT);

+				try {

+					VALIDATE_INT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_INT__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_INT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(int_)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_INT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(int_)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

diff --git a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/IVL_INTOperations.java b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/IVL_INTOperations.java
index 789ba5e..d51348f 100644
--- a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/IVL_INTOperations.java
+++ b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/IVL_INTOperations.java
@@ -17,6 +17,7 @@
 import org.eclipse.emf.common.util.DiagnosticChain;

 import org.eclipse.mdht.uml.hl7.datatypes.DatatypesPackage;

 import org.eclipse.mdht.uml.hl7.datatypes.IVL_INT;

+import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesUtil;

 import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesValidator;

 import org.eclipse.ocl.ParserException;

 import org.eclipse.ocl.ecore.Constraint;

@@ -42,6 +43,20 @@
  */

 public class IVL_INTOperations extends INTOperations {

 	/**

+	 * The cached environment for evaluating OCL expressions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	protected static final ThreadLocal<OCL> EOCL_ENV = new ThreadLocal<OCL>() {

+		@Override

+		public OCL initialValue() {

+			return OCL.newInstance();

+		}

+	};

+

+	/**

 	 * <!-- begin-user-doc -->

 	 * <!-- end-user-doc -->

 	 * @generated

@@ -68,7 +83,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -82,17 +97,24 @@
 	 */

 	public static boolean validateOptionsContainingLow(IVL_INT ivL_INT, DiagnosticChain diagnostics,

 			Map<Object, Object> context) {

-		if (VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.IVL_INT);

-			try {

-				VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "IVL_INTOptionsContainingLow", "ERROR");

+

+		if (VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.IVL_INT);

+				try {

+					VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ivL_INT)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(

+			ivL_INT)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -128,7 +150,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -142,17 +164,24 @@
 	 */

 	public static boolean validateOptionsContainingCenter(IVL_INT ivL_INT, DiagnosticChain diagnostics,

 			Map<Object, Object> context) {

-		if (VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.IVL_INT);

-			try {

-				VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "IVL_INTOptionsContainingCenter", "ERROR");

+

+		if (VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.IVL_INT);

+				try {

+					VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ivL_INT)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(

+			ivL_INT)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -188,7 +217,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -202,17 +231,24 @@
 	 */

 	public static boolean validateOptionsContainingHigh(IVL_INT ivL_INT, DiagnosticChain diagnostics,

 			Map<Object, Object> context) {

-		if (VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.IVL_INT);

-			try {

-				VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "IVL_INTOptionsContainingHigh", "ERROR");

+

+		if (VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.IVL_INT);

+				try {

+					VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ivL_INT)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(

+			ivL_INT)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -248,7 +284,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -262,17 +298,24 @@
 	 */

 	public static boolean validateOptionsContainingWidth(IVL_INT ivL_INT, DiagnosticChain diagnostics,

 			Map<Object, Object> context) {

-		if (VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.IVL_INT);

-			try {

-				VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "IVL_INTOptionsContainingWidth", "ERROR");

+

+		if (VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.IVL_INT);

+				try {

+					VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ivL_INT)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(

+			ivL_INT)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

diff --git a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/IVL_PQOperations.java b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/IVL_PQOperations.java
index 93c64f3..117f558 100644
--- a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/IVL_PQOperations.java
+++ b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/IVL_PQOperations.java
@@ -17,6 +17,7 @@
 import org.eclipse.emf.common.util.DiagnosticChain;

 import org.eclipse.mdht.uml.hl7.datatypes.DatatypesPackage;

 import org.eclipse.mdht.uml.hl7.datatypes.IVL_PQ;

+import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesUtil;

 import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesValidator;

 import org.eclipse.ocl.ParserException;

 import org.eclipse.ocl.ecore.Constraint;

@@ -47,7 +48,12 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static final OCL EOCL_ENV = OCL.newInstance();

+	protected static final ThreadLocal<OCL> EOCL_ENV = new ThreadLocal<OCL>() {

+		@Override

+		public OCL initialValue() {

+			return OCL.newInstance();

+		}

+	};

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -76,7 +82,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -90,17 +96,24 @@
 	 */

 	public static boolean validateOptionsContainingLow(IVL_PQ ivL_PQ, DiagnosticChain diagnostics,

 			Map<Object, Object> context) {

-		if (VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.IVL_PQ);

-			try {

-				VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "IVL_PQOptionsContainingLow", "ERROR");

+

+		if (VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.IVL_PQ);

+				try {

+					VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ivL_PQ)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(

+			ivL_PQ)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -136,7 +149,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -150,17 +163,24 @@
 	 */

 	public static boolean validateOptionsContainingCenter(IVL_PQ ivL_PQ, DiagnosticChain diagnostics,

 			Map<Object, Object> context) {

-		if (VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.IVL_PQ);

-			try {

-				VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "IVL_PQOptionsContainingCenter", "ERROR");

+

+		if (VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.IVL_PQ);

+				try {

+					VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ivL_PQ)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(

+			ivL_PQ)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -196,7 +216,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -210,17 +230,24 @@
 	 */

 	public static boolean validateOptionsContainingHigh(IVL_PQ ivL_PQ, DiagnosticChain diagnostics,

 			Map<Object, Object> context) {

-		if (VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.IVL_PQ);

-			try {

-				VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "IVL_PQOptionsContainingHigh", "ERROR");

+

+		if (VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.IVL_PQ);

+				try {

+					VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ivL_PQ)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(

+			ivL_PQ)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -256,7 +283,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -270,17 +297,24 @@
 	 */

 	public static boolean validateOptionsContainingWidth(IVL_PQ ivL_PQ, DiagnosticChain diagnostics,

 			Map<Object, Object> context) {

-		if (VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.IVL_PQ);

-			try {

-				VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "IVL_PQOptionsContainingWidth", "ERROR");

+

+		if (VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.IVL_PQ);

+				try {

+					VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ivL_PQ)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(

+			ivL_PQ)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

diff --git a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/IVL_REALOperations.java b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/IVL_REALOperations.java
index d3f4cf1..1034f6b 100644
--- a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/IVL_REALOperations.java
+++ b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/IVL_REALOperations.java
@@ -11,6 +11,7 @@
 import org.eclipse.mdht.uml.hl7.datatypes.DatatypesPackage;
 import org.eclipse.mdht.uml.hl7.datatypes.IVL_REAL;
 
+import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesUtil;
 import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesValidator;
 
 import org.eclipse.ocl.ParserException;
@@ -43,7 +44,12 @@
 	 * @generated
 	 * @ordered
 	 */
-	protected static final OCL EOCL_ENV = OCL.newInstance();
+	protected static final ThreadLocal<OCL> EOCL_ENV = new ThreadLocal<OCL>() {
+		@Override
+		public OCL initialValue() {
+			return OCL.newInstance();
+		}
+	};
 
 	/**
 	 * <!-- begin-user-doc -->
@@ -72,7 +78,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	protected static Constraint VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;
+	protected static ThreadLocal<Constraint> VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();
 
 	/**
 	 * <!-- begin-user-doc -->
@@ -86,17 +92,24 @@
 	 */
 	public static boolean validateOptionsContainingLow(IVL_REAL ivL_REAL, DiagnosticChain diagnostics,
 			Map<Object, Object> context) {
-		if (VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {
-			OCL.Helper helper = EOCL_ENV.createOCLHelper();
-			helper.setContext(DatatypesPackage.Literals.IVL_REAL);
-			try {
-				VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(
-					VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);
-			} catch (ParserException pe) {
-				throw new UnsupportedOperationException(pe.getLocalizedMessage());
+
+		DatatypesUtil.increment(context, "IVL_REALOptionsContainingLow", "ERROR");
+
+		if (VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {
+
+			synchronized (EOCL_ENV) {
+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();
+				helper.setContext(DatatypesPackage.Literals.IVL_REAL);
+				try {
+					VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(
+						helper.createInvariant(VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));
+				} catch (ParserException pe) {
+					throw new UnsupportedOperationException(pe.getLocalizedMessage());
+				}
 			}
 		}
-		if (!EOCL_ENV.createQuery(VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ivL_REAL)) {
+		if (!EOCL_ENV.get().createQuery(VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(
+			ivL_REAL)) {
 			if (diagnostics != null) {
 				diagnostics.add(
 					new BasicDiagnostic(
@@ -132,7 +145,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	protected static Constraint VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;
+	protected static ThreadLocal<Constraint> VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();
 
 	/**
 	 * <!-- begin-user-doc -->
@@ -146,17 +159,24 @@
 	 */
 	public static boolean validateOptionsContainingCenter(IVL_REAL ivL_REAL, DiagnosticChain diagnostics,
 			Map<Object, Object> context) {
-		if (VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {
-			OCL.Helper helper = EOCL_ENV.createOCLHelper();
-			helper.setContext(DatatypesPackage.Literals.IVL_REAL);
-			try {
-				VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(
-					VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);
-			} catch (ParserException pe) {
-				throw new UnsupportedOperationException(pe.getLocalizedMessage());
+
+		DatatypesUtil.increment(context, "IVL_REALOptionsContainingCenter", "ERROR");
+
+		if (VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {
+
+			synchronized (EOCL_ENV) {
+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();
+				helper.setContext(DatatypesPackage.Literals.IVL_REAL);
+				try {
+					VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(
+						helper.createInvariant(VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));
+				} catch (ParserException pe) {
+					throw new UnsupportedOperationException(pe.getLocalizedMessage());
+				}
 			}
 		}
-		if (!EOCL_ENV.createQuery(VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ivL_REAL)) {
+		if (!EOCL_ENV.get().createQuery(VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(
+			ivL_REAL)) {
 			if (diagnostics != null) {
 				diagnostics.add(
 					new BasicDiagnostic(
@@ -192,7 +212,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	protected static Constraint VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;
+	protected static ThreadLocal<Constraint> VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();
 
 	/**
 	 * <!-- begin-user-doc -->
@@ -206,17 +226,24 @@
 	 */
 	public static boolean validateOptionsContainingHigh(IVL_REAL ivL_REAL, DiagnosticChain diagnostics,
 			Map<Object, Object> context) {
-		if (VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {
-			OCL.Helper helper = EOCL_ENV.createOCLHelper();
-			helper.setContext(DatatypesPackage.Literals.IVL_REAL);
-			try {
-				VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(
-					VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);
-			} catch (ParserException pe) {
-				throw new UnsupportedOperationException(pe.getLocalizedMessage());
+
+		DatatypesUtil.increment(context, "IVL_REALOptionsContainingHigh", "ERROR");
+
+		if (VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {
+
+			synchronized (EOCL_ENV) {
+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();
+				helper.setContext(DatatypesPackage.Literals.IVL_REAL);
+				try {
+					VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(
+						helper.createInvariant(VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));
+				} catch (ParserException pe) {
+					throw new UnsupportedOperationException(pe.getLocalizedMessage());
+				}
 			}
 		}
-		if (!EOCL_ENV.createQuery(VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ivL_REAL)) {
+		if (!EOCL_ENV.get().createQuery(VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(
+			ivL_REAL)) {
 			if (diagnostics != null) {
 				diagnostics.add(
 					new BasicDiagnostic(
@@ -252,7 +279,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	protected static Constraint VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;
+	protected static ThreadLocal<Constraint> VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();
 
 	/**
 	 * <!-- begin-user-doc -->
@@ -266,17 +293,24 @@
 	 */
 	public static boolean validateOptionsContainingWidth(IVL_REAL ivL_REAL, DiagnosticChain diagnostics,
 			Map<Object, Object> context) {
-		if (VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {
-			OCL.Helper helper = EOCL_ENV.createOCLHelper();
-			helper.setContext(DatatypesPackage.Literals.IVL_REAL);
-			try {
-				VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(
-					VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);
-			} catch (ParserException pe) {
-				throw new UnsupportedOperationException(pe.getLocalizedMessage());
+
+		DatatypesUtil.increment(context, "IVL_REALOptionsContainingWidth", "ERROR");
+
+		if (VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {
+
+			synchronized (EOCL_ENV) {
+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();
+				helper.setContext(DatatypesPackage.Literals.IVL_REAL);
+				try {
+					VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(
+						helper.createInvariant(VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));
+				} catch (ParserException pe) {
+					throw new UnsupportedOperationException(pe.getLocalizedMessage());
+				}
 			}
 		}
-		if (!EOCL_ENV.createQuery(VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ivL_REAL)) {
+		if (!EOCL_ENV.get().createQuery(VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(
+			ivL_REAL)) {
 			if (diagnostics != null) {
 				diagnostics.add(
 					new BasicDiagnostic(
diff --git a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/IVL_TSOperations.java b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/IVL_TSOperations.java
index b18559b..a25784f 100644
--- a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/IVL_TSOperations.java
+++ b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/IVL_TSOperations.java
@@ -17,6 +17,7 @@
 import org.eclipse.emf.common.util.DiagnosticChain;

 import org.eclipse.mdht.uml.hl7.datatypes.DatatypesPackage;

 import org.eclipse.mdht.uml.hl7.datatypes.IVL_TS;

+import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesUtil;

 import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesValidator;

 import org.eclipse.ocl.ParserException;

 import org.eclipse.ocl.ecore.Constraint;

@@ -47,7 +48,12 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static final OCL EOCL_ENV = OCL.newInstance();

+	protected static final ThreadLocal<OCL> EOCL_ENV = new ThreadLocal<OCL>() {

+		@Override

+		public OCL initialValue() {

+			return OCL.newInstance();

+		}

+	};

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -76,7 +82,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -90,17 +96,24 @@
 	 */

 	public static boolean validateOptionsContainingLow(IVL_TS ivL_TS, DiagnosticChain diagnostics,

 			Map<Object, Object> context) {

-		if (VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.IVL_TS);

-			try {

-				VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "IVL_TSOptionsContainingLow", "ERROR");

+

+		if (VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.IVL_TS);

+				try {

+					VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ivL_TS)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_OPTIONS_CONTAINING_LOW__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(

+			ivL_TS)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -136,7 +149,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -150,17 +163,24 @@
 	 */

 	public static boolean validateOptionsContainingCenter(IVL_TS ivL_TS, DiagnosticChain diagnostics,

 			Map<Object, Object> context) {

-		if (VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.IVL_TS);

-			try {

-				VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "IVL_TSOptionsContainingCenter", "ERROR");

+

+		if (VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.IVL_TS);

+				try {

+					VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ivL_TS)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_OPTIONS_CONTAINING_CENTER__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(

+			ivL_TS)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -196,7 +216,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -210,17 +230,24 @@
 	 */

 	public static boolean validateOptionsContainingHigh(IVL_TS ivL_TS, DiagnosticChain diagnostics,

 			Map<Object, Object> context) {

-		if (VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.IVL_TS);

-			try {

-				VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "IVL_TSOptionsContainingHigh", "ERROR");

+

+		if (VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.IVL_TS);

+				try {

+					VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ivL_TS)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_OPTIONS_CONTAINING_HIGH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(

+			ivL_TS)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -256,7 +283,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -270,17 +297,24 @@
 	 */

 	public static boolean validateOptionsContainingWidth(IVL_TS ivL_TS, DiagnosticChain diagnostics,

 			Map<Object, Object> context) {

-		if (VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.IVL_TS);

-			try {

-				VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "IVL_TSOptionsContainingWidth", "ERROR");

+

+		if (VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.IVL_TS);

+				try {

+					VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(ivL_TS)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_OPTIONS_CONTAINING_WIDTH__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(

+			ivL_TS)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

diff --git a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/MOOperations.java b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/MOOperations.java
index f488ba9..7a5569a 100644
--- a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/MOOperations.java
+++ b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/MOOperations.java
@@ -18,6 +18,7 @@
 import org.eclipse.emf.common.util.DiagnosticChain;

 import org.eclipse.mdht.uml.hl7.datatypes.DatatypesPackage;

 import org.eclipse.mdht.uml.hl7.datatypes.MO;

+import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesUtil;

 import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesValidator;

 import org.eclipse.ocl.ParserException;

 import org.eclipse.ocl.ecore.Constraint;

@@ -46,7 +47,12 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static final OCL EOCL_ENV = OCL.newInstance();

+	protected static final ThreadLocal<OCL> EOCL_ENV = new ThreadLocal<OCL>() {

+		@Override

+		public OCL initialValue() {

+			return OCL.newInstance();

+		}

+	};

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -75,7 +81,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_MO__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_MO__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -88,17 +94,23 @@
 	 * @generated

 	 */

 	public static boolean validateMO(MO mo, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_MO__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.MO);

-			try {

-				VALIDATE_MO__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_MO__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "MOMO", "ERROR");

+

+		if (VALIDATE_MO__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.MO);

+				try {

+					VALIDATE_MO__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_MO__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_MO__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(mo)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_MO__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(mo)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

diff --git a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/ONOperations.java b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/ONOperations.java
index 3bd1da8..3a893e3 100644
--- a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/ONOperations.java
+++ b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/ONOperations.java
@@ -17,6 +17,7 @@
 import org.eclipse.emf.common.util.DiagnosticChain;

 import org.eclipse.mdht.uml.hl7.datatypes.DatatypesPackage;

 import org.eclipse.mdht.uml.hl7.datatypes.ON;

+import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesUtil;

 import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesValidator;

 import org.eclipse.ocl.ParserException;

 import org.eclipse.ocl.ecore.Constraint;

@@ -38,6 +39,20 @@
  */

 public class ONOperations extends ENOperations {

 	/**

+	 * The cached environment for evaluating OCL expressions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	protected static final ThreadLocal<OCL> EOCL_ENV = new ThreadLocal<OCL>() {

+		@Override

+		public OCL initialValue() {

+			return OCL.newInstance();

+		}

+	};

+

+	/**

 	 * <!-- begin-user-doc -->

 	 * <!-- end-user-doc -->

 	 * @generated

@@ -64,7 +79,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_INVARIANT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_INVARIANT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -77,17 +92,23 @@
 	 * @generated

 	 */

 	public static boolean validateInvariant(ON on, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_INVARIANT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.ON);

-			try {

-				VALIDATE_INVARIANT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_INVARIANT__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "ONInvariant", "ERROR");

+

+		if (VALIDATE_INVARIANT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.ON);

+				try {

+					VALIDATE_INVARIANT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_INVARIANT__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_INVARIANT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(on)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_INVARIANT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(on)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

diff --git a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/PNOperations.java b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/PNOperations.java
index 00c0fdf..58d776b 100644
--- a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/PNOperations.java
+++ b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/PNOperations.java
@@ -17,6 +17,7 @@
 import org.eclipse.emf.common.util.DiagnosticChain;

 import org.eclipse.mdht.uml.hl7.datatypes.DatatypesPackage;

 import org.eclipse.mdht.uml.hl7.datatypes.PN;

+import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesUtil;

 import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesValidator;

 import org.eclipse.ocl.ParserException;

 import org.eclipse.ocl.ecore.Constraint;

@@ -38,6 +39,20 @@
  */

 public class PNOperations extends ENOperations {

 	/**

+	 * The cached environment for evaluating OCL expressions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	protected static final ThreadLocal<OCL> EOCL_ENV = new ThreadLocal<OCL>() {

+		@Override

+		public OCL initialValue() {

+			return OCL.newInstance();

+		}

+	};

+

+	/**

 	 * <!-- begin-user-doc -->

 	 * <!-- end-user-doc -->

 	 * @generated

@@ -64,7 +79,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_INVARIANT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_INVARIANT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -77,17 +92,23 @@
 	 * @generated

 	 */

 	public static boolean validateInvariant(PN pn, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_INVARIANT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.PN);

-			try {

-				VALIDATE_INVARIANT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_INVARIANT__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "PNInvariant", "ERROR");

+

+		if (VALIDATE_INVARIANT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.PN);

+				try {

+					VALIDATE_INVARIANT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_INVARIANT__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_INVARIANT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(pn)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_INVARIANT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(pn)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

diff --git a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/PQOperations.java b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/PQOperations.java
index e18772b..5f53769 100644
--- a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/PQOperations.java
+++ b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/PQOperations.java
@@ -13,6 +13,7 @@
 import java.math.BigDecimal;

 

 import org.eclipse.mdht.uml.hl7.datatypes.PQ;

+import org.eclipse.ocl.ecore.OCL;

 

 /**

  * <!-- begin-user-doc -->

@@ -30,6 +31,20 @@
  */

 public class PQOperations extends ANYOperations {

 	/**

+	 * The cached environment for evaluating OCL expressions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	protected static final ThreadLocal<OCL> EOCL_ENV = new ThreadLocal<OCL>() {

+		@Override

+		public OCL initialValue() {

+			return OCL.newInstance();

+		}

+	};

+

+	/**

 	 * <!-- begin-user-doc -->

 	 * <!-- end-user-doc -->

 	 * @generated

diff --git a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/PQROperations.java b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/PQROperations.java
index 1aa6d86..247a009 100644
--- a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/PQROperations.java
+++ b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/PQROperations.java
@@ -13,6 +13,7 @@
 import java.math.BigDecimal;

 

 import org.eclipse.mdht.uml.hl7.datatypes.PQR;

+import org.eclipse.ocl.ecore.OCL;

 

 /**

  * <!-- begin-user-doc -->

@@ -30,6 +31,20 @@
  */

 public class PQROperations extends CVOperations {

 	/**

+	 * The cached environment for evaluating OCL expressions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	protected static final ThreadLocal<OCL> EOCL_ENV = new ThreadLocal<OCL>() {

+		@Override

+		public OCL initialValue() {

+			return OCL.newInstance();

+		}

+	};

+

+	/**

 	 * <!-- begin-user-doc -->

 	 * <!-- end-user-doc -->

 	 * @generated

diff --git a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/REALOperations.java b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/REALOperations.java
index 666e3bf..96f9175 100644
--- a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/REALOperations.java
+++ b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/REALOperations.java
@@ -12,6 +12,7 @@
 

 import java.math.BigDecimal;

 import org.eclipse.mdht.uml.hl7.datatypes.REAL;

+import org.eclipse.ocl.ecore.OCL;

 

 /**

  * <!-- begin-user-doc -->

@@ -29,6 +30,20 @@
  */

 public class REALOperations extends ANYOperations {

 	/**

+	 * The cached environment for evaluating OCL expressions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	protected static final ThreadLocal<OCL> EOCL_ENV = new ThreadLocal<OCL>() {

+		@Override

+		public OCL initialValue() {

+			return OCL.newInstance();

+		}

+	};

+

+	/**

 	 * <!-- begin-user-doc -->

 	 * <!-- end-user-doc -->

 	 * @generated

diff --git a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/RTO_PQ_PQOperations.java b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/RTO_PQ_PQOperations.java
index 6bfe8f3..ce85a56 100644
--- a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/RTO_PQ_PQOperations.java
+++ b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/RTO_PQ_PQOperations.java
@@ -17,6 +17,7 @@
 import org.eclipse.emf.common.util.DiagnosticChain;

 import org.eclipse.mdht.uml.hl7.datatypes.DatatypesPackage;

 import org.eclipse.mdht.uml.hl7.datatypes.RTO_PQ_PQ;

+import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesUtil;

 import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesValidator;

 import org.eclipse.ocl.ParserException;

 import org.eclipse.ocl.ecore.Constraint;

@@ -44,7 +45,12 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static final OCL EOCL_ENV = OCL.newInstance();

+	protected static final ThreadLocal<OCL> EOCL_ENV = new ThreadLocal<OCL>() {

+		@Override

+		public OCL initialValue() {

+			return OCL.newInstance();

+		}

+	};

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -73,7 +79,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_DENOMINATOR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_DENOMINATOR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -87,17 +93,23 @@
 	 */

 	public static boolean validateDenominator(RTO_PQ_PQ rtO_PQ_PQ, DiagnosticChain diagnostics,

 			Map<Object, Object> context) {

-		if (VALIDATE_DENOMINATOR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.RTO_PQ_PQ);

-			try {

-				VALIDATE_DENOMINATOR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_DENOMINATOR__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "RTO_PQ_PQDenominator", "ERROR");

+

+		if (VALIDATE_DENOMINATOR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.RTO_PQ_PQ);

+				try {

+					VALIDATE_DENOMINATOR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_DENOMINATOR__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_DENOMINATOR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(rtO_PQ_PQ)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_DENOMINATOR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(rtO_PQ_PQ)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

diff --git a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/RTO_QTY_QTYOperations.java b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/RTO_QTY_QTYOperations.java
index ea555a2..fe80d3e 100644
--- a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/RTO_QTY_QTYOperations.java
+++ b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/RTO_QTY_QTYOperations.java
@@ -17,6 +17,7 @@
 import org.eclipse.emf.common.util.DiagnosticChain;

 import org.eclipse.mdht.uml.hl7.datatypes.DatatypesPackage;

 import org.eclipse.mdht.uml.hl7.datatypes.RTO_QTY_QTY;

+import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesUtil;

 import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesValidator;

 import org.eclipse.ocl.ParserException;

 import org.eclipse.ocl.ecore.Constraint;

@@ -44,7 +45,12 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static final OCL EOCL_ENV = OCL.newInstance();

+	protected static final ThreadLocal<OCL> EOCL_ENV = new ThreadLocal<OCL>() {

+		@Override

+		public OCL initialValue() {

+			return OCL.newInstance();

+		}

+	};

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -73,7 +79,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_DENOMINATOR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_DENOMINATOR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -87,17 +93,24 @@
 	 */

 	public static boolean validateDenominator(RTO_QTY_QTY rtO_QTY_QTY, DiagnosticChain diagnostics,

 			Map<Object, Object> context) {

-		if (VALIDATE_DENOMINATOR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.RTO_QTY_QTY);

-			try {

-				VALIDATE_DENOMINATOR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_DENOMINATOR__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "RTO_QTY_QTYDenominator", "ERROR");

+

+		if (VALIDATE_DENOMINATOR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.RTO_QTY_QTY);

+				try {

+					VALIDATE_DENOMINATOR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_DENOMINATOR__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_DENOMINATOR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(rtO_QTY_QTY)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_DENOMINATOR__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(

+			rtO_QTY_QTY)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

diff --git a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/STOperations.java b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/STOperations.java
index 30bf8ca..7d1d24e 100644
--- a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/STOperations.java
+++ b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/STOperations.java
@@ -18,6 +18,7 @@
 import org.eclipse.emf.ecore.EClassifier;

 import org.eclipse.mdht.uml.hl7.datatypes.DatatypesPackage;

 import org.eclipse.mdht.uml.hl7.datatypes.ST;

+import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesUtil;

 import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesValidator;

 import org.eclipse.ocl.ParserException;

 import org.eclipse.ocl.ecore.Constraint;

@@ -49,6 +50,20 @@
  */

 public class STOperations extends EDOperations {

 	/**

+	 * The cached environment for evaluating OCL expressions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	protected static final ThreadLocal<OCL> EOCL_ENV = new ThreadLocal<OCL>() {

+		@Override

+		public OCL initialValue() {

+			return OCL.newInstance();

+		}

+	};

+

+	/**

 	 * <!-- begin-user-doc -->

 	 * <!-- end-user-doc -->

 	 * @generated

@@ -75,7 +90,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_THUMBNAIL__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_THUMBNAIL__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -88,17 +103,23 @@
 	 * @generated

 	 */

 	public static boolean validateThumbnail(ST st, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_THUMBNAIL__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.ST);

-			try {

-				VALIDATE_THUMBNAIL__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_THUMBNAIL__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "STThumbnail", "ERROR");

+

+		if (VALIDATE_THUMBNAIL__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.ST);

+				try {

+					VALIDATE_THUMBNAIL__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_THUMBNAIL__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_THUMBNAIL__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(st)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_THUMBNAIL__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(st)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -133,7 +154,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_REFERENCE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_REFERENCE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -146,17 +167,23 @@
 	 * @generated

 	 */

 	public static boolean validateReference(ST st, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_REFERENCE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.ST);

-			try {

-				VALIDATE_REFERENCE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_REFERENCE__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "STReference", "ERROR");

+

+		if (VALIDATE_REFERENCE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.ST);

+				try {

+					VALIDATE_REFERENCE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_REFERENCE__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_REFERENCE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(st)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_REFERENCE__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(st)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -191,7 +218,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_INTEGRITY_CHECK__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_INTEGRITY_CHECK__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -204,17 +231,23 @@
 	 * @generated

 	 */

 	public static boolean validateIntegrityCheck(ST st, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_INTEGRITY_CHECK__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.ST);

-			try {

-				VALIDATE_INTEGRITY_CHECK__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_INTEGRITY_CHECK__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "STIntegrityCheck", "ERROR");

+

+		if (VALIDATE_INTEGRITY_CHECK__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.ST);

+				try {

+					VALIDATE_INTEGRITY_CHECK__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_INTEGRITY_CHECK__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_INTEGRITY_CHECK__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(st)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_INTEGRITY_CHECK__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(st)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -249,7 +282,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_INTEGRITY_CHECK_ALGORITHM__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_INTEGRITY_CHECK_ALGORITHM__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * The cached OCL expression body for the '{@link #validateCompression(ST, org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Compression</em>}' operation.

@@ -269,7 +302,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_COMPRESSION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_COMPRESSION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -282,17 +315,23 @@
 	 * @generated

 	 */

 	public static boolean validateCompression(ST st, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_COMPRESSION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.ST);

-			try {

-				VALIDATE_COMPRESSION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_COMPRESSION__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "STCompression", "ERROR");

+

+		if (VALIDATE_COMPRESSION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.ST);

+				try {

+					VALIDATE_COMPRESSION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_COMPRESSION__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_COMPRESSION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(st)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_COMPRESSION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(st)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -327,7 +366,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_REPRESENTATION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_REPRESENTATION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -340,17 +379,23 @@
 	 * @generated

 	 */

 	public static boolean validateRepresentation(ST st, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_REPRESENTATION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.ST);

-			try {

-				VALIDATE_REPRESENTATION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_REPRESENTATION__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "STRepresentation", "ERROR");

+

+		if (VALIDATE_REPRESENTATION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.ST);

+				try {

+					VALIDATE_REPRESENTATION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_REPRESENTATION__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_REPRESENTATION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(st)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_REPRESENTATION__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(st)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -385,7 +430,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_ST__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_ST__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -398,17 +443,23 @@
 	 * @generated

 	 */

 	public static boolean validateST(ST st, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_ST__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.ST);

-			try {

-				VALIDATE_ST__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_ST__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "STST", "ERROR");

+

+		if (VALIDATE_ST__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.ST);

+				try {

+					VALIDATE_ST__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_ST__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_ST__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(st)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_ST__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(st)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

@@ -443,7 +494,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static OCLExpression<EClassifier> IS_COMPRESSION_DEFINED__EOCL_QRY;

+	protected static ThreadLocal<OCLExpression<EClassifier>> IS_COMPRESSION_DEFINED__EOCL_QRY = new ThreadLocal<OCLExpression<EClassifier>>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -451,17 +502,20 @@
 	 * @generated

 	 */

 	public static boolean isCompressionDefined(ST st) {

-		if (IS_COMPRESSION_DEFINED__EOCL_QRY == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setOperationContext(

-				DatatypesPackage.Literals.ST, DatatypesPackage.Literals.ST.getEAllOperations().get(18));

-			try {

-				IS_COMPRESSION_DEFINED__EOCL_QRY = helper.createQuery(IS_COMPRESSION_DEFINED__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		if (IS_COMPRESSION_DEFINED__EOCL_QRY.get() == null) {

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setOperationContext(

+					DatatypesPackage.Literals.ST, DatatypesPackage.Literals.ST.getEAllOperations().get(18));

+				try {

+					IS_COMPRESSION_DEFINED__EOCL_QRY.set(helper.createQuery(IS_COMPRESSION_DEFINED__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		OCL.Query query = EOCL_ENV.createQuery(IS_COMPRESSION_DEFINED__EOCL_QRY);

+		OCL.Query query = EOCL_ENV.get().createQuery(IS_COMPRESSION_DEFINED__EOCL_QRY.get());

 		return ((Boolean) query.evaluate(st)).booleanValue();

 	}

 

@@ -483,7 +537,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static OCLExpression<EClassifier> IS_INTEGRITY_CHECK_ALGORITHM_DEFINED__EOCL_QRY;

+	protected static ThreadLocal<OCLExpression<EClassifier>> IS_INTEGRITY_CHECK_ALGORITHM_DEFINED__EOCL_QRY = new ThreadLocal<OCLExpression<EClassifier>>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -491,18 +545,21 @@
 	 * @generated

 	 */

 	public static boolean isIntegrityCheckAlgorithmDefined(ST st) {

-		if (IS_INTEGRITY_CHECK_ALGORITHM_DEFINED__EOCL_QRY == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setOperationContext(

-				DatatypesPackage.Literals.ST, DatatypesPackage.Literals.ST.getEAllOperations().get(19));

-			try {

-				IS_INTEGRITY_CHECK_ALGORITHM_DEFINED__EOCL_QRY = helper.createQuery(

-					IS_INTEGRITY_CHECK_ALGORITHM_DEFINED__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		if (IS_INTEGRITY_CHECK_ALGORITHM_DEFINED__EOCL_QRY.get() == null) {

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setOperationContext(

+					DatatypesPackage.Literals.ST, DatatypesPackage.Literals.ST.getEAllOperations().get(19));

+				try {

+					IS_INTEGRITY_CHECK_ALGORITHM_DEFINED__EOCL_QRY.set(

+						helper.createQuery(IS_INTEGRITY_CHECK_ALGORITHM_DEFINED__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		OCL.Query query = EOCL_ENV.createQuery(IS_INTEGRITY_CHECK_ALGORITHM_DEFINED__EOCL_QRY);

+		OCL.Query query = EOCL_ENV.get().createQuery(IS_INTEGRITY_CHECK_ALGORITHM_DEFINED__EOCL_QRY.get());

 		return ((Boolean) query.evaluate(st)).booleanValue();

 	}

 

@@ -524,7 +581,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static OCLExpression<EClassifier> IS_REPRESENTATION_DEFINED__EOCL_QRY;

+	protected static ThreadLocal<OCLExpression<EClassifier>> IS_REPRESENTATION_DEFINED__EOCL_QRY = new ThreadLocal<OCLExpression<EClassifier>>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -532,17 +589,20 @@
 	 * @generated

 	 */

 	public static boolean isRepresentationDefined(ST st) {

-		if (IS_REPRESENTATION_DEFINED__EOCL_QRY == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setOperationContext(

-				DatatypesPackage.Literals.ST, DatatypesPackage.Literals.ST.getEAllOperations().get(20));

-			try {

-				IS_REPRESENTATION_DEFINED__EOCL_QRY = helper.createQuery(IS_REPRESENTATION_DEFINED__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		if (IS_REPRESENTATION_DEFINED__EOCL_QRY.get() == null) {

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setOperationContext(

+					DatatypesPackage.Literals.ST, DatatypesPackage.Literals.ST.getEAllOperations().get(20));

+				try {

+					IS_REPRESENTATION_DEFINED__EOCL_QRY.set(helper.createQuery(IS_REPRESENTATION_DEFINED__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		OCL.Query query = EOCL_ENV.createQuery(IS_REPRESENTATION_DEFINED__EOCL_QRY);

+		OCL.Query query = EOCL_ENV.get().createQuery(IS_REPRESENTATION_DEFINED__EOCL_QRY.get());

 		return ((Boolean) query.evaluate(st)).booleanValue();

 	}

 

@@ -558,17 +618,24 @@
 	 */

 	public static boolean validateIntegrityCheckAlgorithm(ST st, DiagnosticChain diagnostics,

 			Map<Object, Object> context) {

-		if (VALIDATE_INTEGRITY_CHECK_ALGORITHM__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.ST);

-			try {

-				VALIDATE_INTEGRITY_CHECK_ALGORITHM__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_INTEGRITY_CHECK_ALGORITHM__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "STIntegrityCheckAlgorithm", "ERROR");

+

+		if (VALIDATE_INTEGRITY_CHECK_ALGORITHM__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.ST);

+				try {

+					VALIDATE_INTEGRITY_CHECK_ALGORITHM__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_INTEGRITY_CHECK_ALGORITHM__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_INTEGRITY_CHECK_ALGORITHM__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(st)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_INTEGRITY_CHECK_ALGORITHM__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(

+			st)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

diff --git a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/TELOperations.java b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/TELOperations.java
index 49d5878..cf2b34e 100644
--- a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/TELOperations.java
+++ b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/TELOperations.java
@@ -5,6 +5,7 @@
 import org.eclipse.emf.ecore.util.FeatureMap;
 import org.eclipse.emf.ecore.util.FeatureMapUtil;
 import org.eclipse.mdht.uml.hl7.datatypes.TEL;
+import org.eclipse.ocl.ecore.OCL;
 
 /**
  * <!-- begin-user-doc -->
@@ -22,6 +23,20 @@
  */
 public class TELOperations extends URLOperations {
 	/**
+	 * The cached environment for evaluating OCL expressions.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	protected static final ThreadLocal<OCL> EOCL_ENV = new ThreadLocal<OCL>() {
+		@Override
+		public OCL initialValue() {
+			return OCL.newInstance();
+		}
+	};
+
+	/**
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
 	 * @generated
diff --git a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/TNOperations.java b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/TNOperations.java
index 60f22ce..ff6d0fc 100644
--- a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/TNOperations.java
+++ b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/TNOperations.java
@@ -17,6 +17,7 @@
 import org.eclipse.emf.common.util.DiagnosticChain;

 import org.eclipse.mdht.uml.hl7.datatypes.DatatypesPackage;

 import org.eclipse.mdht.uml.hl7.datatypes.TN;

+import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesUtil;

 import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesValidator;

 import org.eclipse.ocl.ParserException;

 import org.eclipse.ocl.ecore.Constraint;

@@ -38,6 +39,20 @@
  */

 public class TNOperations extends ENOperations {

 	/**

+	 * The cached environment for evaluating OCL expressions.

+	 * <!-- begin-user-doc -->

+	 * <!-- end-user-doc -->

+	 * @generated

+	 * @ordered

+	 */

+	protected static final ThreadLocal<OCL> EOCL_ENV = new ThreadLocal<OCL>() {

+		@Override

+		public OCL initialValue() {

+			return OCL.newInstance();

+		}

+	};

+

+	/**

 	 * <!-- begin-user-doc -->

 	 * <!-- end-user-doc -->

 	 * @generated

@@ -64,7 +79,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_INVARIANT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_INVARIANT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -77,17 +92,23 @@
 	 * @generated

 	 */

 	public static boolean validateInvariant(TN tn, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_INVARIANT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.TN);

-			try {

-				VALIDATE_INVARIANT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_INVARIANT__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "TNInvariant", "ERROR");

+

+		if (VALIDATE_INVARIANT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.TN);

+				try {

+					VALIDATE_INVARIANT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_INVARIANT__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_INVARIANT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(tn)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_INVARIANT__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(tn)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(

diff --git a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/URLOperations.java b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/URLOperations.java
index 93b83f0..768c4e4 100644
--- a/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/URLOperations.java
+++ b/cda/plugins/org.eclipse.mdht.uml.hl7.datatypes/src/org/eclipse/mdht/uml/hl7/datatypes/operations/URLOperations.java
@@ -17,6 +17,7 @@
 import org.eclipse.emf.common.util.DiagnosticChain;

 import org.eclipse.mdht.uml.hl7.datatypes.DatatypesPackage;

 import org.eclipse.mdht.uml.hl7.datatypes.URL;

+import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesUtil;

 import org.eclipse.mdht.uml.hl7.datatypes.util.DatatypesValidator;

 import org.eclipse.ocl.ParserException;

 import org.eclipse.ocl.ecore.Constraint;

@@ -44,7 +45,12 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static final OCL EOCL_ENV = OCL.newInstance();

+	protected static final ThreadLocal<OCL> EOCL_ENV = new ThreadLocal<OCL>() {

+		@Override

+		public OCL initialValue() {

+			return OCL.newInstance();

+		}

+	};

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -73,7 +79,7 @@
 	 * @generated

 	 * @ordered

 	 */

-	protected static Constraint VALIDATE_URL__DIAGNOSTIC_CHAIN_MAP__EOCL_INV;

+	protected static ThreadLocal<Constraint> VALIDATE_URL__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = new ThreadLocal<Constraint>();

 

 	/**

 	 * <!-- begin-user-doc -->

@@ -86,17 +92,23 @@
 	 * @generated

 	 */

 	public static boolean validateURL(URL url, DiagnosticChain diagnostics, Map<Object, Object> context) {

-		if (VALIDATE_URL__DIAGNOSTIC_CHAIN_MAP__EOCL_INV == null) {

-			OCL.Helper helper = EOCL_ENV.createOCLHelper();

-			helper.setContext(DatatypesPackage.Literals.URL);

-			try {

-				VALIDATE_URL__DIAGNOSTIC_CHAIN_MAP__EOCL_INV = helper.createInvariant(

-					VALIDATE_URL__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP);

-			} catch (ParserException pe) {

-				throw new UnsupportedOperationException(pe.getLocalizedMessage());

+

+		DatatypesUtil.increment(context, "URLURL", "ERROR");

+

+		if (VALIDATE_URL__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get() == null) {

+

+			synchronized (EOCL_ENV) {

+				OCL.Helper helper = EOCL_ENV.get().createOCLHelper();

+				helper.setContext(DatatypesPackage.Literals.URL);

+				try {

+					VALIDATE_URL__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.set(

+						helper.createInvariant(VALIDATE_URL__DIAGNOSTIC_CHAIN_MAP__EOCL_EXP));

+				} catch (ParserException pe) {

+					throw new UnsupportedOperationException(pe.getLocalizedMessage());

+				}

 			}

 		}

-		if (!EOCL_ENV.createQuery(VALIDATE_URL__DIAGNOSTIC_CHAIN_MAP__EOCL_INV).check(url)) {

+		if (!EOCL_ENV.get().createQuery(VALIDATE_URL__DIAGNOSTIC_CHAIN_MAP__EOCL_INV.get()).check(url)) {

 			if (diagnostics != null) {

 				diagnostics.add(

 					new BasicDiagnostic(