diff --git a/externalcontrol/bundles/org.eclipse.papyrus.moka.externalcontrol/META-INF/MANIFEST.MF b/externalcontrol/bundles/org.eclipse.papyrus.moka.externalcontrol/META-INF/MANIFEST.MF
index c0e774b..feaf5c0 100644
--- a/externalcontrol/bundles/org.eclipse.papyrus.moka.externalcontrol/META-INF/MANIFEST.MF
+++ b/externalcontrol/bundles/org.eclipse.papyrus.moka.externalcontrol/META-INF/MANIFEST.MF
@@ -15,12 +15,14 @@
  org.eclipse.papyrus.moka.engine.uml.time.scheduling;bundle-version="[4.1.0,5.0.0)",
  org.eclipse.papyrus.moka.engine.uml.time;bundle-version="4.1.0",
  org.eclipse.papyrus.moka.pscs,
- org.eclipse.papyrus.moka.engine.uml;bundle-version="4.1.0"
+ org.eclipse.papyrus.moka.engine.uml;bundle-version="4.1.0",
+ org.eclipse.papyrus.moka.engine.uml.debug;bundle-version="4.1.0"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ActivationPolicy: lazy
 Bundle-Vendor: Eclipse Modeling Project
 Export-Package: org.eclipse.papyrus.moka.externalcontrol,
  org.eclipse.papyrus.moka.externalcontrol.advice,
+ org.eclipse.papyrus.moka.externalcontrol.control.queue,
  org.eclipse.papyrus.moka.externalcontrol.controller,
  org.eclipse.papyrus.moka.externalcontrol.engine,
  org.eclipse.papyrus.moka.externalcontrol.semantics
diff --git a/externalcontrol/bundles/org.eclipse.papyrus.moka.externalcontrol/src/org/eclipse/papyrus/moka/externalcontrol/controller/AbstractExternallyControlledVisitor.java b/externalcontrol/bundles/org.eclipse.papyrus.moka.externalcontrol/src/org/eclipse/papyrus/moka/externalcontrol/controller/AbstractExternallyControlledVisitor.java
index 8076bf5..a1e2359 100644
--- a/externalcontrol/bundles/org.eclipse.papyrus.moka.externalcontrol/src/org/eclipse/papyrus/moka/externalcontrol/controller/AbstractExternallyControlledVisitor.java
+++ b/externalcontrol/bundles/org.eclipse.papyrus.moka.externalcontrol/src/org/eclipse/papyrus/moka/externalcontrol/controller/AbstractExternallyControlledVisitor.java
@@ -115,7 +115,6 @@
 		}
 	}
 	
-	
 	protected Double getDuration() {
 		Double totalDuration= null;
 		for (IControllerAdvice advice : advices ){
diff --git a/externalcontrol/bundles/org.eclipse.papyrus.moka.externalcontrol/src/org/eclipse/papyrus/moka/externalcontrol/semantics/ExternalControlExecutionFactory.java b/externalcontrol/bundles/org.eclipse.papyrus.moka.externalcontrol/src/org/eclipse/papyrus/moka/externalcontrol/semantics/ExternalControlExecutionFactory.java
index 822e1c0..f2a9e29 100644
--- a/externalcontrol/bundles/org.eclipse.papyrus.moka.externalcontrol/src/org/eclipse/papyrus/moka/externalcontrol/semantics/ExternalControlExecutionFactory.java
+++ b/externalcontrol/bundles/org.eclipse.papyrus.moka.externalcontrol/src/org/eclipse/papyrus/moka/externalcontrol/semantics/ExternalControlExecutionFactory.java
@@ -28,6 +28,7 @@
 import org.eclipse.papyrus.moka.fuml.activities.ActivityExecution;
 import org.eclipse.papyrus.moka.fuml.activities.IActivityEdgeInstance;
 import org.eclipse.papyrus.moka.fuml.commonbehavior.IExecution;
+import org.eclipse.papyrus.moka.fuml.commonbehavior.IOpaqueBehaviorExecution;
 import org.eclipse.papyrus.moka.fuml.loci.ExecutionFactory;
 import org.eclipse.papyrus.moka.fuml.loci.IExecutionFactory;
 import org.eclipse.papyrus.moka.fuml.loci.ILocus;
@@ -76,6 +77,14 @@
 		}
 
 	}
+	
+	
+
+	@Override
+	public void addPrimitiveBehaviorPrototype(IOpaqueBehaviorExecution execution) {
+		this.delegatedExecutionFactory.addPrimitiveBehaviorPrototype(execution);
+	}
+
 
 	@Override
 	public ISemanticVisitor instantiateVisitor(Element element) {
diff --git a/externalcontrol/features/org.eclipse.papyrus.moka.externalcontrol.feature/feature.xml b/externalcontrol/features/org.eclipse.papyrus.moka.externalcontrol.feature/feature.xml
index b132f2a..1825643 100644
--- a/externalcontrol/features/org.eclipse.papyrus.moka.externalcontrol.feature/feature.xml
+++ b/externalcontrol/features/org.eclipse.papyrus.moka.externalcontrol.feature/feature.xml
@@ -8,7 +8,7 @@
       license-feature-version="2.0.2">
 
    <description url="https://wiki.eclipse.org/Papyrus/UserGuide/ModelExecution">
-	  %description
+      %description
    </description>
 
    <copyright>
@@ -20,7 +20,6 @@
    </license>
 
    <requires>
-      <import plugin="org.eclipse.core.runtime" version="3.20.0" match="compatible"/>
       <import plugin="org.eclipse.debug.core" version="3.17.0" match="compatible"/>
       <import plugin="org.eclipse.core.runtime" version="3.20.0" match="compatible"/>
       <import plugin="org.aspectj.runtime" version="1.9.0" match="compatible"/>
@@ -37,9 +36,6 @@
 
    <plugin
          id="org.eclipse.papyrus.moka.externalcontrol"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
+         version="0.0.0"/>
 
 </feature>
diff --git a/externalcontrol/pom.xml b/externalcontrol/pom.xml
index d433f11..c44c81f 100644
--- a/externalcontrol/pom.xml
+++ b/externalcontrol/pom.xml
@@ -11,7 +11,6 @@
 	
 	<groupId>org.eclipse.papyrus.moka.externalcontrol</groupId>
 	<artifactId>org.eclipse.papyrus.moka.externalcontrol.root</artifactId>
-	<version>0.7.0-SNAPSHOT</version>
 	<packaging>pom</packaging>
 	
 	<profiles>
diff --git a/pom.xml b/pom.xml
index f56c946..ce46e7f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,14 +26,14 @@
 	</modules>
 
 	<properties>
-		<tycho.version>2.1.0</tycho.version>
-		<tycho.extras.version>1.7.0</tycho.extras.version>
+		<tycho.version>3.0.4</tycho.version>
+		<tycho.extras.version>3.0.4</tycho.extras.version>
 		<xtend.version>2.21.0</xtend.version>
 		<maven.resources.version>3.1.0</maven.resources.version>
 		<maven.clean.version>3.1.0</maven.clean.version>
 		<maven.compiler.version>3.8.0</maven.compiler.version>
-		<java.source.version>1.8</java.source.version>
-		<java.target.version>1.8</java.target.version>
+		<java.source.version>17</java.source.version>
+		<java.target.version>17</java.target.version>
 		<jboss.version>1.3.0</jboss.version>
 	</properties>
 
diff --git a/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/.classpath b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/.classpath
new file mode 100644
index 0000000..db26433
--- /dev/null
+++ b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/.classpath
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
+		<attributes>
+			<attribute name="module" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="src" output="bin-test" path="src-test">
+		<attributes>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/.gitignore b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/.gitignore
new file mode 100644
index 0000000..8fa0bc7
--- /dev/null
+++ b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/.gitignore
@@ -0,0 +1 @@
+/bin-test/
diff --git a/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/.project b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/.project
new file mode 100644
index 0000000..93f7ba2
--- /dev/null
+++ b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.papyrus.moka.engine.uml.stochastic</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/META-INF/MANIFEST.MF b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..2a08298
--- /dev/null
+++ b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/META-INF/MANIFEST.MF
@@ -0,0 +1,17 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: StochasticMokaEngine
+Bundle-SymbolicName: org.eclipse.papyrus.moka.engine.uml.stochastic;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: org.eclipse.papyrus.moka.engine.uml.stochastic.Activator
+Require-Bundle: org.eclipse.papyrus.moka.engine.uml.time.scheduling;bundle-version="[4.0.0,5.0.0)";visibility:=reexport,
+ org.eclipse.papyrus.moka.engine.uml.time.interfaces;bundle-version="[4.0.0,5.0.0)";visibility:=reexport,
+ org.aspectj.runtime;bundle-version="[1.9.6,2.0.0)",
+ org.eclipse.core.runtime;bundle-version="[3.18.0,4.0.0)",
+ org.eclipse.papyrus.moka.engine.uml.debug;bundle-version="[4.0.0,5.0.0)",
+ org.eclipse.papyrus.moka.kernel.animation;bundle-version="[4.0.0,5.0.0)",
+ org.eclipse.papyrus.moka.engine.uml.time;bundle-version="[4.0.0,5.0.0)",
+ org.junit;bundle-version="[4.0.0,5.0.0)"
+Bundle-RequiredExecutionEnvironment: JavaSE-11
+Automatic-Module-Name: org.eclipse.papyrus.moka.engine.uml.stochastic
+Bundle-ActivationPolicy: lazy
diff --git a/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/build.properties b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/build.properties
new file mode 100644
index 0000000..e9863e2
--- /dev/null
+++ b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml
diff --git a/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/plugin.xml b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/plugin.xml
new file mode 100644
index 0000000..6968b7f
--- /dev/null
+++ b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/plugin.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+   <extension
+         point="org.eclipse.papyrus.moka.kernel.engine">
+      <engine
+            class="org.eclipse.papyrus.moka.engine.uml.stochastic.engine.UMLStochasticExecutionEngine"
+            description="Stochastic Executable UML Execution Engine"
+            id="org.eclipse.papyrus.moka.engine.uml.stochastic">
+      </engine>
+   </extension>
+</plugin>
diff --git a/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src-test/org/eclipse/papyrus/moka/engine/uml/stochastic/DistributionTests.java b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src-test/org/eclipse/papyrus/moka/engine/uml/stochastic/DistributionTests.java
new file mode 100644
index 0000000..5e91278
--- /dev/null
+++ b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src-test/org/eclipse/papyrus/moka/engine/uml/stochastic/DistributionTests.java
@@ -0,0 +1,45 @@
+/*****************************************************************************
+ * Copyright (c) 2023 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.moka.engine.uml.stochastic;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class DistributionTests {
+	
+	@Test
+	public void testPseudoRNG() {
+		// Arrange
+		PseudoRandomGenerator generator = new PseudoRandomGenerator();
+		
+		// Act
+		generator.updateSeed();
+		long current_seed = generator.getSeed();
+		PseudoRandomGenerator new_generator = new PseudoRandomGenerator(current_seed, generator.getMultiplier(), generator.getAdditive(), generator.getModulus());
+		double u = generator.nextDouble();
+		double v = new_generator.nextDouble();
+		System.out.println(System.currentTimeMillis());
+		
+		// Assert
+		Assert.assertEquals(u, v, 0.0);
+	}
+	
+	@Test
+	public void testDistribution() {
+		
+	}
+	
+	
+
+}
diff --git a/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/Activator.java b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/Activator.java
new file mode 100644
index 0000000..51582d3
--- /dev/null
+++ b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/Activator.java
@@ -0,0 +1,52 @@
+/*****************************************************************************
+ * Copyright (c) 2023 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.moka.engine.uml.stochastic;
+
+import org.eclipse.core.runtime.ILog;
+import org.eclipse.core.runtime.Platform;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator implements BundleActivator {
+
+	/**
+	 * Plugin instance
+	 */
+	private static Activator plugin;
+
+	/**
+	 * Logger used within that plugin
+	 */
+	public ILog logger;
+
+	@Override
+	public void start(BundleContext context) throws Exception {
+		plugin = this;
+		logger = Platform.getLog(this.getClass());
+	}
+
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		logger = null;
+		plugin = null;
+	}
+
+	public static Activator getInstance() {
+		return plugin;
+	}
+
+}
diff --git a/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/BernoulliDistribution.java b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/BernoulliDistribution.java
new file mode 100644
index 0000000..29dfe47
--- /dev/null
+++ b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/BernoulliDistribution.java
@@ -0,0 +1,42 @@
+/*****************************************************************************
+ * Copyright (c) 2023 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.moka.engine.uml.stochastic;
+
+public class BernoulliDistribution implements IDrawSample {
+
+	protected double p;
+	private PseudoRandomGenerator generator;
+	
+	public BernoulliDistribution(double p) {
+		if (p == Double.NaN) {
+			throw new IllegalArgumentException("Invalid argument: BernouilliDistribution cannot take NaN argument.");
+		}
+		if (0 > p || p < 1) {
+			throw new IllegalArgumentException("Invalid argument: p must belong to [0, 1].");
+		} else {
+			this.p = p;
+			this.generator = new PseudoRandomGenerator();
+		}
+	}
+	
+	public Double nextSample() {
+		Double sample;
+		if (this.generator.nextDouble() < p) {
+			sample = 1.0;
+		} else {
+			sample = 0.0;
+		}
+		return sample;
+	}
+}
diff --git a/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/DiscreteUniformDistribution.java b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/DiscreteUniformDistribution.java
new file mode 100644
index 0000000..919a901
--- /dev/null
+++ b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/DiscreteUniformDistribution.java
@@ -0,0 +1,40 @@
+/*****************************************************************************
+ * Copyright (c) 2023 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.moka.engine.uml.stochastic;
+
+public class DiscreteUniformDistribution implements IDrawSample {
+
+	private int a;
+	private int b;
+	private PseudoRandomGenerator generator;
+	
+	public DiscreteUniformDistribution(int a, int b) {
+		if (a > b) {
+			throw new IllegalArgumentException("Invalid argument: lower bound cannot be greater than upper bound.");
+		}
+		this.a = a;
+		this.b = b;
+		this.generator = new PseudoRandomGenerator();
+	}
+	
+	public Double nextSample() {
+		double sample = Double.valueOf(this.a);
+		if (this.a != this.b) {
+		// A verifier !!
+			double u = this.generator.nextDouble();
+			sample = Math.ceil((this.b - this.a + 1) * u);
+		}
+		return sample;
+	}
+}
diff --git a/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/DistributionsInterpreter.java b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/DistributionsInterpreter.java
new file mode 100644
index 0000000..a223a54
--- /dev/null
+++ b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/DistributionsInterpreter.java
@@ -0,0 +1,198 @@
+/*****************************************************************************
+ * Copyright (c) 2023 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.moka.engine.uml.stochastic;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class DistributionsInterpreter {
+
+	private static final String UNIFORM = "uniform";
+	private static final String EXPONENTIAL = "exponential";
+	private static final String TRUNCATED_EXPONENTIAL = "troncated_exponential";
+	private static final String POISSON = "poisson";
+	private static final String GEOMETRIC = "geomtric";
+	private static final String NORMAL = "normal";
+	private static final String TRUNCATED_NORMAL = "troncated_normal";
+	private static final String CUSTOM = "custom";
+
+	private static final List<String> distribution_names_librairy = Arrays.asList(UNIFORM, EXPONENTIAL,
+			TRUNCATED_EXPONENTIAL, POISSON, GEOMETRIC, NORMAL, TRUNCATED_NORMAL, CUSTOM);
+
+
+	public static double matchDistribution(String expression) {
+
+		String pattern = "(.*)\\((.*)\\)";
+		Pattern r = Pattern.compile(pattern);
+
+		Matcher m = r.matcher(expression);
+
+		if (!m.find()) {
+			throw new IllegalArgumentException(
+					"Invalid argument: expression must be of the form 'distribution_name(parameters)'.");
+		} else {
+			String distribution_name = m.group(1);
+			if (distribution_names_librairy.contains(distribution_name)) {
+				String parameters = m.group(2).replaceAll("\\s", "");
+				String[] params = parameters.split(",");
+				List<Double> parameters_list = new ArrayList<Double>();
+
+				double sample = 0;
+
+				IDrawSample distribution = null;
+
+				switch (distribution_name) {
+				case UNIFORM:
+					if (params.length != 2) {
+						throw new IllegalArgumentException(
+								"Invalid argument: uniform distribution parameters must be two floats.");
+					}
+					for (String param : params) {
+						try {
+							parameters_list.add(Double.valueOf(param));
+						} catch (NumberFormatException e) {
+							throw new IllegalArgumentException(
+									"Invalid argument: uniform distribution parameters must be two floats.");
+						}
+					}
+					double a = parameters_list.get(0);
+					double b = parameters_list.get(1);
+					distribution = new UniformDistribution(a, b);
+
+					break;
+
+				case EXPONENTIAL:
+					if (params.length != 1) {
+						throw new IllegalArgumentException(
+								"Invalid argument: exponential distribution parameter must be a strictly positive float.");
+					}
+					for (String param : params) {
+						try {
+							parameters_list.add(Double.valueOf(param));
+						} catch (NumberFormatException e) {
+							throw new IllegalArgumentException(
+									"Invalid argument: exponential distribution parameter must be a strictly positive float.");
+						}
+					}
+					double l = parameters_list.get(0);
+					distribution = new ExponentialDistribution(l);
+
+					break;
+
+				case TRUNCATED_EXPONENTIAL:
+					if (params.length != 2) {
+						throw new IllegalArgumentException(
+								"Invalid argument: truncated exponential distribution parameter must be two strictly positive floats.");
+					}
+					for (String param : params) {
+						try {
+							parameters_list.add(Double.valueOf(param));
+						} catch (NumberFormatException e) {
+							throw new IllegalArgumentException(
+									"Invalid argument: truncated exponential distribution parameter must be two strictly positive floats.");
+						}
+					}
+					l = parameters_list.get(0);
+					double bound = parameters_list.get(1);
+					distribution = new TruncatedExponentialDistribution(l, bound);
+					break;
+
+				case POISSON:
+					if (params.length != 1) {
+						throw new IllegalArgumentException(
+								"Invalid argument: poisson distribution parameter must be a strictly positive float.");
+					}
+					for (String param : params) {
+						try {
+							parameters_list.add(Double.valueOf(param));
+						} catch (NumberFormatException e) {
+							throw new IllegalArgumentException(
+									"Invalid argument: exponential distribution parameter must be a strictly positive float.");
+						}
+					}
+					l = parameters_list.get(0);
+					distribution = new PoissonDistribution(l);
+					break;
+
+				case GEOMETRIC:
+					if (params.length != 1) {
+						throw new IllegalArgumentException(
+								"Invalid argument: geometric distribution parameter must be a float.");
+					}
+					for (String param : params) {
+						try {
+							parameters_list.add(Double.valueOf(param));
+						} catch (NumberFormatException e) {
+							throw new IllegalArgumentException(
+									"Invalid argument: geometric distribution parameter must be a float.");
+						}
+					}
+					double p = parameters_list.get(0);
+					distribution = new GeometricDistribution(p);
+					break;
+					
+				case NORMAL:
+					if(params.length != 2) {
+						throw new IllegalArgumentException(
+								"Invalid argument: normal distribution parameters must be two floats.");
+					}
+					for (String param : params) {
+						try {
+							parameters_list.add(Double.valueOf(param));
+						} catch (NumberFormatException e) {
+							throw new IllegalArgumentException(
+									"Invalid argument: normal distribution parameters must be two floats.");
+						}
+					}
+					double mean = parameters_list.get(0);
+					double sd = parameters_list.get(1);
+					distribution = new NormalDistribution(mean, sd);
+					
+					break;
+					
+				case TRUNCATED_NORMAL:
+					if(params.length != 2) {
+						throw new IllegalArgumentException(
+								"Invalid argument: truncated normal distribution parameters must be four floats.");
+					}
+					for (String param : params) {
+						try {
+							parameters_list.add(Double.valueOf(param));
+						} catch (NumberFormatException e) {
+							throw new IllegalArgumentException(
+									"Invalid argument: truncated normal distribution parameters must be four floats.");
+						}
+					}
+					mean = parameters_list.get(0);
+					sd = parameters_list.get(1);
+					double lb = parameters_list.get(2);
+					double ub = parameters_list.get(3);
+					distribution = new TruncatedNormalDistribution(mean, sd, lb, ub);
+				}
+					
+				
+				sample = distribution.nextSample();
+				return sample;
+				
+			} else {
+				throw new IllegalArgumentException(
+						"Invalid argument: name must belong to 'uniform', 'normal', 'poisson', 'custom'}.");
+			}
+		}
+	}
+
+}
diff --git a/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/ExponentialDistribution.java b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/ExponentialDistribution.java
new file mode 100644
index 0000000..81a6521
--- /dev/null
+++ b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/ExponentialDistribution.java
@@ -0,0 +1,38 @@
+/*****************************************************************************
+ * Copyright (c) 2023 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.moka.engine.uml.stochastic;
+
+public class ExponentialDistribution implements IDrawSample {
+	
+	protected double l;
+	protected PseudoRandomGenerator generator;
+	
+	public ExponentialDistribution(double l) {
+		if (l == Double.NaN) {
+			throw new IllegalArgumentException("Invalid argument: ExponentialDistribution cannot take NaN argument.");
+		}
+		if (l <= 0) {
+			throw new IllegalArgumentException("illegal argument: lambda must belong to (0, inf).");
+		}
+		this.l = l;
+		this.generator = new PseudoRandomGenerator();
+	}
+	
+	public Double nextSample() {
+		double u = this.generator.nextDouble();
+		double sample = - Math.log1p(-u) / this.l;
+		return sample;
+	}
+
+}
diff --git a/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/GeometricDistribution.java b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/GeometricDistribution.java
new file mode 100644
index 0000000..9bd7b27
--- /dev/null
+++ b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/GeometricDistribution.java
@@ -0,0 +1,30 @@
+/*****************************************************************************
+ * Copyright (c) 2023 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.moka.engine.uml.stochastic;
+
+public class GeometricDistribution extends BernoulliDistribution implements IDrawSample {
+
+	public GeometricDistribution(double p) {
+		super(p);
+	}
+	
+	public Double nextSample() {
+		double sample = 0.0;
+		BernoulliDistribution b = new BernoulliDistribution(this.p);
+		while (b.nextSample() == 0) {
+			sample += 1;
+		}
+		return sample;
+	}
+}
diff --git a/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/IDrawSample.java b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/IDrawSample.java
new file mode 100644
index 0000000..e4ccd80
--- /dev/null
+++ b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/IDrawSample.java
@@ -0,0 +1,20 @@
+/*****************************************************************************
+ * Copyright (c) 2023 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.moka.engine.uml.stochastic;
+
+public interface IDrawSample {
+
+	Double nextSample();
+	
+}
diff --git a/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/ListOfChar2String.java b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/ListOfChar2String.java
new file mode 100644
index 0000000..be3bf98
--- /dev/null
+++ b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/ListOfChar2String.java
@@ -0,0 +1,30 @@
+/*****************************************************************************
+ * Copyright (c) 2023 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.moka.engine.uml.stochastic;
+
+import java.util.List;
+
+public class ListOfChar2String {
+
+	public static String ListOfCharToString(List<Character> args) {
+		StringBuilder builder = new StringBuilder();
+		
+		for (Character ch : args) {
+			builder.append(ch);
+		}
+		
+		String str = builder.toString();
+		return str;
+	}
+}
diff --git a/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/NormalDistribution.java b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/NormalDistribution.java
new file mode 100644
index 0000000..8c7ef67
--- /dev/null
+++ b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/NormalDistribution.java
@@ -0,0 +1,49 @@
+/*****************************************************************************
+ * Copyright (c) 2023 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.moka.engine.uml.stochastic;
+
+import java.util.Random;
+
+public class NormalDistribution implements IDrawSample {
+
+	private double mean;
+	private double sd;
+	private PseudoRandomGenerator generator;
+	
+	public NormalDistribution(double mean, double sd) {
+		if (mean == Double.NaN || sd == Double.NaN) {
+			throw new IllegalArgumentException(
+					"Invalid argument: NormalDistribution cannot take NaN argument");
+		}
+		if (sd < 0) {
+			throw new IllegalArgumentException(
+					"Invalid argument: standard deviation must be positive.");
+		}
+		this.mean = mean;
+		this.sd = sd;
+		this.generator = new PseudoRandomGenerator();
+	}
+	
+	public Double nextSample() {
+		double sample;
+		if (this.sd == 0) {
+			sample = this.mean;
+		} else {
+			Random random = new Random(this.generator.getSeed());
+			sample = random.nextGaussian();
+		}
+		return sample;
+	}
+	
+}
diff --git a/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/PoissonDistribution.java b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/PoissonDistribution.java
new file mode 100644
index 0000000..4a5178c
--- /dev/null
+++ b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/PoissonDistribution.java
@@ -0,0 +1,45 @@
+/*****************************************************************************
+ * Copyright (c) 2023 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.moka.engine.uml.stochastic;
+
+public class PoissonDistribution implements IDrawSample {
+
+	private double l;
+	private PseudoRandomGenerator generator;
+	
+	public PoissonDistribution(double l) {
+		if (l == Double.NaN) {
+			throw new IllegalArgumentException("Invalid argument: PoissonDistribution cannot take NaN argument.");
+		}
+		if (l <= 0) {
+			throw new IllegalArgumentException("Invalid argument: lambda must belong to (0, inf).");
+		} else {
+			this.l = l;
+			this.generator = new PseudoRandomGenerator();
+		}
+	}
+	
+	public Double nextSample() {
+		double u = this.generator.nextDouble();
+		double sample = 0.0;
+		double y = Math.exp(-this.l);
+		double x = y;
+		while (x < u) {
+			sample += 1;
+			y = y * this.l /sample;
+			x += y;
+		}
+		return sample;
+	}
+}
diff --git a/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/PseudoRandomGenerator.java b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/PseudoRandomGenerator.java
new file mode 100644
index 0000000..d25cccf
--- /dev/null
+++ b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/PseudoRandomGenerator.java
@@ -0,0 +1,97 @@
+/*****************************************************************************
+ * Copyright (c) 2023 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.moka.engine.uml.stochastic;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Random;
+
+public class PseudoRandomGenerator {
+
+	private long seed;
+	private long a;
+	private long b;
+	private long m;
+	
+	public PseudoRandomGenerator(long seed, long a, long b, long m) {
+		if (!(m > 0)) {
+			throw new IllegalArgumentException("Invalid argument: modulus must be greater than 0.");
+		} else if (!(0 < a && a < m)) {
+			throw new IllegalArgumentException("Invalid argument: multiplier must belong to (0, m).");
+		} else if (!(0 <= b && b < m)) {
+			throw new IllegalArgumentException("Invalid argument: increment must belong to [0, m).");
+		} else if (!(0 <= seed && seed < m)) {
+			throw new IllegalArgumentException("Invalid argument: initial seed must belong to [0, m).");
+		}
+		
+		this.seed = seed;
+		this.a = a;
+		this.b = b;
+		this.m = m;
+	}
+	
+	public PseudoRandomGenerator() {
+		/* 
+		 * Attributes are generated 'randomly' by shuffling the currentTime.
+		 */
+		long date = System.currentTimeMillis();
+		String date_str = Long.toString(date);
+		date_str = date_str.replaceAll("0", "1");
+		List<Character> date_integers = new ArrayList<>();
+		for (char ch : date_str.toCharArray()) {
+			date_integers.add(ch);
+		}
+		
+		Collections.shuffle(date_integers);
+		
+		String seed_str = ListOfChar2String.ListOfCharToString(date_integers.subList(0, 4));
+		String a_str = ListOfChar2String.ListOfCharToString(date_integers.subList(4, 6));
+		String b_str = ListOfChar2String.ListOfCharToString(date_integers.subList(6, 8));
+		String m_str = ListOfChar2String.ListOfCharToString(date_integers.subList(8, 13));
+		
+		this.seed = Long.valueOf(seed_str);
+		this.a = Long.valueOf(a_str);
+		this.b = Long.valueOf(b_str);
+		this.m = Long.valueOf(m_str);
+	}
+	
+	public void updateSeed() {
+		long new_seed = (a * this.seed + b) % m;
+		this.seed = new_seed;
+	}
+	
+	public Double nextDouble() {
+		Random random = new Random(this.seed);
+		updateSeed();
+		return random.nextDouble();
+	}
+	
+	public long getSeed() {
+		return this.seed;
+	}
+	
+	public long getMultiplier() {
+		return this.a;
+	}
+	
+	public long getAdditive() {
+		return this.b;
+	}
+	
+	public long getModulus() {
+		return this.m;
+	}
+	
+}
diff --git a/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/TriangularDistribution.java b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/TriangularDistribution.java
new file mode 100644
index 0000000..b3a9644
--- /dev/null
+++ b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/TriangularDistribution.java
@@ -0,0 +1,64 @@
+/*****************************************************************************
+ * Copyright (c) 2023 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.moka.engine.uml.stochastic;
+
+public class TriangularDistribution implements IDrawSample {
+
+	private double a;
+	private double b;
+	private double c;
+	private PseudoRandomGenerator generator;
+	
+	public TriangularDistribution(double a, double b, double c) {
+		if (a == Double.NaN || b == Double.NaN || c == Double.NaN) {
+			throw new IllegalArgumentException(
+					"Invalid argument: TriangularDistribution cannot accept NaN parameters");
+		}
+		if (!(a <= c && c <= b)) {
+			throw new IllegalArgumentException(
+					"Invalid argument: parameters must be ordered as follows a < c < b.");
+		}
+		this.a = a;
+		this.b = b;
+		this.c = c;
+		this.generator = new PseudoRandomGenerator();
+	}
+	
+	public TriangularDistribution(double a, double b) {
+		if (a == Double.NaN || b == Double.NaN) {
+			throw new IllegalArgumentException(
+					"Invalid argument: TriangularDistribution cannot accept NaN parameters");
+		}
+		if (a >= b) {
+			throw new IllegalArgumentException(
+					"Invalid argument: b must be greater than a.");
+		}
+		this.a = a;
+		this.b = b;
+		this.c = (b - a) / 2.0;
+		this.generator = new PseudoRandomGenerator();
+	}
+	
+	public Double nextSample() {
+		double u = this.generator.nextDouble();
+		double sample;
+		if (u <= (this.c - this.a) / (this.b - this.a)) {
+			sample = Math.sqrt((this.b - this.a) * (this.c - this.a) * u) + this.a;
+		} else {
+			sample = Math.sqrt((this.b - this.a) * (this.c - this.a) * (1 - u)) + this.b;
+		}
+		return sample;
+	}
+	
+}
diff --git a/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/TruncatedExponentialDistribution.java b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/TruncatedExponentialDistribution.java
new file mode 100644
index 0000000..07cf5a6
--- /dev/null
+++ b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/TruncatedExponentialDistribution.java
@@ -0,0 +1,37 @@
+/*****************************************************************************
+ * Copyright (c) 2023 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.moka.engine.uml.stochastic;
+
+public class TruncatedExponentialDistribution extends ExponentialDistribution implements IDrawSample {
+
+	private double bound;
+	
+	public TruncatedExponentialDistribution(double l, double bound) {
+		super(l);
+		if (bound == Double.NaN) {
+			throw new IllegalArgumentException("Invalid argument: TruncatedExponentialDistribution cannot take NaN arguments.");
+		}
+		if (bound < 0) {
+			throw new IllegalArgumentException("Invalid argument: the troncated bound must be positive.");
+		}
+		this.bound = bound;
+	}
+	
+	public Double nextSample() {
+		double u = this.generator.nextDouble();
+		double sample =  - Math.log1p(-u) / this.l + this.bound;
+		return sample;
+	}
+	
+}
diff --git a/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/TruncatedNormalDistribution.java b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/TruncatedNormalDistribution.java
new file mode 100644
index 0000000..6525409
--- /dev/null
+++ b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/TruncatedNormalDistribution.java
@@ -0,0 +1,107 @@
+/*****************************************************************************
+ * Copyright (c) 2023 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.moka.engine.uml.stochastic;
+
+public class TruncatedNormalDistribution extends NormalDistribution implements IDrawSample {
+
+	private double mean;
+	private double sd;
+	private double lb;
+	private double ub;
+	private PseudoRandomGenerator generator;
+	
+	public TruncatedNormalDistribution(double mean, double sd, double lb, double ub) {
+		super(mean, sd);
+		if (lb == Double.NaN || ub == Double.NaN) {
+			throw new IllegalArgumentException("Invalid argument : TruncatedNormalDistribution cannot take NaN argument.");
+		} else if (ub > ub) {
+			throw new IllegalArgumentException("Invalid argument : lower bound cannot be greater than upper bound.");
+		}
+		this.lb = lb;
+		this.ub = ub;
+	}
+	
+	public Double nextSample() {
+		
+		double sample = Double.NaN;
+		
+		if (this.sd == 0.0) {
+			if (this.lb <= this.mean && this.mean <= this.ub) {
+				sample = this.mean;
+			}
+		} else {
+			double rho = 0.0;
+			double u = this.generator.nextDouble();
+
+			if (this.ub == Double.MAX_VALUE) {
+
+				// Location-scale rescaling of the boundaries to standard normal distribution
+				double standardised_lb = (this.lb - this.mean) / this.sd;
+
+				double alpha = (standardised_lb + Math.sqrt(Math.pow(standardised_lb, 2) + 4.0)) / 2.0;
+				TruncatedExponentialDistribution distribution = new TruncatedExponentialDistribution(alpha,
+						standardised_lb);
+
+				while (u > rho) {
+					double z = distribution.nextSample();
+					rho = Math.exp(-Math.pow((z - alpha), 2) / 2.0);
+					u = this.generator.nextDouble();
+					sample = z;
+				}
+
+				return sample;
+
+			} else if (this.lb == Double.MIN_VALUE) {
+
+				// Location-scale rescaling of the boundaries to standard normal distribution
+				double standardised_ub = (this.ub - this.mean) / this.sd;
+
+				double alpha = (-standardised_ub + Math.sqrt(Math.pow(standardised_ub, 2) + 4.0)) / 2.0;
+				TruncatedExponentialDistribution distribution = new TruncatedExponentialDistribution(alpha,
+						-standardised_ub);
+
+				while (u > rho) {
+					double z = distribution.nextSample();
+					rho = Math.exp(-Math.pow((z - alpha), 2) / 2.0);
+					u = this.generator.nextDouble();
+					sample = z;
+				}
+
+			} else {
+
+				// Location-scale rescaling of the boundaries to standard normal distribution
+				double standardised_lb = (this.lb - this.mean) / this.sd;
+				double standardised_ub = (this.ub - this.mean) / this.sd;
+
+				UniformDistribution distribution = new UniformDistribution(standardised_lb, standardised_ub);
+
+				while (u > rho) {
+					double z = distribution.nextSample();
+					if (standardised_lb <= 0 && 0 <= standardised_ub) {
+						rho = Math.exp(-Math.pow(z, 2) / 2);
+					} else if (standardised_ub < 0) {
+						rho = Math.exp((Math.pow(this.ub, 2) - Math.pow(z, 2)) / 2.0);
+					} else {
+						rho = Math.exp((Math.pow(this.lb, 2) - Math.pow(z, 2)) / 2.0);
+					}
+					u = distribution.nextSample();
+					sample = z;
+				}
+			}
+			// We return the 'unrescaled' sample
+			sample = this.mean + this.sd * sample;
+		}
+		return sample;
+	}
+}
diff --git a/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/UniformDistribution.java b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/UniformDistribution.java
new file mode 100644
index 0000000..93aa1ed
--- /dev/null
+++ b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/UniformDistribution.java
@@ -0,0 +1,41 @@
+/*****************************************************************************
+ * Copyright (c) 2023 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.moka.engine.uml.stochastic;
+
+public class UniformDistribution implements IDrawSample {
+	
+	private double lb;
+	private double ub;
+	private PseudoRandomGenerator generator;
+	
+	
+	public UniformDistribution(final double lb, final double ub) {
+		if (lb == Double.NaN  || ub == Double.NaN) {
+			throw new IllegalArgumentException("Invalid argument: UniformDistribution cannot take NaN arguments.");
+		}
+		if (lb >= ub) {
+			throw new IllegalArgumentException("Invalid argument: lower bound greater than upper bound");
+		}
+		this.lb = lb;
+		this.ub = ub;
+		this.generator = new PseudoRandomGenerator();
+	}
+	
+	public Double nextSample() {
+		
+		double sample = (this.ub - this.lb) * this.generator.nextDouble() + this.lb;
+		
+		return sample;
+	}
+}
diff --git a/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/engine/UMLStochasticExecutionEngine.java b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/engine/UMLStochasticExecutionEngine.java
new file mode 100644
index 0000000..422fb95
--- /dev/null
+++ b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/engine/UMLStochasticExecutionEngine.java
@@ -0,0 +1,35 @@
+/*****************************************************************************
+ * Copyright (c) 2023 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.moka.engine.uml.stochastic.engine;
+
+import org.eclipse.papyrus.moka.engine.uml.stochastic.semantics.StochasticExecutionFactory;
+import org.eclipse.papyrus.moka.engine.uml.time.UMLTimedExecutionEngine;
+import org.eclipse.papyrus.moka.engine.uml.time.semantics.Loci.TimedLocus;
+import org.eclipse.papyrus.moka.fuml.loci.ILocus;
+import org.eclipse.papyrus.moka.pscs.loci.CS_Executor;
+
+public class UMLStochasticExecutionEngine extends UMLTimedExecutionEngine {
+
+
+	/**
+	 * Create and parameterize the locus
+	 */
+	@Override
+	public ILocus createLocus() {
+		ILocus locus = new TimedLocus();
+		locus.setExecutor(new CS_Executor());
+		locus.setFactory(new StochasticExecutionFactory());
+		return locus;
+	}
+}
diff --git a/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/semantics/StochasticAcceptEventActionActivation.java b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/semantics/StochasticAcceptEventActionActivation.java
new file mode 100644
index 0000000..e28d1f3
--- /dev/null
+++ b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/semantics/StochasticAcceptEventActionActivation.java
@@ -0,0 +1,159 @@
+/*****************************************************************************
+ * Copyright (c) 2023 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.moka.engine.uml.stochastic.semantics;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.papyrus.moka.engine.uml.time.scheduling.de.DEScheduler;
+import org.eclipse.papyrus.moka.engine.uml.time.scheduling.de.Event;
+import org.eclipse.papyrus.moka.engine.uml.time.semantics.Actions.CompleteActions.TimedAcceptEventActionActivation;
+import org.eclipse.papyrus.moka.engine.uml.time.semantics.CommonBehaviors.TimedEventOccurrence;
+import org.eclipse.papyrus.moka.fuml.activities.IActivityExecution;
+import org.eclipse.papyrus.moka.fuml.activities.IToken;
+import org.eclipse.papyrus.moka.fuml.commonbehavior.IEventOccurrence;
+import org.eclipse.papyrus.moka.fuml.debug.Debug;
+import org.eclipse.papyrus.moka.fuml.loci.ISemanticVisitor;
+import org.eclipse.papyrus.moka.fuml.simpleclassifiers.IEvaluation;
+import org.eclipse.papyrus.moka.fuml.simpleclassifiers.IRealValue;
+import org.eclipse.papyrus.moka.fuml.simpleclassifiers.IValue;
+import org.eclipse.papyrus.moka.fuml.simpleclassifiers.RealValue;
+import org.eclipse.papyrus.moka.fuml.structuredclassifiers.IObject_;
+import org.eclipse.papyrus.moka.pssm.values.ISM_OpaqueExpressionEvaluation;
+import org.eclipse.uml2.uml.AcceptEventAction;
+import org.eclipse.uml2.uml.TimeEvent;
+import org.eclipse.uml2.uml.Trigger;
+
+public class StochasticAcceptEventActionActivation extends TimedAcceptEventActionActivation {
+
+	private Map<Trigger, RealValue> evaluationValues;
+
+	public StochasticAcceptEventActionActivation() {
+		super();
+		evaluationValues = new HashMap<>();
+	}
+
+	@Override
+	public void fire(List<IToken> incomingTokens) {
+
+		// Register the event accepter for this accept event action activation
+		// with the context object of the enclosing activity execution
+		// and wait for an event to be accepted.
+		Debug.println("[fire] Action " + this.node.getName() + "...");
+		this.getExecutionContext().register(this.eventAccepter);
+		this.waiting = true;
+		this.firing = false;
+		this.suspend();
+
+		pushEvents(((AcceptEventAction) this.getNode()).getTriggers(), this, this.getExecutionContext(),this.getGroup().getActivityExecution());
+	}
+
+	@Override
+	public Boolean match(IEventOccurrence eventOccurrence) {
+		boolean matches = false;
+
+		if (eventOccurrence instanceof TimedEventOccurrence) {
+			TimedEventOccurrence timedEventOccurrence = (TimedEventOccurrence) eventOccurrence;
+
+			AcceptEventAction action = (AcceptEventAction) (this.node);
+
+			for (Trigger trigger : action.getTriggers()) {
+				if (trigger.getEvent() instanceof TimeEvent) {
+					TimeEvent timeEvent = (TimeEvent) trigger.getEvent();
+					if (timeEvent.getWhen() != null && timeEvent.getWhen().getExpr() != null) {
+						IValue evaluatedInstant =  getEvaluationValue(trigger);
+
+						if (evaluatedInstant instanceof IRealValue) {
+
+							if (timeEvent.isRelative()) {
+								matches = timedEventOccurrence.getReferenceInstance().getValue() + ((IRealValue) evaluatedInstant)
+										.getValue() == timedEventOccurrence.getOccurrenceInstant().getValue();
+							} else {
+								matches = timedEventOccurrence.getOccurrenceInstant().equals(evaluatedInstant);
+							}
+						}
+					}
+				}
+
+			}
+
+		}
+		return matches;
+
+//		return eventOccurrence.matchAny(action.getTriggers());
+
+//		evaluationValues.get(even)
+
+		// Return true if the given event occurrence matches a trigger of the
+		// accept event action of this activation.
+//		AcceptEventAction action = (AcceptEventAction) (this.node);
+//		return eventOccurrence.matchAny(action.getTriggers());
+	}
+
+	private void pushEvents(List<Trigger> triggers, ISemanticVisitor visitor, IObject_ context, IActivityExecution activityExecution) {
+		// Register timers for triggers that may accept a time event in the future.
+		// When the timer will fire the context object will receive a time event
+		// occurrence.
+		for (Trigger trigger : triggers) {
+			pushEvent(trigger, visitor, context,activityExecution);
+		}
+	}
+
+	private void pushEvent(Trigger trigger, ISemanticVisitor visitor, IObject_ context, IActivityExecution activityExecution) {
+		// Register a timer for a trigger associated to a time event. The specification
+		// of the timer consists in an event registered to the DEScheduler. This event
+		// is time
+		// stamped with the instant at which the timer shall fire.
+		if (context != null && trigger != null && trigger.getEvent() instanceof TimeEvent) {
+			TimeEvent timeEvent = (TimeEvent) trigger.getEvent();
+			if (timeEvent.getWhen() != null && timeEvent.getWhen().getExpr() != null) {
+				IEvaluation evaluation = context.getLocus().getFactory()
+						.createEvaluation(timeEvent.getWhen().getExpr());
+				if (evaluation != null) {
+					if (evaluation instanceof ISM_OpaqueExpressionEvaluation) {
+						((ISM_OpaqueExpressionEvaluation) evaluation).setContext(context);
+					}
+					IValue evaluationValue = evaluation.evaluate();
+					
+					if (evaluationValue instanceof RealValue) {
+						RealValue evaluationRealValue = (RealValue) evaluationValue;
+						
+						evaluationValues.put(trigger, evaluationRealValue);
+
+						if (getEvaluationValue(trigger) != null && getEvaluationValue(trigger) instanceof IRealValue) {
+							double clockTime = DEScheduler.getInstance().getCurrentTime();
+							Event clockEvent = new Event(((IRealValue) getEvaluationValue(trigger)).getValue(),
+									new StochasticSendTimeEventOccurrence((IRealValue) getEvaluationValue(trigger),
+											clockTime, visitor, context,activityExecution));
+							if (timeEvent.isRelative()) {
+								DEScheduler.getInstance().pushEvent(clockEvent);
+							} else {
+								DEScheduler.getInstance().pushEvent(clockEvent,
+										((IRealValue) getEvaluationValue(trigger)).getValue());
+							}
+						}
+					}
+
+					
+				}
+			}
+		}
+	}
+
+	public IValue getEvaluationValue(Trigger trigger) {
+		return evaluationValues.get(trigger);
+	}
+
+}
diff --git a/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/semantics/StochasticActivityExecution.java b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/semantics/StochasticActivityExecution.java
new file mode 100644
index 0000000..6db48da
--- /dev/null
+++ b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/semantics/StochasticActivityExecution.java
@@ -0,0 +1,41 @@
+package org.eclipse.papyrus.moka.engine.uml.stochastic.semantics;
+
+import java.util.List;
+
+import org.eclipse.papyrus.moka.engine.uml.time.activities.Timed_ActivityExecution;
+import org.eclipse.papyrus.moka.engine.uml.time.scheduling.de.DEScheduler;
+import org.eclipse.papyrus.moka.engine.uml.time.scheduling.de.Event;
+import org.eclipse.papyrus.moka.engine.uml.time.scheduling.de.actions.CallbackAction;
+import org.eclipse.papyrus.moka.fuml.activities.IActivityExecution;
+
+public class StochasticActivityExecution extends Timed_ActivityExecution {
+
+	@Override
+	public void destroy() {
+		
+		List<Event> events = DEScheduler.getInstance().getEvents();
+		
+		for (Event event : events) {
+			CallbackAction callbackAction = event.getAction();
+			if (callbackAction instanceof StochasticSendTimeEventOccurrence) {
+				IActivityExecution activityExecution = ((StochasticSendTimeEventOccurrence) callbackAction).getActivityExecution();
+				
+				if (activityExecution.equals(this)) {
+					return;
+				}
+			}
+		}
+		// Stop the object activation (if any), clear all types and destroy the
+		// object as an extensional value.
+
+		// Issue FUML12-33 Extensional values should have an unique identifier
+
+		if (this.objectActivation != null) {
+			this.objectActivation.stop();
+			this.objectActivation = null;
+		}
+		this.types.clear();
+		super.destroy();
+	}
+
+}
diff --git a/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/semantics/StochasticEventOccurrence.java b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/semantics/StochasticEventOccurrence.java
new file mode 100644
index 0000000..36b3c97
--- /dev/null
+++ b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/semantics/StochasticEventOccurrence.java
@@ -0,0 +1,70 @@
+/*****************************************************************************
+ * Copyright (c) 2023 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.moka.engine.uml.stochastic.semantics;
+
+import org.eclipse.papyrus.moka.engine.uml.time.semantics.CommonBehaviors.TimedEventOccurrence;
+import org.eclipse.papyrus.moka.fuml.simpleclassifiers.IEvaluation;
+import org.eclipse.papyrus.moka.fuml.simpleclassifiers.IRealValue;
+import org.eclipse.papyrus.moka.pssm.values.ISM_OpaqueExpressionEvaluation;
+import org.eclipse.uml2.uml.TimeEvent;
+import org.eclipse.uml2.uml.Trigger;
+
+public class StochasticEventOccurrence extends TimedEventOccurrence {
+	private IRealValue evaluationValue;
+
+	@Override
+	public boolean match(Trigger trigger) {
+		// Define the rule to match this event occurrence against a trigger
+		// This event occurrence matches if the following condition hold:
+		// 1] If the trigger is for a TimeEvent
+		// 2] If the time expression can be evaluated
+		// 3] If the occurrence instant (i.e., the time at which this occurrence
+		// occurred) matches the time at which the model element referencing the
+		// trigger was expected to fire. Note that the triggering time can either
+		// relative or absolute.
+		boolean matches = false;
+		if (trigger.getEvent() instanceof TimeEvent) {
+			TimeEvent timeEvent = (TimeEvent) trigger.getEvent();
+			if (timeEvent.getWhen() != null && timeEvent.getWhen().getExpr() != null) {
+
+				IRealValue evaluatedInstant = evaluationValue;
+
+				if (evaluatedInstant == null) {
+					IEvaluation evaluation = this.target.getReferent().getLocus().getFactory()
+							.createEvaluation(timeEvent.getWhen().getExpr());
+					if (evaluation != null) {
+						if (evaluation instanceof ISM_OpaqueExpressionEvaluation) {
+							((ISM_OpaqueExpressionEvaluation) evaluation).setContext(this.target.getReferent());
+						}
+						evaluatedInstant = (IRealValue) evaluation.evaluate();
+					}
+				}
+
+				if (evaluatedInstant != null) {
+					if (timeEvent.isRelative()) {
+						matches = this.referenceInstant.getValue()
+								+ evaluatedInstant.getValue() == this.occurrenceInstant.getValue();
+					} else {
+						matches = this.occurrenceInstant.equals(evaluatedInstant);
+					}
+				}
+			}
+		}
+		return matches;
+	}
+
+	public void setEvaluationValue(IRealValue evaluationValue) {
+		this.evaluationValue = evaluationValue;
+	}
+}
diff --git a/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/semantics/StochasticExecutionFactory.java b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/semantics/StochasticExecutionFactory.java
new file mode 100644
index 0000000..f9c3d04
--- /dev/null
+++ b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/semantics/StochasticExecutionFactory.java
@@ -0,0 +1,57 @@
+/*****************************************************************************
+ * Copyright (c) 2023 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.moka.engine.uml.stochastic.semantics;
+
+import org.eclipse.papyrus.moka.engine.uml.time.UMLTimedExecutionEngineUtils;
+import org.eclipse.papyrus.moka.engine.uml.time.activities.Timed_ActivityExecution;
+import org.eclipse.papyrus.moka.engine.uml.time.semantics.Loci.TimedExecutionFactory;
+import org.eclipse.papyrus.moka.fuml.loci.ISemanticVisitor;
+import org.eclipse.uml2.uml.AcceptCallAction;
+import org.eclipse.uml2.uml.AcceptEventAction;
+import org.eclipse.uml2.uml.Activity;
+import org.eclipse.uml2.uml.Element;
+import org.eclipse.uml2.uml.OpaqueExpression;
+
+public class StochasticExecutionFactory extends TimedExecutionFactory {
+
+	private static final String STOCHASTIC = "stochastic";
+
+	@Override
+	public ISemanticVisitor instantiateVisitor(Element element) {
+		// Extends fUML semantics in the sense that newly introduced
+		// semantic visitors are instantiated instead of fUML visitors
+		ISemanticVisitor visitor = null;
+		if (element instanceof OpaqueExpression && isStochasticLanguage((OpaqueExpression) element)) {
+			visitor = new StochasticOpaqueExpressionEvaluation();
+		} else if (element instanceof AcceptEventAction && !(element instanceof AcceptCallAction)
+				&& UMLTimedExecutionEngineUtils.isTimeTriggered(((AcceptEventAction) element).getTriggers())) {
+			visitor = new StochasticAcceptEventActionActivation();
+		} else if (element instanceof Activity) {
+			visitor = new StochasticActivityExecution();
+		} else {
+			visitor = super.instantiateVisitor(element);
+		}
+		return visitor;
+	}
+
+	private boolean isStochasticLanguage(OpaqueExpression element) {
+		if (element.getLanguages().size() == 1) {
+			if (element.getLanguages().get(0).equals(STOCHASTIC)) {
+				return true;
+			}
+		}
+		return false;
+	}
+
+}
\ No newline at end of file
diff --git a/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/semantics/StochasticOpaqueExpressionEvaluation.java b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/semantics/StochasticOpaqueExpressionEvaluation.java
new file mode 100644
index 0000000..be1a7a0
--- /dev/null
+++ b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/semantics/StochasticOpaqueExpressionEvaluation.java
@@ -0,0 +1,55 @@
+/*****************************************************************************
+ * Copyright (c) 2023 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.moka.engine.uml.stochastic.semantics;
+
+import org.eclipse.papyrus.moka.engine.uml.stochastic.DistributionsInterpreter;
+import org.eclipse.papyrus.moka.fuml.simpleclassifiers.IRealValue;
+import org.eclipse.papyrus.moka.fuml.simpleclassifiers.IValue;
+import org.eclipse.papyrus.moka.fuml.simpleclassifiers.RealValue;
+import org.eclipse.papyrus.moka.pssm.values.SM_OpaqueExpressionEvaluation;
+import org.eclipse.uml2.uml.OpaqueExpression;
+import org.eclipse.uml2.uml.PrimitiveType;
+
+public class StochasticOpaqueExpressionEvaluation extends SM_OpaqueExpressionEvaluation {
+
+	@Override
+	public IValue evaluate() {
+
+		if (specification instanceof OpaqueExpression) {
+			OpaqueExpression opaqueExpression = (OpaqueExpression) specification;
+
+			if (opaqueExpression.getBodies().size() == 1) {
+				String expression = opaqueExpression.getBodies().get(0);
+				double sample = DistributionsInterpreter.matchDistribution(expression);
+				if (sample != Double.NaN) {
+//					if(sample < 0) {
+						Math.abs(sample);
+//					}
+					IRealValue result = new RealValue();
+					result.setValue(sample);
+					result.setType((PrimitiveType) this.locus.getFactory().getBuiltInType("Real"));
+
+					return result;
+				} else {
+					System.out.println("Pb !!!");
+				}
+
+			}
+
+		}
+
+		return super.evaluate();
+	}
+
+}
\ No newline at end of file
diff --git a/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/semantics/StochasticSendTimeEventOccurrence.java b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/semantics/StochasticSendTimeEventOccurrence.java
new file mode 100644
index 0000000..5be6123
--- /dev/null
+++ b/stochastic/org.eclipse.papyrus.moka.engine.uml.stochastic/src/org/eclipse/papyrus/moka/engine/uml/stochastic/semantics/StochasticSendTimeEventOccurrence.java
@@ -0,0 +1,55 @@
+/*****************************************************************************
+ * Copyright (c) 2023 CEA LIST.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *  CEA LIST Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.moka.engine.uml.stochastic.semantics;
+
+import org.eclipse.papyrus.moka.engine.uml.time.actions.SendTimeEventOccurrence;
+import org.eclipse.papyrus.moka.engine.uml.time.scheduling.de.DEScheduler;
+import org.eclipse.papyrus.moka.fuml.activities.IActivityExecution;
+import org.eclipse.papyrus.moka.fuml.loci.ISemanticVisitor;
+import org.eclipse.papyrus.moka.fuml.simpleclassifiers.IRealValue;
+import org.eclipse.papyrus.moka.fuml.structuredclassifiers.IObject_;
+import org.eclipse.papyrus.moka.fuml.structuredclassifiers.IReference;
+import org.eclipse.papyrus.moka.fuml.structuredclassifiers.Reference;
+
+public class StochasticSendTimeEventOccurrence extends SendTimeEventOccurrence {
+	private IRealValue evaluationValue;
+	private IActivityExecution activityExecution;
+	
+
+	public StochasticSendTimeEventOccurrence(IRealValue evaluationValue, double referenceInstant,
+			ISemanticVisitor visitor, IObject_ target, IActivityExecution activityExecution) {
+		super(referenceInstant, visitor, target);
+		this.evaluationValue = evaluationValue;
+		this.activityExecution = activityExecution;
+	}
+
+	@Override
+	public void execute() {
+		// Register a time event occurrence to the target object. This
+		// enables the target object classifier behavior to react (if possible)
+		// to the fact that clock time has evolved.
+		StochasticEventOccurrence eventOccurrence = new StochasticEventOccurrence();
+		eventOccurrence.setReferenceInstant(this.referenceInstant);
+		eventOccurrence.setOccurrenceInstant(DEScheduler.getInstance().getCurrentTime());
+		IReference targetReference = new Reference();
+		targetReference.setReferent(this.target);
+		eventOccurrence.setTarget(targetReference);
+		eventOccurrence.register();
+		eventOccurrence.setEvaluationValue(evaluationValue);
+	}
+
+	public IActivityExecution getActivityExecution() {
+		return activityExecution;
+	}
+}
