diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java
index 7c6091a0c3770fc45ecfe6d87d4b9df142aa5db9..ea6f8034b0eeaac4c5c9e5ff81b8c67bfc808913 100644
--- a/src/main/java/model/FirefighterBoard.java
+++ b/src/main/java/model/FirefighterBoard.java
@@ -1,36 +1,61 @@
 package model;
 
 import util.Position;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
-import java.util.Set;
+
+import java.util.*;
 
 public class FirefighterBoard implements Board<List<ModelElement>> {
 
     private int rowCount;
     private int columnCount;
-    private List<Position> firefighterPositions;
-    private Set<Position> firePositions;
+    private final FireManager fireManager;
+    private final FirefighterManager firefighterManager;
+    private final NeighborManager neighborManager;
+    private int step;
 
     public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount) {
         this.columnCount = columnCount;
         this.rowCount = rowCount;
+        this.neighborManager = new NeighborManager(rowCount, columnCount);
+
+        this.fireManager = new FireManager(new SimpleFireSpreadStrategy());
+        this.firefighterManager = new FirefighterManager(new SimpleFirefighterMovementStrategy());
+
         Random random = new Random();
-        firefighterPositions = FirefighterManager.initializeFireFightersPositions(initialFirefighterCount, rowCount, columnCount, random);
-        firePositions = FireManager.initializeFires(initialFireCount,rowCount, columnCount, random);
-        // Initialize firefighters and fires (you can adapt this code as needed)
+        fireManager.initializeFires(initialFireCount, rowCount,columnCount, random);
+        firefighterManager.initializeFireFightersPositions(initialFirefighterCount,rowCount,columnCount,random);
+        this.step = 0;
     }
 
     @Override
     public List<ModelElement> getState(Position position) {
-        // Implement this method to return the state of the given position
-        return null; // This is just a placeholder
+        List<ModelElement> elements = new ArrayList<>();
+
+        // Check if the position contains a fire
+        if (fireManager.getFirePositions().contains(position)) {
+            elements.add(ModelElement.FIRE);
+        }
+
+        // Check if the position contains a firefighter
+        if (firefighterManager.getFirefighterPositions().contains(position)) {
+            elements.add(ModelElement.FIREFIGHTER);
+        }
+
+        return elements;
     }
 
     @Override
     public void setState(List<ModelElement> state, Position position) {
-        // Implement this method to set the state of the given position
+        fireManager.extinguish(position);
+        firefighterManager.getFirefighterPositions().remove(position);
+
+        // Add elements based on the new state
+        for (ModelElement element : state) {
+            switch (element) {
+                case FIRE -> fireManager.getFirePositions().add(position);
+                case FIREFIGHTER -> firefighterManager.getFirefighterPositions().add(position);
+            }
+        }
     }
 
     @Override
@@ -45,18 +70,41 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
 
     @Override
     public List<Position> updateToNextGeneration() {
-        // Implement this method to return updated positions for the next generation
-        return null; // This is just a placeholder
+        List<Position> modifiedPositions = new ArrayList<>();
+
+        // Spread the fires and update affected positions
+        modifiedPositions.addAll(fireManager.fireSpread(neighborManager.getNeighbors()));
+
+        // Move firefighters and update affected positions
+        modifiedPositions.addAll(firefighterManager.moveFireFighters(
+                fireManager.getFirePositions(),
+                neighborManager.getNeighbors()
+        ));
+
+        // Increment the step count
+        step++;
+
+        return modifiedPositions;
     }
 
     @Override
     public void reset() {
-        // Implement this method to reset the board
+        // Reset step and reinitialize managers
+        this.step = 0;
+
+        Random random = new Random();
+        fireManager.getFirePositions().clear();
+        firefighterManager.getFirefighterPositions().clear();
+
+        fireManager.initializeFires(fireManager.getFirePositions().size(), rowCount, columnCount, random);
+        firefighterManager.initializeFireFightersPositions(
+                firefighterManager.getFirefighterPositions().size(), rowCount, columnCount, random
+        );
     }
 
     @Override
     public int stepNumber() {
-        return 0; // This is just a placeholder
+        return step;
     }
 }