diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/LabelUtil.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/LabelUtil.java
index ce6ea62..68d4e3d 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/LabelUtil.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/LabelUtil.java
@@ -4,7 +4,7 @@
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- * 
+ *
  * Contributors:
  * E.D.Willink - initial API and implementation
  * E.D.Willink - Bug 360072
@@ -45,16 +45,16 @@
 import org.eclipse.ocl.pivot.labels.LabelGeneratorRegistry;
 
 public class LabelUtil
-{	
+{
 	/**
-	 * The global QUALIFIED_NAME_REGISTRY is used by qualifiedNameFor to generate qualified names 
+	 * The global QUALIFIED_NAME_REGISTRY is used by qualifiedNameFor to generate qualified names
 	 * for objects; typically a :: separted hierarchical name.  The QUALIFIED_NAME_REGISTRY delegates unsupported
 	 * label generation to the SIMPLE_NAME_REGISTRY.
 	 */
 	public static ILabelGenerator.@NonNull Registry QUALIFIED_NAME_REGISTRY = new LabelGeneratorRegistry(ILabelGenerator.Registry.INSTANCE);
 
 	/**
-	 * The global SIMPLE_NAME_REGISTRY is used by simpleNameFor to generate simple names 
+	 * The global SIMPLE_NAME_REGISTRY is used by simpleNameFor to generate simple names
 	 * for objects; typically the name property. The SIMPLE_NAME_REGISTRY delegates unsupported
 	 * label generation to the global ILabelGenerator.Registry.INSTANCE.
 	 */
@@ -83,7 +83,7 @@
 				}
 			}
 		});
-		
+
 		/**
 		 * Install an ENamedElement label generator that :: separates hierarchical names.
 		 */
@@ -126,24 +126,24 @@
 	 * Returns null if there are no unresolved URIs.
 	 * <br>
 	 * Returns a String containing a title line containing the contextURI and
-	 * subsequent lines identifying each distinct unresolved URI. 
+	 * subsequent lines identifying each distinct unresolved URI.
 	 */
 	public static @Nullable String diagnoseUnresolvedProxies(@NonNull URI contextURI, @NonNull Map<EObject, Collection<EStructuralFeature.Setting>> map) {
-	    if (map.isEmpty())
-	    	return null;	    
-    	Map<String, Map.Entry<EObject, Collection<EStructuralFeature.Setting>>> unresolvedURIs = new HashMap<String, Map.Entry<EObject, Collection<EStructuralFeature.Setting>>>(map.size());
-    	for (Map.Entry<EObject, Collection<EStructuralFeature.Setting>> entry : map.entrySet()) {
-    		EObject key = entry.getKey();
-    		URI uri = EcoreUtil.getURI(key);
+		if (map.isEmpty())
+			return null;
+		Map<String, Map.Entry<EObject, Collection<EStructuralFeature.Setting>>> unresolvedURIs = new HashMap<String, Map.Entry<EObject, Collection<EStructuralFeature.Setting>>>(map.size());
+		for (Map.Entry<EObject, Collection<EStructuralFeature.Setting>> entry : map.entrySet()) {
+			EObject key = entry.getKey();
+			URI uri = EcoreUtil.getURI(key);
 			String uriString = uri.toString();
 			if (!unresolvedURIs.containsKey(uriString))
 				unresolvedURIs.put(uriString, entry);
-    	}
-    	StringBuilder s = new StringBuilder();
+		}
+		StringBuilder s = new StringBuilder();
 		s.append("Unresolved URIs in '" + String.valueOf(contextURI) + "' :");
-    	for (Map.Entry<String, Map.Entry<EObject, Collection<EStructuralFeature.Setting>>> unresolvedURI : unresolvedURIs.entrySet())
- 			s.append("\n    '" + unresolvedURI.getKey() + "'");
-    	return s.toString();
+		for (Map.Entry<String, Map.Entry<EObject, Collection<EStructuralFeature.Setting>>> unresolvedURI : unresolvedURIs.entrySet())
+			s.append("\n    '" + unresolvedURI.getKey() + "'");
+		return s.toString();
 	}
 
 	public static @Nullable <T extends Adapter> T getAdapter(@Nullable Notifier notifier, Class<T> adapterClass) {
@@ -151,7 +151,7 @@
 			return null;
 		return getAdapter(notifier.eAdapters(), adapterClass);
 	}
-	
+
 	@SuppressWarnings("unchecked")
 	public static <T extends Adapter> T getAdapter(List<Adapter> eAdapters, Class<T> adapterClass) {
 		return (T) EcoreUtil.getAdapter(eAdapters, adapterClass);
@@ -160,7 +160,7 @@
 	/**
 	 * Return the specialised value of feature.getEType() resolving any type parameters
 	 * from the specialised type of the sourceObject of the feature.
-	 * 
+	 *
 	 * @param sourceObject
 	 * @param feature
 	 */
@@ -188,7 +188,7 @@
 
 	/**
 	 * Return the Ecore EStringToStringMapEntry that realises a given Constraint.
-	 * 
+	 *
 	 * @param constraint the constraint
 	 * @return the annotation detail entry, null if not found
 	 *
@@ -235,7 +235,7 @@
 	    EMap<String, String> details = eAnnotation.getDetails();
 	    if (keyName != null) {
 	    	int indexOfKey = details.indexOfKey(keyName);
-		    if (indexOfKey >= 0) { 
+		    if (indexOfKey >= 0) {
 		    	return details.get(indexOfKey);
 		    }
 	    }
@@ -272,7 +272,7 @@
 	/**
 	 * Return a simple readable description of eObject using an IItemLabelProvider if possible.
 	 */
-	public static String getLabel(@Nullable Object object) {
+	public static @NonNull String getLabel(@Nullable Object object) {
 		if (object instanceof Labelable) {
 			String text = ((Labelable)object).getText();
 			if (text != null) {
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/ToStringVisitor.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/ToStringVisitor.java
index 7ca9429..c1a28f7 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/ToStringVisitor.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/ToStringVisitor.java
@@ -182,7 +182,7 @@
 	 * want just <code>"null"</code> because that would look like the OclVoid
 	 * literal.
 	 */
-	protected static @NonNull String NULL_PLACEHOLDER = "\"<null>\""; //$NON-NLS-1$
+	protected static @NonNull String NULL_PLACEHOLDER = "«null»"; //$NON-NLS-1$
 
 	/**
 	 * Initializes me.
@@ -417,7 +417,14 @@
 			append(NULL_PLACEHOLDER);
 		}
 		else {
-			v.accept(this);
+			try {
+				v.accept(this);
+			}
+			catch (Throwable e) {
+				append("«");
+				append(e.getMessage());
+				append("»");
+			}
 		}
 		return null;
 	}
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 455c407..f052c7d 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
@@ -171,8 +171,8 @@
 		MyOCL ocl = createOCL();
 		ocl.initStateMachinePackage(getTestModelURI("model/StateMachines.uml"),
 			new @NonNull String[] {
-			"The 'Feature::TypeIsNotNull' constraint is violated for 'Model::C1::o1() : \"<null>\"[1]'",
-			"The 'Feature::TypeIsNotNull' constraint is violated for 'Model::C2::o2() : \"<null>\"[1]'"
+			"The 'Feature::TypeIsNotNull' constraint is violated for 'Model::C1::o1() : «null»[1]'",
+			"The 'Feature::TypeIsNotNull' constraint is violated for 'Model::C2::o2() : «null»[1]'"
 		});
 		MetamodelManager metamodelManager = ocl.getMetamodelManager();
 		EObject context = ocl.statefulEFactory.create(ocl.c1Class);
diff --git a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/test/xtext/SerializeTests.java b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/test/xtext/SerializeTests.java
index 5bf7832..feb15a3 100644
--- a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/test/xtext/SerializeTests.java
+++ b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/test/xtext/SerializeTests.java
@@ -479,26 +479,26 @@
 
 	public void testSerialize_Expressions() throws Exception {
 		OCL ocl = OCL.newInstance(getProjectMap());
-		String testFile = 
-				"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 
-				"<ecore:EPackage xmi:version=\"2.0\" xmlns:xmi=\"http://www.omg.org/XMI\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" + 
-				"    xmlns:ecore=\"http://www.eclipse.org/emf/2002/Ecore\" name=\"b\" nsURI=\"bbb\" nsPrefix=\"bb\">\n" + 
-				"  <eAnnotations source=\"http://www.eclipse.org/emf/2002/Ecore\">\n" + 
-				"    <details key=\"invocationDelegates\" value=\"http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot\"/>\n" + 
-				"    <details key=\"settingDelegates\" value=\"http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot\"/>\n" + 
-				"    <details key=\"validationDelegates\" value=\"http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot\"/>\n" + 
-				"  </eAnnotations>\n" + 
-				"  <eClassifiers xsi:type=\"ecore:EClass\" name=\"Expressions\">\n" + 
-				"    <eAnnotations source=\"http://www.eclipse.org/emf/2002/Ecore\">\n" + 
-				"      <details key=\"constraints\" value=\"SimpleIf SingleElseIf DoubleElseIf\"/>\n" + 
-				"    </eAnnotations>\n" + 
-				"    <eAnnotations source=\"http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot\">\n" + 
-				"      <details key=\"SimpleIf\" value=\"if true then 1 else 2 endif &lt;> 0\"/>\n" + 
-				"      <details key=\"SingleElseIf\" value=\"if true then 1 elseif true then 2 else 3 endif &lt;> 0\"/>\n" + 
-				"      <details key=\"DoubleElseIf\" value=\"if true then 1 elseif true then 2 elseif true then 3 else 4 endif &lt;> 0\"/>\n" + 
-				"    </eAnnotations>\n" + 
-				"  </eClassifiers>\n" + 
-				"</ecore:EPackage>\n";
+		String testFile =
+				"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+						"<ecore:EPackage xmi:version=\"2.0\" xmlns:xmi=\"http://www.omg.org/XMI\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
+						"    xmlns:ecore=\"http://www.eclipse.org/emf/2002/Ecore\" name=\"b\" nsURI=\"bbb\" nsPrefix=\"bb\">\n" +
+						"  <eAnnotations source=\"http://www.eclipse.org/emf/2002/Ecore\">\n" +
+						"    <details key=\"invocationDelegates\" value=\"http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot\"/>\n" +
+						"    <details key=\"settingDelegates\" value=\"http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot\"/>\n" +
+						"    <details key=\"validationDelegates\" value=\"http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot\"/>\n" +
+						"  </eAnnotations>\n" +
+						"  <eClassifiers xsi:type=\"ecore:EClass\" name=\"Expressions\">\n" +
+						"    <eAnnotations source=\"http://www.eclipse.org/emf/2002/Ecore\">\n" +
+						"      <details key=\"constraints\" value=\"SimpleIf SingleElseIf DoubleElseIf\"/>\n" +
+						"    </eAnnotations>\n" +
+						"    <eAnnotations source=\"http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot\">\n" +
+						"      <details key=\"SimpleIf\" value=\"if true then 1 else 2 endif &lt;> 0\"/>\n" +
+						"      <details key=\"SingleElseIf\" value=\"if true then 1 elseif true then 2 else 3 endif &lt;> 0\"/>\n" +
+						"      <details key=\"DoubleElseIf\" value=\"if true then 1 elseif true then 2 elseif true then 3 else 4 endif &lt;> 0\"/>\n" +
+						"    </eAnnotations>\n" +
+						"  </eClassifiers>\n" +
+						"</ecore:EPackage>\n";
 		createOCLinEcoreFile("Expressions.ecore", testFile);
 		doSerialize(ocl, "Expressions");
 		ocl.dispose();
@@ -603,8 +603,8 @@
 		UMLStandaloneSetup.init();
 		OCL ocl = OCL.newInstance(getProjectMap());
 		doSerializeUML(ocl, "StateMachines", new @NonNull String[] {
-			"The 'Feature::TypeIsNotNull' constraint is violated for 'Model::C1::o1() : \"<null>\"[1]'",
-			"The 'Feature::TypeIsNotNull' constraint is violated for 'Model::C2::o2() : \"<null>\"[1]'"
+			"The 'Feature::TypeIsNotNull' constraint is violated for 'Model::C1::o1() : «null»[1]'",
+			"The 'Feature::TypeIsNotNull' constraint is violated for 'Model::C2::o2() : «null»[1]'"
 		});
 		ocl.dispose();
 	}
