diff --git a/.gradle/8.10.2/checksums/checksums.lock b/.gradle/8.10.2/checksums/checksums.lock
index 9a48770de98b1b2b8eb626e25112f35033bc89f5..b2d0593e71b75d1177a236bf0940220819eecafb 100644
Binary files a/.gradle/8.10.2/checksums/checksums.lock and b/.gradle/8.10.2/checksums/checksums.lock differ
diff --git a/.gradle/8.10.2/checksums/md5-checksums.bin b/.gradle/8.10.2/checksums/md5-checksums.bin
index 5e49250017d839805bf528a117603f62b6f034dd..12a8c3ecde1fa9d56c8078f7f46fa7730f2b8b53 100644
Binary files a/.gradle/8.10.2/checksums/md5-checksums.bin and b/.gradle/8.10.2/checksums/md5-checksums.bin differ
diff --git a/.gradle/8.10.2/checksums/sha1-checksums.bin b/.gradle/8.10.2/checksums/sha1-checksums.bin
index 1acd6a6ca0a15339e0adaecdb0d0317f6f0af581..e63ce417f3936d526c7f4da390240c4c71296891 100644
Binary files a/.gradle/8.10.2/checksums/sha1-checksums.bin and b/.gradle/8.10.2/checksums/sha1-checksums.bin differ
diff --git a/.gradle/8.10.2/executionHistory/executionHistory.bin b/.gradle/8.10.2/executionHistory/executionHistory.bin
index c0a42c7452a4575babe301dc69faa530ed2cbe90..fdb4eeffcc87945fbb049d92ca05c3c10cf3c6b5 100644
Binary files a/.gradle/8.10.2/executionHistory/executionHistory.bin and b/.gradle/8.10.2/executionHistory/executionHistory.bin differ
diff --git a/.gradle/8.10.2/executionHistory/executionHistory.lock b/.gradle/8.10.2/executionHistory/executionHistory.lock
index 98d73a3399a2b7b9b7ff57fa3eea70a4f7839ddc..41422f306b17568d7e6c1767886c73e5320db41b 100644
Binary files a/.gradle/8.10.2/executionHistory/executionHistory.lock and b/.gradle/8.10.2/executionHistory/executionHistory.lock differ
diff --git a/.gradle/8.10.2/fileHashes/fileHashes.bin b/.gradle/8.10.2/fileHashes/fileHashes.bin
index c35144f2a00d4ba378afd60d01af48907f17982f..5cb4b01e4eccee19eba6934f31434286f145f7db 100644
Binary files a/.gradle/8.10.2/fileHashes/fileHashes.bin and b/.gradle/8.10.2/fileHashes/fileHashes.bin differ
diff --git a/.gradle/8.10.2/fileHashes/fileHashes.lock b/.gradle/8.10.2/fileHashes/fileHashes.lock
index 4f35ed9a365ea24a158c92d38ef87c6bf1242313..3f1209eba2d344f756b5adde7102e707598993e4 100644
Binary files a/.gradle/8.10.2/fileHashes/fileHashes.lock and b/.gradle/8.10.2/fileHashes/fileHashes.lock differ
diff --git a/.gradle/8.10.2/fileHashes/resourceHashesCache.bin b/.gradle/8.10.2/fileHashes/resourceHashesCache.bin
index 348ea7ad62ba65646d45e49e668d46333d7a03ed..953dd5ee6e969ca039b09b633dfe0194aca17e2a 100644
Binary files a/.gradle/8.10.2/fileHashes/resourceHashesCache.bin and b/.gradle/8.10.2/fileHashes/resourceHashesCache.bin differ
diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock
index 9ba9563f962b6585455bfe2c037bc6af57222143..a1da752f5fdc61814a5539ca32ff72919cf99d6f 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 a4dcfe8c2c2a1e7d1b787d75a9f1db6df78b7604..d6ceb38bef8eeb41ce802c1b34c2aa5040e8e41a 100644
Binary files a/.gradle/file-system.probe and b/.gradle/file-system.probe differ
diff --git a/build/classes/java/main/app/SimulatorApplication.class b/build/classes/java/main/app/SimulatorApplication.class
index e59db45cc2ae6bd48b1b517132ce22b532b94837..b36b7c02d18654382c104e681c6af17a8589e001 100644
Binary files a/build/classes/java/main/app/SimulatorApplication.class and b/build/classes/java/main/app/SimulatorApplication.class differ
diff --git a/build/classes/java/main/controller/Controller.class b/build/classes/java/main/controller/Controller.class
index 2ae9c8dfd27b8159b1fbda744fc51dbcf74a7208..b7d3429c3ee350a8620694ba61082c3e446107d4 100644
Binary files a/build/classes/java/main/controller/Controller.class and b/build/classes/java/main/controller/Controller.class differ
diff --git a/build/classes/java/main/model/FirefighterBoard$1.class b/build/classes/java/main/model/FirefighterBoard$1.class
deleted file mode 100644
index d64505cab365e534a54be514fc590eb34187f29d..0000000000000000000000000000000000000000
Binary files a/build/classes/java/main/model/FirefighterBoard$1.class and /dev/null differ
diff --git a/build/classes/java/main/model/FirefighterBoard.class b/build/classes/java/main/model/FirefighterBoard.class
deleted file mode 100644
index deaf4965eca3a1db04908dcb2c3318b9eb99139d..0000000000000000000000000000000000000000
Binary files a/build/classes/java/main/model/FirefighterBoard.class and /dev/null differ
diff --git a/build/classes/java/main/model/ModelElement.class b/build/classes/java/main/model/ModelElement.class
index a8d4045ab891667fdd4c00b95d0a3805b20922b6..8f8a3219a1ccc625720ed323ef23e7739a32a722 100644
Binary files a/build/classes/java/main/model/ModelElement.class and b/build/classes/java/main/model/ModelElement.class differ
diff --git a/build/distributions/firefighter-shadow.tar b/build/distributions/firefighter-shadow.tar
index 68be05d50c3a4b953a130dec3492279ddf3b8a7d..8c6edb56869d9dd1e887659c37c83192f9ca3c92 100644
Binary files a/build/distributions/firefighter-shadow.tar and b/build/distributions/firefighter-shadow.tar differ
diff --git a/build/distributions/firefighter-shadow.zip b/build/distributions/firefighter-shadow.zip
index d6211d0c2deeaf119090160c1d1c5cca7bccfc13..5c89420baff29d967f7ee67f6bb0e658e04549f1 100644
Binary files a/build/distributions/firefighter-shadow.zip and b/build/distributions/firefighter-shadow.zip differ
diff --git a/build/distributions/firefighter.tar b/build/distributions/firefighter.tar
index f78a92995dee800db6be5de90a1521d7e11f29d7..7fb3be344f7e40cb9679ff8ad1460e6081f777e6 100644
Binary files a/build/distributions/firefighter.tar and b/build/distributions/firefighter.tar differ
diff --git a/build/distributions/firefighter.zip b/build/distributions/firefighter.zip
index 6723a0ad29115e8d53153f57c4763ff60684a9cf..1dfed1fa6f1ed30bdf4e238760ae8e96bf6015df 100644
Binary files a/build/distributions/firefighter.zip and b/build/distributions/firefighter.zip differ
diff --git a/build/libs/firefighter-all.jar b/build/libs/firefighter-all.jar
index df96d958bcabce52945f32b3edecc08b4153def0..88dad87556b6a2b4760ab877bad8aeee88a9d7ce 100644
Binary files a/build/libs/firefighter-all.jar and b/build/libs/firefighter-all.jar differ
diff --git a/build/libs/firefighter.jar b/build/libs/firefighter.jar
index 282518b41b4f7a4d6be4e881bb3e4e1e370ce27e..d2c86d78bf3773117e163a4eac7b1d0a71c4cb7b 100644
Binary files a/build/libs/firefighter.jar and b/build/libs/firefighter.jar differ
diff --git a/build/reports/tests/test/classes/model.FirefighterBoardTest.html b/build/reports/tests/test/classes/model.FirefighterBoardTest.html
index 946674e0c4eea02e35545d44837aa27438771afb..bafdf34e7c29583f2ffee442a11dc1a78bf741e2 100644
--- a/build/reports/tests/test/classes/model.FirefighterBoardTest.html
+++ b/build/reports/tests/test/classes/model.FirefighterBoardTest.html
@@ -41,7 +41,7 @@
 </td>
 <td>
 <div class="infoBox" id="duration">
-<div class="counter">0.279s</div>
+<div class="counter">0.098s</div>
 <p>duration</p>
 </div>
 </td>
@@ -76,12 +76,12 @@
 </thead>
 <tr>
 <td class="success">testColumnCount()</td>
-<td class="success">0.234s</td>
+<td class="success">0.078s</td>
 <td class="success">passed</td>
 </tr>
 <tr>
 <td class="success">testGetState_afterSet()</td>
-<td class="success">0.022s</td>
+<td class="success">0.016s</td>
 <td class="success">passed</td>
 </tr>
 <tr>
@@ -91,7 +91,7 @@
 </tr>
 <tr>
 <td class="success">testStepNumber()</td>
-<td class="success">0.021s</td>
+<td class="success">0.002s</td>
 <td class="success">passed</td>
 </tr>
 </table>
@@ -104,7 +104,7 @@
 <input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
 </label>
 </div>Generated by 
-<a href="http://www.gradle.org">Gradle 8.10.2</a> at 15 nov. 2024, 01:39:00</p>
+<a href="http://www.gradle.org">Gradle 8.10.2</a> at 16 nov. 2024, 18:17:08</p>
 </div>
 </div>
 </body>
diff --git a/build/reports/tests/test/classes/view.FirefighterGridTest.html b/build/reports/tests/test/classes/view.FirefighterGridTest.html
deleted file mode 100644
index 9cad9020d084b420390b37744c05fea2a4afe227..0000000000000000000000000000000000000000
--- a/build/reports/tests/test/classes/view.FirefighterGridTest.html
+++ /dev/null
@@ -1,101 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-<meta http-equiv="x-ua-compatible" content="IE=edge"/>
-<title>Test results - FirefighterGridTest</title>
-<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
-<link href="../css/style.css" rel="stylesheet" type="text/css"/>
-<script src="../js/report.js" type="text/javascript"></script>
-</head>
-<body>
-<div id="content">
-<h1>FirefighterGridTest</h1>
-<div class="breadcrumbs">
-<a href="../index.html">all</a> &gt; 
-<a href="../packages/view.html">view</a> &gt; FirefighterGridTest</div>
-<div id="summary">
-<table>
-<tr>
-<td>
-<div class="summaryGroup">
-<table>
-<tr>
-<td>
-<div class="infoBox" id="tests">
-<div class="counter">2</div>
-<p>tests</p>
-</div>
-</td>
-<td>
-<div class="infoBox" id="failures">
-<div class="counter">0</div>
-<p>failures</p>
-</div>
-</td>
-<td>
-<div class="infoBox" id="ignored">
-<div class="counter">0</div>
-<p>ignored</p>
-</div>
-</td>
-<td>
-<div class="infoBox" id="duration">
-<div class="counter">1.763s</div>
-<p>duration</p>
-</div>
-</td>
-</tr>
-</table>
-</div>
-</td>
-<td>
-<div class="infoBox success" id="successRate">
-<div class="percent">100%</div>
-<p>successful</p>
-</div>
-</td>
-</tr>
-</table>
-</div>
-<div id="tabs">
-<ul class="tabLinks">
-<li>
-<a href="#tab0">Tests</a>
-</li>
-</ul>
-<div id="tab0" class="tab">
-<h2>Tests</h2>
-<table>
-<thead>
-<tr>
-<th>Test</th>
-<th>Duration</th>
-<th>Result</th>
-</tr>
-</thead>
-<tr>
-<td class="success">testColumnCount()</td>
-<td class="success">1.761s</td>
-<td class="success">passed</td>
-</tr>
-<tr>
-<td class="success">testRowCount()</td>
-<td class="success">0.002s</td>
-<td class="success">passed</td>
-</tr>
-</table>
-</div>
-</div>
-<div id="footer">
-<p>
-<div>
-<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
-<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
-</label>
-</div>Generated by 
-<a href="http://www.gradle.org">Gradle 8.10.2</a> at 15 nov. 2024, 01:39:00</p>
-</div>
-</div>
-</body>
-</html>
diff --git a/build/reports/tests/test/index.html b/build/reports/tests/test/index.html
index 59ffa3a2d66c934f6d1ad55b6fac2c0ecaa4c4fc..6745010e7e1ed0ce0dfbbaf18cf8f3aeeeff484e 100644
--- a/build/reports/tests/test/index.html
+++ b/build/reports/tests/test/index.html
@@ -20,7 +20,7 @@
 <tr>
 <td>
 <div class="infoBox" id="tests">
-<div class="counter">6</div>
+<div class="counter">4</div>
 <p>tests</p>
 </div>
 </td>
@@ -38,7 +38,7 @@
 </td>
 <td>
 <div class="infoBox" id="duration">
-<div class="counter">2.042s</div>
+<div class="counter">0.098s</div>
 <p>duration</p>
 </div>
 </td>
@@ -85,17 +85,7 @@
 <td>4</td>
 <td>0</td>
 <td>0</td>
-<td>0.279s</td>
-<td class="success">100%</td>
-</tr>
-<tr>
-<td class="success">
-<a href="packages/view.html">view</a>
-</td>
-<td>2</td>
-<td>0</td>
-<td>0</td>
-<td>1.763s</td>
+<td>0.098s</td>
 <td class="success">100%</td>
 </tr>
 </tbody>
@@ -122,17 +112,7 @@
 <td>4</td>
 <td>0</td>
 <td>0</td>
-<td>0.279s</td>
-<td class="success">100%</td>
-</tr>
-<tr>
-<td class="success">
-<a href="classes/view.FirefighterGridTest.html">view.FirefighterGridTest</a>
-</td>
-<td>2</td>
-<td>0</td>
-<td>0</td>
-<td>1.763s</td>
+<td>0.098s</td>
 <td class="success">100%</td>
 </tr>
 </tbody>
@@ -146,7 +126,7 @@
 <input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
 </label>
 </div>Generated by 
-<a href="http://www.gradle.org">Gradle 8.10.2</a> at 15 nov. 2024, 01:39:00</p>
+<a href="http://www.gradle.org">Gradle 8.10.2</a> at 16 nov. 2024, 18:17:08</p>
 </div>
 </div>
 </body>
diff --git a/build/reports/tests/test/packages/model.html b/build/reports/tests/test/packages/model.html
index 2c9dac1338405c7c20355389938aedb0c89dc6f7..513bbe36966c97444128570caef41f9ff98dbd8c 100644
--- a/build/reports/tests/test/packages/model.html
+++ b/build/reports/tests/test/packages/model.html
@@ -40,7 +40,7 @@
 </td>
 <td>
 <div class="infoBox" id="duration">
-<div class="counter">0.279s</div>
+<div class="counter">0.098s</div>
 <p>duration</p>
 </div>
 </td>
@@ -83,7 +83,7 @@
 <td>4</td>
 <td>0</td>
 <td>0</td>
-<td>0.279s</td>
+<td>0.098s</td>
 <td class="success">100%</td>
 </tr>
 </table>
@@ -96,7 +96,7 @@
 <input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
 </label>
 </div>Generated by 
-<a href="http://www.gradle.org">Gradle 8.10.2</a> at 15 nov. 2024, 01:39:00</p>
+<a href="http://www.gradle.org">Gradle 8.10.2</a> at 16 nov. 2024, 18:17:08</p>
 </div>
 </div>
 </body>
diff --git a/build/reports/tests/test/packages/view.html b/build/reports/tests/test/packages/view.html
deleted file mode 100644
index aef2dd0099015772f7a8203480efcfc98c68a66a..0000000000000000000000000000000000000000
--- a/build/reports/tests/test/packages/view.html
+++ /dev/null
@@ -1,103 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-<meta http-equiv="x-ua-compatible" content="IE=edge"/>
-<title>Test results - Package view</title>
-<link href="../css/base-style.css" rel="stylesheet" type="text/css"/>
-<link href="../css/style.css" rel="stylesheet" type="text/css"/>
-<script src="../js/report.js" type="text/javascript"></script>
-</head>
-<body>
-<div id="content">
-<h1>Package view</h1>
-<div class="breadcrumbs">
-<a href="../index.html">all</a> &gt; view</div>
-<div id="summary">
-<table>
-<tr>
-<td>
-<div class="summaryGroup">
-<table>
-<tr>
-<td>
-<div class="infoBox" id="tests">
-<div class="counter">2</div>
-<p>tests</p>
-</div>
-</td>
-<td>
-<div class="infoBox" id="failures">
-<div class="counter">0</div>
-<p>failures</p>
-</div>
-</td>
-<td>
-<div class="infoBox" id="ignored">
-<div class="counter">0</div>
-<p>ignored</p>
-</div>
-</td>
-<td>
-<div class="infoBox" id="duration">
-<div class="counter">1.763s</div>
-<p>duration</p>
-</div>
-</td>
-</tr>
-</table>
-</div>
-</td>
-<td>
-<div class="infoBox success" id="successRate">
-<div class="percent">100%</div>
-<p>successful</p>
-</div>
-</td>
-</tr>
-</table>
-</div>
-<div id="tabs">
-<ul class="tabLinks">
-<li>
-<a href="#tab0">Classes</a>
-</li>
-</ul>
-<div id="tab0" class="tab">
-<h2>Classes</h2>
-<table>
-<thead>
-<tr>
-<th>Class</th>
-<th>Tests</th>
-<th>Failures</th>
-<th>Ignored</th>
-<th>Duration</th>
-<th>Success rate</th>
-</tr>
-</thead>
-<tr>
-<td class="success">
-<a href="../classes/view.FirefighterGridTest.html">FirefighterGridTest</a>
-</td>
-<td>2</td>
-<td>0</td>
-<td>0</td>
-<td>1.763s</td>
-<td class="success">100%</td>
-</tr>
-</table>
-</div>
-</div>
-<div id="footer">
-<p>
-<div>
-<label class="hidden" id="label-for-line-wrapping-toggle" for="line-wrapping-toggle">Wrap lines
-<input id="line-wrapping-toggle" type="checkbox" autocomplete="off"/>
-</label>
-</div>Generated by 
-<a href="http://www.gradle.org">Gradle 8.10.2</a> at 15 nov. 2024, 01:39:00</p>
-</div>
-</div>
-</body>
-</html>
diff --git a/build/test-results/test/TEST-model.FirefighterBoardTest.xml b/build/test-results/test/TEST-model.FirefighterBoardTest.xml
index 87b9b2fd4eed371010f57a8aab88ed34a502f84f..25b19d0fe71cd92c90d777d2be6487ddeb36aa41 100644
--- a/build/test-results/test/TEST-model.FirefighterBoardTest.xml
+++ b/build/test-results/test/TEST-model.FirefighterBoardTest.xml
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<testsuite name="model.FirefighterBoardTest" tests="4" skipped="0" failures="0" errors="0" timestamp="2024-11-15T00:38:58" hostname="DESKTOP-ETSE1TF" time="0.285">
+<testsuite name="model.FirefighterBoardTest" tests="4" skipped="0" failures="0" errors="0" timestamp="2024-11-16T17:17:08" hostname="DESKTOP-ETSE1TF" time="0.103">
   <properties/>
-  <testcase name="testColumnCount()" classname="model.FirefighterBoardTest" time="0.234"/>
-  <testcase name="testGetState_afterSet()" classname="model.FirefighterBoardTest" time="0.022"/>
+  <testcase name="testColumnCount()" classname="model.FirefighterBoardTest" time="0.078"/>
+  <testcase name="testGetState_afterSet()" classname="model.FirefighterBoardTest" time="0.016"/>
   <testcase name="testRowCount()" classname="model.FirefighterBoardTest" time="0.002"/>
-  <testcase name="testStepNumber()" classname="model.FirefighterBoardTest" time="0.021"/>
+  <testcase name="testStepNumber()" classname="model.FirefighterBoardTest" time="0.002"/>
   <system-out><![CDATA[]]></system-out>
   <system-err><![CDATA[]]></system-err>
 </testsuite>
diff --git a/build/test-results/test/TEST-view.FirefighterGridTest.xml b/build/test-results/test/TEST-view.FirefighterGridTest.xml
deleted file mode 100644
index c2903db4997ae6d6c53c3393bb83d77805e69845..0000000000000000000000000000000000000000
--- a/build/test-results/test/TEST-view.FirefighterGridTest.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<testsuite name="view.FirefighterGridTest" tests="2" skipped="0" failures="0" errors="0" timestamp="2024-11-15T00:38:58" hostname="DESKTOP-ETSE1TF" time="1.764">
-  <properties/>
-  <testcase name="testColumnCount()" classname="view.FirefighterGridTest" time="1.761"/>
-  <testcase name="testRowCount()" classname="view.FirefighterGridTest" time="0.002"/>
-  <system-out><![CDATA[]]></system-out>
-  <system-err><![CDATA[]]></system-err>
-</testsuite>
diff --git a/build/test-results/test/binary/results.bin b/build/test-results/test/binary/results.bin
index 76a2d705df0fde4e96a98b71c3dc1a7bb9825ddf..a107e74bac0a156950871a4a3fe83cd91a688753 100644
Binary files a/build/test-results/test/binary/results.bin and b/build/test-results/test/binary/results.bin differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Controller.class.uniqueId3 b/build/tmp/compileJava/compileTransaction/stash-dir/Controller.class.uniqueId3
index 2ae9c8dfd27b8159b1fbda744fc51dbcf74a7208..cf00614109212f6eb89b53189568778874c810a0 100644
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/Controller.class.uniqueId3 and b/build/tmp/compileJava/compileTransaction/stash-dir/Controller.class.uniqueId3 differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/FirefighterBoard$1.class.uniqueId1 b/build/tmp/compileJava/compileTransaction/stash-dir/FirefighterBoard$1.class.uniqueId1
deleted file mode 100644
index d64505cab365e534a54be514fc590eb34187f29d..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/FirefighterBoard$1.class.uniqueId1 and /dev/null differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/FirefighterBoard.class.uniqueId0 b/build/tmp/compileJava/compileTransaction/stash-dir/FirefighterBoard.class.uniqueId0
deleted file mode 100644
index deaf4965eca3a1db04908dcb2c3318b9eb99139d..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/FirefighterBoard.class.uniqueId0 and /dev/null differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/module-info.class.uniqueId2 b/build/tmp/compileJava/compileTransaction/stash-dir/module-info.class.uniqueId2
deleted file mode 100644
index f0b28b3b4966d6d1c1eac55f53fff160e8e01b67..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/module-info.class.uniqueId2 and /dev/null differ
diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin
index 1151d7ece14bd6617d696b95a15f9b265e30e073..e8816291e0944805667e492410d9cc7959533c67 100644
Binary files a/build/tmp/compileJava/previous-compilation-data.bin and b/build/tmp/compileJava/previous-compilation-data.bin differ
diff --git a/build/tmp/compileTestJava/previous-compilation-data.bin b/build/tmp/compileTestJava/previous-compilation-data.bin
index 8bcd92c263551a4fa9f3451ae525fe5896052001..52c7a82cea64dd185ab8069082e50a8050625d84 100644
Binary files a/build/tmp/compileTestJava/previous-compilation-data.bin and b/build/tmp/compileTestJava/previous-compilation-data.bin differ
diff --git a/build/tmp/shadowJar/MANIFEST.MF b/build/tmp/shadowJar/MANIFEST.MF
index 59499bce4a2bd51cba227b7c00fcf745b19c95a4..2c5dafadb5f53a219e1c22537b872baf7d0b350d 100644
--- a/build/tmp/shadowJar/MANIFEST.MF
+++ b/build/tmp/shadowJar/MANIFEST.MF
@@ -1,2 +1,3 @@
 Manifest-Version: 1.0
+Main-Class: app.SimulatorMain
 
diff --git a/src/main/java/app/SimulatorApplication.java b/src/main/java/app/SimulatorApplication.java
index e88b0e9856086cc6f53f2782175393dca6365eb6..09638001b8ccac68352006236c540ffab80eeffd 100644
--- a/src/main/java/app/SimulatorApplication.java
+++ b/src/main/java/app/SimulatorApplication.java
@@ -12,7 +12,7 @@ import java.net.URL;
 
 public class SimulatorApplication extends javafx.application.Application {
   private static final String VIEW_RESOURCE_PATH = "/view/view.fxml";
-  private static final String APP_NAME = "Firefighter simulator";
+  private static final String APP_NAME = "StandardFirefighter simulator";
   private static final int ROW_COUNT = 20;
   private static final int COLUMN_COUNT = 20;
   private static final int BOX_WIDTH = 50;
diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java
index 2a60897c6eb8ba847cb8589840c16a0f175ce0a3..03c50c60d4e216bea0130ece38c151a484eff585 100644
--- a/src/main/java/controller/Controller.java
+++ b/src/main/java/controller/Controller.java
@@ -14,7 +14,7 @@ import javafx.util.Duration;
 import javafx.util.Pair;
 import model.Board;
 import model.ModelElement;
-import model.FirefighterBoard;
+import model.FFBoard;
 import util.Position;
 import view.Grid;
 import view.ViewElement;
@@ -54,8 +54,8 @@ public class Controller {
     pauseToggleButton.setSelected(true);
   }
 
-  private void setModel(FirefighterBoard firefighterBoard) {
-    this.board = requireNonNull(firefighterBoard, "firefighter.model is null");
+  private void setModel(FFBoard FFBoard) {
+    this.board = requireNonNull(FFBoard, "firefighter.model is null");
   }
 
   private void updateBoard(){
@@ -88,6 +88,9 @@ public class Controller {
     if (squareState.contains(ModelElement.FIRE)){
       return ViewElement.FIRE;
     }
+    if (squareState.contains(ModelElement.MOUNTAIN)){
+      return ViewElement.MOUNTAIN;
+    }
     return ViewElement.EMPTY;
   }
 
@@ -126,7 +129,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 FFBoard(columnCount, rowCount, initialFireCount, initialFirefighterCount));
     repaintGrid();
   }
 
diff --git a/src/main/java/model/Behavior.java b/src/main/java/model/Behavior.java
index fd14b4743c7c4cf85ed465429e473c7b0b62587d..577e2690804681c61d8e20545a1b5d66604a52db 100644
--- a/src/main/java/model/Behavior.java
+++ b/src/main/java/model/Behavior.java
@@ -1,5 +1,12 @@
 package model;
 
+import util.Position;
+
+import java.util.List;
+
 public interface Behavior {
-    public void move();
+    public List<Position> getNext(BoardData boarddata,List<Position>positions);
+    public default Boolean isLegalMove(){
+        return true;
+    }
 }
diff --git a/src/main/java/model/BoardData.java b/src/main/java/model/BoardData.java
new file mode 100644
index 0000000000000000000000000000000000000000..b7371b7ab4eeab33311cc7b76244f6fcf53f296e
--- /dev/null
+++ b/src/main/java/model/BoardData.java
@@ -0,0 +1,17 @@
+package model;
+
+import util.Position;
+
+import java.util.List;
+import java.util.Map;
+
+public interface BoardData {
+    public List<List<Position>> getPositions();
+    public void setPositions( List<List<Position>> Positions);
+    public Map<Position, List<Position>> getNeighbors();
+    public List<Position> getNeighbor(Position position);
+    public int getStep();
+    public void setStep(int step);
+    public void initialize();
+
+}
diff --git a/src/main/java/model/Element.java b/src/main/java/model/Element.java
index 76b4de8b81d124be94b6db2338ed7351cc73e58a..df9b042be6b27129cdebe4be906ad00251104334 100644
--- a/src/main/java/model/Element.java
+++ b/src/main/java/model/Element.java
@@ -9,10 +9,9 @@ public abstract class  Element {
     ModelElement type;
     Behavior behavior;
     List<ModelElement> obstacles;
-    public Element(ModelElement type, Behavior behavior, ArrayList<ModelElement> obstacles) {
+    public Element(ModelElement type, Behavior behavior) {
         this.type = type;
         this.behavior = behavior;
-        this.obstacles = obstacles;
     }
-    public abstract List<Position> Update(List<Position>[] board,List<Position> modifiedList);
+    public abstract List<Position> Update(BoardData board, List<Position> modifiedList);
 }
diff --git a/src/main/java/model/FFBehavior.java b/src/main/java/model/FFBehavior.java
new file mode 100644
index 0000000000000000000000000000000000000000..90d3d7c8bf6a60b3c2d6b07d649ebe4f363dd39f
--- /dev/null
+++ b/src/main/java/model/FFBehavior.java
@@ -0,0 +1,11 @@
+package model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public abstract class FFBehavior implements Behavior {
+    public ModelElement element;
+    public FFBehavior(ModelElement element) {
+        this.element = element;
+    }
+}
diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FFBoard.java
similarity index 64%
rename from src/main/java/model/FirefighterBoard.java
rename to src/main/java/model/FFBoard.java
index 4202314537660311a459d8b6d2f57fe166a0c3e7..a8fb054fc1311f07aebdc64bfca0550ee81f1f88 100644
--- a/src/main/java/model/FirefighterBoard.java
+++ b/src/main/java/model/FFBoard.java
@@ -1,24 +1,25 @@
 package model;
 
 import util.Position;
+import util.TargetStrategy;
 
 import java.util.*;
 
 
-public class FirefighterBoard implements Board<List<ModelElement>> {
+public class FFBoard implements Board<List<ModelElement>> {
   private final int columnCount;
   private final int rowCount;
   private final int initialFireCount;
   private final int initialFirefighterCount;
-  private final model.TargetStrategy targetStrategy = new model.TargetStrategy();
-  private List<Position> firefighterPositions;
-  private Set<Position> firePositions;
-  private Map<Position, List<Position>> neighbors = new HashMap();
+  private final TargetStrategy targetStrategy = new TargetStrategy();
+  private BoardData boardData;
   private final Position[][] positions;
-  private int step = 0;
+  private FFUpdater FFUpdater ;
   private final Random randomGenerator = new Random();
 
-  public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount) {
+  public FFBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount) {
+    boardData=new FFBoardData();
+    FFUpdater=new FFUpdater();
     this.columnCount = columnCount;
     this.rowCount = rowCount;
     this.positions = new Position[rowCount][columnCount];
@@ -32,7 +33,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
         if (column > 0) list.add(positions[row][column - 1]);
         if (row < rowCount - 1) list.add(positions[row + 1][column]);
         if (column < columnCount - 1) list.add(positions[row][column + 1]);
-        neighbors.put(positions[row][column], list);
+        boardData.getNeighbors().put(positions[row][column], list);
       }
     this.initialFireCount = initialFireCount;
     this.initialFirefighterCount = initialFirefighterCount;
@@ -40,12 +41,12 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
   }
 
   public void initializeElements() {
-    firefighterPositions = new ArrayList<>();
-    firePositions = new HashSet<>();
+    boardData.initialize();
+
     for (int index = 0; index < initialFireCount; index++)
-      firePositions.add(randomPosition());
+      boardData.getPositions().get(ModelElement.FIRE.ordinal()).add(randomPosition());
     for (int index = 0; index < initialFirefighterCount; index++)
-      firefighterPositions.add(randomPosition());
+      boardData.getPositions().get(ModelElement.FIREFIGHTER.ordinal()).add(randomPosition());
   }
 
   private Position randomPosition() {
@@ -54,6 +55,8 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
 
   @Override
   public List<ModelElement> getState(Position position) {
+    List<Position> firefighterPositions=boardData.getPositions().get(ModelElement.FIREFIGHTER.ordinal());
+    List<Position> firePositions =boardData.getPositions().get(ModelElement.FIRE.ordinal());
     List<ModelElement> result = new ArrayList<>();
     for (Position firefighterPosition : firefighterPositions)
       if (firefighterPosition.equals(position))
@@ -74,64 +77,55 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
   }
 
   public List<Position> updateToNextGeneration() {
-    List<Position> modifiedPositions = updateFirefighters();
+    /*List<Position> modifiedPositions = updateFirefighters();
     modifiedPositions.addAll(updateFires());
-    step++;
+    boardData.setStep(boardData.getStep()+1);
+    return modifiedPositions;*/
+    List<Position> modifiedPositions = FFUpdater.updateAll(boardData);
+    boardData.setStep(boardData.getStep()+1);
     return modifiedPositions;
   }
 
-  private List<Position> updateFires() {
-    List<Position> modifiedPositions = new ArrayList<>();
-    if (step % 2 == 0) {
-      List<Position> newFirePositions = new ArrayList<>();
-      for (Position fire : firePositions) {
-        newFirePositions.addAll(neighbors.get(fire));
-      }
-      firePositions.addAll(newFirePositions);
-      modifiedPositions.addAll(newFirePositions);
-    }
-    return modifiedPositions;
-
-  }
 
   @Override
   public int stepNumber() {
-    return step;
+    return boardData.getStep();
   }
 
   private List<Position> updateFirefighters() {
-    List<Position> modifiedPosition = new ArrayList<>();
+    List<Position> modifiedPosition = new ArrayList<>();/*
+    List<Position> firefighterPositions = boardData.getPositions().get(ModelElement.FIREFIGHTER.ordinal());
+    List<Position> firePositions = boardData.getPositions().get(ModelElement.FIRE.ordinal());
     List<Position> firefighterNewPositions = new ArrayList<>();
     for (Position firefighterPosition : firefighterPositions) {
       Position newFirefighterPosition =
               targetStrategy.neighborClosestToFire(firefighterPosition,
-                      firePositions, neighbors);
+                      firePositions, boardData.getNeighbors());
       firefighterNewPositions.add(newFirefighterPosition);
       extinguish(newFirefighterPosition);
       modifiedPosition.add(firefighterPosition);
       modifiedPosition.add(newFirefighterPosition);
-      List<Position> neighborFirePositions = neighbors.get(newFirefighterPosition).stream()
+      List<Position> neighborFirePositions = boardData.getNeighbors().get(newFirefighterPosition).stream()
               .filter(firePositions::contains).toList();
       for (Position firePosition : neighborFirePositions)
         extinguish(firePosition);
       modifiedPosition.addAll(neighborFirePositions);
     }
-    firefighterPositions = firefighterNewPositions;
+    firefighterPositions = firefighterNewPositions;*/
     return modifiedPosition;
   }
 
   @Override
   public void reset() {
-    step = 0;
+    boardData.setStep(0);
     initializeElements();
   }
 
-  private void extinguish(Position position) {
-    firePositions.remove(position);
-  }
 
   @Override
   public void setState(List<ModelElement> state, Position position) {
+    List<Position> firefighterPositions = boardData.getPositions().get(ModelElement.FIREFIGHTER.ordinal());
+    List<Position> firePositions = boardData.getPositions().get(ModelElement.FIRE.ordinal());
     firePositions.remove(position);
     for (; ; ) {
       if (!firefighterPositions.remove(position)) break;
diff --git a/src/main/java/model/FFBoardData.java b/src/main/java/model/FFBoardData.java
new file mode 100644
index 0000000000000000000000000000000000000000..ae71a9320db857a03409070c421e36a8ace4b31b
--- /dev/null
+++ b/src/main/java/model/FFBoardData.java
@@ -0,0 +1,48 @@
+package model;
+
+import util.Position;
+
+import java.util.*;
+
+public class FFBoardData implements BoardData{
+    private List<List<Position>> positions;
+    private final Map<Position, List<Position>> neighbors = new HashMap<Position, List<Position>>();
+    private int step;
+
+    public FFBoardData() {
+        initialize();
+    }
+    public void initialize(){
+        step=0;
+        positions = new ArrayList<>();
+        for (int i = 0; i < ModelElement.values().length; i++) {
+            positions.add(new ArrayList<>());
+        }
+    }
+
+    public  List<List<Position>> getPositions() {
+        return positions;
+    }
+    public  List<Position> getPositions(ModelElement modelElement) {
+        return positions.get(modelElement.ordinal());
+    }
+    public void setPositions( List<List<Position>> Positions) {
+        this.positions = Positions;
+    }
+    public Map<Position, List<Position>> getNeighbors() {
+        return neighbors;
+    }
+    public List<Position> getNeighbor(Position position) {
+        return neighbors.get(position);
+    }
+
+    @Override
+    public int getStep() {
+        return step;
+    }
+
+    @Override
+    public void setStep(int step) {
+        this.step=step;
+    }
+}
diff --git a/src/main/java/model/FFUpdater.java b/src/main/java/model/FFUpdater.java
new file mode 100644
index 0000000000000000000000000000000000000000..8710d56ade74658b18644eab181fd9cc4f95064f
--- /dev/null
+++ b/src/main/java/model/FFUpdater.java
@@ -0,0 +1,27 @@
+package model;
+
+import util.Position;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class FFUpdater implements Updater {
+    Element[] elements;
+
+    public FFUpdater() {
+        this.elements=new Element[ModelElement.values().length];
+        for (int i = 0; i < ModelElement.values().length; i++) {
+            this.elements[i]=ModelElement.values()[i].instanciate();
+        }
+    }
+
+    @Override
+    public List<Position> updateAll(BoardData boardData) {
+        List<Position> modifiedList=new ArrayList<Position>();
+        for (int i = 0; i < ModelElement.values().length; i++) {
+            modifiedList=this.elements[i].Update(boardData,modifiedList);
+            System.out.println(modifiedList.toString());
+        }
+        return modifiedList;
+    }
+}
diff --git a/src/main/java/model/Fire.java b/src/main/java/model/Fire.java
index 545268257546d8b70d0efc224286f5e2acdd1f17..065250b9fd2cefaec6e3bf038b5ee6d2aeac02b5 100644
--- a/src/main/java/model/Fire.java
+++ b/src/main/java/model/Fire.java
@@ -9,12 +9,16 @@ public class Fire extends Element{
 
     public Fire() {
             super(ModelElement.FIRE,
-                    new FireBehavior(),
-                    new ArrayList<ModelElement>());
+                    new FireBehavior(ModelElement.FIRE));
     }
 
     @Override
-    public List<Position> Update(List<Position>[] board, List<Position> modifiedList) {
-        return List.of();
+    public List<Position> Update(BoardData boardData, List<Position> modifPositions) {
+        List<Position> firePositions = boardData.getPositions().get(this.type.ordinal());
+        List<Position> modifiedPositions = new ArrayList<Position>(modifPositions);
+        List<Position> newFirePositions = behavior.getNext(boardData,firePositions);
+        firePositions.addAll(newFirePositions);
+        modifiedPositions.addAll(newFirePositions);
+        return modifiedPositions;
     }
 }
diff --git a/src/main/java/model/FireBehavior.java b/src/main/java/model/FireBehavior.java
index bb701b3834e7b4c8a6a9c88a493dbc941911a771..c9a3c7240f0b3f0f5821d82a00f31fb8d4da4f0f 100644
--- a/src/main/java/model/FireBehavior.java
+++ b/src/main/java/model/FireBehavior.java
@@ -1,8 +1,27 @@
 package model;
 
-public class FireBehavior implements Behavior {
-    @Override
-    public void move() {
+import util.Position;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class FireBehavior extends FFBehavior {
+
 
+    public FireBehavior(ModelElement element) {
+        super(element);
+    }
+
+    @Override
+    public List<Position> getNext(BoardData boardData, List<Position> positions) {
+        List<Position> firePositions = boardData.getPositions().get(element.ordinal());
+        List<Position> newFirePositions = new ArrayList<>();
+        if (boardData.getStep() % 2 == 0) {
+            for (Position fire : firePositions) {
+                boardData.getNeighbors().get(fire).removeAll(newFirePositions);
+                newFirePositions.addAll(boardData.getNeighbors().get(fire));
+            }
+        }
+        return newFirePositions;
     }
 }
diff --git a/src/main/java/model/Firefighter.java b/src/main/java/model/Firefighter.java
deleted file mode 100644
index 05920b8bf7e5e858286c479c7a88810335367eae..0000000000000000000000000000000000000000
--- a/src/main/java/model/Firefighter.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package model;
-
-import util.Position;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class Firefighter extends Element{
-
-    public Firefighter() {
-            super(ModelElement.FIREFIGHTER,
-                    new FirefighterBehavior(),
-                    new ArrayList<ModelElement>());
-    }
-
-    @Override
-    public List<Position> Update(List<Position>[] board, List<Position> modifiedList) {
-        return List.of();
-    }
-}
diff --git a/src/main/java/model/FirefighterBehavior.java b/src/main/java/model/FirefighterBehavior.java
index 9d6da9cfd5cbbeb2af402515cb66d167fa5b6e82..966a8049ce949ca98435a665b093f4fd85e13362 100644
--- a/src/main/java/model/FirefighterBehavior.java
+++ b/src/main/java/model/FirefighterBehavior.java
@@ -1,8 +1,65 @@
 package model;
 
-public class FirefighterBehavior implements Behavior {
+import util.Position;
+import util.TargetStrategy;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.ListIterator;
+
+public class FirefighterBehavior extends FFBehavior implements TangibleBehavior<ModelElement>,RemoverBehavior<ModelElement> {
+    ModelElement element;
+    List<ModelElement> obstacles=new ArrayList<>(List.of(ModelElement.MOUNTAIN));
+    ModelElement removedElement=ModelElement.FIRE;
+    TargetStrategy targetStrategy=new TargetStrategy();
+
+    public FirefighterBehavior(ModelElement modelElement) {
+        super(modelElement);
+    }
+
+
     @Override
-    public void move() {
+    public List<Position> getNext(BoardData boardData, List<Position> modifiedPositions) {
+        List<Position> modifiedPosition = new ArrayList<>();
+        List<Position> firefighterPositions = boardData.getPositions().get(element.ordinal());
+        List<Position> firePositions = boardData.getPositions().get(getElementToRemove().ordinal());
+        List<Position> firefighterNewPositions = new ArrayList<>();
+        for (Position firefighterPosition : firefighterPositions) {
+            Position newFirefighterPosition =
+                    targetStrategy.neighborClosestToFire(firefighterPosition,
+                            firePositions, boardData.getNeighbors());
+            firefighterNewPositions.add(newFirefighterPosition);
+            remove(boardData,newFirefighterPosition);
+            modifiedPosition.add(firefighterPosition);
+            modifiedPosition.add(newFirefighterPosition);
+            List<Position> neighborFirePositions = boardData.getNeighbors().get(newFirefighterPosition).stream()
+                    .filter(firePositions::contains).toList();
+            for (Position firePosition : neighborFirePositions)
+                remove(boardData,firePosition);
+            modifiedPosition.addAll(neighborFirePositions);
+        }
+        firefighterPositions = firefighterNewPositions;
+        return modifiedPosition;
+    }
 
+    @Override
+    public Boolean isLegalMove() {
+        return super.isLegalMove();
+    }
+
+    @Override
+    public List<ModelElement> getObstacles() {
+        return obstacles;
+    }
+
+    @Override
+    public void remove(BoardData boardData,Position p) {
+        List<Position> firePositions = boardData.getPositions().get(getElementToRemove().ordinal());
+        firePositions.remove(p);
+    }
+
+    @Override
+    public ModelElement getElementToRemove() {
+        return removedElement;
     }
 }
diff --git a/src/main/java/model/FirefighterUpdater.java b/src/main/java/model/FirefighterUpdater.java
deleted file mode 100644
index c0de079909ce9a06f2cc56f6e3f862a3c4daf0a4..0000000000000000000000000000000000000000
--- a/src/main/java/model/FirefighterUpdater.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package model;
-
-public class FirefighterUpdater implements Updater {
-}
diff --git a/src/main/java/model/ModelElement.java b/src/main/java/model/ModelElement.java
index 759eee5e54c3a39472d8f7defbbbe6a2b67b8f00..6fa3031b0463f8c9f663ed8e8ac3d13eeac4cfdb 100644
--- a/src/main/java/model/ModelElement.java
+++ b/src/main/java/model/ModelElement.java
@@ -1,5 +1,31 @@
 package model;
 
+import java.lang.reflect.InvocationTargetException;
+
 public enum ModelElement {
-  FIREFIGHTER, FIRE
+  FIREFIGHTER(StandardFirefighter.class),
+  FIRE(Fire.class),
+  MOUNTAIN(Mountain.class);
+
+  public final Class<?> c;
+  ModelElement(Class<?> c) {
+    this.c=c;
+    System.out.println(c);
+  }
+  public Element instanciate(){
+    Object o=null;
+    try {
+      o = c.getDeclaredConstructor().newInstance();
+      o = c.cast(o);
+    } catch (InstantiationException e) {
+      throw new RuntimeException(e);
+    } catch (IllegalAccessException e) {
+      throw new RuntimeException(e);
+    } catch (InvocationTargetException e) {
+      throw new RuntimeException(e);
+    } catch (NoSuchMethodException e) {
+      throw new RuntimeException(e);
+    }
+    return (Element) o;
+  }
 }
diff --git a/src/main/java/model/Mountain.java b/src/main/java/model/Mountain.java
new file mode 100644
index 0000000000000000000000000000000000000000..c3baafaa6da9d9f1ae30c853edb82f071a4eccbe
--- /dev/null
+++ b/src/main/java/model/Mountain.java
@@ -0,0 +1,18 @@
+package model;
+
+import util.Position;
+
+import java.util.List;
+
+public class Mountain extends Element{
+
+    public Mountain() {
+            super(ModelElement.MOUNTAIN,
+                    new NoBehavior(ModelElement.MOUNTAIN));
+    }
+
+    @Override
+    public List<Position> Update(BoardData boardData, List<Position> modifPositions) {
+        return modifPositions;
+    }
+}
diff --git a/src/main/java/model/NoBehavior.java b/src/main/java/model/NoBehavior.java
new file mode 100644
index 0000000000000000000000000000000000000000..025014a74a8de024a1c01e9bead71fb264effed5
--- /dev/null
+++ b/src/main/java/model/NoBehavior.java
@@ -0,0 +1,19 @@
+package model;
+
+import util.Position;
+
+import java.util.List;
+
+public class NoBehavior extends FFBehavior {
+
+
+    public NoBehavior(ModelElement element) {
+        super(element);
+    }
+
+    @Override
+    public List<Position> getNext(BoardData boardData, List<Position> positions) {
+        return positions;
+    }
+
+}
diff --git a/src/main/java/model/RemoverBehavior.java b/src/main/java/model/RemoverBehavior.java
new file mode 100644
index 0000000000000000000000000000000000000000..bb5b87fd3ba270a185a49ed9b0fdbab9b78c9415
--- /dev/null
+++ b/src/main/java/model/RemoverBehavior.java
@@ -0,0 +1,10 @@
+package model;
+
+import util.Position;
+
+import java.util.List;
+
+public interface RemoverBehavior<E> extends Behavior {
+    public void remove(BoardData boardData,Position p);
+    public E getElementToRemove();
+}
diff --git a/src/main/java/model/StandardFirefighter.java b/src/main/java/model/StandardFirefighter.java
new file mode 100644
index 0000000000000000000000000000000000000000..f60f5abe8265f82b97bcd75ac18d37b1abd6ea6b
--- /dev/null
+++ b/src/main/java/model/StandardFirefighter.java
@@ -0,0 +1,53 @@
+package model;
+
+import util.Position;
+import util.TargetStrategy;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class StandardFirefighter extends Element {
+
+    private TargetStrategy targetStrategy=new TargetStrategy();
+
+    public StandardFirefighter() {
+            super(ModelElement.FIREFIGHTER,
+                    new FirefighterBehavior(ModelElement.FIREFIGHTER));
+    }
+
+    @Override
+    public List<Position> Update(BoardData boardData, List<Position> modifiedPositions) {
+        /*
+        List<Position> firefighterPositions = boardData.getPositions().get(ModelElement.FIREFIGHTER.ordinal());
+        List<Position> firePositions = boardData.getPositions().get(ModelElement.FIRE.ordinal());
+        modifiedList =behavior.getNext(boardData,modifiedList);
+        firePositions.removeAll(modifiedList);
+        firefighterPositions.removeAll(modifiedList);
+        firePositions.addAll(modifiedList);
+        return modifiedList;*/
+        List<Position> firefighterPositions = boardData.getPositions().get(type.ordinal());
+        List<Position> firePositions = boardData.getPositions().get(ModelElement.FIRE.ordinal());
+        List<Position> firefighterNewPositions = new ArrayList<>();
+        for (Position firefighterPosition : firefighterPositions) {
+            Position newFirefighterPosition =
+                    targetStrategy.neighborClosestToFire(firefighterPosition,
+                            firePositions, boardData.getNeighbors());
+            firefighterNewPositions.add(newFirefighterPosition);
+            remove(boardData,newFirefighterPosition);
+            modifiedPositions.add(firefighterPosition);
+            modifiedPositions.add(newFirefighterPosition);
+            List<Position> neighborFirePositions = boardData.getNeighbors().get(newFirefighterPosition).stream()
+                    .filter(firePositions::contains).toList();
+            for (Position firePosition : neighborFirePositions)
+                remove(boardData,firePosition);
+            modifiedPositions.addAll(neighborFirePositions);
+        }
+        firefighterPositions = firefighterNewPositions;
+        return modifiedPositions;
+    }
+
+    public void remove(BoardData boardData,Position p) {
+        List<Position> firePositions = boardData.getPositions().get(ModelElement.FIRE.ordinal());
+        firePositions.remove(p);
+    }
+}
diff --git a/src/main/java/model/TangibleBehavior.java b/src/main/java/model/TangibleBehavior.java
new file mode 100644
index 0000000000000000000000000000000000000000..7abcfbf0906602690c21eb42a045ed7ae8d0a5ea
--- /dev/null
+++ b/src/main/java/model/TangibleBehavior.java
@@ -0,0 +1,7 @@
+package model;
+
+import java.util.List;
+
+public interface TangibleBehavior<E> extends Behavior {
+    public List<E> getObstacles();
+}
diff --git a/src/main/java/model/Updater.java b/src/main/java/model/Updater.java
index dee86843764307564b37479f0811739417b9889a..4243f8b2adaebde2b98cfa9b333b62a1dc7613cd 100644
--- a/src/main/java/model/Updater.java
+++ b/src/main/java/model/Updater.java
@@ -1,4 +1,11 @@
 package model;
 
+import util.Position;
+
+import java.util.List;
+
 public interface Updater {
+
+    public List<Position> updateAll(BoardData boardData);
+
 }
diff --git a/src/main/java/util/TargetStrategy.java b/src/main/java/util/TargetStrategy.java
index 583186787d4d8d47173fbe61cc424f2f7ee384c9..7ebc6c160044ec29e49da58250b44b9eca47b8e1 100644
--- a/src/main/java/util/TargetStrategy.java
+++ b/src/main/java/util/TargetStrategy.java
@@ -1,4 +1,4 @@
-package model;
+package util;
 
 import util.Position;
 
@@ -12,7 +12,7 @@ public class TargetStrategy {
      * @param targets positions that are targeted.
      * @return the position next to the current position that is on the path to the closest target.
      */
-    Position neighborClosestToFire(Position position, Collection<Position> targets,
+    public Position neighborClosestToFire(Position position, Collection<Position> targets,
                                    Map<Position,List<Position>>neighbors) {
         Set<Position> seen = new HashSet<Position>();
         HashMap<Position, Position> firstMove = new HashMap<Position, Position>();
diff --git a/src/main/java/view/ViewElement.java b/src/main/java/view/ViewElement.java
index ffb76112e1af543df5af41fa906082ef11be9967..d379d8029f87dc1c9a409f24f5f49092b9c146c7 100644
--- a/src/main/java/view/ViewElement.java
+++ b/src/main/java/view/ViewElement.java
@@ -3,7 +3,7 @@ package view;
 import javafx.scene.paint.Color;
 
 public enum ViewElement {
-  FIREFIGHTER(Color.BLUE), FIRE(Color.RED), EMPTY(Color.WHITE);
+  FIREFIGHTER(Color.BLUE), FIRE(Color.RED),MOUNTAIN(Color.BROWN) , EMPTY(Color.WHITE);
   final Color color;
   ViewElement(Color color) {
     this.color = color;
diff --git a/src/test/java/model/FirefighterBoardTest.java b/src/test/java/model/FFBoardTest.java
similarity index 71%
rename from src/test/java/model/FirefighterBoardTest.java
rename to src/test/java/model/FFBoardTest.java
index 25cc8dbca8acea698879df68a5006a179f281ecc..ab86f9297ac43dc2c76b22dd81528acd13b47a4a 100644
--- a/src/test/java/model/FirefighterBoardTest.java
+++ b/src/test/java/model/FFBoardTest.java
@@ -7,20 +7,20 @@ import java.util.List;
 
 import static org.assertj.core.api.Assertions.*;
 
-public class FirefighterBoardTest {
+public class FFBoardTest {
   @Test
   void testColumnCount(){
-    Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3);
+    Board<List<ModelElement>> board = new FFBoard(20, 10, 1, 3);
     assertThat(board.columnCount()).isEqualTo(20);
   }
   @Test
   void testRowCount(){
-    Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3);
+    Board<List<ModelElement>> board = new FFBoard(20, 10, 1, 3);
     assertThat(board.rowCount()).isEqualTo(10);
   }
   @Test
   void testStepNumber(){
-    Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 1, 3);
+    Board<List<ModelElement>> board = new FFBoard(20, 10, 1, 3);
     for(int index = 0; index < 10; index++){
       assertThat(board.stepNumber()).isEqualTo(index);
       board.updateToNextGeneration();
@@ -29,7 +29,7 @@ public class FirefighterBoardTest {
   }
   @Test
   void testGetState_afterSet(){
-    Board<List<ModelElement>> board = new FirefighterBoard(20, 10, 0, 0);
+    Board<List<ModelElement>> board = new FFBoard(20, 10, 0, 0);
     Position position = new Position(1,2);
     assertThat(board.getState(position)).isEmpty();
     board.setState(List.of(ModelElement.FIRE), position);
diff --git a/src/test/java/view/FirefighterGridTest.java b/src/test/java/view/StandardFirefighterGridTest.java
similarity index 91%
rename from src/test/java/view/FirefighterGridTest.java
rename to src/test/java/view/StandardFirefighterGridTest.java
index 4b45ebdca3b936b42c2b322b1294488341d180bb..3f3011ecda6ec793597e587f10321414364875d4 100644
--- a/src/test/java/view/FirefighterGridTest.java
+++ b/src/test/java/view/StandardFirefighterGridTest.java
@@ -4,7 +4,7 @@ import org.junit.jupiter.api.Test;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
-public class FirefighterGridTest {
+public class StandardFirefighterGridTest {
   @Test
   void testColumnCount(){
     Grid<ViewElement> grid = new FirefighterGrid();