diff --git a/build.gradle b/build.gradle
index d1f46e61d45d5c3c4f42232b8ba4129d1b3d8333..0f1ef0d29ec7b11f9ae8e1f4ecc17e6ec020a78c 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,13 +1,14 @@
 
 plugins {
+    id("com.github.johnrengelman.shadow") version "8.1.1"
     id 'application'
-    id "org.openjfx.javafxplugin" version "0.0.14"
-    id 'com.github.johnrengelman.shadow' version '8.1.1'
+    id 'java'
+    id "org.openjfx.javafxplugin" version "0.1.0"
 }
 
 javafx {
     version = "21"
-    modules = [ 'javafx.controls', 'javafx.fxml' ]
+    modules = [ 'javafx.controls', 'javafx.fxml', 'javafx.graphics']
 }
 
 
@@ -29,13 +30,11 @@ test {
 }
 
 application {
-    mainClass.set("FirefighterApplication")
+    mainClass.set("firefighter.app.SimulatorMain")
 }
 
-jar {
-    manifest {
-        attributes("Implementation-Title": project.name,
-                "Implementation-Version": version,
-                "Main-Class": application.mainClass)
+tasks {
+    shadowJar {
+        exclude("module-info.class")
     }
-}
\ No newline at end of file
+}
diff --git a/settings.gradle b/settings.gradle
index b9eacbee240f982c0cf078a7de104018c2b4c12e..5d3f861d10877d6653e10fdd716089a5ceffa7d4 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,2 +1,4 @@
 rootProject.name = 'firefighter'
+include 'src:main:aapp'
+findProject(':src:main:aapp')?.name = 'aapp'
 
diff --git a/src/main/java/FirefighterApplication.java b/src/main/java/firefighter/app/SimulatorApplication.java
similarity index 80%
rename from src/main/java/FirefighterApplication.java
rename to src/main/java/firefighter/app/SimulatorApplication.java
index e43ebd99682af868c317d69dc01a16c663fb4d26..b4392e222cc952fda19e415a89965d8cb4b7bf0a 100644
--- a/src/main/java/FirefighterApplication.java
+++ b/src/main/java/firefighter/app/SimulatorApplication.java
@@ -1,5 +1,6 @@
-import controller.Controller;
-import javafx.application.Application;
+package firefighter.app;
+
+import firefighter.controller.Controller;
 import javafx.application.Platform;
 import javafx.fxml.FXMLLoader;
 import javafx.scene.Parent;
@@ -9,8 +10,8 @@ import javafx.stage.Stage;
 import java.io.IOException;
 import java.net.URL;
 
-public class FirefighterApplication extends Application {
-  private static final String VIEW_RESOURCE_PATH = "/view/view.fxml";
+public class SimulatorApplication extends javafx.application.Application {
+  private static final String VIEW_RESOURCE_PATH = "/firefighter/view/view.fxml";
   private static final String APP_NAME = "Firefighter simulator";
   private static final int ROW_COUNT = 20;
   private static final int COLUMN_COUNT = 20;
@@ -38,7 +39,7 @@ public class FirefighterApplication extends Application {
 
   private void initializeView() throws IOException {
     FXMLLoader loader = new FXMLLoader();
-    URL location = FirefighterApplication.class.getResource(VIEW_RESOURCE_PATH);
+    URL location = SimulatorApplication.class.getResource(VIEW_RESOURCE_PATH);
     loader.setLocation(location);
     view = loader.load();
     Controller controller = loader.getController();
@@ -51,4 +52,8 @@ public class FirefighterApplication extends Application {
     primaryStage.setScene(scene);
     primaryStage.show();
   }
+
+  public static void main(String[] args) {
+    launch(args);
+  }
 }
diff --git a/src/main/java/firefighter/app/SimulatorMain.java b/src/main/java/firefighter/app/SimulatorMain.java
new file mode 100644
index 0000000000000000000000000000000000000000..18533e36e19e89a503925343050543cb145eed25
--- /dev/null
+++ b/src/main/java/firefighter/app/SimulatorMain.java
@@ -0,0 +1,7 @@
+package firefighter.app;
+
+public class SimulatorMain {
+  public static void main(String[] args){
+    SimulatorApplication.main(args);
+  }
+}
diff --git a/src/main/java/controller/Controller.java b/src/main/java/firefighter/controller/Controller.java
similarity index 91%
rename from src/main/java/controller/Controller.java
rename to src/main/java/firefighter/controller/Controller.java
index c4e3232ddb9e0e8ed0363f26e102874175c55843..335bf3e92863d1ad7c599db43aad381b1d9bf532 100644
--- a/src/main/java/controller/Controller.java
+++ b/src/main/java/firefighter/controller/Controller.java
@@ -1,4 +1,4 @@
-package controller;
+package firefighter.controller;
 
 import javafx.animation.Animation;
 import javafx.animation.KeyFrame;
@@ -11,12 +11,12 @@ import javafx.scene.control.ToggleButton;
 import javafx.scene.control.ToggleGroup;
 import javafx.util.Duration;
 import javafx.util.Pair;
-import model.Board;
-import model.ModelElement;
-import model.FirefighterBoard;
-import model.Position;
-import view.FirefighterGrid;
-import view.ViewElement;
+import firefighter.model.Board;
+import firefighter.model.ModelElement;
+import firefighter.model.FirefighterBoard;
+import firefighter.model.Position;
+import firefighter.view.FirefighterGrid;
+import firefighter.view.ViewElement;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -52,7 +52,7 @@ public class Controller {
   }
 
   private void setModel(FirefighterBoard firefighterBoard) {
-    this.board = requireNonNull(firefighterBoard, "model is null");
+    this.board = requireNonNull(firefighterBoard, "firefighter.model is null");
   }
 
   private void updateBoard(){
diff --git a/src/main/java/controller/PersistentToggleGroup.java b/src/main/java/firefighter/controller/PersistentToggleGroup.java
similarity index 96%
rename from src/main/java/controller/PersistentToggleGroup.java
rename to src/main/java/firefighter/controller/PersistentToggleGroup.java
index 7c2c4b5c79d6ff65e0bfbe53c2fb7e9fd5944a1b..a7e930bbe7681be9aff05d85a127bc56628cc03f 100644
--- a/src/main/java/controller/PersistentToggleGroup.java
+++ b/src/main/java/firefighter/controller/PersistentToggleGroup.java
@@ -1,4 +1,4 @@
-package controller;
+package firefighter.controller;
 
 import javafx.collections.ListChangeListener.Change;
 import javafx.scene.control.Toggle;
diff --git a/src/main/java/model/Board.java b/src/main/java/firefighter/model/Board.java
similarity index 87%
rename from src/main/java/model/Board.java
rename to src/main/java/firefighter/model/Board.java
index 5e24f47db3d9f2a071c06f9ca24fcf8ed777b94a..a17de306488ce8f9570928d49e4d480f73d22129 100644
--- a/src/main/java/model/Board.java
+++ b/src/main/java/firefighter/model/Board.java
@@ -1,4 +1,4 @@
-package model;
+package firefighter.model;
 
 import java.util.List;
 
diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/firefighter/model/FirefighterBoard.java
similarity index 99%
rename from src/main/java/model/FirefighterBoard.java
rename to src/main/java/firefighter/model/FirefighterBoard.java
index 910e0365456e320af2e2af7ce969e5777b30dbc5..29af45a07b5f55d9d6cba9a986c6c1a6fdc5f38d 100644
--- a/src/main/java/model/FirefighterBoard.java
+++ b/src/main/java/firefighter/model/FirefighterBoard.java
@@ -1,4 +1,4 @@
-package model;
+package firefighter.model;
 
 import java.util.*;
 
diff --git a/src/main/java/model/ModelElement.java b/src/main/java/firefighter/model/ModelElement.java
similarity index 64%
rename from src/main/java/model/ModelElement.java
rename to src/main/java/firefighter/model/ModelElement.java
index 759eee5e54c3a39472d8f7defbbbe6a2b67b8f00..ca8f16a8cacb4287321f805acf6f5f16fc760bc5 100644
--- a/src/main/java/model/ModelElement.java
+++ b/src/main/java/firefighter/model/ModelElement.java
@@ -1,4 +1,4 @@
-package model;
+package firefighter.model;
 
 public enum ModelElement {
   FIREFIGHTER, FIRE
diff --git a/src/main/java/model/Position.java b/src/main/java/firefighter/model/Position.java
similarity index 64%
rename from src/main/java/model/Position.java
rename to src/main/java/firefighter/model/Position.java
index 08c95ad838499b7386c0b831df0f6d6994b23d90..9941e11701a6089c663b441f7bca5eb97a495951 100644
--- a/src/main/java/model/Position.java
+++ b/src/main/java/firefighter/model/Position.java
@@ -1,4 +1,4 @@
-package model;
+package firefighter.model;
 
 public record Position(int row, int column) {
 
diff --git a/src/main/java/view/FirefighterGrid.java b/src/main/java/firefighter/view/FirefighterGrid.java
similarity index 97%
rename from src/main/java/view/FirefighterGrid.java
rename to src/main/java/firefighter/view/FirefighterGrid.java
index 085ad2c14e69a96cb34be70316362aedee14d290..1e46ca881b5af24b92cbc45140b94921db018bc8 100644
--- a/src/main/java/view/FirefighterGrid.java
+++ b/src/main/java/firefighter/view/FirefighterGrid.java
@@ -1,9 +1,9 @@
-package view;
+package firefighter.view;
 
 import javafx.scene.canvas.Canvas;
 import javafx.scene.paint.Color;
 import javafx.util.Pair;
-import model.Position;
+import firefighter.model.Position;
 
 import java.util.List;
 
diff --git a/src/main/java/view/Grid.java b/src/main/java/firefighter/view/Grid.java
similarity index 74%
rename from src/main/java/view/Grid.java
rename to src/main/java/firefighter/view/Grid.java
index ee8a6129d13d6a6c3429c90f4bb9f8455da68041..bc0b4875a276a60ba71a7662a7ccde94a10a530e 100644
--- a/src/main/java/view/Grid.java
+++ b/src/main/java/firefighter/view/Grid.java
@@ -1,8 +1,7 @@
-package view;
+package firefighter.view;
 
-import javafx.scene.paint.Color;
 import javafx.util.Pair;
-import model.Position;
+import firefighter.model.Position;
 
 import java.util.List;
 
diff --git a/src/main/java/view/ViewElement.java b/src/main/java/firefighter/view/ViewElement.java
similarity index 88%
rename from src/main/java/view/ViewElement.java
rename to src/main/java/firefighter/view/ViewElement.java
index ffb76112e1af543df5af41fa906082ef11be9967..0181e552dd18ac27bed065725a63ff3bb280030d 100644
--- a/src/main/java/view/ViewElement.java
+++ b/src/main/java/firefighter/view/ViewElement.java
@@ -1,4 +1,4 @@
-package view;
+package firefighter.view;
 
 import javafx.scene.paint.Color;
 
diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java
new file mode 100644
index 0000000000000000000000000000000000000000..c82befa7b9e8653d6f801e17f1636683adf76493
--- /dev/null
+++ b/src/main/java/module-info.java
@@ -0,0 +1,8 @@
+module firefighter {
+  requires javafx.controls;
+  requires javafx.fxml;
+  requires javafx.graphics;
+  opens firefighter.controller to javafx.fxml;
+  exports firefighter.app;
+  opens firefighter.app to javafx.fxml;
+}
\ No newline at end of file
diff --git a/src/main/resources/view/DarkTheme.css b/src/main/resources/firefighter/view/DarkTheme.css
similarity index 100%
rename from src/main/resources/view/DarkTheme.css
rename to src/main/resources/firefighter/view/DarkTheme.css
diff --git a/src/main/resources/view/view.fxml b/src/main/resources/firefighter/view/view.fxml
similarity index 93%
rename from src/main/resources/view/view.fxml
rename to src/main/resources/firefighter/view/view.fxml
index e8b0ffc8a0ea92ec2814d11fa134e403923198e4..9ae1576cb37ec5e2339ca4a4566c94b69aa139ff 100644
--- a/src/main/resources/view/view.fxml
+++ b/src/main/resources/firefighter/view/view.fxml
@@ -3,12 +3,12 @@
 <?import javafx.scene.control.Button?>
 <?import javafx.scene.layout.HBox?>
 <?import javafx.scene.layout.VBox?>
-<?import view.FirefighterGrid?>
+<?import firefighter.view.FirefighterGrid?>
 
 <?import javafx.scene.control.ToggleButton?>
 <HBox styleClass="background" stylesheets="@DarkTheme.css"
       xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml"
-      fx:controller="controller.Controller">
+      fx:controller="firefighter.controller.Controller">
   <VBox>
     <Button fx:id="restartButton" maxHeight="-Infinity" maxWidth="-Infinity"
             mnemonicParsing="false" onAction="#restartButtonAction" prefHeight="24.0" prefWidth="200.0"