diff --git a/src/main/java/app/SimulatorApplication.java b/src/main/java/app/SimulatorApplication.java
index 6b009e4114f78b4f406f2a3954cb94be05354e80..2646eb7602accd2b174ae3a116377f828e0b1473 100644
--- a/src/main/java/app/SimulatorApplication.java
+++ b/src/main/java/app/SimulatorApplication.java
@@ -15,8 +15,8 @@ public class SimulatorApplication extends javafx.application.Application {
   private static final String APP_NAME = "Firefighter simulator";
   private static final int ROW_COUNT = 20;
   private static final int COLUMN_COUNT = 20;
-  private static final int SQUARE_WIDTH = 50;
-  private static final int SQUARE_HEIGHT = 50;
+  private static final int SQUARE_WIDTH = 30;
+  private static final int SQUARE_HEIGHT = 30;
   public static final int INITIAL_FIRE_COUNT = 3;
   public static final int INITIAL_FIREFIGHTER_COUNT = 6;
 
diff --git a/src/main/java/model/BoardElement.java b/src/main/java/model/BoardElement.java
new file mode 100644
index 0000000000000000000000000000000000000000..912a524ab8f5b87c0cd646e7ee97d02544e98e51
--- /dev/null
+++ b/src/main/java/model/BoardElement.java
@@ -0,0 +1,18 @@
+package model;
+
+import javafx.scene.paint.Color;
+import model.Visitor.Visitor;
+import util.Position;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Set;
+
+public interface BoardElement {
+
+    Color getColor();
+    void setColor(Color color);
+    Boolean accept(Visitor visitor);
+    void initialize(int initialElementCount, HashMap<Position, ArrayList<BoardElement>> elementPosition);
+}
diff --git a/src/main/java/model/ExtenguishFire/Cloud.java b/src/main/java/model/ExtenguishFire/Cloud.java
new file mode 100644
index 0000000000000000000000000000000000000000..8301d6e0305fc8d958bb64c04d138c0ad973ea78
--- /dev/null
+++ b/src/main/java/model/ExtenguishFire/Cloud.java
@@ -0,0 +1,4 @@
+package model.ExtenguishFire;
+
+public class Cloud {
+}
diff --git a/src/main/java/model/ExtenguishFire/FireFighter.java b/src/main/java/model/ExtenguishFire/FireFighter.java
new file mode 100644
index 0000000000000000000000000000000000000000..b9d56c631693b8d5383b23a8d278dcade6fbf929
--- /dev/null
+++ b/src/main/java/model/ExtenguishFire/FireFighter.java
@@ -0,0 +1,4 @@
+package model.ExtenguishFire;
+
+public class FireFighter {
+}
diff --git a/src/main/java/model/ExtenguishFire/FireFighters.java b/src/main/java/model/ExtenguishFire/FireFighters.java
new file mode 100644
index 0000000000000000000000000000000000000000..91e7ccf29f20745e2601a919a6391f2158fb13d7
--- /dev/null
+++ b/src/main/java/model/ExtenguishFire/FireFighters.java
@@ -0,0 +1,11 @@
+package model.ExtenguishFire;
+
+import model.BoardElement;
+import util.Position;
+
+import java.util.List;
+
+public interface FireFighters extends BoardElement {
+    List<Position> updateFirefighters();
+    boolean accept();
+}
diff --git a/src/main/java/model/ExtenguishFire/MotorizedFireFighter.java b/src/main/java/model/ExtenguishFire/MotorizedFireFighter.java
new file mode 100644
index 0000000000000000000000000000000000000000..e202215711af31838c048b882230d900969a941a
--- /dev/null
+++ b/src/main/java/model/ExtenguishFire/MotorizedFireFighter.java
@@ -0,0 +1,4 @@
+package model.ExtenguishFire;
+
+public class MotorizedFireFighter {
+}
diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java
index 3251952ea90ec5ea59fc3a3630f3d2a4e4e96f01..2d0b03048f701e29ad8314836efb12fb6537d22e 100644
--- a/src/main/java/model/FirefighterBoard.java
+++ b/src/main/java/model/FirefighterBoard.java
@@ -6,14 +6,15 @@ import java.util.*;
 
 
 public class FirefighterBoard implements Board<List<ModelElement>> {
-  private final int columnCount;
-  private final int rowCount;
+   static  int columnCount;
+   static  int rowCount;
   private final int initialFireCount;
   private final int initialFirefighterCount;
+  protected HashMap<Position,ArrayList<BoardElement>> elementPosition;
   private List<Position> firefighterPositions;
   private Set<Position> firePositions;
   private int step = 0;
-  private final Random randomGenerator = new Random();
+  static Random randomGenerator = new Random();
 
   public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount) {
     this.columnCount = columnCount;
@@ -32,7 +33,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
       firefighterPositions.add(randomPosition());
   }
 
-  private Position randomPosition() {
+   public static Position randomPosition() {
     return new Position(randomGenerator.nextInt(rowCount), randomGenerator.nextInt(columnCount));
   }
 
diff --git a/src/main/java/model/Flammable/Fire.java b/src/main/java/model/Flammable/Fire.java
new file mode 100644
index 0000000000000000000000000000000000000000..621ab15ae60f0b6bb6efa4369536f263daeb5566
--- /dev/null
+++ b/src/main/java/model/Flammable/Fire.java
@@ -0,0 +1,79 @@
+package model.Flammable;
+
+import javafx.scene.paint.Color;
+import model.BoardElement;
+import model.FirefighterBoard;
+import model.Visitor.FireFinder;
+import model.Visitor.Visitor;
+import util.Position;
+
+import java.util.*;
+
+public class Fire implements Fires{
+
+    private Color color;
+
+    public Fire(){
+    }
+    public Fire(Color color){
+        this.color = color;
+    }
+
+    @Override
+    public Color getColor() {
+        return this.color;
+    }
+
+    @Override
+    public void setColor(Color color) {
+        this.color = color;
+    }
+
+    @Override
+    public Boolean accept(Visitor visitor){
+        return visitor.visit(this);
+    }
+
+    @Override
+    public void initialize(int initialFireCount, HashMap<Position, ArrayList<BoardElement>> elementPosition) {
+        FireFinder fireFinder=new FireFinder();
+        Position position = FirefighterBoard.randomPosition();
+        int index;
+        for ( index = 0; index < initialFireCount; index++) {
+            if(elementPosition.containsKey(position)  ) {
+                for (BoardElement element : elementPosition.get(position)) {
+                    if (!element.accept(fireFinder)) {
+                        break;
+                    }
+                }
+            if(index==-1){
+                elementPosition.get(position).add(new Fire());
+            }
+            }
+            else{
+                ArrayList<BoardElement> boardElements = new ArrayList<>();
+                boardElements.add(new Fire());
+                elementPosition.put(position,boardElements);
+            }
+        }
+    }
+
+            /*if(elementPosition.containsKey(position) &&  ){
+                continue;
+            }
+            else if(elementPosition.containsKey(position)){
+                elementPosition.get(position).add(fire);
+            }
+            else{
+                ArrayList<BoardElement> boardElements = new ArrayList<>();
+                boardElements.add(fire);
+                elementPosition.put(position,boardElements);
+            }
+        }
+    }*/
+
+    @Override
+    public List<Position> updateFires() {
+        return null;
+    }
+}
diff --git a/src/main/java/model/Flammable/Fires.java b/src/main/java/model/Flammable/Fires.java
new file mode 100644
index 0000000000000000000000000000000000000000..b17a5509556b363b8ca7753e183b60df44469b2b
--- /dev/null
+++ b/src/main/java/model/Flammable/Fires.java
@@ -0,0 +1,20 @@
+package model.Flammable;
+
+import javafx.scene.paint.Color;
+import model.BoardElement;
+import model.Visitor.Visitor;
+import util.Position;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+public interface Fires extends BoardElement{
+    void setColor(Color color);
+
+    Boolean accept(Visitor visitor);
+
+    void initialize(int initialFireCount, HashMap<Position, ArrayList<BoardElement>> elementPosition);
+
+    List<Position> updateFires();
+}
diff --git a/src/main/java/model/Obstacle/Mountain.java b/src/main/java/model/Obstacle/Mountain.java
new file mode 100644
index 0000000000000000000000000000000000000000..36642561fef73104618563ff81e54732a4ef2f6a
--- /dev/null
+++ b/src/main/java/model/Obstacle/Mountain.java
@@ -0,0 +1,4 @@
+package model.Obstacle;
+
+public class Mountain {
+}
diff --git a/src/main/java/model/Obstacle/Obstacles.java b/src/main/java/model/Obstacle/Obstacles.java
new file mode 100644
index 0000000000000000000000000000000000000000..fc8290ad64a103e9ac78ed571720ac51e55defcb
--- /dev/null
+++ b/src/main/java/model/Obstacle/Obstacles.java
@@ -0,0 +1,10 @@
+package model.Obstacle;
+
+import model.BoardElement;
+import util.Position;
+
+import java.util.List;
+
+public interface Obstacles extends BoardElement {
+    boolean accept();
+}
diff --git a/src/main/java/model/Obstacle/Road.java b/src/main/java/model/Obstacle/Road.java
new file mode 100644
index 0000000000000000000000000000000000000000..70a0adb708ca4b522d16564840512561ccc1c34a
--- /dev/null
+++ b/src/main/java/model/Obstacle/Road.java
@@ -0,0 +1,4 @@
+package model.Obstacle;
+
+public class Road {
+}
diff --git a/src/main/java/model/Visitor/CrossMountain.java b/src/main/java/model/Visitor/CrossMountain.java
new file mode 100644
index 0000000000000000000000000000000000000000..288af45085d83abed059642b9ddf34a4e2377198
--- /dev/null
+++ b/src/main/java/model/Visitor/CrossMountain.java
@@ -0,0 +1,34 @@
+package model.Visitor;
+
+import model.ExtenguishFire.FireFighter;
+import model.ExtenguishFire.MotorizedFireFighter;
+import model.Flammable.Fire;
+import model.Obstacle.Mountain;
+import model.Obstacle.Road;
+
+public class CrossMountain implements Visitor {
+    @Override
+    public boolean visit(Fire fire) {
+        return false;
+    }
+
+    @Override
+    public boolean visit(FireFighter fireFighter) {
+        return false;
+    }
+
+    @Override
+    public boolean visit(MotorizedFireFighter motorizedFireFighter) {
+        return false;
+    }
+
+    @Override
+    public boolean visit(Mountain mountain) {
+        return false;
+    }
+
+    @Override
+    public boolean visit(Road road) {
+        return false;
+    }
+}
diff --git a/src/main/java/model/Visitor/CrossRoad.java b/src/main/java/model/Visitor/CrossRoad.java
new file mode 100644
index 0000000000000000000000000000000000000000..cf53acf322cc562e77338bc2ad48c491e2097d85
--- /dev/null
+++ b/src/main/java/model/Visitor/CrossRoad.java
@@ -0,0 +1,34 @@
+package model.Visitor;
+
+import model.ExtenguishFire.FireFighter;
+import model.ExtenguishFire.MotorizedFireFighter;
+import model.Flammable.Fire;
+import model.Obstacle.Mountain;
+import model.Obstacle.Road;
+
+public class CrossRoad implements Visitor {
+    @Override
+    public boolean visit(Fire fire) {
+        return false;
+    }
+
+    @Override
+    public boolean visit(FireFighter fireFighter) {
+        return true;
+    }
+
+    @Override
+    public boolean visit(MotorizedFireFighter motorizedFireFighter) {
+        return true;
+    }
+
+    @Override
+    public boolean visit(Mountain mountain) {
+        return false;
+    }
+
+    @Override
+    public boolean visit(Road road) {
+        return false;
+    }
+}
diff --git a/src/main/java/model/Visitor/FireFinder.java b/src/main/java/model/Visitor/FireFinder.java
new file mode 100644
index 0000000000000000000000000000000000000000..7e7ce43771fb2b4503e6c666c8ba49a16eada7f6
--- /dev/null
+++ b/src/main/java/model/Visitor/FireFinder.java
@@ -0,0 +1,34 @@
+package model.Visitor;
+
+import model.ExtenguishFire.FireFighter;
+import model.ExtenguishFire.MotorizedFireFighter;
+import model.Flammable.Fire;
+import model.Obstacle.Mountain;
+import model.Obstacle.Road;
+
+public class FireFinder implements Visitor {
+    @Override
+    public boolean visit(Fire fire) {
+        return true;
+    }
+
+    @Override
+    public boolean visit(FireFighter fireFighter) {
+        return false;
+    }
+
+    @Override
+    public boolean visit(MotorizedFireFighter motorizedFireFighter) {
+        return false;
+    }
+
+    @Override
+    public boolean visit(Mountain mountain) {
+        return false;
+    }
+
+    @Override
+    public boolean visit(Road road) {
+        return false;
+    }
+}
diff --git a/src/main/java/model/Visitor/Visitor.java b/src/main/java/model/Visitor/Visitor.java
new file mode 100644
index 0000000000000000000000000000000000000000..da5b1a222d9c24946e95e7ade64a596f4a099f93
--- /dev/null
+++ b/src/main/java/model/Visitor/Visitor.java
@@ -0,0 +1,17 @@
+package model.Visitor;
+
+import model.ExtenguishFire.FireFighter;
+import model.ExtenguishFire.MotorizedFireFighter;
+import model.Flammable.Fire;
+import model.Flammable.Fires;
+import model.Obstacle.Mountain;
+import model.Obstacle.Road;
+
+public interface Visitor {
+
+    boolean visit(Fire fire);
+    boolean visit(FireFighter fireFighter);
+    boolean visit(MotorizedFireFighter motorizedFireFighter);
+    boolean visit(Mountain mountain);
+    boolean visit(Road road);
+}
diff --git a/src/main/resources/view/view.fxml b/src/main/resources/view/view.fxml
index 3f19ac9de44d6f0b571dc29e43bf15ff2ebeff79..ac3a91e3880d9099cf029fdf4a6cab518b6fde07 100644
--- a/src/main/resources/view/view.fxml
+++ b/src/main/resources/view/view.fxml
@@ -33,7 +33,7 @@
                   mnemonicParsing="false" onAction="#pauseToggleButtonAction" prefHeight="24.0"
                   prefWidth="200.0" styleClass="button" text="Pause"/>
   </VBox>
-  <FirefighterGrid fx:id="grid" width="1000.0" height="1000.0"
+  <FirefighterGrid fx:id="grid" width="600.0" height="600.0"
                    xmlns="http://javafx.com/javafx"
                    xmlns:fx="http://javafx.com/fxml">
   </FirefighterGrid>