diff --git a/.gradle/8.10.2/executionHistory/executionHistory.bin b/.gradle/8.10.2/executionHistory/executionHistory.bin
index 801682b4acca704d855b5ba58364e10c6be1e3e1..cf5a960ec7f7900010aea5be45e24718226af6e2 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 5b176266587d46e29c3a775aa442174ff8dbf06e..f5e032ebd2785801b772397c831686017a8244f6 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 323467683484b9266ecd535509702c7760b5a32d..c148c1bc29cdedc846b72a678f760346fa875247 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 3794939f8c5f3032a051b517b07e7ac5264934e4..f1ae7c3e5b7a9eb9afc3412e20c7cf3dec627541 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 9e2be0dcef627ba82befe7bc04e30dba136e0c2e..14b6a2674e4806a02c0138c38bdae8b4aff3b145 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 57aad489612f304cc3c097a326b022c7f177c918..99d6f908f0717a5a58f2fdbb18137440bea75e64 100644
Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
diff --git a/build/classes/java/main/controller/Controller.class b/build/classes/java/main/controller/Controller.class
index 6a04f4e1dcb90af98351b81bb8c0a5fe71e3561a..5460b69e4ad124b6ba3858a79d483e32eb5cc8da 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/ElementFactory.class b/build/classes/java/main/model/ElementFactory.class
index a493c4db7d9a83f99b551d0393f2f3194a70d081..1b7fa6bcc30af5a9bcdb5ceb5a1fbb1348f69532 100644
Binary files a/build/classes/java/main/model/ElementFactory.class and b/build/classes/java/main/model/ElementFactory.class differ
diff --git a/build/classes/java/main/model/FFBoard.class b/build/classes/java/main/model/FFBoard.class
index 22b830c77540ec5a044acbe5cf4d54a89f63f322..0f2a7b7e07aa8a014a7734a4fdc2d26a98d31397 100644
Binary files a/build/classes/java/main/model/FFBoard.class and b/build/classes/java/main/model/FFBoard.class differ
diff --git a/build/classes/java/main/model/FFBoardData.class b/build/classes/java/main/model/FFBoardData.class
index 6c39baa2525b9a58c1bf337efbaeac761ef1fa41..91b496a7e3f5a2c2f110a80343fd16e16ddb31a9 100644
Binary files a/build/classes/java/main/model/FFBoardData.class and b/build/classes/java/main/model/FFBoardData.class differ
diff --git a/build/classes/java/main/model/Fire.class b/build/classes/java/main/model/Fire.class
index 6ecd16e4eb9b69b1c8dcf9bd55039fc157999244..adc931bcb0f5300d061e968519e0c2d97c2a4676 100644
Binary files a/build/classes/java/main/model/Fire.class and b/build/classes/java/main/model/Fire.class differ
diff --git a/build/classes/java/main/model/FireBehavior.class b/build/classes/java/main/model/FireBehavior.class
index f3a5f1a37d1e68fd8ff89363887ea0ffb6d09a16..86c2daaaf647a93a3f70c5472da3ed461ca3810b 100644
Binary files a/build/classes/java/main/model/FireBehavior.class and b/build/classes/java/main/model/FireBehavior.class differ
diff --git a/build/classes/java/main/model/FirefighterBehavior.class b/build/classes/java/main/model/FirefighterBehavior.class
index 3685400111fbb247a6d748f2fc008267a4152b38..da533f51f0f2dbfa4e9c02edd044965785859d50 100644
Binary files a/build/classes/java/main/model/FirefighterBehavior.class and b/build/classes/java/main/model/FirefighterBehavior.class differ
diff --git a/build/classes/java/main/model/ModelElement.class b/build/classes/java/main/model/ModelElement.class
index 06587494c5d0b8af205116e1fec56f1c2b843c60..a306f9d979932c1032706a9334129652b0f3ed08 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/classes/java/main/model/Road.class b/build/classes/java/main/model/Road.class
index 6199f31f761d0a4a447737e97acb77abd849fa79..b3e319e61364f96bb95080e8f4872bc17e437326 100644
Binary files a/build/classes/java/main/model/Road.class and b/build/classes/java/main/model/Road.class differ
diff --git a/build/classes/java/main/model/Rock.class b/build/classes/java/main/model/Rock.class
new file mode 100644
index 0000000000000000000000000000000000000000..f23f7b6899e00054ebbb59d74749921fd2fc11fa
Binary files /dev/null and b/build/classes/java/main/model/Rock.class differ
diff --git a/build/classes/java/main/model/SlowFire.class b/build/classes/java/main/model/SlowFire.class
new file mode 100644
index 0000000000000000000000000000000000000000..c463e9921eec27a20924cec99609498cd217f76f
Binary files /dev/null and b/build/classes/java/main/model/SlowFire.class differ
diff --git a/build/classes/java/main/view/ViewElement.class b/build/classes/java/main/view/ViewElement.class
index 9605485d704f388ad67b2eb579987455a1b79d60..4fb4b9ad28e188f1cc2416bd319836c60f879e8c 100644
Binary files a/build/classes/java/main/view/ViewElement.class and b/build/classes/java/main/view/ViewElement.class differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Behavior.class.uniqueId21 b/build/tmp/compileJava/compileTransaction/stash-dir/Behavior.class.uniqueId21
deleted file mode 100644
index 7b66ceda77beed63d4117f3a5a0e60d01e373d50..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/Behavior.class.uniqueId21 and /dev/null differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/BoardData.class.uniqueId24 b/build/tmp/compileJava/compileTransaction/stash-dir/BoardData.class.uniqueId24
deleted file mode 100644
index 1473192238ebff191ff33a083801c7c099c24bc6..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/BoardData.class.uniqueId24 and /dev/null differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Cloud.class.uniqueId22 b/build/tmp/compileJava/compileTransaction/stash-dir/Cloud.class.uniqueId22
deleted file mode 100644
index a31acca2d1c953a93b797c67b9600eb48fd22172..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/Cloud.class.uniqueId22 and /dev/null differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/CloudBehavior.class.uniqueId23 b/build/tmp/compileJava/compileTransaction/stash-dir/CloudBehavior.class.uniqueId23
deleted file mode 100644
index 344f982210adb7b2522955c44e6e86888dd98f2b..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/CloudBehavior.class.uniqueId23 and /dev/null differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Controller.class.uniqueId3 b/build/tmp/compileJava/compileTransaction/stash-dir/Controller.class.uniqueId3
deleted file mode 100644
index 6a04f4e1dcb90af98351b81bb8c0a5fe71e3561a..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/Controller.class.uniqueId3 and /dev/null differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Element.class.uniqueId16 b/build/tmp/compileJava/compileTransaction/stash-dir/Element.class.uniqueId16
deleted file mode 100644
index 86796ebda7b006c90771da8c76c0f4b5e8ec76c5..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/Element.class.uniqueId16 and /dev/null differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/ElementManager.class.uniqueId8 b/build/tmp/compileJava/compileTransaction/stash-dir/ElementManager.class.uniqueId8
deleted file mode 100644
index abc64510c990809c4aad859777a4a59aca4086cf..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/ElementManager.class.uniqueId8 and /dev/null differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/FFBehavior.class.uniqueId12 b/build/tmp/compileJava/compileTransaction/stash-dir/FFBehavior.class.uniqueId12
deleted file mode 100644
index 291fe9094bbfeaa70d5df89ff86cc3f4924868ba..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/FFBehavior.class.uniqueId12 and /dev/null differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/FFBoard.class.uniqueId1 b/build/tmp/compileJava/compileTransaction/stash-dir/FFBoard.class.uniqueId1
deleted file mode 100644
index f011c6673ea53fccef1b1a27bce0d0de70133da5..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/FFBoard.class.uniqueId1 and /dev/null differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/FFBoardData.class.uniqueId13 b/build/tmp/compileJava/compileTransaction/stash-dir/FFBoardData.class.uniqueId13
deleted file mode 100644
index 6c39baa2525b9a58c1bf337efbaeac761ef1fa41..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/FFBoardData.class.uniqueId13 and /dev/null differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/FFUpdater.class.uniqueId4 b/build/tmp/compileJava/compileTransaction/stash-dir/FFUpdater.class.uniqueId4
deleted file mode 100644
index f18682c2c9367d3033da83621242d3dead5202c6..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/FFUpdater.class.uniqueId4 and /dev/null differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Fire.class.uniqueId5 b/build/tmp/compileJava/compileTransaction/stash-dir/Fire.class.uniqueId5
deleted file mode 100644
index 6ecd16e4eb9b69b1c8dcf9bd55039fc157999244..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/Fire.class.uniqueId5 and /dev/null differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/FireBehavior.class.uniqueId19 b/build/tmp/compileJava/compileTransaction/stash-dir/FireBehavior.class.uniqueId19
deleted file mode 100644
index fbda223f83d841a0d2e5d0ec3a306e46366258c2..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/FireBehavior.class.uniqueId19 and /dev/null differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/FireFighter.class.uniqueId26 b/build/tmp/compileJava/compileTransaction/stash-dir/FireFighter.class.uniqueId26
deleted file mode 100644
index 46f71e21c725c1bfb76086ef444cdc525879437e..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/FireFighter.class.uniqueId26 and /dev/null differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/FireFighterBehavior.class.uniqueId11 b/build/tmp/compileJava/compileTransaction/stash-dir/FireFighterBehavior.class.uniqueId11
deleted file mode 100644
index 3685400111fbb247a6d748f2fc008267a4152b38..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/FireFighterBehavior.class.uniqueId11 and /dev/null differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/FirefighterGrid.class.uniqueId15 b/build/tmp/compileJava/compileTransaction/stash-dir/FirefighterGrid.class.uniqueId15
deleted file mode 100644
index 05ec18aeff68513e99aa82d1e6ae68a3edf3cccd..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/FirefighterGrid.class.uniqueId15 and /dev/null differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/ModelElement.class.uniqueId9 b/build/tmp/compileJava/compileTransaction/stash-dir/ModelElement.class.uniqueId9
deleted file mode 100644
index 23b874024299c05963109c14f605b1de8021616d..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/ModelElement.class.uniqueId9 and /dev/null differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/MotorizedFireFighter.class.uniqueId10 b/build/tmp/compileJava/compileTransaction/stash-dir/MotorizedFireFighter.class.uniqueId10
deleted file mode 100644
index 8f8c31c07c776f0bb418023db3a336f14f691707..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/MotorizedFireFighter.class.uniqueId10 and /dev/null differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Mountain.class.uniqueId17 b/build/tmp/compileJava/compileTransaction/stash-dir/Mountain.class.uniqueId17
deleted file mode 100644
index 8fe05667e5c8fafa6d3f2372371cb9667027db77..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/Mountain.class.uniqueId17 and /dev/null differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/RemoverBehavior.class.uniqueId2 b/build/tmp/compileJava/compileTransaction/stash-dir/RemoverBehavior.class.uniqueId2
deleted file mode 100644
index 04db6553438809493d5f56a17c14984108ebf74f..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/RemoverBehavior.class.uniqueId2 and /dev/null differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/SimulatorApplication.class.uniqueId20 b/build/tmp/compileJava/compileTransaction/stash-dir/SimulatorApplication.class.uniqueId20
deleted file mode 100644
index 6d88dc9a0edace933e7b9ca5f67bbdaddba48037..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/SimulatorApplication.class.uniqueId20 and /dev/null differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/StandardFire.class.uniqueId27 b/build/tmp/compileJava/compileTransaction/stash-dir/StandardFire.class.uniqueId27
deleted file mode 100644
index 6d04a90edcec07b7d1375dffb8a54bc7a4ae1aa9..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/StandardFire.class.uniqueId27 and /dev/null differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/StandardFireFighter.class.uniqueId18 b/build/tmp/compileJava/compileTransaction/stash-dir/StandardFireFighter.class.uniqueId18
deleted file mode 100644
index fc5b93fe24ca479ac79d43a6c4b73789cb475381..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/StandardFireFighter.class.uniqueId18 and /dev/null differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/TangibleBehavior.class.uniqueId6 b/build/tmp/compileJava/compileTransaction/stash-dir/TangibleBehavior.class.uniqueId6
deleted file mode 100644
index 7a4f2f1c104b6561239e3e8f93096cfebb71097b..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/TangibleBehavior.class.uniqueId6 and /dev/null differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Updatable.class.uniqueId7 b/build/tmp/compileJava/compileTransaction/stash-dir/Updatable.class.uniqueId7
deleted file mode 100644
index ca0085ffcc16197c036e8b623d6aa133f687c3a6..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/Updatable.class.uniqueId7 and /dev/null differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Updater.class.uniqueId0 b/build/tmp/compileJava/compileTransaction/stash-dir/Updater.class.uniqueId0
deleted file mode 100644
index 5094364d480368e64c5c482badb41c0fe948d624..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/Updater.class.uniqueId0 and /dev/null differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/ViewElement.class.uniqueId25 b/build/tmp/compileJava/compileTransaction/stash-dir/ViewElement.class.uniqueId25
deleted file mode 100644
index 552725fc4d9e4c1db6cd5180f0a7c77471b79777..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/ViewElement.class.uniqueId25 and /dev/null differ
diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/module-info.class.uniqueId14 b/build/tmp/compileJava/compileTransaction/stash-dir/module-info.class.uniqueId14
deleted file mode 100644
index f0b28b3b4966d6d1c1eac55f53fff160e8e01b67..0000000000000000000000000000000000000000
Binary files a/build/tmp/compileJava/compileTransaction/stash-dir/module-info.class.uniqueId14 and /dev/null differ
diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin
index 5e158cc7c168f519415f9982e559dccee63b42ed..858a4f8e11dd2f5778dcd1d3339b95b6e58ad5f2 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/controller/Controller.java b/src/main/java/controller/Controller.java
index ed7b402790efacbd667f72231d2da851095f4621..5aa4624c3fa57190544753c551538faca4affa00 100644
--- a/src/main/java/controller/Controller.java
+++ b/src/main/java/controller/Controller.java
@@ -101,8 +101,11 @@ public class Controller {
 
   private ViewElement getViewElement(List<ModelElement> squareState) {
     for (ModelElement element:ModelElement.values()) {
+      if (element.isPrintable())
         if (squareState.contains(element)){
-        return ViewElement.values()[element.ordinal()];
+          for(ViewElement viewElement: ViewElement.values())
+            if (element.isInstanceOf(viewElement.c))
+              return viewElement;
       }
     }
     return ViewElement.EMPTY;
diff --git a/src/main/java/model/Cloud.java b/src/main/java/model/Cloud.java
index 32bbe25a00111192fe4122eeb345fd0599e81edf..cbc141be22a3a3c0df53a946243dd91f6c843518 100644
--- a/src/main/java/model/Cloud.java
+++ b/src/main/java/model/Cloud.java
@@ -5,7 +5,7 @@ import util.Position;
 import java.util.ArrayList;
 import java.util.List;
 
-public class Cloud implements Element,Updatable{
+public class Cloud implements Element,Updatable,Printable{
         ModelElement type;
         Position position;
 static Behavior behavior=new CloudBehavior();
diff --git a/src/main/java/model/CloudBehavior.java b/src/main/java/model/CloudBehavior.java
index ea392b040603e844581094ac31d7bdf55478bedf..d95bff7b30dfcf0ad5b928837dc27601ab2fdb46 100644
--- a/src/main/java/model/CloudBehavior.java
+++ b/src/main/java/model/CloudBehavior.java
@@ -19,7 +19,7 @@ public class CloudBehavior extends FFBehavior implements RemoverBehavior<ModelEl
         extinguish(boardData,position);
         return List.of(position);
     }
-    private void extinguish(BoardData boardData,Position position){
+    public void extinguish(BoardData boardData,Position position){
         List<Position> l=new ArrayList<>(legalNeighbors(boardData,position));
         l.add(position);
         for (Position p:l) {
diff --git a/src/main/java/model/ElementFactory.java b/src/main/java/model/ElementFactory.java
index d8b78aaa60f787b4397f82f6dd17e440e47b8487..0447cc41ce5c14f11773df2f205d22027a757d92 100644
--- a/src/main/java/model/ElementFactory.java
+++ b/src/main/java/model/ElementFactory.java
@@ -5,9 +5,7 @@ import util.Position;
 public class ElementFactory {
     //this is using the factoryMethod design pattern (I'm writing this it just in case )
     public static Element createElement(BoardData boardData,ModelElement modelElement, Position position){
-        Element e=modelElement.instanciate(position);
-        boardData.addElement(e);
-        return e;
+        return modelElement.instanciate(position);
     }
 
 }
diff --git a/src/main/java/model/FFBoard.java b/src/main/java/model/FFBoard.java
index c6c971fe6f47f2719470d3540e869c7c54c64724..bf5baf0217f8b05d18f7a291e964952eb86d1c8a 100644
--- a/src/main/java/model/FFBoard.java
+++ b/src/main/java/model/FFBoard.java
@@ -31,14 +31,14 @@ public class FFBoard implements Board<List<ModelElement>> {
     FFUpdater= new FFUpdater();
     for (int index = 0; index < initialFireCount; index++)
       boardData.addElement(new StandardFire(randomPosition()));
-     for (int index = 0; index < initialFirefighterCount; index++)
+     /*for (int index = 0; index < initialFirefighterCount; index++)
        boardData.addElement(new StandardFireFighter(randomPosition()));
     for (int index = 0; index < 2; index++)
       boardData.addElement(new MotorizedFireFighter(randomPosition()));
     for (int index = 0; index < 10; index++)
-      boardData.addElement(new Cloud(randomPosition()));
-    for (int index = 0; index < 50; index++)
-      boardData.addElement(new Road(randomPosition()));
+      boardData.addElement(new Cloud(randomPosition()));*/
+    for (int index = 0; index < 1000; index++)
+      boardData.addElement(new Rock(randomPosition()));
 
   }
 
@@ -66,7 +66,6 @@ public class FFBoard implements Board<List<ModelElement>> {
   }
 
   public List<Position> updateToNextGeneration() {
-
     List<Position> modifiedPositions = FFUpdater.updateAll(boardData);
     boardData.setStep(boardData.getStep()+1);
     return modifiedPositions;
diff --git a/src/main/java/model/FFBoardData.java b/src/main/java/model/FFBoardData.java
index 1f88593815355d23e72482ecd4de425871ef7dbf..6b21770128f75b952b0303d8464c18df2397857c 100644
--- a/src/main/java/model/FFBoardData.java
+++ b/src/main/java/model/FFBoardData.java
@@ -48,7 +48,18 @@ public class FFBoardData implements BoardData{
     public List<List<Element>> getElements() {
         return elementList;
     }
+    public Cell<Element> getCell(Position position){
+        return cells.get(position.column()).get(position.row());
+    }
+    @Override
+    public int getStep() {
+        return step;
+    }
 
+    @Override
+    public void setStep(int step) {
+        this.step=step;
+    }
     public Map<Position, List<Position>> getNeighbors() {
         return neighbors;
     }
@@ -68,16 +79,5 @@ public class FFBoardData implements BoardData{
         elementList.get(element.getType().ordinal()).remove(element);
         getCell(element.getPosition()).Content.remove(element);
     }
-    public Cell<Element> getCell(Position position){
-        return cells.get(position.column()).get(position.row());
-    }
-    @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
index 39e8c2d265f031eefdbfe6fc836c85e4e21279e4..26f5d4cd426950ea704ac44920dc59ed389a11cd 100644
--- a/src/main/java/model/FFUpdater.java
+++ b/src/main/java/model/FFUpdater.java
@@ -18,8 +18,8 @@ public class FFUpdater implements Updater {
         updatables.clear();
         modifiedPositions=new ArrayList<Position>();
         for (ModelElement modelElement: ModelElement.values()) {
-        System.out.println(modelElement+" "+modelElement.isUpdatabale());
-        if (modelElement.isUpdatabale())
+        System.out.println(modelElement+" "+modelElement.isUpdatable());
+        if (modelElement.isUpdatable())
             for (Element e:boardData.getElements().get(modelElement.ordinal())) {
                 updatables.add((Updatable) e);
             }
diff --git a/src/main/java/model/Fire.java b/src/main/java/model/Fire.java
index 56d5a02b821709ad3c6c11e277e7ad148d215290..9e9cf5d78d876be75943a741830196fbd5ba01dd 100644
--- a/src/main/java/model/Fire.java
+++ b/src/main/java/model/Fire.java
@@ -7,18 +7,21 @@ import java.util.List;
 import java.util.Map;
 import java.util.stream.Stream;
 
-public abstract class Fire implements Element,Updatable{
+public abstract class Fire implements Element,Updatable,Printable{
+    int counter;
     int delay;
     ModelElement type;
     Position position;
     static Behavior behavior=new FireBehavior();
-    Map<ModelElement,ModelElement> fireDictionary=new HashMap<>();
+    static Map<ModelElement,ModelElement> fireDictionary=new HashMap<>();
      //.put(MAISON,FEUMAISON)
 
     public Fire(int delay, ModelElement type, Position position) {
+        this.counter=0;
         this.delay = delay;
         this.type = type;
         this.position = position;
+        fireDictionary.put(ModelElement.ROCK,ModelElement.SLOWFIRE);
         fireDictionary.put(ModelElement.MOUNTAIN,null);
     }
     @Override
@@ -29,15 +32,17 @@ public abstract class Fire implements Element,Updatable{
     public ModelElement getType() {
         return type;
     }
-    private Fire getNewFireByType(BoardData boardData,Position position){
+    public static Fire getNewFireByType(BoardData boardData, Position position){
         List<ModelElement> s = boardData.getCell(position).Content.stream().map(x -> x.getType()).toList();
         for(Map.Entry<ModelElement,ModelElement> entry: fireDictionary.entrySet()){
+            System.out.println(entry.toString()+" "+s.contains(entry.getKey())+" "+entry.getValue());
             if (s.contains(entry.getKey())) return (Fire) entry.getValue().instanciate(position);
         }
         return new StandardFire(position);
     }
     @Override
     public List<Position> updateSelf(BoardData boardData) {
+        counter++;
         List<Position> positions=behavior.update(boardData,this);
         for (Position p:positions) {
             boardData.addElement(getNewFireByType(boardData,p));
diff --git a/src/main/java/model/FireBehavior.java b/src/main/java/model/FireBehavior.java
index db0d8bc322a88716ddac7090d2b5387d6f5f5bda..a321873b1098480bb3aec961c4a7abb3b2a5b8be 100644
--- a/src/main/java/model/FireBehavior.java
+++ b/src/main/java/model/FireBehavior.java
@@ -7,13 +7,13 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-public class FireBehavior extends FFBehavior /*implements TangibleBehavior<ModelElement>*/ {
+public class FireBehavior extends FFBehavior  implements TangibleBehavior<ModelElement> {
     private List<ModelElement> obstacles=List.of(ModelElement.MOUNTAIN,ModelElement.ROAD);
 
     @Override
     public List<Position> update(BoardData boardData,Element element) {
         List<Position> positions=new ArrayList<>();
-        if (boardData.getStep()%((Fire)element).delay==0){
+        if (((Fire)element).counter%((Fire)element).delay==0){
             positions=legalNeighbors(boardData,element.getPosition());
         }
         return positions;
@@ -24,7 +24,7 @@ public class FireBehavior extends FFBehavior /*implements TangibleBehavior<Model
             for (Position p:boardData.getNeighbor(position)) {
                 for (Element e:boardData.getCell(p).Content) {
                     if (e instanceof Fire) neighbors.remove(p);
-                    for(ModelElement o:obstacles)
+                    for(ModelElement o:getObstacles())
                         if (e.getType()==o) neighbors.remove(p);
                 }
             }
@@ -39,6 +39,11 @@ public class FireBehavior extends FFBehavior /*implements TangibleBehavior<Model
             }
             return neighbors;
     }
+
+    @Override
+    public List<ModelElement> getObstacles() {
+        return obstacles;
+    }
     /*@Override
     public List<Position> getNext(BoardData boardData) {
         List<Position> firePositions = boardData.getPositions().get(element.ordinal());
diff --git a/src/main/java/model/FireFighter.java b/src/main/java/model/FireFighter.java
index d4928111d28559d6dbf07e2b94fd53701e3c7fdf..dbebf1bfba19a73422e634a4f56e56ee13fecd35 100644
--- a/src/main/java/model/FireFighter.java
+++ b/src/main/java/model/FireFighter.java
@@ -5,7 +5,7 @@ import util.Position;
 import java.util.ArrayList;
 import java.util.List;
 
-public abstract class FireFighter implements Element,Updatable{
+public abstract class FireFighter implements Element,Updatable,Printable{
         int speed;
         ModelElement type;
         Position position;
@@ -24,7 +24,8 @@ public Position getPosition() {
 public ModelElement getType() {
         return type;
         }
-@Override
+
+        @Override
 public List<Position> updateSelf(BoardData boardData) {
         List<Position> positions=behavior.update(boardData,this);
         List<Position> modifPositions=new ArrayList<>(positions);
diff --git a/src/main/java/model/FireFighterBehavior.java b/src/main/java/model/FireFighterBehavior.java
index 49344199b4fb242fed69f1c33e8522d51275a3af..d6b517acc4983dcd670246cca0f13b59f8c017dc 100644
--- a/src/main/java/model/FireFighterBehavior.java
+++ b/src/main/java/model/FireFighterBehavior.java
@@ -4,14 +4,14 @@ import util.Position;
 import util.TargetStrategy;
 import java.util.*;
 
-public class FireFighterBehavior extends FFBehavior implements TangibleBehavior<ModelElement> {
+public class FireFighterBehavior extends FFBehavior implements TangibleBehavior<ModelElement>,RemoverBehavior<ModelElement> {
     private List<ModelElement> obstacles=List.of(ModelElement.MOUNTAIN);
     private TargetStrategy ts=new TargetStrategy();
 
     List<Position> initializeTargets(BoardData boardData){
         List<Position> targets=new ArrayList<>();
         for (ModelElement me:ModelElement.values()) {
-            if (me.isFire()){
+            if (me.isInstanceOf(Fire.class)){
                 System.out.println("0");
                 for (Element e:boardData.getElements().get(me.ordinal())) {
                     targets.add(e.getPosition());
diff --git a/src/main/java/model/Land.java b/src/main/java/model/Land.java
new file mode 100644
index 0000000000000000000000000000000000000000..07fb949a101c756a24b5064df125baa27b4bd799
--- /dev/null
+++ b/src/main/java/model/Land.java
@@ -0,0 +1,23 @@
+package model;
+
+import util.Position;
+
+public abstract class Land implements Element ,Printable{
+    Position position;
+    ModelElement type;
+
+    public Land(Position position) {
+        this.position = position;
+    }
+
+    @Override
+    public Position getPosition() {
+        return position;
+    }
+
+    @Override
+    public ModelElement getType() {
+        return type;
+    }
+
+}
diff --git a/src/main/java/model/ModelElement.java b/src/main/java/model/ModelElement.java
index ee7fdfcb81fe454bed272cb5831799f195c8f28a..fc2275576036f402903c258d509d6f9cfcd7a465 100644
--- a/src/main/java/model/ModelElement.java
+++ b/src/main/java/model/ModelElement.java
@@ -12,9 +12,11 @@ public enum ModelElement {
   FIREFIGHTER(StandardFireFighter.class),
   MOTORIZEDFIREFIGHTER(MotorizedFireFighter.class),
   FIRE(StandardFire.class),
+  SLOWFIRE(SlowFire.class),
   CLOUD(Cloud.class),
   MOUNTAIN(Mountain.class),
-  ROAD(Road.class);
+  ROAD(Road.class),
+  ROCK(Rock.class);
 
 
   public final Class<?> c;
@@ -22,9 +24,13 @@ public enum ModelElement {
     this.c =c;
     System.out.println(c);
   }
-  public boolean isUpdatabale(){
-    List<Class<?>> Interfaces= Arrays.asList(c.getInterfaces());
-    return Interfaces.contains(Updatable.class);
+  public boolean isUpdatable(){
+    Class<?> currentClass=c;
+    while(!currentClass.equals(Object.class)){
+      if (Arrays.asList(currentClass.getInterfaces()).contains(Updatable.class)) return true;
+      currentClass=currentClass.getSuperclass();
+    }
+    return false;
   }
   public boolean isPrintable(){
     Class<?> currentClass=c;
@@ -34,11 +40,10 @@ public enum ModelElement {
     }
     return false;
   }
-  public boolean isFire(){
+  public boolean isInstanceOf(Class<?> classe){
     Class<?> currentClass=c;
     while(!currentClass.equals(Object.class)){
-      System.out.println(currentClass+" "+currentClass.equals(Fire.class));
-      if (currentClass.equals(Fire.class)) return true;
+      if (currentClass.equals(classe)) return true;
       currentClass=currentClass.getSuperclass();
     }
     return false;
diff --git a/src/main/java/model/Mountain.java b/src/main/java/model/Mountain.java
index 0ca1db409dafed5e3c5100ff9622027119214c5b..1c66058c70be1579478b506c33f267ad0b858c51 100644
--- a/src/main/java/model/Mountain.java
+++ b/src/main/java/model/Mountain.java
@@ -5,22 +5,9 @@ import util.Position;
 
 import java.util.List;
 
-public class Mountain implements Element {
-    Position position;
-    ModelElement type;
-
+public class Mountain extends Land implements Element {
     public Mountain(Position position) {
-        this.position = position;
+        super(position);
         type=ModelElement.MOUNTAIN;
     }
-
-    @Override
-    public Position getPosition() {
-        return position;
-    }
-
-    @Override
-    public ModelElement getType() {
-        return type;
-    }
 }
diff --git a/src/main/java/model/RemoverBehavior.java b/src/main/java/model/RemoverBehavior.java
index f0a36495113f82e57e5b2d23ff377d2022709f40..07190d26c14befed97a5d2ad6c36539a96ced31e 100644
--- a/src/main/java/model/RemoverBehavior.java
+++ b/src/main/java/model/RemoverBehavior.java
@@ -5,5 +5,6 @@ import util.Position;
 import java.util.List;
 
 public interface RemoverBehavior<E> extends Behavior {
+    public void extinguish(BoardData boardData,Position position);
 
 }
diff --git a/src/main/java/model/Road.java b/src/main/java/model/Road.java
index 436eb5db98ebcfa75657c9cd727dba929178356d..29e63bdbe77da7d78fe6683826522f9dca678b67 100644
--- a/src/main/java/model/Road.java
+++ b/src/main/java/model/Road.java
@@ -2,22 +2,9 @@ package model;
 
 import util.Position;
 
-public class Road implements Element {
-    Position position;
-    ModelElement type;
-
+public class Road extends Land implements Element {
     public Road(Position position) {
-        this.position = position;
+        super(position);
         type=ModelElement.ROAD;
     }
-
-    @Override
-    public Position getPosition() {
-        return position;
-    }
-
-    @Override
-    public ModelElement getType() {
-        return type;
-    }
 }
diff --git a/src/main/java/model/Rock.java b/src/main/java/model/Rock.java
new file mode 100644
index 0000000000000000000000000000000000000000..8c8f4fdeb56c51a3553b54647743c6c3b66df629
--- /dev/null
+++ b/src/main/java/model/Rock.java
@@ -0,0 +1,10 @@
+package model;
+
+import util.Position;
+
+public class Rock extends Land implements Element {
+    public Rock(Position position) {
+        super(position);
+        type=ModelElement.ROCK;
+    }
+}
diff --git a/src/main/java/model/SlowFire.java b/src/main/java/model/SlowFire.java
new file mode 100644
index 0000000000000000000000000000000000000000..2160b2c26ec5fa219e32c6a65cf9d32b8bef8a57
--- /dev/null
+++ b/src/main/java/model/SlowFire.java
@@ -0,0 +1,9 @@
+package model;
+
+import util.Position;
+
+public class SlowFire extends Fire implements Updatable{
+    public SlowFire(Position position) {
+        super(4, ModelElement.SLOWFIRE, position);
+    }
+}
diff --git a/src/main/java/model/StandardFire.java b/src/main/java/model/StandardFire.java
index 73e9c4cefd310919d1196add96ded78056c08a0c..61a5d159b38dac15ba93bdaddb2856ae85d20286 100644
--- a/src/main/java/model/StandardFire.java
+++ b/src/main/java/model/StandardFire.java
@@ -2,7 +2,7 @@ package model;
 
 import util.Position;
 
-public class StandardFire extends Fire implements Updatable{
+public class StandardFire extends Fire{
     public StandardFire(Position position) {
         super(2, ModelElement.FIRE, position);
     }
diff --git a/src/main/java/model/StandardFireFighter.java b/src/main/java/model/StandardFireFighter.java
index f30186259965ab2d17f1a392f0b3127286d9a44c..bd573e354d53a64393d4cac1e52a97a552d266eb 100644
--- a/src/main/java/model/StandardFireFighter.java
+++ b/src/main/java/model/StandardFireFighter.java
@@ -2,7 +2,7 @@ package model;
 
 import util.Position;
 
-public class StandardFireFighter extends FireFighter implements Updatable{
+public class StandardFireFighter extends FireFighter{
     public StandardFireFighter(Position position) {
         super(1, ModelElement.FIREFIGHTER, position);
     }
diff --git a/src/main/java/model/TangibleBehavior.java b/src/main/java/model/TangibleBehavior.java
index ae61eac7760a3e2e759bb97efea10c8a81013fe2..9ca6669215ee1edabd510b27591e8ac4ec02b94e 100644
--- a/src/main/java/model/TangibleBehavior.java
+++ b/src/main/java/model/TangibleBehavior.java
@@ -6,5 +6,4 @@ import java.util.List;
 
 public interface TangibleBehavior<E> extends Behavior {
     public List<E> getObstacles();
-    public void extinguish(BoardData boardData,Position position);
 }
diff --git a/src/main/java/view/ViewElement.java b/src/main/java/view/ViewElement.java
index 82ab204e0ce52ca949a69ced435a9ef542ca7449..a070081c774f71adb7e63157061cdd6f6ee06cc2 100644
--- a/src/main/java/view/ViewElement.java
+++ b/src/main/java/view/ViewElement.java
@@ -1,11 +1,14 @@
 package view;
 
 import javafx.scene.paint.Color;
+import model.*;
 
 public enum ViewElement {
-  FIREFIGHTER(Color.BLUE), MOTORIZEDFIREFIGHTER(Color.DARKBLUE), FIRE(Color.RED),CLOUD(Color.GRAY)  ,MOUNTAIN(Color.BROWN),ROAD(Color.BLACK), EMPTY(Color.WHITE);
+  FIREFIGHTER(Color.BLUE, StandardFireFighter.class), MOTORIZEDFIREFIGHTER(Color.DARKBLUE, MotorizedFireFighter.class), FIRE(Color.RED,Fire.class),CLOUD(Color.GRAY, Cloud.class)  ,MOUNTAIN(Color.BROWN, Mountain.class),ROAD(Color.BLACK, Road.class),ROCK(Color.LIGHTYELLOW, Rock.class), EMPTY(Color.WHITE, null);
   final Color color;
-  ViewElement(Color color) {
+  public final Class<?> c;
+  ViewElement(Color color, Class<?> c) {
     this.color = color;
+    this.c = c;
   }
 }