diff --git a/public/activity_1/main-script.js b/public/activity_1/main-script.js
index 8e6d880842d5634c2962d68fc0609d8c71692f5a..b99cf1423fb68b50dcafa5a215836a4c984f9a15 100644
--- a/public/activity_1/main-script.js
+++ b/public/activity_1/main-script.js
@@ -1,9 +1,11 @@
 /* Insérer ici les fonctions spécifiques à cette activité. Elles peuvent marcher
 avec les fonctions et variables déjà définies dans 'activity_functions.js' du
 dossier 'res'.*/
-var reedsStatus = null;
+var reedsStatus = {LH2 : false, LOX2 : false, RP1 : false, LOX1 : false}
 var catchedFull = {LH2 : false, LOX2 : false, RP1 : false, LOX1 : false}
 var catchTime = {LH2 : -1, LOX2 : -1, RP1 : -1, LOX1 : -1}
+var stopTimeouts = {}
+var circuitTemp = 5;
 
 var checkReedsInterval = setInterval(function() {
   if (receivedMsg.startsWith('REEDS')) {
@@ -20,7 +22,7 @@ var checkReedsInterval = setInterval(function() {
     if (catchTime[key] != -1 && !catchedFull[key]) {
       if (Date.now() - catchTime[key] > 3000) {
         catchedFull[key] = true
-        alert("Aie aie aie ! Débordement non maitrisé !")
+        alert("Aïe Aïe Aïe ! Débordement non maitrisé !")
       }
     }
   }
@@ -29,9 +31,18 @@ var checkReedsInterval = setInterval(function() {
 function init_var() {
   catchedFull = {LH2 : false, LOX2 : false, RP1 : false, LOX1 : false}
   catchTime = {LH2 : -1, LOX2 : -1, RP1 : -1, LOX1 : -1}
-  reedsStatus = null
+  reedsStatus = {LH2 : false, LOX2 : false, RP1 : false, LOX1 : false}
+  stopTimeouts = {}
+  circuitTemp = 5
 }
     
+function getCircuitTemperature() {
+  return circuitTemp
+}
+
+function coolCircuit() {
+  circuitTemp -= 10
+}
 
 function isTankFull(tankId) {
   if (reedsStatus == null) return false
@@ -40,7 +51,24 @@ function isTankFull(tankId) {
   }
 }
 
+function unloadFuel(tankId) {
+  sendString("UNLOAD_" + tankId + ";")
+}
+
+function loadFuel(tankId) {
+  sendString("LOAD_" + tankId + ";")
+  console.log("load", tankId)
+  if (stopTimeouts[tankId]) {
+    if (stopTimeouts[tankId] != null)
+      clearTimeout(stopTimeouts[tankId])
+      stopTimeouts[tankId] = null
+  }
+  stopTimeouts[tankId] = setTimeout(() => {stopLoading(tankId);}, 2000)
+}
+
 function stopLoading(tankId) {
+  console.log("stop fuel loading on", tankId)
+  sendString("STOP_" + tankId + ";")
   if (reedsStatus[tankId]) {
     catchedFull[tankId] = true
   }
diff --git a/public/activity_1/toolbox.xml b/public/activity_1/toolbox.xml
index d4bc946bf4fe3a7eb4826d1a3670c79540dcc637..6a5b4149f85d7baa428b8efb166cc88fc74bab6f 100644
--- a/public/activity_1/toolbox.xml
+++ b/public/activity_1/toolbox.xml
@@ -36,6 +36,9 @@
     <block type="logic_boolean">
       <field name="BOOL">TRUE</field>
     </block>
+    <block type="math_number">
+      <field name="NUM">0</field>
+    </block>
   </category>
   <category name="Boucles" colour="#5ba55b">
     <block type="controls_whileUntil">
diff --git a/public/activity_3/toolbox.xml b/public/activity_3/toolbox.xml
index ffb5a52c7967d321f71a25e43eed24730aa1bfc7..30f1f97a383c672b9fc728fc161f2255e9bbb838 100644
--- a/public/activity_3/toolbox.xml
+++ b/public/activity_3/toolbox.xml
@@ -18,16 +18,14 @@
     <block type="logic_operation">
       <field name="OP">AND</field>
     </block>
+    <block type="math_number">
+      <field name="NUM">0</field>
+    </block>
     <block type="logic_negate"></block>
     <block type="logic_boolean">
       <field name="BOOL">TRUE</field>
     </block>
   </category>
-  <category name="Maths" colour="#5b67a5">
-    <block type="math_number">
-      <field name="NUM">0</field>
-    </block>
-  </category>
   <category name="Boucles" colour="#5ba55b">
     <block type="controls_whileUntil">
       <field name="MODE">WHILE</field>
diff --git a/public/res/activity_functions.js b/public/res/activity_functions.js
index 391dc5d9cfe27d92baa0045678cb5024eb9d35fa..e1c02b69db1fe6db6b0ff13f18fe6415d0d0c53d 100644
--- a/public/res/activity_functions.js
+++ b/public/res/activity_functions.js
@@ -11,6 +11,7 @@ var receivedMsg = "";
 var port;
 let textEncoder = new TextEncoder();
 
+var pid = 0;
 
 function highlightBlock(id) {
   workspace.highlightBlock(id);
@@ -18,13 +19,14 @@ function highlightBlock(id) {
 
 //Lance le code tel que rentré par le joueur
 function runCode() {
+	if (pid != 0) clearTimeout(pid)
 	init_var();
 	var code = Blockly.JavaScript.workspaceToCode(workspace); //On récupère un code javascript
 	console.log(code)
 	var myInterpreter = new Interpreter(code, initApi); //Intanciation d'une VM avec fonctions réécrites
 	function nextStep() {
   	if (myInterpreter.step()) {
-    	setTimeout(nextStep, 10);
+    	pid = setTimeout(nextStep, 10);
   	}
 	}
 	nextStep();
@@ -77,7 +79,37 @@ function changeVar(variable, value) {
 
 //Interprétation des commandes par l'utiliseur (redéfinition des fonctions avec IO)
 function initApi(interpreter, scope) {
-  var wrapper = function(text) {
+	var wrapper = function(text) {
+		return getCircuitTemperature();
+	};
+	interpreter.setProperty(scope, 'getCircuitTemperature',
+	interpreter.createNativeFunction(wrapper));
+
+	var wrapper = function(text) {
+		return coolCircuit();
+	};
+	interpreter.setProperty(scope, 'coolCircuit',
+	interpreter.createNativeFunction(wrapper));
+
+	var wrapper = function(text) {
+		return isTankFull(arguments.length ? text : '');
+	};
+	interpreter.setProperty(scope, 'isTankFull',
+	interpreter.createNativeFunction(wrapper));
+
+	var wrapper = function(text) {
+		return loadFuel(arguments.length ? text : '');
+	};
+	interpreter.setProperty(scope, 'loadFuel',
+	interpreter.createNativeFunction(wrapper));
+
+	var wrapper = function(text) {
+		return unloadFuel(arguments.length ? text : '');
+	};
+	interpreter.setProperty(scope, 'unloadFuel',
+	interpreter.createNativeFunction(wrapper));
+
+  	var wrapper = function(text) {
 		return enableManual();
 	};
 	interpreter.setProperty(scope, 'enableManual',
diff --git a/public/res/blocks/arduino_blocks_def.js b/public/res/blocks/arduino_blocks_def.js
index ec901a10eb511c62ec894c2948ad0123341a6db4..371c85fa1cc1b781ea8274cf61956638188ab3e4 100644
--- a/public/res/blocks/arduino_blocks_def.js
+++ b/public/res/blocks/arduino_blocks_def.js
@@ -63,10 +63,8 @@ Blockly.Blocks['load_fuel'] = {
   init: function() {
     this.appendDummyInput()
         .setAlign(Blockly.ALIGN_CENTRE)
-        .appendField("Charger du")
-        .appendField(new Blockly.FieldDropdown([["RP1 (Kérosène)","0"], ["LH2 (Hydrogène)","1"], ["LOX (Oxygène)","2"]]), "fuel_type")
-        .appendField("dans l'étage")
-        .appendField(new Blockly.FieldNumber(0, 1, 3, 1), "stage");
+        .appendField("Charger le")
+        .appendField(new Blockly.FieldDropdown([["RP1 (Kérosène) étage 1","RP1"], ["LH2 (Hydrogène) étage 2","LH2"], ["LOX (Oxygène) étage 1","LOX1"], ["LOX (Oxygène) étage 2","LOX"]]), "fuel_type")
     this.setPreviousStatement(true, null);
     this.setNextStatement(true, null);
     this.setColour(0);
@@ -102,9 +100,8 @@ Blockly.Blocks['is_tank_full'] = {
   init: function() {
     this.appendDummyInput()
         .appendField("le")
-        .appendField(new Blockly.FieldDropdown([["RP1 (Kérosène)","0"], ["LH2 (Hydrogène)","1"], ["LOX (Oxygène)","2"]]), "fuel_type")
-        .appendField("est plein à l'étage")
-        .appendField(new Blockly.FieldNumber(0, 1, 3, 1), "stage");
+        .appendField(new Blockly.FieldDropdown([["RP1 (Kérosène) étage 1","RP1"], ["LH2 (Hydrogène) étage 2","LH2"], ["LOX (Oxygène) étage 1","LOX1"], ["LOX (Oxygène) étage 2","LOX"]]), "fuel_type")
+        .appendField("est plein")
     this.setOutput(true, "Boolean");
     this.setColour(230);
  this.setTooltip("Est-ce que ce réservoir de carburant est plein ?");
@@ -137,7 +134,7 @@ Blockly.Blocks['is_computer_ok'] = {
 Blockly.Blocks['fix_leak'] = {
   init: function() {
     this.appendDummyInput()
-        .appendField("Envoyer une équipe pour réparer la fuite");
+        .appendField("Envoyer une équipe pour réparer la fuite et attendre");
     this.setPreviousStatement(true, null);
     this.setNextStatement(true, null);
     this.setColour(0);
diff --git a/public/res/blocks/arduino_blocks_gen.js b/public/res/blocks/arduino_blocks_gen.js
index 154eb320017c854b7c532d8e734d2cbc2ec94d65..05490e6a1cdb43d01a58fa3ec6cacb9417dd9e7f 100644
--- a/public/res/blocks/arduino_blocks_gen.js
+++ b/public/res/blocks/arduino_blocks_gen.js
@@ -34,63 +34,61 @@ Blockly.JavaScript['turn_io'] = function(block) {
 
 Blockly.JavaScript['load_fuel'] = function(block) {
   var dropdown_fuel_type = block.getFieldValue('fuel_type');
-  var number_stage = block.getFieldValue('stage');
   // TODO: Assemble JavaScript into code variable.
-  var code = '...;\n';
+  var code = 'loadFuel("' + dropdown_fuel_type + '"); \n';
   return code;
 };
 
 Blockly.JavaScript['cool_circuit'] = function(block) {
   // TODO: Assemble JavaScript into code variable.
-  var code = '...;\n';
+  var code = 'coolCircuit()\n';
   return code;
 };
 
 Blockly.JavaScript['get_circuit_temperature'] = function(block) {
   // TODO: Assemble JavaScript into code variable.
-  var code = '...';
+  var code = 'getCircuitTemperature()';
   // TODO: Change ORDER_NONE to the correct strength.
   return [code, Blockly.JavaScript.ORDER_NONE];
 };
 
 Blockly.JavaScript['is_tank_full'] = function(block) {
   var dropdown_fuel_type = block.getFieldValue('fuel_type');
-  var number_stage = block.getFieldValue('stage');
   // TODO: Assemble JavaScript into code variable.
-  var code = '...';
+  var code = 'isTankFull("' + dropdown_fuel_type + '")';
   // TODO: Change ORDER_NONE to the correct strength.
   return [code, Blockly.JavaScript.ORDER_NONE];
 };
 
 Blockly.JavaScript['is_leak_detected'] = function(block) {
   // TODO: Assemble JavaScript into code variable.
-  var code = '...';
+  var code = 'true';
   // TODO: Change ORDER_NONE to the correct strength.
   return [code, Blockly.JavaScript.ORDER_NONE];
 };
 
 Blockly.JavaScript['is_computer_ok'] = function(block) {
   // TODO: Assemble JavaScript into code variable.
-  var code = '...';
+  var code = 'true';
   // TODO: Change ORDER_NONE to the correct strength.
   return [code, Blockly.JavaScript.ORDER_NONE];
 };
 
 Blockly.JavaScript['fix_leak'] = function(block) {
   // TODO: Assemble JavaScript into code variable.
-  var code = '...;\n';
+  var code = 'alert("Les techniciens ont réussi à fixer la fuite, la mission peut reprendre !");\n';
   return code;
 };
 
 Blockly.JavaScript['pause_launch'] = function(block) {
   // TODO: Assemble JavaScript into code variable.
-  var code = '...;\n';
+  var code = 'alert("Le décompte de lancement a été mis en pause !");\n';
   return code;
 };
 
 Blockly.JavaScript['go_lift'] = function(block) {
   // TODO: Assemble JavaScript into code variable.
-  var code = '...;\n';
+  var code = 'alert("Les astronautes sont arrivés au 320e étage et vont embarquer !");\n';
   return code;
 };