diff --git a/bundles/core/engines/org.eclipse.papyrus.moka.composites/.classpath b/bundles/core/engines/org.eclipse.papyrus.moka.composites/.classpath
index ebce748..fa0b965 100644
--- a/bundles/core/engines/org.eclipse.papyrus.moka.composites/.classpath
+++ b/bundles/core/engines/org.eclipse.papyrus.moka.composites/.classpath
@@ -4,5 +4,10 @@
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src/"/>
 	<classpathentry kind="src" path="generated/"/>
+	<classpathentry kind="src" path="/org.eclipse.papyrus.moka.fuml">
+		<attributes>
+			<attribute name="org.eclipse.ajdt.aspectpath" value="org.eclipse.ajdt.aspectpath"/>
+		</attributes>
+	</classpathentry>
 	<classpathentry kind="output" path="target/classes"/>
 </classpath>
diff --git a/bundles/core/engines/org.eclipse.papyrus.moka.fuml.interfaces/META-INF/MANIFEST.MF b/bundles/core/engines/org.eclipse.papyrus.moka.fuml.interfaces/META-INF/MANIFEST.MF
index b7db3c0..21c8c25 100644
--- a/bundles/core/engines/org.eclipse.papyrus.moka.fuml.interfaces/META-INF/MANIFEST.MF
+++ b/bundles/core/engines/org.eclipse.papyrus.moka.fuml.interfaces/META-INF/MANIFEST.MF
@@ -11,7 +11,8 @@
  org.eclipse.equinox.registry;bundle-version="[3.7.0,4.0.0)"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ActivationPolicy: lazy
-Export-Package: org.eclipse.papyrus.moka.fuml.Semantics,
+Export-Package: org.eclipse.papyrus.moka.fuml.Profiling,
+ org.eclipse.papyrus.moka.fuml.Semantics,
  org.eclipse.papyrus.moka.fuml.Semantics.Actions.BasicActions,
  org.eclipse.papyrus.moka.fuml.Semantics.Actions.CompleteActions,
  org.eclipse.papyrus.moka.fuml.Semantics.Actions.IntermediateActions,
diff --git a/bundles/core/engines/org.eclipse.papyrus.moka.fuml.interfaces/src/org/eclipse/papyrus/moka/fuml/Profiling/ITriggeredVisitor.java b/bundles/core/engines/org.eclipse.papyrus.moka.fuml.interfaces/src/org/eclipse/papyrus/moka/fuml/Profiling/ITriggeredVisitor.java
new file mode 100644
index 0000000..2862319
--- /dev/null
+++ b/bundles/core/engines/org.eclipse.papyrus.moka.fuml.interfaces/src/org/eclipse/papyrus/moka/fuml/Profiling/ITriggeredVisitor.java
@@ -0,0 +1,21 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+
+package org.eclipse.papyrus.moka.fuml.Profiling;
+
+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.IEventOccurrence;
+
+public interface ITriggeredVisitor {
+	
+	public IEventOccurrence getTriggeringEventOccurrence();
+	
+}
diff --git a/bundles/core/engines/org.eclipse.papyrus.moka.fuml.statemachines/aspects/org/eclipse/papyrus/moka/fuml/statemachines/Semantics/StateMachines/TransitionActivationProfiler.aj b/bundles/core/engines/org.eclipse.papyrus.moka.fuml.statemachines/aspects/org/eclipse/papyrus/moka/fuml/statemachines/Semantics/StateMachines/TransitionActivationProfiler.aj
index adc9184..e5c09c0 100644
--- a/bundles/core/engines/org.eclipse.papyrus.moka.fuml.statemachines/aspects/org/eclipse/papyrus/moka/fuml/statemachines/Semantics/StateMachines/TransitionActivationProfiler.aj
+++ b/bundles/core/engines/org.eclipse.papyrus.moka.fuml.statemachines/aspects/org/eclipse/papyrus/moka/fuml/statemachines/Semantics/StateMachines/TransitionActivationProfiler.aj
@@ -26,7 +26,7 @@
 		if(monitor!=null && monitor.isCanceled()){
 			throw new OperationCanceledException();
 		}
-		this.fireNodeVisited(activation);
+		this.fireNodeVisited(new TransitionActivationWrapper(activation, eventOccurrence));
 	}
 	
 	// Define a point cut for each class that implements the enterTarget operation
@@ -42,6 +42,6 @@
 		if(monitor!=null && monitor.isCanceled()){
 			throw new OperationCanceledException();
 		}
-		this.fireNodeLeft(activation);
+		this.fireNodeLeft(new TransitionActivationWrapper(activation, eventOccurrence));
 	}
 }
diff --git a/bundles/core/engines/org.eclipse.papyrus.moka.fuml.statemachines/aspects/org/eclipse/papyrus/moka/fuml/statemachines/Semantics/StateMachines/TransitionActivationWrapper.java b/bundles/core/engines/org.eclipse.papyrus.moka.fuml.statemachines/aspects/org/eclipse/papyrus/moka/fuml/statemachines/Semantics/StateMachines/TransitionActivationWrapper.java
new file mode 100644
index 0000000..baaadeb
--- /dev/null
+++ b/bundles/core/engines/org.eclipse.papyrus.moka.fuml.statemachines/aspects/org/eclipse/papyrus/moka/fuml/statemachines/Semantics/StateMachines/TransitionActivationWrapper.java
@@ -0,0 +1,219 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+
+package org.eclipse.papyrus.moka.fuml.statemachines.Semantics.StateMachines;
+
+import java.util.List;
+import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IObject_;
+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.BasicBehaviors.IExecution;
+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.IEventOccurrence;
+import org.eclipse.papyrus.moka.fuml.Semantics.Loci.LociL1.ILocus;
+import org.eclipse.papyrus.moka.fuml.Semantics.Loci.LociL1.ISemanticVisitor;
+import org.eclipse.papyrus.moka.fuml.profiling.Semantics.CommonBehaviors.Communications.TriggeredVisitorWrapper;
+import org.eclipse.papyrus.moka.fuml.statemachines.interfaces.Semantics.StateMachines.IRegionActivation;
+import org.eclipse.papyrus.moka.fuml.statemachines.interfaces.Semantics.StateMachines.ITransitionActivation;
+import org.eclipse.papyrus.moka.fuml.statemachines.interfaces.Semantics.StateMachines.IVertexActivation;
+import org.eclipse.papyrus.moka.fuml.statemachines.interfaces.Semantics.StateMachines.TransitionMetadata;
+import org.eclipse.uml2.uml.Behavior;
+import org.eclipse.uml2.uml.NamedElement;
+
+public class TransitionActivationWrapper extends TriggeredVisitorWrapper implements ITransitionActivation {
+
+	// The original activation for the transition
+	protected ITransitionActivation transitionActivation;
+
+	public TransitionActivationWrapper(ITransitionActivation activation, IEventOccurrence eventOccurrence) {
+		super(eventOccurrence);
+		this.transitionActivation = activation;
+	}
+
+	@Override
+	public void setStatus(TransitionMetadata status) {
+		this.transitionActivation.setStatus(status);
+	}
+
+	@Override
+	public TransitionMetadata getStatus() {
+		return this.transitionActivation.getStatus();
+	}
+
+	@Override
+	public void setAnalyticalStatus(TransitionMetadata status) {
+		this.transitionActivation.setAnalyticalStatus(status);
+	}
+
+	@Override
+	public TransitionMetadata getAnalyticalStatus() {
+		return this.transitionActivation.getAnalyticalStatus();
+	}
+
+	@Override
+	public boolean isReached(boolean staticCheck) {
+		return this.transitionActivation.isReached(staticCheck);
+	}
+
+	@Override
+	public boolean isTraversed(boolean staticCheck) {
+		return this.transitionActivation.isTraversed(staticCheck);
+	}
+
+	@Override
+	public boolean isTriggered() {
+		return this.transitionActivation.isTriggered();
+	}
+
+	@Override
+	public boolean isGuarded() {
+		return this.transitionActivation.isTriggered();
+	}
+
+	@Override
+	public IVertexActivation getSourceActivation() {
+		return this.transitionActivation.getSourceActivation();
+	}
+
+	@Override
+	public void setSourceActivation(IVertexActivation vertexSourceActivation) {
+		this.transitionActivation.setSourceActivation(vertexSourceActivation);
+	}
+
+	@Override
+	public IVertexActivation getTargetActivation() {
+		return this.transitionActivation.getTargetActivation();
+	}
+
+	@Override
+	public void setTargetActivation(IVertexActivation vertexTargetActivation) {
+		this.transitionActivation.setTargetActivation(vertexTargetActivation);
+	}
+
+	@Override
+	public boolean evaluateGuard(IEventOccurrence eventOccurrence) {
+		return this.transitionActivation.evaluateGuard(eventOccurrence);
+	}
+
+	@Override
+	public boolean hasTrigger(IEventOccurrence eventOccurrence) {
+		return this.transitionActivation.hasTrigger(eventOccurrence);
+	}
+
+	@Override
+	public boolean canFireOn(IEventOccurrence eventOccurrence) {
+		return this.transitionActivation.canFireOn(eventOccurrence);
+	}
+
+	@Override
+	public boolean canPropagateExecution(IEventOccurrence eventOccurrence) {
+		return this.transitionActivation.canPropagateExecution(eventOccurrence);
+	}
+
+	@Override
+	public void tryExecuteEffect(IEventOccurrence eventOccurrence) {
+		this.transitionActivation.tryExecuteEffect(eventOccurrence);
+	}
+
+	@Override
+	public void fire(IEventOccurrence eventOccurrence) {
+		this.transitionActivation.fire(eventOccurrence);
+	}
+
+	@Override
+	public IRegionActivation getLeastCommonAncestor() {
+		return this.transitionActivation.getLeastCommonAncestor();
+	}
+
+	@Override
+	public void exitSource(IEventOccurrence eventOccurrence) {
+		this.transitionActivation.exitSource(eventOccurrence);
+	}
+
+	@Override
+	public void enterTarget(IEventOccurrence eventOccurrence) {
+		this.transitionActivation.enterTarget(eventOccurrence);
+	}
+
+	@Override
+	public void setNode(NamedElement node) {
+		this.transitionActivation.setNode(node);
+	}
+
+	@Override
+	public NamedElement getNode() {
+		return this.transitionActivation.getNode();
+	}
+
+	@Override
+	public void setParent(ISemanticVisitor parent) {
+		this.transitionActivation.setParent(parent);
+	}
+
+	@Override
+	public ISemanticVisitor getParent() {
+		return this.transitionActivation.getParent();
+	}
+
+	@Override
+	public List<ISemanticVisitor> getContextChain() {
+		return this.transitionActivation.getContextChain();
+	}
+
+	@Override
+	public IExecution getStateMachineExecution() {
+		return this.transitionActivation.getStateMachineExecution();
+	}
+
+	@Override
+	public ILocus getExecutionLocus() {
+		return this.transitionActivation.getExecutionLocus();
+	}
+
+	@Override
+	public IObject_ getExecutionContext() {
+		return this.transitionActivation.getExecutionContext();
+	}
+
+	@Override
+	public boolean isVisitorFor(NamedElement node) {
+		return this.transitionActivation.isVisitorFor(node);
+	}
+
+	@Override
+	public void activate() {
+		this.transitionActivation.activate();
+	}
+
+	@Override
+	public void activateTransitions() {
+		this.transitionActivation.activateTransitions();
+	}
+
+	@Override
+	public IExecution getExecutionFor(Behavior behavior, IEventOccurrence eventOccurrence) {
+		return this.transitionActivation.getExecutionFor(behavior, eventOccurrence);
+	}
+
+	@Override
+	public void _endIsolation() {
+		this.transitionActivation._endIsolation();
+	}
+
+	@Override
+	public void _beginIsolation() {
+		this.transitionActivation._beginIsolation();
+	}
+	
+	@Override
+	public String toString() {
+		return this.transitionActivation.toString();
+	}
+
+}
diff --git a/bundles/core/engines/org.eclipse.papyrus.moka.fuml.statemachines/src/org/eclipse/papyrus/moka/fuml/statemachines/StateMachineExecutionEngine.java b/bundles/core/engines/org.eclipse.papyrus.moka.fuml.statemachines/src/org/eclipse/papyrus/moka/fuml/statemachines/StateMachineExecutionEngine.java
index 8e35807..3638a72 100644
--- a/bundles/core/engines/org.eclipse.papyrus.moka.fuml.statemachines/src/org/eclipse/papyrus/moka/fuml/statemachines/StateMachineExecutionEngine.java
+++ b/bundles/core/engines/org.eclipse.papyrus.moka.fuml.statemachines/src/org/eclipse/papyrus/moka/fuml/statemachines/StateMachineExecutionEngine.java
@@ -21,7 +21,7 @@
 import org.eclipse.papyrus.moka.composites.Semantics.impl.Loci.LociL3.CS_Executor;
 import org.eclipse.papyrus.moka.fuml.Semantics.Loci.LociL1.ILocus;
 import org.eclipse.papyrus.moka.fuml.Semantics.impl.Actions.IntermediateActions.DefaultCreateObjectActionStrategy;
-import org.eclipse.papyrus.moka.fuml.Semantics.impl.Actions.IntermediateActions.RestrictiveGetAssociationStrategy;
+import org.eclipse.papyrus.moka.fuml.Semantics.impl.Actions.IntermediateActions.DefaultGetAssociationStrategy;
 import org.eclipse.papyrus.moka.fuml.Semantics.impl.CommonBehaviors.Communications.FIFOGetNextEventStrategy;
 import org.eclipse.papyrus.moka.fuml.Semantics.impl.Loci.LociL1.FirstChoiceStrategy;
 import org.eclipse.papyrus.moka.fuml.statemachines.Semantics.Loci.SM_ExecutionFactory;
@@ -45,7 +45,7 @@
 		locus.getFactory().setStrategy(new CS_NameBased_StructuralFeatureOfInterfaceAccessStrategy());
 		locus.getFactory().setStrategy(new CS_DefaultRequestPropagationStrategy());
 		locus.getFactory().setStrategy(new CS_DefaultConstructStrategy());
-		locus.getFactory().setStrategy(new RestrictiveGetAssociationStrategy());
+		locus.getFactory().setStrategy(new DefaultGetAssociationStrategy());
 		locus.getFactory().setStrategy(new DefaultCreateObjectActionStrategy());
 	}
 	
diff --git a/bundles/core/engines/org.eclipse.papyrus.moka.fuml/META-INF/MANIFEST.MF b/bundles/core/engines/org.eclipse.papyrus.moka.fuml/META-INF/MANIFEST.MF
index ebdb40e..0f7addb 100644
--- a/bundles/core/engines/org.eclipse.papyrus.moka.fuml/META-INF/MANIFEST.MF
+++ b/bundles/core/engines/org.eclipse.papyrus.moka.fuml/META-INF/MANIFEST.MF
@@ -25,6 +25,7 @@
  org.eclipse.papyrus.moka.fuml.profiling.Semantics.Actions.BasicActions,
  org.eclipse.papyrus.moka.fuml.profiling.Semantics.Actions.CompleteActions,
  org.eclipse.papyrus.moka.fuml.profiling.Semantics.Activities.IntermediateActivities,
+ org.eclipse.papyrus.moka.fuml.profiling.Semantics.CommonBehaviors.Communications,
  org.eclipse.papyrus.moka.fuml.profiling.Semantics.Loci,
  org.eclipse.papyrus.moka.fuml.registry,
  org.eclipse.papyrus.moka.fuml.registry.service.framework
diff --git a/bundles/core/engines/org.eclipse.papyrus.moka.fuml/aspects/org/eclipse/papyrus/moka/fuml/profiling/Semantics/Actions/CompleteActions/AcceptEventActionActivationProfiler.aj b/bundles/core/engines/org.eclipse.papyrus.moka.fuml/aspects/org/eclipse/papyrus/moka/fuml/profiling/Semantics/Actions/CompleteActions/AcceptEventActionActivationProfiler.aj
index 2191fca..7aabf1c 100644
--- a/bundles/core/engines/org.eclipse.papyrus.moka.fuml/aspects/org/eclipse/papyrus/moka/fuml/profiling/Semantics/Actions/CompleteActions/AcceptEventActionActivationProfiler.aj
+++ b/bundles/core/engines/org.eclipse.papyrus.moka.fuml/aspects/org/eclipse/papyrus/moka/fuml/profiling/Semantics/Actions/CompleteActions/AcceptEventActionActivationProfiler.aj
@@ -26,6 +26,6 @@
 		call(* IAcceptEventActionActivation.accept(IEventOccurrence));
 	
 	before(IAcceptEventActionActivation activation, IEventOccurrence eventOccurrence): accept(activation, eventOccurrence){
-		this.leave(activation);
+		this.leave(new AcceptEventActivationWrapper(activation, eventOccurrence));
 	}
 }
\ No newline at end of file
diff --git a/bundles/core/engines/org.eclipse.papyrus.moka.fuml/aspects/org/eclipse/papyrus/moka/fuml/profiling/Semantics/Actions/CompleteActions/AcceptEventActivationWrapper.java b/bundles/core/engines/org.eclipse.papyrus.moka.fuml/aspects/org/eclipse/papyrus/moka/fuml/profiling/Semantics/Actions/CompleteActions/AcceptEventActivationWrapper.java
new file mode 100644
index 0000000..5d4881e
--- /dev/null
+++ b/bundles/core/engines/org.eclipse.papyrus.moka.fuml/aspects/org/eclipse/papyrus/moka/fuml/profiling/Semantics/Actions/CompleteActions/AcceptEventActivationWrapper.java
@@ -0,0 +1,286 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+
+package org.eclipse.papyrus.moka.fuml.profiling.Semantics.Actions.CompleteActions;
+
+import java.util.List;
+
+import org.eclipse.papyrus.moka.fuml.Semantics.Actions.BasicActions.IPinActivation;
+import org.eclipse.papyrus.moka.fuml.Semantics.Actions.CompleteActions.IAcceptEventActionActivation;
+import org.eclipse.papyrus.moka.fuml.Semantics.Actions.CompleteActions.IAcceptEventActionEventAccepter;
+import org.eclipse.papyrus.moka.fuml.Semantics.Activities.IntermediateActivities.IActivityEdgeInstance;
+import org.eclipse.papyrus.moka.fuml.Semantics.Activities.IntermediateActivities.IActivityExecution;
+import org.eclipse.papyrus.moka.fuml.Semantics.Activities.IntermediateActivities.IActivityNodeActivation;
+import org.eclipse.papyrus.moka.fuml.Semantics.Activities.IntermediateActivities.IActivityNodeActivationGroup;
+import org.eclipse.papyrus.moka.fuml.Semantics.Activities.IntermediateActivities.IToken;
+import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IBooleanValue;
+import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.ILink;
+import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IObject_;
+import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IValue;
+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.IEventOccurrence;
+import org.eclipse.papyrus.moka.fuml.Semantics.Loci.LociL1.ILocus;
+import org.eclipse.papyrus.moka.fuml.profiling.Semantics.CommonBehaviors.Communications.TriggeredVisitorWrapper;
+import org.eclipse.uml2.uml.ActivityNode;
+import org.eclipse.uml2.uml.InputPin;
+import org.eclipse.uml2.uml.OutputPin;
+import org.eclipse.uml2.uml.Pin;
+
+public class AcceptEventActivationWrapper extends TriggeredVisitorWrapper implements IAcceptEventActionActivation{
+
+	protected IAcceptEventActionActivation acceptEventActivation;
+	
+	public AcceptEventActivationWrapper(IAcceptEventActionActivation acceptEventActivation, IEventOccurrence eventOccurrence) {
+		super(eventOccurrence);
+		this.acceptEventActivation = acceptEventActivation;
+	}
+
+	@Override
+	public void doAction() {
+		this.acceptEventActivation.doAction();
+	}
+
+	@Override
+	public void sendOffers() {
+		this.acceptEventActivation.sendOffers();
+	}
+
+	@Override
+	public void addPinActivation(IPinActivation pinActivation) {
+		this.acceptEventActivation.addPinActivation(pinActivation);
+	}
+
+	@Override
+	public IPinActivation getPinActivation(Pin pin) {
+		return this.acceptEventActivation.getPinActivation(pin);
+	}
+
+	@Override
+	public void putToken(OutputPin pin, IValue value) {
+		this.acceptEventActivation.putToken(pin, value);
+	}
+
+	@Override
+	public void putTokens(OutputPin pin, List<IValue> values) {
+		this.acceptEventActivation.putTokens(pin, values);
+	}
+
+	@Override
+	public List<IValue> getTokens(InputPin pin) {
+		return this.acceptEventActivation.getTokens(pin);
+	}
+
+	@Override
+	public List<IValue> takeTokens(InputPin pin) {
+		return this.acceptEventActivation.takeTokens(pin);
+	}
+
+	@Override
+	public Boolean valueParticipatesInLink(IValue value, ILink link) {
+		return this.acceptEventActivation.valueParticipatesInLink(value, link);
+	}
+
+	@Override
+	public IBooleanValue makeBooleanValue(Boolean value) {
+		return this.acceptEventActivation.makeBooleanValue(value);
+	}
+
+	@Override
+	public void run() {
+		this.acceptEventActivation.run();
+	}
+
+	@Override
+	public void receiveOffer() {
+		this.acceptEventActivation.receiveOffer();
+	}
+
+	@Override
+	public List<IToken> takeOfferedTokens() {
+		return this.acceptEventActivation.takeOfferedTokens();
+	}
+
+	@Override
+	public void fire(List<IToken> incomingTokens) {
+		this.acceptEventActivation.fire(incomingTokens);		
+	}
+
+	@Override
+	public void sendOffers(List<IToken> tokens) {
+		this.acceptEventActivation.sendOffers(tokens);
+	}
+
+	@Override
+	public void terminate() {
+		this.acceptEventActivation.terminate();
+	}
+
+	@Override
+	public Boolean isReady() {
+		return this.acceptEventActivation.isReady();
+	}
+
+	@Override
+	public Boolean isRunning() {
+		return this.acceptEventActivation.isRunning();
+	}
+
+	@Override
+	public void addOutgoingEdge(IActivityEdgeInstance edge) {
+		this.acceptEventActivation.addOutgoingEdge(edge);
+	}
+
+	@Override
+	public void addIncomingEdge(IActivityEdgeInstance edge) {
+		this.acceptEventActivation.addIncomingEdge(edge);
+	}
+
+	@Override
+	public void createNodeActivations() {
+		this.acceptEventActivation.createNodeActivations();
+	}
+
+	@Override
+	public void createEdgeInstances() {
+		this.acceptEventActivation.createEdgeInstances();
+	}
+
+	@Override
+	public Boolean isSourceFor(IActivityEdgeInstance edgeInstance) {
+		return this.acceptEventActivation.isSourceFor(edgeInstance);
+	}
+
+	@Override
+	public IActivityExecution getActivityExecution() {
+		return this.acceptEventActivation.getActivityExecution();
+	}
+
+	@Override
+	public IObject_ getExecutionContext() {
+		return this.acceptEventActivation.getExecutionContext();
+	}
+
+	@Override
+	public ILocus getExecutionLocus() {
+		return this.acceptEventActivation.getExecutionLocus();
+	}
+
+	@Override
+	public IActivityNodeActivation getNodeActivation(ActivityNode node) {
+		return this.acceptEventActivation.getNodeActivation(node);
+	}
+
+	@Override
+	public void addToken(IToken token) {
+		this.acceptEventActivation.addToken(token);
+	}
+
+	@Override
+	public Integer removeToken(IToken token) {
+		return this.acceptEventActivation.removeToken(token);
+	}
+
+	@Override
+	public void addTokens(List<IToken> tokens) {
+		this.acceptEventActivation.addTokens(tokens);
+	}
+
+	@Override
+	public List<IToken> takeTokens() {
+		return this.acceptEventActivation.takeTokens();
+	}
+
+	@Override
+	public void clearTokens() {
+		this.acceptEventActivation.clearTokens();
+	}
+
+	@Override
+	public List<IToken> getTokens() {
+		return this.acceptEventActivation.getTokens();
+	}
+
+	@Override
+	public void initialize(ActivityNode node, IActivityNodeActivationGroup group) {
+		this.acceptEventActivation.initialize(node, group);
+	}
+
+	@Override
+	public void suspend() {
+		this.acceptEventActivation.suspend();
+	}
+
+	@Override
+	public void resume() {
+		this.acceptEventActivation.resume();
+	}
+
+	@Override
+	public void setNode(ActivityNode node) {
+		this.acceptEventActivation.setNode(node);
+	}
+
+	@Override
+	public ActivityNode getNode() {
+		return this.acceptEventActivation.getNode();
+	}
+
+	@Override
+	public void setGroup(IActivityNodeActivationGroup group) {
+		this.acceptEventActivation.setGroup(group);
+	}
+
+	@Override
+	public IActivityNodeActivationGroup getGroup() {
+		return this.acceptEventActivation.getGroup();
+	}
+
+	@Override
+	public List<IActivityEdgeInstance> getIncomingEdges() {
+		return this.acceptEventActivation.getIncomingEdges();
+	}
+
+	@Override
+	public List<IActivityEdgeInstance> getOutgoingEdges() {
+		return this.acceptEventActivation.getOutgoingEdges();
+	}
+
+	@Override
+	public void setRunning(Boolean status) {
+		this.acceptEventActivation.setRunning(status);
+	}
+
+	@Override
+	public void _endIsolation() {
+		this.acceptEventActivation._endIsolation();
+	}
+
+	@Override
+	public void _beginIsolation() {
+		this.acceptEventActivation._beginIsolation();
+	}
+
+	@Override
+	public void accept(IEventOccurrence eventOccurrence) {
+		this.acceptEventActivation.accept(eventOccurrence);
+	}
+
+	@Override
+	public Boolean match(IEventOccurrence eventOccurrence) {
+		return this.acceptEventActivation.match(eventOccurrence);
+	}
+
+	@Override
+	public IAcceptEventActionEventAccepter getEventAccepter() {
+		return this.acceptEventActivation.getEventAccepter();
+	}
+
+}
diff --git a/bundles/core/engines/org.eclipse.papyrus.moka.fuml/aspects/org/eclipse/papyrus/moka/fuml/profiling/Semantics/CommonBehaviors/Communications/TriggeredVisitorWrapper.java b/bundles/core/engines/org.eclipse.papyrus.moka.fuml/aspects/org/eclipse/papyrus/moka/fuml/profiling/Semantics/CommonBehaviors/Communications/TriggeredVisitorWrapper.java
new file mode 100644
index 0000000..3efca01
--- /dev/null
+++ b/bundles/core/engines/org.eclipse.papyrus.moka.fuml/aspects/org/eclipse/papyrus/moka/fuml/profiling/Semantics/CommonBehaviors/Communications/TriggeredVisitorWrapper.java
@@ -0,0 +1,31 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+
+package org.eclipse.papyrus.moka.fuml.profiling.Semantics.CommonBehaviors.Communications;
+
+import org.eclipse.papyrus.moka.fuml.Profiling.ITriggeredVisitor;
+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.IEventOccurrence;
+
+public abstract class TriggeredVisitorWrapper implements ITriggeredVisitor{
+	
+	protected IEventOccurrence eventOccurrence;
+	
+	public TriggeredVisitorWrapper(IEventOccurrence eventOccurrence) {
+		this.eventOccurrence = eventOccurrence;
+	}
+	
+	@Override
+	public IEventOccurrence getTriggeringEventOccurrence() {
+		return this.eventOccurrence;
+	}
+
+}
diff --git a/bundles/core/engines/org.eclipse.papyrus.moka.fuml/generated/org/eclipse/papyrus/moka/fuml/Semantics/impl/Activities/IntermediateActivities/ActivityNodeActivationGroup.java b/bundles/core/engines/org.eclipse.papyrus.moka.fuml/generated/org/eclipse/papyrus/moka/fuml/Semantics/impl/Activities/IntermediateActivities/ActivityNodeActivationGroup.java
index 9622e90..0f315d2 100644
--- a/bundles/core/engines/org.eclipse.papyrus.moka.fuml/generated/org/eclipse/papyrus/moka/fuml/Semantics/impl/Activities/IntermediateActivities/ActivityNodeActivationGroup.java
+++ b/bundles/core/engines/org.eclipse.papyrus.moka.fuml/generated/org/eclipse/papyrus/moka/fuml/Semantics/impl/Activities/IntermediateActivities/ActivityNodeActivationGroup.java
@@ -163,8 +163,6 @@
 
 	public void terminateAll() {
 		// Terminate all node activations in the group.
-		Debug.println("[terminateAll] Terminating activation group for "
-				+ (this.activityExecution != null ? "activity " + this.activityExecution.getTypes().get(0).getName() : this.containingNodeActivation != null ? "node " + this.containingNodeActivation.getNode().getName() : "expansion region") + ".");
 		List<IActivityNodeActivation> nodeActivations = this.nodeActivations;
 		for (int i = 0; i < nodeActivations.size(); i++) {
 			IActivityNodeActivation nodeActivation = nodeActivations.get(i);
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/META-INF/MANIFEST.MF b/bundles/core/services/org.eclipse.papyrus.moka.debug/META-INF/MANIFEST.MF
index 0d00217..e1d2cc3 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/META-INF/MANIFEST.MF
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/META-INF/MANIFEST.MF
@@ -11,7 +11,9 @@
  org.eclipse.papyrus.moka.animation;bundle-version="2.0.100",
  org.eclipse.papyrus.moka.utils.ui;bundle-version="2.0.100",
  org.eclipse.debug.ui;bundle-version="[3.12.0,4.0.0)",
- org.eclipse.papyrus.moka.fuml.statemachines.interfaces;visibility:=reexport
+ org.eclipse.papyrus.moka.fuml.statemachines.interfaces;visibility:=reexport,
+ org.eclipse.papyrus.moka.timedfuml.interfaces,
+ org.eclipse.papyrus.moka.debug
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ActivationPolicy: lazy
 Bundle-Vendor: Eclipse Modeling Project
@@ -23,3 +25,4 @@
  org.eclipse.papyrus.moka.debug.model.data.mapping.variables;x-internal:=true,
  org.eclipse.papyrus.moka.debug.model.data.presentations,
  org.eclipse.papyrus.moka.debug.model.data.presentations.providers
+Import-Package: org.eclipse.papyrus.moka.debug.model.data.mapping.values
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/resources/icons/call.png b/bundles/core/services/org.eclipse.papyrus.moka.debug/resources/icons/call.png
new file mode 100644
index 0000000..f56aef7
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/resources/icons/call.png
Binary files differ
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/resources/icons/completion.png b/bundles/core/services/org.eclipse.papyrus.moka.debug/resources/icons/completion.png
new file mode 100644
index 0000000..a175dd3
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/resources/icons/completion.png
Binary files differ
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/resources/icons/interaction-point.gif b/bundles/core/services/org.eclipse.papyrus.moka.debug/resources/icons/interaction-point.gif
new file mode 100644
index 0000000..7b1efa5
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/resources/icons/interaction-point.gif
Binary files differ
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/resources/icons/signal.png b/bundles/core/services/org.eclipse.papyrus.moka.debug/resources/icons/signal.png
new file mode 100644
index 0000000..a5459b6
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/resources/icons/signal.png
Binary files differ
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/resources/icons/time.png b/bundles/core/services/org.eclipse.papyrus.moka.debug/resources/icons/time.png
new file mode 100644
index 0000000..d8ac0b4
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/resources/icons/time.png
Binary files differ
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/MokaDebugPlugin.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/MokaDebugPlugin.java
index 959727e..cf09f15 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/MokaDebugPlugin.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/MokaDebugPlugin.java
@@ -15,11 +15,16 @@
 
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.CS_InteractionPointVariableLabelProvider;
+import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.CallEventOccurrenceVariableLabelProvider;
+import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.CompletionEventOccurrenceVariableLabelProvider;
 import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.EventPoolVariableLabelProvider;
 import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.ExecutionContextVariableLabelProvider;
 import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.FeatureValueVariableLabelProvider;
 import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.ItemVariableLabelProvider;
+import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.SignalEventOccurrenceVariableLabelProvider;
 import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.SuspensionPointVariableLabelProvider;
+import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.TimeEventOccurrenceVariableLabelProvider;
 import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.TokensVariableLabelProvider;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.osgi.framework.BundleContext;
@@ -81,6 +86,11 @@
 		registry.put(FeatureValueVariableLabelProvider.PUBLIC_ICON, this.getDescriptor(FeatureValueVariableLabelProvider.PUBLIC_ICON));
 		registry.put(ItemVariableLabelProvider.ITEM_ICON, this.getDescriptor(ItemVariableLabelProvider.ITEM_ICON));
 		registry.put(TokensVariableLabelProvider.TOKEN_SET_ICON, this.getDescriptor(TokensVariableLabelProvider.TOKEN_SET_ICON));
+		registry.put(TimeEventOccurrenceVariableLabelProvider.TIME_EVENT_ICON, this.getDescriptor(TimeEventOccurrenceVariableLabelProvider.TIME_EVENT_ICON));
+		registry.put(SignalEventOccurrenceVariableLabelProvider.SIGNAL_EVENT_ICON, this.getDescriptor(SignalEventOccurrenceVariableLabelProvider.SIGNAL_EVENT_ICON));
+		registry.put(CallEventOccurrenceVariableLabelProvider.CALL_EVENT_ICON, this.getDescriptor(CallEventOccurrenceVariableLabelProvider.CALL_EVENT_ICON));
+		registry.put(CS_InteractionPointVariableLabelProvider.PORT_ICON, this.getDescriptor(CS_InteractionPointVariableLabelProvider.PORT_ICON));
+		registry.put(CompletionEventOccurrenceVariableLabelProvider.COMPLETION_EVENT_ICON, this.getDescriptor(CompletionEventOccurrenceVariableLabelProvider.COMPLETION_EVENT_ICON));
 	}
 
 	public ImageDescriptor getDescriptor(final String path) {
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/engine/DebugService.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/engine/DebugService.java
index 40f99f1..d541369 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/engine/DebugService.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/engine/DebugService.java
@@ -14,6 +14,7 @@
 import org.eclipse.debug.core.DebugException;
 import org.eclipse.debug.core.ILaunch;
 import org.eclipse.emf.ecore.EObject;
+import org.eclipse.papyrus.moka.fuml.Semantics.Actions.CompleteActions.IAcceptEventActionActivation;
 import org.eclipse.papyrus.moka.fuml.Semantics.Activities.IntermediateActivities.IActivityEdgeInstance;
 import org.eclipse.papyrus.moka.fuml.Semantics.Activities.IntermediateActivities.IActivityNodeActivation;
 import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IObject_;
@@ -36,6 +37,12 @@
 
 	@Override
 	public void nodeVisited(ISemanticVisitor nodeVisitor) {
+		// If an activity or a state machine semantic visitor shall
+		// be suspended then the execution thread of the object executing
+		// the node is suspended.
+		// Note: An accept event action is never suspended when it fires.
+		// Instead it is suspended when an event is accepted by this action
+		// from the event pool.
 		if (!this.debugTarget.isDisconnected()) {
 			if (nodeVisitor instanceof IActivityNodeActivation
 					|| nodeVisitor instanceof IActivityEdgeInstance
@@ -44,14 +51,13 @@
 				if(nodeVisitor instanceof IStateMachineSemanticVisitor) {
 					object = ((IStateMachineSemanticVisitor)nodeVisitor).getExecutionContext();
 				}else {
-					if (nodeVisitor instanceof IActivityNodeActivation) {
-						if (((IActivityNodeActivation) nodeVisitor).getGroup() != null) {
+					if (nodeVisitor instanceof IActivityNodeActivation
+							&& !(nodeVisitor instanceof IAcceptEventActionActivation)
+							&& (((IActivityNodeActivation) nodeVisitor).getGroup() != null)) {
 							object = ((IActivityNodeActivation) nodeVisitor).getExecutionContext();
-						}
-					} else {
-						if (((IActivityEdgeInstance) nodeVisitor).getSource().getGroup() != null) {
+					} else if (nodeVisitor instanceof IActivityEdgeInstance
+							&& ((IActivityEdgeInstance) nodeVisitor).getSource().getGroup() != null) {
 							object = ((IActivityEdgeInstance) nodeVisitor).getSource().getExecutionContext();
-						}
 					}
 				}
 				if (object != null) {
@@ -66,7 +72,22 @@
 
 	@Override
 	public void nodeLeft(ISemanticVisitor nodeVisitor) {
-		// Do nothing
+		// If an accept event action is left this means it has accepted an event
+		// from the event pool. This accept event action is therefore suspended for
+		// debug which provides the designer to observe which event triggered the action.
+		if (!this.debugTarget.isDisconnected()) {
+			IObject_ object = null;
+			if(nodeVisitor instanceof IAcceptEventActionActivation
+					&& ((IAcceptEventActionActivation)nodeVisitor).getGroup() != null) {
+				object = ((IAcceptEventActionActivation)nodeVisitor).getExecutionContext();
+			}
+			if(object != null) {
+				this.debugTarget.update(object, nodeVisitor);
+				if (this.debugTarget.isSuspensionRequired(object, nodeVisitor)) {
+					this.debugTarget.suspend(object, nodeVisitor);
+				}
+			}
+		}
 	}
 
 	@Override
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ActivityEdgeInstanceValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ActivityEdgeInstanceValueAdapter.java
index c65d714..55c955d 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ActivityEdgeInstanceValueAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ActivityEdgeInstanceValueAdapter.java
@@ -24,7 +24,7 @@
 
 	@Override
 	protected NamedElement getNode() {
-		return ((IActivityEdgeInstance)this.visitor).getEdge();
+		return ((IActivityEdgeInstance)this.adaptedObject).getEdge();
 	}
 
 }
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ActivityNodeActivationValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ActivityNodeActivationValueAdapter.java
index 71ad293..9a823d4 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ActivityNodeActivationValueAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ActivityNodeActivationValueAdapter.java
@@ -22,6 +22,6 @@
 	}
 	@Override
 	protected NamedElement getNode() {
-		return ((IActivityNodeActivation)this.visitor).getNode();
+		return ((IActivityNodeActivation)this.adaptedObject).getNode();
 	}
 }
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ActivityVisitorValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ActivityVisitorValueAdapter.java
index c6afa17..d4af8c7 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ActivityVisitorValueAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ActivityVisitorValueAdapter.java
@@ -1,5 +1,3 @@
-package org.eclipse.papyrus.moka.debug.model.data.mapping.values;
-
 /*****************************************************************************
  * Copyright (c) 2016 CEA LIST.
  * 
@@ -11,6 +9,9 @@
  * Contributors:
  *  CEA LIST Initial API and implementation
  *****************************************************************************/
+
+package org.eclipse.papyrus.moka.debug.model.data.mapping.values;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -25,17 +26,17 @@
 import org.eclipse.uml2.uml.NamedElement;
 
 public abstract class ActivityVisitorValueAdapter extends VisitorValueAdapter {
-
+	
 	public ActivityVisitorValueAdapter(MokaDebugTarget debugTarget, ISemanticVisitor visitor) {
 		super(debugTarget, visitor);
 	}
-	
+
 	protected abstract NamedElement getNode();
 
 	@Override
 	public IVariable[] getVariables() throws DebugException {
 		if (this.variables.isEmpty()) {
-			this.variables.add(new TokensVariableAdapter(this.debugTarget, getTokens(this.visitor)));
+			this.variables.add(new TokensVariableAdapter(this.debugTarget, getTokens(this.adaptedObject)));
 		}
 		return this.variables.toArray(new IVariable[0]);
 	}
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/CS_EventOccurrenceValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/CS_EventOccurrenceValueAdapter.java
new file mode 100644
index 0000000..030b93b
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/CS_EventOccurrenceValueAdapter.java
@@ -0,0 +1,55 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+
+package org.eclipse.papyrus.moka.debug.model.data.mapping.values;
+
+import org.eclipse.debug.core.DebugException;
+import org.eclipse.debug.core.model.IVariable;
+import org.eclipse.papyrus.moka.composites.interfaces.Semantics.CompositeStructures.InvocationActions.ICS_EventOccurrence;
+import org.eclipse.papyrus.moka.composites.interfaces.Semantics.CompositeStructures.StructuredClasses.ICS_InteractionPoint;
+import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;
+import org.eclipse.papyrus.moka.debug.model.data.mapping.variables.CS_InteractionPointVariableAdapter;
+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.IEventOccurrence;
+
+public class CS_EventOccurrenceValueAdapter extends EventOccurrenceValueAdapter {
+
+	public CS_EventOccurrenceValueAdapter(MokaDebugTarget debugTarget, IEventOccurrence eventOccurrence) {
+		super(debugTarget, eventOccurrence);
+	}
+
+	@Override
+	public IVariable[] getVariables() throws DebugException {
+		if (this.variables.isEmpty()) {
+			ICS_InteractionPoint interactionPoint= ((ICS_EventOccurrence) this.adaptedObject).getInteractionPoint();
+			if(interactionPoint != null) {
+				this.variables.add(new CS_InteractionPointVariableAdapter(debugTarget, interactionPoint));
+			}
+			MokaValueAdapter<?> valueAdapter = MokaValueAdapterFactory.getInstance()
+					.instantiate(((ICS_EventOccurrence) this.adaptedObject).getWrappedEventOccurrence(), debugTarget);
+			IVariable[] delegatedVariables = valueAdapter.getVariables(); 
+			for(int i=0; i < delegatedVariables.length; i++) {
+				this.variables.add(delegatedVariables[i]);
+			}
+		}
+		return this.variables.toArray(new IVariable[0]);
+	}
+	
+	@Override
+	public String getValueString() throws DebugException {
+		// The string representation is the one specified by the value
+		// adapter of the wrapped event occurrence.
+		MokaValueAdapter<?> valueAdapter = MokaValueAdapterFactory.getInstance()
+				.instantiate(((ICS_EventOccurrence) this.adaptedObject).getWrappedEventOccurrence(), debugTarget);
+		return valueAdapter.getValueString();
+	}
+
+}
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/CS_InteractionPointValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/CS_InteractionPointValueAdapter.java
new file mode 100644
index 0000000..da6ed87
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/CS_InteractionPointValueAdapter.java
@@ -0,0 +1,36 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+
+package org.eclipse.papyrus.moka.debug.model.data.mapping.values;
+
+import org.eclipse.debug.core.DebugException;
+import org.eclipse.papyrus.moka.composites.interfaces.Semantics.CompositeStructures.StructuredClasses.ICS_InteractionPoint;
+import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;
+
+public class CS_InteractionPointValueAdapter extends MokaValueAdapter<ICS_InteractionPoint>{
+
+	public CS_InteractionPointValueAdapter(MokaDebugTarget debugTarget, ICS_InteractionPoint adaptedObject) {
+		super(debugTarget, adaptedObject);
+	}
+	
+	@Override
+	public String getValueString() throws DebugException {
+		// The string representation of an interaction point is given
+		// by the identifier of its referent (i.e., the object representing
+		// the port instance).
+		if(this.adaptedObject.getReferent() != null) {
+			return this.adaptedObject.getReferent().getIdentifier();
+		}
+		return "";
+	}
+
+}
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/CallEventOccurrenceValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/CallEventOccurrenceValueAdapter.java
new file mode 100644
index 0000000..1fe187a
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/CallEventOccurrenceValueAdapter.java
@@ -0,0 +1,50 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+
+package org.eclipse.papyrus.moka.debug.model.data.mapping.values;
+
+import java.util.List;
+
+import org.eclipse.debug.core.DebugException;
+import org.eclipse.debug.core.model.IVariable;
+import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;
+import org.eclipse.papyrus.moka.debug.model.data.mapping.variables.ParameterValueVariableAdapter;
+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.BasicBehaviors.IParameterValue;
+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.ICallEventOccurrence;
+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.IEventOccurrence;
+import org.eclipse.uml2.uml.Operation;
+import org.eclipse.uml2.uml.Parameter;
+
+public class CallEventOccurrenceValueAdapter extends EventOccurrenceValueAdapter {
+
+	public CallEventOccurrenceValueAdapter(MokaDebugTarget debugTarget, IEventOccurrence eventOccurrence) {
+		super(debugTarget, eventOccurrence);
+		this.representation = "Call Event";
+	}
+
+	@Override
+	public IVariable[] getVariables() throws DebugException {
+		if (this.variables.isEmpty() && !this.adaptedObject.getParameterValues().isEmpty()) {
+			Operation operation = ((ICallEventOccurrence) this.adaptedObject).getOperation();
+			if (operation != null) {
+				List<Parameter> operationParameters = operation.getOwnedParameters();
+				List<IParameterValue> parameterValues = this.adaptedObject.getParameterValues();
+				for (int i = 0; i < parameterValues.size(); i++) {
+					this.variables.add(new ParameterValueVariableAdapter(debugTarget, parameterValues.get(i),
+							operationParameters.get(i).getName()));
+				}
+			}
+		}
+		return this.variables.toArray(new IVariable[0]);
+	}
+
+}
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/CompletionEventOccurrenceValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/CompletionEventOccurrenceValueAdapter.java
new file mode 100644
index 0000000..2e3ca09
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/CompletionEventOccurrenceValueAdapter.java
@@ -0,0 +1,25 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+
+package org.eclipse.papyrus.moka.debug.model.data.mapping.values;
+
+import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;
+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.IEventOccurrence;
+
+public class CompletionEventOccurrenceValueAdapter extends EventOccurrenceValueAdapter {
+
+	public CompletionEventOccurrenceValueAdapter(MokaDebugTarget debugTarget, IEventOccurrence eventOccurrence) {
+		super(debugTarget, eventOccurrence);
+		this.representation = "Completion Event";
+	}
+
+}
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/NullValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/DefaultValueAdapter.java
similarity index 61%
rename from bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/NullValueAdapter.java
rename to bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/DefaultValueAdapter.java
index 1c4a143..16f682a 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/NullValueAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/DefaultValueAdapter.java
@@ -9,24 +9,32 @@
  * Contributors:
  *  CEA LIST Initial API and implementation
  *****************************************************************************/
+
 package org.eclipse.papyrus.moka.debug.model.data.mapping.values;
 
 import org.eclipse.debug.core.DebugException;
 import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;
 
-public class NullValueAdapter extends MokaValueAdapter {
+public class DefaultValueAdapter extends MokaValueAdapter<Object> {
 
-	public NullValueAdapter(MokaDebugTarget debugTarget) {
-		super(debugTarget);
+	public DefaultValueAdapter(MokaDebugTarget debugTarget, Object adapted) {
+		super(debugTarget, adapted);
 	}
 
 	@Override
 	public String getReferenceTypeName() throws DebugException {
-		return "null (or not supported)";
+		// No value adapter could handle the object to be adapted.
+		// Hence the default value adapter is used.
+		return "<no reference type>";
 	}
 
 	@Override
 	public String getValueString() throws DebugException {
-		return "null (or not supported)";
+		// No value adapter could handle the object to be adapted.
+		// Hence the default value adapter is used.
+		if(this.adaptedObject != null) {
+			return this.toString();
+		}
+		return "<null or no representation>";
 	}
 }
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/EventOccurrenceValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/EventOccurrenceValueAdapter.java
index 7dbe84b..f300bf3 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/EventOccurrenceValueAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/EventOccurrenceValueAdapter.java
@@ -9,28 +9,30 @@
  * Contributors:
  *  CEA LIST Initial API and implementation
  *****************************************************************************/
+
 package org.eclipse.papyrus.moka.debug.model.data.mapping.values;
 
 import org.eclipse.debug.core.DebugException;
 import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;
 import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.IEventOccurrence;
 
-public class EventOccurrenceValueAdapter extends MokaValueAdapter {
+public abstract class EventOccurrenceValueAdapter extends MokaValueAdapter<IEventOccurrence> {
 
-	protected IEventOccurrence eventOccurrence;
-
+	// Representation of the event occurrence
+	protected String representation;
+	
 	public EventOccurrenceValueAdapter(MokaDebugTarget debugTarget, IEventOccurrence eventOccurrence) {
-		super(debugTarget);
-		this.eventOccurrence = eventOccurrence;
-	}
-
-	@Override
-	public String getReferenceTypeName() throws DebugException {
-		return "";
+		super(debugTarget, eventOccurrence);
 	}
 
 	@Override
 	public String getValueString() throws DebugException {
-		return this.eventOccurrence.toString();
+		// The string representation is the one specified in the representation
+		// attribute or the result of toString operation applied on the adapted
+		// object.
+		if(this.representation == null || this.representation.isEmpty()) {
+			return this.adaptedObject.toString();
+		}
+		return this.representation;
 	}
 }
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/MokaValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/MokaValueAdapter.java
index 327741f..3f08093 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/MokaValueAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/MokaValueAdapter.java
@@ -9,6 +9,7 @@
  * Contributors:
  *  CEA LIST Initial API and implementation
  *****************************************************************************/
+
 package org.eclipse.papyrus.moka.debug.model.data.mapping.values;
 
 import java.util.ArrayList;
@@ -20,27 +21,48 @@
 import org.eclipse.papyrus.moka.debug.engine.MokaDebugElement;
 import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;
 
-public abstract class MokaValueAdapter extends MokaDebugElement implements IValue {
+public abstract class MokaValueAdapter<T> extends MokaDebugElement implements IValue {
 
+	// The object that is adapted through this adapter
+	protected T adaptedObject;
+	
+	// The list of variables that can be accessed through the adapted object
 	protected List<IVariable> variables;
 
-	public MokaValueAdapter(MokaDebugTarget debugTarget) {
+	public MokaValueAdapter(MokaDebugTarget debugTarget, T adaptedObject) {
 		super(debugTarget);
+		this.adaptedObject = adaptedObject;
 		this.variables = new ArrayList<IVariable>();
 	}
 
 	@Override
+	public String getReferenceTypeName() throws DebugException {
+		// No value adapter could handle the object to be adapted.
+		// Hence the default value adapter is used.
+		return "<no reference type>";
+	}
+	
+	@Override
 	public boolean isAllocated() throws DebugException {
+		// An adapted object is always considered as being allocated
 		return true;
 	}
 
 	@Override
 	public boolean hasVariables() throws DebugException {
+		// A value adapter has variables if the array returned
+		// by the getVariable method is not empty
 		return this.getVariables().length > 0;
 	}
 
 	@Override
 	public IVariable[] getVariables() throws DebugException {
+		// Return the list of variables as an array
 		return this.variables.toArray(new IVariable[0]);
 	}
+	
+	public T getAdapted() {
+		// Return a reference on the adapted object
+		return this.adaptedObject;
+	}
 }
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/MokaValueAdapterFactory.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/MokaValueAdapterFactory.java
index 6698867..074a7b1 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/MokaValueAdapterFactory.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/MokaValueAdapterFactory.java
@@ -11,7 +11,10 @@
  *****************************************************************************/
 package org.eclipse.papyrus.moka.debug.model.data.mapping.values;
 
+import org.eclipse.papyrus.moka.composites.interfaces.Semantics.CompositeStructures.InvocationActions.ICS_EventOccurrence;
+import org.eclipse.papyrus.moka.composites.interfaces.Semantics.CompositeStructures.StructuredClasses.ICS_InteractionPoint;
 import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;
+import org.eclipse.papyrus.moka.fuml.Semantics.Actions.CompleteActions.IAcceptEventActionActivation;
 import org.eclipse.papyrus.moka.fuml.Semantics.Activities.IntermediateActivities.IActivityEdgeInstance;
 import org.eclipse.papyrus.moka.fuml.Semantics.Activities.IntermediateActivities.IActivityNodeActivation;
 import org.eclipse.papyrus.moka.fuml.Semantics.Activities.IntermediateActivities.IForkedToken;
@@ -19,10 +22,16 @@
 import org.eclipse.papyrus.moka.fuml.Semantics.Activities.IntermediateActivities.IToken;
 import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IObject_;
 import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IPrimitiveValue;
+import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IReference;
 import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IStructuredValue;
 import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IValue;
+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.ICallEventOccurrence;
 import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.IEventOccurrence;
+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.ISignalEventOccurrence;
 import org.eclipse.papyrus.moka.fuml.Semantics.Loci.LociL1.ISemanticVisitor;
+import org.eclipse.papyrus.moka.fuml.statemachines.interfaces.Semantics.StateMachines.ICompletionEventOccurrence;
+import org.eclipse.papyrus.moka.fuml.statemachines.interfaces.Semantics.StateMachines.ITransitionActivation;
+import org.eclipse.papyrus.moka.timedfuml.interfaces.semantics.CommonBehaviors.ITimedEventOccurrence;
 
 public class MokaValueAdapterFactory {
 
@@ -38,11 +47,21 @@
 		return INSTANCE;
 	}
 
-	public MokaValueAdapter instantiate(Object value, MokaDebugTarget debugTarget) {
-		MokaValueAdapter adapter = null;
+	public MokaValueAdapter<?> instantiate(Object value, MokaDebugTarget debugTarget) {
+		MokaValueAdapter<?> adapter = null;
 		if (value != null) {
 			if (value instanceof IEventOccurrence) {
-				adapter = new EventOccurrenceValueAdapter(debugTarget, (IEventOccurrence) value);
+				if(value instanceof ICS_EventOccurrence) {
+					adapter = new CS_EventOccurrenceValueAdapter(debugTarget, (ICS_EventOccurrence) value);
+				} else if(value instanceof ITimedEventOccurrence) {
+					adapter = new TimeEventOccurrenceValueAdapter(debugTarget, (ITimedEventOccurrence) value);
+				} else if(value instanceof ISignalEventOccurrence) {
+					adapter = new SignalEventOccurrenceValueAdapter(debugTarget, (ISignalEventOccurrence) value);
+				} else if(value instanceof ICallEventOccurrence) {
+					adapter = new CallEventOccurrenceValueAdapter(debugTarget, (ICallEventOccurrence) value);
+				} else if(value instanceof ICompletionEventOccurrence) {
+					adapter = new CompletionEventOccurrenceValueAdapter(debugTarget, (ICompletionEventOccurrence) value);
+				}
 			} else if (value instanceof IToken) {
 				if (value instanceof IObjectToken) {
 					adapter = new ObjectTokenValueAdapter(debugTarget, (IObjectToken) value);
@@ -52,7 +71,13 @@
 					adapter = new TokenValueAdapter(debugTarget, (IToken) value);
 				}
 			} else if (value instanceof IValue) {
-				if (value instanceof IObject_) {
+				if (value instanceof IReference) {
+					if(value instanceof ICS_InteractionPoint) {
+						adapter = new CS_InteractionPointValueAdapter(debugTarget, (ICS_InteractionPoint )value);
+					}else {
+						adapter = new ReferenceValueAdapter(debugTarget, (IReference) value);
+					}
+				} else if (value instanceof IObject_) {
 					adapter = new ObjectValueAdapter(debugTarget, (IObject_) value);
 				} else if (value instanceof IStructuredValue) {
 					adapter = new StructuredValueAdapter(debugTarget, (IStructuredValue) value);
@@ -61,14 +86,20 @@
 				}
 			} else if (value instanceof ISemanticVisitor) {
 				if (value instanceof IActivityNodeActivation) {
-					adapter = new ActivityNodeActivationValueAdapter(debugTarget, (IActivityNodeActivation) value);
+					if(value instanceof IAcceptEventActionActivation) {
+						adapter = new TriggeredVisitorValueAdapter(debugTarget, (IAcceptEventActionActivation) value);
+					}else {
+						adapter = new ActivityNodeActivationValueAdapter(debugTarget, (IActivityNodeActivation) value);
+					}
 				}else if (value instanceof IActivityEdgeInstance){
 					adapter = new ActivityEdgeInstanceValueAdapter(debugTarget, (IActivityEdgeInstance)value);
+				} else if (value instanceof ITransitionActivation) {
+					adapter = new TriggeredVisitorValueAdapter(debugTarget, (ITransitionActivation)value);
 				}
 			}
 		}
 		if (adapter == null) {
-			adapter = new NullValueAdapter(debugTarget);
+			adapter = new DefaultValueAdapter(debugTarget, value);
 		}
 		return adapter;
 	}
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/MokaValueList.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/MokaValueList.java
index ca4d877..3f116d7 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/MokaValueList.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/MokaValueList.java
@@ -9,6 +9,7 @@
  * Contributors:
  *  CEA LIST Initial API and implementation
  *****************************************************************************/
+
 package org.eclipse.papyrus.moka.debug.model.data.mapping.values;
 
 import java.util.ArrayList;
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ObjectTokenValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ObjectTokenValueAdapter.java
index bb4f278..4dfc888 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ObjectTokenValueAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ObjectTokenValueAdapter.java
@@ -9,6 +9,7 @@
  * Contributors:
  *  CEA LIST Initial API and implementation
  *****************************************************************************/
+
 package org.eclipse.papyrus.moka.debug.model.data.mapping.values;
 
 import org.eclipse.debug.core.DebugException;
@@ -27,13 +28,13 @@
 	@Override
 	public IVariable[] getVariables() throws DebugException {
 		if (this.variables.isEmpty()) {
-			this.variables.add(new ObjectTokenVariableValueAdapter(debugTarget, ((IObjectToken)this.token).getValue()));
+			this.variables.add(new ObjectTokenVariableValueAdapter(debugTarget, ((IObjectToken)this.adaptedObject).getValue()));
 		}
 		return this.variables.toArray(new IVariable[0]);
 	}
 	
 	@Override
 	public String getValueString() throws DebugException {
-		return "Object";
+		return "";
 	}
 }
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ObjectValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ObjectValueAdapter.java
index 9bd392e..4f8e75d 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ObjectValueAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ObjectValueAdapter.java
@@ -9,6 +9,7 @@
  * Contributors:
  *  CEA LIST Initial API and implementation
  *****************************************************************************/
+
 package org.eclipse.papyrus.moka.debug.model.data.mapping.values;
 
 import org.eclipse.debug.core.DebugException;
@@ -28,14 +29,14 @@
 
 	@Override
 	public String getValueString() throws DebugException {
-		return ((IObject_) this.value).getIdentifier();
+		return ((IObject_) this.adaptedObject).getIdentifier();
 	}
 
 	@Override
 	public IVariable[] getVariables() throws DebugException {
 		super.getVariables();
 		if (this.eventPoolVariable == null) {
-			IObjectActivation objectActivation = ((IObject_) this.value).getObjectActivation();
+			IObjectActivation objectActivation = ((IObject_) this.adaptedObject).getObjectActivation();
 			if (objectActivation != null) {
 				this.eventPoolVariable = new EventPoolVariableAdapter(this.debugTarget, objectActivation);
 				this.variables.add(0, this.eventPoolVariable);
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/PrimitiveValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/PrimitiveValueAdapter.java
index 3f6269f..f6414cc 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/PrimitiveValueAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/PrimitiveValueAdapter.java
@@ -9,29 +9,23 @@
  * Contributors:
  *  CEA LIST Initial API and implementation
  *****************************************************************************/
+
 package org.eclipse.papyrus.moka.debug.model.data.mapping.values;
 
 import org.eclipse.debug.core.DebugException;
 import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;
 import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IPrimitiveValue;
 
-public class PrimitiveValueAdapter extends MokaValueAdapter {
-
-	protected IPrimitiveValue value;
+public class PrimitiveValueAdapter extends MokaValueAdapter<IPrimitiveValue> {
 
 	public PrimitiveValueAdapter(MokaDebugTarget debugTarget, IPrimitiveValue value) {
-		super(debugTarget);
-		this.value = value;
-	}
-
-	@Override
-	public String getReferenceTypeName() throws DebugException {
-		return this.value.getTypes().iterator().next().getName();
+		super(debugTarget, value);
 	}
 
 	@Override
 	public String getValueString() throws DebugException {
-		return this.value.toString();
+		// The string is the value represented by this primitive value.
+		return this.adaptedObject.toString();
 	}
 
 }
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ReferenceValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ReferenceValueAdapter.java
new file mode 100644
index 0000000..0ac2206
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/ReferenceValueAdapter.java
@@ -0,0 +1,44 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+
+package org.eclipse.papyrus.moka.debug.model.data.mapping.values;
+
+import org.eclipse.debug.core.DebugException;
+import org.eclipse.debug.core.model.IVariable;
+import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;
+import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IReference;
+
+public class ReferenceValueAdapter extends MokaValueAdapter<IReference> {
+
+	public ReferenceValueAdapter(MokaDebugTarget debugTarget, IReference adaptedObject) {
+		super(debugTarget, adaptedObject);
+	}
+
+	@Override
+	public IVariable[] getVariables() throws DebugException {
+		// Create a value adapter for the referent object and return
+		// that variables that can be accessed through this latter.
+		MokaValueAdapter<?> adapter = MokaValueAdapterFactory.getInstance().instantiate(this.adaptedObject.getReferent(), this.debugTarget);
+		return adapter.getVariables();
+	}
+	
+	@Override
+	public String getValueString() throws DebugException {
+		// The representation of the value as string is given by the identifier
+		// of the referent object.
+		if(this.adaptedObject.getReferent() != null) {
+			return this.adaptedObject.getReferent().getIdentifier();
+		}
+		return "";
+	}
+
+}
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/SignalEventOccurrenceValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/SignalEventOccurrenceValueAdapter.java
new file mode 100644
index 0000000..236216c
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/SignalEventOccurrenceValueAdapter.java
@@ -0,0 +1,49 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+
+package org.eclipse.papyrus.moka.debug.model.data.mapping.values;
+
+import java.util.List;
+
+import org.eclipse.debug.core.DebugException;
+import org.eclipse.debug.core.model.IVariable;
+import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;
+import org.eclipse.papyrus.moka.debug.model.data.mapping.variables.ParameterValueVariableAdapter;
+import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IFeatureValue;
+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.BasicBehaviors.IParameterValue;
+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.IEventOccurrence;
+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.ISignalEventOccurrence;
+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.ISignalInstance;
+
+public class SignalEventOccurrenceValueAdapter extends EventOccurrenceValueAdapter {
+
+	public SignalEventOccurrenceValueAdapter(MokaDebugTarget debugTarget, IEventOccurrence eventOccurrence) {
+		super(debugTarget, eventOccurrence);
+		this.representation = "Signal Event";
+	}
+
+	@Override
+	public IVariable[] getVariables() throws DebugException {
+		if (this.variables.isEmpty() && !this.adaptedObject.getParameterValues().isEmpty()) {
+			ISignalInstance signalInstance = ((ISignalEventOccurrence)this.adaptedObject).getSignalInstance();
+			if(signalInstance != null) {
+				List<IParameterValue> parameterValues = this.adaptedObject.getParameterValues();
+				List<IFeatureValue> featureValues = signalInstance.getMemberValues();
+				for(int i=0; i < parameterValues.size(); i++) {
+					this.variables.add(new ParameterValueVariableAdapter(debugTarget, parameterValues.get(i), featureValues.get(i).getFeature().getName()));
+				}
+			}
+		}
+		return this.variables.toArray(new IVariable[0]);
+	}
+
+}
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/StructuredValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/StructuredValueAdapter.java
index 13a87f4..e488bc8 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/StructuredValueAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/StructuredValueAdapter.java
@@ -9,6 +9,7 @@
  * Contributors:
  *  CEA LIST Initial API and implementation
  *****************************************************************************/
+
 package org.eclipse.papyrus.moka.debug.model.data.mapping.values;
 
 import java.util.Iterator;
@@ -18,49 +19,33 @@
 import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;
 import org.eclipse.papyrus.moka.debug.model.data.mapping.variables.FeatureValueVariableAdapter;
 import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IFeatureValue;
-import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IReference;
 import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IStructuredValue;
-import org.eclipse.uml2.uml.Classifier;
 
-public class StructuredValueAdapter extends MokaValueAdapter {
-
-	// Value that is adapted in the debug model context
-	protected IStructuredValue value;
+public class StructuredValueAdapter extends MokaValueAdapter<IStructuredValue> {
 
 	public StructuredValueAdapter(MokaDebugTarget debugTarget, IStructuredValue value) {
-		super(debugTarget);
-		this.value = value;
-	}
-
-	@Override
-	public String getReferenceTypeName() throws DebugException {
-		String type = "[";
-		Iterator<Classifier> typeIterator = this.value.getTypes().iterator();
-		while (typeIterator.hasNext()) {
-			Classifier classifier = typeIterator.next();
-			type += classifier.getName();
-			if (typeIterator.hasNext()) {
-				type += ", ";
-			}
-		}
-		type += "]";
-		return type;
+		super(debugTarget, value);
 	}
 
 	@Override
 	public String getValueString() throws DebugException {
-		if(this.value instanceof IReference){
-			return ((IReference)this.value).getReferent().getIdentifier();
+		// By default the representation of a structured value
+		// as string is given by the toString operation applied
+		// on an executable UML value
+		if(this.adaptedObject != null){
+			return this.adaptedObject.toString();
 		}
-		return value.toString();
+		return "";
 	}
 
 	@Override
 	public IVariable[] getVariables() throws DebugException {
+		// Variables available for a structured value are variable adapters
+		// built from features values owned by the structured value.
 		if (this.variables.isEmpty()) {
-			Iterator<IFeatureValue> featureValueIterator = this.value.getFeatureValues().iterator();
+			Iterator<IFeatureValue> featureValueIterator = this.adaptedObject.getFeatureValues().iterator();
 			while (featureValueIterator.hasNext()) {
-				this.variables.add(new FeatureValueVariableAdapter(this.debugTarget, value, featureValueIterator.next()));
+				this.variables.add(new FeatureValueVariableAdapter(this.debugTarget, this.adaptedObject, featureValueIterator.next()));
 			}
 		}
 		return this.variables.toArray(new IVariable[0]);
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/TimeEventOccurrenceValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/TimeEventOccurrenceValueAdapter.java
new file mode 100644
index 0000000..93af818
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/TimeEventOccurrenceValueAdapter.java
@@ -0,0 +1,42 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+
+package org.eclipse.papyrus.moka.debug.model.data.mapping.values;
+
+import org.eclipse.debug.core.DebugException;
+import org.eclipse.debug.core.model.IVariable;
+import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;
+import org.eclipse.papyrus.moka.debug.model.data.mapping.variables.ParameterValueVariableAdapter;
+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.IEventOccurrence;
+
+public class TimeEventOccurrenceValueAdapter extends EventOccurrenceValueAdapter {
+
+	protected static final String TIME = "time";
+
+	public TimeEventOccurrenceValueAdapter(MokaDebugTarget debugTarget, IEventOccurrence eventOccurrence) {
+		super(debugTarget, eventOccurrence);
+		this.representation = "Time Event";
+	}
+
+	@Override
+	public IVariable[] getVariables() throws DebugException {
+		// A time event occurrence always has a single variable.
+		// This variable contains the time at which the event occurrence
+		// is received by an object.
+		if (this.variables.isEmpty() && this.adaptedObject.getParameterValues().size() == 1) {
+			this.variables.add(new ParameterValueVariableAdapter(debugTarget,
+					this.adaptedObject.getParameterValues().iterator().next(), TIME));
+		}
+		return this.variables.toArray(new IVariable[0]);
+	}
+
+}
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/TokenValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/TokenValueAdapter.java
index ac180c0..1ff28f4 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/TokenValueAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/TokenValueAdapter.java
@@ -9,26 +9,17 @@
  * Contributors:
  *  CEA LIST Initial API and implementation
  *****************************************************************************/
+
 package org.eclipse.papyrus.moka.debug.model.data.mapping.values;
 
 import org.eclipse.debug.core.DebugException;
 import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;
 import org.eclipse.papyrus.moka.fuml.Semantics.Activities.IntermediateActivities.IToken;
 
-public class TokenValueAdapter extends MokaValueAdapter {
-
-	protected IToken token;
-
-	private final String REFERENCE_TYPE_NAME = "";
+public class TokenValueAdapter extends MokaValueAdapter<IToken> {
 
 	public TokenValueAdapter(MokaDebugTarget debugTarget, IToken token) {
-		super(debugTarget);
-		this.token = token;
-	}
-
-	@Override
-	public String getReferenceTypeName() throws DebugException {
-		return this.REFERENCE_TYPE_NAME;
+		super(debugTarget, token);
 	}
 
 	@Override
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/TriggeredVisitorValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/TriggeredVisitorValueAdapter.java
new file mode 100644
index 0000000..f6c12ae
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/TriggeredVisitorValueAdapter.java
@@ -0,0 +1,48 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+
+package org.eclipse.papyrus.moka.debug.model.data.mapping.values;
+
+import org.eclipse.debug.core.DebugException;
+import org.eclipse.debug.core.model.IVariable;
+import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;
+import org.eclipse.papyrus.moka.debug.model.data.mapping.variables.EventOccurrenceVariableAdapter;
+import org.eclipse.papyrus.moka.fuml.Profiling.ITriggeredVisitor;
+import org.eclipse.papyrus.moka.fuml.Semantics.Loci.LociL1.ISemanticVisitor;
+
+public class TriggeredVisitorValueAdapter extends VisitorValueAdapter{
+
+	public TriggeredVisitorValueAdapter(MokaDebugTarget debugTarget, ISemanticVisitor visitor) {
+		super(debugTarget, visitor);
+	}
+
+	@Override
+	public String getValueString() throws DebugException {
+		// Returns this value as a String.
+		// The string representation of this value is given by the toString
+		// operation implemented by a semantic visitor.
+		if(this.adaptedObject != null){
+			return this.adaptedObject.toString();
+		}
+		return "<empty>";
+	}
+	
+	@Override
+	public IVariable[] getVariables() throws DebugException {
+		if (this.variables.isEmpty()) {
+			this.variables.add(new EventOccurrenceVariableAdapter(debugTarget,
+					((ITriggeredVisitor) this.adaptedObject).getTriggeringEventOccurrence()));
+		}
+		return this.variables.toArray(new IVariable[0]);
+	}
+
+}
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/VisitorValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/VisitorValueAdapter.java
index aad53d8..e79daf5 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/VisitorValueAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/values/VisitorValueAdapter.java
@@ -14,13 +14,10 @@
 import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;
 import org.eclipse.papyrus.moka.fuml.Semantics.Loci.LociL1.ISemanticVisitor;
 
-public abstract class VisitorValueAdapter extends MokaValueAdapter {
+public abstract class VisitorValueAdapter extends MokaValueAdapter<ISemanticVisitor> {
 
-	protected ISemanticVisitor visitor;
-	
 	public VisitorValueAdapter(MokaDebugTarget debugTarget, ISemanticVisitor visitor) {
-		super(debugTarget);
-		this.visitor = visitor;
+		super(debugTarget, visitor);
 	}
 	
 }
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/CS_InteractionPointVariableAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/CS_InteractionPointVariableAdapter.java
new file mode 100644
index 0000000..7b7dff0
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/CS_InteractionPointVariableAdapter.java
@@ -0,0 +1,35 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+
+package org.eclipse.papyrus.moka.debug.model.data.mapping.variables;
+
+import org.eclipse.debug.core.DebugException;
+import org.eclipse.papyrus.moka.composites.interfaces.Semantics.CompositeStructures.StructuredClasses.ICS_InteractionPoint;
+import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;
+
+public class CS_InteractionPointVariableAdapter extends MokaVariableAdapter<ICS_InteractionPoint>{
+	
+	// Variable name
+	private final String NAME = "port";
+	
+	
+	public CS_InteractionPointVariableAdapter(MokaDebugTarget debugTarget, ICS_InteractionPoint interactionPoint) {
+		super(debugTarget, interactionPoint);
+	}
+
+	@Override
+	public String getName() throws DebugException {
+		// Return the variable name
+		return NAME;
+	}
+
+}
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/EventOccurrenceVariableAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/EventOccurrenceVariableAdapter.java
new file mode 100644
index 0000000..4c931e0
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/EventOccurrenceVariableAdapter.java
@@ -0,0 +1,33 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+
+package org.eclipse.papyrus.moka.debug.model.data.mapping.variables;
+
+import org.eclipse.debug.core.DebugException;
+import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;
+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.IEventOccurrence;
+
+public class EventOccurrenceVariableAdapter extends MokaVariableAdapter<IEventOccurrence>{
+
+	private final String NAME = "event";
+	
+	public EventOccurrenceVariableAdapter(MokaDebugTarget debugTarget, IEventOccurrence eventOccurrence) {
+		super(debugTarget, eventOccurrence);
+	}
+
+	@Override
+	public String getName() throws DebugException {
+		// Return the variable name
+		return NAME;
+	}
+	
+}
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/EventPoolVariableAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/EventPoolVariableAdapter.java
index b3f86d7..9efb23b 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/EventPoolVariableAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/EventPoolVariableAdapter.java
@@ -9,6 +9,7 @@
  * Contributors:
  *  CEA LIST Initial API and implementation
  *****************************************************************************/
+
 package org.eclipse.papyrus.moka.debug.model.data.mapping.variables;
 
 import java.util.Iterator;
@@ -21,22 +22,23 @@
 import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.IEventOccurrence;
 import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.Communications.IObjectActivation;
 
-public class EventPoolVariableAdapter extends MokaVariableAdapter {
-
-	protected IObjectActivation objectActivation;
+public class EventPoolVariableAdapter extends MokaVariableAdapter<IObjectActivation> {
 
 	protected final String NAME = "events";
 
 	public EventPoolVariableAdapter(MokaDebugTarget debugTarget, IObjectActivation objectActivation) {
-		super(debugTarget);
-		this.objectActivation = objectActivation;
+		super(debugTarget, objectActivation);
 	}
 
 	@Override
 	public IValue getValue() throws DebugException {
+		// The variable corresponding to the event pool may have multiple values.
+		// This implies it is not sufficient to request a value adapter to the factory.
+		// Instead a list of value adapter is provided, each adapter corresponds to a
+		// event occurrence available in the pool.
 		if (this.value == null) {
 			this.value = new MokaValueList(this.debugTarget);
-			Iterator<IEventOccurrence> eventsIterator = this.objectActivation.getEvents().iterator();
+			Iterator<IEventOccurrence> eventsIterator = this.adaptedVariable.getEvents().iterator();
 			while (eventsIterator.hasNext()) {
 				((MokaValueList) this.value).add(MokaValueAdapterFactory.getInstance().instantiate(eventsIterator.next(), this.debugTarget));
 			}
@@ -46,48 +48,8 @@
 
 	@Override
 	public String getName() throws DebugException {
+		// Return the variable name
 		return this.NAME;
 	}
 
-	@Override
-	public String getReferenceTypeName() throws DebugException {
-		return this.value.getReferenceTypeName();
-	}
-
-	@Override
-	public boolean hasValueChanged() throws DebugException {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	@Override
-	public void setValue(String expression) throws DebugException {
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void setValue(IValue value) throws DebugException {
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public boolean supportsValueModification() {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	@Override
-	public boolean verifyValue(String expression) throws DebugException {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	@Override
-	public boolean verifyValue(IValue value) throws DebugException {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
 }
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/ExecutionContextVariableAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/ExecutionContextVariableAdapter.java
index 4642562..a9b39fd 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/ExecutionContextVariableAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/ExecutionContextVariableAdapter.java
@@ -9,78 +9,27 @@
  * Contributors:
  *  CEA LIST Initial API and implementation
  *****************************************************************************/
+
 package org.eclipse.papyrus.moka.debug.model.data.mapping.variables;
 
 import org.eclipse.debug.core.DebugException;
-import org.eclipse.debug.core.model.IValue;
 import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;
-import org.eclipse.papyrus.moka.debug.model.data.mapping.values.MokaValueAdapterFactory;
 import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IObject_;
 
-public class ExecutionContextVariableAdapter extends MokaVariableAdapter {
+public class ExecutionContextVariableAdapter extends MokaVariableAdapter<IObject_> {
 
 	protected IObject_ context;
 
-	protected IValue value;
-
 	protected final String NAME = "context";
 
 	public ExecutionContextVariableAdapter(MokaDebugTarget debugTarget, IObject_ context) {
-		super(debugTarget);
-		this.context = context;
-	}
-
-	@Override
-	public IValue getValue() throws DebugException {
-		if (this.value == null) {
-			this.value = MokaValueAdapterFactory.getInstance().instantiate(context, this.debugTarget);
-		}
-		return this.value;
+		super(debugTarget, context);
 	}
 
 	@Override
 	public String getName() throws DebugException {
+		// Return the variable name
 		return this.NAME;
 	}
-
-	@Override
-	public String getReferenceTypeName() throws DebugException {
-		return this.value.getReferenceTypeName();
-	}
-
-	@Override
-	public boolean hasValueChanged() throws DebugException {
-		return false;
-	}
-
-	@Override
-	public void setValue(String expression) throws DebugException {
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void setValue(IValue value) throws DebugException {
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public boolean supportsValueModification() {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	@Override
-	public boolean verifyValue(String expression) throws DebugException {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	@Override
-	public boolean verifyValue(IValue value) throws DebugException {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
+	
 }
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/FeatureValueVariableAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/FeatureValueVariableAdapter.java
index e0b0630..23bd7c4 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/FeatureValueVariableAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/FeatureValueVariableAdapter.java
@@ -9,15 +9,17 @@
  * Contributors:
  *  CEA LIST Initial API and implementation
  *****************************************************************************/
+
 package org.eclipse.papyrus.moka.debug.model.data.mapping.variables;
 
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.debug.core.DebugException;
 import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;
+import org.eclipse.papyrus.moka.debug.model.data.mapping.values.DefaultValueAdapter;
 import org.eclipse.papyrus.moka.debug.model.data.mapping.values.MokaValueAdapterFactory;
+import org.eclipse.papyrus.moka.debug.model.data.mapping.values.MokaValueList;
 import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IExtensionalValue;
 import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IFeatureValue;
 import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.ILink;
@@ -31,56 +33,35 @@
 import org.eclipse.uml2.uml.StructuralFeature;
 import org.eclipse.uml2.uml.VisibilityKind;
 
-public class FeatureValueVariableAdapter extends MokaVariableAdapter {
+public class FeatureValueVariableAdapter extends MokaVariableAdapter<IFeatureValue> {
 
-	// Feature value that is adapted in the debug model context
-	protected IFeatureValue featureValue;
-
+	// The owner of the adapted variable
 	protected IStructuredValue featureValueOwner;
 
-	public FeatureValueVariableAdapter(MokaDebugTarget debugTarget, IStructuredValue owner, IFeatureValue featureValue) {
-		super(debugTarget);
-		this.featureValue = featureValue;
+	public FeatureValueVariableAdapter(MokaDebugTarget debugTarget, IStructuredValue owner,
+			IFeatureValue featureValue) {
+		super(debugTarget, featureValue);
 		this.featureValueOwner = owner;
-		this.value = null;
 	}
 
 	@Override
 	public org.eclipse.debug.core.model.IValue getValue() throws DebugException {
+		// Build the value adapter for the adapted feature value. This adapter can be single
+		// value adapter or a list of value adapter depending if the feature value has a single
+		// value or multiple values. If no value is found for the feature then the default value
+		// adapter is returned.
 		if (this.value == null) {
-			int upperBound = this.featureValue.getFeature().getUpper();
-			if (upperBound == 1) {
-				Association association = null;
-				if (this.featureValueOwner instanceof IExtensionalValue) {
-					StructuralFeature feature = this.featureValue.getFeature();
-					if (feature instanceof Property) {
-						association = ((Property) feature).getAssociation();
-					}
+			List<IValue> resultValues = this.getValues();
+			if(resultValues.size() == 1) {
+				this.value = MokaValueAdapterFactory.getInstance().instantiate(resultValues.iterator().next(), this.debugTarget);
+			} else if(resultValues.size() > 1) {
+				MokaValueList valueList = new MokaValueList(this.debugTarget);
+				for(IValue currentValue : resultValues) {
+					valueList.add(MokaValueAdapterFactory.getInstance().instantiate(currentValue, this.debugTarget));
 				}
-				IValue fumlValue = null;
-				if (association != null) {
-					List<ILink> links = this.getMatchingLinks(association,
-							this.featureValue.getFeature(),
-							this.featureValueOwner,
-							((IExtensionalValue) this.featureValueOwner).getLocus());
-					List<IValue> resultValues = new ArrayList<IValue>();
-					for (int i = 0; i < links.size(); i++) {
-						ILink link = links.get(i);
-						resultValues.add(link.getFeatureValue(this.featureValue.getFeature()).getValues().iterator().next());
-					}
-					Iterator<IValue> valuesIterator = resultValues.iterator();
-					if (valuesIterator.hasNext()) {
-						fumlValue = valuesIterator.next();
-					}
-				} else {
-					Iterator<IValue> valuesIterator = this.featureValue.getValues().iterator();
-					if (valuesIterator.hasNext()) {
-						fumlValue = valuesIterator.next();
-					}
-				}
-				this.value = MokaValueAdapterFactory.getInstance().instantiate(fumlValue, this.debugTarget);
+				this.value = valueList;
 			} else {
-
+				this.value = new DefaultValueAdapter(this.debugTarget, null);
 			}
 		}
 		return this.value;
@@ -88,81 +69,70 @@
 
 	@Override
 	public String getName() throws DebugException {
-		Feature feature = this.featureValue.getFeature();
+		// The name of the variable is the name of the feature. If no
+		// feature can be accessed then '<unamed feature>' is returned.
+		Feature feature = this.adaptedVariable.getFeature();
 		if (feature != null) {
 			return feature.getName();
 		}
-		return "";
+		return "<unamed feature>";
 	}
 
-	@Override
-	public String getReferenceTypeName() throws DebugException {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-	@Override
-	public boolean hasValueChanged() throws DebugException {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	@Override
-	public void setValue(String expression) throws DebugException {
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void setValue(org.eclipse.debug.core.model.IValue value) throws DebugException {
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public boolean supportsValueModification() {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	@Override
-	public boolean verifyValue(String expression) throws DebugException {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	@Override
-	public boolean verifyValue(org.eclipse.debug.core.model.IValue value) throws DebugException {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	public boolean isFeaturePublic(){
-		if(this.featureValue != null){
-			return this.featureValue.getFeature().getVisibility() == VisibilityKind.PUBLIC_LITERAL;
+	public boolean isFeaturePublic() {
+		// Determine if the value adapter is for public feature
+		if (this.adaptedVariable != null) {
+			return this.adaptedVariable.getFeature().getVisibility() == VisibilityKind.PUBLIC_LITERAL;
 		}
 		return false;
 	}
-	
-	public boolean isFeatureProtected(){
-		if(this.featureValue != null){
-			return this.featureValue.getFeature().getVisibility() == VisibilityKind.PROTECTED_LITERAL;
+
+	public boolean isFeatureProtected() {
+		// Determine if the value adapter is for protected feature
+		if (this.adaptedVariable != null) {
+			return this.adaptedVariable.getFeature().getVisibility() == VisibilityKind.PROTECTED_LITERAL;
 		}
 		return false;
 	}
-	
-	public boolean isFeaturePrivate(){
-		if(this.featureValue != null){
-			return this.featureValue.getFeature().getVisibility() == VisibilityKind.PRIVATE_LITERAL;
+
+	public boolean isFeaturePrivate() {
+		// Determine if the value adapter is for private feature
+		if (this.adaptedVariable != null) {
+			return this.adaptedVariable.getFeature().getVisibility() == VisibilityKind.PRIVATE_LITERAL;
 		}
 		return false;
 	}
-	
-	protected List<ILink> getMatchingLinks(Association association, StructuralFeature end, IValue oppositeValue, ILocus locus) {
+
+	protected List<IValue> getValues() {
+		// Return the values associated to the feature. These values shall
+		// be adapted in order to be accessed and displayed in the variables
+		// view associated to a debug perspective.
+		List<IValue> resultValues = null;
+		Association association = null;
+		StructuralFeature feature = this.adaptedVariable.getFeature();
+		if (this.featureValueOwner instanceof IExtensionalValue
+				&& feature instanceof Property) {
+			association = ((Property) feature).getAssociation();
+		}
+		if (association != null) {
+			List<ILink> links = this.getMatchingLinks(association, this.adaptedVariable.getFeature(),
+					this.featureValueOwner, ((IExtensionalValue) this.featureValueOwner).getLocus());
+			resultValues = new ArrayList<IValue>();
+			for (int i = 0; i < links.size(); i++) {
+				resultValues.addAll(links.get(i).getFeatureValue(this.adaptedVariable.getFeature()).getValues());
+			}
+		} else {
+			resultValues = this.adaptedVariable.getValues();
+		}
+		return resultValues;
+	}
+
+	protected List<ILink> getMatchingLinks(Association association, StructuralFeature end, IValue oppositeValue,
+			ILocus locus) {
 		return this.getMatchingLinksForEndValue(association, end, oppositeValue, null, locus);
 	}
 
-	private List<ILink> getMatchingLinksForEndValue(Association association, StructuralFeature end, IValue oppositeValue, IValue endValue, ILocus locus) {
+	private List<ILink> getMatchingLinksForEndValue(Association association, StructuralFeature end,
+			IValue oppositeValue, IValue endValue, ILocus locus) {
 		Property oppositeEnd = this.getOppositeEnd(association, end);
 		List<IExtensionalValue> extent = locus.getExtent(association);
 		List<ILink> links = new ArrayList<ILink>();
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/ItemVariableAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/ItemVariableAdapter.java
index dad58d8..b0d693a 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/ItemVariableAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/ItemVariableAdapter.java
@@ -9,71 +9,33 @@
  * Contributors:
  *  CEA LIST Initial API and implementation
  *****************************************************************************/
+
 package org.eclipse.papyrus.moka.debug.model.data.mapping.variables;
 
 import org.eclipse.debug.core.DebugException;
 import org.eclipse.debug.core.model.IValue;
 import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;
 
-public class ItemVariableAdapter extends MokaVariableAdapter {
+public class ItemVariableAdapter extends MokaVariableAdapter<IValue> {
 
+	// Index corresponding to the item
 	protected int index;
 
 	public ItemVariableAdapter(MokaDebugTarget debugTarget, int index, IValue value) {
-		super(debugTarget);
+		super(debugTarget, value);
 		this.index = index;
-		this.value = value;
 	}
 
 	@Override
 	public IValue getValue() throws DebugException {
-		return this.value;
+		// The adapted variable is the value associated to the item variable
+		return this.adaptedVariable;
 	}
 
 	@Override
 	public String getName() throws DebugException {
+		// Variable name is an of the form [X] where X is an integer
 		return "[" + index + "]";
 	}
 
-	@Override
-	public String getReferenceTypeName() throws DebugException {
-		return this.value.getReferenceTypeName();
-	}
-
-	@Override
-	public boolean hasValueChanged() throws DebugException {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	@Override
-	public void setValue(String expression) throws DebugException {
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void setValue(IValue value) throws DebugException {
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public boolean supportsValueModification() {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	@Override
-	public boolean verifyValue(String expression) throws DebugException {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	@Override
-	public boolean verifyValue(IValue value) throws DebugException {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
 }
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/MokaVariableAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/MokaVariableAdapter.java
index fabbaec..6dc3a78 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/MokaVariableAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/MokaVariableAdapter.java
@@ -9,19 +9,87 @@
  * Contributors:
  *  CEA LIST Initial API and implementation
  *****************************************************************************/
+
 package org.eclipse.papyrus.moka.debug.model.data.mapping.variables;
 
+import org.eclipse.debug.core.DebugException;
 import org.eclipse.debug.core.model.IValue;
 import org.eclipse.debug.core.model.IVariable;
 import org.eclipse.papyrus.moka.debug.engine.MokaDebugElement;
 import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;
+import org.eclipse.papyrus.moka.debug.model.data.mapping.values.MokaValueAdapterFactory;
 
-public abstract class MokaVariableAdapter extends MokaDebugElement implements IVariable {
+public abstract class MokaVariableAdapter<V> extends MokaDebugElement implements IVariable {
 
 	// The value that is currently associated to this variable
 	protected IValue value;
 
-	public MokaVariableAdapter(MokaDebugTarget debugTarget) {
+	// The variable that is actually represented
+	protected V adaptedVariable;
+	
+	public MokaVariableAdapter(MokaDebugTarget debugTarget, V adaptedVariable) {
 		super(debugTarget);
+		this.adaptedVariable = adaptedVariable;
 	}
+	
+	@Override
+	public IValue getValue() throws DebugException {
+		// Getting the value corresponding to a variable may require more sophisticated
+		// computations however the common approach is to directly requests from
+		// the value adapter factory if an adapter already exist for the value
+		// associated to the variable.
+		if(this.value == null) {
+			this.value = MokaValueAdapterFactory.getInstance().instantiate(this.adaptedVariable, this.debugTarget);
+		}
+		return this.value;
+	}
+	
+	@Override
+	public String getReferenceTypeName() throws DebugException {
+		// By default the reference type of the variable is
+		// considered to unknown.
+		return "<no reference type>";
+	}
+
+	@Override
+	public boolean hasValueChanged() throws DebugException {
+		// By default no change on the variable is allowed.
+		return false;
+	}
+
+	@Override
+	public void setValue(String expression) throws DebugException {
+		// By default it is not allowed to change a variable
+		// value through the evaluation of an expression
+	}
+
+	@Override
+	public void setValue(IValue value) throws DebugException {
+		// By default it is not allowed to substitute the
+		// variable value with another value
+	}
+
+	@Override
+	public boolean supportsValueModification() {
+		// By default no modification of the variable value
+		// is allowed
+		return false;
+	}
+
+	@Override
+	public boolean verifyValue(String expression) throws DebugException {
+		// By default its not allowed to change the variable value.
+		// Hence it is not required to be able to verify the specified
+		// change.
+		return false;
+	}
+
+	@Override
+	public boolean verifyValue(IValue value) throws DebugException {
+		// By default its not allowed to change the variable value.
+		// Hence it is not required to be able to verify the specified
+		// change.
+		return false;
+	}
+	
 }
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/ObjectTokenVariableValueAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/ObjectTokenVariableValueAdapter.java
index adeebb6..7c260f0 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/ObjectTokenVariableValueAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/ObjectTokenVariableValueAdapter.java
@@ -9,78 +9,25 @@
  * Contributors:
  *  CEA LIST Initial API and implementation
  *****************************************************************************/
+
 package org.eclipse.papyrus.moka.debug.model.data.mapping.variables;
 
 import org.eclipse.debug.core.DebugException;
-import org.eclipse.debug.core.model.IValue;
 import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;
-import org.eclipse.papyrus.moka.debug.model.data.mapping.values.MokaValueAdapterFactory;
+import org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IValue;
 
-public class ObjectTokenVariableValueAdapter extends MokaVariableAdapter {
+public class ObjectTokenVariableValueAdapter extends MokaVariableAdapter<IValue> {
 
 	private final String NAME = "value";
 	
-	private final String REFERENCE_TYPE_NAME = "";
-	
-	protected org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IValue heldValue;
-	
-	public ObjectTokenVariableValueAdapter(MokaDebugTarget debugTarget, org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IValue heldValue) {
-		super(debugTarget);
-		this.heldValue = heldValue;
-	}
-
-	@Override
-	public IValue getValue() throws DebugException {
-		if(this.value == null){
-			this.value = MokaValueAdapterFactory.getInstance().instantiate(this.heldValue, this.debugTarget);
-		}
-		return this.value;
+	public ObjectTokenVariableValueAdapter(MokaDebugTarget debugTarget, IValue heldValue) {
+		super(debugTarget, heldValue);
 	}
 
 	@Override
 	public String getName() throws DebugException {
+		// Return the variable name
 		return NAME;
 	}
 
-	@Override
-	public String getReferenceTypeName() throws DebugException {
-		return REFERENCE_TYPE_NAME;
-	}
-
-	@Override
-	public boolean hasValueChanged() throws DebugException {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	@Override
-	public void setValue(String expression) throws DebugException {
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void setValue(IValue value) throws DebugException {
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public boolean supportsValueModification() {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	@Override
-	public boolean verifyValue(String expression) throws DebugException {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	@Override
-	public boolean verifyValue(IValue value) throws DebugException {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
 }
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/ParameterValueVariableAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/ParameterValueVariableAdapter.java
new file mode 100644
index 0000000..40841dc
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/ParameterValueVariableAdapter.java
@@ -0,0 +1,76 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+
+package org.eclipse.papyrus.moka.debug.model.data.mapping.variables;
+
+import org.eclipse.debug.core.DebugException;
+import org.eclipse.debug.core.model.IValue;
+import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;
+import org.eclipse.papyrus.moka.debug.model.data.mapping.values.MokaValueAdapterFactory;
+import org.eclipse.papyrus.moka.debug.model.data.mapping.values.MokaValueList;
+import org.eclipse.papyrus.moka.debug.model.data.mapping.values.DefaultValueAdapter;
+import org.eclipse.papyrus.moka.fuml.Semantics.CommonBehaviors.BasicBehaviors.IParameterValue;
+
+public class ParameterValueVariableAdapter extends MokaVariableAdapter<IParameterValue> {
+	
+	// User defined name
+	protected String parameterName;
+
+	public ParameterValueVariableAdapter(MokaDebugTarget debugTarget, IParameterValue parameterValue) {
+		super(debugTarget, parameterValue);
+	}
+	
+	public ParameterValueVariableAdapter(MokaDebugTarget debugTarget, IParameterValue parameterValue, String parameterName) {
+		this(debugTarget, parameterValue);
+		this.parameterName = parameterName;
+	}
+
+	@Override
+	public IValue getValue() throws DebugException {
+		// Return the value adapter required to display the value associated
+		// to the parameter
+		if (this.value == null) {
+			if (this.adaptedVariable.getValues().size() == 1) {
+				this.value = MokaValueAdapterFactory.getInstance()
+						.instantiate(this.adaptedVariable.getValues().iterator().next(), debugTarget);
+			} else if (this.adaptedVariable.getValues().size() > 1) {
+				MokaValueList valueList = new MokaValueList(debugTarget);
+				for (org.eclipse.papyrus.moka.fuml.Semantics.Classes.Kernel.IValue currentValue : this.adaptedVariable
+						.getValues()) {
+					valueList.add( MokaValueAdapterFactory.getInstance()
+						.instantiate(currentValue ,debugTarget));
+				}
+				this.value = valueList;
+			} else {
+				this.value = new DefaultValueAdapter(debugTarget, null);
+			}
+		}
+		return this.value;
+	}
+
+	@Override
+	public String getName() throws DebugException {
+		// If the user defined parameter name is set then return it.
+		// If the user defined parameter name is not set the return
+		// the name of the parameter attached to the parameter value.
+		// If no name could be returned then the string '<empty>' is returned
+		if(this.parameterName != null && !this.parameterName.isEmpty()) {
+			return this.parameterName;
+		}else if(this.adaptedVariable.getParameter() != null
+				&& adaptedVariable.getParameter().getName() != null
+				&& !adaptedVariable.getParameter().getName().isEmpty()) {
+			return this.adaptedVariable.getParameter().getName();
+		}
+		return "<empty>";
+	}
+
+}
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/SuspensionPointVariableAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/SuspensionPointVariableAdapter.java
index b9ebf54..b7448e5 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/SuspensionPointVariableAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/SuspensionPointVariableAdapter.java
@@ -9,79 +9,25 @@
  * Contributors:
  *  CEA LIST Initial API and implementation
  *****************************************************************************/
+
 package org.eclipse.papyrus.moka.debug.model.data.mapping.variables;
 
 import org.eclipse.debug.core.DebugException;
-import org.eclipse.debug.core.model.IValue;
 import org.eclipse.papyrus.moka.debug.engine.MokaDebugTarget;
-import org.eclipse.papyrus.moka.debug.model.data.mapping.values.MokaValueAdapterFactory;
 import org.eclipse.papyrus.moka.fuml.Semantics.Loci.LociL1.ISemanticVisitor;
 
-public class SuspensionPointVariableAdapter extends MokaVariableAdapter {
-
-	protected ISemanticVisitor suspensionPoint;
+public class SuspensionPointVariableAdapter extends MokaVariableAdapter<ISemanticVisitor> {
 
 	private final String NAME = "breakpoint";
 
-	private final String REFERENCE_TYPE_NAME = "";
-
 	public SuspensionPointVariableAdapter(MokaDebugTarget debugTarget, ISemanticVisitor visitor) {
-		super(debugTarget);
-		this.suspensionPoint = visitor;
-	}
-
-	@Override
-	public IValue getValue() throws DebugException {
-		if (this.value == null) {
-			this.value = MokaValueAdapterFactory.getInstance().instantiate(this.suspensionPoint, this.debugTarget);
-		}
-		return this.value;
+		super(debugTarget, visitor);
 	}
 
 	@Override
 	public String getName() throws DebugException {
+		// Return the variable name
 		return this.NAME;
 	}
 
-	@Override
-	public String getReferenceTypeName() throws DebugException {
-		return this.REFERENCE_TYPE_NAME;
-	}
-
-	@Override
-	public boolean hasValueChanged() throws DebugException {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	@Override
-	public void setValue(String expression) throws DebugException {
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void setValue(IValue value) throws DebugException {
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public boolean supportsValueModification() {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	@Override
-	public boolean verifyValue(String expression) throws DebugException {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	@Override
-	public boolean verifyValue(IValue value) throws DebugException {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
 }
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/TokensVariableAdapter.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/TokensVariableAdapter.java
index 5dca87d..63a0f7f 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/TokensVariableAdapter.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/mapping/variables/TokensVariableAdapter.java
@@ -9,6 +9,7 @@
  * Contributors:
  *  CEA LIST Initial API and implementation
  *****************************************************************************/
+
 package org.eclipse.papyrus.moka.debug.model.data.mapping.variables;
 
 import java.util.Iterator;
@@ -21,24 +22,21 @@
 import org.eclipse.papyrus.moka.debug.model.data.mapping.values.MokaValueList;
 import org.eclipse.papyrus.moka.fuml.Semantics.Activities.IntermediateActivities.IToken;
 
-public class TokensVariableAdapter extends MokaVariableAdapter {
-
-	protected List<IToken> heldTokens;
+public class TokensVariableAdapter extends MokaVariableAdapter<List<IToken>> {
 
 	private final String NAME = "tokens";
 
-	private final String REFERENCE_TYPE_NAME = "List<IToken>";
-
 	public TokensVariableAdapter(MokaDebugTarget debugTarget, List<IToken> tokens) {
-		super(debugTarget);
-		this.heldTokens = tokens;
+		super(debugTarget, tokens);
 	}
 
 	@Override
 	public IValue getValue() throws DebugException {
+		// The value adapter corresponding to a list of token consist in a list
+		// of adapter. Each adapter in the list is an adapter for a token.
 		if (this.value == null) {
 			MokaValueList tokensList = new MokaValueList(debugTarget);
-			Iterator<IToken> tokensIterator = this.heldTokens.iterator();
+			Iterator<IToken> tokensIterator = this.adaptedVariable.iterator();
 			while (tokensIterator.hasNext()) {
 				tokensList.add(MokaValueAdapterFactory.getInstance().instantiate(tokensIterator.next(), this.debugTarget));
 			}
@@ -49,48 +47,8 @@
 
 	@Override
 	public String getName() throws DebugException {
+		// Return the variable name
 		return this.NAME;
 	}
 
-	@Override
-	public String getReferenceTypeName() throws DebugException {
-		return this.REFERENCE_TYPE_NAME;
-	}
-
-	@Override
-	public boolean hasValueChanged() throws DebugException {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	@Override
-	public void setValue(String expression) throws DebugException {
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void setValue(IValue value) throws DebugException {
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public boolean supportsValueModification() {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	@Override
-	public boolean verifyValue(String expression) throws DebugException {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	@Override
-	public boolean verifyValue(IValue value) throws DebugException {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
 }
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/MokaDebugLabelProvider.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/MokaDebugLabelProvider.java
index edd17fb..2330c86 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/MokaDebugLabelProvider.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/MokaDebugLabelProvider.java
@@ -20,33 +20,30 @@
 
 	@Override
 	public void addListener(ILabelProviderListener listener) {
-		// TODO Auto-generated method stub
-		
+		// Do nothing
 	}
 
 	@Override
 	public void removeListener(ILabelProviderListener listener) {
-		// TODO Auto-generated method stub
-		
+		// Do nothing
 	}
 	
 	@Override
 	public boolean isLabelProperty(Object element, String property) {
-		// TODO Auto-generated method stub
+		// Do nothing
 		return false;
 	}
 	
 	@Override
 	public void dispose() {
-		// TODO Auto-generated method stub
-
+		// Do nothing
 	}
 	
 	@Override
 	public String getText(Object element) {
 		if(element != null){
 			try {
-				return ((MokaVariableAdapter)element).getName();
+				return ((MokaVariableAdapter<?>)element).getName();
 			} catch (DebugException e) {
 				e.printStackTrace();
 			}
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/MokaDebugLabelProviderFactory.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/MokaDebugLabelProviderFactory.java
index fc2386a..368ae2d 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/MokaDebugLabelProviderFactory.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/MokaDebugLabelProviderFactory.java
@@ -11,19 +11,35 @@
  *****************************************************************************/
 package org.eclipse.papyrus.moka.debug.model.data.presentations;
 
+import org.eclipse.debug.core.DebugException;
 import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.papyrus.moka.debug.model.data.mapping.values.CS_EventOccurrenceValueAdapter;
+import org.eclipse.papyrus.moka.debug.model.data.mapping.values.CallEventOccurrenceValueAdapter;
+import org.eclipse.papyrus.moka.debug.model.data.mapping.values.CompletionEventOccurrenceValueAdapter;
+import org.eclipse.papyrus.moka.debug.model.data.mapping.values.SignalEventOccurrenceValueAdapter;
+import org.eclipse.papyrus.moka.debug.model.data.mapping.values.TimeEventOccurrenceValueAdapter;
+import org.eclipse.papyrus.moka.debug.model.data.mapping.variables.CS_InteractionPointVariableAdapter;
+import org.eclipse.papyrus.moka.debug.model.data.mapping.variables.EventOccurrenceVariableAdapter;
 import org.eclipse.papyrus.moka.debug.model.data.mapping.variables.EventPoolVariableAdapter;
 import org.eclipse.papyrus.moka.debug.model.data.mapping.variables.ExecutionContextVariableAdapter;
 import org.eclipse.papyrus.moka.debug.model.data.mapping.variables.FeatureValueVariableAdapter;
 import org.eclipse.papyrus.moka.debug.model.data.mapping.variables.ItemVariableAdapter;
 import org.eclipse.papyrus.moka.debug.model.data.mapping.variables.MokaVariableAdapter;
+import org.eclipse.papyrus.moka.debug.model.data.mapping.variables.ParameterValueVariableAdapter;
 import org.eclipse.papyrus.moka.debug.model.data.mapping.variables.SuspensionPointVariableAdapter;
 import org.eclipse.papyrus.moka.debug.model.data.mapping.variables.TokensVariableAdapter;
+import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.CS_EventOccurrenceVariableLabelProvider;
+import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.CS_InteractionPointVariableLabelProvider;
+import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.CallEventOccurrenceVariableLabelProvider;
+import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.CompletionEventOccurrenceVariableLabelProvider;
 import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.EventPoolVariableLabelProvider;
 import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.ExecutionContextVariableLabelProvider;
 import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.FeatureValueVariableLabelProvider;
 import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.ItemVariableLabelProvider;
+import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.ParameterValueVariableLabelProvider;
+import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.SignalEventOccurrenceVariableLabelProvider;
 import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.SuspensionPointVariableLabelProvider;
+import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.TimeEventOccurrenceVariableLabelProvider;
 import org.eclipse.papyrus.moka.debug.model.data.presentations.providers.TokensVariableLabelProvider;
 
 public class MokaDebugLabelProviderFactory {
@@ -41,9 +57,11 @@
 		return INSTANCE;
 	}
 
-	public ILabelProvider instantiate(MokaVariableAdapter variable) {
+	public ILabelProvider instantiate(MokaVariableAdapter<?> variable) {
 		ILabelProvider provider = null; 
-		if(variable instanceof ExecutionContextVariableAdapter){
+		if(variable instanceof CS_InteractionPointVariableAdapter) {
+			provider = new CS_InteractionPointVariableLabelProvider();
+		}else if(variable instanceof ExecutionContextVariableAdapter){
 			provider = new ExecutionContextVariableLabelProvider();
 		}else if(variable instanceof SuspensionPointVariableAdapter){
 			provider = new SuspensionPointVariableLabelProvider();
@@ -55,6 +73,24 @@
 			provider = new ItemVariableLabelProvider();
 		}else if(variable instanceof TokensVariableAdapter){
 			provider = new TokensVariableLabelProvider();
+		}else if(variable instanceof EventOccurrenceVariableAdapter) {
+			try {
+				if(((EventOccurrenceVariableAdapter)variable).getValue() instanceof CS_EventOccurrenceValueAdapter) {
+					provider = new CS_EventOccurrenceVariableLabelProvider();
+				} else if(((EventOccurrenceVariableAdapter)variable).getValue() instanceof TimeEventOccurrenceValueAdapter) {
+					provider = new TimeEventOccurrenceVariableLabelProvider();
+				}else if(((EventOccurrenceVariableAdapter)variable).getValue() instanceof SignalEventOccurrenceValueAdapter) {
+					provider = new SignalEventOccurrenceVariableLabelProvider();
+				} else if(((EventOccurrenceVariableAdapter)variable).getValue() instanceof CallEventOccurrenceValueAdapter) {
+					provider = new CallEventOccurrenceVariableLabelProvider();
+				} else if(((EventOccurrenceVariableAdapter)variable).getValue() instanceof CompletionEventOccurrenceValueAdapter) {
+					provider = new CompletionEventOccurrenceVariableLabelProvider();
+				}
+			} catch (DebugException e) {
+				e.printStackTrace();
+			}
+		} else if (variable instanceof ParameterValueVariableAdapter) {
+			provider = new ParameterValueVariableLabelProvider();
 		}
 		return provider;
 	}
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/MokaDebugModelPresentation.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/MokaDebugModelPresentation.java
index 826c05b..73aa10b 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/MokaDebugModelPresentation.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/MokaDebugModelPresentation.java
@@ -9,6 +9,7 @@
  * Contributors:
  *  CEA LIST Initial API and implementation
  *****************************************************************************/
+
 package org.eclipse.papyrus.moka.debug.model.data.presentations;
 
 import org.eclipse.debug.core.model.IValue;
@@ -24,19 +25,41 @@
 
 	public static final String ID = "org.eclipse.papyrus.moka.debug.mokaModelPresentation"; 
 	
-	public MokaDebugModelPresentation() {
+	@Override
+	public Image getImage(Object element) {
+		// Return the icon corresponding to the variable adapter
+		ILabelProvider provider = null;
+		if(element instanceof MokaVariableAdapter){
+			provider = MokaDebugLabelProviderFactory.getInstance().instantiate((MokaVariableAdapter<?>)element);
+		}
+		if(provider != null){
+			return provider.getImage(element);
+		}
+		return null;
 	}
+
+	@Override
+	public String getText(Object element) {
+		// Return the text corresponding to the variable adapter
+		ILabelProvider provider = null;
+		if(element instanceof MokaVariableAdapter){
+			provider = MokaDebugLabelProviderFactory.getInstance().instantiate((MokaVariableAdapter<?>)element);
+		}
+		if(provider != null){
+			return provider.getText(element);
+		}
+		return null;
+	}
+
 	
 	@Override
 	public void addListener(ILabelProviderListener listener) {
-		// TODO Auto-generated method stub
-		
+		// By default no listener can be added
 	}
 
 	@Override
 	public void dispose() {
-		// TODO Auto-generated method stub
-		
+		// By default no resource are disposed
 	}
 
 	@Override
@@ -48,7 +71,6 @@
 	@Override
 	public void removeListener(ILabelProviderListener listener) {
 		// TODO Auto-generated method stub
-		
 	}
 
 	@Override
@@ -66,37 +88,11 @@
 	@Override
 	public void setAttribute(String attribute, Object value) {
 		// TODO Auto-generated method stub
-		
-	}
-
-	@Override
-	public Image getImage(Object element) {
-		ILabelProvider provider = null;
-		if(element instanceof MokaVariableAdapter){
-			provider = MokaDebugLabelProviderFactory.getInstance().instantiate((MokaVariableAdapter)element);
-		}
-		if(provider != null){
-			return provider.getImage(element);
-		}
-		return null;
-	}
-
-	@Override
-	public String getText(Object element) {
-		ILabelProvider provider = null;
-		if(element instanceof MokaVariableAdapter){
-			provider = MokaDebugLabelProviderFactory.getInstance().instantiate((MokaVariableAdapter)element);
-		}
-		if(provider != null){
-			return provider.getText(element);
-		}
-		return null;
 	}
 
 	@Override
 	public void computeDetail(IValue value, IValueDetailListener listener) {
 		// TODO Auto-generated method stub
-		
 	}
 
 }
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/CS_EventOccurrenceVariableLabelProvider.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/CS_EventOccurrenceVariableLabelProvider.java
new file mode 100644
index 0000000..1db80e0
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/CS_EventOccurrenceVariableLabelProvider.java
@@ -0,0 +1,66 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+
+package org.eclipse.papyrus.moka.debug.model.data.presentations.providers;
+
+import org.eclipse.debug.core.DebugException;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.papyrus.moka.composites.interfaces.Semantics.CompositeStructures.InvocationActions.ICS_EventOccurrence;
+import org.eclipse.papyrus.moka.debug.model.data.mapping.values.CS_EventOccurrenceValueAdapter;
+import org.eclipse.papyrus.moka.debug.model.data.mapping.variables.EventOccurrenceVariableAdapter;
+import org.eclipse.papyrus.moka.debug.model.data.presentations.MokaDebugLabelProvider;
+import org.eclipse.papyrus.moka.debug.model.data.presentations.MokaDebugLabelProviderFactory;
+import org.eclipse.swt.graphics.Image;
+
+public class CS_EventOccurrenceVariableLabelProvider extends MokaDebugLabelProvider {
+
+	protected ILabelProvider getDelegatedLabelProvider(Object element) {
+		ILabelProvider labelProvider = null;
+		if (element != null) {
+			try {
+				CS_EventOccurrenceValueAdapter valueAdapter = (CS_EventOccurrenceValueAdapter) ((EventOccurrenceVariableAdapter) element)
+						.getValue();
+				ICS_EventOccurrence eventOccurrence = (ICS_EventOccurrence) valueAdapter.getAdapted();
+				labelProvider = MokaDebugLabelProviderFactory.getInstance().instantiate(
+						new EventOccurrenceVariableAdapter(null, eventOccurrence.getWrappedEventOccurrence()));
+			} catch (DebugException e) {
+				// Silently catch the exception (the default icon will be used)
+			}
+		}
+		return labelProvider;
+	}
+
+	@Override
+	public String getText(Object element) {
+		String text = "";
+		if (element != null) {
+			ILabelProvider labelProvider = this.getDelegatedLabelProvider(element);
+			if (labelProvider != null) {
+				text = labelProvider.getText(element);
+			}
+		}
+		return text;
+	}
+
+	@Override
+	public Image getImage(Object element) {
+		Image icon = null;
+		if (element != null) {
+			ILabelProvider labelProvider = this.getDelegatedLabelProvider(element);
+			if (labelProvider != null) {
+				icon = labelProvider.getImage(element);
+			}
+		}
+		return icon;
+	}
+
+}
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/CS_InteractionPointVariableLabelProvider.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/CS_InteractionPointVariableLabelProvider.java
new file mode 100644
index 0000000..1a9c7f6
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/CS_InteractionPointVariableLabelProvider.java
@@ -0,0 +1,32 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+
+package org.eclipse.papyrus.moka.debug.model.data.presentations.providers;
+
+import org.eclipse.papyrus.moka.debug.MokaDebugPlugin;
+import org.eclipse.papyrus.moka.debug.model.data.presentations.MokaDebugLabelProvider;
+import org.eclipse.swt.graphics.Image;
+
+public class CS_InteractionPointVariableLabelProvider extends MokaDebugLabelProvider{
+
+	// Icon to represent the interaction point
+	public final static String PORT_ICON = "resources/icons/interaction-point.gif";
+	
+	@Override
+	public Image getImage(Object element) {
+		if(element != null){
+			return MokaDebugPlugin.getDefault().getImageRegistry().get(PORT_ICON);
+		}
+		return null;
+	}
+
+}
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/CallEventOccurrenceVariableLabelProvider.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/CallEventOccurrenceVariableLabelProvider.java
new file mode 100644
index 0000000..52676bd
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/CallEventOccurrenceVariableLabelProvider.java
@@ -0,0 +1,39 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+
+package org.eclipse.papyrus.moka.debug.model.data.presentations.providers;
+
+import org.eclipse.papyrus.moka.debug.MokaDebugPlugin;
+import org.eclipse.papyrus.moka.debug.model.data.presentations.MokaDebugLabelProvider;
+import org.eclipse.swt.graphics.Image;
+
+public class CallEventOccurrenceVariableLabelProvider extends MokaDebugLabelProvider{
+	
+	public final static String CALL_EVENT_ICON = "resources/icons/call.png"; 
+	
+	private final static String CALL_EVENT_TEXT = "Call Event";
+	
+	@Override
+	public String getText(Object element) {
+		return CALL_EVENT_TEXT;
+	}
+	
+	@Override
+	public Image getImage(Object element) {
+		if(element != null){
+			return MokaDebugPlugin.getDefault().getImageRegistry().get(CALL_EVENT_ICON);
+		}
+		return null;
+	}
+
+
+}
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/CompletionEventOccurrenceVariableLabelProvider.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/CompletionEventOccurrenceVariableLabelProvider.java
new file mode 100644
index 0000000..a4cface
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/CompletionEventOccurrenceVariableLabelProvider.java
@@ -0,0 +1,38 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+
+package org.eclipse.papyrus.moka.debug.model.data.presentations.providers;
+
+import org.eclipse.papyrus.moka.debug.MokaDebugPlugin;
+import org.eclipse.papyrus.moka.debug.model.data.presentations.MokaDebugLabelProvider;
+import org.eclipse.swt.graphics.Image;
+
+public class CompletionEventOccurrenceVariableLabelProvider  extends MokaDebugLabelProvider{
+
+public final static String COMPLETION_EVENT_ICON = "resources/icons/completion.png"; 
+	
+	private final static String COMPLETION_EVENT_TEXT = "Completion Event";
+	
+	@Override
+	public String getText(Object element) {
+		return COMPLETION_EVENT_TEXT;
+	}
+	
+	@Override
+	public Image getImage(Object element) {
+		if(element != null){
+			return MokaDebugPlugin.getDefault().getImageRegistry().get(COMPLETION_EVENT_ICON);
+		}
+		return null;
+	}
+	
+}
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/EventPoolVariableLabelProvider.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/EventPoolVariableLabelProvider.java
index aa47e9f..0e69ee7 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/EventPoolVariableLabelProvider.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/EventPoolVariableLabelProvider.java
@@ -9,6 +9,7 @@
  * Contributors:
  *  CEA LIST Initial API and implementation
  *****************************************************************************/
+
 package org.eclipse.papyrus.moka.debug.model.data.presentations.providers;
 
 import org.eclipse.papyrus.moka.debug.MokaDebugPlugin;
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/ExecutionContextVariableLabelProvider.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/ExecutionContextVariableLabelProvider.java
index ddcc114..5b95133 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/ExecutionContextVariableLabelProvider.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/ExecutionContextVariableLabelProvider.java
@@ -9,6 +9,7 @@
  * Contributors:
  *  CEA LIST Initial API and implementation
  *****************************************************************************/
+
 package org.eclipse.papyrus.moka.debug.model.data.presentations.providers;
 
 import org.eclipse.papyrus.moka.debug.MokaDebugPlugin;
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/FeatureValueVariableLabelProvider.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/FeatureValueVariableLabelProvider.java
index 3165a93..124d08b 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/FeatureValueVariableLabelProvider.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/FeatureValueVariableLabelProvider.java
@@ -9,6 +9,7 @@
  * Contributors:
  *  CEA LIST Initial API and implementation
  *****************************************************************************/
+
 package org.eclipse.papyrus.moka.debug.model.data.presentations.providers;
 
 import org.eclipse.papyrus.moka.debug.MokaDebugPlugin;
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/ItemVariableLabelProvider.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/ItemVariableLabelProvider.java
index 488e296..ac53ea5 100644
--- a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/ItemVariableLabelProvider.java
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/ItemVariableLabelProvider.java
@@ -1,5 +1,5 @@
 /*****************************************************************************
- * Copyright (c) 2016 CEA LIST.
+ * Copyright (c) 2017 CEA LIST.
  * 
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
@@ -9,6 +9,7 @@
  * Contributors:
  *  CEA LIST Initial API and implementation
  *****************************************************************************/
+
 package org.eclipse.papyrus.moka.debug.model.data.presentations.providers;
 
 import org.eclipse.papyrus.moka.debug.MokaDebugPlugin;
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/ParameterValueVariableLabelProvider.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/ParameterValueVariableLabelProvider.java
new file mode 100644
index 0000000..dd8c619
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/ParameterValueVariableLabelProvider.java
@@ -0,0 +1,29 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+
+package org.eclipse.papyrus.moka.debug.model.data.presentations.providers;
+
+import org.eclipse.papyrus.moka.debug.MokaDebugPlugin;
+import org.eclipse.papyrus.moka.debug.model.data.presentations.MokaDebugLabelProvider;
+import org.eclipse.swt.graphics.Image;
+
+public class ParameterValueVariableLabelProvider extends MokaDebugLabelProvider{
+
+	@Override
+	public Image getImage(Object element) {
+		if(element != null) {
+			return MokaDebugPlugin.getDefault().getImageRegistry().get(FeatureValueVariableLabelProvider.PUBLIC_ICON);
+		}
+		return null;
+	}
+
+}
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/SignalEventOccurrenceVariableLabelProvider.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/SignalEventOccurrenceVariableLabelProvider.java
new file mode 100644
index 0000000..e7ca7b9
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/SignalEventOccurrenceVariableLabelProvider.java
@@ -0,0 +1,38 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+
+package org.eclipse.papyrus.moka.debug.model.data.presentations.providers;
+
+import org.eclipse.papyrus.moka.debug.MokaDebugPlugin;
+import org.eclipse.papyrus.moka.debug.model.data.presentations.MokaDebugLabelProvider;
+import org.eclipse.swt.graphics.Image;
+
+public class SignalEventOccurrenceVariableLabelProvider extends MokaDebugLabelProvider{
+
+	public final static String SIGNAL_EVENT_ICON = "resources/icons/signal.png"; 
+	
+	private final static String SIGNAL_EVENT_TEXT = "Signal Event";
+	
+	@Override
+	public String getText(Object element) {
+		return SIGNAL_EVENT_TEXT;
+	}
+	
+	@Override
+	public Image getImage(Object element) {
+		if(element != null){
+			return MokaDebugPlugin.getDefault().getImageRegistry().get(SIGNAL_EVENT_ICON);
+		}
+		return null;
+	}
+
+}
diff --git a/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/TimeEventOccurrenceVariableLabelProvider.java b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/TimeEventOccurrenceVariableLabelProvider.java
new file mode 100644
index 0000000..502df4a
--- /dev/null
+++ b/bundles/core/services/org.eclipse.papyrus.moka.debug/src/org/eclipse/papyrus/moka/debug/model/data/presentations/providers/TimeEventOccurrenceVariableLabelProvider.java
@@ -0,0 +1,38 @@
+/*****************************************************************************
+ * Copyright (c) 2017 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * 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:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+
+package org.eclipse.papyrus.moka.debug.model.data.presentations.providers;
+
+import org.eclipse.papyrus.moka.debug.MokaDebugPlugin;
+import org.eclipse.papyrus.moka.debug.model.data.presentations.MokaDebugLabelProvider;
+import org.eclipse.swt.graphics.Image;
+
+public class TimeEventOccurrenceVariableLabelProvider extends MokaDebugLabelProvider{
+
+	public final static String TIME_EVENT_ICON = "resources/icons/time.png"; 
+	
+	private final static String TIME_EVENT_TEXT = "Time Event";
+	
+	@Override
+	public String getText(Object element) {
+		return TIME_EVENT_TEXT;
+	}
+	
+	@Override
+	public Image getImage(Object element) {
+		if(element != null){
+			return MokaDebugPlugin.getDefault().getImageRegistry().get(TIME_EVENT_ICON);
+		}
+		return null;
+	}
+
+}
