diff --git a/src/main/java/model/EmptySquare.java b/src/main/java/model/EmptySquare.java
index d0a73934b148c14e9d7a04e5071bf12451d6acc9..1d5749d61f6594f34d167fc1e00d5416816324c1 100644
--- a/src/main/java/model/EmptySquare.java
+++ b/src/main/java/model/EmptySquare.java
@@ -1,5 +1,8 @@
 package model;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import javafx.scene.paint.Color;
 import util.Position;
 
@@ -11,8 +14,8 @@ public class EmptySquare implements Entity{
         this.position = p;
     }
     @Override
-    public void nextTurn(Board<Entity> board) {
-        return;
+    public List<Position> nextTurn(Board<Entity> board) {
+        return new ArrayList<Position>();
     }
 
     @Override
@@ -28,4 +31,13 @@ public class EmptySquare implements Entity{
     public Color getViewColor(){
         return this.viewColor;
     }
+    @Override
+    public int getAge() {
+        return -999;
+    }
+
+    @Override
+    public void incrementAge() {
+        return;
+    }
 }
diff --git a/src/main/java/model/Fire.java b/src/main/java/model/Fire.java
index 7e54fc2b23057479b1f38f1a782d66e9b1b49501..43f7967f35ec964773b03c8839f3b66196e80bce 100644
--- a/src/main/java/model/Fire.java
+++ b/src/main/java/model/Fire.java
@@ -10,16 +10,29 @@ public class Fire implements Entity{
     Board<Entity> b;
     private Position position;
     private final Color viewColor = Color.RED;
+    private int age;
     public Fire(Position position, Board<Entity> b){
+        this.b = b;
         this.position = position;
+        this.age = 0;
+    }
+    public Fire(Position position, Board<Entity> b, int age){
+        this.b = b;
+        this.position = position;
+        this.age = age;
     }
 
     @Override
-    public void nextTurn(Board<Entity> board) {
+    public List<Position> nextTurn(Board<Entity> board) {
+        age = age +1;
         List<Position> positions = generateAdjacentPosition();
         for(Position p : positions){
             board.setState(new Fire(p, board), p);
+            if(!b.doesPositionExist(p)){
+                positions.remove(p);
+            }
         }
+        return positions;
     }
 
     private List<Position> generateAdjacentPosition(){
@@ -49,4 +62,14 @@ public class Fire implements Entity{
     public Color getViewColor(){
         return this.viewColor;
     }
+
+    @Override
+    public int getAge() {
+        return this.age;
+    }
+
+    @Override
+    public void incrementAge() {
+        this.age = age + 1 ;
+    }
 }
diff --git a/src/main/java/model/FireFighter.java b/src/main/java/model/FireFighter.java
index 8a78412d32444566960bf3223c3e832ea5baa3fa..4088d8e69cd447a9de46c19d5cff06ac6393c461 100644
--- a/src/main/java/model/FireFighter.java
+++ b/src/main/java/model/FireFighter.java
@@ -1,8 +1,12 @@
 package model;
+import java.util.ArrayList;
+import java.util.List;
+
 import javafx.scene.paint.Color;
 import util.Position;
 
 public class FireFighter implements Entity{
+    private int age;
     private Position position;
     private final Color viewColor = Color.BLUE;
     private Board<Entity> board;
@@ -10,9 +14,19 @@ public class FireFighter implements Entity{
     public FireFighter(Position position, Board<Entity> b){
         this.position = position;
         this.board = b;
+        this.age = 0;
+    }
+    public FireFighter(Position position, Board<Entity> b, int age){
+        this.position = position;
+        this.board = b;
+        this.age = age;
     }
     
-    public void nextTurn(Board<Entity> b){
+    public List<Position> nextTurn(Board<Entity> b){
+        age++;
+        List<Position> positions = new ArrayList<Position>();
+        positions.add(position);
+        return positions;
         // Récupérer la position
         //Si un feu est à proximité : éteindre les feux à x + 1 y, x y+1, x+1 y-1, x-1 y+1 
         //Sinon
@@ -34,5 +48,14 @@ public class FireFighter implements Entity{
         return this.viewColor;
     }
 
+    @Override
+    public int getAge() {
+        return this.age;
+    }
+    @Override
+    public void incrementAge() {
+        this.age = age + 1 ;
+    }
+
     
 }
diff --git a/src/main/java/model/FireFighterScenario.java b/src/main/java/model/FireFighterScenario.java
index 553307771917db0af9782065e429f4f44abe68de..c8df8095a524b1507681a843611b2e675b5f0608 100644
--- a/src/main/java/model/FireFighterScenario.java
+++ b/src/main/java/model/FireFighterScenario.java
@@ -40,7 +40,7 @@ private void placeInitialActors(int initialFireCount, int initialFireFightersCou
         for (Position pos : positions) {
             if (getState(pos) instanceof EmptySquare) {
                 if (fireCount < initialFireCount && random.nextInt(100) < chance) {
-                    setState(new Fire(pos, this), pos);
+                    setState(new Fire(pos, this, 1), pos);
                     fireCount++;
                     if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount) {
                         return;
@@ -49,7 +49,7 @@ private void placeInitialActors(int initialFireCount, int initialFireFightersCou
                 }
 
                 if (fireFighterCount < initialFireFightersCount && random.nextInt(100) < chance) {
-                    setState(new FireFighter(pos, this), pos);
+                    setState(new FireFighter(pos, this,1), pos);
                     fireFighterCount++;
                     if (fireCount == initialFireCount && fireFighterCount == initialFireFightersCount) {
                         return;
@@ -76,7 +76,9 @@ private void placeInitialActors(int initialFireCount, int initialFireFightersCou
     if (!(getState(position) instanceof EmptySquare)) {
       return;
     }
-    matrix.set(position.x(), position.y(), state);
+    if(doesPositionExist(position)){
+      matrix.set(position.x(), position.y(), state);
+    }
   }
 
   public void setState(Entity state, Position position, boolean replaceStates) {
@@ -97,15 +99,16 @@ private void placeInitialActors(int initialFireCount, int initialFireFightersCou
   public List<Position> updateToNextGeneration() {
     ArrayList<Position> changedPositions = new ArrayList<>();
     Iterator<Entity> iterator = matrix.iterator();
-
     while (iterator.hasNext()) {
       Entity e = iterator.next();
-      Position p = new Position(e.getPosition().x(), e.getPosition().y());
-      e.nextTurn(this);
-
-      if (!e.getPosition().equals(p)) {
-        changedPositions.add(p);
-      }
+      if(e instanceof EmptySquare) continue;
+      System.out.println("found age : " + e.getAge()  + " current age : " + step);
+      if(e.getAge() == 0) {
+        e.incrementAge();
+        continue;
+      };
+      List<Position> entityUpdatedPositions = e.nextTurn(this);
+      changedPositions.addAll(entityUpdatedPositions);
     }
     return changedPositions;
   }
@@ -115,12 +118,17 @@ private void placeInitialActors(int initialFireCount, int initialFireFightersCou
   }
 
   public int stepNumber() {
-    this.step++;
+    this.step = step +1;
     return this.step;
   }
 
   @Override
   public boolean doesPositionExist(Position position) {
-    return matrix.validateIndexes(position);
+    return matrix.validateIndex(position);
+  }
+
+  @Override
+  public int getStepNumber() {
+    return step;
   }
 }
diff --git a/src/main/java/util/Matrix.java b/src/main/java/util/Matrix.java
index 7d8f97f0c76bfe32264f89cde79a5a3bac5f7346..c68517f85a262934a8f8379069212f507684f134 100644
--- a/src/main/java/util/Matrix.java
+++ b/src/main/java/util/Matrix.java
@@ -26,12 +26,12 @@ public class Matrix<E> implements Iterable<E> {
     }
 
     public E get(int x, int y) {
-        validateIndexes(x, y);
+        validateIndex(x, y);
         return matrix.get(x).get(y);
     }
 
     public E set(int x, int y, E object) {
-        validateIndexes(x, y);
+        validateIndex(x, y);
         return matrix.get(x).set(y, object);
     }
 
@@ -84,14 +84,14 @@ public class Matrix<E> implements Iterable<E> {
     }
         */
 
-    private void validateIndexes(int x, int y) {
+    private void validateIndex(int x, int y) {
         if (x < 0 || x >= rows || y < 0 || y >= columns) {
             throw new IndexOutOfBoundsException("Indices x: "+ x + " y: " + y + " hors limites pour la matrice.");
         }
     }
 
-    public boolean validateIndexes(Position position){
-        return position.x() < 0 || position.x() >= rows || position.y() < 0 || position.y() >= columns;
+    public boolean validateIndex(Position position){
+        return position.x() >= 0 && position.x() < rows && position.y() >= 0 && position.y() < columns;
     }