diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index e411586a54a84874f49763fe4742011efc86ca97..1e2fbf0d45879712d4e3ca644375f6109ad81740 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java
index 97abb90182242c43b0dea173a4b0f853b93922b0..1d4ca4c895233947bfdc43a023859e3d37e1bc1c 100644
--- a/src/main/java/model/FirefighterBoard.java
+++ b/src/main/java/model/FirefighterBoard.java
@@ -10,6 +10,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
   private final int rowCount;
   private final int initialFireCount;
   private final int initialFirefighterCount;
+  private final TargetStrategy targetStrategy = new TargetStrategy(this);
   private List<Position> firefighterPositions;
   private Set<Position> firePositions;
   private int step = 0;
@@ -87,7 +88,8 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
     List<Position> modifiedPosition = new ArrayList<>();
     List<Position> firefighterNewPositions = new ArrayList<>();
     for (Position firefighterPosition : firefighterPositions) {
-      Position newFirefighterPosition = neighborClosestToFire(firefighterPosition);
+      Position newFirefighterPosition =
+              targetStrategy.neighborClosestToFire(firefighterPosition, firePositions);
       firefighterNewPositions.add(newFirefighterPosition);
       extinguish(newFirefighterPosition);
       modifiedPosition.add(firefighterPosition);
@@ -112,7 +114,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
     firePositions.remove(position);
   }
 
-  private List<Position> neighbors(Position position) {
+  public List<Position> neighbors(Position position) {
     List<Position> list = new ArrayList<>();
     if (position.row() > 0) list.add(new Position(position.row() - 1, position.column()));
     if (position.column() > 0) list.add(new Position(position.row(), position.column() - 1));
@@ -121,26 +123,6 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
     return list;
   }
 
-  private Position neighborClosestToFire(Position position) {
-    Set<Position> seen = new HashSet<>();
-    HashMap<Position, Position> firstMove = new HashMap<>();
-    Queue<Position> toVisit = new LinkedList<>(neighbors(position));
-    for (Position initialMove : toVisit)
-      firstMove.put(initialMove, initialMove);
-    while (!toVisit.isEmpty()) {
-      Position current = toVisit.poll();
-      if (firePositions.contains(current))
-        return firstMove.get(current);
-      for (Position adjacent : neighbors(current)) {
-        if (seen.contains(adjacent)) continue;
-        toVisit.add(adjacent);
-        seen.add(adjacent);
-        firstMove.put(adjacent, firstMove.get(current));
-      }
-    }
-    return position;
-  }
-
   @Override
   public void setState(List<ModelElement> state, Position position) {
     firePositions.remove(position);
@@ -154,4 +136,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
       }
     }
   }
+
+  public List<Position> getFirePositions() {
+return firefighterPositions;  }
 }
\ No newline at end of file
diff --git a/src/main/java/model/TargetStrategy.java b/src/main/java/model/TargetStrategy.java
new file mode 100644
index 0000000000000000000000000000000000000000..2367ebe5258771ed1f962ad4cae05f8129ae44b8
--- /dev/null
+++ b/src/main/java/model/TargetStrategy.java
@@ -0,0 +1,38 @@
+package model;
+
+import util.Position;
+
+import java.util.*;
+
+public class TargetStrategy {
+    private final FirefighterBoard firefighterBoard;
+
+    public TargetStrategy(FirefighterBoard firefighterBoard) {
+        this.firefighterBoard = firefighterBoard;
+    }
+
+    /**
+     * @param position current position.
+     * @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) {
+        Set<Position> seen = new HashSet<Position>();
+        HashMap<Position, Position> firstMove = new HashMap<Position, Position>();
+        Queue<Position> toVisit = new LinkedList<Position>(firefighterBoard.neighbors(position));
+        for (Position initialMove : toVisit)
+            firstMove.put(initialMove, initialMove);
+        while (!toVisit.isEmpty()) {
+            Position current = toVisit.poll();
+            if (targets.contains(current))
+                return firstMove.get(current);
+            for (Position adjacent : firefighterBoard.neighbors(current)) {
+                if (seen.contains(adjacent)) continue;
+                toVisit.add(adjacent);
+                seen.add(adjacent);
+                firstMove.put(adjacent, firstMove.get(current));
+            }
+        }
+        return position;
+    }
+}
\ No newline at end of file