diff --git a/plugins/org.eclipse.papyrus.moka.engine.uml.scheduling/src/org/eclipse/papyrus/moka/engine/uml/scheduling/IUMLTaskExecutionFactory.java b/plugins/org.eclipse.papyrus.moka.engine.uml.scheduling/src/org/eclipse/papyrus/moka/engine/uml/scheduling/IUMLTaskExecutionFactory.java
index 1e87cdf..a1fcc56 100644
--- a/plugins/org.eclipse.papyrus.moka.engine.uml.scheduling/src/org/eclipse/papyrus/moka/engine/uml/scheduling/IUMLTaskExecutionFactory.java
+++ b/plugins/org.eclipse.papyrus.moka.engine.uml.scheduling/src/org/eclipse/papyrus/moka/engine/uml/scheduling/IUMLTaskExecutionFactory.java
@@ -14,12 +14,14 @@
  *****************************************************************************/
 package org.eclipse.papyrus.moka.engine.uml.scheduling;
 
+import org.eclipse.uml2.uml.Element;
+
 public interface IUMLTaskExecutionFactory {
 
 	IUMLEventDispatchLoopExecution createEventDispatchLoopExecution();
 	
 	IUMLEventSendingExecution createEventSendingExecution();
 	
-	IUMLRootExecution createRootExecution();
+	UMLRootExecution<?> createRootExecution(final Element executionRoot);
 	
 }
diff --git a/plugins/org.eclipse.papyrus.moka.engine.uml.scheduling/src/org/eclipse/papyrus/moka/engine/uml/scheduling/RootBehaviorTaskExecution.java b/plugins/org.eclipse.papyrus.moka.engine.uml.scheduling/src/org/eclipse/papyrus/moka/engine/uml/scheduling/RootBehaviorTaskExecution.java
new file mode 100644
index 0000000..bcf3016
--- /dev/null
+++ b/plugins/org.eclipse.papyrus.moka.engine.uml.scheduling/src/org/eclipse/papyrus/moka/engine/uml/scheduling/RootBehaviorTaskExecution.java
@@ -0,0 +1,50 @@
+/*****************************************************************************
+ * Copyright (c) 2020 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+package org.eclipse.papyrus.moka.engine.uml.scheduling;
+
+import java.util.List;
+
+import org.eclipse.papyrus.moka.fuml.commonbehavior.IParameterValue;
+import org.eclipse.papyrus.moka.fuml.simpleclassifiers.IValue;
+import org.eclipse.papyrus.moka.kernel.scheduling.control.IExecutionLoop;
+import org.eclipse.uml2.uml.Activity;
+import org.eclipse.uml2.uml.Behavior;
+import org.eclipse.uml2.uml.StateMachine;
+
+public class RootBehaviorTaskExecution extends UMLRootExecution<Behavior>{
+
+	public RootBehaviorTaskExecution(IExecutionLoop loop, Behavior executionRoot) {
+		super(loop, executionRoot);
+	}
+	
+	@Override
+	public boolean canExecute() {
+		return root instanceof Activity || root instanceof StateMachine;
+	}
+	
+	@Override
+	public void execute() {
+		List<IParameterValue> outputParameterValues = locus.getExecutor().execute(root, null, parameterValues);
+		for (IParameterValue outputParameterValue : outputParameterValues) {
+			setParameterValue(outputParameterValue);
+		}
+	}
+	
+	@Override
+	public IValue new_() {
+		return new RootBehaviorTaskExecution(executionLoop, root);
+	}
+
+}
diff --git a/plugins/org.eclipse.papyrus.moka.engine.uml.scheduling/src/org/eclipse/papyrus/moka/engine/uml/scheduling/RootClassTaskExecution.java b/plugins/org.eclipse.papyrus.moka.engine.uml.scheduling/src/org/eclipse/papyrus/moka/engine/uml/scheduling/RootClassTaskExecution.java
new file mode 100644
index 0000000..7bc2bdd
--- /dev/null
+++ b/plugins/org.eclipse.papyrus.moka.engine.uml.scheduling/src/org/eclipse/papyrus/moka/engine/uml/scheduling/RootClassTaskExecution.java
@@ -0,0 +1,45 @@
+/*****************************************************************************
+ * Copyright (c) 2020 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+package org.eclipse.papyrus.moka.engine.uml.scheduling;
+
+import org.eclipse.papyrus.moka.fuml.simpleclassifiers.IValue;
+import org.eclipse.papyrus.moka.kernel.scheduling.control.IExecutionLoop;
+import org.eclipse.uml2.uml.Activity;
+import org.eclipse.uml2.uml.Class;
+import org.eclipse.uml2.uml.StateMachine;
+
+public class RootClassTaskExecution extends UMLRootExecution<Class>{
+
+	public RootClassTaskExecution(IExecutionLoop loop, Class executionRoot) {
+		super(loop, executionRoot);
+	}
+
+	@Override
+	public boolean canExecute() {
+		return root.isActive() && (root.getClassifierBehavior() instanceof StateMachine || root.getClassifierBehavior() instanceof Activity);
+	}
+	
+	@Override
+	public void execute() {
+		locus.getExecutor().start(root, parameterValues);
+	}
+	
+	@Override
+	public IValue new_() {
+		// TODO Auto-generated method stub
+		return super.new_();
+	}
+	
+}
diff --git a/plugins/org.eclipse.papyrus.moka.engine.uml.scheduling/src/org/eclipse/papyrus/moka/engine/uml/scheduling/UMLEventDispatchLoopExecution.java b/plugins/org.eclipse.papyrus.moka.engine.uml.scheduling/src/org/eclipse/papyrus/moka/engine/uml/scheduling/UMLEventDispatchLoopExecution.java
index 20c66ac..245b867 100644
--- a/plugins/org.eclipse.papyrus.moka.engine.uml.scheduling/src/org/eclipse/papyrus/moka/engine/uml/scheduling/UMLEventDispatchLoopExecution.java
+++ b/plugins/org.eclipse.papyrus.moka.engine.uml.scheduling/src/org/eclipse/papyrus/moka/engine/uml/scheduling/UMLEventDispatchLoopExecution.java
@@ -129,7 +129,8 @@
 			DebugAssistantException debugAssistantException) {
 		Suspension suspension = new Suspension(debugAssistantException.getDebugAssistant(),
 				SuspensionReasons.ERROR_DETECTION);
-		if (executionEngineService.shouldContinueInDebugAssistant(debugAssistantException.getDebugAssistant().getAssistantID())) {
+		if (executionEngineService
+				.shouldContinueInDebugAssistant(debugAssistantException.getDebugAssistant().getAssistantID())) {
 			Element node = debugAssistantException.getVisitorNode();
 			ISemanticVisitor visitor = debugAssistantException.getVisitor();
 			if (node != null) {
@@ -202,12 +203,11 @@
 
 	@Override
 	public String toString() {
-		return "EventDispatchLoopExecution(" + dispatchLoop + ")";
+		return "EventDispatchLoopExecution(" + dispatchLoop + ")"; //$NON-NLS-1$ //$NON-NLS-2$
 	}
 
 	@Override
 	public void suspend() {
-		System.out.println("Suspend -> " + this);
 		if (!dispatchLoopLock.isHeldByCurrentThread()) {
 			dispatchLoopLock.lock();
 		}
@@ -223,7 +223,6 @@
 
 	@Override
 	public void resume() {
-		System.out.println("Resume -> " + this);
 	}
 
 	@Override
diff --git a/plugins/org.eclipse.papyrus.moka.engine.uml.scheduling/src/org/eclipse/papyrus/moka/engine/uml/scheduling/UMLRootExecution.java b/plugins/org.eclipse.papyrus.moka.engine.uml.scheduling/src/org/eclipse/papyrus/moka/engine/uml/scheduling/UMLRootExecution.java
index e28bd63..56d118d 100644
--- a/plugins/org.eclipse.papyrus.moka.engine.uml.scheduling/src/org/eclipse/papyrus/moka/engine/uml/scheduling/UMLRootExecution.java
+++ b/plugins/org.eclipse.papyrus.moka.engine.uml.scheduling/src/org/eclipse/papyrus/moka/engine/uml/scheduling/UMLRootExecution.java
@@ -1,5 +1,5 @@
 /*****************************************************************************
- * Copyright (c) 2019 CEA LIST and others.
+ * Copyright (c) 2019, 2020 CEA LIST and others.
  * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -19,65 +19,29 @@
 
 import org.eclipse.papyrus.moka.fuml.commonbehavior.IExecution;
 import org.eclipse.papyrus.moka.fuml.commonbehavior.IParameterValue;
-import org.eclipse.papyrus.moka.fuml.simpleclassifiers.IValue;
 import org.eclipse.papyrus.moka.kernel.scheduling.control.IExecutionLoop;
-import org.eclipse.uml2.uml.Activity;
-import org.eclipse.uml2.uml.Behavior;
-import org.eclipse.uml2.uml.Class;
+import org.eclipse.uml2.uml.Element;
 import org.eclipse.uml2.uml.Parameter;
 import org.eclipse.uml2.uml.ParameterDirectionKind;
-import org.eclipse.uml2.uml.StateMachine;
 
-public class UMLRootExecution extends UMLTaskExecution implements IUMLRootExecution{
+public abstract class UMLRootExecution<RootElementType extends Element> extends UMLTaskExecution{
 
 	/**
-	 * Model element considered as the root of the execution
+	 * Model element from which the execution starts
 	 */
-	protected Class root;
+	protected RootElementType root;
 
 	/**
 	 * Root execution parameter values
 	 */
 	protected List<IParameterValue> parameterValues;
 
-	public UMLRootExecution(IExecutionLoop loop) {
+	public UMLRootExecution(IExecutionLoop loop, RootElementType executionRoot) {
 		super(loop);
+		root = executionRoot;
 		parameterValues = new ArrayList<IParameterValue>();
 	}
 
-	/**
-	 * 
-	 */
-	@Override
-	public void setRoot(Class r) {
-		root = r;
-	}
-
-	/**
-	 * @see {@linkIExecution#setParameterValue(IParameterValue)}
-	 */
-	@Override
-	public Class getRoot() {
-		return root;
-	}
-
-	@Override
-	public boolean canExecute() {
-		if (root != null) {
-			if (!root.isAbstract()) {
-				if (isBehavior()) {
-					if (root instanceof Activity) {
-						return true;
-					} else
-						return root instanceof StateMachine && root.isActive();
-				}
-			} else if (root instanceof Class) {
-				return root.isActive();
-			}
-		}
-		return false;
-	}
-
 	/***
 	 * @see {@link IExecution#setParameterValue(IParameterValue)}
 	 * 
@@ -166,32 +130,6 @@
 			setParameterValue(inputParameterValue);
 		}
 	}
-
-	private boolean isBehavior() {
-		return root instanceof Behavior;
-	}
-
-	/**
-	 * see {@link IExecution#execute()}
-	 * 
-	 * Execution of the root takes place in two situations: (1) the root is active -
-	 * it is either a behavior or a class (2) the root is a behavior Output
-	 * parameter values may only be returned if (2) occurs.
-	 */
-	@Override
-	public void execute() {
-		if (root != null) {
-			if (root.isActive()) {
-				locus.getExecutor().start(root, parameterValues);
-			} else if (isBehavior()) {
-				List<IParameterValue> outputParameterValues = locus.getExecutor().execute((Behavior) root, null,
-						parameterValues);
-				for (IParameterValue outputParameterValue : outputParameterValues) {
-					setParameterValue(outputParameterValue);
-				}
-			}
-		}
-	}
 	
 	@Override
 	public void suspend() {
@@ -203,15 +141,8 @@
 	}
 
 	@Override
-	public IValue new_() {
-		IUMLRootExecution rootExecution = new UMLRootExecution(executionLoop);
-		rootExecution.setRoot(root);
-		return rootExecution;
-	}
-
-	@Override
 	public String toString() {
-		return "RootExecution()";
+		return "RootExecution()"; //$NON-NLS-1$
 	}
 
 }
diff --git a/plugins/org.eclipse.papyrus.moka.engine.uml.scheduling/src/org/eclipse/papyrus/moka/engine/uml/scheduling/UMLTaskExecutionFactory.java b/plugins/org.eclipse.papyrus.moka.engine.uml.scheduling/src/org/eclipse/papyrus/moka/engine/uml/scheduling/UMLTaskExecutionFactory.java
index 72028ba..3eed75c 100644
--- a/plugins/org.eclipse.papyrus.moka.engine.uml.scheduling/src/org/eclipse/papyrus/moka/engine/uml/scheduling/UMLTaskExecutionFactory.java
+++ b/plugins/org.eclipse.papyrus.moka.engine.uml.scheduling/src/org/eclipse/papyrus/moka/engine/uml/scheduling/UMLTaskExecutionFactory.java
@@ -1,5 +1,5 @@
 /*****************************************************************************
- * Copyright (c) 2019 CEA LIST and others.
+ * Copyright (c) 2019, 2020 CEA LIST and others.
  * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -15,42 +15,59 @@
 package org.eclipse.papyrus.moka.engine.uml.scheduling;
 
 import org.eclipse.papyrus.moka.kernel.scheduling.control.IExecutionLoop;
+import org.eclipse.uml2.uml.Behavior;
+import org.eclipse.uml2.uml.Class;
+import org.eclipse.uml2.uml.Element;
 
-public class UMLTaskExecutionFactory implements IUMLTaskExecutionFactory{
+public class UMLTaskExecutionFactory implements IUMLTaskExecutionFactory {
 
-	protected static UMLTaskExecutionFactory FACTORY; 
-	
+	/**
+	 * Factory instance
+	 */
+	private static UMLTaskExecutionFactory FACTORY;
+
 	protected IExecutionLoop executionLoop;
-	
+
 	protected UMLTaskExecutionFactory() {
 		executionLoop = null;
 	}
 
-	public static UMLTaskExecutionFactory getFactory() {
-		if(FACTORY == null) {
+	/**
+	 * Create (if required) and return the factory instance
+	 * 
+	 * @return the task factory
+	 */
+	public static UMLTaskExecutionFactory getInstance() {
+		if (FACTORY == null) {
 			FACTORY = new UMLTaskExecutionFactory();
 		}
 		return FACTORY;
 	}
-	
+
 	public IExecutionLoop getExecutionLoop() {
 		return executionLoop;
 	}
-	
+
 	public void setExecutionLoop(IExecutionLoop loop) {
 		executionLoop = loop;
 	}
-	
+
 	public IUMLEventDispatchLoopExecution createEventDispatchLoopExecution() {
 		return new UMLEventDispatchLoopExecution(executionLoop);
 	}
-	
+
 	public IUMLEventSendingExecution createEventSendingExecution() {
 		return new UMLEventSendingTaskExecution(executionLoop);
 	}
-	
-	public IUMLRootExecution createRootExecution() {
-		return new UMLRootExecution(executionLoop);
+
+	public UMLRootExecution<?> createRootExecution(final Element executionRoot) {
+		UMLRootExecution<?> rootExecution = null;
+		if (executionRoot instanceof Behavior) {
+			rootExecution = new RootBehaviorTaskExecution(executionLoop, (Behavior) executionRoot);
+		} else if (executionRoot instanceof Class) {
+			rootExecution = new RootClassTaskExecution(executionLoop, (Class) executionRoot);
+		}
+		return rootExecution;
 	}
-	
+
 }
diff --git a/plugins/org.eclipse.papyrus.moka.engine.uml.time/META-INF/MANIFEST.MF b/plugins/org.eclipse.papyrus.moka.engine.uml.time/META-INF/MANIFEST.MF
index 502e928..2583e1d 100644
--- a/plugins/org.eclipse.papyrus.moka.engine.uml.time/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.papyrus.moka.engine.uml.time/META-INF/MANIFEST.MF
@@ -18,7 +18,8 @@
  org.eclipse.papyrus.moka.engine.uml,
  org.eclipse.papyrus.moka.kernel.scheduling,
  org.eclipse.papyrus.moka.engine.uml.scheduling,
- org.eclipse.papyrus.moka.kernel.debug
+ org.eclipse.papyrus.moka.kernel.debug,
+ org.eclipse.papyrus.infra.core.log;bundle-version="[1.2.0,2.0.0)"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ActivationPolicy: lazy
 Export-Package: org.eclipse.papyrus.moka.engine.uml.time;
diff --git a/plugins/org.eclipse.papyrus.moka.engine.uml.time/src/org/eclipse/papyrus/moka/engine/uml/time/Activator.java b/plugins/org.eclipse.papyrus.moka.engine.uml.time/src/org/eclipse/papyrus/moka/engine/uml/time/Activator.java
index 8a884e1..0d09997 100644
--- a/plugins/org.eclipse.papyrus.moka.engine.uml.time/src/org/eclipse/papyrus/moka/engine/uml/time/Activator.java
+++ b/plugins/org.eclipse.papyrus.moka.engine.uml.time/src/org/eclipse/papyrus/moka/engine/uml/time/Activator.java
@@ -1,5 +1,5 @@
 /*****************************************************************************
- * Copyright (c) 2016 CEA LIST.
+ * Copyright (c) 2016, 2020 CEA LIST.
  * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -13,53 +13,37 @@
  *****************************************************************************/
 package org.eclipse.papyrus.moka.engine.uml.time;
 
-import org.eclipse.core.runtime.Plugin;
+import org.eclipse.papyrus.infra.core.log.LogHelper;
+import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
 
-/**
- * The activator class controls the plug-in life cycle
- */
-public class Activator extends Plugin {
-
-	// The plug-in ID
-	public static final String PLUGIN_ID = "org.eclipse.papyrus.moka.timedfuml"; //$NON-NLS-1$
-
-	// The shared instance
-	private static Activator plugin;
+public class Activator implements BundleActivator {
 
 	/**
-	 * The constructor
+	 * Plugin instance
 	 */
-	public Activator() {
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	private static Activator PLUGIN;
+	
+	/**
+	 * Logger used within that plugin
 	 */
+	public static LogHelper LOGGER;
+	
+	@Override
 	public void start(BundleContext context) throws Exception {
-		super.start(context);
-		plugin = this;
+		PLUGIN = this;
+		LOGGER = new LogHelper(context.getBundle());
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
-	 */
+	@Override
 	public void stop(BundleContext context) throws Exception {
-		plugin = null;
-		super.stop(context);
+		LOGGER = null;
+		PLUGIN = null;
 	}
-
-	/**
-	 * Returns the shared instance
-	 *
-	 * @return the shared instance
-	 */
-	public static Activator getDefault() {
-		return plugin;
+	
+	public static Activator getInstance(){
+		return PLUGIN;
 	}
 
 }
+
diff --git a/plugins/org.eclipse.papyrus.moka.engine.uml.time/src/org/eclipse/papyrus/moka/engine/uml/time/UMLTimedExecutionEngine.java b/plugins/org.eclipse.papyrus.moka.engine.uml.time/src/org/eclipse/papyrus/moka/engine/uml/time/UMLTimedExecutionEngine.java
index 838c249..5cbe8fe 100644
--- a/plugins/org.eclipse.papyrus.moka.engine.uml.time/src/org/eclipse/papyrus/moka/engine/uml/time/UMLTimedExecutionEngine.java
+++ b/plugins/org.eclipse.papyrus.moka.engine.uml.time/src/org/eclipse/papyrus/moka/engine/uml/time/UMLTimedExecutionEngine.java
@@ -1,5 +1,5 @@
 /*****************************************************************************
- * Copyright (c) 2016 CEA LIST.
+ * Copyright (c) 2016, 2020 CEA LIST.
  * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -17,8 +17,7 @@
 
 import org.eclipse.core.runtime.SubMonitor;
 import org.eclipse.papyrus.moka.engine.uml.UMLExecutionEngine;
-import org.eclipse.papyrus.moka.engine.uml.scheduling.IUMLRootExecution;
-import org.eclipse.papyrus.moka.engine.uml.scheduling.UMLTaskExecutionFactory;
+import org.eclipse.papyrus.moka.engine.uml.scheduling.UMLRootExecution;
 import org.eclipse.papyrus.moka.engine.uml.time.scheduling.control.TimedExecutionLoop;
 import org.eclipse.papyrus.moka.engine.uml.time.scheduling.de.DEScheduler;
 import org.eclipse.papyrus.moka.engine.uml.time.scheduling.de.actions.DisplayCurrentTimeAction;
@@ -26,11 +25,12 @@
 import org.eclipse.papyrus.moka.engine.uml.time.semantics.Loci.TimedLocus;
 import org.eclipse.papyrus.moka.fuml.commonbehavior.IParameterValue;
 import org.eclipse.papyrus.moka.fuml.loci.ILocus;
+import org.eclipse.papyrus.moka.kernel.engine.ExecutionEngineException;
 import org.eclipse.papyrus.moka.kernel.scheduling.control.ExecutionController;
 import org.eclipse.papyrus.moka.kernel.scheduling.control.IExecutionController;
 import org.eclipse.papyrus.moka.kernel.scheduling.control.Scheduler;
 import org.eclipse.papyrus.moka.pscs.loci.CS_Executor;
-import org.eclipse.uml2.uml.Class;
+import org.eclipse.uml2.uml.Element;
 
 public class UMLTimedExecutionEngine extends UMLExecutionEngine{
 
@@ -72,21 +72,26 @@
 	}
 	
 	@Override
-	public void start(SubMonitor monitor) {
+	public void start(SubMonitor monitor) throws ExecutionEngineException {
 		// Starts the execution loop
-		Class source = configuration.getExecutionSource();
+		Element source = (Element) configuration.getExecutionSource();
 		if(locus != null && source != null) {
-			initDEScheduler();
-			doPreRunActions();
-			UMLTaskExecutionFactory factory = UMLTaskExecutionFactory.getFactory();
-			factory.setExecutionLoop(controller.getExecutionLoop());
-			IUMLRootExecution rootExecution = factory.createRootExecution();
-			rootExecution.setRoot(source);
-			rootExecution.setLocus(locus);
-			rootExecution.setInputParameterValues(new ArrayList<IParameterValue>());
-			controller.getExecutionLoop().init(rootExecution, new Scheduler());
-			controller.start();
-			doPostRunActions();
+			UMLRootExecution<?> rootExecution = rootTaskFactory.createRootExecution(source);
+			if(rootExecution != null) {
+				rootExecution.setLocus(locus);
+				rootExecution.setInputParameterValues(new ArrayList<IParameterValue>());
+				if(rootExecution.canExecute()) {
+					initDEScheduler();
+					doPreRunActions();
+					controller.getExecutionLoop().init(rootExecution, new Scheduler());
+					controller.start();
+					doPostRunActions();
+				} else {
+					throw new ExecutionEngineException(identifier, status, "Could not start the execution from the specified model element"); //$NON-NLS-1$
+				}
+			} else {
+				throw new ExecutionEngineException(identifier, status, "Could not instantiate an execution from the specified element"); //$NON-NLS-1$
+			}
 		}
 	}
 
diff --git a/plugins/org.eclipse.papyrus.moka.engine.uml/META-INF/MANIFEST.MF b/plugins/org.eclipse.papyrus.moka.engine.uml/META-INF/MANIFEST.MF
index 17061f7..e96d9e3 100644
--- a/plugins/org.eclipse.papyrus.moka.engine.uml/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.papyrus.moka.engine.uml/META-INF/MANIFEST.MF
@@ -18,6 +18,10 @@
  org.eclipse.papyrus.moka.engine.uml.scheduling,
  org.eclipse.papyrus.moka.kernel.debug,
  org.eclipse.papyrus.moka.engine.uml.debug,
- org.eclipse.papyrus.moka.kernel.scheduling
+ org.eclipse.papyrus.moka.kernel.scheduling,
+ org.eclipse.papyrus.infra.core.log;bundle-version="[1.2.0,2.0.0)",
+ org.eclipse.jface
 Export-Package: org.eclipse.papyrus.moka.engine.uml,
  org.eclipse.papyrus.moka.engine.uml.libraries
+Bundle-Activator: org.eclipse.papyrus.moka.engine.uml.Activator
+Bundle-ActivationPolicy: lazy
diff --git a/plugins/org.eclipse.papyrus.moka.engine.uml/src/org/eclipse/papyrus/moka/engine/uml/Activator.java b/plugins/org.eclipse.papyrus.moka.engine.uml/src/org/eclipse/papyrus/moka/engine/uml/Activator.java
new file mode 100644
index 0000000..ad3523f
--- /dev/null
+++ b/plugins/org.eclipse.papyrus.moka.engine.uml/src/org/eclipse/papyrus/moka/engine/uml/Activator.java
@@ -0,0 +1,49 @@
+/*****************************************************************************
+ * Copyright (c) 2020 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+package org.eclipse.papyrus.moka.engine.uml;
+
+import org.eclipse.papyrus.infra.core.log.LogHelper;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+public class Activator implements BundleActivator {
+
+	/**
+	 * Plugin instance
+	 */
+	private static Activator PLUGIN;
+	
+	/**
+	 * Logger used within that plugin
+	 */
+	public static LogHelper LOGGER;
+	
+	@Override
+	public void start(BundleContext context) throws Exception {
+		PLUGIN = this;
+		LOGGER = new LogHelper(context.getBundle());
+	}
+
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		LOGGER = null;
+		PLUGIN = null;
+	}
+	
+	public static Activator getInstance(){
+		return PLUGIN;
+	}
+
+}
diff --git a/plugins/org.eclipse.papyrus.moka.engine.uml/src/org/eclipse/papyrus/moka/engine/uml/UMLExecutionEngine.java b/plugins/org.eclipse.papyrus.moka.engine.uml/src/org/eclipse/papyrus/moka/engine/uml/UMLExecutionEngine.java
index 7e078f3..c471614 100644
--- a/plugins/org.eclipse.papyrus.moka.engine.uml/src/org/eclipse/papyrus/moka/engine/uml/UMLExecutionEngine.java
+++ b/plugins/org.eclipse.papyrus.moka.engine.uml/src/org/eclipse/papyrus/moka/engine/uml/UMLExecutionEngine.java
@@ -1,5 +1,5 @@
 /*****************************************************************************
- * Copyright (c) 2019 CEA LIST and others.
+ * Copyright (c) 2019, 2020 CEA LIST and others.
  * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -21,8 +21,9 @@
 import org.eclipse.papyrus.moka.debug.engine.IDebuggableExecutionEngine;
 import org.eclipse.papyrus.moka.debug.engine.IDebuggableExecutionEngineThread;
 import org.eclipse.papyrus.moka.engine.uml.libraries.LibraryRegistry;
-import org.eclipse.papyrus.moka.engine.uml.scheduling.IUMLRootExecution;
+import org.eclipse.papyrus.moka.engine.uml.scheduling.IUMLTaskExecutionFactory;
 import org.eclipse.papyrus.moka.engine.uml.scheduling.IsTargetThreadCondition;
+import org.eclipse.papyrus.moka.engine.uml.scheduling.UMLRootExecution;
 import org.eclipse.papyrus.moka.engine.uml.scheduling.UMLTaskExecutionFactory;
 import org.eclipse.papyrus.moka.fuml.actions.DefaultCreateObjectActionStrategy;
 import org.eclipse.papyrus.moka.fuml.actions.DefaultGetAssociationStrategy;
@@ -33,6 +34,7 @@
 import org.eclipse.papyrus.moka.fuml.loci.ISemanticVisitor;
 import org.eclipse.papyrus.moka.fuml.structuredclassifiers.IObject_;
 import org.eclipse.papyrus.moka.kernel.engine.EngineConfiguration;
+import org.eclipse.papyrus.moka.kernel.engine.ExecutionEngineException;
 import org.eclipse.papyrus.moka.kernel.scheduling.control.Scheduler;
 import org.eclipse.papyrus.moka.pscs.actions.additions.CS_NotNormativeDefaultConstructStrategy;
 import org.eclipse.papyrus.moka.pscs.loci.CS_Executor;
@@ -42,7 +44,7 @@
 import org.eclipse.papyrus.moka.pssm.loci.SM_ExecutionFactory;
 import org.eclipse.papyrus.moka.pssm.loci.SM_Locus;
 import org.eclipse.papyrus.moka.utils.UMLPrimitiveTypesUtils;
-import org.eclipse.uml2.uml.Class;
+import org.eclipse.uml2.uml.Element;
 
 public class UMLExecutionEngine extends DebuggableExecutionEngine<IObject_, ISemanticVisitor>
 		implements IUMLExecutionEngine {
@@ -53,13 +55,19 @@
 	protected ILocus locus;
 
 	/**
+	 * Factory enabling the creation of the appropriate root task for this engine
+	 */
+	protected IUMLTaskExecutionFactory rootTaskFactory;
+	
+	/**
 	 * Behave as the super class. In addition, instantiate the locus and
 	 * parameterize it with the appropriate execution factory and executor. Finally,
 	 * built in types, libraries and semantic strategies are installed at the locus
 	 */
 	@Override
-	public void init(EngineConfiguration configuration, SubMonitor monitor) {
+	public void init(EngineConfiguration<?> configuration, SubMonitor monitor) {
 		super.init(configuration, monitor);
+		rootTaskFactory = createUMLTaskFactory();
 		locus = createLocus();
 		installBuiltInTypes();
 		installLibraries();
@@ -67,6 +75,17 @@
 	}
 
 	/**
+	 * Create the UML task factory used by this engine
+	 * 
+	 * @return the task factory
+	 */
+	protected IUMLTaskExecutionFactory createUMLTaskFactory() {
+		UMLTaskExecutionFactory factory = UMLTaskExecutionFactory.getInstance();
+		factory.setExecutionLoop(controller.getExecutionLoop());
+		return factory;
+	}
+	
+	/**
 	 * Create and parameterize the locus
 	 */
 	@Override
@@ -82,20 +101,25 @@
 	 * execution to the execution queue controlled by the execution controller
 	 */
 	@Override
-	public void start(SubMonitor monitor) {
-		Class source = configuration.getExecutionSource();
+	public void start(SubMonitor monitor) throws ExecutionEngineException {
+		Element source = (Element) configuration.getExecutionSource();
 		if (locus != null && source != null) {
-			UMLTaskExecutionFactory factory = UMLTaskExecutionFactory.getFactory();
-			factory.setExecutionLoop(controller.getExecutionLoop());
-			IUMLRootExecution rootExecution = factory.createRootExecution();
-			rootExecution.setRoot(source);
-			rootExecution.setLocus(locus);
-			rootExecution.setInputParameterValues(new ArrayList<IParameterValue>());
-			controller.getExecutionLoop().init(rootExecution, new Scheduler());
-			SubMonitor progress = monitor.split(1);
-			progress.subTask("Run model");
-			controller.start();
-			progress.worked(1);
+			UMLRootExecution<?> rootExecution = rootTaskFactory.createRootExecution(source);
+			if(rootExecution != null) {
+				rootExecution.setLocus(locus);
+				rootExecution.setInputParameterValues(new ArrayList<IParameterValue>());
+				if(rootExecution.canExecute()) {
+					controller.getExecutionLoop().init(rootExecution, new Scheduler());
+					SubMonitor progress = monitor.split(1);
+					progress.subTask("Run model"); //$NON-NLS-1$
+					controller.start();
+					progress.worked(1);
+				} else {
+					throw new ExecutionEngineException(identifier, status, "Could not start the execution from the specified model element"); //$NON-NLS-1$
+				}
+			} else {
+				throw new ExecutionEngineException(identifier, status, "Could not instantiate an execution from the specified element"); //$NON-NLS-1$
+			}
 		}
 	}
 
@@ -104,7 +128,7 @@
 	 */
 	@Override
 	public void installBuiltInTypes() {
-		Class source = configuration.getExecutionSource();
+		Element source = (Element) configuration.getExecutionSource();
 		if (locus != null && source != null) {
 			locus.getFactory().addBuiltInType(UMLPrimitiveTypesUtils.getReal(source));
 			locus.getFactory().addBuiltInType(UMLPrimitiveTypesUtils.getInteger(source));
@@ -118,7 +142,7 @@
 	 */
 	@Override
 	public void installLibraries() {
-		Class source = configuration.getExecutionSource();
+		Element source = (Element) configuration.getExecutionSource();
 		if (locus != null && source.eResource() != null && source.eResource().getResourceSet() != null) {
 			LibraryRegistry.getInstance().loadLibraryFactories(source.eResource().getResourceSet());
 			LibraryRegistry.getInstance().installLibraries(locus);
diff --git a/plugins/org.eclipse.papyrus.moka.fuml/src/org/eclipse/papyrus/moka/fuml/commonbehavior/CallEventExecution.java b/plugins/org.eclipse.papyrus.moka.fuml/src/org/eclipse/papyrus/moka/fuml/commonbehavior/CallEventExecution.java
index b7650a4..c4be834 100644
--- a/plugins/org.eclipse.papyrus.moka.fuml/src/org/eclipse/papyrus/moka/fuml/commonbehavior/CallEventExecution.java
+++ b/plugins/org.eclipse.papyrus.moka.fuml/src/org/eclipse/papyrus/moka/fuml/commonbehavior/CallEventExecution.java
@@ -19,8 +19,6 @@
 import java.util.List;
 
 import org.eclipse.papyrus.moka.engine.uml.scheduling.UMLTaskExecutionFactory;
-import org.eclipse.papyrus.moka.fuml.commonbehavior.ICallEventOccurrence;
-import org.eclipse.papyrus.moka.fuml.commonbehavior.IEventOccurrence;
 import org.eclipse.papyrus.moka.fuml.simpleclassifiers.IValue;
 import org.eclipse.papyrus.moka.fuml.structuredclassifiers.IReference;
 import org.eclipse.papyrus.moka.fuml.structuredclassifiers.Reference;
@@ -145,7 +143,7 @@
 		// Wait for an indeterminate amount of time to allow other concurrent
 		// executions to proceed.
 		// [There is no further formal specification for this operation.]
-		IExecutionLoop executionLoop = UMLTaskExecutionFactory.getFactory().getExecutionLoop();
+		IExecutionLoop executionLoop = UMLTaskExecutionFactory.getInstance().getExecutionLoop();
 		if(executionLoop != null) {
 			executionLoop.step();
 		}
diff --git a/plugins/org.eclipse.papyrus.moka.fuml/src/org/eclipse/papyrus/moka/fuml/commonbehavior/EventOccurrence.java b/plugins/org.eclipse.papyrus.moka.fuml/src/org/eclipse/papyrus/moka/fuml/commonbehavior/EventOccurrence.java
index 073b66c..0c2f80b 100644
--- a/plugins/org.eclipse.papyrus.moka.fuml/src/org/eclipse/papyrus/moka/fuml/commonbehavior/EventOccurrence.java
+++ b/plugins/org.eclipse.papyrus.moka.fuml/src/org/eclipse/papyrus/moka/fuml/commonbehavior/EventOccurrence.java
@@ -65,7 +65,7 @@
 	public void _startObjectBehavior() {
 		// When the sending behavior starts, the current event
 		// occurrence is is forwarded to the target object.
-		IUMLEventSendingExecution execution = UMLTaskExecutionFactory.getFactory().createEventSendingExecution();
+		IUMLEventSendingExecution execution = UMLTaskExecutionFactory.getInstance().createEventSendingExecution();
 		execution.setEvent(this);
 		execution.schedule();
 	}
diff --git a/plugins/org.eclipse.papyrus.moka.fuml/src/org/eclipse/papyrus/moka/fuml/commonbehavior/ObjectActivation.java b/plugins/org.eclipse.papyrus.moka.fuml/src/org/eclipse/papyrus/moka/fuml/commonbehavior/ObjectActivation.java
index 08d035f..51e94bc 100644
--- a/plugins/org.eclipse.papyrus.moka.fuml/src/org/eclipse/papyrus/moka/fuml/commonbehavior/ObjectActivation.java
+++ b/plugins/org.eclipse.papyrus.moka.fuml/src/org/eclipse/papyrus/moka/fuml/commonbehavior/ObjectActivation.java
@@ -197,7 +197,7 @@
 	public void _startObjectBehavior() {
 		// *** This should start the EventDispatchLoop ***
 		if(dispatchLoopExecution == null){
-			dispatchLoopExecution = UMLTaskExecutionFactory.getFactory().createEventDispatchLoopExecution();
+			dispatchLoopExecution = UMLTaskExecutionFactory.getInstance().createEventDispatchLoopExecution();
 			dispatchLoopExecution.setObjectActivation(this);
 		}
 		dispatchLoopExecution.newSignalArrival();
diff --git a/plugins/org.eclipse.papyrus.moka.kernel.debug/src/org/eclipse/papyrus/moka/debug/engine/DebuggableExecutionEngine.java b/plugins/org.eclipse.papyrus.moka.kernel.debug/src/org/eclipse/papyrus/moka/debug/engine/DebuggableExecutionEngine.java
index b6632c2..64c34ab 100644
--- a/plugins/org.eclipse.papyrus.moka.kernel.debug/src/org/eclipse/papyrus/moka/debug/engine/DebuggableExecutionEngine.java
+++ b/plugins/org.eclipse.papyrus.moka.kernel.debug/src/org/eclipse/papyrus/moka/debug/engine/DebuggableExecutionEngine.java
@@ -1,5 +1,5 @@
 /*****************************************************************************
- * Copyright (c) 2019 CEA LIST.
+ * Copyright (c) 2019, 2020 CEA LIST.
  *
  *
  * All rights reserved. This program and the accompanying materials
@@ -25,6 +25,7 @@
 import org.eclipse.papyrus.moka.debug.service.IDebugService;
 import org.eclipse.papyrus.moka.kernel.engine.EngineConfiguration;
 import org.eclipse.papyrus.moka.kernel.engine.ExecutionEngine;
+import org.eclipse.papyrus.moka.kernel.engine.ExecutionEngineException;
 import org.eclipse.papyrus.moka.kernel.engine.ExecutionEngineStatus;
 import org.eclipse.papyrus.moka.kernel.engine.IExecutionEngine;
 import org.eclipse.papyrus.moka.kernel.scheduling.control.ExecutionController;
@@ -33,8 +34,8 @@
 import org.eclipse.papyrus.moka.kernel.service.IExecutionEngineService;
 import org.eclipse.papyrus.moka.kernel.service.ServiceRegistry;
 
-public abstract class DebuggableExecutionEngine<T, C> extends ExecutionEngine
-		implements IDebuggableExecutionEngine<T, C> {
+public abstract class DebuggableExecutionEngine<TThreadType, ContextType>extends ExecutionEngine
+		implements IDebuggableExecutionEngine<TThreadType, ContextType> {
 
 	/**
 	 * Controller in charge of the execution task management
@@ -44,7 +45,7 @@
 	/**
 	 * Map of thread for which debugging is enabled;
 	 */
-	protected Map<String, IDebuggableExecutionEngineThread<T, C>> debuggableThread;
+	protected Map<String, IDebuggableExecutionEngineThread<TThreadType, ContextType>> debuggableThread;
 
 	/**
 	 * Enable safe access and modification of the thread map.
@@ -53,25 +54,28 @@
 
 	public DebuggableExecutionEngine() {
 		super();
-		debuggableThread = new HashMap<String, IDebuggableExecutionEngineThread<T, C>>();
+		debuggableThread = new HashMap<String, IDebuggableExecutionEngineThread<TThreadType, ContextType>>();
 		debuggableThreadLock = new ReentrantLock(true);
 	}
 
 	@Override
-	public void init(EngineConfiguration configuration, SubMonitor monitor) {
+	public void init(EngineConfiguration<?> configuration, SubMonitor monitor) {
 		super.init(configuration, monitor);
 		controller = createController();
 	}
 
-	public void run(final EngineConfiguration configuration, SubMonitor monitor) {
+	public void run(final EngineConfiguration<?> configuration, SubMonitor monitor) throws ExecutionEngineException {
 		setStatus(ExecutionEngineStatus.INITIALIZING);
 		init(configuration, monitor);
 		setStatus(ExecutionEngineStatus.RUNNING);
-		start(monitor);
-		fireTerminateExecutionEvent();
-		setStatus(ExecutionEngineStatus.DISPOSING);
-		dispose(monitor);
-		setStatus(ExecutionEngineStatus.TERMINATED);
+		try {
+			start(monitor);
+		} finally {
+			fireTerminateExecutionEvent();
+			setStatus(ExecutionEngineStatus.DISPOSING);
+			dispose(monitor);
+			setStatus(ExecutionEngineStatus.TERMINATED);
+		}
 	}
 
 	/**
@@ -87,7 +91,7 @@
 	/**
 	 *  @see {@link IDebuggableExecutionEngine#addDebugThread(IDebuggableExecutionEngineThread)}
 	 */
-	public boolean addDebugThread(IDebuggableExecutionEngineThread<T, C> t) {
+	public boolean addDebugThread(IDebuggableExecutionEngineThread<TThreadType, ContextType> t) {
 		boolean added = false;
 		if(t != null) {
 			if(!debuggableThreadLock.isHeldByCurrentThread()) {
@@ -105,7 +109,7 @@
 	/**
 	 *  @see {@link IDebuggableExecutionEngine#removeDebugThread(IDebuggableExecutionEngineThread)}
 	 */
-	public boolean removeDebugThread(IDebuggableExecutionEngineThread<T, C> t) {
+	public boolean removeDebugThread(IDebuggableExecutionEngineThread<TThreadType, ContextType> t) {
 		boolean removed = false;
 		if(t != null) {
 			if(!debuggableThreadLock.isHeldByCurrentThread()) {
@@ -198,20 +202,20 @@
 	}
 
 	private void fireTerminateExecutionEvent() {
-		IDebugService<T, C> service = getDebugService();
+		IDebugService<TThreadType, ContextType> service = getDebugService();
 		if (service != null) {
 			service.fireTerminateEngineEvent();
 		}
 	}
 
 	@SuppressWarnings("unchecked")
-	public final IDebugService<T, C> getDebugService() {
+	public final IDebugService<TThreadType, ContextType> getDebugService() {
 		// Note: an execution engine has at most a single debug service
-		IDebugService<T, C> debugService = null;
+		IDebugService<TThreadType, ContextType> debugService = null;
 		Iterator<IExecutionEngineService<IExecutionEngine>> it = ServiceRegistry.getInstance()
 				.getService(IDebugService.class).iterator();
 		if (it.hasNext()) {
-			debugService = (IDebugService<T, C>) it.next();
+			debugService = (IDebugService<TThreadType, ContextType>) it.next();
 		}
 		return debugService;
 	}
diff --git a/plugins/org.eclipse.papyrus.moka.kernel/src/org/eclipse/papyrus/moka/kernel/engine/EngineConfiguration.java b/plugins/org.eclipse.papyrus.moka.kernel/src/org/eclipse/papyrus/moka/kernel/engine/EngineConfiguration.java
index 27ec591..b012606 100644
--- a/plugins/org.eclipse.papyrus.moka.kernel/src/org/eclipse/papyrus/moka/kernel/engine/EngineConfiguration.java
+++ b/plugins/org.eclipse.papyrus.moka.kernel/src/org/eclipse/papyrus/moka/kernel/engine/EngineConfiguration.java
@@ -20,10 +20,10 @@
 
 import org.eclipse.core.resources.IProject;
 import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
 import org.eclipse.papyrus.moka.kernel.service.ServiceOperatingMode;
-import org.eclipse.uml2.uml.Class;
 
-public class EngineConfiguration {
+public class EngineConfiguration<SourceElementType extends EObject> {
 
 	// The project containing the model to be executed
 	protected IProject project;
@@ -35,7 +35,7 @@
 	protected URI modelURI;
 	
 	// The model element that is used as a starting point for the execution
-	protected Class source;
+	protected SourceElementType source;
 
 	// The list of parameter passed to the execution engine
 	protected Map<String, String> parameters;
@@ -53,13 +53,13 @@
 		parameters = new HashMap<String, String>();
 	}
 
-	public EngineConfiguration(Class src, ServiceOperatingMode m) {
+	public EngineConfiguration(SourceElementType src, ServiceOperatingMode m) {
 		source = src;
 		mode = m;
 		parameters = new HashMap<String, String>();
 	}
 	
-	public EngineConfiguration(EngineConfiguration ec) {
+	public EngineConfiguration(EngineConfiguration<SourceElementType> ec) {
 		source = ec.getExecutionSource();
 		mode = ec.getMode();
 		parameters = new HashMap<String, String>();
@@ -74,11 +74,11 @@
 		tracepointMode = ec.isTracepointMode();
 	}
 
-	public void setExecutionSource(final Class src) {
+	public void setExecutionSource(final SourceElementType src) {
 		source = src;
 	}
 
-	public Class getExecutionSource() {
+	public SourceElementType getExecutionSource() {
 		return source;
 	}
 
diff --git a/plugins/org.eclipse.papyrus.moka.kernel/src/org/eclipse/papyrus/moka/kernel/engine/ExecutionEngine.java b/plugins/org.eclipse.papyrus.moka.kernel/src/org/eclipse/papyrus/moka/kernel/engine/ExecutionEngine.java
index 4bb581d..2e5dd01 100644
--- a/plugins/org.eclipse.papyrus.moka.kernel/src/org/eclipse/papyrus/moka/kernel/engine/ExecutionEngine.java
+++ b/plugins/org.eclipse.papyrus.moka.kernel/src/org/eclipse/papyrus/moka/kernel/engine/ExecutionEngine.java
@@ -30,28 +30,28 @@
 	/**
 	 * Initialization task message
 	 */
-	private static final String INITIALIZATION_TASK = "Initialize execution engine resources";
-	
+	private static final String INITIALIZATION_TASK = "Initialize execution engine resources"; //$NON-NLS-1$
+
 	/**
 	 * Dispose task message
 	 */
-	private static final String DISPOSE_TASK = "Dispose execution engine resources";
-	
+	private static final String DISPOSE_TASK = "Dispose execution engine resources"; //$NON-NLS-1$
+
 	/**
 	 * Engine ID
 	 */
 	protected String identifier;
-	
+
 	/**
 	 * Configuration used to parameterize the engine
 	 */
-	protected EngineConfiguration configuration;
-	
+	protected EngineConfiguration<?> configuration;
+
 	/**
 	 * Status associated with this engine
 	 */
 	protected ExecutionEngineStatus status;
-	
+
 	/**
 	 * Enable safe access and update of the status
 	 */
@@ -61,23 +61,23 @@
 		status = ExecutionEngineStatus.NONE;
 		statusLock = new ReentrantLock(true);
 	}
-	
+
 	@Override
 	public void setID(String id) {
 		identifier = id;
 	}
-	
+
 	@Override
 	public String getID() {
 		return identifier;
 	}
-	
+
 	protected void setStatus(ExecutionEngineStatus s) {
 		statusLock.lock();
 		status = s;
 		statusLock.unlock();
 	}
-	
+
 	protected ExecutionEngineStatus getStatus() {
 		ExecutionEngineStatus s = null;
 		statusLock.lock();
@@ -85,20 +85,20 @@
 		statusLock.unlock();
 		return s;
 	}
-	
-	public EngineConfiguration getConfiguration() {
+
+	public EngineConfiguration<?> getConfiguration() {
 		return configuration;
 	}
 
 	/**
 	 * @see {@link IExecutionEngine#run(EngineConfiguration, SubMonitor)}
 	 * 
-	 * Initialize, start and dispose the execution engine.
+	 *      Initialize, start and dispose the execution engine.
 	 * 
-	 * Clients are not intended to override this operation.
+	 *      Clients are not intended to override this operation.
 	 */
 	@Override
-	public void run(final EngineConfiguration configuration, SubMonitor monitor) {
+	public void run(final EngineConfiguration<?> configuration, SubMonitor monitor) throws ExecutionEngineException {
 		setStatus(ExecutionEngineStatus.INITIALIZING);
 		init(configuration, monitor);
 		setStatus(ExecutionEngineStatus.RUNNING);
@@ -113,9 +113,9 @@
 	 * 
 	 * @param configuration of this engine
 	 * 
-	 * @param monitor to report progress
+	 * @param monitor       to report progress
 	 */
-	protected void init(final EngineConfiguration configuration, SubMonitor monitor) {
+	protected void init(final EngineConfiguration<?> configuration, SubMonitor monitor) {
 		this.configuration = configuration;
 		if (configuration.getMode().equals(ServiceOperatingMode.NORMAL)) {
 			ServiceRegistry registry = ServiceRegistry.getInstance();
@@ -131,7 +131,7 @@
 	}
 
 	/**
-	 * Start the execution engine. 
+	 * Start the execution engine.
 	 * 
 	 * Clients are intended to override this operation.
 	 * 
@@ -139,7 +139,7 @@
 	 * 
 	 * @param monitor to report progress
 	 */
-	protected abstract void start(SubMonitor monitor);
+	protected abstract void start(SubMonitor monitor) throws ExecutionEngineException;
 
 	/**
 	 * Stop the execution engine
@@ -175,7 +175,7 @@
 	public boolean canTerminate() {
 		return false;
 	}
-	
+
 	/**
 	 * see {@link ITerminate#isTerminated()}
 	 */
@@ -183,7 +183,7 @@
 	public boolean isTerminated() {
 		return getStatus().equals(ExecutionEngineStatus.TERMINATED);
 	}
-	
+
 	/**
 	 * see {@link ITerminate#terminate()}
 	 */
diff --git a/plugins/org.eclipse.papyrus.moka.kernel/src/org/eclipse/papyrus/moka/kernel/engine/ExecutionEngineException.java b/plugins/org.eclipse.papyrus.moka.kernel/src/org/eclipse/papyrus/moka/kernel/engine/ExecutionEngineException.java
new file mode 100644
index 0000000..1a578f4
--- /dev/null
+++ b/plugins/org.eclipse.papyrus.moka.kernel/src/org/eclipse/papyrus/moka/kernel/engine/ExecutionEngineException.java
@@ -0,0 +1,51 @@
+/*****************************************************************************
+ * Copyright (c) 2020 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+package org.eclipse.papyrus.moka.kernel.engine;
+
+@SuppressWarnings("serial")
+final public class ExecutionEngineException extends Exception {
+
+	/**
+	 * ID of the engine from which this exception was raised
+	 */
+	private String engineID;
+	
+	/**
+	 * Execution engine status at the exception time
+	 */
+	private ExecutionEngineStatus engineStatus; 
+	
+	public ExecutionEngineException(String ID, ExecutionEngineStatus status, String message) {
+		super(message);
+		this.engineID = ID;
+		this.engineStatus = status;
+		
+	}
+	
+	public ExecutionEngineException(String ID, ExecutionEngineStatus status, String message, Throwable cause) {
+		super(message, cause);
+		this.engineID = ID;
+		this.engineStatus = status;
+	}
+	
+	public String getEngineID() {
+		return engineID;
+	}
+	
+	public ExecutionEngineStatus getEngineStatus() {
+		return engineStatus;
+	}
+	
+}
diff --git a/plugins/org.eclipse.papyrus.moka.kernel/src/org/eclipse/papyrus/moka/kernel/engine/IExecutionEngine.java b/plugins/org.eclipse.papyrus.moka.kernel/src/org/eclipse/papyrus/moka/kernel/engine/IExecutionEngine.java
index b909bfe..7d292a1 100644
--- a/plugins/org.eclipse.papyrus.moka.kernel/src/org/eclipse/papyrus/moka/kernel/engine/IExecutionEngine.java
+++ b/plugins/org.eclipse.papyrus.moka.kernel/src/org/eclipse/papyrus/moka/kernel/engine/IExecutionEngine.java
@@ -39,7 +39,7 @@
 	 * 
 	 * @return the configuration
 	 */
-	EngineConfiguration getConfiguration();
+	EngineConfiguration<?> getConfiguration();
 	
 	/**
 	 * Run this engine based on the provided configuration
@@ -50,7 +50,9 @@
 	 * 
 	 * @param monitor
 	 *  provide the opportunity to report progress
+	 *  
+	 * @exception ExecutionEngineException
 	 */
-	void run(final EngineConfiguration configuration, SubMonitor monitor);
+	void run(final EngineConfiguration<?> configuration, SubMonitor monitor) throws ExecutionEngineException;
 	
 }
diff --git a/plugins/org.eclipse.papyrus.moka.kernel/src/org/eclipse/papyrus/moka/kernel/process/ExecutionEngineJob.java b/plugins/org.eclipse.papyrus.moka.kernel/src/org/eclipse/papyrus/moka/kernel/process/ExecutionEngineJob.java
index a7452f8..7ac6f61 100644
--- a/plugins/org.eclipse.papyrus.moka.kernel/src/org/eclipse/papyrus/moka/kernel/process/ExecutionEngineJob.java
+++ b/plugins/org.eclipse.papyrus.moka.kernel/src/org/eclipse/papyrus/moka/kernel/process/ExecutionEngineJob.java
@@ -1,5 +1,5 @@
 /*****************************************************************************
- * Copyright (c) 2019 CEA LIST.
+ * Copyright (c) 2019, 2020 CEA LIST.
  *
  *
  * All rights reserved. This program and the accompanying materials
@@ -21,27 +21,30 @@
 import org.eclipse.core.runtime.SubMonitor;
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.debug.core.DebugException;
+import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.papyrus.moka.kernel.engine.EngineConfiguration;
+import org.eclipse.papyrus.moka.kernel.engine.ExecutionEngineException;
 import org.eclipse.papyrus.moka.kernel.engine.IExecutionEngine;
+import org.eclipse.swt.widgets.Display;
 
-public class ExecutionEngineJob extends Job implements IExecutionEngineContainer{
+public class ExecutionEngineJob extends Job implements IExecutionEngineContainer {
 
-	/** 
+	/**
 	 * The execution engine used to realize the model execution
 	 */
 	protected IExecutionEngine engine;
-		
+
 	/**
 	 * The configuration passed to the engine
 	 */
-	protected EngineConfiguration configuration;
-	
+	protected EngineConfiguration<?> configuration;
+
 	/**
 	 * job name
 	 */
-	private final static String EXECUTION_ENGINE_JOB_NAME = "Execution Engine Job";
-	
-	public ExecutionEngineJob(IExecutionEngine e, EngineConfiguration c) {
+	private final static String EXECUTION_ENGINE_JOB_NAME = "Execution Engine Job"; //$NON-NLS-1$
+
+	public ExecutionEngineJob(IExecutionEngine e, EngineConfiguration<?> c) {
 		super(EXECUTION_ENGINE_JOB_NAME);
 		engine = e;
 		configuration = c;
@@ -52,17 +55,21 @@
 		// Run the engine over the provided configuration
 		// Note that the model execution takes place on a
 		// dedicated thread of execution
-		if(engine != null && configuration != null) {
-			monitor.beginTask("Run execution engine", IProgressMonitor.UNKNOWN);
-			engine.run(configuration, SubMonitor.convert(monitor));
+		if (engine != null && configuration != null) {
+			monitor.beginTask("Run execution engine", IProgressMonitor.UNKNOWN); //$NON-NLS-1$
+			try {
+				engine.run(configuration, SubMonitor.convert(monitor));
+			} catch (ExecutionEngineException e) {
+				handleEngineException(e);
+			}
 			monitor.done();
 		}
 		return Status.OK_STATUS;
 	}
-	
+
 	@Override
 	protected void canceling() {
-		if(engine.canTerminate()) {
+		if (engine.canTerminate()) {
 			try {
 				engine.terminate();
 			} catch (DebugException e) {
@@ -70,9 +77,22 @@
 			}
 		}
 	}
-	
-	public IExecutionEngine getExecutionEngine(){
+
+	public IExecutionEngine getExecutionEngine() {
 		return engine;
 	}
 
+	private static void handleEngineException(final ExecutionEngineException exception) {
+		Display.getDefault().syncExec(new Runnable() {
+			@Override
+			public void run() {
+				String message = exception.getMessage();
+				message += "\n\n Engine information ---"; //$NON-NLS-1$
+				message += "\n - Status: " + exception.getEngineStatus().toString(); //$NON-NLS-1$
+				message += "\n - ID: " + exception.getEngineID(); //$NON-NLS-1$
+				MessageDialog.openWarning(Display.getDefault().getActiveShell(), "Error", message); //$NON-NLS-1$
+			}
+		});
+	}
+
 }
diff --git a/plugins/org.eclipse.papyrus.moka.ui/src/org/eclipse/papyrus/moka/launch/ExecutionEngineLaunchDelegate.java b/plugins/org.eclipse.papyrus.moka.ui/src/org/eclipse/papyrus/moka/launch/ExecutionEngineLaunchDelegate.java
index f646f3a..e73f094 100644
--- a/plugins/org.eclipse.papyrus.moka.ui/src/org/eclipse/papyrus/moka/launch/ExecutionEngineLaunchDelegate.java
+++ b/plugins/org.eclipse.papyrus.moka.ui/src/org/eclipse/papyrus/moka/launch/ExecutionEngineLaunchDelegate.java
@@ -1,5 +1,5 @@
 /*****************************************************************************
- * Copyright (c) 2013 CEA LIST.
+ * Copyright (c) 2013, 2020 CEA LIST.
  *
  *
  * All rights reserved. This program and the accompanying materials
@@ -30,6 +30,7 @@
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.model.ILaunchConfigurationDelegate;
 import org.eclipse.debug.core.model.LaunchConfigurationDelegate;
+import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.papyrus.infra.core.resource.ModelSet;
@@ -52,14 +53,22 @@
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.dialogs.PreferencesUtil;
-import org.eclipse.uml2.uml.Class;
 
 public class ExecutionEngineLaunchDelegate extends LaunchConfigurationDelegate implements ILaunchConfigurationDelegate {
 
-	// The project containing the model for which
-	// the execution is launched
+	/**
+	 * The project containing the model from which the execution is started
+	 */
 	protected IProject project;
-	private EngineConfiguration engineConfiguration;
+	
+	/**
+	 * The user defined engine configuration
+	 */
+	private EngineConfiguration<?> engineConfiguration;
+	
+	/**
+	 * The model set containing the model that is executed
+	 */
 	private ModelSet modelSet;
 
 	private boolean canOpenProject(final IExecutionEngineLaunchConfigurationReader reader) {
@@ -90,7 +99,7 @@
 		return canRunServer;
 	}
 
-	private boolean isValidationOk(EngineConfiguration engineConfiguration, IProgressMonitor monitor, String engineID) {
+	private boolean isValidationOk(EngineConfiguration<?> engineConfiguration, IProgressMonitor monitor, String engineID) {
 		// If the preference allow to run model validation before the launch, the
 		// validation is run. If there are errors, the system ask the user if he/she
 		// still wants to run the simulation.
@@ -213,10 +222,10 @@
 					engineProcess.run();
 				}
 			} else {
-				MokaUIActivator.getDefault().getLogger().error("Server execution failed", serverProcess.getError());
+				MokaUIActivator.getDefault().getLogger().error("Server execution failed", serverProcess.getError()); //$NON-NLS-1$
 			}
 		} else {
-			MokaUIActivator.getDefault().getLogger().error("Modeling environment could not be initialized", null);
+			MokaUIActivator.getDefault().getLogger().error("Modeling environment could not be initialized", null); //$NON-NLS-1$
 		}
 	}
 
@@ -224,16 +233,15 @@
 		return new ExecutionEngineLaunchConfigurationReader(configuration);
 	}
 
-	protected EngineConfiguration createConfiguration(IExecutionEngineLaunchConfigurationReader cr, ModelSet ms) {
+	protected EngineConfiguration<?> createConfiguration(IExecutionEngineLaunchConfigurationReader cr, ModelSet ms) {
 		// Return a configuration containing the information required by
 		// the engine to perform the execution
-		EngineConfiguration ec = new EngineConfiguration();
+		EngineConfiguration<EObject> ec = new EngineConfiguration<EObject>();
 		ec.setProject(project);
 		ec.setModelURI(cr.getModelURI());
 		Resource resource = ms.getResource(cr.getModelURI(), true);
 		if (resource != null) {
-			Class target = (Class) resource.getEObject(cr.getExecutionSourceURI().toString());
-			ec.setExecutionSource(target);
+			ec.setExecutionSource(resource.getEObject(cr.getExecutionSourceURI().toString()));
 		}
 		ec.setTraceEnabled(cr.isTraceServiceEnabled());
 		ec.setTraceFilePath(cr.getTraceFile());
@@ -268,7 +276,7 @@
 	}
 
 	protected final ExecutionEngineProcess initializeExecutionProcess(ILaunch l,
-			IExecutionEngineLaunchConfigurationReader cr, EngineConfiguration ec) {
+			IExecutionEngineLaunchConfigurationReader cr, EngineConfiguration<?> ec) {
 		ExecutionEngineProcess process = new ExecutionEngineProcess(l, cr.getEngine(), ec);
 		ExecutionEngineDebugTarget debugTarget = new ExecutionEngineDebugTarget(l, process);
 		l.addProcess(process);
diff --git a/plugins/org.eclipse.papyrus.moka.ui/src/org/eclipse/papyrus/moka/ui/validation/ValidationUtil.java b/plugins/org.eclipse.papyrus.moka.ui/src/org/eclipse/papyrus/moka/ui/validation/ValidationUtil.java
index 3d564ff..a88ee06 100644
--- a/plugins/org.eclipse.papyrus.moka.ui/src/org/eclipse/papyrus/moka/ui/validation/ValidationUtil.java
+++ b/plugins/org.eclipse.papyrus.moka.ui/src/org/eclipse/papyrus/moka/ui/validation/ValidationUtil.java
@@ -48,6 +48,8 @@
 import org.eclipse.papyrus.moka.kernel.validation.ValidationDescriptor;
 import org.eclipse.swt.widgets.Display;
 
+import org.eclipse.uml2.uml.Element;
+
 @SuppressWarnings("restriction")
 public class ValidationUtil {
 
@@ -63,7 +65,7 @@
 		ModelValidationService.getInstance().loadXmlConstraintDeclarations();
 	}
 
-	public static boolean validateModel(EngineConfiguration engineConfiguration, IProgressMonitor monitor,
+	public static boolean validateModel(EngineConfiguration<?> engineConfiguration, IProgressMonitor monitor,
 			String engineID) {
 		// This method run the validation and should return true if the simulation
 		// should continue of false otherwise.
@@ -79,7 +81,7 @@
 				.getInstance().getValidationDescriptors(engineID);
 		dialogResult = true;
 		if (validationDescriptors != null) {
-			Diagnostic diagnostic = validate(monitor, engineConfiguration.getExecutionSource().getModel(), engineID,
+			Diagnostic diagnostic = validate(monitor, ((Element)engineConfiguration.getExecutionSource()).getModel(), engineID,
 					validationDescriptors);
 			List<Diagnostic> filteredConstraints = new ArrayList<>(diagnostic.getChildren());
 			filteredConstraints = filteredConstraints.stream().filter(d -> valideRules.contains(d.getSource()))
@@ -93,8 +95,8 @@
 					@Override
 					public void run() {
 						ValidationDiagnosticDialog dialog = new ValidationDiagnosticDialog(
-								Display.getCurrent().getActiveShell(), "Moka Validation",
-								"The moka validation detect errors on the model. Do you still want to launch the simulation ?",
+								Display.getCurrent().getActiveShell(), "Moka Validation", //$NON-NLS-1$
+								"The moka validation detect errors on the model. Do you still want to launch the simulation ?", //$NON-NLS-1$
 								filteredDiagnostics, IStatus.ERROR);
 						if (dialog.open() == Window.OK) {
 							ValidationUtil.dialogResult = true;
