diff --git a/src/main/java/model/BoardElement.java b/src/main/java/model/BoardElement.java
deleted file mode 100644
index eedeffaa781f160e27e566e0b234b9d2e8eed32d..0000000000000000000000000000000000000000
--- a/src/main/java/model/BoardElement.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package model;
-
-import util.Position;
-
-public interface BoardElement {
-    Position getPosition();
-    void setPosition(Position position);
-}
-
diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java
index 353e06495a142990311f21682724d64fe7a030a7..dadc043a04ba1fc223a6715cf932e5db1be1fc65 100644
--- a/src/main/java/model/FirefighterBoard.java
+++ b/src/main/java/model/FirefighterBoard.java
@@ -1,5 +1,6 @@
 package model;
 
+import model.update.NextGenerationUpdater;
 import util.Position;
 
 import java.util.*;
@@ -21,6 +22,9 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
   private int step = 0;
   private final Random randomGenerator = new Random();
 
+  private NextGenerationUpdater nextGenerationUpdater;
+
+
   public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount, int initialCloudCount, int initialMountainCount) {
     this.columnCount = columnCount;
     this.rowCount = rowCount;
@@ -41,6 +45,9 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
     this.initialFirefighterCount = initialFirefighterCount;
     this.initialCloudCount = initialCloudCount;
     initializeElements();
+
+    // Initialisation des Updaters
+    nextGenerationUpdater = new NextGenerationUpdater(fire, clouds, firefighters, mountains, neighbors);
   }
 
   public void initializeElements() {
@@ -117,63 +124,18 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
   public int columnCount() {
     return columnCount;
   }
-
-  public List<Position> updateToNextGeneration() {
-    List<Position> modifiedPositions = updateFirefighters();
-    if (step % 2 == 0){
-      modifiedPositions.addAll(fire.spreadFire(getMountainPositions()));
-    }
-    for (Cloud cloud : clouds) {
-      cloud.move();
-      cloud.protectFromFire(fire);
-      cloud.extinguishSurroundingFires(fire);
-    }
-    step++;
-
-    return modifiedPositions;
-  }
-  private Set<Position> getMountainPositions() {
-    Set<Position> mountainPositions = new HashSet<>();
-    for (Mountain mountain : mountains) {
-      mountainPositions.add(mountain.getPosition());
-    }
-    return mountainPositions;
-  }
-
   @Override
   public int stepNumber() {
     return step;
   }
 
-  private List<Position> updateFirefighters() {
-    List<Position> modifiedPosition = new ArrayList<>();
-    for (Firefighter firefighter : firefighters) {
-
-      modifiedPosition.add(firefighter.getPosition());
-
-      Position newPosition = firefighter.moveToBestPosition(fire.getFirePositions(), neighbors, getMountainPositions());
-      firefighter.setPosition(newPosition);
-
-      modifiedPosition.add(newPosition);
-
-      firefighter.extinguish(newPosition, fire.getFirePositions());
-
-      // Éteindre les feux dans les positions voisines
-      List<Position> adjacentFires = neighbors.get(newPosition).stream()
-              .filter(fire.getFirePositions()::contains)
-              .toList();
-      for (Position firePosition : adjacentFires) {
-        firefighter.extinguish(firePosition, fire.getFirePositions());
-        modifiedPosition.add(firePosition);
-      }
-
-    }
-    return modifiedPosition;
+  public List<Position> updateToNextGeneration() {
+    return nextGenerationUpdater.updateToNextGeneration();
   }
 
   @Override
   public void reset() {
-    step = 0;
+    nextGenerationUpdater.resetStep();
     initializeElements();
   }
 
diff --git a/src/main/java/util/Position.java b/src/main/java/util/Position.java
index 31dc4c1fb6a04b4e96649e133d1d116120d34683..aaa34af4391204ebbcd76896d3949311cb36c6d6 100644
--- a/src/main/java/util/Position.java
+++ b/src/main/java/util/Position.java
@@ -1,5 +1,9 @@
 package util;
 
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 public record Position(int row, int column) {
 
 }