diff --git a/src/main/java/model/Fire.java b/src/main/java/model/Fire.java
index f49af1d194474ee94402f3a1d58dc1e3a0db29c7..dc5231c8ec8efdf664fb3fbb9d10ed854e54b2dc 100644
--- a/src/main/java/model/Fire.java
+++ b/src/main/java/model/Fire.java
@@ -2,9 +2,7 @@ package model;
 
 import util.Position;
 
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 
 public class Fire implements Element {
@@ -33,8 +31,24 @@ public class Fire implements Element {
         this.position = position;
     }
 
-    public List<Position> update(FirefighterBoard firefighterBoard){
-        return null;
+
+    public List<Position> update(FirefighterBoard firefighterBoard) {
+        List<Position> modifiedPositions = new ArrayList<>();
+        Map<Position, List<Position>> neighbors = firefighterBoard.getNeighbors();
+
+        // Étendre le feu seulement à chaque étape paire
+        if (firefighterBoard.stepNumber() % 2 == 0) {
+            List<Position> neighborPositions = neighbors.get(this.getPosition());
+            for (Position position : neighborPositions) {
+                if (!(firefighterBoard.getState(position).contains(modelElement))) {
+                    // Ajouter un nouveau feu directement dans la liste des éléments
+                    firefighterBoard.getElements().add(new Fire(position));
+                }
+                // Marquer la position comme modifiée
+                modifiedPositions.add(position);
+            }
+        }
+        return modifiedPositions;
     }
 
     public boolean contains(List<Position> positions) {
diff --git a/src/main/java/model/FireFighter.java b/src/main/java/model/FireFighter.java
index 6fd518d3371f02a687ed6c700e420913fb61a1c4..c136eb4e8128ebfd698231ff642c61f8bed053d1 100644
--- a/src/main/java/model/FireFighter.java
+++ b/src/main/java/model/FireFighter.java
@@ -4,7 +4,9 @@ import util.Position;
 import util.TargetStrategy;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 
 public class FireFighter extends Extinguisher {
diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java
index 071930f418e7cb5591ba517336e7fb515698ce80..ab4b6a7bef1ca2d639cdcc7b6d0a7af3cdd6fc31 100644
--- a/src/main/java/model/FirefighterBoard.java
+++ b/src/main/java/model/FirefighterBoard.java
@@ -13,12 +13,8 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
   private final int initialFirefighterCount;
   private final int initialCloudCount;
   private final int initialRoadCount;
-  private List<FireFighter> firefighters;
-
 
   private List<Element> elements;
-  private Map<Position, Fire> fires = new HashMap<>();
-  private List<Cloud> clouds;
   private final Map<Position, List<Position>> neighbors = new HashMap<>();
   private final Position[][] positions;
   private int step = 0;
@@ -57,12 +53,10 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
   public void initializeElements() {
     elements = new ArrayList<>();
 
-    fires.clear();
-
 
     for (int index = 0; index < initialFireCount; index++) {
-      Position position = randomPosition();
-      fires.put(position, new Fire(position));
+
+      elements.add(new Fire(randomPosition()));
     }
 
     for (int index = 0; index < initialFirefighterCount; index++) {
@@ -99,7 +93,6 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
     for(Element element : elements){
       if(element.getPosition().equals(position))result.add(element.getElement());
     }
-    if (fires.containsKey(position)) result.add(ModelElement.FIRE);
 
     return result;
   }
@@ -108,44 +101,25 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
 
 
 
-
-  private List<Position> updateFires() {
+  public List<Position> updateElements() {
     List<Position> modifiedPositions = new ArrayList<>();
-    if (step % 2 == 0) {
-      Set<Position> newFirePositions = new HashSet<>();
-      for (Position fire : new HashSet<>(fires.keySet())) {
-        List<Position> neighboursAvaiable = neighbors.get(fire);
-        neighboursAvaiable.removeAll(getRoadsPosition());
-        newFirePositions.addAll(neighbors.get(fire));
-      }
-      for (Position position : newFirePositions) {
-        if (!fires.containsKey(position)) {
-          fires.put(position, new Fire(position));
-          modifiedPositions.add(position);
-        }
-      }
-    }
-    return modifiedPositions;
-  }
-
-
-
-
 
 
-
-
-  public List<Position> updateElements(){
-    List<Position> modifiedPositions = new ArrayList<>();
-    for (Element element : elements) {
-      if(element.getClass().equals(Road.class)){
-        continue;
-      }
+    for (Element element : new ArrayList<>(elements)) {
       modifiedPositions.addAll(element.update(this));
     }
+
     return modifiedPositions;
   }
 
+  public List<Element> getElements() {
+    return elements;
+  }
+
+  public boolean containsFireAt(Position position) {
+    return elements.stream()
+            .anyMatch(e -> e instanceof Fire && e.getPosition().equals(position));
+  }
 
   public Position randomNeighbor(Position position) {
     List<Position> neighborPositions = neighbors.get(position);
@@ -157,7 +131,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
 
   public List<Position> updateToNextGeneration() {
     List<Position> modifiedPositions = updateElements();
-    modifiedPositions.addAll(updateFires());
+
     step++;
     return modifiedPositions;
   }
@@ -185,14 +159,23 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
   }
 
   public void extinguish(Position position) {
-    if (fires.containsKey(position)) {
-      fires.remove(position);
+
+    for(Fire fire : new HashSet<>(getFires().values())){
+        if(fire.getPosition().equals(position)){
+          elements.remove(fire);
+        }
     }
   }
 
 
   public Map<Position,Fire> getFires(){
-    return this.fires;
+    Map<Position,Fire>fires = new HashMap<>();
+    for(Element element : elements){
+      if(element.getClass().equals(Fire.class)){
+        fires.put(element.getPosition(), (Fire) element);
+      }
+    }
+    return fires;
   }
 
   public Map<Position, List<Position>> getNeighbors() {
@@ -218,9 +201,9 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
 
     for (ModelElement element : state) {
       switch (element) {
-        case FIRE -> fires.put(position, new Fire(position));
-        case FIREFIGHTER -> firefighters.add(new FireFighter(position));
-        case CLOUD ->  clouds.add(new Cloud(position));
+        case FIRE -> elements.add(new Fire(position));
+        case FIREFIGHTER -> elements.add(new FireFighter(position));
+        case CLOUD ->  elements.add(new Cloud(position));
       }
     }
   }
diff --git a/src/main/java/model/Road.java b/src/main/java/model/Road.java
index b6456104fb8bd57c62d53309165cb9e590b6c98e..bd9d09d39a3188ac4adeb525d0b69e21db3e585b 100644
--- a/src/main/java/model/Road.java
+++ b/src/main/java/model/Road.java
@@ -2,6 +2,7 @@ package model;
 
 import util.Position;
 
+import java.util.ArrayList;
 import java.util.List;
 
 public class Road implements Element {
@@ -30,6 +31,6 @@ public class Road implements Element {
 
     @Override
     public List<Position> update(FirefighterBoard firefighterBoard) {
-        return null;
+        return List.of();
     }
 }