diff --git a/.gradle/7.4/executionHistory/executionHistory.bin b/.gradle/7.4/executionHistory/executionHistory.bin
index 379c05b56bf4592bad402191032e6a449f6f8730..13a6d8b11bb569fd8cbf183e93c733df491a9132 100644
Binary files a/.gradle/7.4/executionHistory/executionHistory.bin and b/.gradle/7.4/executionHistory/executionHistory.bin differ
diff --git a/.gradle/7.4/executionHistory/executionHistory.lock b/.gradle/7.4/executionHistory/executionHistory.lock
index 80e8955e82d390b14df82ea4edcc8a752d441d75..e35b445edb554d7fa073edc271abfd98838ce07d 100644
Binary files a/.gradle/7.4/executionHistory/executionHistory.lock and b/.gradle/7.4/executionHistory/executionHistory.lock differ
diff --git a/.gradle/7.4/fileHashes/fileHashes.bin b/.gradle/7.4/fileHashes/fileHashes.bin
index 142907fc41e849b439843292be0e751c757d5320..290d329335402dce06010b3d3a3ceebbcb324563 100644
Binary files a/.gradle/7.4/fileHashes/fileHashes.bin and b/.gradle/7.4/fileHashes/fileHashes.bin differ
diff --git a/.gradle/7.4/fileHashes/fileHashes.lock b/.gradle/7.4/fileHashes/fileHashes.lock
index 377c088269107b126a7bee13fb74d2242b021620..31ba47f15f9492cc156499a67c65a5c57ebc9633 100644
Binary files a/.gradle/7.4/fileHashes/fileHashes.lock and b/.gradle/7.4/fileHashes/fileHashes.lock differ
diff --git a/.gradle/7.4/fileHashes/resourceHashesCache.bin b/.gradle/7.4/fileHashes/resourceHashesCache.bin
index 9bff27bafb7b6100eed2008b7aa679c9455def16..a618b0ff71f22779264da258e7bdb8b39279b6a3 100644
Binary files a/.gradle/7.4/fileHashes/resourceHashesCache.bin and b/.gradle/7.4/fileHashes/resourceHashesCache.bin differ
diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock
index 4ec51350aa97f62b3460115e0baef1fe9e4bf6f6..707445b757d1205790ba6eab3062110ccac43783 100644
Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe
index b9647d18a023b65db35462985ee38f79494d3efe..cb028f4205a1fabe70cff5ec865ed4504b6cae58 100644
Binary files a/.gradle/file-system.probe and b/.gradle/file-system.probe differ
diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2b63946d5b31084bbb7dda418ceb3d75eb686373
--- /dev/null
+++ b/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Palette2">
+    <group name="Swing">
+      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
+      </item>
+      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true">
+        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
+        <initial-values>
+          <property name="text" value="Button" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="RadioButton" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="CheckBox" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="Label" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
+          <preferred-size width="-1" height="20" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
+      </item>
+    </group>
+  </component>
+</project>
\ No newline at end of file
diff --git a/build/classes/java/main/AntiFire$Position.class b/build/classes/java/main/AntiFire$Position.class
deleted file mode 100644
index 7547f4bafec835a73c42408a68545ec53ad10ee0..0000000000000000000000000000000000000000
Binary files a/build/classes/java/main/AntiFire$Position.class and /dev/null differ
diff --git a/build/classes/java/main/AntiFire.class b/build/classes/java/main/AntiFire.class
deleted file mode 100644
index edf3af720839d02a3d477b8002d211e1d429afc4..0000000000000000000000000000000000000000
Binary files a/build/classes/java/main/AntiFire.class and /dev/null differ
diff --git a/build/classes/java/main/App$1.class b/build/classes/java/main/App$1.class
index 98d51f802497deae0e1387a24d43001df1e48c74..80ec6c10a634c0eba5e577cc4795820f17885624 100644
Binary files a/build/classes/java/main/App$1.class and b/build/classes/java/main/App$1.class differ
diff --git a/build/classes/java/main/App.class b/build/classes/java/main/App.class
index d295b944a9625d1a7a2f892180b64733cbc7ae54..9a62bf97329c0156cbdc7ce6defdf70e57521761 100644
Binary files a/build/classes/java/main/App.class and b/build/classes/java/main/App.class differ
diff --git a/build/classes/java/main/Clouds.class b/build/classes/java/main/Clouds.class
deleted file mode 100644
index 9ed13d4bd20ab64d05aa9707562c6eb4616a9296..0000000000000000000000000000000000000000
Binary files a/build/classes/java/main/Clouds.class and /dev/null differ
diff --git a/build/classes/java/main/Model.class b/build/classes/java/main/Model.class
deleted file mode 100644
index e8275b1856b942724c1e257e1e9c8263e2fb5cef..0000000000000000000000000000000000000000
Binary files a/build/classes/java/main/Model.class and /dev/null differ
diff --git a/build/classes/java/main/MotoFighter.class b/build/classes/java/main/MotoFighter.class
deleted file mode 100644
index a6e726acf81de951c94e8a90476341fc1c41a76b..0000000000000000000000000000000000000000
Binary files a/build/classes/java/main/MotoFighter.class and /dev/null differ
diff --git a/build/classes/java/main/Position.class b/build/classes/java/main/Position.class
deleted file mode 100644
index 919933142d440b6278f5b21b1c80bfe4c0edbdd1..0000000000000000000000000000000000000000
Binary files a/build/classes/java/main/Position.class and /dev/null differ
diff --git a/build/classes/java/main/fightfire/AntiFire$Position.class b/build/classes/java/main/fightfire/AntiFire$Position.class
new file mode 100644
index 0000000000000000000000000000000000000000..7b3534afc972de4297091159558cb5c6b6c9dcdc
Binary files /dev/null and b/build/classes/java/main/fightfire/AntiFire$Position.class differ
diff --git a/build/classes/java/main/fightfire/AntiFire.class b/build/classes/java/main/fightfire/AntiFire.class
new file mode 100644
index 0000000000000000000000000000000000000000..000edc73d1cbe7233d82ed4268c8c7023364c985
Binary files /dev/null and b/build/classes/java/main/fightfire/AntiFire.class differ
diff --git a/build/classes/java/main/fightfire/Clouds.class b/build/classes/java/main/fightfire/Clouds.class
new file mode 100644
index 0000000000000000000000000000000000000000..98d34018f37bc4540a3b81a5f2d5df533e066c99
Binary files /dev/null and b/build/classes/java/main/fightfire/Clouds.class differ
diff --git a/build/classes/java/main/fightfire/FireFigher.class b/build/classes/java/main/fightfire/FireFigher.class
new file mode 100644
index 0000000000000000000000000000000000000000..5ce77f12ae35b0bc5981488dbe1a73c069b1704c
Binary files /dev/null and b/build/classes/java/main/fightfire/FireFigher.class differ
diff --git a/build/classes/java/main/fightfire/MotoFighter.class b/build/classes/java/main/fightfire/MotoFighter.class
new file mode 100644
index 0000000000000000000000000000000000000000..ec8fa238f4cf44cd92e19f5edb39646f8a5c2087
Binary files /dev/null and b/build/classes/java/main/fightfire/MotoFighter.class differ
diff --git a/build/classes/java/main/Grid.class b/build/classes/java/main/grid/Grid.class
similarity index 58%
rename from build/classes/java/main/Grid.class
rename to build/classes/java/main/grid/Grid.class
index abc72c01fbe72954e14638fa7e2b6bffc14378ed..08aa92028cbb925516370f3224907b2157bc2a89 100644
Binary files a/build/classes/java/main/Grid.class and b/build/classes/java/main/grid/Grid.class differ
diff --git a/build/classes/java/main/model/Fire.class b/build/classes/java/main/model/Fire.class
new file mode 100644
index 0000000000000000000000000000000000000000..ffaef6a003613578cc8e673e2ce27e75258d51f6
Binary files /dev/null and b/build/classes/java/main/model/Fire.class differ
diff --git a/build/classes/java/main/model/Model.class b/build/classes/java/main/model/Model.class
new file mode 100644
index 0000000000000000000000000000000000000000..f5a82156ee03baf18c7ee96cbffafb38d006dfc5
Binary files /dev/null and b/build/classes/java/main/model/Model.class differ
diff --git a/build/classes/java/main/position/Position.class b/build/classes/java/main/position/Position.class
new file mode 100644
index 0000000000000000000000000000000000000000..7678dcf784c91dfeffd7de8ac1c7c502dd86fc9e
Binary files /dev/null and b/build/classes/java/main/position/Position.class differ
diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin
index a03e2a7667f4aee40a96aa3d95994982de790be4..0f0728cc4c133795de8262bbb5804bba0037686c 100644
Binary files a/build/tmp/compileJava/previous-compilation-data.bin and b/build/tmp/compileJava/previous-compilation-data.bin differ
diff --git a/src/main/java/App.java b/src/main/java/App.java
index 10dda1d5b5dac2118958e64a64772f18e7258f18..4f0eed44c56ecd21c71925eff1d40786ebf3743f 100644
--- a/src/main/java/App.java
+++ b/src/main/java/App.java
@@ -1,3 +1,4 @@
+import grid.Grid;
 import javafx.application.Application;
 import javafx.scene.Group;
 import javafx.scene.Scene;
diff --git a/src/main/java/Clouds.java b/src/main/java/Clouds.java
deleted file mode 100644
index bbbf9f92a2491d679802336fb7e0f82eff9cd96c..0000000000000000000000000000000000000000
--- a/src/main/java/Clouds.java
+++ /dev/null
@@ -1,5 +0,0 @@
-import java.util.List;
-
-public class Clouds {
-
-}
diff --git a/src/main/java/Model.java b/src/main/java/Model.java
deleted file mode 100644
index 52d20ea9b762f37e32f3aefafae70ba3c222be84..0000000000000000000000000000000000000000
--- a/src/main/java/Model.java
+++ /dev/null
@@ -1,191 +0,0 @@
-import java.util.*;
-
-
-public class Model  {
-    Grid grid;
-    int colCount, rowCount;
-    MotoFighter motoFighter = new MotoFighter();
-    List<Position>linefite=new ArrayList<>();
-
-    List<Position> firefighters = new ArrayList<>();
-    List<Position> clouds = new ArrayList<>();
-    Set<Position> fires = new HashSet<>();
-    List<Position> ffNewPositions;
-    List<Position> cNewPositions;
-
-
-    int step = 0;
-
-    public Model(Grid grid) {
-        this.grid = grid;
-        colCount = grid.colCount;
-        rowCount = grid.rowCount;
-    }
-
-
-    public void initialisation(int fireNumber, int fireFighterNumber,int cloudNumber,int motoFighterNumber){
-        for(int index=0; index<fireNumber;index++)
-            fires.add(randomPosition());
-        for(int index=0; index<fireFighterNumber;index++)
-            firefighters.add(randomPosition());
-        for(int index=0; index<cloudNumber;index++)
-            clouds.add(randomPosition());
-        for(int index=0; index<motoFighterNumber;index++)
-            linefite.add(randomPosition());
-        motoFighter.motofighter.add(randomPosition().row());
-    }
-
-    private Position randomPosition() {
-        return new Position((int) (Math.random()*rowCount), (int) (Math.random()*colCount));
-    }
-
-
-
-    public void activation(){
-        ffNewPositions = new ArrayList<>();
-        for(Position ff : firefighters){
-            Position newPosition = activateFirefighter(ff);
-            grid.paint(ff.row(),ff.col());
-            grid.paintFF(newPosition.row(), newPosition.col());
-            ffNewPositions.add(newPosition);
-        }
-
-        cNewPositions = new ArrayList<>();
-
-        for(Position cc : clouds){
-            Position newPosition = activeCloud(cc);
-            grid.paint(cc.row(),cc.col());
-            grid.paintCC(newPosition.row(), newPosition.col());
-            cNewPositions.add(newPosition);
-        }
-
-       /* for(Position mF : motofighter){
-            Position newPosition = motoFighter.activateFighter(mF);
-            grid.paint(mF.row,mF.col);
-            grid.paintMF(newPosition.row, newPosition.col);
-            mfNewPositions.add(newPosition);
-        }*/
-
-        firefighters = ffNewPositions;
-
-        clouds = cNewPositions;
-
-        motoFighter.activation();
-
-
-
-        if(step%2==0){
-            List<Position> newFires = new ArrayList<>();
-            for(Position fire : fires){
-                newFires.addAll(activateFire(fire));
-            }
-            for(Position newFire : newFires)
-                grid.paintFire(newFire.row(), newFire.col());
-
-            fires.addAll(newFires);}
-        step++;
-
-    }
-
-    private List<Position> activateFire(Position position) {
-        return next(position);
-    }
-
-    private Position activeCloud(Position position){
-        Position randomPosition=next(position).get((int) (Math.random()*next(position).size()));
-        List<Position> nextFires = next(randomPosition).stream().filter(fires::contains).toList();
-        extinguish(randomPosition);
-        for (Position fire : nextFires)
-            extinguish(fire);
-        return randomPosition;
-
-    }
-
-  /*  private Position activateMotofighter(Position position) {
-        Position randomPosition = tStepTowardFire(position);
-        //next(position).get((int) (Math.random()*next(position).size()));
-        List<Position> nextFires = next(randomPosition).stream().filter(fires::contains).toList();
-        extinguish(randomPosition);
-        for (Position fire : nextFires)
-            extinguish(fire);
-        return randomPosition;
-    }*/
-
-
-
-    private Position activateFirefighter(Position position) {
-        Position randomPosition = aStepTowardFire(position);
-                //next(position).get((int) (Math.random()*next(position).size()));
-        List<Position> nextFires = next(randomPosition).stream().filter(fires::contains).toList();
-        extinguish(randomPosition);
-            for (Position fire : nextFires)
-                extinguish(fire);
-            return randomPosition;
-        }
-
-        private void extinguish(Position position) {
-        fires.remove(position);
-        grid.paint(position.row(), position.col());
-    }
-
-    private List<Position> next(Position position){
-        List<Position> list = new ArrayList<>();
-        if(position.row()>0) list.add(new Position(position.row()-1, position.col()));
-        if(position.col()>0) list.add(new Position(position.row(), position.col()-1));
-        if(position.row()<rowCount-1) list.add(new Position(position.row()+1, position.col()));
-        if(position.col()<colCount-1) list.add(new Position(position.row(), position.col()+1));
-        return list;
-    }
-   /* private List<Position> nextTwo(Position position){
-        List<Position> list = new ArrayList<>();
-        if(position.row>0) list.add(new Position(position.row-2, position.col));
-        if(position.col>0) list.add(new Position(position.row, position.col-2));
-        if(position.row<rowCount-1) list.add(new Position(position.row+2, position.col));
-        if(position.col<colCount-1) list.add(new Position(position.row, position.col+2));
-        return list;
-    }*/
-
-    private Position aStepTowardFire(Position position){
-        Queue<Position> toVisit = new LinkedList<>();
-        Set<Position> seen = new HashSet<>();
-        HashMap<Position,Position> firstMove = new HashMap<>();
-        toVisit.addAll(next(position));
-        for(Position initialMove : toVisit)
-            firstMove.put(initialMove,initialMove);
-        while(!toVisit.isEmpty()){
-            Position current = toVisit.poll();
-            if(fires.contains(current))
-                return firstMove.get(current);
-            for(Position adjacent : next(current)){
-                if(seen.contains(adjacent)) continue;
-                toVisit.add(adjacent);
-                seen.add(adjacent);
-                firstMove.put(adjacent, firstMove.get(current));
-            }
-        }
-        return position;
-    }
-
-  /*  private Position tStepTowardFire(Position position){
-        Queue<Position> toVisit = new LinkedList<>();
-        Set<Position> seen = new HashSet<>();
-        HashMap<Position,Position> firstMove = new HashMap<>();
-        toVisit.addAll(nextTwo(position));
-        for(Position initialMove : toVisit)
-            firstMove.put(initialMove,initialMove);
-        while(!toVisit.isEmpty()){
-            Position current = toVisit.poll();
-            if(fires.contains(current))
-                return firstMove.get(current);
-            for(Position adjacent : next(current)){
-                if(seen.contains(adjacent)) continue;
-                toVisit.add(adjacent);
-                seen.add(adjacent);
-                firstMove.put(adjacent, firstMove.get(current));
-            }
-        }
-        return position;
-    }*/
-
-
-}
\ No newline at end of file
diff --git a/src/main/java/AntiFire.java b/src/main/java/fightfire/AntiFire.java
similarity index 83%
rename from src/main/java/AntiFire.java
rename to src/main/java/fightfire/AntiFire.java
index c42dd1c803e325e4ab4d2a8928c9f7ee2bb46395..92f06c533b97adf51de54aedf0b45328d9654640 100644
--- a/src/main/java/AntiFire.java
+++ b/src/main/java/fightfire/AntiFire.java
@@ -1,12 +1,17 @@
+package fightfire;
+
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
+import grid.Grid;
+
 public abstract class AntiFire {
     Set<Position> fires = new HashSet<>();
     Grid grid;
 
     int colCount, rowCount;
+    public abstract void initiali(int number);
 
     public abstract void activation();
     public abstract Position activateFighter(Position position);
@@ -17,7 +22,7 @@ public abstract class AntiFire {
 
     public  void extinguish(Position position){
         fires.remove(position);
-        grid.paint(position.row, position.col);
+        grid.paint(position.row(), position.col());
     }
     public Position randomPosition() {
         return new Position((int) (Math.random()*rowCount), (int) (Math.random()*colCount));
diff --git a/src/main/java/fightfire/Clouds.java b/src/main/java/fightfire/Clouds.java
new file mode 100644
index 0000000000000000000000000000000000000000..dd6eebf09d6a960af7df1ecb1b3e98e860300535
--- /dev/null
+++ b/src/main/java/fightfire/Clouds.java
@@ -0,0 +1,57 @@
+package fightfire;
+
+import fightfire.AntiFire;
+
+import java.util.*;
+
+public class Clouds extends AntiFire {
+    List<Position> ccNewPositions;
+    List<Position> clouds = new ArrayList<>();
+
+    @Override
+    public void initiali(int number) {
+        for(int index=0; index<number;index++)
+            clouds.add(randomPosition());
+
+    }
+
+    @Override
+    public void activation() {
+        ccNewPositions = new ArrayList<>();
+        for(Position cc : clouds){
+            Position newPosition = activateFighter(cc);
+            grid.paint(cc.row(), cc.row());
+            grid.paintMF(newPosition.row(), newPosition.col());
+            ccNewPositions.add(newPosition);
+        }
+        clouds = ccNewPositions;
+
+    }
+
+    @Override
+    public Position activateFighter(Position position) {
+        Position randomPosition = moveTowardFire(position);
+        //next(position).get((int) (Math.random()*next(position).size()));
+        List<Position> nextFires = next(randomPosition).stream().filter(fires::contains).toList();
+        extinguish(randomPosition);
+        for (Position fire : nextFires)
+            extinguish(fire);
+        return randomPosition;
+    }
+
+    @Override
+    public List<Position> next(Position position) {
+        List<Position> list = new ArrayList<>();
+        if(position.row()>0) list.add(new Position(position.row()-1, position.col()));
+        if(position.col()>0) list.add(new Position(position.row(), position.col()-1));
+        if(position.row()<rowCount-1) list.add(new Position(position.row()+1, position.col()));
+        if(position.col()<colCount-1) list.add(new Position(position.row(), position.col()+1));
+        return list;
+    }
+
+    @Override
+    public Position moveTowardFire(Position position) {
+        return next(position).get((int) (Math.random()*next(position).size()));
+    }
+
+}
diff --git a/src/main/java/fightfire/FireFigher.java b/src/main/java/fightfire/FireFigher.java
new file mode 100644
index 0000000000000000000000000000000000000000..345a62f6e3a9bb2f1a75da1df72094ca574497c7
--- /dev/null
+++ b/src/main/java/fightfire/FireFigher.java
@@ -0,0 +1,72 @@
+package fightfire;
+
+import fightfire.AntiFire;
+
+import java.util.*;
+
+public class FireFigher extends AntiFire {
+    List<Position>ffNewPositions= new ArrayList<>();
+    List<Position>firefighters=new ArrayList<>();
+    @Override
+    public void initiali(int number) {
+        for(int index=0; index<number;index++)
+            firefighters.add(randomPosition());
+
+    }
+
+    @Override
+    public void activation() {
+        ffNewPositions = new ArrayList<>();
+        for(Position ff : firefighters){
+            Position newPosition = activateFighter(ff);
+            grid.paint(ff.row(),ff.col());
+            grid.paintFF(newPosition.row(), newPosition.col());
+            ffNewPositions.add(newPosition);
+        }
+
+    }
+
+    @Override
+    public Position activateFighter(Position position) {
+        Position randomPosition = moveTowardFire(position);
+        //next(position).get((int) (Math.random()*next(position).size()));
+        List<Position> nextFires = next(randomPosition).stream().filter(fires::contains).toList();
+        extinguish(randomPosition);
+        for (Position fire : nextFires)
+            extinguish(fire);
+        return randomPosition;
+    }
+
+
+    @Override
+    public List<Position> next(Position position) {
+        List<Position> list = new ArrayList<>();
+        if(position.row()>0) list.add(new Position(position.row()-1, position.col()));
+        if(position.col()>0) list.add(new Position(position.row(), position.col()-1));
+        if(position.row()<rowCount-1) list.add(new Position(position.row()+1, position.col()));
+        if(position.col()<colCount-1) list.add(new Position(position.row(), position.col()+1));
+        return list;
+    }
+
+    @Override
+    public Position moveTowardFire(Position position) {
+        Queue<Position> toVisit = new LinkedList<>();
+        Set<Position> seen = new HashSet<>();
+        HashMap<Position, Position> firstMove = new HashMap<>();
+        toVisit.addAll(next(position));
+        for(Position initialMove : toVisit)
+            firstMove.put(initialMove,initialMove);
+        while(!toVisit.isEmpty()){
+            Position current = toVisit.poll();
+            if(fires.contains(current))
+                return firstMove.get(current);
+            for(Position adjacent : next(current)){
+                if(seen.contains(adjacent)) continue;
+                toVisit.add(adjacent);
+                seen.add(adjacent);
+                firstMove.put(adjacent, firstMove.get(current));
+            }
+        }
+        return position;
+    }
+}
diff --git a/src/main/java/MotoFighter.java b/src/main/java/fightfire/MotoFighter.java
similarity index 92%
rename from src/main/java/MotoFighter.java
rename to src/main/java/fightfire/MotoFighter.java
index c3d9186a8f12474562c53fe28c49ce67b1c21d92..903da1151bd29c475f84e7814cac5b2664189895 100644
--- a/src/main/java/MotoFighter.java
+++ b/src/main/java/fightfire/MotoFighter.java
@@ -1,3 +1,7 @@
+package fightfire;
+
+import fightfire.AntiFire;
+
 import java.util.*;
 
 public class MotoFighter extends AntiFire {
@@ -5,6 +9,11 @@ public class MotoFighter extends AntiFire {
     List<Position> motofighter = new ArrayList<>();
 
 
+    @Override
+    public void initiali(int number) {
+        for(int index=0; index<number;index++)
+            motofighter.add(randomPosition());
+    }
 
     @Override
     public void activation() {
diff --git a/src/main/java/Grid.java b/src/main/java/grid/Grid.java
similarity index 90%
rename from src/main/java/Grid.java
rename to src/main/java/grid/Grid.java
index 0c522287853ee33182d1cc47f62c268bd1eb1b36..187212a01c32f33e51c3c53292313b6faeeef014 100644
--- a/src/main/java/Grid.java
+++ b/src/main/java/grid/Grid.java
@@ -1,11 +1,17 @@
+package grid;
+
 import javafx.scene.canvas.Canvas;
 import javafx.scene.canvas.GraphicsContext;
 import javafx.scene.input.MouseEvent;
 import javafx.scene.paint.Color;
+import model.Model;
 
 public class Grid extends Canvas{
-    int width, height, colCount, rowCount;
-    Model model;
+    int width;
+    int height;
+    public int colCount;
+    public int rowCount;
+    public Model model;
 
 
     public Grid(int width, int height, int colCount, int rowCount) {
@@ -17,7 +23,7 @@ public class Grid extends Canvas{
         setFocusTraversable(true);
         setOnMousePressed(this::mousePressed);
         model = new Model(this);
-        model.initialisation(3,1,2,1);
+        model.initialisation(3,1,2,2);
     }
 
     public void restart(MouseEvent mouseEvent){
@@ -34,7 +40,7 @@ public class Grid extends Canvas{
             model.click((int)x*rowCount/height,(int)y*colCount/width);*/
     }
 
-    void repaint(){
+    public void repaint(){
         for(int col=0; col<colCount; col++)
             getGraphicsContext2D().strokeLine(0, col*width/colCount,height, col*width/colCount);
         for(int row=0; row<rowCount;row++)
@@ -42,7 +48,7 @@ public class Grid extends Canvas{
 
     }
 
-    void paint(int row, int col){
+    public void paint(int row, int col){
         getGraphicsContext2D().setFill(Color.WHITE);
         getGraphicsContext2D().fillRect(row*height/rowCount,col*width/colCount,height/rowCount,width/colCount);
     }
diff --git a/src/main/java/model/Fire.java b/src/main/java/model/Fire.java
new file mode 100644
index 0000000000000000000000000000000000000000..9a72bd60980635f43ec7800f1be2e99b7fb261c1
--- /dev/null
+++ b/src/main/java/model/Fire.java
@@ -0,0 +1,48 @@
+package model;
+
+import grid.Grid;
+import position.Position;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+public class Fire {
+    int step =0;
+    Grid grid;
+    int rowCount,colCount;
+
+    Set<Position> fires = new HashSet<>();
+
+    public void initiali(int fireNumber){
+        for(int index=0; index<fireNumber;index++)
+            fires.add(new Position((int) (Math.random()*rowCount), (int) (Math.random()*colCount)));}
+
+    public void activation() {
+        if(step%2==0){
+            List<Position> newFires = new ArrayList<>();
+            for(Position fire : fires){
+                newFires.addAll(activateFire(fire));
+            }
+            for(Position newFire : newFires)
+                grid.paintFire(newFire.row(), newFire.col());
+
+            fires.addAll(newFires);}
+        step++;
+    }
+    private List<Position> activateFire(Position position) {
+        return next(position);
+    }
+
+    private List<Position> next(Position position){
+        List<Position> list = new ArrayList<>();
+        if(position.row()>0) list.add(new Position(position.row()-1, position.col()));
+        if(position.col()>0) list.add(new Position(position.row(), position.col()-1));
+        if(position.row()<rowCount-1) list.add(new Position(position.row()+1, position.col()));
+        if(position.col()<colCount-1) list.add(new Position(position.row(), position.col()+1));
+        return list;
+    }
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/model/Model.java b/src/main/java/model/Model.java
new file mode 100644
index 0000000000000000000000000000000000000000..454700d4b7d4938a0c4cbe041b62e56c2de6db64
--- /dev/null
+++ b/src/main/java/model/Model.java
@@ -0,0 +1,218 @@
+package model;
+
+import fightfire.Clouds;
+import fightfire.FireFigher;
+import fightfire.MotoFighter;
+import grid.Grid;
+
+import model.Model;
+import position.Position;
+
+import java.util.*;
+
+
+public class Model  {
+    Grid grid;
+    int colCount, rowCount;
+    MotoFighter motoFighter =new MotoFighter();
+
+    FireFigher fireFigher = new FireFigher();
+    Clouds clouds=new Clouds();
+
+    List<Position> firefighters = new ArrayList<>();
+    Fire fires = new Fire();
+
+    List<Position> ffNewPositions;
+    List<Position> cNewPositions;
+
+
+    int step = 0;
+
+    public Model(Grid grid) {
+        this.grid = grid;
+        colCount = grid.colCount;
+        rowCount = grid.rowCount;
+    }
+
+
+    public void initialisation(int fireNumber, int fireFighterNumber,int cloudNumber,int motoFighterNumber){
+
+        fires.initiali(fireNumber);
+        fireFigher.initiali(fireFighterNumber);
+        clouds.initiali(cloudNumber);
+        motoFighter.initiali(motoFighterNumber);
+
+
+
+        /*for(int index=0; index<fireFighterNumber;index++)
+            firefighters.add(randomPosition());
+        for(int index=0; index<cloudNumber;index++)
+            clouds.add(randomPosition());*/
+
+    }
+
+   /*private position.Position randomPosition() {
+        return new position.Position((int) (Math.random()*rowCount), (int) (Math.random()*colCount));
+    }*/
+
+
+
+
+    public void activation(){
+
+
+
+       /*
+        ffNewPositions = new ArrayList<>();
+        for(position.Position ff : firefighters){
+            position.Position newPosition = activateFirefighter(ff);
+            grid.paint(ff.row(),ff.col());
+            grid.paintFF(newPosition.row(), newPosition.col());
+            ffNewPositions.add(newPosition);
+        }
+        firefighters = ffNewPositions;
+        */
+
+        fireFigher.activation();
+
+       /* cNewPositions = new ArrayList<>();
+
+        for(position.Position cc : clouds){
+            position.Position newPosition = activeCloud(cc);
+            grid.paint(cc.row(),cc.col());
+            grid.paintCC(newPosition.row(), newPosition.col());
+            cNewPositions.add(newPosition);
+        }
+
+         clouds = cNewPositions;
+
+        */
+        clouds.activation();
+
+       /* for(position.Position mF : motofighter){
+            position.Position newPosition = motoFighter.activateFighter(mF);
+            grid.paint(mF.row,mF.col);
+            grid.paintMF(newPosition.row, newPosition.col);
+            mfNewPositions.add(newPosition);
+        }*/
+
+        motoFighter.activation();
+
+
+
+       /* if(step%2==0){
+            List<position.Position> newFires = new ArrayList<>();
+            for(position.Position fire : fires){
+                newFires.addAll(activateFire(fire));
+            }
+            for(position.Position newFire : newFires)
+                grid.paintFire(newFire.row(), newFire.col());
+
+            fires.addAll(newFires);}
+        step++;8*/
+        fires.activation();
+
+    }
+
+   /* private List<position.Position> activateFire(position.Position position) {
+        return next(position);
+    }*/
+
+   /* private position.Position activeCloud(position.Position position){
+        position.Position randomPosition=next(position).get((int) (Math.random()*next(position).size()));
+        List<position.Position> nextFires = next(randomPosition).stream().filter(fires::contains).toList();
+        extinguish(randomPosition);
+        for (position.Position fire : nextFires)
+            extinguish(fire);
+        return randomPosition;
+
+    }*/
+
+  /*  private position.Position activateMotofighter(position.Position position) {
+        position.Position randomPosition = tStepTowardFire(position);
+        //next(position).get((int) (Math.random()*next(position).size()));
+        List<position.Position> nextFires = next(randomPosition).stream().filter(fires::contains).toList();
+        extinguish(randomPosition);
+        for (position.Position fire : nextFires)
+            extinguish(fire);
+        return randomPosition;
+    }*/
+
+
+
+   /* private position.Position activateFirefighter(position.Position position) {
+        position.Position randomPosition = aStepTowardFire(position);
+                //next(position).get((int) (Math.random()*next(position).size()));
+        List<position.Position> nextFires = next(randomPosition).stream().filter(fires::contains).toList();
+        extinguish(randomPosition);
+            for (position.Position fire : nextFires)
+                extinguish(fire);
+            return randomPosition;
+        }*/
+
+       /* private void extinguish(position.Position position) {
+        fires.remove(position);
+        grid.paint(position.row(), position.col());
+    }*/
+/*
+    private List<position.Position> next(position.Position position){
+        List<position.Position> list = new ArrayList<>();
+        if(position.row()>0) list.add(new position.Position(position.row()-1, position.col()));
+        if(position.col()>0) list.add(new position.Position(position.row(), position.col()-1));
+        if(position.row()<rowCount-1) list.add(new position.Position(position.row()+1, position.col()));
+        if(position.col()<colCount-1) list.add(new position.Position(position.row(), position.col()+1));
+        return list;
+    }*/
+   /* private List<position.Position> nextTwo(position.Position position){
+        List<position.Position> list = new ArrayList<>();
+        if(position.row>0) list.add(new position.Position(position.row-2, position.col));
+        if(position.col>0) list.add(new position.Position(position.row, position.col-2));
+        if(position.row<rowCount-1) list.add(new position.Position(position.row+2, position.col));
+        if(position.col<colCount-1) list.add(new position.Position(position.row, position.col+2));
+        return list;
+    }*/
+
+  /*  private position.Position aStepTowardFire(position.Position position){
+        Queue<position.Position> toVisit = new LinkedList<>();
+        Set<position.Position> seen = new HashSet<>();
+        HashMap<position.Position,position.Position> firstMove = new HashMap<>();
+        toVisit.addAll(next(position));
+        for(position.Position initialMove : toVisit)
+            firstMove.put(initialMove,initialMove);
+        while(!toVisit.isEmpty()){
+            position.Position current = toVisit.poll();
+            if(fires.contains(current))
+                return firstMove.get(current);
+            for(position.Position adjacent : next(current)){
+                if(seen.contains(adjacent)) continue;
+                toVisit.add(adjacent);
+                seen.add(adjacent);
+                firstMove.put(adjacent, firstMove.get(current));
+            }
+        }
+
+    }*/
+
+  /*  private position.Position tStepTowardFire(position.Position position){
+        Queue<position.Position> toVisit = new LinkedList<>();
+        Set<position.Position> seen = new HashSet<>();
+        HashMap<position.Position,position.Position> firstMove = new HashMap<>();
+        toVisit.addAll(nextTwo(position));
+        for(position.Position initialMove : toVisit)
+            firstMove.put(initialMove,initialMove);
+        while(!toVisit.isEmpty()){
+            position.Position current = toVisit.poll();
+            if(fires.contains(current))
+                return firstMove.get(current);
+            for(position.Position adjacent : next(current)){
+                if(seen.contains(adjacent)) continue;
+                toVisit.add(adjacent);
+                seen.add(adjacent);
+                firstMove.put(adjacent, firstMove.get(current));
+            }
+        }
+        return position;
+    }*/
+
+
+}
\ No newline at end of file
diff --git a/src/main/java/Position.java b/src/main/java/position/Position.java
similarity index 70%
rename from src/main/java/Position.java
rename to src/main/java/position/Position.java
index 47d44a136003ca44d3aba0f9d14a213dc4a2307a..8af853b475a1f30858eaccae2bc105e988304707 100644
--- a/src/main/java/Position.java
+++ b/src/main/java/position/Position.java
@@ -1,2 +1,4 @@
+package position;
+
 public record Position(int row , int col) {
 }