diff --git a/.gradle/8.4/checksums/checksums.lock b/.gradle/8.4/checksums/checksums.lock
new file mode 100644
index 0000000000000000000000000000000000000000..687f4f2689f36141e55132a03a06f37ea20d28c3
Binary files /dev/null and b/.gradle/8.4/checksums/checksums.lock differ
diff --git a/.gradle/8.4/dependencies-accessors/dependencies-accessors.lock b/.gradle/8.4/dependencies-accessors/dependencies-accessors.lock
new file mode 100644
index 0000000000000000000000000000000000000000..c150f374e8350fdc4d0b480b32e0bc156ecdb4f0
Binary files /dev/null and b/.gradle/8.4/dependencies-accessors/dependencies-accessors.lock differ
diff --git a/.gradle/8.4/dependencies-accessors/gc.properties b/.gradle/8.4/dependencies-accessors/gc.properties
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/.gradle/8.4/executionHistory/executionHistory.bin b/.gradle/8.4/executionHistory/executionHistory.bin
new file mode 100644
index 0000000000000000000000000000000000000000..cd185bc582a0f489888b574664842f97427b3965
Binary files /dev/null and b/.gradle/8.4/executionHistory/executionHistory.bin differ
diff --git a/.gradle/8.4/executionHistory/executionHistory.lock b/.gradle/8.4/executionHistory/executionHistory.lock
new file mode 100644
index 0000000000000000000000000000000000000000..b0eb98842eda3fa8e9d6fde7acfb58ee0504e7c4
Binary files /dev/null and b/.gradle/8.4/executionHistory/executionHistory.lock differ
diff --git a/.gradle/8.4/fileChanges/last-build.bin b/.gradle/8.4/fileChanges/last-build.bin
new file mode 100644
index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d
Binary files /dev/null and b/.gradle/8.4/fileChanges/last-build.bin differ
diff --git a/.gradle/8.4/fileHashes/fileHashes.bin b/.gradle/8.4/fileHashes/fileHashes.bin
new file mode 100644
index 0000000000000000000000000000000000000000..a6033345fa086c28fa693303e7b630d6d3d901cb
Binary files /dev/null and b/.gradle/8.4/fileHashes/fileHashes.bin differ
diff --git a/.gradle/8.4/fileHashes/fileHashes.lock b/.gradle/8.4/fileHashes/fileHashes.lock
new file mode 100644
index 0000000000000000000000000000000000000000..da13ab9353ced83645c5559a785a24c30dd34000
Binary files /dev/null and b/.gradle/8.4/fileHashes/fileHashes.lock differ
diff --git a/.gradle/8.4/fileHashes/resourceHashesCache.bin b/.gradle/8.4/fileHashes/resourceHashesCache.bin
new file mode 100644
index 0000000000000000000000000000000000000000..140ab407c66bf092f43e885dfedaf6efe6f82fea
Binary files /dev/null and b/.gradle/8.4/fileHashes/resourceHashesCache.bin differ
diff --git a/.gradle/8.4/gc.properties b/.gradle/8.4/gc.properties
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock
new file mode 100644
index 0000000000000000000000000000000000000000..72a5e081814c347e779fc9a70999b4a39d950740
Binary files /dev/null and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/.gradle/buildOutputCleanup/cache.properties b/.gradle/buildOutputCleanup/cache.properties
new file mode 100644
index 0000000000000000000000000000000000000000..90154715c19ffcb4cfd832c6c62fcfe3c445afac
--- /dev/null
+++ b/.gradle/buildOutputCleanup/cache.properties
@@ -0,0 +1,2 @@
+#Mon Nov 13 20:29:54 CET 2023
+gradle.version=8.4
diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin
new file mode 100644
index 0000000000000000000000000000000000000000..e4dbcd26775b77fdd318f2e906aa0ebb05955632
Binary files /dev/null and b/.gradle/buildOutputCleanup/outputFiles.bin differ
diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe
new file mode 100644
index 0000000000000000000000000000000000000000..e892a491542e10fac2c062d573d9d0cd0dc4280c
Binary files /dev/null and b/.gradle/file-system.probe differ
diff --git a/.gradle/vcs-1/gc.properties b/.gradle/vcs-1/gc.properties
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/build/classes/java/main/app/SimulatorApplication.class b/build/classes/java/main/app/SimulatorApplication.class
new file mode 100644
index 0000000000000000000000000000000000000000..b20b834ef489ed0cfcf6f12e7993b40632a049e9
Binary files /dev/null and b/build/classes/java/main/app/SimulatorApplication.class differ
diff --git a/build/classes/java/main/app/SimulatorMain.class b/build/classes/java/main/app/SimulatorMain.class
new file mode 100644
index 0000000000000000000000000000000000000000..4530cc2971636d0c78bcf91139a4f699c2f20eb4
Binary files /dev/null and b/build/classes/java/main/app/SimulatorMain.class differ
diff --git a/build/classes/java/main/controller/Controller.class b/build/classes/java/main/controller/Controller.class
new file mode 100644
index 0000000000000000000000000000000000000000..181db60987ef9e8df666c370fc44325db0cb5a41
Binary files /dev/null and b/build/classes/java/main/controller/Controller.class differ
diff --git a/build/classes/java/main/controller/PersistentToggleGroup.class b/build/classes/java/main/controller/PersistentToggleGroup.class
new file mode 100644
index 0000000000000000000000000000000000000000..5ccef4da42dee9301d32078f998d43094c421149
Binary files /dev/null and b/build/classes/java/main/controller/PersistentToggleGroup.class differ
diff --git a/build/classes/java/main/model/Board.class b/build/classes/java/main/model/Board.class
new file mode 100644
index 0000000000000000000000000000000000000000..a78d2b182c87683650b0972590097ab4611719be
Binary files /dev/null and b/build/classes/java/main/model/Board.class differ
diff --git a/build/classes/java/main/model/BoardElement.class b/build/classes/java/main/model/BoardElement.class
new file mode 100644
index 0000000000000000000000000000000000000000..b7da37d481527392ebf91688895cc27b0ede2413
Binary files /dev/null and b/build/classes/java/main/model/BoardElement.class differ
diff --git a/build/classes/java/main/model/Builder/ConcreteGameBuilder.class b/build/classes/java/main/model/Builder/ConcreteGameBuilder.class
new file mode 100644
index 0000000000000000000000000000000000000000..66850dd8e50d617a3da2c6c02c18f71cdc9daec6
Binary files /dev/null and b/build/classes/java/main/model/Builder/ConcreteGameBuilder.class differ
diff --git a/build/classes/java/main/model/Builder/FireFirefighterBuilder.class b/build/classes/java/main/model/Builder/FireFirefighterBuilder.class
new file mode 100644
index 0000000000000000000000000000000000000000..3b2ad97b21e91b398e478584610878b453c607cf
Binary files /dev/null and b/build/classes/java/main/model/Builder/FireFirefighterBuilder.class differ
diff --git a/build/classes/java/main/model/Builder/GameBuilder.class b/build/classes/java/main/model/Builder/GameBuilder.class
new file mode 100644
index 0000000000000000000000000000000000000000..6b7721744a4ab2dbde7979ff7263e54e46fac025
Binary files /dev/null and b/build/classes/java/main/model/Builder/GameBuilder.class differ
diff --git a/build/classes/java/main/model/Builder/GameManage.class b/build/classes/java/main/model/Builder/GameManage.class
new file mode 100644
index 0000000000000000000000000000000000000000..2720adbd99507a45b7ab9771d0535a07fb653449
Binary files /dev/null and b/build/classes/java/main/model/Builder/GameManage.class differ
diff --git a/build/classes/java/main/model/EmptyElement.class b/build/classes/java/main/model/EmptyElement.class
new file mode 100644
index 0000000000000000000000000000000000000000..5069ea14ef0a85701717a0b7537a043f6dcdd4af
Binary files /dev/null and b/build/classes/java/main/model/EmptyElement.class differ
diff --git a/build/classes/java/main/model/ExtinguishFire/Cloud.class b/build/classes/java/main/model/ExtinguishFire/Cloud.class
new file mode 100644
index 0000000000000000000000000000000000000000..9de56c2328937cd36048ec37406dc9240e0c39b7
Binary files /dev/null and b/build/classes/java/main/model/ExtinguishFire/Cloud.class differ
diff --git a/build/classes/java/main/model/ExtinguishFire/ExtinguishFire.class b/build/classes/java/main/model/ExtinguishFire/ExtinguishFire.class
new file mode 100644
index 0000000000000000000000000000000000000000..a4d622e74ad0dac8a1e1ee24f055fadd19df68df
Binary files /dev/null and b/build/classes/java/main/model/ExtinguishFire/ExtinguishFire.class differ
diff --git a/build/classes/java/main/model/ExtinguishFire/FireFighter.class b/build/classes/java/main/model/ExtinguishFire/FireFighter.class
new file mode 100644
index 0000000000000000000000000000000000000000..02776eb6f209146e6f2de1891a6ecafbc4aa688a
Binary files /dev/null and b/build/classes/java/main/model/ExtinguishFire/FireFighter.class differ
diff --git a/build/classes/java/main/model/ExtinguishFire/MotorizedFireFighter.class b/build/classes/java/main/model/ExtinguishFire/MotorizedFireFighter.class
new file mode 100644
index 0000000000000000000000000000000000000000..436df44dd36db05fd1c87bf02bf61944fcae213b
Binary files /dev/null and b/build/classes/java/main/model/ExtinguishFire/MotorizedFireFighter.class differ
diff --git a/build/classes/java/main/model/Flammable/Fire.class b/build/classes/java/main/model/Flammable/Fire.class
new file mode 100644
index 0000000000000000000000000000000000000000..a63719c958047acc25830722191a24670a97cbad
Binary files /dev/null and b/build/classes/java/main/model/Flammable/Fire.class differ
diff --git a/build/classes/java/main/model/Flammable/Flammable.class b/build/classes/java/main/model/Flammable/Flammable.class
new file mode 100644
index 0000000000000000000000000000000000000000..bf120cd5de3e083cfef4bb7079bfbbbd2f05fb97
Binary files /dev/null and b/build/classes/java/main/model/Flammable/Flammable.class differ
diff --git a/build/classes/java/main/model/GameBoard.class b/build/classes/java/main/model/GameBoard.class
new file mode 100644
index 0000000000000000000000000000000000000000..e7f7e68c6824b75a0258c2c6ecb4cd1b9dee4da3
Binary files /dev/null and b/build/classes/java/main/model/GameBoard.class differ
diff --git a/build/classes/java/main/model/Obstacle/Mountain.class b/build/classes/java/main/model/Obstacle/Mountain.class
new file mode 100644
index 0000000000000000000000000000000000000000..ab116eed640ff92a1960d9c887bc5a35d19df9b1
Binary files /dev/null and b/build/classes/java/main/model/Obstacle/Mountain.class differ
diff --git a/build/classes/java/main/model/Obstacle/Obstacles.class b/build/classes/java/main/model/Obstacle/Obstacles.class
new file mode 100644
index 0000000000000000000000000000000000000000..fff48ef4e9967a51eeca54cadce22b98a897ae4c
Binary files /dev/null and b/build/classes/java/main/model/Obstacle/Obstacles.class differ
diff --git a/build/classes/java/main/model/Obstacle/Road.class b/build/classes/java/main/model/Obstacle/Road.class
new file mode 100644
index 0000000000000000000000000000000000000000..2bfbc469870e9b39d3520e2a95d1bb670839ada4
Binary files /dev/null and b/build/classes/java/main/model/Obstacle/Road.class differ
diff --git a/build/classes/java/main/model/Visitor/CrossMountain.class b/build/classes/java/main/model/Visitor/CrossMountain.class
new file mode 100644
index 0000000000000000000000000000000000000000..ddbfddb8f7cee6c257ddbd45252852a741b3db40
Binary files /dev/null and b/build/classes/java/main/model/Visitor/CrossMountain.class differ
diff --git a/build/classes/java/main/model/Visitor/CrossRoad.class b/build/classes/java/main/model/Visitor/CrossRoad.class
new file mode 100644
index 0000000000000000000000000000000000000000..ee0df02352663a36d691bb3081a31d94c5028c0d
Binary files /dev/null and b/build/classes/java/main/model/Visitor/CrossRoad.class differ
diff --git a/build/classes/java/main/model/Visitor/FireFinder.class b/build/classes/java/main/model/Visitor/FireFinder.class
new file mode 100644
index 0000000000000000000000000000000000000000..05ddcb141f461b8f1e4f42cb7b2c32083b234b7f
Binary files /dev/null and b/build/classes/java/main/model/Visitor/FireFinder.class differ
diff --git a/build/classes/java/main/model/Visitor/Visitor.class b/build/classes/java/main/model/Visitor/Visitor.class
new file mode 100644
index 0000000000000000000000000000000000000000..d9ae8e3a8a6375c074840b3b24e35ce02a6d6b1e
Binary files /dev/null and b/build/classes/java/main/model/Visitor/Visitor.class differ
diff --git a/build/classes/java/main/module-info.class b/build/classes/java/main/module-info.class
new file mode 100644
index 0000000000000000000000000000000000000000..228b8be064ecf35c69bb788937ce7ff8ab50174e
Binary files /dev/null and b/build/classes/java/main/module-info.class differ
diff --git a/build/classes/java/main/util/Position.class b/build/classes/java/main/util/Position.class
new file mode 100644
index 0000000000000000000000000000000000000000..b01c34770ddcee9fb9247441aa31c14fcb6fc662
Binary files /dev/null and b/build/classes/java/main/util/Position.class differ
diff --git a/build/classes/java/main/view/FirefighterGrid.class b/build/classes/java/main/view/FirefighterGrid.class
new file mode 100644
index 0000000000000000000000000000000000000000..d2bbe7e11dd4d28c3fba73284af14ce15b59f73f
Binary files /dev/null and b/build/classes/java/main/view/FirefighterGrid.class differ
diff --git a/build/classes/java/main/view/Grid.class b/build/classes/java/main/view/Grid.class
new file mode 100644
index 0000000000000000000000000000000000000000..cedfc6abc7646d2aeb91d7df5227cbdb1cae0317
Binary files /dev/null and b/build/classes/java/main/view/Grid.class differ
diff --git a/build/resources/main/view/DarkTheme.css b/build/resources/main/view/DarkTheme.css
new file mode 100644
index 0000000000000000000000000000000000000000..46b78aaf90972dd435399466c9fd861ca73fc59f
--- /dev/null
+++ b/build/resources/main/view/DarkTheme.css
@@ -0,0 +1,142 @@
+.background {
+    -fx-background-color: #1d1d1d;
+}
+
+.label {
+    -fx-font-size: 11pt;
+    -fx-font-family: "Segoe UI Semibold";
+    -fx-text-fill: white;
+    -fx-opacity: 0.6;
+}
+
+.label-bright {
+    -fx-font-size: 11pt;
+    -fx-font-family: "Segoe UI Semibold";
+    -fx-text-fill: white;
+    -fx-opacity: 1;
+}
+
+.label-header {
+    -fx-font-size: 32pt;
+    -fx-font-family: "Segoe UI Light";
+    -fx-text-fill: white;
+    -fx-opacity: 1;
+}
+
+.table-view {
+    -fx-base: #1d1d1d;
+    -fx-control-inner-background: #1d1d1d;
+    -fx-background-color: #1d1d1d;
+    -fx-table-cell-border-color: transparent;
+    -fx-table-header-border-color: transparent;
+    -fx-padding: 5;
+}
+
+.table-view .column-header-background {
+    -fx-background-color: transparent;
+}
+
+.table-view .column-header, .table-view .filler {
+    -fx-border-width: 0 0 1 0;
+    -fx-background-color: transparent;
+    -fx-border-color: 
+        transparent
+        transparent
+        derive(-fx-base, 80%) 
+        transparent;
+    -fx-border-insets: 0 10 1 0;
+}
+
+.table-view .column-header .label {
+    -fx-font-size: 20pt;
+    -fx-font-family: "Segoe UI Light";
+    -fx-text-fill: white;
+    -fx-alignment: center-left;
+    -fx-opacity: 1;
+}
+
+.table-view:focused .table-row-cell:filled:focused:selected {
+    -fx-background-color: -fx-focus-color;
+}
+
+.split-pane:horizontal > .split-pane-divider {
+    -fx-border-color: transparent #1d1d1d transparent #1d1d1d;
+    -fx-background-color: transparent, derive(#1d1d1d,20%);
+}
+
+.split-pane {
+    -fx-padding: 1 0 0 0;
+}
+
+.menu-bar {
+    -fx-background-color: derive(#1d1d1d,20%);
+}
+
+.context-menu {
+    -fx-background-color: derive(#1d1d1d,50%);
+}
+
+.menu-bar .label {
+    -fx-font-size: 14pt;
+    -fx-font-family: "Segoe UI Light";
+    -fx-text-fill: white;
+    -fx-opacity: 0.9;
+}
+
+.menu .left-container {
+    -fx-background-color: black;
+}
+
+.text-field {
+    -fx-font-size: 12pt;
+    -fx-font-family: "Segoe UI Semibold";
+}
+
+/* 
+ * Metro style Push Button
+ * Author: Pedro Duque Vieira
+ * http://pixelduke.wordpress.com/2012/10/23/jmetro-windows-8-controls-on-java/
+ */
+.button {
+    -fx-padding: 5 22 5 22;   
+    -fx-border-color: #e2e2e2;
+    -fx-border-width: 2;
+    -fx-background-radius: 0;
+    -fx-background-color: #1d1d1d;
+    -fx-font-family: "Segoe UI", Helvetica, Arial, sans-serif;
+    -fx-font-size: 11pt;
+    -fx-text-fill: #d8d8d8;
+    -fx-background-insets: 0 0 0 0, 0, 1, 2;
+}
+
+.button:hover {
+    -fx-background-color: #3a3a3a;
+}
+
+.button:pressed, .button:default:hover:pressed {
+  -fx-background-color: white;
+  -fx-text-fill: #1d1d1d;
+}
+
+.button:focused {
+    -fx-border-color: white, white;
+    -fx-border-width: 1, 1;
+    -fx-border-style: solid;
+    -fx-border-radius: 0, 0;
+    -fx-border-insets: 1 1 1 1, 0;
+}
+
+.button:disabled, .button:default:disabled {
+    -fx-opacity: 0.4;
+    -fx-background-color: #1d1d1d;
+    -fx-text-fill: white;
+}
+
+.button:default {
+    -fx-background-color: -fx-focus-color;
+    -fx-text-fill: #ffffff;
+}
+
+.button:default:hover {
+    -fx-background-color: derive(-fx-focus-color,30%);
+}
\ No newline at end of file
diff --git a/build/resources/main/view/view.fxml b/build/resources/main/view/view.fxml
new file mode 100644
index 0000000000000000000000000000000000000000..ac3a91e3880d9099cf029fdf4a6cab518b6fde07
--- /dev/null
+++ b/build/resources/main/view/view.fxml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import javafx.scene.control.Button?>
+<?import javafx.scene.layout.HBox?>
+<?import javafx.scene.layout.VBox?>
+<?import view.FirefighterGrid?>
+
+<?import javafx.scene.control.ToggleButton?>
+<?import javafx.scene.control.Separator?>
+<?import javafx.scene.control.Label?>
+<HBox styleClass="background" stylesheets="@DarkTheme.css"
+      xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml"
+      fx:controller="controller.Controller">
+  <VBox>
+    <Separator maxHeight="-Infinity" maxWidth="-Infinity"
+               prefHeight="24.0" prefWidth="200.0"/>
+    <Label maxHeight="-Infinity" maxWidth="-Infinity" alignment="CENTER" prefHeight="24.0" prefWidth="200.0"
+           text="Generation number"/>
+    <Label fx:id="generationNumberLabel" alignment="CENTER" contentDisplay="TEXT_ONLY"
+           maxHeight="-Infinity" maxWidth="-Infinity" prefHeight="24.0" prefWidth="200.0"/>
+    <Separator maxHeight="-Infinity" maxWidth="-Infinity"
+               prefHeight="24.0" prefWidth="200.0"/>
+    <Button fx:id="restartButton" maxHeight="-Infinity" maxWidth="-Infinity"
+            mnemonicParsing="false" onAction="#restartButtonAction" prefHeight="24.0" prefWidth="200.0"
+            text="Restart"/>
+    <Button fx:id="oneStepButton" maxHeight="-Infinity" maxWidth="-Infinity"
+            mnemonicParsing="false" onAction="#oneStepButtonAction" prefHeight="24.0" prefWidth="200.0"
+            text="One step"/>
+    <ToggleButton fx:id="playToggleButton" maxHeight="-Infinity" maxWidth="-Infinity"
+                  mnemonicParsing="false" onAction="#playToggleButtonAction" prefHeight="24.0"
+                  prefWidth="200.0" styleClass="button" text="Play"/>
+    <ToggleButton fx:id="pauseToggleButton" maxHeight="-Infinity" maxWidth="-Infinity"
+                  mnemonicParsing="false" onAction="#pauseToggleButtonAction" prefHeight="24.0"
+                  prefWidth="200.0" styleClass="button" text="Pause"/>
+  </VBox>
+  <FirefighterGrid fx:id="grid" width="600.0" height="600.0"
+                   xmlns="http://javafx.com/javafx"
+                   xmlns:fx="http://javafx.com/fxml">
+  </FirefighterGrid>
+</HBox>
diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin
new file mode 100644
index 0000000000000000000000000000000000000000..6a2c8311aad2bec86286b0f270caab2751d19e4b
Binary files /dev/null and b/build/tmp/compileJava/previous-compilation-data.bin differ
diff --git a/src/main/java/model/ExtinguishFire/ExtinguishFire.java b/src/main/java/model/ExtinguishFire/ExtinguishFire.java
index 4e5e787dffbd8188a33ba9729a5aed8aa8aa4011..006a184b8dafa69d1dd97417c753609aa993d12c 100644
--- a/src/main/java/model/ExtinguishFire/ExtinguishFire.java
+++ b/src/main/java/model/ExtinguishFire/ExtinguishFire.java
@@ -6,10 +6,9 @@ import util.Position;
 
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.List;
 
 public interface ExtinguishFire extends BoardElement {
 
-    void update(GameBoard gameBoard , Position position);
+    void update(GameBoard gameBoard , Position position, HashMap<Position, ArrayList<BoardElement>> newElementPosition, ArrayList<Position> extinguishPosition);
 
 }
diff --git a/src/main/java/model/ExtinguishFire/FireFighter.java b/src/main/java/model/ExtinguishFire/FireFighter.java
index f575cc4e7692d09ea4ab1d55ded3e9770dfd25fe..060a5de7a4397caf1b72ce6fb7af84db03dcf117 100644
--- a/src/main/java/model/ExtinguishFire/FireFighter.java
+++ b/src/main/java/model/ExtinguishFire/FireFighter.java
@@ -66,14 +66,10 @@ public class FireFighter implements ExtinguishFire {
     }
 
     @Override
-    public void update(GameBoard gameBoard, Position position) {
+    public void update(GameBoard gameBoard, Position position, HashMap<Position, ArrayList<BoardElement>> newElementPosition, ArrayList<Position> extinguishPosition) {
 
-            HashMap<Position, ArrayList<BoardElement>> elementPositionCopie = new HashMap<>();
-            for (Map.Entry<Position, ArrayList<BoardElement>> entry : elementPosition.entrySet()){
-                elementPositionCopie.put(entry.getKey(),entry.getValue());
-            }
             List<Position> firePositions = new ArrayList<>();
-            for (Map.Entry<Position, ArrayList<BoardElement>> entry : elementPositionCopie.entrySet()) {
+            for (Map.Entry<Position, ArrayList<BoardElement>> entry : elementPosition.entrySet()) {
                 for (BoardElement element : entry.getValue()) {
                     if (element.accept(new FireFinder())) {
                      firePositions.add(entry.getKey());
@@ -81,40 +77,22 @@ public class FireFighter implements ExtinguishFire {
                 }
             }
             Position newFirefighterPosition = gameBoard.neighborClosestToFire(position);
-            //elementPosition.get(position).remove(this);
-            if(elementPosition.containsKey(newFirefighterPosition)){
-                elementPosition.get(newFirefighterPosition).add(this);
+            if(newElementPosition.containsKey(newFirefighterPosition)){
+                newElementPosition.get(newFirefighterPosition).add(this);
             }
             else{
                 ArrayList<BoardElement> boardElements = new ArrayList<>();
                 boardElements.add(this);
-                elementPosition.put(newFirefighterPosition,boardElements);
+                newElementPosition.put(newFirefighterPosition,boardElements);
             }
-            gameBoard.extinguish(newFirefighterPosition);
+            extinguishPosition.add(newFirefighterPosition);
             List<Position> neighborFirePositions = gameBoard.neighbors(newFirefighterPosition).stream()
                     .filter(firePositions::contains).toList();
             for(Position firePosition : neighborFirePositions) {
-                gameBoard.extinguish(firePosition);
+                extinguishPosition.add(firePosition);
             }
 
         }
-    /*private List<Position> updateFirefighters() {
-        List<Position> result = new ArrayList<>();
-        List<Position> firefighterNewPositions = new ArrayList<>();
-        for (Position firefighterPosition : firefighterPositions) {
-            Position newFirefighterPosition = neighborClosestToFire(firefighterPosition);
-            firefighterNewPositions.add(newFirefighterPosition);
-            extinguish(newFirefighterPosition);
-            result.add(firefighterPosition);
-            result.add(newFirefighterPosition);
-            List<Position> neighborFirePositions = neighbors(newFirefighterPosition).stream()
-                    .filter(firePositions::contains).toList();
-            for(Position firePosition : neighborFirePositions)
-                extinguish(firePosition);
-            result.addAll(neighborFirePositions);
-        }
-        firefighterPositions = firefighterNewPositions;
-        return result;
-    }*/
+
 }
 
diff --git a/src/main/java/model/Flammable/Fire.java b/src/main/java/model/Flammable/Fire.java
index e3bee196be794157e60e9a463f70cda724448502..a37e88732c89ec6a270597877b45723785d2234c 100644
--- a/src/main/java/model/Flammable/Fire.java
+++ b/src/main/java/model/Flammable/Fire.java
@@ -64,19 +64,29 @@ public class Fire implements Flammable{
     }
 
     @Override   // TODO: 15/11/2023
-    public void update(GameBoard gameBoard , Position position) {
-
+    public void update(GameBoard gameBoard , Position position,HashMap<Position, ArrayList<BoardElement>> newElementPosition, ArrayList<Position> extinguishPosition) {
+        if(extinguishPosition.contains(position)){
+            return ;
+        }
         if (gameBoard.stepNumber() % 2 == 0) {
-            List<Position> newFirePositions = new ArrayList<>();
-            newFirePositions.addAll(gameBoard.neighbors(position));
-            for(Position newPosition : newFirePositions){
+            List<Position> newPositions = new ArrayList<>();
+            newPositions.addAll(gameBoard.neighbors(position));
+            if(newElementPosition.containsKey(position))
+                newElementPosition.get(position).add(this);
+            else {
+                newElementPosition.put(position,(new ArrayList<>()));
+                newElementPosition.get(position).add(this);
+            }
+            for(Position newPosition : newPositions){
+                //if(extinguishPosition.contains(newPosition))
+                    //continue;
                 if(GameBoard.elementPosition.containsKey(newPosition)) {
                     for(BoardElement boardElement : GameBoard.elementPosition.get(newPosition)){
                         if(boardElement.accept(new FireFinder()) && boardElement.accept(new CrossRoad()) && boardElement.accept(new CrossMountain())){
                             break;
                         }
                         else if(!boardElement.accept( new FireFinder())&& !boardElement.accept(new CrossRoad()) && !boardElement.accept(new CrossMountain())){
-                            GameBoard.elementPosition.get(newPosition).add(this);
+                            newElementPosition.get(newPosition).add(this);
                         }
                     }
 
@@ -84,11 +94,18 @@ public class Fire implements Flammable{
                 else{
                     ArrayList<BoardElement> boardElements = new ArrayList<>();
                     boardElements.add(this);
-                    GameBoard.elementPosition.put(newPosition,boardElements);
+                    newElementPosition.put(newPosition,boardElements);
                     System.out.println(GameBoard.elementPosition.get(position).get(0).getColor());
                 }
 
             }
+        }else{
+            if(newElementPosition.containsKey(position))
+                newElementPosition.get(position).add(this);
+            else {
+                newElementPosition.put(position,(new ArrayList<>()));
+                newElementPosition.get(position).add(this);
+            }
         }
 
     }
diff --git a/src/main/java/model/Flammable/Flammable.java b/src/main/java/model/Flammable/Flammable.java
index b21f82b9a9ddc487a95a82902a89d4631ae608ce..325c6d3012ce69d730224122c935bfd377258c7a 100644
--- a/src/main/java/model/Flammable/Flammable.java
+++ b/src/main/java/model/Flammable/Flammable.java
@@ -10,5 +10,5 @@ import java.util.List;
 
 public interface Flammable extends BoardElement{
 
-    void update(GameBoard gameBoard, Position position);
+    void update(GameBoard gameBoard, Position position,HashMap<Position, ArrayList<BoardElement>> newElementPosition, ArrayList<Position> extinguishPosition);
 }
diff --git a/src/main/java/model/GameBoard.java b/src/main/java/model/GameBoard.java
index eacfba7c202883afe6d2ada87190c4a9aab0d013..5b4773cbdde757e725dbe13b2a7d4733c4f9c6d0 100644
--- a/src/main/java/model/GameBoard.java
+++ b/src/main/java/model/GameBoard.java
@@ -40,29 +40,35 @@ public class GameBoard implements Board{
     }
     @Override
     public void updateToNextGeneration() {
-        HashMap<Position, ArrayList<BoardElement>> elementPositionCopie = new HashMap<>();
+        HashMap<Position, ArrayList<BoardElement>> newElementPosition = new HashMap<>();
+        ArrayList<Position> extinguishPosition = new ArrayList<>();
         for (Map.Entry<Position, ArrayList<BoardElement>> entry : elementPosition.entrySet()){
-            elementPositionCopie.put(entry.getKey(),entry.getValue());
-        }
-        for (Map.Entry<Position, ArrayList<BoardElement>> entry : elementPositionCopie.entrySet()){
             for(BoardElement element : entry.getValue()){
 
                 if (!element.accept(new FireFinder())){
                     ExtinguishFire element1 = (ExtinguishFire) element;
-                    element1.update(this,entry.getKey());
+                    element1.update(this,entry.getKey(),newElementPosition,extinguishPosition);
                 }
             }
         }
-        /*for (Map.Entry<Position, ArrayList<BoardElement>> entryCopie : elementPositionCopie.entrySet()){
-            for(BoardElement element : entryCopie.getValue()){
-
+        for (Map.Entry<Position, ArrayList<BoardElement>> entry : elementPosition.entrySet()){
+            for(BoardElement element : entry.getValue()){
                 if (element.accept(new FireFinder())){
                     Flammable element1 = (Flammable) element;
-                    element1.update(this,entryCopie.getKey());
+                    element1.update(this,entry.getKey(),newElementPosition,extinguishPosition);
                 }
             }
-        }*/
+        }
+        elementPosition.clear();
+        extinguishPosition.clear();
+        for (Map.Entry<Position, ArrayList<BoardElement>> entry : newElementPosition.entrySet()){
 
+            if(elementPosition.containsKey(entry.getKey())){
+                elementPosition.get(entry.getKey()).addAll(entry.getValue());
+            }else{
+                elementPosition.put(entry.getKey(),entry.getValue());
+            }
+        }
         step++;
 
 
@@ -112,16 +118,13 @@ public class GameBoard implements Board{
     }
 
     public  Position neighborClosestToFire(Position position) {
-        HashMap<Position, ArrayList<BoardElement>> elementPositionCopie = new HashMap<>();
-        for (Map.Entry<Position, ArrayList<BoardElement>> entry : elementPosition.entrySet()){
-            elementPositionCopie.put(entry.getKey(),entry.getValue());
-        }
+
         FireFinder fireFinder = new FireFinder();
         Set<Position> firePositions = new HashSet<>();
         Set<Position> seen = new HashSet<>();
         HashMap<Position, Position> firstMove = new HashMap<>();
         Queue<Position> toVisit = new LinkedList<>(neighbors(position));
-        for (Map.Entry<Position, ArrayList<BoardElement>> entry : elementPositionCopie.entrySet()){
+        for (Map.Entry<Position, ArrayList<BoardElement>> entry : elementPosition.entrySet()){
             for(BoardElement element : entry.getValue()){
                 if (element.accept(fireFinder)){
                     firePositions.add(entry.getKey());
@@ -144,7 +147,7 @@ public class GameBoard implements Board{
         return position;
     }
 
-    public void extinguish(Position position) {
+    /*public void extinguish(Position position) {
         FireFinder fireFinder = new FireFinder();
         HashMap<Position, ArrayList<BoardElement>> elementPositionCopie = new HashMap<>();
         for (Map.Entry<Position, ArrayList<BoardElement>> entry : this.elementPosition.entrySet()){
@@ -160,6 +163,6 @@ public class GameBoard implements Board{
                     this.elementPosition.remove(position);
                 }
             }
-        }
+        }*/
     }