diff --git a/.gradle/8.4/checksums/checksums.lock b/.gradle/8.4/checksums/checksums.lock
index abdae5360899fa70db77e1ab43dedcfc0c20ce3d..687f4f2689f36141e55132a03a06f37ea20d28c3 100644
Binary files a/.gradle/8.4/checksums/checksums.lock 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
index 50c7c37995c3fd5f70a3a7bc08234fe04ef3e167..c150f374e8350fdc4d0b480b32e0bc156ecdb4f0 100644
Binary files a/.gradle/8.4/dependencies-accessors/dependencies-accessors.lock and b/.gradle/8.4/dependencies-accessors/dependencies-accessors.lock differ
diff --git a/.gradle/8.4/executionHistory/executionHistory.bin b/.gradle/8.4/executionHistory/executionHistory.bin
index 0a3faa633e2aecc9966910b232a55f69474f624e..cd185bc582a0f489888b574664842f97427b3965 100644
Binary files a/.gradle/8.4/executionHistory/executionHistory.bin 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
index d454e1a97ee25202fe33c1dece8a65a09f3f5e4c..b0eb98842eda3fa8e9d6fde7acfb58ee0504e7c4 100644
Binary files a/.gradle/8.4/executionHistory/executionHistory.lock and b/.gradle/8.4/executionHistory/executionHistory.lock differ
diff --git a/.gradle/8.4/fileHashes/fileHashes.bin b/.gradle/8.4/fileHashes/fileHashes.bin
index 29960e5fe347978b826bb3b92426e1d2cf45ba9b..a6033345fa086c28fa693303e7b630d6d3d901cb 100644
Binary files a/.gradle/8.4/fileHashes/fileHashes.bin 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
index c7e1d1b5f3fdf6cf7070b79cfcee1e5cad34c2bb..da13ab9353ced83645c5559a785a24c30dd34000 100644
Binary files a/.gradle/8.4/fileHashes/fileHashes.lock 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
index b97d1a87e2a97baf84d53cc25404d4a715dc5a61..140ab407c66bf092f43e885dfedaf6efe6f82fea 100644
Binary files a/.gradle/8.4/fileHashes/resourceHashesCache.bin and b/.gradle/8.4/fileHashes/resourceHashesCache.bin differ
diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock
index b01eca29ad3494c03dfe3dc1e37684bb11a9139f..72a5e081814c347e779fc9a70999b4a39d950740 100644
Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/.gradle/buildOutputCleanup/cache.properties b/.gradle/buildOutputCleanup/cache.properties
index bc0da4ca0f7952d0db44bc4b00fba59585e4ff5e..90154715c19ffcb4cfd832c6c62fcfe3c445afac 100644
--- a/.gradle/buildOutputCleanup/cache.properties
+++ b/.gradle/buildOutputCleanup/cache.properties
@@ -1,2 +1,2 @@
-#Tue Nov 14 22:02:54 CET 2023
+#Mon Nov 13 20:29:54 CET 2023
 gradle.version=8.4
diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin
index 0aae8ca63b8cb37459939b604e62b6b6a9db8c24..e4dbcd26775b77fdd318f2e906aa0ebb05955632 100644
Binary files a/.gradle/buildOutputCleanup/outputFiles.bin and b/.gradle/buildOutputCleanup/outputFiles.bin differ
diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe
index edddcf04fd2b2201f6a075e19bb10e4635d87bdc..e892a491542e10fac2c062d573d9d0cd0dc4280c 100644
Binary files a/.gradle/file-system.probe and b/.gradle/file-system.probe differ
diff --git a/build/classes/java/main/controller/Controller.class b/build/classes/java/main/controller/Controller.class
index 8354b4b5e9c51c9a95e1ee282454bcb74bb2799f..181db60987ef9e8df666c370fc44325db0cb5a41 100644
Binary files a/build/classes/java/main/controller/Controller.class and b/build/classes/java/main/controller/Controller.class differ
diff --git a/build/classes/java/main/model/ExtinguishFire/ExtinguishFire.class b/build/classes/java/main/model/ExtinguishFire/ExtinguishFire.class
index 6f2ee628168d8278cdfdfcd6b1dcf054d0de7134..a4d622e74ad0dac8a1e1ee24f055fadd19df68df 100644
Binary files a/build/classes/java/main/model/ExtinguishFire/ExtinguishFire.class 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
index fcc4ef03eff562cb121ef55794860a3daacf0c37..02776eb6f209146e6f2de1891a6ecafbc4aa688a 100644
Binary files a/build/classes/java/main/model/ExtinguishFire/FireFighter.class and b/build/classes/java/main/model/ExtinguishFire/FireFighter.class differ
diff --git a/build/classes/java/main/model/Flammable/Fire.class b/build/classes/java/main/model/Flammable/Fire.class
index dbc166e9ee502ac6e65765ab6e3c1b154cd63a20..a63719c958047acc25830722191a24670a97cbad 100644
Binary files a/build/classes/java/main/model/Flammable/Fire.class 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
index 4a62fd7300bf6f83c5e5d56996109e985f2f0393..bf120cd5de3e083cfef4bb7079bfbbbd2f05fb97 100644
Binary files a/build/classes/java/main/model/Flammable/Flammable.class 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
index cb2ca44314073aaa3df472fc2b6ef8262af9a836..e7f7e68c6824b75a0258c2c6ecb4cd1b9dee4da3 100644
Binary files a/build/classes/java/main/model/GameBoard.class and b/build/classes/java/main/model/GameBoard.class differ
diff --git a/build/classes/java/main/view/FirefighterGrid.class b/build/classes/java/main/view/FirefighterGrid.class
index 30eaace75e76ed424baa17b60e2fc62e70bead04..d2bbe7e11dd4d28c3fba73284af14ce15b59f73f 100644
Binary files a/build/classes/java/main/view/FirefighterGrid.class and b/build/classes/java/main/view/FirefighterGrid.class differ
diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin
index fdbc7fa6a302f18ac1388e657e7b4c5637763e03..6a2c8311aad2bec86286b0f270caab2751d19e4b 100644
Binary files a/build/tmp/compileJava/previous-compilation-data.bin and b/build/tmp/compileJava/previous-compilation-data.bin differ
diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java
index 260a1df48eae1a5eb6b71d1df5d95b561da5e66c..81b9df828351be80fe30e3a28bb32a842ed3e72d 100644
--- a/src/main/java/controller/Controller.java
+++ b/src/main/java/controller/Controller.java
@@ -66,7 +66,7 @@ public class Controller {
     model.BoardElement[][] boardElements = new model.BoardElement[rowCount][columnCount];
     for(int column = 0; column < columnCount; column++)
       for(int row = 0; row < rowCount; row++){
-        if(board.getElementPosition().containsKey(new Position(row,column))){
+        if(board.getElementPosition().containsKey(new Position(row,column)) && board.getElementPosition().get(new Position(row,column)).size()!=0){
           boardElements[row][column] = board.getElementPosition().get(new Position(row,column)).get(0);
         }else{
           boardElements[row][column]=new EmptyElement();
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 0d7aa63706ebff471c18b73527a9f708c2d18126..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,32 +77,22 @@ public class FireFighter implements ExtinguishFire {
                 }
             }
             Position newFirefighterPosition = gameBoard.neighborClosestToFire(position);
-            if(elementPositionCopie.containsKey(newFirefighterPosition)){
-                elementPositionCopie.get(newFirefighterPosition).add(new FireFighter(Color.BLUE));
+            if(newElementPosition.containsKey(newFirefighterPosition)){
+                newElementPosition.get(newFirefighterPosition).add(this);
             }
             else{
                 ArrayList<BoardElement> boardElements = new ArrayList<>();
-                boardElements.add(new FireFighter(Color.BLUE));
-                elementPosition.put(newFirefighterPosition,boardElements);
+                boardElements.add(this);
+                newElementPosition.put(newFirefighterPosition,boardElements);
             }
-            gameBoard.extinguish(newFirefighterPosition);
+            extinguishPosition.add(newFirefighterPosition);
             List<Position> neighborFirePositions = gameBoard.neighbors(newFirefighterPosition).stream()
                     .filter(firePositions::contains).toList();
-            for(Position newposition : neighborFirePositions){
-                if(elementPositionCopie.containsKey(newposition)){
-                    elementPosition.get(newposition).add(new FireFighter(Color.BLUE));
-                }
-                else{
-                    ArrayList<BoardElement> boardElements = new ArrayList<>();
-                    boardElements.add(new FireFighter(Color.BLUE));
-                    elementPosition.put(newposition,boardElements);
-                }
-            }
-
             for(Position firePosition : neighborFirePositions) {
-                gameBoard.extinguish(firePosition);
+                extinguishPosition.add(firePosition);
             }
 
         }
+
 }
 
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 216b267c9659dee78e790d0bb092e3ea284f2546..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<>();
-        for (Map.Entry<Position, ArrayList<BoardElement>> entry : this.elementPosition.entrySet()){
-            elementPositionCopie.put(entry.getKey(),entry.getValue());
-        }
-        for (Map.Entry<Position, ArrayList<BoardElement>> entry : elementPositionCopie.entrySet()){
+        HashMap<Position, ArrayList<BoardElement>> newElementPosition = new HashMap<>();
+        ArrayList<Position> extinguishPosition = new ArrayList<>();
+        for (Map.Entry<Position, ArrayList<BoardElement>> entry : elementPosition.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,12 +118,13 @@ public class GameBoard implements Board{
     }
 
     public  Position neighborClosestToFire(Position position) {
+
         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 : this.elementPosition.entrySet()){
+        for (Map.Entry<Position, ArrayList<BoardElement>> entry : elementPosition.entrySet()){
             for(BoardElement element : entry.getValue()){
                 if (element.accept(fireFinder)){
                     firePositions.add(entry.getKey());
@@ -140,14 +147,22 @@ public class GameBoard implements Board{
         return position;
     }
 
-    public void extinguish(Position position) {
+    /*public void extinguish(Position position) {
         FireFinder fireFinder = new FireFinder();
-        for (BoardElement boardElement : elementPosition.get(position)){
-                if (boardElement.accept(fireFinder)){
+        HashMap<Position, ArrayList<BoardElement>> elementPositionCopie = new HashMap<>();
+        for (Map.Entry<Position, ArrayList<BoardElement>> entry : this.elementPosition.entrySet()){
+            elementPositionCopie.put(entry.getKey(),entry.getValue());
+        }
+        for (BoardElement boardElement : elementPositionCopie.get(position)){
+                if (boardElement.accept(fireFinder) && elementPosition.get(position).size()!=0){
                     this.elementPosition.get(position).remove(boardElement);
                     break;
                 }
+                if (boardElement.accept(fireFinder) && elementPosition.get(position).size()==0){
+                    this.elementPosition.get(position).remove(boardElement);
+                    this.elementPosition.remove(position);
+                }
             }
-        }
+        }*/
     }
 
diff --git a/src/main/java/view/FirefighterGrid.java b/src/main/java/view/FirefighterGrid.java
index e81ddfd50defe3083d66f20b14bbc4de5a700caf..042dc7b54ac7b2d11202a6d3b53727bf1c450baf 100644
--- a/src/main/java/view/FirefighterGrid.java
+++ b/src/main/java/view/FirefighterGrid.java
@@ -20,8 +20,8 @@ public class FirefighterGrid extends Canvas implements Grid<model.BoardElement>{
 
     @Override
     public void repaint(List<Pair<Position, model.BoardElement>> positionedElements) {
-        //clear(positionedElements);
-        //paint(positionedElements);
+        clear(positionedElements);
+        paint(positionedElements);
         paintLines();
     }
 
@@ -34,7 +34,7 @@ public class FirefighterGrid extends Canvas implements Grid<model.BoardElement>{
 
     private void paint(List<Pair<Position, BoardElement>> positionedElements) {
         for(Pair<Position, BoardElement> pair : positionedElements){
-            //paintElementAtPosition(pair.getValue(), pair.getKey());
+            paintElementAtPosition(pair.getValue(), pair.getKey());
         }
     }
 
diff --git a/src/test/java/model/FirefighterBoardTest.java b/src/test/java/model/FirefighterBoardTest.java
index 24c7e5d160a01c26a30497768764aba0c494c4d7..049ad8d42f03ffe5d376c26e64c0a4dc655e572f 100644
--- a/src/test/java/model/FirefighterBoardTest.java
+++ b/src/test/java/model/FirefighterBoardTest.java
@@ -7,33 +7,33 @@ import java.util.List;
 
 import static org.assertj.core.api.Assertions.*;
 
-/*public class FirefighterBoardTest {
+public class FirefighterBoardTest {/*
   @Test
   void testColumnCount(){
-    Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3);
+    Board board = new GameBoard(20, 10, 1, 3);
     assertThat(board.columnCount()).isEqualTo(20);
   }
   @Test
   void testRowCount(){
-    Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3);
+    Board<List board = new GameBoard(20, 10, 1, 3);
     assertThat(board.rowCount()).isEqualTo(10);
   }
   @Test
   void testStepNumber(){
-    Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3);
+    Board board = new GameBoard(20, 10, 1, 3);
     for(int index = 0; index < 10; index++){
       assertThat(board.stepNumber()).isEqualTo(index);
       board.updateToNextGeneration();
     }
     assertThat(board.stepNumber()).isEqualTo(10);
   }
-  @Test
- void testGetState_afterSet(){
-    Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 0, 0);
+  /*@Test
+  void testGetState_afterSet(){
+    Board<List<BoardElement>> board = new GameBoard(20, 10, 0, 0);
     Position position = new Position(1,2);
     assertThat(board.getState(position)).isEmpty();
-    board.setState(List.of(ModelElement.FIRE), position);
+    board.setState(List.of(BoardElement.FIRE), position);
     assertThat(board.getState(position)).containsExactly(ModelElement.FIRE);
-  }
+  }*/
 
-}*/
+}