diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java
index 2a60897c6eb8ba847cb8589840c16a0f175ce0a3..6a089b2b5348aed0a633690ff88739a26da16d6a 100644
--- a/src/main/java/controller/Controller.java
+++ b/src/main/java/controller/Controller.java
@@ -12,12 +12,9 @@ import javafx.scene.control.ToggleButton;
 import javafx.scene.control.ToggleGroup;
 import javafx.util.Duration;
 import javafx.util.Pair;
-import model.Board;
-import model.ModelElement;
-import model.FirefighterBoard;
+import model.*;
 import util.Position;
 import view.Grid;
-import view.ViewElement;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -38,9 +35,9 @@ public class Controller {
   @FXML
   private ToggleButton playToggleButton;
   @FXML
-  private Grid<ViewElement> grid;
+  private Grid<BoardElement> grid;
   private Timeline timeline;
-  private Board<List<ModelElement>> board;
+  private GameBoard board;
 
   @FXML
   private void initialize() {
@@ -54,17 +51,17 @@ public class Controller {
     pauseToggleButton.setSelected(true);
   }
 
-  private void setModel(FirefighterBoard firefighterBoard) {
-    this.board = requireNonNull(firefighterBoard, "firefighter.model is null");
+  private void setModel(GameBoard gameBoard) {
+    this.board = requireNonNull(gameBoard, "GameBoard.model is null");
   }
 
   private void updateBoard(){
     List<Position> updatedPositions = board.updateToNextGeneration();
-    List<Pair<Position, ViewElement>> updatedSquares = new ArrayList<>();
+    List<Pair<Position, BoardElement>> updatedSquares = new ArrayList<>();
     for(Position updatedPosition : updatedPositions){
-      List<ModelElement> squareState = board.getState(updatedPosition);
-      ViewElement viewElement = getViewElement(squareState);
-      updatedSquares.add(new Pair<>(updatedPosition, viewElement));
+      //List<ModelElement> squareState = board.getState(updatedPosition);
+      //BoardElement viewElement = getViewElement(squareState);
+      //updatedSquares.add(new Pair<>(updatedPosition, viewElement));
     }
     grid.repaint(updatedSquares);
     updateGenerationLabel(board.stepNumber());
@@ -73,23 +70,28 @@ public class Controller {
   private void repaintGrid(){
     int columnCount = board.columnCount();
     int rowCount = board.rowCount();
-    ViewElement[][] viewElements = new ViewElement[rowCount][columnCount];
+    model.BoardElement[][] boardElements = new model.BoardElement[rowCount][columnCount];
     for(int column = 0; column < columnCount; column++)
-      for(int row = 0; row < rowCount; row++)
-        viewElements[row][column] = getViewElement(board.getState(new Position(row, column)));
-    grid.repaint(viewElements);
+      for(int row = 0; row < rowCount; row++){
+        if(board.getElementPosition().containsKey(new Position(row,column))){
+          boardElements[row][column] = board.getElementPosition().get(new Position(row,column)).get(0);
+        }else{
+          boardElements[row][column]=new EmptyElement();
+        }
+      }
+    grid.repaint(boardElements);
     updateGenerationLabel(board.stepNumber());
   }
 
-  private ViewElement getViewElement(List<ModelElement> squareState) {
+  /*private BoardElement getViewElement(List<ModelElement> squareState) {
     if(squareState.contains(ModelElement.FIREFIGHTER)){
-      return ViewElement.FIREFIGHTER;
+      return BoardElement.FIREFIGHTER;
     }
     if (squareState.contains(ModelElement.FIRE)){
-      return ViewElement.FIRE;
+      return BoardElement.FIRE;
     }
-    return ViewElement.EMPTY;
-  }
+    return BoardElement.EMPTY;
+  }*/
 
   private void initializeTimeline() {
     Duration duration = new Duration(Controller.PERIOD_IN_MILLISECONDS);
@@ -126,7 +128,7 @@ public class Controller {
   public void initialize(int squareWidth, int squareHeight, int columnCount,
                                 int rowCount, int initialFireCount, int initialFirefighterCount) {
     grid.setDimensions(columnCount, rowCount, squareWidth, squareHeight);
-    this.setModel(new FirefighterBoard(columnCount, rowCount, initialFireCount, initialFirefighterCount));
+    this.setModel(new GameBoard(columnCount, rowCount, initialFireCount, initialFirefighterCount));
     repaintGrid();
   }
 
diff --git a/src/main/java/model/EmptyElement.java b/src/main/java/model/EmptyElement.java
new file mode 100644
index 0000000000000000000000000000000000000000..80cae5ec9935be3f9b2e39f11f9e21a03b38314a
--- /dev/null
+++ b/src/main/java/model/EmptyElement.java
@@ -0,0 +1,25 @@
+package model;
+
+import javafx.scene.paint.Color;
+import model.Visitor.Visitor;
+import util.Position;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+public class EmptyElement implements BoardElement{
+    @Override
+    public Color getColor() {
+        return Color.WHITE;
+    }
+
+    @Override
+    public Boolean accept(Visitor visitor) {
+        return null;
+    }
+
+    @Override
+    public void initialize(int initialElementCount, HashMap<Position, ArrayList<BoardElement>> elementPosition) {
+
+    }
+}
diff --git a/src/main/java/model/ExtinguishFire/FireFighter.java b/src/main/java/model/ExtinguishFire/FireFighter.java
index 1cbeb2662caae6cdf04d375b208006d8ee6f279f..da018365cc0dd6f3ee6b18f65745661a0d637f62 100644
--- a/src/main/java/model/ExtinguishFire/FireFighter.java
+++ b/src/main/java/model/ExtinguishFire/FireFighter.java
@@ -2,8 +2,8 @@ package model.ExtinguishFire;
 
 import javafx.scene.paint.Color;
 import model.BoardElement;
-import model.FirefighterBoard;
 import model.Flammable.Fire;
+import model.GameBoard;
 import model.Visitor.FireFinder;
 import model.Visitor.Visitor;
 import util.Position;
@@ -30,9 +30,9 @@ public class FireFighter implements ExtinguishFire{
     @Override
     public void initialize(int initialFireFighterCount, HashMap<Position, ArrayList<BoardElement>> elementPosition) {
         FireFinder fireFinder=new FireFinder();
-        Position position = FirefighterBoard.randomPosition();
         boolean canInitialise;
         for (int index = 0; index < initialFireFighterCount; index++) {
+            Position position = GameBoard.randomPosition();
             if(elementPosition.containsKey(position)) {
                 for (;;) {
                     canInitialise = true;
@@ -45,13 +45,20 @@ public class FireFighter implements ExtinguishFire{
                     if(canInitialise){
                         break;
                     }
-                    position = FirefighterBoard.randomPosition();
+                    position = GameBoard.randomPosition();
+                    if(!elementPosition.containsKey(position))break;
+                }
+                if(elementPosition.containsKey(position))
+                    elementPosition.get(position).add(new FireFighter(Color.BLUE));
+                else{
+                    ArrayList<BoardElement> boardElements = new ArrayList<>();
+                    boardElements.add(new FireFighter(Color.BLUE));
+                    elementPosition.put(position,boardElements);
                 }
-                elementPosition.get(position).add(new Fire(Color.BLUE));
                 continue;
             }
             ArrayList<BoardElement> boardElements = new ArrayList<>();
-            boardElements.add(new Fire(Color.BLUE));
+            boardElements.add(new FireFighter(Color.BLUE));
             elementPosition.put(position,boardElements);
         }
     }
diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java
deleted file mode 100644
index 7fa8e1d1e72a765eed8f98ea970b407d50e2137a..0000000000000000000000000000000000000000
--- a/src/main/java/model/FirefighterBoard.java
+++ /dev/null
@@ -1,157 +0,0 @@
-package model;
-
-import util.Position;
-
-import java.util.*;
-
-
-public class FirefighterBoard implements Board<List<ModelElement>> {
-   static  int columnCount;
-   static  int rowCount;
-  private final int initialFireCount;
-  private final int initialFirefighterCount;
-  private List<Position> firefighterPositions;
-  private Set<Position> firePositions;
-  private int step = 0;
-  static Random randomGenerator = new Random();
-
-  public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount) {
-    this.columnCount = columnCount;
-    this.rowCount = rowCount;
-    this.initialFireCount = initialFireCount;
-    this.initialFirefighterCount = initialFirefighterCount;
-    initializeElements();
-  }
-
-  public void initializeElements() {
-    firefighterPositions = new ArrayList<>();
-    firePositions = new HashSet<>();
-    for (int index = 0; index < initialFireCount; index++)
-      firePositions.add(randomPosition());
-    for (int index = 0; index < initialFirefighterCount; index++)
-      firefighterPositions.add(randomPosition());
-  }
-
-   public static Position randomPosition() {
-    return new Position(randomGenerator.nextInt(rowCount), randomGenerator.nextInt(columnCount));
-  }
-
-  @Override
-  public List<ModelElement> getState(Position position) {
-    List<ModelElement> result = new ArrayList<>();
-    for(Position firefighterPosition : firefighterPositions)
-      if (firefighterPosition.equals(position))
-        result.add(ModelElement.FIREFIGHTER);
-    if(firePositions.contains(position))
-      result.add(ModelElement.FIRE);
-    return result;
-  }
-
-  @Override
-  public int rowCount() {
-    return rowCount;
-  }
-
-  @Override
-  public int columnCount() {
-    return columnCount;
-  }
-
-  public List<Position> updateToNextGeneration() {
-    List<Position> result = updateFirefighters();
-    result.addAll(updateFires());
-    step++;
-    return result;
-  }
-
-  private List<Position> updateFires() {
-    List<Position> result = new ArrayList<>();
-    if (step % 2 == 0) {
-      List<Position> newFirePositions = new ArrayList<>();
-      for (Position fire : firePositions) {
-        newFirePositions.addAll(neighbors(fire));
-      }
-      firePositions.addAll(newFirePositions);
-      result.addAll(newFirePositions);
-    }
-    return result;
-
-  }
-
-  @Override
-  public int stepNumber() {
-    return step;
-  }
-
-  private List<Position> updateFirefighters() {
-    List<Position> result = new ArrayList<>();
-    List<Position> firefighterNewPositions = new ArrayList<>();
-    for (Position firefighterPosition : firefighterPositions) {
-      Position newFirefighterPosition = neighborClosestToFire(firefighterPosition);
-      firefighterNewPositions.add(newFirefighterPosition);
-      extinguish(newFirefighterPosition);
-      result.add(firefighterPosition);
-      result.add(newFirefighterPosition);
-      List<Position> neighborFirePositions = neighbors(newFirefighterPosition).stream()
-              .filter(firePositions::contains).toList();
-      for(Position firePosition : neighborFirePositions)
-        extinguish(firePosition);
-      result.addAll(neighborFirePositions);
-    }
-    firefighterPositions = firefighterNewPositions;
-    return result;
-  }
-
-  @Override
-  public void reset() {
-    step = 0;
-    initializeElements();
-  }
-
-  private void extinguish(Position position) {
-    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 (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) {
-    firePositions.remove(position);
-    for (;;) {
-      if (!firefighterPositions.remove(position)) break;
-    }
-    for(ModelElement element : state){
-      switch (element){
-        case FIRE -> firePositions.add(position);
-        case FIREFIGHTER -> firefighterPositions.add(position);
-      }
-    }
-  }
-}
\ No newline at end of file
diff --git a/src/main/java/model/Flammable/Fire.java b/src/main/java/model/Flammable/Fire.java
index 0d1f6ace5efb0438bff64eeb0a1eb6907b8439f3..94c016e9ee7221e209086a490a98de363db777d5 100644
--- a/src/main/java/model/Flammable/Fire.java
+++ b/src/main/java/model/Flammable/Fire.java
@@ -2,7 +2,7 @@ package model.Flammable;
 
 import javafx.scene.paint.Color;
 import model.BoardElement;
-import model.FirefighterBoard;
+import model.GameBoard;
 import model.Visitor.FireFinder;
 import model.Visitor.Visitor;
 import util.Position;
@@ -30,7 +30,7 @@ public class Fire implements Flammable{
     @Override
     public void initialize(int initialFireCount, HashMap<Position, ArrayList<BoardElement>> elementPosition) {
         FireFinder fireFinder=new FireFinder();
-        Position position = FirefighterBoard.randomPosition();
+        Position position = GameBoard.randomPosition();
         boolean canInitialise;
         for (int index = 0; index < initialFireCount; index++) {
             if(elementPosition.containsKey(position)) {
@@ -45,9 +45,16 @@ public class Fire implements Flammable{
                     if(canInitialise){
                         break;
                     }
-                 position = FirefighterBoard.randomPosition();
+                 position = GameBoard.randomPosition();
+                    if(!elementPosition.containsKey(position))break;
+                 }
+                 if(elementPosition.containsKey(position))
+                      elementPosition.get(position).add(new Fire(Color.RED));
+                 else{
+                     ArrayList<BoardElement> boardElements = new ArrayList<>();
+                     boardElements.add(new Fire(Color.RED));
+                     elementPosition.put(position,boardElements);
                  }
-                 elementPosition.get(position).add(new Fire(Color.RED));
                  continue;
             }
             ArrayList<BoardElement> boardElements = new ArrayList<>();
diff --git a/src/main/java/model/GameBoard.java b/src/main/java/model/GameBoard.java
index a5ace1e985091d08fc5c72f140ec013e25004578..a7c73393600cb6f456490f9b31fff3bdb210431a 100644
--- a/src/main/java/model/GameBoard.java
+++ b/src/main/java/model/GameBoard.java
@@ -1,5 +1,8 @@
 package model;
 
+import javafx.scene.paint.Color;
+import model.ExtinguishFire.FireFighter;
+import model.Flammable.Fire;
 import util.Position;
 
 import java.util.*;
@@ -9,17 +12,41 @@ public class GameBoard implements Board{
     static  int rowCount;
     private final int initialFireCount;
     private final int initialFirefighterCount;
-    private List<Position> firefighterPositions;
-    private Set<Position> firePositions;
+
     private int step = 0;
     static Random randomGenerator = new Random();
+
+    public HashMap<Position, ArrayList<BoardElement>> getElementPosition() {
+        return elementPosition;
+    }
+
     public HashMap<Position, ArrayList<BoardElement>> elementPosition;
 
-    public GameBoard(int initialFireCount, int initialFirefighterCount) {
+    public GameBoard(int columnCount,int rowCount,int initialFireCount, int initialFirefighterCount) {
+        this.columnCount = columnCount;
+        this.rowCount = rowCount;
         this.initialFireCount = initialFireCount;
         this.initialFirefighterCount = initialFirefighterCount;
+        initializeElements();
+    }
+    public void initializeElements() {
+        elementPosition=new HashMap<>();
+        Fire fire=new Fire(Color.RED);
+        FireFighter fireFighter=new FireFighter(Color.BLUE);
+        fire.initialize(initialFireCount,elementPosition);
+        fireFighter.initialize(initialFirefighterCount,elementPosition);
+    }
+
+    public static Position randomPosition() {
+        return new Position(randomGenerator.nextInt(rowCount), randomGenerator.nextInt(columnCount));
+    }
+    @Override
+    public List<Position> updateToNextGeneration() {
+        step++;
+        return null;
     }
 
+
     @Override
     public Object getState(Position position) {
         return null;
@@ -40,10 +67,6 @@ public class GameBoard implements Board{
         return columnCount;
     }
 
-    @Override
-    public List<Position> updateToNextGeneration() {
-        return null;
-    }
 
     @Override
     public void reset() {
@@ -54,4 +77,6 @@ public class GameBoard implements Board{
     public int stepNumber() {
         return step;
     }
+
+
 }
diff --git a/src/main/java/model/ModelElement.java b/src/main/java/model/ModelElement.java
deleted file mode 100644
index 759eee5e54c3a39472d8f7defbbbe6a2b67b8f00..0000000000000000000000000000000000000000
--- a/src/main/java/model/ModelElement.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package model;
-
-public enum ModelElement {
-  FIREFIGHTER, FIRE
-}
diff --git a/src/main/java/view/FirefighterGrid.java b/src/main/java/view/FirefighterGrid.java
index c1b2274637f93e4a2482faa9d2a5559211b31dc6..e81ddfd50defe3083d66f20b14bbc4de5a700caf 100644
--- a/src/main/java/view/FirefighterGrid.java
+++ b/src/main/java/view/FirefighterGrid.java
@@ -3,14 +3,15 @@ package view;
 import javafx.scene.canvas.Canvas;
 import javafx.scene.paint.Color;
 import javafx.util.Pair;
+import model.BoardElement;
 import util.Position;
 
 import java.util.List;
 
-public class FirefighterGrid extends Canvas implements Grid<ViewElement>{
+public class FirefighterGrid extends Canvas implements Grid<model.BoardElement>{
 
-    private void paintElementAtPosition(ViewElement element, Position position) {
-        paintSquare(position.row(), position.column(), element.color);
+    private void paintElementAtPosition(model.BoardElement element, Position position) {
+        paintSquare(position.row(), position.column(), element.getColor());
     }
     private int squareWidth;
     private int squareHeight;
@@ -18,27 +19,27 @@ public class FirefighterGrid extends Canvas implements Grid<ViewElement>{
     private int rowCount;
 
     @Override
-    public void repaint(List<Pair<Position, ViewElement>> positionedElements) {
-        clear(positionedElements);
-        paint(positionedElements);
+    public void repaint(List<Pair<Position, model.BoardElement>> positionedElements) {
+        //clear(positionedElements);
+        //paint(positionedElements);
         paintLines();
     }
 
-    private void clear(List<Pair<Position, ViewElement>> positionedElements) {
-        for (Pair<Position, ViewElement> positionElement : positionedElements) {
+    private void clear(List<Pair<Position, BoardElement>> positionedElements) {
+        for (Pair<Position, BoardElement> 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){
-            paintElementAtPosition(pair.getValue(), pair.getKey());
+    private void paint(List<Pair<Position, BoardElement>> positionedElements) {
+        for(Pair<Position, BoardElement> pair : positionedElements){
+            //paintElementAtPosition(pair.getValue(), pair.getKey());
         }
     }
 
     @Override
-    public void repaint(ViewElement[][] elements) {
+    public void repaint(model.BoardElement[][] elements) {
         clear();
         paint(elements);
         paintLines();
@@ -48,7 +49,7 @@ public class FirefighterGrid extends Canvas implements Grid<ViewElement>{
         getGraphicsContext2D().clearRect(0,0,getWidth(), getHeight());
     }
 
-    private void paint(ViewElement[][] elements) {
+    private void paint(model.BoardElement[][] elements) {
         for(int column = 0; column < columnCount; column++)
             for(int row = 0; row < rowCount; row++){
                 paintElementAtPosition(elements[row][column], new Position(row, column));
diff --git a/src/main/java/view/Grid.java b/src/main/java/view/Grid.java
index b95d59f622a86b41f2a41261b8b27aaf2e911dfb..411850b3c029b1162b85eaae3cf521c474b50a6e 100644
--- a/src/main/java/view/Grid.java
+++ b/src/main/java/view/Grid.java
@@ -1,6 +1,7 @@
 package view;
 
 import javafx.util.Pair;
+import model.BoardElement;
 import util.Position;
 
 import java.util.List;
@@ -25,7 +26,7 @@ public interface Grid<E> {
    *
    * @param elements A two-dimensional array of elements to be displayed on the grid.
    */
-  void repaint(E[][] elements);
+//  void repaint(E[][] elements);
 
   /**
    * Set the dimensions of the grid to the specified number of columns, number of rows, square width,
@@ -51,5 +52,7 @@ public interface Grid<E> {
    * @return The number of rows in the grid.
    */
   int rowCount();
+
+  void repaint(BoardElement[][] boardElements);
 }
 
diff --git a/src/main/java/view/ViewElement.java b/src/main/java/view/ViewElement.java
deleted file mode 100644
index ffb76112e1af543df5af41fa906082ef11be9967..0000000000000000000000000000000000000000
--- a/src/main/java/view/ViewElement.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package view;
-
-import javafx.scene.paint.Color;
-
-public enum ViewElement {
-  FIREFIGHTER(Color.BLUE), FIRE(Color.RED), EMPTY(Color.WHITE);
-  final Color color;
-  ViewElement(Color color) {
-    this.color = color;
-  }
-}
diff --git a/src/test/java/view/FirefighterGridTest.java b/src/test/java/view/FirefighterGridTest.java
index 4b45ebdca3b936b42c2b322b1294488341d180bb..d43db3ab0faf003f32ce43a2f973b3a35d6ae99e 100644
--- a/src/test/java/view/FirefighterGridTest.java
+++ b/src/test/java/view/FirefighterGridTest.java
@@ -7,13 +7,13 @@ import static org.assertj.core.api.Assertions.assertThat;
 public class FirefighterGridTest {
   @Test
   void testColumnCount(){
-    Grid<ViewElement> grid = new FirefighterGrid();
+    Grid<model.BoardElement> grid = new FirefighterGrid();
     grid.setDimensions(20,10,10,10);
     assertThat(grid.columnCount()).isEqualTo(20);
   }
   @Test
   void testRowCount(){
-    Grid<ViewElement> grid = new FirefighterGrid();
+    Grid<model.BoardElement> grid = new FirefighterGrid();
     grid.setDimensions(20,10,10,10);
     assertThat(grid.rowCount()).isEqualTo(10);
   }