diff --git a/arduino/act1/act1.ino b/arduino/act1/act1.ino
index d72520e31ad13bcff04f254336df11ca2b495aee..f02e2a6b3a1e80555c444df91297e6e795a4bd26 100644
--- a/arduino/act1/act1.ino
+++ b/arduino/act1/act1.ino
@@ -17,6 +17,7 @@
 
 String currentCommand = "";
 unsigned long prevTime = 0;
+boolean unloading[4] = {false, false, false, false};
 
 WebUSB WebUSBSerial(1 /* https:// */, "pole-jeune.pages.clubelek.fr/atelier_igb_apollo/activity_1/");
 #define Serial WebUSBSerial
@@ -24,10 +25,20 @@ WebUSB WebUSBSerial(1 /* https:// */, "pole-jeune.pages.clubelek.fr/atelier_igb_
 void loadProp(String tank) {
   if (tank == "RP1") {
     digitalWrite(IN1_1, LOW);
-    digitalWrite(IN2_1, HIGH);
+    digitalWrite(IN2_1, HIGH);   
+    unloading[2] = false;
   } else if (tank == "LH2") {
     digitalWrite(IN3_1, HIGH);
-    digitalWrite(IN4_1, LOW);
+    digitalWrite(IN4_1, LOW);   
+    unloading[0] = false;
+  } else if (tank == "LOX1") {
+    digitalWrite(IN1_2, LOW);
+    digitalWrite(IN2_2, HIGH);   
+    unloading[3] = false;
+  } else if (tank == "LOX2") {
+    digitalWrite(IN3_2, HIGH);
+    digitalWrite(IN4_2, LOW);   
+    unloading[1] = false;
   }
 }
 
@@ -35,9 +46,19 @@ void unloadProp(String tank) {
   if (tank == "RP1") {
     digitalWrite(IN1_1, HIGH);
     digitalWrite(IN2_1, LOW);
+    unloading[2] = true;
   } else if (tank == "LH2") {
     digitalWrite(IN3_1, LOW);
     digitalWrite(IN4_1, HIGH);
+    unloading[0] = true;
+  } else if (tank == "LOX1") {
+    digitalWrite(IN1_2, HIGH);
+    digitalWrite(IN2_2, LOW);   
+    unloading[3] = true;
+  } else if (tank == "LOX2") {
+    digitalWrite(IN3_2, LOW);
+    digitalWrite(IN4_2, HIGH);   
+    unloading[1] = true;
   }
 }
 
@@ -45,9 +66,19 @@ void stopLoading(String tank) {
   if (tank == "RP1") {
     digitalWrite(IN1_1, LOW);
     digitalWrite(IN2_1, LOW);
+    unloading[2] = false;
   } else if (tank == "LH2") {
     digitalWrite(IN3_1, LOW);
     digitalWrite(IN4_1, LOW);
+    unloading[0] = false;
+  } else if (tank == "LOX1") {
+    digitalWrite(IN1_2, LOW);
+    digitalWrite(IN2_2, LOW);   
+    unloading[3] = false;
+  } else if (tank == "LOX2") {
+    digitalWrite(IN3_2, LOW);
+    digitalWrite(IN4_2, LOW);   
+    unloading[1] = false;
   }
 }
 
@@ -100,15 +131,23 @@ void setup() {
 
   loadProp("LH2");
   loadProp("RP1");
+  loadProp("LOX1");
+  loadProp("LOX2");
   delay(3000);
   stopLoading("LH2");
   stopLoading("RP1");
+  stopLoading("LOX1");
+  stopLoading("LOX2");
   delay(1000);
   unloadProp("LH2");
   unloadProp("RP1");
-  delay(3000);
+  unloadProp("LOX1");
+  unloadProp("LOX2");
+  delay(6000);
   stopLoading("LH2");
   stopLoading("RP1");
+  stopLoading("LOX1");
+  stopLoading("LOX2");
   Serial.flush();
 }
 
@@ -117,25 +156,31 @@ void loop() {
   
 
   if (millis() - prevTime >= 1000) {
-    Serial.print("REEDS_{LH2 :");
+    Serial.print("REEDS_{\"LH2\":");
     Serial.print(digitalRead(REED_LH2));
-    Serial.print(", LOX2 :");
+    Serial.print(",\"LOX2\":");
     Serial.print(digitalRead(REED_LOX2));
-    Serial.print(", RP1 :");
+    Serial.print(",\"RP1\":");
     Serial.print(digitalRead(REED_RP1));
-    Serial.print(", LOX1 :");
+    Serial.print(",\"LOX1\":");
     Serial.print(digitalRead(REED_LOX1));
     Serial.println("}");
     prevTime = millis();
   }
   
-  if (digitalRead(REED_LH2)) {
+  if (digitalRead(REED_LH2) && !unloading[0]) {
     stopLoading("LH2");
   }
-  if (digitalRead(REED_RP1)) {
+  if (digitalRead(REED_RP1) && !unloading[2]) {
     stopLoading("RP1");
   }
-
+  /*if (digitalRead(REED_LOX1) && !unloading[3]) {
+    stopLoading("LOX1");
+  }*/
+  if (digitalRead(REED_LOX2) && !unloading[1]) {
+    stopLoading("LOX2");
+  }
+  
   if (Serial) {
     while (Serial.available() > 0) {
       char c = '0';
@@ -149,5 +194,4 @@ void loop() {
     }
     Serial.flush();
   }
-}
-
+}
\ No newline at end of file
diff --git a/doc/Atelier 1.docx b/doc/Atelier 1.docx
new file mode 100644
index 0000000000000000000000000000000000000000..493b605ef624a4fa5ee4c9edd36b9db3ceecad4e
Binary files /dev/null and b/doc/Atelier 1.docx differ
diff --git a/doc/Atelier 1.pdf b/doc/Atelier 1.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..51f85fbab5f7fc799e8409e11b715f4a7b92b6b1
Binary files /dev/null and b/doc/Atelier 1.pdf differ
diff --git a/public/activity_1/index.html b/public/activity_1/index.html
index 206a8042d20c5df1758ce5ee3bc5cb05e4dbae02..34fc9d53404c7ce1d7a44c9e4dfe68edb5244a81 100644
--- a/public/activity_1/index.html
+++ b/public/activity_1/index.html
@@ -24,6 +24,18 @@
 
 
 	<body>
+		<div id="intro_modal" class="modal">
+			<div class="modal-content">
+			  <span class="close">&times;</span>
+				  <h1 style="text-align: center;">Bienvenue dans la mission 1 !</h2>
+				  <p>La fusée est sur le pas de tir ! Les astronautes se préparent à embarquer. L’heure du décollage approche ! C’est le début de la fin de la grande aventure Apollo 11 ! </p>
+				  <p>Avant que les astronautes n’embarquent dans la fusée, il faut y charger le carburant. Et ce n’est pas une mince affaire ! Il s’agit de l’une des fusées les plus puissantes de tous les temps : la Saturne V ! Elle fait 110m de haut !</p>
+				  <p>La fusée utilise plusieurs carburants et a 3 étages (avec chacun leurs réservoirs et leurs moteurs). Ici on ne va s’occuper que des étages 1 et 2. L’étage 1 contient du RP1, un dérivé du kérozène, et de l’oxygène liquide (à -250°C). L’étage 2 fonctionne lui à l’hydrogène liquide (aussi appelé LH2) et à l’oxygène liquide. </p>
+				  <p>Il vous faudra donc charger le carburant dans chaque étage, ce à la bonne température tout en veillant à ce qu’il n’y ait pas de fuite ! Bien sur, il ne faudra également pas déborder !</p>
+				  
+				<p style="text-align: center;"><strong >Bon courage !</strong></p>	  </p>
+			</div>
+		  </div>
 		<header id="header"></header>
 
 		<section class="mainSection">
@@ -33,7 +45,39 @@
 			</div>
 
 			<div id="toolsArea">
-				<div id="animationArea"></div>
+				<div id="animationArea">
+					<div id ="desc_1" class="consignes">
+						<p style="text-align: center;"><strong>Partie 1 : Charger le RP1 dans l'&eacute;tage 1</strong></p>
+						<p>Vous disposez dans chaque r&eacute;servoir d'un capteur qui permet de savoir quand il est plein. Vous pouvez ordonner &agrave; la maquette de charger le r&eacute;servoir, via des pompes.&nbsp;</p>
+						<p>Dans cette partie, on ne consid&egrave;re aucun risque de fuite ni de refroidissement n&eacute;cessaire (ce qui est faux dans le cas r&eacute;el).&nbsp;</p>
+						<p>Votre premi&egrave;re mission ? Charger le RP1 dans la fus&eacute;e sans faire d&eacute;border le r&eacute;servoir ni le sous remplir !</p>
+						<button onclick="displayConsignes('desc_2')">Passer à la partie suivante</button>
+					</div>
+					<div id ="desc_2" class="consignes">
+						<p style="text-align: center;"><strong>Partie 2 : Charger le LH2 dans l'&eacute;tage 2</strong></p>
+						<p>Vous devez cette fois charger l'hydrog&egrave;ne liquide dans le 2e &eacute;tage. Mais attention, il faut qu'il soit &agrave; temp&eacute;rature assez basse. Soit -250&deg;C ! Sinon les r&eacute;servoirs et les conduits pourraient exploser sous l'effet de la pression !</p>
+						<p>Pour cela, vous pouvez lire la temp&eacute;rature des circuits de LOX et LH2 et choisir de les refroidir. Tout en chargeant le carburant de mani&egrave;re similaire &agrave; la partie 1.</p>
+						<button onclick="displayConsignes('desc_1')">Revenir à la partie précédente</button>
+						<button onclick="displayConsignes('desc_3')">Passer à la partie suivante</button>
+					</div>
+					<div id ="desc_3" class="consignes">
+						<p style="text-align: center;"><strong>Partie 3 : D&eacute;fis ! Chargez les deux r&eacute;servoirs de LOX en m&ecirc;me temps !</strong></p>
+						<p>Vous devez cette fois charger l'oxyg&egrave;ne liquide dans le 1er et le 2e &eacute;tage. Mais attention, il faut qu'il soit &agrave; temp&eacute;rature assez basse. Soit -250&deg;C ! Sinon les r&eacute;servoirs et les conduits pourraient exploser sous l'effet de la pression !</p>
+						<p>Pour cela, vous pouvez lire la temp&eacute;rature des circuits de LOX et LH2 et choisir de les refroidir. Tout en chargeant le carburant de mani&egrave;re similaire &agrave; la partie 1 et 2. Il faudra cependant faire attention &agrave; bien charger les deux r&eacute;servoirs au maximum et le faire en m&ecirc;me temps.</p>
+						<p>Vous devrez &eacute;galement v&eacute;rifier &agrave; tout moment la pr&eacute;sence de fuite sur les conduits. S'il y a une fuite, vous devrez d'abord mettre en pause le d&eacute;compte de lancement puis envoyer une &eacute;quipe pour r&eacute;parer la fuite.</p>
+						<p style="text-align: center;"><strong>Bon courage !</strong></p>
+						<button onclick="displayConsignes('desc_2')">Revenir à la partie précédente</button>
+						<button onclick="displayConsignes('desc_4')">Passer à la partie suivante</button>
+					</div>
+					<div id ="desc_4" class="consignes">
+						<p style="text-align: center;"><strong>Partie 4 : Faire monter les astronautes !</strong></p>
+						<p>Bravo ! Vous avez r&eacute;ussi le plus dur !&nbsp;</p>
+						<p>Tout est pr&ecirc;t. V&eacute;rifiez si les syst&egrave;mes &eacute;lectroniques fonctionnent bien tous et si c'est le cas, vous pouvez faire monter les astronautes !</p>
+						<p>&nbsp;</p>
+						<p>Le code de cette mission vous serra donn&eacute; par l'encadrant :)</p>
+						<button onclick="displayConsignes('desc_3')">Revenir à la partie précédente</button>
+					</div>
+				</div>
 				<a class="button" id="connectButton">Connecter à la maquette</a>
 				<a class="button" id="runButton">Lancer le programme !</a>
 			</div>
diff --git a/public/activity_1/main-script.js b/public/activity_1/main-script.js
index b99cf1423fb68b50dcafa5a215836a4c984f9a15..299c166b68869089e0d91d184d6c237e27445691 100644
--- a/public/activity_1/main-script.js
+++ b/public/activity_1/main-script.js
@@ -1,11 +1,47 @@
 /* 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'.*/
+
+/* GESTION DES POPUP*/
+
+// Gets the modal (intiated as the intro_modal at first)
+var modal = document.getElementById("intro_modal");
+// Get the <span> element that closes the modal
+var span = document.getElementsByClassName("close")[0];
+
+// Displays the modal when DOM is Loaded
+document.addEventListener('DOMContentLoaded', event => {
+  modal.style.display = "block";
+});
+// When the user clicks on <span> (x), close the modal
+span.onclick = function() {
+  modal.style.display = "none";
+}
+// When the user clicks anywhere outside of the modal, close it
+window.onclick = function(event) {
+  if (event.target == modal) {
+    modal.style.display = "none";
+  }
+}
+
+function displayConsignes(id) {
+  var x = document.getElementsByClassName("consignes");
+  var i;
+  for (i = 0; i < x.length; i++) {
+     x[i].style.display = "none";
+   }
+  var consignesDiv = document.getElementById(id);
+  consignesDiv.style.display = 'block';
+}
+
+displayConsignes("desc_1");
+
 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 leakFixed = false;
 
 var checkReedsInterval = setInterval(function() {
   if (receivedMsg.startsWith('REEDS')) {
@@ -20,7 +56,7 @@ var checkReedsInterval = setInterval(function() {
   }
   for (var key of Object.keys(catchedFull)) {
     if (catchTime[key] != -1 && !catchedFull[key]) {
-      if (Date.now() - catchTime[key] > 3000) {
+      if (Date.now() - catchTime[key] > 5000) {
         catchedFull[key] = true
         alert("Aïe Aïe Aïe ! Débordement non maitrisé !")
       }
@@ -29,14 +65,22 @@ var checkReedsInterval = setInterval(function() {
 }, 250);
 
 function init_var() {
-  catchedFull = {LH2 : false, LOX2 : false, RP1 : false, LOX1 : false}
-  catchTime = {LH2 : -1, LOX2 : -1, RP1 : -1, LOX1 : -1}
   reedsStatus = {LH2 : false, LOX2 : false, RP1 : false, LOX1 : false}
   stopTimeouts = {}
   circuitTemp = 5
+  leakFixed = false;
+}
+
+function fixLeak() {
+  leakFixed = true
 }
     
+function isLeakFixed() {
+  return leakFixed
+}
+
 function getCircuitTemperature() {
+  circuitTemp++
   return circuitTemp
 }
 
diff --git a/public/activity_3/main-script.js b/public/activity_3/main-script.js
index 2be91f846d43086ffeea575d565d0737b2737675..368fc983ef907d934a41c51a5ad66eb03bccc29b 100644
--- a/public/activity_3/main-script.js
+++ b/public/activity_3/main-script.js
@@ -179,7 +179,7 @@ function stepSimulation(prevTime) {
       })
       
     } else {
-      alert("Bravo ! Vous avez aluni à la bonne vitesse !")
+      alert("Bravo ! Vous avez aluni à la bonne vitesse ! Le code de cette mission est 1969")
     }
   } else {
     simu_timeouts.push(setTimeout(function() {stepSimulation(t)}, 40))
diff --git a/public/res/activity_functions.js b/public/res/activity_functions.js
index e1c02b69db1fe6db6b0ff13f18fe6415d0d0c53d..8013c40520a755e5f3eaa5532f140b008fbe0cfb 100644
--- a/public/res/activity_functions.js
+++ b/public/res/activity_functions.js
@@ -91,6 +91,18 @@ function initApi(interpreter, scope) {
 	interpreter.setProperty(scope, 'coolCircuit',
 	interpreter.createNativeFunction(wrapper));
 
+	var wrapper = function(text) {
+		return fixLeak();
+	};
+	interpreter.setProperty(scope, 'fixLeak',
+	interpreter.createNativeFunction(wrapper));
+
+	var wrapper = function(text) {
+		return isLeakFixed();
+	};
+	interpreter.setProperty(scope, 'isLeakFixed',
+	interpreter.createNativeFunction(wrapper));
+
 	var wrapper = function(text) {
 		return isTankFull(arguments.length ? text : '');
 	};
diff --git a/public/res/blocks/arduino_blocks_gen.js b/public/res/blocks/arduino_blocks_gen.js
index 05490e6a1cdb43d01a58fa3ec6cacb9417dd9e7f..dce1eea15be74695fc66942be0e644eef1cb64ac 100644
--- a/public/res/blocks/arduino_blocks_gen.js
+++ b/public/res/blocks/arduino_blocks_gen.js
@@ -60,9 +60,11 @@ Blockly.JavaScript['is_tank_full'] = function(block) {
   return [code, Blockly.JavaScript.ORDER_NONE];
 };
 
+
+
 Blockly.JavaScript['is_leak_detected'] = function(block) {
   // TODO: Assemble JavaScript into code variable.
-  var code = 'true';
+  var code = '!isLeakFixed()';
   // TODO: Change ORDER_NONE to the correct strength.
   return [code, Blockly.JavaScript.ORDER_NONE];
 };
@@ -76,7 +78,7 @@ Blockly.JavaScript['is_computer_ok'] = function(block) {
 
 Blockly.JavaScript['fix_leak'] = function(block) {
   // TODO: Assemble JavaScript into code variable.
-  var code = 'alert("Les techniciens ont réussi à fixer la fuite, la mission peut reprendre !");\n';
+  var code = 'fixLeak(); \n alert("Les techniciens ont réussi à fixer la fuite, la mission peut reprendre !");\n';
   return code;
 };