diff --git a/plugins/org.eclipse.m2m.qvt.oml/META-INF/MANIFEST.MF b/plugins/org.eclipse.m2m.qvt.oml/META-INF/MANIFEST.MF
index 0989059..85bc057 100644
--- a/plugins/org.eclipse.m2m.qvt.oml/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.m2m.qvt.oml/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.m2m.qvt.oml;singleton:=true
-Bundle-Version: 3.9.2.qualifier
+Bundle-Version: 3.9.3.qualifier
 Bundle-Activator: org.eclipse.m2m.internal.qvt.oml.QvtPlugin$Implementation
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/blackbox/java/JavaMethodHandlerFactory.java b/plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/blackbox/java/JavaMethodHandlerFactory.java
index 95ec107..29a16dc 100644
--- a/plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/blackbox/java/JavaMethodHandlerFactory.java
+++ b/plugins/org.eclipse.m2m.qvt.oml/src/org/eclipse/m2m/internal/qvt/oml/blackbox/java/JavaMethodHandlerFactory.java
@@ -1,11 +1,11 @@
 /*******************************************************************************
  * Copyright (c) 2008, 2018 Borland Software Corporation and others.
- * 
+ *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v2.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v20.html
- *   
+ *
  * Contributors:
  *     Borland Software Corporation - initial API and implementation
  *     Christopher Gerking - bug 289982
@@ -34,109 +34,89 @@
 import org.eclipse.ocl.types.OCLStandardLibrary;
 
 class JavaMethodHandlerFactory {
-	
+
 	private static int FAILURE_COUNT_TOLERANCE = 5;
-	
+
 	final private Object fInvalid;
-	
+
 	JavaMethodHandlerFactory(OCLStandardLibrary<EClassifier> oclStdLib) {
 		fInvalid = oclStdLib.getInvalid();
 	}
-	
+
 	CallHandler createHandler(Method method) {
 		if(method == null) {
 			throw new IllegalArgumentException();
 		}
-		
-		Operation opAnnotation = method.getAnnotation(Operation.class);		
+
+		Operation opAnnotation = method.getAnnotation(Operation.class);
 		return new Handler(method, opAnnotation != null && opAnnotation.contextual(),
 				opAnnotation != null && opAnnotation.withExecutionContext());
 	}
-	
+
 	private Object getInvalidResult() {
 		return fInvalid;
 	}
-		
+
 	private class Handler extends CallHandler {
-				
+
 		private final Method fMethod;
 		private final Class<?>[] fCachedParamTypes;
 		private final boolean fIsContextual;
 		private final boolean fWithExecutionContext;
 		private final boolean fRequiresNumConversion;
-		private volatile int fFatalErrorCount;		
-		
+		private volatile int fFatalErrorCount;
+
 		Handler(Method method, boolean isContextual, boolean isWithExecutionContext) {
 			assert method != null;
-			
+
 			fMethod = method;
-			fCachedParamTypes = fMethod.getParameterTypes(); 			
+			fCachedParamTypes = fMethod.getParameterTypes();
 			fIsContextual = isContextual;
 			fWithExecutionContext = isWithExecutionContext;
-			fRequiresNumConversion = requiresNumberConversion(); 
+			fRequiresNumConversion = requiresNumberConversion();
 			fFatalErrorCount = 0;
-		}		
+		}
 
+		@Override
 		public Object invoke(ModuleInstance module, Object source, Object[] args, QvtOperationalEvaluationEnv evalEnv) {
 			try {
 				if(isDisabled()) {
 					return getInvalidResult();
 				}
-							
+
 				Object[] actualArgs = prepareArguments(source, args, evalEnv);
 				Object javaCallSource = null;
-				
+
 				boolean isStatic = Modifier.isStatic(fMethod.getModifiers());
 				if(!isStatic) {
-					Class<?> moduleJavaClass = fMethod.getDeclaringClass();					
-					javaCallSource = getJavaCallSource(module, moduleJavaClass, evalEnv); //module.getAdapter(moduleJavaClass);					
+					Class<?> moduleJavaClass = fMethod.getDeclaringClass();
+					javaCallSource = getJavaCallSource(module, moduleJavaClass, evalEnv); //module.getAdapter(moduleJavaClass);
 					assert javaCallSource != null;
 				}
-								
+
 				return fMethod.invoke(javaCallSource, actualArgs);
 			}
-			catch (IllegalArgumentException e) {
-				incrementFatalErrorCount();
-				QvtPlugin.error(NLS.bind(JavaBlackboxMessages.MethodInvocationError, fMethod), e);
-				evalEnv.getAdapter(InternalEvaluationEnv.class).throwQVTException(
-						new QvtRuntimeException(NLS.bind(JavaBlackboxMessages.MethodInvocationError, fMethod), e));
-				return CallHandlerAdapter.getInvalidResult(evalEnv);			
-			} 
-			catch (IllegalAccessException e) {
-				incrementFatalErrorCount();				
-				QvtPlugin.error(NLS.bind(JavaBlackboxMessages.MethodInvocationError, fMethod), e);				
-				evalEnv.getAdapter(InternalEvaluationEnv.class).throwQVTException(
-						new QvtRuntimeException(NLS.bind(JavaBlackboxMessages.MethodInvocationError, fMethod), e));
-				return CallHandlerAdapter.getInvalidResult(evalEnv);
-			}
-			catch (InstantiationException e) {
-				incrementFatalErrorCount();				
-				QvtPlugin.error(NLS.bind(JavaBlackboxMessages.MethodInvocationError, fMethod), e);				
-				evalEnv.getAdapter(InternalEvaluationEnv.class).throwQVTException(
-						new QvtRuntimeException(NLS.bind(JavaBlackboxMessages.MethodInvocationError, fMethod), e));
-				return CallHandlerAdapter.getInvalidResult(evalEnv);
-			}
-			catch (InvocationTargetException e) {
-				
-				if (e.getTargetException() instanceof OperationCanceledException) {
+			catch (Throwable t) {	// IllegalArgumentException, IllegalAccessException, InstantiationException, InvocationTargetException
+				if (t instanceof InvocationTargetException) {
+					t = ((InvocationTargetException)t).getTargetException();
+				}
+				if (t instanceof OperationCanceledException) {
 					throw new QvtInterruptedExecutionException();
 				}
-				
 				incrementFatalErrorCount();
-				QvtPlugin.error(NLS.bind(JavaBlackboxMessages.MethodInvocationError, fMethod), e.getTargetException());				
-				// should not happen at all, as we do not support QVT exception in signature yet
-				String localized = "\nCaused by: " + e.getTargetException().getClass().getName() + //$NON-NLS-1$ 
-						(e.getTargetException().getLocalizedMessage() == null ? "" : ": " + e.getTargetException().getLocalizedMessage()); //$NON-NLS-1$ //$NON-NLS-2$
+				QvtPlugin.error(NLS.bind(JavaBlackboxMessages.MethodInvocationError, fMethod), t);
+				String localized = "\nCaused by: " + t.getClass().getName() + //$NON-NLS-1$
+						(t.getLocalizedMessage() == null ? "" : ": " + t.getLocalizedMessage()); //$NON-NLS-1$ //$NON-NLS-2$
 				evalEnv.getAdapter(InternalEvaluationEnv.class).throwQVTException(
-						new QvtRuntimeException(NLS.bind(JavaBlackboxMessages.MethodInvocationError, fMethod) + localized, e.getTargetException()));
+						new QvtRuntimeException(NLS.bind(JavaBlackboxMessages.MethodInvocationError, fMethod) + localized, t));
 				return CallHandlerAdapter.getInvalidResult(evalEnv);
 			}
 		}
-		
+
 		private void incrementFatalErrorCount(){
 			fFatalErrorCount++;
 		}
-						
+
 		private Object getJavaCallSource(ModuleInstance moduleInstance, Class<?> javaClass, QvtOperationalEvaluationEnv evalEnv)
 				throws IllegalAccessException, InstantiationException {
 
@@ -157,11 +137,11 @@
 
 			return callSource;
 		}
-		
+
 		private boolean isDisabled() {
 			return fFatalErrorCount > FAILURE_COUNT_TOLERANCE;
 		}
-		
+
 		private Object[] prepareArguments(Object source, Object[] args, QvtOperationalEvaluationEnv evalEnv) {
 			int argCount = args.length;
 			if (fIsContextual) {
@@ -172,7 +152,7 @@
 			}
 
 			Object resultArgs[] = new Object[argCount];
-			
+
 			int argIndex = 0;
 			if (fWithExecutionContext) {
 				resultArgs[argIndex] = evalEnv.getContext();
@@ -182,7 +162,7 @@
 				resultArgs[argIndex] = source;
 				argIndex++;
 			}
-			
+
 			// filter out possible OclInvalid argument values passed from AST based evaluation
 			// source can't be this case as the call can not be made
 			for (int i = 0; i < args.length; i++) {
@@ -198,19 +178,19 @@
 				}
 				resultArgs[argIndex++] = nextArg;
 			}
-			
+
 			return resultArgs;
 		}
-		
+
 		private boolean requiresNumberConversion() {
 			assert fMethod != null;
-			
+
 			for (Class<?> paramType : fMethod.getParameterTypes()) {
 				if(Number.class.isAssignableFrom(paramType)) {
 					return true;
 				}
 			}
 			return false;
-		}		
-	}	
+		}
+	}
 }
