diff --git a/gradlew b/gradlew
old mode 100644
new mode 100755
diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java
index f6c0bdffa732d36aec0fe2b895cfcda1fc587948..04dd45ff4d3470ecc1557ba9b9801c769d15415e 100644
--- a/src/main/java/controller/Controller.java
+++ b/src/main/java/controller/Controller.java
@@ -58,10 +58,10 @@ public class Controller {
     this.board = requireNonNull(board, "board is null");
   }
 
-  private void updateBoard(){
+  private void updateBoard() {
     List<Position> updatedPositions = board.updateToNextGeneration();
     List<Pair<Position, ViewElement>> updatedSquares = new ArrayList<>();
-    for(Position updatedPosition : updatedPositions){
+    for (Position updatedPosition : updatedPositions) {
       Square squareState = board.getStates(updatedPosition);
       ViewElement viewElement = getViewElement(squareState);
       updatedSquares.add(new Pair<>(updatedPosition, viewElement));
@@ -70,25 +70,24 @@ public class Controller {
     updateGenerationLabel(board.stepNumber());
   }
 
-  private void repaintGrid(){
+  private void repaintGrid() {
     int columnCount = board.columnCount();
     int rowCount = board.rowCount();
     ViewElement[][] viewElements = new ViewElement[rowCount][columnCount];
-    for(int column = 0; column < columnCount; column++)
-      for(int row = 0; row < rowCount; row++)
+    for (int column = 0; column < columnCount; column++)
+      for (int row = 0; row < rowCount; row++)
         viewElements[row][column] = getViewElement(board.getStates(new Position(row, column)));
     grid.repaint(viewElements);
     updateGenerationLabel(board.stepNumber());
   }
 
   private ViewElement getViewElement(Square square) {
-      return new ViewElement(square.getViewColor());
+    return new ViewElement(square.getViewColor());
   }
 
   private void initializeTimeline() {
     Duration duration = new Duration(Controller.PERIOD_IN_MILLISECONDS);
-    EventHandler<ActionEvent> eventHandler =
-            event -> updateBoard();
+    EventHandler<ActionEvent> eventHandler = event -> updateBoard();
     KeyFrame keyFrame = new KeyFrame(duration, eventHandler);
     timeline = new Timeline(keyFrame);
     timeline.setCycleCount(Animation.INDEFINITE);
@@ -118,7 +117,7 @@ public class Controller {
   }
 
   public void initialize(int squareWidth, int squareHeight, int columnCount,
-                                int rowCount, int initialFireCount, int initialFirefighterCount) {
+      int rowCount, int initialFireCount, int initialFirefighterCount) {
     grid.setDimensions(columnCount, rowCount, squareWidth, squareHeight);
     this.setModel(new FireFighterScenario(columnCount, rowCount, initialFireCount, initialFirefighterCount));
     repaintGrid();
@@ -129,7 +128,7 @@ public class Controller {
     updateBoard();
   }
 
-  private void updateGenerationLabel(int value){
+  private void updateGenerationLabel(int value) {
     generationNumberLabel.setText(Integer.toString(value));
   }
 }
\ No newline at end of file
diff --git a/src/main/java/model/Board.java b/src/main/java/model/Board.java
index b9ca3fdf2ee4e6bab091aa3c40deb18394d485f6..b0e448c8012bfe706f1a8d8dcf8b642a1aec6955 100644
--- a/src/main/java/model/Board.java
+++ b/src/main/java/model/Board.java
@@ -5,7 +5,8 @@ import java.util.List;
 import util.Position;
 
 /**
- * This interface represents a generic board for modeling various state-based systems.
+ * This interface represents a generic board for modeling various state-based
+ * systems.
  *
  * @param <S> The type of state represented on the board.
  */
@@ -22,7 +23,7 @@ public interface Board<S> {
   /**
    * Set the state of a specific position on the board to the specified state.
    *
-   * @param state The state to set for the given position.
+   * @param state    The state to set for the given position.
    * @param position The position on the board for which to set the state.
    */
   void setSquare(S square);
@@ -63,12 +64,13 @@ public interface Board<S> {
   int stepNumber();
 
   public int getStepNumber();
+
   // Le booléen replaceState permet de forcer le remplacement des cases vides
   public void setSquare(S square, boolean replaceStates);
 
   public boolean doesPositionExist(Position position);
 
-  public void clearCase(Position position);
+  public void clearCaseFrom(Entity entity, Position position);
 
   public Position getNearestEntity(Position fromPos, Class<?> entityType);
 
@@ -80,4 +82,3 @@ public interface Board<S> {
 
   public void addEntityAtSquare(Entity entity, Position position, boolean replaceStates);
 }
-
diff --git a/src/main/java/model/Fire.java b/src/main/java/model/Fire.java
index 34adf3169dfb57b371aa6db5a32c0d04d3336d5a..65c3fe456a66630864e209db25b2ed38d35ffe2c 100644
--- a/src/main/java/model/Fire.java
+++ b/src/main/java/model/Fire.java
@@ -1,4 +1,5 @@
 package model;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -6,17 +7,19 @@ import javafx.scene.paint.Color;
 import util.Position;
 import util.PositionUtil;
 
-public class Fire implements Entity{
+public class Fire implements Entity {
     Board<Square> b;
     private Position position;
     private final Color viewColor = Color.RED;
     private int age;
-    public Fire(Position position, Board<Square> b){
+
+    public Fire(Position position, Board<Square> b) {
         this.b = b;
         this.position = position;
         this.age = 0;
     }
-    public Fire(Position position, Board<Square> b, int age){
+
+    public Fire(Position position, Board<Square> b, int age) {
         this.b = b;
         this.position = position;
         this.age = age;
@@ -24,35 +27,34 @@ public class Fire implements Entity{
 
     @Override
     public List<Position> nextTurn(Board<Square> board) {
-        if(board.getStepNumber() % 2 == 0)return new ArrayList<Position>();
-        List<Position> positions = PositionUtil.generateAdjacentPositions(position, board); 
-        for(Position p : positions){
-            if(b.getStates(p).isEmpty()){
-                if(b.getStates(p).getMaxAge() < b.getStepNumber() && PositionUtil.getManhattanDistance(position, p) == 1){
+        if (board.getStepNumber() % 2 == 0)
+            return new ArrayList<Position>();
+        List<Position> positions = PositionUtil.generateAdjacentPositions(position, board);
+        for (Position p : positions) {
+            if (b.getStates(p).isEmpty()) {
+                if (b.getStates(p).getMaxAge() < b.getStepNumber()
+                        && PositionUtil.getManhattanDistance(position, p) == 1) {
                     board.addEntityAtSquare(new Fire(p, board), p);
-
                 }
             }
-            if(!b.doesPositionExist(p)){
+            if (!b.doesPositionExist(p)) {
                 positions.remove(p);
             }
         }
         return positions;
     }
-    
 
-
-    
     @Override
     public void setPosition(Position p) {
         this.position = p;
     }
+
     @Override
     public Position getPosition() {
         return this.position;
     }
 
-    public Color getViewColor(){
+    public Color getViewColor() {
         return this.viewColor;
     }
 
@@ -63,8 +65,9 @@ public class Fire implements Entity{
 
     @Override
     public void incrementAge() {
-        this.age = age + 1 ;
+        this.age = age + 1;
     }
+
     @Override
     public void setAge(int age) {
         this.age = age;
diff --git a/src/main/java/model/FireFighter.java b/src/main/java/model/FireFighter.java
index 83dc27c0434222d93dccbbdfd49defc848857778..4e8a35e927eb440d3ce9d35ce327dfd741e206c5 100644
--- a/src/main/java/model/FireFighter.java
+++ b/src/main/java/model/FireFighter.java
@@ -1,4 +1,5 @@
 package model;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -6,89 +7,90 @@ import javafx.scene.paint.Color;
 import util.Position;
 import util.PositionUtil;
 
-public class FireFighter implements Entity{
+public class FireFighter implements Entity {
     private int age;
     private Position position;
     private final Color viewColor = Color.BLUE;
 
-
-    public FireFighter(Position position, Board<Square> b){
+    public FireFighter(Position position, Board<Square> b) {
         this.position = position;
         this.age = 0;
     }
-    public FireFighter(Position position, Board<Square> b, int age){
+
+    public FireFighter(Position position, Board<Square> b, int age) {
         this.position = position;
         this.age = age;
     }
-    
+
     public List<Position> nextTurn(Board<Square> b) {
         List<Position> positions = new ArrayList<>();
-    
+
         // Générer les positions adjacentes
         List<Position> adjacentPositions = PositionUtil.generateAdjacentPositions(position, b);
-        
+
         // Vérifier s'il y a du feu dans une des positions adjacentes
         boolean hasFire = adjacentPositions.stream()
-                                           .anyMatch(p -> b.doesSquareContainEntity(p, Fire.class));
-        
+                .anyMatch(p -> b.doesSquareContainEntity(p, Fire.class));
+
         if (hasFire) {
             // Si du feu est trouvé, on éteint les feux adjacents
             positions.addAll(extinguish(adjacentPositions, b));
         } else {
             // Chercher la position du feu le plus proche
             Position nearestFirePos = b.getNearestEntity(position, Fire.class);
-            
+
             if (nearestFirePos != null && !nearestFirePos.equals(position)) {
                 // Trouver la meilleure position pour se rapprocher du feu
                 Position nextPos = getNextPositionTowards(position, nearestFirePos, b);
                 if (nextPos != null) {
                     // Mettre à jour la position du pompier
-                    b.clearCase(position); // Vider l'ancienne case
+                    b.clearCaseFrom(this, position); // Vider l'ancienne case
                     positions.add(new Position(position.x(), position.y()));
                     this.position = nextPos;
                     b.addEntityAtSquare(this, nextPos); // Mettre à jour la nouvelle case
                     positions.add(nextPos);
                     adjacentPositions = PositionUtil.generateAdjacentPositions(nextPos, b);
                     positions.addAll(extinguish(adjacentPositions, b));
-                } 
+                }
                 // Aucun déplacement possible = le pompier reste sur place
             }
         }
-    
+
         return positions;
     }
-    
+
     private List<Position> extinguish(List<Position> adjacentPositions, Board<Square> b) {
         List<Position> extinguishedPositions = new ArrayList<>();
         for (Position p : adjacentPositions) {
+            extinguishedPositions.addAll(adjacentPositions);
             b.getStates(p).getEntities().removeIf(element -> element instanceof Fire);
             List<Entity> entities = b.getStates(p).getEntities();
-            for(Entity e : entities){
-                if(e instanceof EmptyEntity){
-                    e.setAge(age+1);
+            for (Entity e : entities) {
+                if (e instanceof EmptyEntity) {
+                    e.setAge(b.stepNumber() + 1);
                 }
             }
             extinguishedPositions.add(p); // Ajouter la position où le feu a été éteint
-            
+
         }
         return extinguishedPositions;
     }
-    
+
     private Position getNextPositionTowards(Position currentPos, Position targetPos, Board<Square> b) {
         // Générer les 8 positions adjacentes possibles
         List<Position> possibleMoves = PositionUtil.generateAllAdjacentPositions(currentPos, b);
-    
+
         // Filtrer les positions qui sont libres
         possibleMoves.removeIf(p -> !(b.isPositionEmpty(p)));
-    
+
         // Si aucune position libre n'est disponible, retourner null
         if (possibleMoves.isEmpty()) {
             return null;
         }
-    
+
         // Calculer la distance actuelle vers la cible
         int currentDistance = PositionUtil.getManhattanDistance(currentPos, targetPos);
-    
+
         // Choisir la position libre qui réduit le plus la distance vers le feu
         Position bestMove = null;
         int minDistance = currentDistance;
@@ -99,16 +101,13 @@ public class FireFighter implements Entity{
                 bestMove = move;
             }
         }
-    
+
         // Si aucun déplacement ne réduit la distance, annuler le déplacement
         if (bestMove == null) {
             return null;
         }
         return bestMove;
     }
-    
-    
-    
 
     @Override
     public void setPosition(Position p) {
@@ -119,7 +118,8 @@ public class FireFighter implements Entity{
     public Position getPosition() {
         return this.position;
     }
-    public Color getViewColor(){
+
+    public Color getViewColor() {
         return this.viewColor;
     }
 
@@ -127,9 +127,10 @@ public class FireFighter implements Entity{
     public int getAge() {
         return this.age;
     }
+
     @Override
     public void incrementAge() {
-        this.age = age + 1 ;
+        this.age = age + 1;
     }
 
     @Override
diff --git a/src/main/java/model/FireFighterScenario.java b/src/main/java/model/FireFighterScenario.java
index dbe7d4203d46ec17a9049ce9b2a6c115981d36cc..7fc6ce9f81869777ef22099dc22f1ebff58b3c45 100644
--- a/src/main/java/model/FireFighterScenario.java
+++ b/src/main/java/model/FireFighterScenario.java
@@ -40,7 +40,6 @@ public class FireFighterScenario extends EntityScenario implements Board<Square>
     }
 
     while (fireCount < initialFireCount || fireFighterCount < initialFireFightersCount) {
-      System.out.println("aaa");
       Collections.shuffle(positions); // Mélange les positions pour un parcours aléatoire
 
       for (Position pos : positions) {
@@ -122,10 +121,8 @@ public class FireFighterScenario extends EntityScenario implements Board<Square>
   }
 
   @Override
-  public void clearCase(Position position) {
-    Square s = new Square(position);
-    s.addEntity(new EmptyEntity(position, step+1));
-    setSquare(s, true);
+  public void clearCaseFrom(Entity entity, Position position) {
+    matrix.get(position.x(), position.y()).getEntities().removeIf(element -> element.equals(entity));
   }
 
   public List<Position> updateToNextGeneration() {
@@ -142,14 +139,16 @@ public class FireFighterScenario extends EntityScenario implements Board<Square>
       if (s.getMaxAge() == step + 1) {
         continue;
       }
-      for (Entity e : s.getEntities()) {
+      List<Entity> entities = new ArrayList<>(s.getEntities());
+      for (Entity e : entities) {
         List<Position> entityUpdatedPositions = e.nextTurn(this);
         e.incrementAge();
         changedPositions.addAll(entityUpdatedPositions);
       }
 
     }
-    //matrix.displayMatrix();
+    this.step = this.step + 1;
+    // matrix.displayMatrix();
     return changedPositions;
   }
 
@@ -188,7 +187,6 @@ public class FireFighterScenario extends EntityScenario implements Board<Square>
   }
 
   public int stepNumber() {
-    this.step = step + 1;
     return this.step;
   }
 
@@ -204,11 +202,11 @@ public class FireFighterScenario extends EntityScenario implements Board<Square>
 
   @Override
   public boolean doesSquareContainEntity(Position squarePos, Class<?> entityType) {
-      return getStates(squarePos).getEntities().stream().anyMatch(entityType::isInstance);
-  }  
+    return getStates(squarePos).getEntities().stream().anyMatch(entityType::isInstance);
+  }
 
   @Override
-  public boolean isPositionEmpty(Position position){
+  public boolean isPositionEmpty(Position position) {
     return getStates(position).isEmpty();
   }
 }