diff --git a/src/main/java/app/SimulatorApplication.java b/src/main/java/app/SimulatorApplication.java
index ddb4c758e6405d27d270119f25640d227c86b23b..9d51e4f6dd14958b63d96327a9aa7cb1c90649a8 100644
--- a/src/main/java/app/SimulatorApplication.java
+++ b/src/main/java/app/SimulatorApplication.java
@@ -22,6 +22,8 @@ public class SimulatorApplication extends javafx.application.Application {
   public static final int INITIAL_CLOUD_COUNT = 2;
   public static final int INITIAL_FIRETRUCK_COUNT = 1;
 
+  public static final int[] elementsCount = new int[]{INITIAL_FIRE_COUNT, INITIAL_FIREFIGHTER_COUNT, INITIAL_CLOUD_COUNT, INITIAL_FIRETRUCK_COUNT};
+
   private Stage primaryStage;
   private Parent view;
   private void initializePrimaryStage(Stage primaryStage) {
@@ -45,8 +47,8 @@ public class SimulatorApplication extends javafx.application.Application {
     loader.setLocation(location);
     view = loader.load();
     Controller controller = loader.getController();
-    controller.initialize(SQUARE_WIDTH, SQUARE_HEIGHT, COLUMN_COUNT, ROW_COUNT,
-            INITIAL_FIRE_COUNT, INITIAL_FIREFIGHTER_COUNT, INITIAL_CLOUD_COUNT,INITIAL_FIRETRUCK_COUNT);
+
+    controller.initialize(SQUARE_WIDTH, SQUARE_HEIGHT, COLUMN_COUNT, ROW_COUNT, elementsCount);
   }
 
   private void showScene() {
diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java
index 62c2df9dbcb4f8d6a61edd2b4470d57ae907d43a..154f82b80d8b950689dee1106fa170058027696e 100644
--- a/src/main/java/controller/Controller.java
+++ b/src/main/java/controller/Controller.java
@@ -130,9 +130,9 @@ public class Controller {
   }
 
   public void initialize(int squareWidth, int squareHeight, int columnCount,
-                                int rowCount, int initialFireCount, int initialFirefighterCount, int initialCloudCount,int initialFireTruckCount) {
+                         int rowCount, int[] elementsCount) {
     grid.setDimensions(columnCount, rowCount, squareWidth, squareHeight);
-    this.setModel(new FirefighterBoard(columnCount, rowCount, initialFireCount, initialFirefighterCount, initialCloudCount, initialFireTruckCount));
+    this.setModel(new FirefighterBoard(columnCount, rowCount, elementsCount));
     repaintGrid();
   }
   public void oneStepButtonAction() {
diff --git a/src/main/java/model/AbstractElements.java b/src/main/java/model/AbstractElements.java
index 79cb2ddc6d850e38f6f35608f188c0422d7d13e6..8581e4579813c4882bd0b09ced0722dc2db9f04c 100644
--- a/src/main/java/model/AbstractElements.java
+++ b/src/main/java/model/AbstractElements.java
@@ -9,6 +9,10 @@ public abstract class AbstractElements implements Elements {
     int rowCount = 0;
     int columnCount = 0;
 
+    ModelElement modelElement;
+
+    List<Position> elementsPositions;
+
 
     public abstract void nextMove();
     public abstract void initializeElements(int count, int rowCount, int columnCount);
@@ -26,5 +30,15 @@ public abstract class AbstractElements implements Elements {
         return list;
     }
 
+    public List<Position> getElementsPositions() {
+        return elementsPositions;
+    }
+    public void addElement(Position position){
+        elementsPositions.add(position);
+    }
 
+    @Override
+    public ModelElement getModelElement() {
+        return modelElement;
+    }
 }
diff --git a/src/main/java/model/AbstractFireFighters.java b/src/main/java/model/AbstractFireFighters.java
index f667d457cd8d07d4b7358bb1445b41059dd04aaf..7681ebd00741e05c7ff40df55533f0afb628b127 100644
--- a/src/main/java/model/AbstractFireFighters.java
+++ b/src/main/java/model/AbstractFireFighters.java
@@ -4,11 +4,11 @@ import util.Position;
 import java.util.*;
 
 public abstract class AbstractFireFighters extends AbstractElements{
-    public List<Position> firefighterPositions;
+    public List<Position> elementsPositions;
     public Fire fire;
 
     public AbstractFireFighters(int columnCount, int rowCount, Fire fire){
-        firefighterPositions = new ArrayList<>();
+        elementsPositions = new ArrayList<>();
         this.columnCount = columnCount;
         this.rowCount = rowCount;
         this.fire = fire;
@@ -25,7 +25,7 @@ public abstract class AbstractFireFighters extends AbstractElements{
 
         while (!toVisit.isEmpty()) {
             Position current = toVisit.poll();
-            if (fire.firePositions.contains(current)){
+            if (fire.elementsPositions.contains(current)){
                 return firstMove.get(current);}
             for (Position adjacent : neighbors(current)) {
                 if (seen.contains(adjacent)) continue;
@@ -40,8 +40,8 @@ public abstract class AbstractFireFighters extends AbstractElements{
 
 
     public void initializeElements(int count, int rowCount, int columnCount){
-        firefighterPositions = new ArrayList<>();
+        elementsPositions = new ArrayList<>();
         for(int i = 0; i < count; i++)
-            firefighterPositions.add(randomPosition(rowCount, columnCount));
+            elementsPositions.add(randomPosition(rowCount, columnCount));
     }
 }
diff --git a/src/main/java/model/Cloud.java b/src/main/java/model/Cloud.java
index 0b96bfc23750cdfef1bb4665d9beef0167f89f4c..119eb4f87121985a29d55b105464fb496bbc340c 100644
--- a/src/main/java/model/Cloud.java
+++ b/src/main/java/model/Cloud.java
@@ -6,7 +6,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 public class Cloud extends AbstractElements{
-    List<Position> cloudPositions;
+    List<Position> elementsPositions;
     Fire fire;
 
 
@@ -14,25 +14,26 @@ public class Cloud extends AbstractElements{
         this.columnCount = columnCount;
         this.rowCount = rowCount;
         this.fire = fire;
+        this.modelElement = ModelElement.CLOUD;
     }
     @Override
     public void nextMove() {
         List<Position> cloudNewPositions = new ArrayList<>();
-        for (Position cloudPosition : cloudPositions) {
+        for (Position cloudPosition : elementsPositions) {
             List<Position> neighborsPositions = neighbors(cloudPosition);
             cloudNewPositions.add(neighborsPositions.get(randomGenerator.nextInt(neighborsPositions.size())));
             fire.extinguish(cloudPosition);
         }
-        cloudPositions = cloudNewPositions;
+        elementsPositions = cloudNewPositions;
 
     }
 
     @Override
     public void initializeElements(int count, int rowCount, int columnCount) {
-        cloudPositions = new ArrayList<>();
+        elementsPositions = new ArrayList<>();
         for (int i = 0; i < count; i++) {
-            cloudPositions.add(randomPosition(rowCount, columnCount));
+            elementsPositions.add(randomPosition(rowCount, columnCount));
         }
-        System.out.println(cloudPositions);
+        System.out.println(elementsPositions);
     }
 }
diff --git a/src/main/java/model/Elements.java b/src/main/java/model/Elements.java
index 39ae41d0941bf18ef782debae2ecccfa7baa4264..bd739a3a3c97bbdcb40c81edd3a754ccf7864039 100644
--- a/src/main/java/model/Elements.java
+++ b/src/main/java/model/Elements.java
@@ -1,6 +1,10 @@
 package model;
 
 
+import util.Position;
+
+import java.util.List;
+
 public interface Elements {
 
 
@@ -8,5 +12,10 @@ public interface Elements {
     void nextMove();
     void initializeElements(int count, int rowCount, int columnCount);
 
+    List<Position> getElementsPositions();
+    void addElement(Position position);
+
+    ModelElement getModelElement();
+
 
 }
diff --git a/src/main/java/model/Fire.java b/src/main/java/model/Fire.java
index da6db9a50b684274a29cc12002d29f5c69f5a6c6..7ac5d24cb7cf56737f6a492ad39410a5eefa4479 100644
--- a/src/main/java/model/Fire.java
+++ b/src/main/java/model/Fire.java
@@ -4,41 +4,42 @@ import util.Position;
 import java.util.*;
 
 public class Fire extends AbstractElements{
-    public List<Position> firePositions;
+    public List<Position> elementsPositions;
 
     public Fire(int columnCount, int rowCount){
-        firePositions = new ArrayList<>();
+        elementsPositions = new ArrayList<>();
         this.columnCount = columnCount;
         this.rowCount = rowCount;
+        this.modelElement = ModelElement.FIRE;
     }
      
     public void nextMove(){
 
         // propagate the fire to the adjacent cells
-        List<Position> newFirePositions = new ArrayList<>();
-        for (Position firePosition : firePositions) {
+        List<Position> newelementsPositions = new ArrayList<>();
+        for (Position firePosition : elementsPositions) {
             List<Position> neighborPositions = neighbors(firePosition);
-            newFirePositions.addAll(neighborPositions);
+            newelementsPositions.addAll(neighborPositions);
         }
         // check if the new fire positions are not already on fire
-        for (Position newFirePosition : newFirePositions)
-            if (!firePositions.contains(newFirePosition))
-                firePositions.add(newFirePosition);
+        for (Position newFirePosition : newelementsPositions)
+            if (!elementsPositions.contains(newFirePosition))
+                elementsPositions.add(newFirePosition);
     }
 
     @Override
     public void initializeElements(int count, int rowCount, int columnCount) {
-        firePositions = new ArrayList<>();
+        elementsPositions = new ArrayList<>();
         for(int i = 0; i < count; i++)
-            firePositions.add(randomPosition(rowCount, columnCount));
+            elementsPositions.add(randomPosition(rowCount, columnCount));
     }
 
     public void extinguishs(List<Position> firefighterPositions){
 
         for (Position firefighterPosition : firefighterPositions) {
-            List<Position> neighborFirePositions = neighbors(firefighterPosition).stream()
-                    .filter(firePositions::contains).toList();
-            for(Position firePosition : neighborFirePositions)
+            List<Position> neighborelementsPositions = neighbors(firefighterPosition).stream()
+                    .filter(elementsPositions::contains).toList();
+            for(Position firePosition : neighborelementsPositions)
                 extinguish(firePosition);
         }
 
@@ -48,6 +49,6 @@ public class Fire extends AbstractElements{
 
 
     public void extinguish(Position position){
-        firePositions.remove(position);
+        elementsPositions.remove(position);
     }
 }
diff --git a/src/main/java/model/FireFighterPerson.java b/src/main/java/model/FireFighterPerson.java
index 637b4bd046b6992fa51216011404f721d549bad2..5f5f22c431f23449b2ed14f93ce6bbfe66472d69 100644
--- a/src/main/java/model/FireFighterPerson.java
+++ b/src/main/java/model/FireFighterPerson.java
@@ -8,17 +8,18 @@ import java.util.List;
 public class FireFighterPerson extends AbstractFireFighters{
     public FireFighterPerson(int columnCount, int rowCount, Fire fire) {
         super(columnCount, rowCount, fire);
+        this.modelElement = ModelElement.FIREFIGHTER;
     }
 
     @Override
     public void nextMove(){
         List<Position> firefighterNewPositions = new ArrayList<>();
-        for (Position firefighterPosition : firefighterPositions) {
+        for (Position firefighterPosition : elementsPositions) {
             Position newFirefighterPosition = neighborClosestToFire(firefighterPosition);
             firefighterNewPositions.add(newFirefighterPosition);
             fire.extinguish(newFirefighterPosition);
 
         }
-        firefighterPositions = firefighterNewPositions;
+        elementsPositions = firefighterNewPositions;
     }
 }
diff --git a/src/main/java/model/FireTruck.java b/src/main/java/model/FireTruck.java
index e60266123b2dd4bd94eb1b590aedf58e02bad292..74a46b1263bea9e638f15411f565f595712fe9ae 100644
--- a/src/main/java/model/FireTruck.java
+++ b/src/main/java/model/FireTruck.java
@@ -8,17 +8,18 @@ import java.util.List;
 public class FireTruck extends AbstractFireFighters{
     public FireTruck(int columnCount, int rowCount, Fire fire) {
         super(columnCount, rowCount, fire);
+        this.modelElement = ModelElement.FIRETRUCK;
     }
 
     public void nextMove(){
         List<Position> firefighterNewPositions = new ArrayList<>();
-        for (Position firefighterPosition : firefighterPositions) {
+        for (Position firefighterPosition : elementsPositions) {
             Position newFirefighterPosition = neighborClosestToFire(firefighterPosition);
             newFirefighterPosition = neighborClosestToFire(newFirefighterPosition);
             firefighterNewPositions.add(newFirefighterPosition);
             fire.extinguish(newFirefighterPosition);
 
         }
-        firefighterPositions = firefighterNewPositions;
+        elementsPositions = firefighterNewPositions;
     }
 }
diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java
index e9e460d56ed88cdc64b7c46c3372569974a8460b..ec6762caf2716b9f92d1c74f680c2ff274ab6874 100644
--- a/src/main/java/model/FirefighterBoard.java
+++ b/src/main/java/model/FirefighterBoard.java
@@ -10,6 +10,8 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
   public int columnCount;
 
   public int rowCount;
+
+  public final Elements[] elements;
   private final int initialFireCount;
   private final int initialFirefighterCount;
   private final int initialCloudCount;
@@ -23,17 +25,22 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
   public FireTruck fireTrucks;
   public Cloud cloud;
 
-  public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount, int initialCloudCount, int initialFireTruckCount) {
+  public FirefighterBoard(int columnCount, int rowCount, int[] elementsCount) {
     this.columnCount = columnCount;
     this.rowCount = rowCount;
-    this.initialFireCount = initialFireCount;
-    this.initialFirefighterCount = initialFirefighterCount;
-    this.initialCloudCount = initialCloudCount;
-    this.initialFireTruckCount = initialFireTruckCount;
+
+    this.initialFireCount = elementsCount[0];
+    this.initialFirefighterCount = elementsCount[1];
+    this.initialCloudCount = elementsCount[2];
+    this.initialFireTruckCount = elementsCount[3];
+
     fire = new Fire(columnCount, rowCount);
     fireFighters = new FireFighterPerson(columnCount, rowCount, fire);
     cloud = new Cloud(columnCount, rowCount, fire);
     fireTrucks = new FireTruck(columnCount, rowCount, fire);
+
+    elements = new Elements[]{fire, fireFighters, cloud, fireTrucks};
+
     initializeElements();
   }
 
@@ -48,14 +55,11 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
   @Override
   public List<ModelElement> getState(Position position) {
     List<ModelElement> result = new ArrayList<>();
-    if (fire.firePositions.contains(position))
-      result.add(ModelElement.FIRE);
-    if (fireFighters.firefighterPositions.contains(position))
-      result.add(ModelElement.FIREFIGHTER);
-    if (cloud.cloudPositions.contains(position))
-      result.add(ModelElement.CLOUD);
-    if (fireTrucks.firefighterPositions.contains(position))
-      result.add(ModelElement.FIRETRUCK);
+
+    for(Elements element : elements)
+      if (element.getElementsPositions().contains(position))
+        result.add(element.getModelElement());
+
     return result;
   }
 
@@ -72,10 +76,10 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
   public List<Position> updateToNextGeneration() {
 
     List<Position> modifiedElements = new ArrayList<>();
-    modifiedElements.addAll(fire.firePositions);
-    modifiedElements.addAll(fireFighters.firefighterPositions);
-    modifiedElements.addAll(cloud.cloudPositions);
-    modifiedElements.addAll(fireTrucks.firefighterPositions);
+
+    for (Elements element : elements) {
+      modifiedElements.addAll(element.getElementsPositions());
+    }
 
     fireFighters.nextMove();
     //System.out.println(fireFighters.firefighterPositions);
@@ -84,19 +88,18 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
 
     cloud.nextMove();
 
-    fire.extinguishs(fireFighters.firefighterPositions);
-    fire.extinguishs(fireTrucks.firefighterPositions);
-    fire.extinguishs(cloud.cloudPositions);
+    fire.extinguishs(fireFighters.getElementsPositions());
+    fire.extinguishs(fireTrucks.getElementsPositions());
+    fire.extinguishs(cloud.getElementsPositions());
 
     if (step % 2 == 0)
       fire.nextMove();
 
     step++;
 
-    modifiedElements.addAll(fire.firePositions);
-    modifiedElements.addAll(fireFighters.firefighterPositions);
-    modifiedElements.addAll(cloud.cloudPositions);
-    modifiedElements.addAll(fireTrucks.firefighterPositions);
+    for (Elements element : elements) {
+      modifiedElements.addAll(element.getElementsPositions());
+    }
 
     return modifiedElements;
   }
@@ -116,16 +119,16 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
 
   @Override
   public void setState(List<ModelElement> state, Position position) {
-    fire.firePositions.remove(position);
+    fire.getElementsPositions().remove(position);
     for (;;) {
-      if (!fireFighters.firefighterPositions.remove(position)) break;
+      if (!fireFighters.getElementsPositions().remove(position)) break;
     }
     for(ModelElement element : state){
       switch (element){
-        case FIRE -> fire.firePositions.add(position);
-        case FIREFIGHTER -> fireFighters.firefighterPositions.add(position);
-        case CLOUD -> cloud.cloudPositions.add(position);
-        case FIRETRUCK -> fireTrucks.firefighterPositions.add(position);
+        case FIRE -> fire.addElement(position);
+        case FIREFIGHTER -> fireFighters.addElement(position);
+        case CLOUD -> cloud.addElement(position);
+        case FIRETRUCK -> fireTrucks.addElement(position);
       }
     }
   }