diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java
index 577a4d1b61b6549cc40de56754b20fc09414e35a..f1fa00410c6cc4c8f5bf0238482d5eb46bd5305d 100644
--- a/src/main/java/controller/Controller.java
+++ b/src/main/java/controller/Controller.java
@@ -100,6 +100,9 @@ public class Controller {
     if (squareState.contains(ModelElement.ROCAILLE)) {
       return ViewElement.ROCAILLE;
     }
+    if (squareState.contains(ModelElement.MOTORIZEDFIREFIGHTER)) {
+      return ViewElement.MOTORIZEDFIREFIGHTER;
+    }
     return ViewElement.EMPTY;
   }
 
diff --git a/src/main/java/model/Extinguisher.java b/src/main/java/model/Extinguisher.java
index 4983ad2f2c6f745850b6c2417e242bff742008a0..1d7a630111bee98cdede76a988be83b1c13686ea 100644
--- a/src/main/java/model/Extinguisher.java
+++ b/src/main/java/model/Extinguisher.java
@@ -2,10 +2,12 @@ package model;
 
 import util.Neighbour;
 import util.Position;
+import util.TargetStrategy;
 
 import java.util.List;
 
 public abstract class Extinguisher implements Element{
+    protected final TargetStrategy targetStrategy = new TargetStrategy();
     protected Neighbour neighbour;
 
     protected Position position;
diff --git a/src/main/java/model/Fire.java b/src/main/java/model/Fire.java
index 994ed1e4557535fd75ea8a5697cd8152dafde74a..798f4c498a75714aa59f33039724e82b7188bc33 100644
--- a/src/main/java/model/Fire.java
+++ b/src/main/java/model/Fire.java
@@ -40,13 +40,11 @@ public class Fire implements Element {
         List<Position> modifiedPositions = new ArrayList<>();
         if (firefighterBoard.stepNumber() % 2 == 0) {
             Set<Position> newFirePositions = new HashSet<>();
-            for (Position fire : new HashSet<>(firefighterBoard.getFires().keySet())) {
-                List<Position> neighboursAvailable = this.neighbour.getNeighbors().get(fire);
-                neighboursAvailable.removeAll(firefighterBoard.getObstacles().keySet());
-
 
-                newFirePositions.addAll(this.neighbour.getNeighbors().get(fire));
+            for (Position fire : new HashSet<>(firefighterBoard.getFires().keySet())) {
+                newFirePositions.addAll(removeMountainAndRoads(firefighterBoard,fire));
             }
+
             for (Position position : newFirePositions) {
                 if (!firefighterBoard.getFires().containsKey(position)) {
                     firefighterBoard.getFires().put(position, new Fire(position));
@@ -62,6 +60,30 @@ public class Fire implements Element {
     }
 
 
+    public List<Position>removeMountainAndRoads(Board<List<ModelElement>> firefighterBoard,Position position){
+        List<Position>neighboursAvailable;
+
+        neighboursAvailable = this.neighbour.getNeighbors().get(position);
+        if(firefighterBoard.stepNumber()%4==0){
+            List<Position>MountainAndRoadsPositions = new ArrayList<>();
+            for(Obstacle obstacle : firefighterBoard.getObstacles().values()){
+                if(obstacle instanceof Road || obstacle instanceof Montain){
+                    MountainAndRoadsPositions.add(obstacle.getPosition());
+                    neighboursAvailable.removeAll(MountainAndRoadsPositions);
+                }
+            }
+        }
+        else{
+
+            neighboursAvailable.removeAll(firefighterBoard.getObstacles().keySet());
+        }
+
+
+        return neighboursAvailable;
+    }
+
+
+
 
 
 }
\ No newline at end of file
diff --git a/src/main/java/model/FireFighter.java b/src/main/java/model/FireFighter.java
index b656cf75278d2f5d4067097cad54900cfda5a35e..9e1233e6161f9a44b0b0c69c2761df722eecb3d2 100644
--- a/src/main/java/model/FireFighter.java
+++ b/src/main/java/model/FireFighter.java
@@ -2,36 +2,33 @@ package model;
 
 import util.Neighbour;
 import util.Position;
-import util.TargetStrategy;
+
 
 import java.util.ArrayList;
 
-import java.util.HashSet;
+
 import java.util.List;
 
 
 
 public class FireFighter extends Extinguisher {
 
-    private final TargetStrategy targetStrategy = new TargetStrategy();
-
 
-    public FireFighter(Position position){
+    public FireFighter(Position position) {
         super(position);
         element = ModelElement.FIREFIGHTER;
     }
 
 
-    public List<Position> update(Board<List<ModelElement>> firefighterBoard){
+    public List<Position> update(Board<List<ModelElement>> firefighterBoard) {
         this.neighbour = new Neighbour(firefighterBoard);
-
         List<Position> modifiedPositions = new ArrayList<>();
 
         Position currentPosition = this.getPosition();
         Position newPosition = targetStrategy.neighborClosestToFire(currentPosition, firefighterBoard.getFires().keySet(), this.neighbour.getNeighbors());
+        this.setPosition(newPosition);
 
 
-        this.setPosition(newPosition);
         modifiedPositions.add(currentPosition);
         modifiedPositions.add(newPosition);
 
@@ -53,4 +50,8 @@ public class FireFighter extends Extinguisher {
         return modifiedPositions;
     }
 
-}
\ No newline at end of file
+
+
+    }
+
+
diff --git a/src/main/java/model/ModelElement.java b/src/main/java/model/ModelElement.java
index 4aa440eb68e2a60b35775607c1bb663b766596be..64c839ab48112331a1e727f65c477ab3ed4a248b 100644
--- a/src/main/java/model/ModelElement.java
+++ b/src/main/java/model/ModelElement.java
@@ -7,12 +7,13 @@ import java.util.List;
 
 public enum ModelElement {
 
-  FIREFIGHTER(10),
+  FIREFIGHTER(5),
   FIRE(10),
   CLOUD(10),
   ROAD(5),
   MOUNTAIN(5),
-  ROCAILLE(3);
+  ROCAILLE(3),
+  MOTORIZEDFIREFIGHTER(5);
   private final int initialNumber;
 
 
@@ -34,6 +35,7 @@ public enum ModelElement {
       case CLOUD -> new Cloud(position);
       case MOUNTAIN -> new Montain(position);
       case ROCAILLE -> new Rocaille(position);
+      case MOTORIZEDFIREFIGHTER -> new MotorizedFireFighter(position);
       default -> throw new IllegalArgumentException("Unknown ModelElement: " + this);
       };
 
diff --git a/src/main/java/model/MotorizedFireFighter.java b/src/main/java/model/MotorizedFireFighter.java
new file mode 100644
index 0000000000000000000000000000000000000000..a9dad9454f18f15767fad0da1dc78222de5cbed9
--- /dev/null
+++ b/src/main/java/model/MotorizedFireFighter.java
@@ -0,0 +1,49 @@
+package model;
+
+import util.Neighbour;
+import util.Position;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class MotorizedFireFighter extends Extinguisher {
+
+    public MotorizedFireFighter(Position position) {
+        super(position);
+        this.element = ModelElement.MOTORIZEDFIREFIGHTER;
+    }
+
+    @Override
+    public List<Position> update(Board<List<ModelElement>> firefighterBoard) {
+        this.neighbour = new Neighbour(firefighterBoard);
+
+        List<Position> modifiedPositions = new ArrayList<>();
+
+        Position currentPosition = this.getPosition();
+        Position newPosition = targetStrategy.neighborClosestToFire(currentPosition, firefighterBoard.getFires().keySet(), this.neighbour.getNeighbors());
+        Position DoublenewPosition = targetStrategy.neighborClosestToFire(newPosition, firefighterBoard.getFires().keySet(), this.neighbour.getNeighbors());
+        this.setPosition(DoublenewPosition);
+
+        modifiedPositions.add(currentPosition);
+        modifiedPositions.add(newPosition);
+        modifiedPositions.add(DoublenewPosition);
+
+        extinguish(firefighterBoard, newPosition);
+        extinguish(firefighterBoard, DoublenewPosition);
+
+
+        for (Position neighbor : this.neighbour.getNeighbors().get(DoublenewPosition)) {
+            extinguish(firefighterBoard, neighbor);
+            modifiedPositions.add(neighbor);
+        }
+
+        for (Obstacle obstacle : firefighterBoard.getObstacles().values()) {
+            if (obstacle instanceof Montain) {
+                modifiedPositions.remove(obstacle.getPosition());
+            }
+        }
+
+        return modifiedPositions;
+
+    }
+}
diff --git a/src/main/java/view/ViewElement.java b/src/main/java/view/ViewElement.java
index 57b2b151c0d08426ad375b6e59b88e11ddb304be..a5db13ab91dd52105810b5064e655a1351cbe245 100644
--- a/src/main/java/view/ViewElement.java
+++ b/src/main/java/view/ViewElement.java
@@ -10,6 +10,7 @@ public enum ViewElement {
   MOUNTAIN(Color.BROWN),
 
   ROCAILLE(Color.GREEN),
+  MOTORIZEDFIREFIGHTER(Color.PURPLE),
   EMPTY(Color.WHITE);
   final Color color;
   ViewElement(Color color) {