diff --git a/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/attributes/PathElementCSAttribution.java b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/attributes/PathElementCSAttribution.java
index b9f56d1..55fff22 100644
--- a/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/attributes/PathElementCSAttribution.java
+++ b/plugins/org.eclipse.ocl.xtext.base/src/org/eclipse/ocl/xtext/base/attributes/PathElementCSAttribution.java
@@ -52,6 +52,7 @@
 			int index = path.indexOf(csPathElement);
 			int indexes = path.size();
 			boolean lastElement = index >= indexes-1;
+			environmentView.setIsQualified(index > 0);
 			environmentView.setIsQualifier(!lastElement);
 			if (lastElement) {			// Last element may have a scope filter
 				scopeFilter = csPathName.getScopeFilter();
diff --git a/plugins/org.eclipse.ocl.xtext.essentialocl/src/org/eclipse/ocl/xtext/essentialocl/scoping/EssentialOCLScoping.java b/plugins/org.eclipse.ocl.xtext.essentialocl/src/org/eclipse/ocl/xtext/essentialocl/scoping/EssentialOCLScoping.java
index 8f55a25..97e0369 100644
--- a/plugins/org.eclipse.ocl.xtext.essentialocl/src/org/eclipse/ocl/xtext/essentialocl/scoping/EssentialOCLScoping.java
+++ b/plugins/org.eclipse.ocl.xtext.essentialocl/src/org/eclipse/ocl/xtext/essentialocl/scoping/EssentialOCLScoping.java
@@ -13,6 +13,7 @@
 import java.util.List;
 import java.util.Map;
 
+import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.ecore.EClassifier;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.jdt.annotation.NonNull;
@@ -86,7 +87,8 @@
 		public String getMessage(@NonNull EObject eObject, @NonNull String linkText) {
 			PathElementCS csPathElement = (PathElementCS) eObject;
 			PathNameCS pathName = csPathElement.getOwningPathName();
-			List<PathElementCS> path = pathName.getOwnedPathElements();
+			EList<PathElementCS> pathElements = pathName.getOwnedPathElements();
+			List<PathElementCS> path = pathElements;
 			int index = path.indexOf(csPathElement);
 			for (int i = 0; i < index; i++) {
 				PathElementCS csElement = path.get(i);
@@ -101,11 +103,22 @@
 			}
 			assert csContext != null;
 			String messageTemplate;
+			String typeText = null;
 			String argumentText = null;
 			ExpCS navigationArgument = null;
 			Type sourceType = null;
 			if ((index + 1) < path.size()) {
 				messageTemplate = PivotMessagesInternal.UnresolvedNamespace_ERROR_;
+				if (pathElements.size() > 0) {
+					StringBuilder s = new StringBuilder();
+					for (int i = 0; i < index; i++) {
+						if (i > 0) {
+							s.append("::");
+						}
+						s.append(pathElements.get(i));
+					}
+					typeText = s.toString();
+				}
 			}
 			else if (csContext instanceof NameExpCS) {
 				NameExpCS csNameExp = (NameExpCS)csContext;
@@ -134,7 +147,16 @@
 				if (csNameExp.getSourceTypeValue() != null) {
 					sourceType = csNameExp.getSourceTypeValue();
 				}
-				linkText = pathName.toString();
+				if (index > 0) {
+					StringBuilder s = new StringBuilder();
+					for (int i = 0; i < index; i++) {
+						if (i > 0) {
+							s.append("::");
+						}
+						s.append(pathElements.get(i));
+					}
+					typeText = s.toString();
+				}
 			}
 			else if (csContext instanceof TypeNameExpCS) {
 				messageTemplate = PivotMessagesInternal.UnresolvedType_ERROR_;
@@ -155,61 +177,63 @@
 			else {
 				messageTemplate = "Unresolved ''{0}'' ''{1}''";
 			}
-			assert messageTemplate != null;
-			TypedElement source = null;
-			ExpCS csSource = navigationArgument;
-			OperatorExpCS csOperator = null;
-			for (ExpCS aSource = csSource; aSource != null; ) {										// FIXME rewrite me
-				csOperator = aSource.getLocalParent();
-				if ((csOperator != null) && (csOperator.getSource() != aSource)) {
-					csSource = csOperator.getSource();
-					break;
+			if (typeText == null) {
+				assert messageTemplate != null;
+				TypedElement source = null;
+				ExpCS csSource = navigationArgument;
+				OperatorExpCS csOperator = null;
+				for (ExpCS aSource = csSource; aSource != null; ) {										// FIXME rewrite me
+					csOperator = aSource.getLocalParent();
+					if ((csOperator != null) && (csOperator.getSource() != aSource)) {
+						csSource = csOperator.getSource();
+						break;
+					}
+					EObject eContainer = aSource.eContainer();
+					if (eContainer instanceof NavigatingArgCS) {
+						aSource = ((NavigatingArgCS)eContainer).getOwningRoundBracketedClause().getOwningNameExp();
+					}
+					else if (eContainer instanceof InfixExpCS) {
+						aSource = (InfixExpCS)eContainer;
+					}
+					else if (eContainer instanceof PrefixExpCS) {
+						aSource = (PrefixExpCS)eContainer;
+					}
+					else if (eContainer instanceof NestedExpCS) {
+						aSource = (NestedExpCS)eContainer;
+					}
+					else if (eContainer instanceof SpecificationCS) {
+						ExpressionInOCL expression = PivotUtil.getContainingExpressionInOCL(((SpecificationCS)eContainer).getPivot());
+						source = expression!= null ? expression.getOwnedContext() : null;
+						break;
+					}
+					else {
+						break;
+					}
 				}
-				EObject eContainer = aSource.eContainer();
-				if (eContainer instanceof NavigatingArgCS) {
-					aSource = ((NavigatingArgCS)eContainer).getOwningRoundBracketedClause().getOwningNameExp();
+				if (source == null) {
+					if ((csSource != null) && (csSource != navigationArgument)) {
+						source = PivotUtil.getPivot(OCLExpression.class, csSource);
+					}
 				}
-				else if (eContainer instanceof InfixExpCS) {
-					aSource = (InfixExpCS)eContainer;
-				}
-				else if (eContainer instanceof PrefixExpCS) {
-					aSource = (PrefixExpCS)eContainer;
-				}
-				else if (eContainer instanceof NestedExpCS) {
-					aSource = (NestedExpCS)eContainer;
-				}
-				else if (eContainer instanceof SpecificationCS) {
-					ExpressionInOCL expression = PivotUtil.getContainingExpressionInOCL(((SpecificationCS)eContainer).getPivot());
-					source = expression!= null ? expression.getOwnedContext() : null;
-					break;
-				}
-				else {
-					break;
-				}
-			}
-			if (source == null) {
-				if ((csSource != null) && (csSource != navigationArgument)) {
-					source = PivotUtil.getPivot(OCLExpression.class, csSource);
-				}
-			}
-			if (source != null) {
-				if (sourceType == null) {
-					sourceType = source.getType();
-				}
-				if (csOperator != null) {
-					boolean isAggregate = PivotUtil.isAggregate(sourceType);
-					if (isAggregate) {
-						String navigationOperatorName = csOperator.getName();
-						if (PivotUtil.isObjectNavigationOperator(navigationOperatorName)) {
-							if (source.eContainingFeature() == PivotPackage.Literals.CALL_EXP__OWNED_SOURCE) {
-								EObject eContainer = source.eContainer();
-								if (eContainer instanceof IteratorExp) {
-									IteratorExp iteratorExp = (IteratorExp)eContainer;
-									if (iteratorExp.isIsImplicit()) {
-										LibraryFeature iterationImplementation = iteratorExp.getReferredIteration().getImplementation();
-										if (iterationImplementation == CollectIteration.INSTANCE) {
-											Variable iterator = PivotUtil.getOwnedIterators(iteratorExp).iterator().next();
-											sourceType = PivotUtil.getType(iterator);
+				if (source != null) {
+					if (sourceType == null) {
+						sourceType = source.getType();
+					}
+					if (csOperator != null) {
+						boolean isAggregate = PivotUtil.isAggregate(sourceType);
+						if (isAggregate) {
+							String navigationOperatorName = csOperator.getName();
+							if (PivotUtil.isObjectNavigationOperator(navigationOperatorName)) {
+								if (source.eContainingFeature() == PivotPackage.Literals.CALL_EXP__OWNED_SOURCE) {
+									EObject eContainer = source.eContainer();
+									if (eContainer instanceof IteratorExp) {
+										IteratorExp iteratorExp = (IteratorExp)eContainer;
+										if (iteratorExp.isIsImplicit()) {
+											LibraryFeature iterationImplementation = iteratorExp.getReferredIteration().getImplementation();
+											if (iterationImplementation == CollectIteration.INSTANCE) {
+												Variable iterator = PivotUtil.getOwnedIterators(iteratorExp).iterator().next();
+												sourceType = PivotUtil.getType(iterator);
+											}
 										}
 									}
 								}
@@ -217,21 +241,21 @@
 						}
 					}
 				}
-			}
-			String typeText = "";
-			if (source != null) {
-				typeText = PivotConstantsInternal.UNKNOWN_TYPE_TEXT;
-				if (sourceType == null) {
-					sourceType = source.getType();
-				}
-				if (sourceType != null) {
-				//	sourceType = PivotUtil.getBehavioralType(sourceType);
-					OperatorExpCS csParent = navigationArgument != null ? navigationArgument.getLocalParent() : null;
-					if (!PivotUtil.isAggregate(sourceType) && NavigationUtil.isNavigationInfixExp(csParent) && (csParent != null) && PivotUtil.isAggregateNavigationOperator(((InfixExpCS)csParent).getName())) {
-						typeText = "Set(" + sourceType.toString() + ")";
+				typeText = "";
+				if (source != null) {
+					typeText = PivotConstantsInternal.UNKNOWN_TYPE_TEXT;
+					if (sourceType == null) {
+						sourceType = source.getType();
 					}
-					else {
-						typeText = sourceType.toString();
+					if (sourceType != null) {
+					//	sourceType = PivotUtil.getBehavioralType(sourceType);
+						OperatorExpCS csParent = navigationArgument != null ? navigationArgument.getLocalParent() : null;
+						if (!PivotUtil.isAggregate(sourceType) && NavigationUtil.isNavigationInfixExp(csParent) && (csParent != null) && PivotUtil.isAggregateNavigationOperator(((InfixExpCS)csParent).getName())) {
+							typeText = "Set(" + sourceType.toString() + ")";
+						}
+						else {
+							typeText = sourceType.toString();
+						}
 					}
 				}
 			}
diff --git a/tests/org.eclipse.ocl.examples.xtext.tests/models/uml/InternationalizedClasses.uml b/tests/org.eclipse.ocl.examples.xtext.tests/models/uml/InternationalizedClasses.uml
index 922e033..8f99d76 100644
--- a/tests/org.eclipse.ocl.examples.xtext.tests/models/uml/InternationalizedClasses.uml
+++ b/tests/org.eclipse.ocl.examples.xtext.tests/models/uml/InternationalizedClasses.uml
@@ -1,12 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<xmi:XMI xmi:version="20110701" xmlns:xmi="http://www.omg.org/spec/XMI/20110701" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:InternationalizedProfile="http://www.eclipse.org/ocl/examples/Internationalized" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:uml="http://www.eclipse.org/uml2/4.0.0/UML" xsi:schemaLocation="http://www.eclipse.org/ocl/examples/Internationalized Internationalized.profile.uml#_1CnJUOyFEeK3EpfBjgn1Sw">
+<xmi:XMI xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:InternationalizedProfile="http://www.eclipse.org/ocl/examples/Internationalized" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xsi:schemaLocation="http://www.eclipse.org/ocl/examples/Internationalized Internationalized.profile.uml#_1CnJUOyFEeK3EpfBjgn1Sw">
   <uml:Model xmi:id="_iHBam_EUEeGbmcl4mtVQXA" name="Model" URI="http://www.eclipse.org/ocl/examples/International">
-    <packageImport xmi:type="uml:PackageImport" xmi:id="_iHBanPEUEeGbmcl4mtVQXA">
+    <packageImport xmi:id="_iHBanPEUEeGbmcl4mtVQXA">
       <importedPackage xmi:type="uml:Model" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#_0"/>
     </packageImport>
     <packagedElement xmi:type="uml:Class" xmi:id="_k1-T4PEUEeGbmcl4mtVQXA" name="EnglishClass">
-      <generalization xmi:type="uml:Generalization" xmi:id="_NfH6gPEaEeGbmcl4mtVQXA" general="_JRPk0PEaEeGbmcl4mtVQXA"/>
-      <ownedAttribute xmi:type="uml:Property" xmi:id="_zXzMUPEZEeGbmcl4mtVQXA" name="englishName" visibility="public" type="_8dgMkPEZEeGbmcl4mtVQXA">
+      <generalization xmi:id="_NfH6gPEaEeGbmcl4mtVQXA" general="_JRPk0PEaEeGbmcl4mtVQXA"/>
+      <ownedAttribute xmi:id="_zXzMUPEZEeGbmcl4mtVQXA" name="englishName" visibility="public" type="_8dgMkPEZEeGbmcl4mtVQXA">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="__48YsPEZEeGbmcl4mtVQXA" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="__48YsfEZEeGbmcl4mtVQXA" value="1"/>
         <defaultValue xmi:type="uml:LiteralString" xmi:id="__48YsvEZEeGbmcl4mtVQXA">
@@ -15,8 +15,8 @@
       </ownedAttribute>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_zj3EoPEUEeGbmcl4mtVQXA" name="FrenchClass">
-      <generalization xmi:type="uml:Generalization" xmi:id="_OHlosPEaEeGbmcl4mtVQXA" general="_JRPk0PEaEeGbmcl4mtVQXA"/>
-      <ownedAttribute xmi:type="uml:Property" xmi:id="_B5MZMPEaEeGbmcl4mtVQXA" name="frenchName" visibility="public" type="_8dgMkPEZEeGbmcl4mtVQXA">
+      <generalization xmi:id="_OHlosPEaEeGbmcl4mtVQXA" general="_JRPk0PEaEeGbmcl4mtVQXA"/>
+      <ownedAttribute xmi:id="_B5MZMPEaEeGbmcl4mtVQXA" name="frenchName" visibility="public" type="_8dgMkPEZEeGbmcl4mtVQXA">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_EMLIcPEaEeGbmcl4mtVQXA" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_EMLIcfEaEeGbmcl4mtVQXA" value="1"/>
         <defaultValue xmi:type="uml:LiteralString" xmi:id="_EMLIcvEaEeGbmcl4mtVQXA">
@@ -25,8 +25,8 @@
       </ownedAttribute>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_4Ci2cPEUEeGbmcl4mtVQXA" name="GermanClass">
-      <generalization xmi:type="uml:Generalization" xmi:id="_Oq_3wPEaEeGbmcl4mtVQXA" general="_JRPk0PEaEeGbmcl4mtVQXA"/>
-      <ownedAttribute xmi:type="uml:Property" xmi:id="_FGMgsPEaEeGbmcl4mtVQXA" name="germanName" visibility="public" type="_8dgMkPEZEeGbmcl4mtVQXA">
+      <generalization xmi:id="_Oq_3wPEaEeGbmcl4mtVQXA" general="_JRPk0PEaEeGbmcl4mtVQXA"/>
+      <ownedAttribute xmi:id="_FGMgsPEaEeGbmcl4mtVQXA" name="germanName" visibility="public" type="_8dgMkPEZEeGbmcl4mtVQXA">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_HHfDAPEaEeGbmcl4mtVQXA" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_HHfDAfEaEeGbmcl4mtVQXA" value="1"/>
         <defaultValue xmi:type="uml:LiteralString" xmi:id="_HHfDAvEaEeGbmcl4mtVQXA">
@@ -35,11 +35,11 @@
       </ownedAttribute>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_rsu64PEVEeGbmcl4mtVQXA" name="PlainClass">
-      <generalization xmi:type="uml:Generalization" xmi:id="_POaG0PEaEeGbmcl4mtVQXA" general="_JRPk0PEaEeGbmcl4mtVQXA"/>
+      <generalization xmi:id="_POaG0PEaEeGbmcl4mtVQXA" general="_JRPk0PEaEeGbmcl4mtVQXA"/>
     </packagedElement>
     <packagedElement xmi:type="uml:PrimitiveType" xmi:id="_8dgMkPEZEeGbmcl4mtVQXA" name="String"/>
     <packagedElement xmi:type="uml:Class" xmi:id="_JRPk0PEaEeGbmcl4mtVQXA" name="LanguageClass">
-      <ownedAttribute xmi:type="uml:Property" xmi:id="_LKWbgPEaEeGbmcl4mtVQXA" name="name" visibility="public" type="_8dgMkPEZEeGbmcl4mtVQXA">
+      <ownedAttribute xmi:id="_LKWbgPEaEeGbmcl4mtVQXA" name="name" visibility="public" type="_8dgMkPEZEeGbmcl4mtVQXA">
         <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_MY55UPEaEeGbmcl4mtVQXA" value="1"/>
         <upperValue xmi:type="uml:LiteralUnlimitedNatural" xmi:id="_MY55UfEaEeGbmcl4mtVQXA" value="1"/>
         <defaultValue xmi:type="uml:LiteralString" xmi:id="_MY55UvEaEeGbmcl4mtVQXA">
@@ -47,14 +47,20 @@
         </defaultValue>
       </ownedAttribute>
     </packagedElement>
-    <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_sMi40PEUEeGbmcl4mtVQXA">
-      <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_sMsp0PEUEeGbmcl4mtVQXA" source="http://www.eclipse.org/uml2/2.0.0/UML">
+    <packagedElement xmi:type="uml:Class" xmi:id="_VdLzsO2OEeyedcx5-3T3Sg" name="MultiLingualClass">
+      <generalization xmi:id="_VdLzse2OEeyedcx5-3T3Sg" general="_JRPk0PEaEeGbmcl4mtVQXA"/>
+    </packagedElement>
+    <profileApplication xmi:id="_sMi40PEUEeGbmcl4mtVQXA">
+      <eAnnotations xmi:id="_sMsp0PEUEeGbmcl4mtVQXA" source="http://www.eclipse.org/uml2/2.0.0/UML">
         <references xmi:type="ecore:EPackage" href="Internationalized.profile.uml#_UuTWoOyUEeK3EpfBjgn1Sw"/>
       </eAnnotations>
-      <appliedProfile xmi:type="uml:Profile" href="Internationalized.profile.uml#_bNIm0PETEeGbmcl4mtVQXA"/>
+      <appliedProfile href="Internationalized.profile.uml#_bNIm0PETEeGbmcl4mtVQXA"/>
     </profileApplication>
   </uml:Model>
   <InternationalizedProfile:InEnglish xmi:id="_t7-PEPEUEeGbmcl4mtVQXA" base_Class="_k1-T4PEUEeGbmcl4mtVQXA" text="Thank You"/>
   <InternationalizedProfile:InFrench xmi:id="_29NmEPEUEeGbmcl4mtVQXA" base_Class="_zj3EoPEUEeGbmcl4mtVQXA" text="Merci" face="ITALIC"/>
   <InternationalizedProfile:InGerman xmi:id="_6WkukPEUEeGbmcl4mtVQXA" base_Class="_4Ci2cPEUEeGbmcl4mtVQXA" text="Danke Schon" face="BOLD"/>
+  <InternationalizedProfile:InEnglish xmi:id="_ehqr8O2OEeyedcx5-3T3Sg" base_Class="_VdLzsO2OEeyedcx5-3T3Sg"/>
+  <InternationalizedProfile:InFrench xmi:id="_ehqr8e2OEeyedcx5-3T3Sg" base_Class="_VdLzsO2OEeyedcx5-3T3Sg"/>
+  <InternationalizedProfile:InGerman xmi:id="_ehqr8u2OEeyedcx5-3T3Sg" base_Class="_VdLzsO2OEeyedcx5-3T3Sg"/>
 </xmi:XMI>
diff --git a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateNameVisibilityTest4.java b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateNameVisibilityTest4.java
index 25de97a..fd76bce 100644
--- a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateNameVisibilityTest4.java
+++ b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateNameVisibilityTest4.java
@@ -552,10 +552,10 @@
 		ocl.assertQueryEquals(redApple, redApple, "self.oclAsType(fruit::Apple)");
 		ocl.assertQueryEquals(redApple, idResolver.createSetOfEach(TypeId.SET, redApple), "self->oclAsType(Set(Fruit))");
 		ocl.assertQueryEquals(redApple, idResolver.createSetOfEach(TypeId.SET, redApple), "self->oclAsType(Set(fruit::Apple))");
-		ocl.assertSemanticErrorQuery(appleType, "self.oclAsType(fruit::fruit::Apple)", PivotMessagesInternal.UnresolvedNamespace_ERROR_, "", "fruit");	// Demonstrates Bug 353985
+		ocl.assertSemanticErrorQuery(appleType, "self.oclAsType(fruit::fruit::Apple)", PivotMessagesInternal.UnresolvedNamespace_ERROR_, "fruit", "fruit");	// Demonstrates Bug 353985
 		ocl.assertSemanticErrorQuery(appleType, "self->oclAsType(Set(fruit::apple::BadApple))", PivotMessagesInternal.UnresolvedType_ERROR_, "", "BadApple");
 		ocl.assertSemanticErrorQuery(appleType, "self->oclAsType(Set(fruit::apple::BadApple))", PivotMessagesInternal.UnresolvedType_ERROR_, "", "BadApple");
-		ocl.assertSemanticErrorQuery(appleType, "self->oclAsType(Set(fruit::badapple::BadApple))", PivotMessagesInternal.UnresolvedNamespace_ERROR_, "", "badapple");
+		ocl.assertSemanticErrorQuery(appleType, "self->oclAsType(Set(fruit::badapple::BadApple))", PivotMessagesInternal.UnresolvedNamespace_ERROR_, "fruit", "badapple");
 		ocl.assertSemanticErrorQuery(appleType, "self->oclAsType(Set(badfruit::badapple::BadApple))", PivotMessagesInternal.UnresolvedNamespace_ERROR_, "", "badfruit");
 		ocl.assertQueryInvalid(redApple, "self->oclAsType(Set(fruit::apple::EatingApple))");
 		ocl.assertQueryInvalid(redApple, "self->oclAsType(Set(fruit::Tree))");
diff --git a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateUMLTest4.java b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateUMLTest4.java
index dbd9956..65c19d2 100644
--- a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateUMLTest4.java
+++ b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateUMLTest4.java
@@ -303,7 +303,7 @@
 		ocl.assertValidQuery(asTrain, "self.oclIsKindOf(RootElement::Train2)");		// Sibling class => false
 		ocl.assertValidQuery(asTrain, "self.oclIsKindOf(TestProfile::Train)");		// Stereotype metaclass => false
 		ocl.assertSemanticErrorQuery(asTrain, "self.oclIsKindOf(Train)", PivotMessagesInternal.UnresolvedElement_ERROR_, "RootElement::Train1", "Train");
-		ocl.assertSemanticErrorQuery(asTrain, "self.oclIsKindOf(RootElement::Train)", PivotMessagesInternal.UnresolvedElement_ERROR_, "RootElement::Train1", "RootElement::Train");
+		ocl.assertSemanticErrorQuery(asTrain, "self.oclIsKindOf(RootElement::Train)", PivotMessagesInternal.UnresolvedElement_ERROR_, "RootElement", "Train");
 		//
 		ocl.assertValidQuery(asTrain, "let t = Train1 in self.oclIsKindOf(t)");
 		ocl.assertValidQuery(asTrain, "let t = Train2 in self.oclIsKindOf(t)");
@@ -311,7 +311,7 @@
 		ocl.assertValidQuery(asTrain, "let t = RootElement::Train2 in self.oclIsKindOf(t)");
 		ocl.assertValidQuery(asTrain, "let t = TestProfile::Train in self.oclIsKindOf(t)");
 		ocl.assertSemanticErrorQuery(asTrain, "let t = Train in self.oclIsKindOf(t)", PivotMessagesInternal.UnresolvedElement_ERROR_, "", "Train");
-		ocl.assertSemanticErrorQuery(asTrain, "let t = RootElement::Train in self.oclIsKindOf(t)", PivotMessagesInternal.UnresolvedElement_ERROR_, "", "RootElement::Train");
+		ocl.assertSemanticErrorQuery(asTrain, "let t = RootElement::Train in self.oclIsKindOf(t)", PivotMessagesInternal.UnresolvedElement_ERROR_, "RootElement", "Train");
 		//
 		//	aTrain = ... no Ecore instance available
 		//	ocl.assertQueryEquals(aTrain, false, "let t = TestProfile::Train in self.oclIsKindOf(t)");
diff --git a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/StereotypesTest.java b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/StereotypesTest.java
index 9b63acb..64a27ec 100644
--- a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/StereotypesTest.java
+++ b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/StereotypesTest.java
@@ -53,6 +53,8 @@
 import org.junit.After;
 import org.junit.Before;
 
+import com.google.common.collect.Sets;
+
 /**
  * Tests for stereotype expressions.
  */
@@ -95,15 +97,25 @@
 		org.eclipse.uml2.uml.Type umlFrenchClass;
 		org.eclipse.uml2.uml.Type umlGermanClass;
 		org.eclipse.uml2.uml.Type umlLanguageClass;
+		org.eclipse.uml2.uml.Type umlMultiLingualClass;
 		org.eclipse.uml2.uml.Type umlPlainClass;
 		org.eclipse.uml2.uml.Type umlString;
 		UMLElementExtension umlEnglishClassInEnglish;
+		EObject umlEnglishClassInEnglish2;
+		EObject umlMultiLingualClassInEnglish2;
+		EObject umlMultiLingualClassInFrench2;
+		EObject umlMultiLingualClassInGerman2;
 		org.eclipse.ocl.pivot.Class asEnglishClass;
 		org.eclipse.ocl.pivot.Class asFrenchClass;
 		org.eclipse.ocl.pivot.Class asGermanClass;
+		org.eclipse.ocl.pivot.Class asPlainClass;
+		org.eclipse.ocl.pivot.Class asMultiLingualClass;
 		ElementExtension asEnglishClassInEnglish;
 		ElementExtension asFrenchClassInEnglish;
 		ElementExtension asGermanClassInEnglish;
+		ElementExtension asMultiLingualClassInEnglish;
+		ElementExtension asMultiLingualClassInFrench;
+		ElementExtension asMultiLingualClassInGerman;
 
 		public InternationalizedMetamodel(@NonNull OCL ocl, @NonNull InternationalizedProfile mmm, org.eclipse.uml2.uml.Package umlPackage) throws ParserException {
 			EnvironmentFactoryInternalExtension environmentFactory = (EnvironmentFactoryInternalExtension)ocl.getEnvironmentFactory();
@@ -118,16 +130,26 @@
 			umlFrenchClass = umlPackage.getOwnedType("FrenchClass");
 			umlGermanClass = umlPackage.getOwnedType("GermanClass");
 			umlLanguageClass = umlPackage.getOwnedType("LanguageClass");
+			umlMultiLingualClass = umlPackage.getOwnedType("MultiLingualClass");
 			umlPlainClass = umlPackage.getOwnedType("PlainClass");
 			umlString = umlPackage.getOwnedType("String");
 			asEnglishClass = environmentFactory.getASOf(org.eclipse.ocl.pivot.Class.class, umlEnglishClass);
 			asFrenchClass = environmentFactory.getASOf(org.eclipse.ocl.pivot.Class.class, umlFrenchClass);
 			asGermanClass = environmentFactory.getASOf(org.eclipse.ocl.pivot.Class.class, umlGermanClass);
+			asPlainClass = environmentFactory.getASOf(org.eclipse.ocl.pivot.Class.class, umlPlainClass);
+			asMultiLingualClass = environmentFactory.getASOf(org.eclipse.ocl.pivot.Class.class, umlMultiLingualClass);
 			//
 			umlEnglishClassInEnglish = (UMLElementExtension) UMLElementExtension.getUMLElementExtension(mmm.asInEnglishStereotype, umlEnglishClass);
 			asEnglishClassInEnglish = NameUtil.getNameable(asEnglishClass.getOwnedExtensions(), "EnglishClass$InEnglish");
 			asFrenchClassInEnglish = NameUtil.getNameable(asFrenchClass.getOwnedExtensions(), "FrenchClass$InFrench");
 			asGermanClassInEnglish = NameUtil.getNameable(asGermanClass.getOwnedExtensions(), "GermanClass$InGerman");
+			asMultiLingualClassInEnglish = NameUtil.getNameable(asMultiLingualClass.getOwnedExtensions(), "MultiLingualClass$InEnglish");
+			asMultiLingualClassInFrench = NameUtil.getNameable(asMultiLingualClass.getOwnedExtensions(), "MultiLingualClass$InFrench");
+			asMultiLingualClassInGerman = NameUtil.getNameable(asMultiLingualClass.getOwnedExtensions(), "MultiLingualClass$InGerman");
+			umlEnglishClassInEnglish2 = asEnglishClassInEnglish.getESObject();
+			umlMultiLingualClassInEnglish2 = asMultiLingualClassInEnglish.getESObject();
+			umlMultiLingualClassInFrench2 = asMultiLingualClassInFrench.getESObject();
+			umlMultiLingualClassInGerman2 = asMultiLingualClassInGerman.getESObject();
 		}
 	}
 
@@ -312,7 +334,7 @@
 			IdResolver idResolver2 = ocl2.getIdResolver();
 			ocl2.setModelManager(new LazyEcoreModelManager(ocl2.mm.umlEnglishClass.eResource().getContents(), null, null));
 			ocl2.assertQueryEquals(ocl2.mm.umlEnglishClass, idResolver2.createSetOfEach(TypeId.SET), "Model::EnglishClass.allInstances()");
-			ocl2.assertQueryEquals(ocl2.mm.umlEnglishClass, idResolver2.createSetOfEach(TypeId.SET, ocl2.mm.umlPlainClass, ocl2.mm.umlEnglishClass, ocl2.mm.umlLanguageClass, ocl2.mm.umlFrenchClass, ocl2.mm.umlGermanClass), "Class.allInstances()");
+			ocl2.assertQueryEquals(ocl2.mm.umlEnglishClass, idResolver2.createSetOfEach(TypeId.SET, ocl2.mm.umlPlainClass, ocl2.mm.umlEnglishClass, ocl2.mm.umlLanguageClass, ocl2.mm.umlFrenchClass, ocl2.mm.umlGermanClass, ocl2.mm.umlMultiLingualClass), "Class.allInstances()");
 			ocl2.dispose();
 		}
 		//M1 - Pivot
@@ -320,7 +342,7 @@
 			MyOCL ocl3 = createOCL();
 			IdResolver idResolver3 = ocl3.getIdResolver();
 			ocl3.setModelManager(new LazyEcoreModelManager(ocl3.mm.asEnglishClass.eResource().getContents(), null, null));
-			ocl3.assertQueryEquals(ocl3.mm.asEnglishClass, idResolver3.createSetOfEach(TypeId.SET, ocl3.mm.asEnglishClassInEnglish, ocl3.mm.asFrenchClassInEnglish, ocl3.mm.asGermanClassInEnglish), "ocl::ElementExtension.allInstances()");
+			ocl3.assertQueryEquals(ocl3.mm.asEnglishClass, idResolver3.createSetOfEach(TypeId.SET, ocl3.mm.asEnglishClassInEnglish, ocl3.mm.asFrenchClassInEnglish, ocl3.mm.asGermanClassInEnglish, ocl3.mm.asMultiLingualClassInEnglish, ocl3.mm.asMultiLingualClassInFrench, ocl3.mm.asMultiLingualClassInGerman), "ocl::ElementExtension.allInstances()");
 			//
 			//    	ocl.assertQueryEquals(ocl.mm.umlMMM, metamodelManager.createSetValueOf(null, ocl.mm.string, ocl.mm.plainClass, ocl.mm.englishClass, ocl.mm.languageClass, ocl.mm.frenchClass, ocl.mm.germanClass), "uml::Stereotype.allInstances()");
 			//    	ocl.assertQueryEquals(metamodelManager.getOclAnyType(), metamodelManager.createSetValueOf(null, ocl.mm.string, ocl.mm.plainClass, ocl.mm.englishClass, ocl.mm.languageClass, ocl.mm.frenchClass, ocl.mm.germanClass), "ocl::Stereotype.allInstances()");
@@ -385,4 +407,109 @@
 		ocl.assertQueryEquals(ocl.mm.umlGermanClass, umlBold, "self.extension_Internationalized.face()");
 		ocl.dispose();
 	}
+
+	/**
+	 * Tests M2 parsing and M1 evaluation using oclBase().
+	 */
+	public void testStereotypes_oclBase() throws Exception {
+		MyOCL ocl = createOCL();
+		//
+		//	AS => AS
+		//
+		ocl.assertQueryEquals(ocl.mm.asEnglishClass, ocl.mm.asEnglishClassInEnglish, "self.oclExtension(InternationalizedProfile::Internationalized)");
+		ocl.assertQueryEquals(ocl.mm.asEnglishClassInEnglish, ocl.mm.asEnglishClass, "self.oclBase()");
+		ocl.assertQueryEquals(ocl.mm.asEnglishClassInEnglish, ocl.mm.asEnglishClass, "self.oclBase(Model::EnglishClass)");
+		ocl.assertQueryEquals(ocl.mm.asEnglishClassInEnglish, null, "self.oclBase(Model::GermanClass)");
+		ocl.assertQueryEquals(ocl.mm.asMultiLingualClassInEnglish, ocl.mm.asMultiLingualClass, "self.oclBase()");
+		ocl.assertQueryEquals(ocl.mm.asMultiLingualClassInEnglish, ocl.mm.asMultiLingualClass, "self.oclBase(Model::MultiLingualClass)");
+		ocl.assertQueryEquals(ocl.mm.asMultiLingualClassInEnglish, null, "self.oclBase(Model::EnglishClass)");
+		//
+		//	UML => UML
+		//
+		ocl.assertQueryEquals(ocl.mm.umlEnglishClass, ocl.mm.umlEnglishClassInEnglish2, "self.oclExtension(InternationalizedProfile::Internationalized)");
+		ocl.assertQueryEquals(ocl.mm.umlEnglishClassInEnglish2, ocl.mm.umlEnglishClass, "self.oclBase()");
+		ocl.assertQueryEquals(ocl.mm.umlEnglishClassInEnglish2, ocl.mm.umlEnglishClass, "self.oclBase(Model::EnglishClass)");
+		ocl.assertQueryEquals(ocl.mm.umlEnglishClassInEnglish2, null, "self.oclBase(Model::GermanClass)");
+		ocl.assertQueryEquals(ocl.mm.umlMultiLingualClassInEnglish2, ocl.mm.umlMultiLingualClass, "self.oclBase()");
+		ocl.assertQueryEquals(ocl.mm.umlMultiLingualClassInEnglish2, ocl.mm.umlMultiLingualClass, "self.oclBase(Model::MultiLingualClass)");
+		ocl.assertQueryEquals(ocl.mm.umlMultiLingualClassInEnglish2, null, "self.oclBase(Model::EnglishClass)");
+		//
+		ocl.dispose();
+	}
+
+	/**
+	 * Tests M2 parsing and M1 evaluation using oclExtension()/oclExtensions() and diverse KindOf.
+	 */
+	public void testStereotypes_oclExtensions() throws Exception {
+		MyOCL ocl = createOCL();
+		//
+		//	AS => AS
+		//
+		ocl.assertQueryEquals(ocl.mm.asPlainClass, Sets.newHashSet(), "self.oclExtensions()");
+		ocl.assertQueryEquals(ocl.mm.asPlainClass, null, "self.oclExtension(InternationalizedProfile::Internationalized)");
+		//
+		ocl.assertQueryEquals(ocl.mm.asEnglishClass, Sets.newHashSet(ocl.mm.asEnglishClassInEnglish), "self.oclExtensions()");
+		ocl.assertQueryEquals(ocl.mm.asEnglishClass, Sets.newHashSet(ocl.mm.asEnglishClassInEnglish), "self.oclExtensions(InternationalizedProfile::Internationalized)");
+		ocl.assertQueryEquals(ocl.mm.asEnglishClass, Sets.newHashSet(), "self.oclExtensions(Standard::Focus)");
+		ocl.assertQueryEquals(ocl.mm.asEnglishClass, ocl.mm.asEnglishClassInEnglish, "self.oclExtension(InternationalizedProfile::Internationalized)");
+		ocl.assertQueryEquals(ocl.mm.asEnglishClass, null, "self.oclExtension(Standard::Focus)");
+		ocl.assertQueryEquals(ocl.mm.asEnglishClass, null, "self.oclExtension(Ecore::EClass)");
+		//
+		ocl.assertQueryEquals(ocl.mm.asMultiLingualClass, Sets.newHashSet(ocl.mm.asMultiLingualClassInEnglish, ocl.mm.asMultiLingualClassInFrench, ocl.mm.asMultiLingualClassInGerman), "self.oclExtensions()");
+		ocl.assertQueryEquals(ocl.mm.asMultiLingualClass, Sets.newHashSet(ocl.mm.asMultiLingualClassInEnglish, ocl.mm.asMultiLingualClassInFrench, ocl.mm.asMultiLingualClassInGerman), "self.oclExtensions(InternationalizedProfile::Internationalized)");
+		ocl.assertQueryEquals(ocl.mm.asMultiLingualClass, Sets.newHashSet(ocl.mm.asMultiLingualClassInGerman), "self.oclExtensions(InternationalizedProfile::InGerman)");
+		ocl.assertQueryEquals(ocl.mm.asMultiLingualClass, ocl.mm.asMultiLingualClassInGerman, "self.oclExtension(InternationalizedProfile::InGerman)");
+		ocl.assertQueryInvalid(ocl.mm.asMultiLingualClass, "self.oclExtension(InternationalizedProfile::Internationalized)");
+		//
+		//	UML => UML
+		//
+		ocl.assertQueryEquals(ocl.mm.umlPlainClass, Sets.newHashSet(), "self.oclExtensions()");
+		ocl.assertQueryEquals(ocl.mm.umlPlainClass, null, "self.oclExtension(InternationalizedProfile::Internationalized)");
+		//
+		ocl.assertQueryEquals(ocl.mm.umlEnglishClass, Sets.newHashSet(ocl.mm.umlEnglishClassInEnglish2), "self.oclExtensions()");
+		ocl.assertQueryEquals(ocl.mm.umlEnglishClass, Sets.newHashSet(ocl.mm.umlEnglishClassInEnglish2), "self.oclExtensions(InternationalizedProfile::Internationalized)");
+		ocl.assertQueryEquals(ocl.mm.umlEnglishClass, Sets.newHashSet(), "self.oclExtensions(Standard::Focus)");
+		ocl.assertQueryEquals(ocl.mm.umlEnglishClass, ocl.mm.umlEnglishClassInEnglish2, "self.oclExtension(InternationalizedProfile::Internationalized)");
+		ocl.assertQueryEquals(ocl.mm.umlEnglishClass, null, "self.oclExtension(Standard::Focus)");
+		ocl.assertQueryEquals(ocl.mm.umlEnglishClass, null, "self.oclExtension(Ecore::EClass)");
+		//
+		ocl.assertQueryEquals(ocl.mm.umlMultiLingualClass, Sets.newHashSet(ocl.mm.umlMultiLingualClassInEnglish2, ocl.mm.umlMultiLingualClassInFrench2, ocl.mm.umlMultiLingualClassInGerman2), "self.oclExtensions()");
+		ocl.assertQueryEquals(ocl.mm.umlMultiLingualClass, Sets.newHashSet(ocl.mm.umlMultiLingualClassInEnglish2, ocl.mm.umlMultiLingualClassInFrench2, ocl.mm.umlMultiLingualClassInGerman2), "self.oclExtensions(InternationalizedProfile::Internationalized)");
+		ocl.assertQueryEquals(ocl.mm.umlMultiLingualClass, Sets.newHashSet(ocl.mm.umlMultiLingualClassInGerman2), "self.oclExtensions(InternationalizedProfile::InGerman)");
+		ocl.assertQueryEquals(ocl.mm.umlMultiLingualClass, ocl.mm.umlMultiLingualClassInGerman2, "self.oclExtension(InternationalizedProfile::InGerman)");
+		ocl.assertQueryInvalid(ocl.mm.umlMultiLingualClass, "self.oclExtension(InternationalizedProfile::Internationalized)");
+		//
+		//	Errors
+		//
+		ocl.assertSemanticErrorQuery(ocl.mm.asEnglishClass, "self.oclExtension(standard::Class_Focus)", PivotMessagesInternal.UnresolvedNamespace_ERROR_, "", "standard");
+		ocl.assertSemanticErrorQuery(ocl.mm.asEnglishClass, "self.oclExtension(Standard::NoSuchFocus::WhoCares)", PivotMessagesInternal.UnresolvedNamespace_ERROR_, "Standard", "NoSuchFocus");
+		ocl.assertSemanticErrorQuery(ocl.mm.asEnglishClass, "self.oclExtension(Standard::NoSuchFocus)", PivotMessagesInternal.UnresolvedElement_ERROR_, "Standard", "NoSuchFocus");
+		ocl.assertSemanticErrorQuery(ocl.mm.asEnglishClass, "self.oclExtension(Boolean)", PivotMessagesInternal.UnresolvedOperationCall_ERROR_, "Model::EnglishClass", "oclExtension", "Class");
+		ocl.assertSemanticErrorQuery(ocl.mm.asEnglishClass, "self.oclExtensions(Boolean)", PivotMessagesInternal.UnresolvedOperationCall_ERROR_, "Model::EnglishClass", "oclExtensions", "Class");
+		//
+		ocl.dispose();
+	}
+
+	/**
+	 * Tests M2 parsing and M1 evaluation using more diverse oclbBase()/oclExtension()/oclExtensions() and in particular let.
+	 */
+	public void testStereotypes_let_580136() throws Exception {
+		MyOCL ocl = createOCL();
+		//
+		ocl.assertQueryEquals(ocl.mm.asEnglishClass, ocl.mm.asEnglishClass, "self.oclExtension(InternationalizedProfile::Internationalized).oclBase()");
+		ocl.assertQueryEquals(ocl.mm.umlEnglishClass, ocl.mm.umlEnglishClass, "self.oclExtension(InternationalizedProfile::Internationalized).oclBase()");
+		ocl.assertQueryEquals(ocl.mm.asEnglishClassInEnglish, ocl.mm.asEnglishClassInEnglish, "self.oclBase().oclExtension(InternationalizedProfile::Internationalized)");
+		ocl.assertQueryEquals(ocl.mm.umlEnglishClassInEnglish2, ocl.mm.umlEnglishClassInEnglish2, "self.oclBase().oclExtension(InternationalizedProfile::Internationalized)");
+		//
+		ocl.assertQueryEquals(ocl.mm.asEnglishClass, Sets.newHashSet(ocl.mm.asEnglishClassInEnglish), "let st = InternationalizedProfile::Internationalized in self.oclExtensions(st)");
+		ocl.assertQueryEquals(ocl.mm.asEnglishClass, Sets.newHashSet(ocl.mm.asEnglishClassInEnglish), "self.oclExtensions()->selectByKind(InternationalizedProfile::Internationalized)");
+		ocl.assertQueryEquals(ocl.mm.asEnglishClass, Sets.newHashSet(ocl.mm.asEnglishClassInEnglish), "let st = InternationalizedProfile::Internationalized in self.oclExtensions()->select(oclIsKindOf(st))");
+		ocl.assertQueryEquals(ocl.mm.umlEnglishClass, ocl.mm.umlEnglishClassInEnglish, "self.extension_Internationalized");
+		ocl.assertQueryEquals(ocl.mm.umlEnglishClass, Sets.newHashSet(ocl.mmm.umlInEnglishStereotype), "self.getAppliedStereotypes()");
+		ocl.assertQueryEquals(ocl.mm.umlEnglishClass, Sets.newHashSet(ocl.mmm.umlInEnglishStereotype), "self.getAppliedStereotypes()->select(true)");
+	//bad missing boxing normalization for loop compare	ocl.assertQueryEquals(ocl.mm.umlEnglishClass, Sets.newHashSet(ocl.mmm.umlInEnglishStereotype), "self.getAppliedStereotypes()->select(s | s = InternationalizedProfile::InEnglish)");
+		ocl.assertQueryEquals(ocl.mm.umlEnglishClass, Sets.newHashSet(), "self.getAppliedStereotypes()->selectByKind(InternationalizedProfile::Internationalized)");	// wrong metalevel
+		//
+		ocl.dispose();
+	}
 }
diff --git a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/test/xtext/EcoreConsoleTests.java b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/test/xtext/EcoreConsoleTests.java
index 15dcfd0..5979691 100644
--- a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/test/xtext/EcoreConsoleTests.java
+++ b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/test/xtext/EcoreConsoleTests.java
@@ -92,7 +92,7 @@
 		assertConsoleResult(consolePage, b1Book, "hasSpareCopies(5)", "false\n");
 		//
 		assertConsoleResult(consolePage, ecoreBook, "name", "'Book'\n");
-		assertConsoleResult(consolePage, ecoreBook, "copies", "<b><error>Parsing failure\n</error></b><error>\n1:1: Unresolved Property '::copies'\n</error>");
+		assertConsoleResult(consolePage, ecoreBook, "copies", "<b><error>Parsing failure\n</error></b><error>\n1:1: Unresolved Element '::copies'\n</error>");
 		assertConsoleResult(consolePage, ecoreBook, "oclType().ownedProperties->sortedBy(name)",
 			"ecore::EClass::EClass\n" +
 					"ecore::EClass::EClass\n" +
diff --git a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/test/xtext/ImportTests.java b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/test/xtext/ImportTests.java
index c2b6781..bf816a4 100644
--- a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/test/xtext/ImportTests.java
+++ b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/test/xtext/ImportTests.java
@@ -308,21 +308,21 @@
 		// class AD4 extends A3::A;
 		bag.add(StringUtil.bind(PivotMessagesInternal.UnresolvedNamespace_ERROR_, "", "A3"));
 		// class AD011 extends A0::A1::A1::A;
-		bag.add(StringUtil.bind(PivotMessagesInternal.UnresolvedNamespace_ERROR_, "", "A1"));
+		bag.add(StringUtil.bind(PivotMessagesInternal.UnresolvedNamespace_ERROR_, "A0::A1", "A1"));
 		// class BD0 extends B0::B;
 		bag.add(StringUtil.bind(PivotMessagesInternal.UnresolvedNamespace_ERROR_, "", "B0"));
 		// class BD01 extends B0::B1::B;
 		bag.add(StringUtil.bind(PivotMessagesInternal.UnresolvedNamespace_ERROR_, "", "B0"));
 		// class BD11 extends B1::B1::B;
-		bag.add(StringUtil.bind(PivotMessagesInternal.UnresolvedNamespace_ERROR_, "", "B1"));
+		bag.add(StringUtil.bind(PivotMessagesInternal.UnresolvedNamespace_ERROR_, "B1", "B1"));
 		// class BD2 extends B2::B;
 		bag.add(StringUtil.bind(PivotMessagesInternal.UnresolvedNamespace_ERROR_, "", "B2"));
 		// class BD3 extends B3::B;
 		bag.add(StringUtil.bind(PivotMessagesInternal.UnresolvedNamespace_ERROR_, "", "B3"));
 		// class GDC extends G0::C1::GD01;
-		bag.add(StringUtil.bind(PivotMessagesInternal.UnresolvedNamespace_ERROR_, "", "C1"));
+		bag.add(StringUtil.bind(PivotMessagesInternal.UnresolvedNamespace_ERROR_, "G0", "C1"));
 		// class GD01 extends G0::F1::F;
-		bag.add(StringUtil.bind(PivotMessagesInternal.UnresolvedNamespace_ERROR_, "", "F1"));
+		bag.add(StringUtil.bind(PivotMessagesInternal.UnresolvedNamespace_ERROR_, "G0", "F1"));
 		TestOCL ocl = createOCL();
 		doBadLoadFromString(ocl, "Bug353793bad.oclinecore", testFileBad, bag);
 		ocl.dispose();
diff --git a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/test/xtext/UMLConsoleTests.java b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/test/xtext/UMLConsoleTests.java
index 74b7c09..901dc2e 100644
--- a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/test/xtext/UMLConsoleTests.java
+++ b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/test/xtext/UMLConsoleTests.java
@@ -210,8 +210,8 @@
 		// allInstances
 		assertConsoleResult(consolePage, umlEnglishClass, "Stereotype.allInstances()->sortedBy(name)", "");		// Tests Bug 382981
 		assertConsoleResult(consolePage, umlInEnglishStereotype, "Stereotype.allInstances()->sortedBy(name)", "InternationalizedProfile::InEnglish\nInternationalizedProfile::InFrench\nInternationalizedProfile::InGerman\nInternationalizedProfile::Internationalized\n");
-		assertConsoleResult(consolePage, umlEnglishClass, "Class.allInstances()->sortedBy(name)", "Model::EnglishClass\nModel::FrenchClass\nModel::GermanClass\nModel::LanguageClass\nModel::PlainClass\n");
-		assertConsoleResult(consolePage, asEnglishClass, "ocl::Class.allInstances()->sortedBy(name)", "Model::EnglishClass\nEnglishClass$InEnglish\nModel::FrenchClass\nFrenchClass$InFrench\nModel::GermanClass\nGermanClass$InGerman\nModel::LanguageClass\nModel::PlainClass\nString\n");
+		assertConsoleResult(consolePage, umlEnglishClass, "Class.allInstances()->sortedBy(name)", "Model::EnglishClass\nModel::FrenchClass\nModel::GermanClass\nModel::LanguageClass\nModel::MultiLingualClass\nModel::PlainClass\n");
+		assertConsoleResult(consolePage, asEnglishClass, "ocl::Class.allInstances()->sortedBy(name)", "Model::EnglishClass\nEnglishClass$InEnglish\nModel::FrenchClass\nFrenchClass$InFrench\nModel::GermanClass\nGermanClass$InGerman\nModel::LanguageClass\nModel::MultiLingualClass\nMultiLingualClass$InEnglish\nMultiLingualClass$InFrench\nMultiLingualClass$InGerman\nModel::PlainClass\nString\n");
 		//
 		consolePage.cancelValidation();
 		//		ocl.dispose();
