[unrelated] Treat AssertionError during evaluation as Exception
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/evaluation/AbstractExecutor.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/evaluation/AbstractExecutor.java
index 1a9ce84..6433b15 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/evaluation/AbstractExecutor.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/evaluation/AbstractExecutor.java
@@ -365,6 +365,11 @@
 			//  and produce a better reason as a result.
 			throw new InvalidValueException(e, PivotMessagesInternal.FailedToEvaluate_ERROR_, referredProperty, sourceValue, navigationCallExp);
 		}
+		catch (AssertionError e) {
+			// This is a backstop. Library operations should catch their own exceptions
+			//  and produce a better reason as a result.
+			throw new InvalidValueException(e, PivotMessagesInternal.FailedToEvaluate_ERROR_, referredProperty, sourceValue, navigationCallExp);
+		}
 	}
 
 	/**
@@ -416,6 +421,11 @@
 			//  and produce a better reason as a result.
 			throw new InvalidValueException(e, PivotMessagesInternal.FailedToEvaluate_ERROR_, apparentOperation, ILabelGenerator.Registry.INSTANCE.labelFor(sourceAndArgumentValues[0]), operationCallExp);
 		}
+		catch (AssertionError e) {
+			// This is a backstop. Library operations should catch their own exceptions
+			//  and produce a better reason as a result.
+			throw new InvalidValueException(e, PivotMessagesInternal.FailedToEvaluate_ERROR_, apparentOperation, ILabelGenerator.Registry.INSTANCE.labelFor(sourceAndArgumentValues[0]), operationCallExp);
+		}
 	}
 
 	/**
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/evaluation/BasicEvaluationVisitor.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/evaluation/BasicEvaluationVisitor.java
index ff21d68..113ee85 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/evaluation/BasicEvaluationVisitor.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/evaluation/BasicEvaluationVisitor.java
@@ -152,6 +152,8 @@
 			throw e;
 		} catch (Exception e) {
 			throw new InvalidValueException(e, "Evaluation Failure");
+		} catch (AssertionError e) {
+			throw new InvalidValueException(e, "Evaluation Failure");
 		}
 	}
 
@@ -413,6 +415,11 @@
 			//  and produce a better reason as a result.
 			throw new InvalidValueException(e, StringUtil.bind(PivotMessagesInternal.FailedToEvaluate_ERROR_, staticIteration, sourceValue, iterateExp));	// FIXME dymamicIteration throughout
 		}
+		catch (AssertionError e) {
+			// This is a backstop. Library iterations should catch their own exceptions
+			//  and produce a better reason as a result.
+			throw new InvalidValueException(e, StringUtil.bind(PivotMessagesInternal.FailedToEvaluate_ERROR_, staticIteration, sourceValue, iterateExp));	// FIXME dymamicIteration throughout
+		}
 		return result;
 	}
 
@@ -487,6 +494,11 @@
 			//  and produce a better reason as a result.
 			throw new InvalidValueException(e, PivotMessagesInternal.FailedToEvaluate_ERROR_, staticIteration, sourceValue, iteratorExp);
 		}
+		catch (AssertionError e) {
+			// This is a backstop. Library iterations should catch their own exceptions
+			//  and produce a better reason as a result.
+			throw new InvalidValueException(e, PivotMessagesInternal.FailedToEvaluate_ERROR_, staticIteration, sourceValue, iteratorExp);
+		}
 		return result;
 	}
 
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/evaluation/TracingEvaluationVisitor.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/evaluation/TracingEvaluationVisitor.java
index 3e8939d..a574b43 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/evaluation/TracingEvaluationVisitor.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/evaluation/TracingEvaluationVisitor.java
@@ -56,189 +56,191 @@
  */
 public class TracingEvaluationVisitor extends EvaluationVisitorDecorator implements EvaluationVisitor.EvaluationVisitorExtension {
 
-    /**
-     * Initializes me with the visitor whose evaluation I trace to the console.
-     * 
-     * @param decorated a real evaluation visitor
-     */
-    public TracingEvaluationVisitor(@NonNull EvaluationVisitor decorated) {
-        super(decorated);
-    }
+	/**
+	 * Initializes me with the visitor whose evaluation I trace to the console.
+	 *
+	 * @param decorated a real evaluation visitor
+	 */
+	public TracingEvaluationVisitor(@NonNull EvaluationVisitor decorated) {
+		super(decorated);
+	}
 
-    /** @deprecated moved to Executor 
-     * @since 1.1*/
-    @Override
+	/** @deprecated moved to Executor
+	 * @since 1.1*/
+	@Override
 	@Deprecated
 	public @NonNull Executor getExecutor() {
 		return ((EvaluationVisitor.EvaluationVisitorExtension)delegate).getExecutor();
 	}
 
-    /** @deprecated moved to Executor */
-    @Override
+	/** @deprecated moved to Executor */
+	@Override
 	@Deprecated
 	public @NonNull MetamodelManager getMetamodelManager() {
 		return delegate.getMetamodelManager();
 	}
-   
-    protected @Nullable Object trace(@NonNull Element expression, @Nullable Object value) {
-        try {
-        	HelperUtil.trace("Evaluate: " + expression); //$NON-NLS-1$
-        	HelperUtil.trace("Result  : " + //$NON-NLS-1$
-                (value != null ? TypeId.OCL_INVALID_NAME : String.valueOf(value))); //$NON-NLS-1$
-        } catch (Exception e) {
-            // tracing must not interfere with evaluation
-        }
-        
-        return value;
-    }
-    
-    @Override
-    public @Nullable Object visitAssociationClassCallExp(@NonNull AssociationClassCallExp callExp) {
-        return trace(callExp, delegate.visitAssociationClassCallExp(callExp));
-    }
 
-    @Override
-    public @Nullable Object visitBooleanLiteralExp(@NonNull BooleanLiteralExp literalExp) {
-        return trace(literalExp, delegate.visitBooleanLiteralExp(literalExp));
-    }
+	protected @Nullable Object trace(@NonNull Element expression, @Nullable Object value) {
+		try {
+			HelperUtil.trace("Evaluate: " + expression); //$NON-NLS-1$
+			HelperUtil.trace("Result  : " + //$NON-NLS-1$
+					(value != null ? TypeId.OCL_INVALID_NAME : String.valueOf(value)));
+		} catch (Exception e) {
+			// tracing must not interfere with evaluation
+		} catch (AssertionError e) {
+			// tracing must not interfere with evaluation
+		}
 
-    @Override
-    public @Nullable Object visitCollectionItem(@NonNull CollectionItem item) {
-        return trace(item, delegate.visitCollectionItem(item));
-    }
+		return value;
+	}
 
-    @Override
-    public @Nullable Object visitCollectionLiteralExp(@NonNull CollectionLiteralExp literalExp) {
-        return trace(literalExp, delegate.visitCollectionLiteralExp(literalExp));
-    }
+	@Override
+	public @Nullable Object visitAssociationClassCallExp(@NonNull AssociationClassCallExp callExp) {
+		return trace(callExp, delegate.visitAssociationClassCallExp(callExp));
+	}
 
-    @Override
-    public @Nullable Object visitCollectionRange(@NonNull CollectionRange range) {
-        return trace(range, delegate.visitCollectionRange(range));
-    }
+	@Override
+	public @Nullable Object visitBooleanLiteralExp(@NonNull BooleanLiteralExp literalExp) {
+		return trace(literalExp, delegate.visitBooleanLiteralExp(literalExp));
+	}
 
-    @Override
-    public @Nullable Object visitConstraint(@NonNull Constraint constraint) {
-        return trace(constraint, delegate.visitConstraint(constraint));
-    }
+	@Override
+	public @Nullable Object visitCollectionItem(@NonNull CollectionItem item) {
+		return trace(item, delegate.visitCollectionItem(item));
+	}
 
-    @Override
-    public @Nullable Object visitEnumLiteralExp(@NonNull EnumLiteralExp literalExp) {
-        return trace(literalExp, delegate.visitEnumLiteralExp(literalExp));
-    }
+	@Override
+	public @Nullable Object visitCollectionLiteralExp(@NonNull CollectionLiteralExp literalExp) {
+		return trace(literalExp, delegate.visitCollectionLiteralExp(literalExp));
+	}
 
-    @Override
-    public @Nullable Object visitExpressionInOCL(@NonNull ExpressionInOCL expression) {
-        return trace(expression, delegate.visitExpressionInOCL(expression));
-    }
+	@Override
+	public @Nullable Object visitCollectionRange(@NonNull CollectionRange range) {
+		return trace(range, delegate.visitCollectionRange(range));
+	}
 
-    @Override
-    public @Nullable Object visitIfExp(@NonNull IfExp ifExp) {
-        return trace(ifExp, delegate.visitIfExp(ifExp));
-    }
+	@Override
+	public @Nullable Object visitConstraint(@NonNull Constraint constraint) {
+		return trace(constraint, delegate.visitConstraint(constraint));
+	}
 
-    @Override
-    public @Nullable Object visitIntegerLiteralExp(@NonNull IntegerLiteralExp literalExp) {
-        return trace(literalExp, delegate.visitIntegerLiteralExp(literalExp));
-    }
+	@Override
+	public @Nullable Object visitEnumLiteralExp(@NonNull EnumLiteralExp literalExp) {
+		return trace(literalExp, delegate.visitEnumLiteralExp(literalExp));
+	}
 
-    @Override
-    public @Nullable Object visitInvalidLiteralExp(@NonNull InvalidLiteralExp literalExp) {
-        return trace(literalExp, delegate.visitInvalidLiteralExp(literalExp));
-    }
+	@Override
+	public @Nullable Object visitExpressionInOCL(@NonNull ExpressionInOCL expression) {
+		return trace(expression, delegate.visitExpressionInOCL(expression));
+	}
 
-    @Override
-    public @Nullable Object visitLetExp(@NonNull LetExp letExp) {
-        return trace(letExp, delegate.visitLetExp(letExp));
-    }
+	@Override
+	public @Nullable Object visitIfExp(@NonNull IfExp ifExp) {
+		return trace(ifExp, delegate.visitIfExp(ifExp));
+	}
 
-    @Override
-    public @Nullable Object visitMapLiteralExp(@NonNull MapLiteralExp literalExp) {
-        return trace(literalExp, delegate.visitMapLiteralExp(literalExp));
-    }
+	@Override
+	public @Nullable Object visitIntegerLiteralExp(@NonNull IntegerLiteralExp literalExp) {
+		return trace(literalExp, delegate.visitIntegerLiteralExp(literalExp));
+	}
 
-    @Override
-    public @Nullable Object visitMapLiteralPart(@NonNull MapLiteralPart range) {
-        return trace(range, delegate.visitMapLiteralPart(range));
-    }
+	@Override
+	public @Nullable Object visitInvalidLiteralExp(@NonNull InvalidLiteralExp literalExp) {
+		return trace(literalExp, delegate.visitInvalidLiteralExp(literalExp));
+	}
 
-    @Override
-    public @Nullable Object visitMessageExp(@NonNull MessageExp messageExp) {
-        return trace(messageExp, delegate.visitMessageExp(messageExp));
-    }
+	@Override
+	public @Nullable Object visitLetExp(@NonNull LetExp letExp) {
+		return trace(letExp, delegate.visitLetExp(letExp));
+	}
 
-    @Override
-    public @Nullable Object visitNullLiteralExp(@NonNull NullLiteralExp literalExp) {
-        return trace(literalExp, delegate.visitNullLiteralExp(literalExp));
-    }
+	@Override
+	public @Nullable Object visitMapLiteralExp(@NonNull MapLiteralExp literalExp) {
+		return trace(literalExp, delegate.visitMapLiteralExp(literalExp));
+	}
 
-    @Override
-    public @Nullable Object visitOperationCallExp(@NonNull OperationCallExp callExp) {
-        return trace(callExp, delegate.visitOperationCallExp(callExp));
-    }
+	@Override
+	public @Nullable Object visitMapLiteralPart(@NonNull MapLiteralPart range) {
+		return trace(range, delegate.visitMapLiteralPart(range));
+	}
 
-    @Override
-    public @Nullable Object visitOppositePropertyCallExp(@NonNull OppositePropertyCallExp callExp) {
-        return trace(callExp, delegate.visitOppositePropertyCallExp(callExp));
-    }
+	@Override
+	public @Nullable Object visitMessageExp(@NonNull MessageExp messageExp) {
+		return trace(messageExp, delegate.visitMessageExp(messageExp));
+	}
 
-    @Override
-    public @Nullable Object visitPropertyCallExp(@NonNull PropertyCallExp callExp) {
-        return trace(callExp, delegate.visitPropertyCallExp(callExp));
-    }
+	@Override
+	public @Nullable Object visitNullLiteralExp(@NonNull NullLiteralExp literalExp) {
+		return trace(literalExp, delegate.visitNullLiteralExp(literalExp));
+	}
 
-    @Override
-    public @Nullable Object visitRealLiteralExp(@NonNull RealLiteralExp literalExp) {
-        return trace(literalExp, delegate.visitRealLiteralExp(literalExp));
-    }
+	@Override
+	public @Nullable Object visitOperationCallExp(@NonNull OperationCallExp callExp) {
+		return trace(callExp, delegate.visitOperationCallExp(callExp));
+	}
 
-    @Override
+	@Override
+	public @Nullable Object visitOppositePropertyCallExp(@NonNull OppositePropertyCallExp callExp) {
+		return trace(callExp, delegate.visitOppositePropertyCallExp(callExp));
+	}
+
+	@Override
+	public @Nullable Object visitPropertyCallExp(@NonNull PropertyCallExp callExp) {
+		return trace(callExp, delegate.visitPropertyCallExp(callExp));
+	}
+
+	@Override
+	public @Nullable Object visitRealLiteralExp(@NonNull RealLiteralExp literalExp) {
+		return trace(literalExp, delegate.visitRealLiteralExp(literalExp));
+	}
+
+	@Override
 	public @Nullable Object visitShadowExp(@NonNull ShadowExp shadowExp) {
-        return trace(shadowExp, delegate.visitShadowExp(shadowExp));
-    }
+		return trace(shadowExp, delegate.visitShadowExp(shadowExp));
+	}
 
-    @Override
-    public @Nullable Object visitStateExp(@NonNull StateExp stateExp) {
-        return trace(stateExp, delegate.visitStateExp(stateExp));
-    }
+	@Override
+	public @Nullable Object visitStateExp(@NonNull StateExp stateExp) {
+		return trace(stateExp, delegate.visitStateExp(stateExp));
+	}
 
-    @Override
-    public @Nullable Object visitStringLiteralExp(@NonNull StringLiteralExp literalExp) {
-        return trace(literalExp, delegate.visitStringLiteralExp(literalExp));
-    }
+	@Override
+	public @Nullable Object visitStringLiteralExp(@NonNull StringLiteralExp literalExp) {
+		return trace(literalExp, delegate.visitStringLiteralExp(literalExp));
+	}
 
-    @Override
-    public @Nullable Object visitTupleLiteralExp(@NonNull TupleLiteralExp literalExp) {
-        return trace(literalExp, delegate.visitTupleLiteralExp(literalExp));
-    }
+	@Override
+	public @Nullable Object visitTupleLiteralExp(@NonNull TupleLiteralExp literalExp) {
+		return trace(literalExp, delegate.visitTupleLiteralExp(literalExp));
+	}
 
-    @Override
-    public @Nullable Object visitTupleLiteralPart(@NonNull TupleLiteralPart part) {
-        return trace(part, delegate.visitTupleLiteralPart(part));
-    }
+	@Override
+	public @Nullable Object visitTupleLiteralPart(@NonNull TupleLiteralPart part) {
+		return trace(part, delegate.visitTupleLiteralPart(part));
+	}
 
-    @Override
-    public @Nullable Object visitTypeExp(@NonNull TypeExp typeExp) {
-        return trace(typeExp, delegate.visitTypeExp(typeExp));
-    }
+	@Override
+	public @Nullable Object visitTypeExp(@NonNull TypeExp typeExp) {
+		return trace(typeExp, delegate.visitTypeExp(typeExp));
+	}
 
-    @Override
-    public @Nullable Object visitUnlimitedNaturalLiteralExp(@NonNull UnlimitedNaturalLiteralExp literalExp) {
-        return trace(literalExp, delegate.visitUnlimitedNaturalLiteralExp(literalExp));
-    }
+	@Override
+	public @Nullable Object visitUnlimitedNaturalLiteralExp(@NonNull UnlimitedNaturalLiteralExp literalExp) {
+		return trace(literalExp, delegate.visitUnlimitedNaturalLiteralExp(literalExp));
+	}
 
-    @Override
-    public @Nullable Object visitUnspecifiedValueExp(@NonNull UnspecifiedValueExp unspecExp) {
-        return trace(unspecExp, delegate.visitUnspecifiedValueExp(unspecExp));
-    }
+	@Override
+	public @Nullable Object visitUnspecifiedValueExp(@NonNull UnspecifiedValueExp unspecExp) {
+		return trace(unspecExp, delegate.visitUnspecifiedValueExp(unspecExp));
+	}
 
-    @Override
-    public @Nullable Object visitVariable(@NonNull Variable variable) {
-        return trace(variable, delegate.visitVariable(variable));
-    }
+	@Override
+	public @Nullable Object visitVariable(@NonNull Variable variable) {
+		return trace(variable, delegate.visitVariable(variable));
+	}
 
-    @Override
-    public @Nullable Object visitVariableExp(@NonNull VariableExp variableExp) {
-        return trace(variableExp, delegate.visitVariableExp(variableExp));
-    }
+	@Override
+	public @Nullable Object visitVariableExp(@NonNull VariableExp variableExp) {
+		return trace(variableExp, delegate.visitVariableExp(variableExp));
+	}
 }
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/JavaCompareToOperation.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/JavaCompareToOperation.java
index 2fb6ab4..47e43f3 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/JavaCompareToOperation.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/internal/library/JavaCompareToOperation.java
@@ -40,6 +40,8 @@
 			return ValueUtil.integerValueOf(((Integer)result).intValue());
 		} catch (Exception e) {
 			throw new InvalidValueException(e, PivotMessages.TypedResultRequired, TypeId.INTEGER_NAME);
+		} catch (AssertionError e) {
+			throw new InvalidValueException(e, PivotMessages.TypedResultRequired, TypeId.INTEGER_NAME);
 		}
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/iterator/ExistsIteration.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/iterator/ExistsIteration.java
index f049549..0b7c636 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/iterator/ExistsIteration.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/iterator/ExistsIteration.java
@@ -35,7 +35,7 @@
 	public @NonNull Object createAccumulatorValue(@NonNull Evaluator evaluator, @NonNull TypeId accumulatorTypeId, @NonNull TypeId bodyTypeId) {
 		return createAccumulatorValue(ValueUtil.getExecutor(evaluator), accumulatorTypeId, bodyTypeId);
 	}
-	
+
 	/**
 	 * @since 1.1
 	 */
@@ -56,7 +56,7 @@
 	}
 
 	@Override
-    protected @Nullable Object updateAccumulator(@NonNull IterationManager iterationManager) {
+	protected @Nullable Object updateAccumulator(@NonNull IterationManager iterationManager) {
 		try {
 			Object bodyVal = iterationManager.evaluateBody();
 			if (bodyVal == Boolean.TRUE) {
@@ -92,5 +92,11 @@
 			accumulatorValue.set(ValueUtil.createInvalidValue(e));
 			return CARRY_ON;							// Carry on for nothing found
 		}
+		catch (AssertionError e) {
+			MutableObject accumulatorValue = (MutableObject) iterationManager.getAccumulatorValue();
+			assert accumulatorValue != null;
+			accumulatorValue.set(ValueUtil.createInvalidValue(e));
+			return CARRY_ON;							// Carry on for nothing found
+		}
 	}
 }
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/iterator/ForAllIteration.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/iterator/ForAllIteration.java
index 1c852c6..208ec2f 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/iterator/ForAllIteration.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/iterator/ForAllIteration.java
@@ -35,7 +35,7 @@
 	public @NonNull Object createAccumulatorValue(@NonNull Evaluator evaluator, @NonNull TypeId accumulatorTypeId, @NonNull TypeId bodyTypeId) {
 		return createAccumulatorValue(ValueUtil.getExecutor(evaluator), accumulatorTypeId, bodyTypeId);
 	}
-	
+
 	/**
 	 * @since 1.1
 	 */
@@ -56,7 +56,7 @@
 	}
 
 	@Override
-    protected @Nullable Object updateAccumulator(@NonNull IterationManager iterationManager) {
+	protected @Nullable Object updateAccumulator(@NonNull IterationManager iterationManager) {
 		try {
 			Object bodyVal = iterationManager.evaluateBody();
 			if (bodyVal == Boolean.FALSE) {
@@ -92,5 +92,11 @@
 			accumulatorValue.set(ValueUtil.createInvalidValue(e));
 			return CARRY_ON;							// Carry on for nothing found
 		}
+		catch (AssertionError e) {
+			MutableObject accumulatorValue = (MutableObject) iterationManager.getAccumulatorValue();
+			assert accumulatorValue != null;
+			accumulatorValue.set(ValueUtil.createInvalidValue(e));
+			return CARRY_ON;							// Carry on for nothing found
+		}
 	}
 }
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/iterator/SortedByIteration.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/iterator/SortedByIteration.java
index ab2f0b2..1451558 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/iterator/SortedByIteration.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/iterator/SortedByIteration.java
@@ -96,6 +96,8 @@
 				throw e;
 			} catch (Exception e) {
 				throw new InvalidValueException(e);
+			} catch (AssertionError e) {
+				throw new InvalidValueException(e);
 			}
 		}
 
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/oclany/OclAnyOclLogOperation.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/oclany/OclAnyOclLogOperation.java
index 7b84f5a..fe6b514 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/oclany/OclAnyOclLogOperation.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/oclany/OclAnyOclLogOperation.java
@@ -34,7 +34,9 @@
 			if (log != null) {
 				log.append(getSourceText(sourceVal));
 			}
-		} catch (Exception e) {}
+		}
+		catch (Exception e) {}
+		catch (AssertionError e) {}
 		return sourceVal;
 	}
 
@@ -50,7 +52,9 @@
 			if (log != null) {
 				log.append(message + getSourceText(sourceVal));
 			}
-		} catch (Exception e) {}
+		}
+		catch (Exception e) {}
+		catch (AssertionError e) {}
 		return sourceVal;
 	}
 
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/ValueUtil.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/ValueUtil.java
index 4491d19..72bc30b 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/ValueUtil.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/utilities/ValueUtil.java
@@ -509,7 +509,18 @@
 		}
 	}
 
-	public static @NonNull InvalidValueException createInvalidValue(@NonNull Exception e) {
+	/**
+	 * @since 1.5
+	 */
+	public static @NonNull InvalidValueException createInvalidValue(@NonNull Throwable e) {
+		if (e instanceof InvalidValueException) {
+			return (InvalidValueException)e;
+		}
+		else {
+			return new InvalidValueException(e);
+		}
+	}
+	public static @NonNull InvalidValueException createInvalidValue(@NonNull Exception e) {	// FIXME REmove obsolete signature
 		if (e instanceof InvalidValueException) {
 			return (InvalidValueException)e;
 		}
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/values/InvalidValueException.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/values/InvalidValueException.java
index 44c79e6..ba56efc 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/values/InvalidValueException.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/values/InvalidValueException.java
@@ -48,7 +48,14 @@
 		return ValuesPackage.Literals.INVALID_VALUE;
 	}
 
-	public InvalidValueException(@NonNull Exception exception, /*@NonNull*/ String message) {
+	/**
+	 * @since 1.5
+	 */
+	public InvalidValueException(@NonNull Throwable exception, /*@NonNull*/ String message) {
+		super(exception, message);
+		assert !(exception instanceof InvalidValueException);
+	}
+	public InvalidValueException(@NonNull Exception exception, /*@NonNull*/ String message) {		// FIXME remove obsolete signature
 		super(exception, message);
 		assert !(exception instanceof InvalidValueException);
 	}
@@ -57,13 +64,26 @@
 		super(messageTemplate, bindings);
 	}
 
-	public InvalidValueException(@NonNull Exception exception) {
-		super(exception, null);
-		assert !(exception instanceof InvalidValueException);
+	/**
+	 * @since 1.5
+	 */
+	public InvalidValueException(@NonNull Throwable e) {
+		super(e, null);
+		assert !(e instanceof InvalidValueException);
+	}
+	public InvalidValueException(@NonNull Exception e) {		// FIXME remove obsolete signature
+		super(e, null);
+		assert !(e instanceof InvalidValueException);
 	}
 
-	public InvalidValueException(@NonNull Exception exception, /*@NonNull*/ String messageTemplate, Object... bindings) {
-		super(exception, messageTemplate, bindings);
+	/**
+	 * @since 1.5
+	 */
+	public InvalidValueException(@NonNull Throwable e, /*@NonNull*/ String messageTemplate, Object... bindings) {
+		super(e, messageTemplate, bindings);
+	}
+	public InvalidValueException(@NonNull Exception e, /*@NonNull*/ String messageTemplate, Object... bindings) {
+		super(e, messageTemplate, bindings);					// FIXME remove obsolete signature
 	}
 
 	@Override