diff --git a/src/main/java/model/Fire.java b/src/main/java/model/Fire.java
index 86edcaabec644b1286ff1756cf794995b02a54ae..c60478d49ee5883e0e0fd9083e6bd235d642ff58 100644
--- a/src/main/java/model/Fire.java
+++ b/src/main/java/model/Fire.java
@@ -4,20 +4,18 @@ import util.Position;
 import java.util.*;
 
 public class Fire {
-    public static Set<Position> firePositions;
+    public static List<Position> firePositions;
      
     public static void nextMove(){
         // propagate the fire to the adjacent cells
-        Set<Position> newFirePositions = new HashSet<>();
-        for(Position firePosition : firePositions){
-            if(firePosition.row() > 0) // if the fire is not on the top edge
-                newFirePositions.add(new Position(firePosition.row() - 1, firePosition.column()));
-            if(firePosition.row() < FirefighterBoard.rowCount - 1) // if the fire is not on the bottom edge
-                newFirePositions.add(new Position(firePosition.row() + 1, firePosition.column()));
-            if(firePosition.column() > 0) // if the fire is not on the left edge
-                newFirePositions.add(new Position(firePosition.row(), firePosition.column() - 1));
-            if(firePosition.column() < FirefighterBoard.columnCount - 1) // if the fire is not on the right edge
-                newFirePositions.add(new Position(firePosition.row(), firePosition.column() + 1));
+        List<Position> newFirePositions = new ArrayList<>();
+        for (Position firePosition : firePositions) {
+            List<Position> neighborPositions = Utils.neighbors(firePosition);
+            newFirePositions.addAll(neighborPositions);
         }
+        // check if the new fire positions are not already on fire
+        for (Position newFirePosition : newFirePositions)
+            if (!firePositions.contains(newFirePosition))
+                firePositions.add(newFirePosition);
     }
 }
diff --git a/src/main/java/model/FireFighters.java b/src/main/java/model/FireFighters.java
index bffc265517135e2e108929061a681713fcbfd7d6..81da2404874d40e3733042afa2a330e95c69842e 100644
--- a/src/main/java/model/FireFighters.java
+++ b/src/main/java/model/FireFighters.java
@@ -8,31 +8,27 @@ public class FireFighters {
      
 
     public static void nextMove(){
-        Set<Position> firePositions = Fire.firePositions;
-        // find the closest fire to each firefighter
-        for(Position firefighterPosition : firefighterPositions){
-            Position closestFire = null;
-            int closestDistance = Integer.MAX_VALUE;
-            for(Position firePosition : firePositions){
-                int distance = Math.abs(firefighterPosition.row() - firePosition.row()) + Math.abs(firefighterPosition.column() - firePosition.column());
-                if(distance < closestDistance){
-                    closestDistance = distance;
-                    closestFire = firePosition;
-                }
-            }
-            List<Position> newFirefighterPositions = new ArrayList<>();
-            // move the firefighter towards the closest fire
-            if(closestFire.row() > firefighterPosition.row())
-                newFirefighterPositions.add(new Position(firefighterPosition.row() + 1, firefighterPosition.column()));
-            else if(closestFire.row() < firefighterPosition.row())
-                newFirefighterPositions.add(new Position(firefighterPosition.row() - 1, firefighterPosition.column()));
-            else if(closestFire.column() > firefighterPosition.column())
-                newFirefighterPositions.add(new Position(firefighterPosition.row(), firefighterPosition.column() + 1));
-            else if(closestFire.column() < firefighterPosition.column())
-                newFirefighterPositions.add(new Position(firefighterPosition.row(), firefighterPosition.column() - 1));
+        List<Position> firefighterNewPositions = new ArrayList<>();
+        for (Position firefighterPosition : firefighterPositions) {
+            Position newFirefighterPosition = Utils.neighborClosestToFire(firefighterPosition);
+            firefighterNewPositions.add(newFirefighterPosition);
+            extinguish(newFirefighterPosition);
+        }
+        firefighterPositions = firefighterNewPositions;
+    }
 
-            firefighterPositions = newFirefighterPositions;
-         
+    public static void extinguishs(){
+        for (Position firefighterPosition : firefighterPositions) {
+            List<Position> neighborFirePositions = Utils.neighbors(firefighterPosition).stream()
+                    .filter(Fire.firePositions::contains).toList();
+            for(Position firePosition : neighborFirePositions)
+                extinguish(firePosition);
         }
     }
+
+
+
+    public static void extinguish(Position position){
+        Fire.firePositions.remove(position);
+    }
 }
diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java
index 305a10892af399cfd972d52a2941e406e390dc88..1d961dfd1fdf3dbccfe76a67007a2b2342218d91 100644
--- a/src/main/java/model/FirefighterBoard.java
+++ b/src/main/java/model/FirefighterBoard.java
@@ -22,6 +22,8 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
   }
 
   public void initializeElements() {
+    Fire.firePositions = new ArrayList<>();
+    FireFighters.firefighterPositions = new ArrayList<>();
     for (int index = 0; index < initialFireCount; index++)
       Fire.firePositions.add(randomPosition());
     for (int index = 0; index < initialFirefighterCount; index++)
@@ -54,24 +56,19 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
   }
 
   public List<Position> updateToNextGeneration() {
+
     FireFighters.nextMove();
-    List<Position> result = FireFighters.firefighterPositions;
-    Fire.nextMove();
-    result.addAll(Fire.firePositions);
-    step++;
-    return result;
-  }
+    FireFighters.extinguishs();
+
+    if (step % 2 == 0)
+      Fire.nextMove();
 
-  private List<Position> updateFires() {
+    step++;
     List<Position> result = new ArrayList<>();
-    if (step % 2 == 0) {
-      List<Position> newFirePositions = new ArrayList<>();
-      for (Position fire : Fire.firePositions) {
-        newFirePositions.addAll(neighbors(fire));
-      }
-      Fire.firePositions.addAll(newFirePositions);
-      result.addAll(newFirePositions);
-    }
+
+    result.addAll(Fire.firePositions);
+    result.addAll(FireFighters.firefighterPositions);
+
     return result;
 
   }
@@ -81,24 +78,6 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
     return step;
   }
 
-  private List<Position> updateFirefighters() {
-    List<Position> result = new ArrayList<>();
-    List<Position> firefighterNewPositions = new ArrayList<>();
-    for (Position firefighterPosition : FireFighters.firefighterPositions) {
-      Position newFirefighterPosition = neighborClosestToFire(firefighterPosition);
-      firefighterNewPositions.add(newFirefighterPosition);
-      extinguish(newFirefighterPosition);
-      result.add(firefighterPosition);
-      result.add(newFirefighterPosition);
-      List<Position> neighborFirePositions = neighbors(newFirefighterPosition).stream()
-              .filter(Fire.firePositions::contains).toList();
-      for(Position firePosition : neighborFirePositions)
-        extinguish(firePosition);
-      result.addAll(neighborFirePositions);
-    }
-    FireFighters.firefighterPositions = firefighterNewPositions;
-    return result;
-  }
 
   @Override
   public void reset() {
@@ -106,38 +85,6 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
     initializeElements();
   }
 
-  private void extinguish(Position position) {
-    Fire.firePositions.remove(position);
-  }
-
-  private List<Position> neighbors(Position position) {
-    List<Position> list = new ArrayList<>();
-    if (position.row() > 0) list.add(new Position(position.row() - 1, position.column()));
-    if (position.column() > 0) list.add(new Position(position.row(), position.column() - 1));
-    if (position.row() < rowCount - 1) list.add(new Position(position.row() + 1, position.column()));
-    if (position.column() < columnCount - 1) list.add(new Position(position.row(), position.column() + 1));
-    return list;
-  }
-
-  private Position neighborClosestToFire(Position position) {
-    Set<Position> seen = new HashSet<>();
-    HashMap<Position, Position> firstMove = new HashMap<>();
-    Queue<Position> toVisit = new LinkedList<>(neighbors(position));
-    for (Position initialMove : toVisit)
-      firstMove.put(initialMove, initialMove);
-    while (!toVisit.isEmpty()) {
-      Position current = toVisit.poll();
-      if (Fire.firePositions.contains(current))
-        return firstMove.get(current);
-      for (Position adjacent : neighbors(current)) {
-        if (seen.contains(adjacent)) continue;
-        toVisit.add(adjacent);
-        seen.add(adjacent);
-        firstMove.put(adjacent, firstMove.get(current));
-      }
-    }
-    return position;
-  }
 
   @Override
   public void setState(List<ModelElement> state, Position position) {
diff --git a/src/main/java/view/FirefighterGrid.java b/src/main/java/view/FirefighterGrid.java
index c1b2274637f93e4a2482faa9d2a5559211b31dc6..a4306b3f80d321a4af6a890c6e1f9328e5ae23bc 100644
--- a/src/main/java/view/FirefighterGrid.java
+++ b/src/main/java/view/FirefighterGrid.java
@@ -19,17 +19,18 @@ public class FirefighterGrid extends Canvas implements Grid<ViewElement>{
 
     @Override
     public void repaint(List<Pair<Position, ViewElement>> positionedElements) {
-        clear(positionedElements);
+        clear();
         paint(positionedElements);
         paintLines();
     }
-
+    /*
     private void clear(List<Pair<Position, ViewElement>> positionedElements) {
         for (Pair<Position, ViewElement> positionElement : positionedElements) {
             Position position = positionElement.getKey();
             clearSquare(position.row(), position.column());
         }
     }
+     */
 
     private void paint(List<Pair<Position, ViewElement>> positionedElements) {
         for(Pair<Position, ViewElement> pair : positionedElements){
@@ -90,8 +91,9 @@ public class FirefighterGrid extends Canvas implements Grid<ViewElement>{
         getGraphicsContext2D().setFill(color);
         getGraphicsContext2D().fillRect(row*squareHeight,column*squareWidth,squareHeight,squareWidth);
     }
-
+    /*
     private void clearSquare(int row, int column){
         getGraphicsContext2D().clearRect(row*squareHeight,column*squareWidth,squareHeight,squareWidth);
     }
+     */
 }
\ No newline at end of file