diff --git a/.gitignore b/.gitignore
index 4ac6a26e889151007c0bf31fc0179b551871b986..9d80d85943aae8cee69606d2d5c3423fe19e06bd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
 /target/
+/bin/
 .settings/
 .project
 .classpath
diff --git a/build-and-run.sh b/build-and-run.sh
new file mode 100755
index 0000000000000000000000000000000000000000..8e974fb1caac5798fcba1c03578d98bf16b5131f
--- /dev/null
+++ b/build-and-run.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+cd java2-lab02-common-v2
+mvn clean install
+cd ../java2-lab02-db-v2
+mvn clean install
+cd ../java2-lab02-file-v2
+mvn clean install
+cd ../java2-lab02-v2
+mvn clean package
+java --module-path target/java2-lab02-v2-0.0.1-SNAPHOST.jar:target/libs -m cz.vsb.fei.java2.lab02_module/lab.gui.App
+cd ..
diff --git a/java2-lab02-common-v2/.gitignore b/java2-lab02-common-v2/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..98b99a551e28559528e090cbfc676dcff9bd7def
--- /dev/null
+++ b/java2-lab02-common-v2/.gitignore
@@ -0,0 +1,16 @@
+# Eclipse
+.classpath
+.project
+.settings/
+ 
+# Intellij
+.idea/
+*.iml
+*.iws
+ 
+# Mac
+.DS_Store
+ 
+# Maven
+log/
+target/
diff --git a/java2-lab02-common-v2/pom.xml b/java2-lab02-common-v2/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..291effa68b4c599a8b13d68bf9159e2a4092085d
--- /dev/null
+++ b/java2-lab02-common-v2/pom.xml
@@ -0,0 +1,79 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<groupId>cz.vsb.fei.java2</groupId>
+	<artifactId>java2-lab02-common-v2</artifactId>
+	<version>0.0.1-SNAPSHOT</version>
+
+	<name>java2-lab02-common-v2</name>
+
+	<packaging>jar</packaging>
+
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		<maven.compiler.release>21</maven.compiler.release>
+		<JUnit.version>5.11.0</JUnit.version>
+		<log4j.version>2.23.1</log4j.version>
+		<lombok.version>1.18.34</lombok.version>
+	</properties>
+	<dependencyManagement>
+		<dependencies>
+			<dependency>
+				<groupId>org.junit</groupId>
+				<artifactId>junit-bom</artifactId>
+				<version>${JUnit.version}</version>
+				<type>pom</type>
+				<scope>import</scope>
+			</dependency>
+		</dependencies>
+	</dependencyManagement>
+
+	<dependencies>
+		<dependency>
+			<groupId>org.junit.jupiter</groupId>
+			<artifactId>junit-jupiter</artifactId>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.logging.log4j</groupId>
+			<artifactId>log4j-core</artifactId>
+			<version>${log4j.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.logging.log4j</groupId>
+			<artifactId>log4j-api</artifactId>
+			<version>${log4j.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.projectlombok</groupId>
+			<artifactId>lombok</artifactId>
+			<version>${lombok.version}</version>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>3.13.0</version>
+				<configuration>
+					<annotationProcessorPaths>
+						<path>
+							<groupId>org.projectlombok</groupId>
+							<artifactId>lombok</artifactId>
+							<version>${lombok.version}</version>
+						</path>
+					</annotationProcessorPaths>
+				</configuration>
+			</plugin>
+			<plugin>
+				<artifactId>maven-surefire-plugin</artifactId>
+				<version>3.5.0</version>
+			</plugin>
+		</plugins>
+	</build>
+
+</project>
diff --git a/src/main/java/lab/Score.java b/java2-lab02-common-v2/src/main/java/cz/vsb/fei/java2/lab02/common/Score.java
similarity index 98%
rename from src/main/java/lab/Score.java
rename to java2-lab02-common-v2/src/main/java/cz/vsb/fei/java2/lab02/common/Score.java
index 70d137ac13f30db887a2a8be3cbfafd2ff41ee73..cb962bdf72e3ae81b92bd0e20bd87ff74d9be3f5 100644
--- a/src/main/java/lab/Score.java
+++ b/java2-lab02-common-v2/src/main/java/cz/vsb/fei/java2/lab02/common/Score.java
@@ -1,4 +1,4 @@
-package lab;
+package cz.vsb.fei.java2.lab02.common;
 
 import java.util.Random;
 
diff --git a/java2-lab02-common-v2/src/main/java/cz/vsb/fei/java2/lab02/common/ScoreStorageInterface.java b/java2-lab02-common-v2/src/main/java/cz/vsb/fei/java2/lab02/common/ScoreStorageInterface.java
new file mode 100644
index 0000000000000000000000000000000000000000..deb19b3972a81ffa7a3dbc68a512ac96666c4f7c
--- /dev/null
+++ b/java2-lab02-common-v2/src/main/java/cz/vsb/fei/java2/lab02/common/ScoreStorageInterface.java
@@ -0,0 +1,15 @@
+package cz.vsb.fei.java2.lab02.common;
+
+import java.util.List;
+
+public interface ScoreStorageInterface {
+
+	List<Score> getAll();
+
+	List<Score> getFirstTen();
+
+	void init();
+
+	void insertScore(Score score);
+
+}
\ No newline at end of file
diff --git a/java2-lab02-common-v2/src/main/java/module-info.java b/java2-lab02-common-v2/src/main/java/module-info.java
new file mode 100644
index 0000000000000000000000000000000000000000..e9edf40111700e7315c7992a3c5f0eee930fb438
--- /dev/null
+++ b/java2-lab02-common-v2/src/main/java/module-info.java
@@ -0,0 +1,5 @@
+module cz.vsb.fei.java2.lab02.common_module {
+	requires static lombok;
+	requires org.apache.logging.log4j;
+	exports cz.vsb.fei.java2.lab02.common;
+}
\ No newline at end of file
diff --git a/java2-lab02-common-v2/src/test/java/cz/vsb/fei/java2/lab01/AppTest.java b/java2-lab02-common-v2/src/test/java/cz/vsb/fei/java2/lab01/AppTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..9102a3af357bbfe62c176afc996a511c63fde18c
--- /dev/null
+++ b/java2-lab02-common-v2/src/test/java/cz/vsb/fei/java2/lab01/AppTest.java
@@ -0,0 +1,19 @@
+package cz.vsb.fei.java2.lab01;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import org.junit.jupiter.api.Test;
+
+/**
+ * Unit test for simple App.
+ */
+class AppTest {
+
+	/**
+	 * Rigorous Test :-)
+	 */
+	@Test
+	void shouldAnswerWithTrue() {
+		assertTrue(true);
+	}
+}
diff --git a/java2-lab02-db-v2/.gitignore b/java2-lab02-db-v2/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..98b99a551e28559528e090cbfc676dcff9bd7def
--- /dev/null
+++ b/java2-lab02-db-v2/.gitignore
@@ -0,0 +1,16 @@
+# Eclipse
+.classpath
+.project
+.settings/
+ 
+# Intellij
+.idea/
+*.iml
+*.iws
+ 
+# Mac
+.DS_Store
+ 
+# Maven
+log/
+target/
diff --git a/java2-lab02-db-v2/pom.xml b/java2-lab02-db-v2/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a706302a19af5488fe654f6697dd959b85873bde
--- /dev/null
+++ b/java2-lab02-db-v2/pom.xml
@@ -0,0 +1,90 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<groupId>cz.vsb.fei.java2</groupId>
+	<artifactId>java2-lab02-db-v2</artifactId>
+	<version>0.0.1-SNAPSHOT</version>
+
+	<name>java2-lab02-db-v2</name>
+
+	<packaging>jar</packaging>
+
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		<maven.compiler.release>21</maven.compiler.release>
+		<JUnit.version>5.11.0</JUnit.version>
+		<log4j.version>2.23.1</log4j.version>
+		<lombok.version>1.18.34</lombok.version>
+	</properties>
+	<dependencyManagement>
+		<dependencies>
+			<dependency>
+				<groupId>org.junit</groupId>
+				<artifactId>junit-bom</artifactId>
+				<version>${JUnit.version}</version>
+				<type>pom</type>
+				<scope>import</scope>
+			</dependency>
+		</dependencies>
+	</dependencyManagement>
+
+	<dependencies>
+		<dependency>
+			<groupId>cz.vsb.fei.java2</groupId>
+			<artifactId>java2-lab02-common-v2</artifactId>
+			<version>0.0.1-SNAPSHOT</version>
+		</dependency>
+		<dependency>
+			<groupId>com.h2database</groupId>
+			<artifactId>h2</artifactId>
+			<version>2.3.232</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.junit.jupiter</groupId>
+			<artifactId>junit-jupiter</artifactId>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.logging.log4j</groupId>
+			<artifactId>log4j-core</artifactId>
+			<version>${log4j.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.logging.log4j</groupId>
+			<artifactId>log4j-api</artifactId>
+			<version>${log4j.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.projectlombok</groupId>
+			<artifactId>lombok</artifactId>
+			<version>${lombok.version}</version>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>3.13.0</version>
+				<configuration>
+					<annotationProcessorPaths>
+						<path>
+							<groupId>org.projectlombok</groupId>
+							<artifactId>lombok</artifactId>
+							<version>${lombok.version}</version>
+						</path>
+					</annotationProcessorPaths>
+				</configuration>
+			</plugin>
+			<plugin>
+				<artifactId>maven-surefire-plugin</artifactId>
+				<version>3.5.0</version>
+			</plugin>
+		</plugins>
+	</build>
+
+</project>
diff --git a/src/main/java/lab/DbConnector.java b/java2-lab02-db-v2/src/main/java/cz/vsb/fei/java2/lab02/db/DbConnector.java
similarity index 85%
rename from src/main/java/lab/DbConnector.java
rename to java2-lab02-db-v2/src/main/java/cz/vsb/fei/java2/lab02/db/DbConnector.java
index fda38fd11d6f16c8af6f71857e9882781121423e..4f8c076a132951c88211aa4b5739bab926841461 100644
--- a/src/main/java/lab/DbConnector.java
+++ b/java2-lab02-db-v2/src/main/java/cz/vsb/fei/java2/lab02/db/DbConnector.java
@@ -1,4 +1,4 @@
-package lab;
+package cz.vsb.fei.java2.lab02.db;
 
 import java.sql.Connection;
 import java.sql.DriverManager;
@@ -9,14 +9,19 @@ import java.sql.Statement;
 import java.util.ArrayList;
 import java.util.List;
 
-public class DbConnector {
+import cz.vsb.fei.java2.lab02.common.Score;
+import cz.vsb.fei.java2.lab02.common.ScoreStorageInterface;
+
+public class DbConnector implements ScoreStorageInterface {
 
 	private static final String JDBC_CONECTIN_STRING = "jdbc:h2:file:./scoreDB";
 
+	@Override
 	public List<Score> getAll() {
 		return queryScore("select * from scores;");
 	}
 
+	@Override
 	public List<Score> getFirstTen() {
 		return queryScore("select * from scores order by points  desc limit 10;");
 	}
@@ -35,7 +40,8 @@ public class DbConnector {
 		return result;
 	}
 
-	public void createTable() {
+	@Override
+	public void init() {
 		try (Connection con = DriverManager.getConnection(JDBC_CONECTIN_STRING);
 				Statement stm = con.createStatement();) {
 			stm.executeUpdate("CREATE TABLE if not exists scores (nick VARCHAR(50) NOT NULL, points INT NOT NULL);");
@@ -44,6 +50,7 @@ public class DbConnector {
 		}
 	}
 
+	@Override
 	public void insertScore(Score score) {
 		try (Connection con = DriverManager.getConnection(JDBC_CONECTIN_STRING);
 				PreparedStatement stm = con.prepareStatement("INSERT INTO scores VALUES (?, ?)");) {
diff --git a/java2-lab02-db-v2/src/main/java/module-info.java b/java2-lab02-db-v2/src/main/java/module-info.java
new file mode 100644
index 0000000000000000000000000000000000000000..b10ea8f1684ce4bf06a27bf5cb036b4515a18ee8
--- /dev/null
+++ b/java2-lab02-db-v2/src/main/java/module-info.java
@@ -0,0 +1,11 @@
+import cz.vsb.fei.java2.lab02.common.ScoreStorageInterface;
+import cz.vsb.fei.java2.lab02.db.DbConnector;
+
+module cz.vsb.fei.java2.lab02.db_module {
+	requires static lombok;
+	requires org.apache.logging.log4j;
+	requires transitive cz.vsb.fei.java2.lab02.common_module;
+	requires java.sql;
+	exports cz.vsb.fei.java2.lab02.db;
+	provides ScoreStorageInterface with cz.vsb.fei.java2.lab02.db.DbConnector;
+}
\ No newline at end of file
diff --git a/java2-lab02-db-v2/src/main/resources/log4j2.xml b/java2-lab02-db-v2/src/main/resources/log4j2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..acb3514078f6fb73f4f09ffd7a172b47f184e961
--- /dev/null
+++ b/java2-lab02-db-v2/src/main/resources/log4j2.xml
@@ -0,0 +1,13 @@
+<Configuration>
+	<Appenders>
+		<Console name="Console">
+			<PatternLayout
+				pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
+		</Console>
+	</Appenders>
+	<Loggers>
+		<Root level="info">
+			<AppenderRef ref="Console"></AppenderRef>
+		</Root>
+	</Loggers>
+</Configuration>
diff --git a/java2-lab02-file-v2/.gitignore b/java2-lab02-file-v2/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..98b99a551e28559528e090cbfc676dcff9bd7def
--- /dev/null
+++ b/java2-lab02-file-v2/.gitignore
@@ -0,0 +1,16 @@
+# Eclipse
+.classpath
+.project
+.settings/
+ 
+# Intellij
+.idea/
+*.iml
+*.iws
+ 
+# Mac
+.DS_Store
+ 
+# Maven
+log/
+target/
diff --git a/java2-lab02-file-v2/pom.xml b/java2-lab02-file-v2/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..72f41c7403fec34109af5ef3d4b34ff85b8b7bed
--- /dev/null
+++ b/java2-lab02-file-v2/pom.xml
@@ -0,0 +1,84 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<groupId>cz.vsb.fei.java2</groupId>
+	<artifactId>java2-lab02-file-v2</artifactId>
+	<version>1.0-SNAPSHOT</version>
+
+	<name>java2-lab02-file-v2</name>
+
+	<packaging>jar</packaging>
+
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		<maven.compiler.release>21</maven.compiler.release>
+		<JUnit.version>5.11.0</JUnit.version>
+		<log4j.version>2.23.1</log4j.version>
+		<lombok.version>1.18.34</lombok.version>
+	</properties>
+	<dependencyManagement>
+		<dependencies>
+			<dependency>
+				<groupId>org.junit</groupId>
+				<artifactId>junit-bom</artifactId>
+				<version>${JUnit.version}</version>
+				<type>pom</type>
+				<scope>import</scope>
+			</dependency>
+		</dependencies>
+	</dependencyManagement>
+
+	<dependencies>
+		<dependency>
+			<groupId>cz.vsb.fei.java2</groupId>
+			<artifactId>java2-lab02-common-v2</artifactId>
+			<version>0.0.1-SNAPSHOT</version>
+		</dependency>
+		<dependency>
+			<groupId>org.junit.jupiter</groupId>
+			<artifactId>junit-jupiter</artifactId>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.logging.log4j</groupId>
+			<artifactId>log4j-core</artifactId>
+			<version>${log4j.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.logging.log4j</groupId>
+			<artifactId>log4j-api</artifactId>
+			<version>${log4j.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>org.projectlombok</groupId>
+			<artifactId>lombok</artifactId>
+			<version>${lombok.version}</version>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>3.13.0</version>
+				<configuration>
+					<annotationProcessorPaths>
+						<path>
+							<groupId>org.projectlombok</groupId>
+							<artifactId>lombok</artifactId>
+							<version>${lombok.version}</version>
+						</path>
+					</annotationProcessorPaths>
+				</configuration>
+			</plugin>
+			<plugin>
+				<artifactId>maven-surefire-plugin</artifactId>
+				<version>3.5.0</version>
+			</plugin>
+		</plugins>
+	</build>
+
+</project>
diff --git a/java2-lab02-file-v2/src/main/java/cz/vsb/fei/file/FileStorage.java b/java2-lab02-file-v2/src/main/java/cz/vsb/fei/file/FileStorage.java
new file mode 100644
index 0000000000000000000000000000000000000000..291811e791de17b965a9b609bfdbaaf53dad998e
--- /dev/null
+++ b/java2-lab02-file-v2/src/main/java/cz/vsb/fei/file/FileStorage.java
@@ -0,0 +1,57 @@
+package cz.vsb.fei.file;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.nio.file.StandardOpenOption;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.stream.Stream;
+
+import cz.vsb.fei.java2.lab02.common.Score;
+import cz.vsb.fei.java2.lab02.common.ScoreStorageInterface;
+
+public class FileStorage implements ScoreStorageInterface {
+
+	private static final String SCORE_FILE_NAME = "scores.csv";
+
+	@Override
+	public List<Score> getAll() {
+		if (Files.exists(Paths.get(SCORE_FILE_NAME))) {
+			try (Stream<String> lines = Files.lines(Paths.get(SCORE_FILE_NAME))) {
+				List<Score> result = lines.map(line -> line.split(";"))
+						.map(parts -> new Score(parts[0], Integer.parseInt(parts[1]))).toList();
+				return new ArrayList<>(result);
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+		return new ArrayList<>();
+	}
+
+	@Override
+	public List<Score> getFirstTen() {
+		List<Score> all = getAll();
+		Collections.sort(all, Comparator.comparing(Score::getPoints).reversed());
+		return all.subList(0, 10);
+	}
+
+	@Override
+	public void init() {
+		/* noting to do */
+	}
+
+	@Override
+	public void insertScore(Score score) {
+		List<Score> all = getAll();
+		all.add(score);
+		List<String> lines = all.stream().map(s -> String.format("%s;%d", s.getName(), s.getPoints())).toList();
+		try {
+			Files.write(Paths.get(SCORE_FILE_NAME), lines, StandardOpenOption.CREATE);
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+}
diff --git a/java2-lab02-file-v2/src/main/java/module-info.java b/java2-lab02-file-v2/src/main/java/module-info.java
new file mode 100644
index 0000000000000000000000000000000000000000..cff2f09f3af4cba1cb0d9b11015f44f32c3a0f8a
--- /dev/null
+++ b/java2-lab02-file-v2/src/main/java/module-info.java
@@ -0,0 +1,9 @@
+import cz.vsb.fei.java2.lab02.common.ScoreStorageInterface;
+
+module cz.vsb.fei.file_module {
+	requires static lombok;
+	requires org.apache.logging.log4j;
+    requires transitive cz.vsb.fei.java2.lab02.common_module;
+	exports cz.vsb.fei.file;
+	provides ScoreStorageInterface with cz.vsb.fei.file.FileStorage;
+}
\ No newline at end of file
diff --git a/java2-lab02-v2/.gitignore b/java2-lab02-v2/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..b83d22266ac8aa2f8df2edef68082c789727841d
--- /dev/null
+++ b/java2-lab02-v2/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/java2-lab02-v2/pom.xml b/java2-lab02-v2/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..302abdbb8f0c8655ddd867c1d1d8d81e23b304d7
--- /dev/null
+++ b/java2-lab02-v2/pom.xml
@@ -0,0 +1,158 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<groupId>cz.vsb.fei.java2</groupId>
+	<artifactId>java2-lab02-v2</artifactId>
+	<version>0.0.1-SNAPHOST</version>
+    <name>java2-lab02-v2</name>
+	<packaging>jar</packaging>
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		<maven.compiler.source>21</maven.compiler.source>
+		<maven.compiler.target>21</maven.compiler.target>
+	</properties>
+	<dependencies>
+		<dependency>
+			<groupId>org.openjfx</groupId>
+			<artifactId>javafx-controls</artifactId>
+			<version>23</version>
+		</dependency>
+		<dependency>
+			<groupId>org.openjfx</groupId>
+			<artifactId>javafx-fxml</artifactId>
+			<version>23</version>
+		</dependency>
+		<!--
+		https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
+		<dependency>
+			<groupId>org.junit.jupiter</groupId>
+			<artifactId>junit-jupiter-api</artifactId>
+			<version>5.11.0</version>
+			<scope>test</scope>
+		</dependency>
+		<!--
+		https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine -->
+		<dependency>
+			<groupId>org.junit.jupiter</groupId>
+			<artifactId>junit-jupiter-engine</artifactId>
+			<version>5.11.0</version>
+			<scope>test</scope>
+		</dependency>
+		<!--
+		https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params -->
+		<dependency>
+			<groupId>org.junit.jupiter</groupId>
+			<artifactId>junit-jupiter-params</artifactId>
+			<version>5.11.0</version>
+			<scope>test</scope>
+		</dependency>
+		<!-- https://mvnrepository.com/artifact/org.reflections/reflections -->
+		<dependency>
+			<groupId>org.reflections</groupId>
+			<artifactId>reflections</artifactId>
+			<version>0.10.2</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.hamcrest</groupId>
+			<artifactId>hamcrest</artifactId>
+			<version>3.0</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>cz.vsb.fei.java2</groupId>
+			<artifactId>java2-lab02-common-v2</artifactId>
+			<version>0.0.1-SNAPSHOT</version>
+		</dependency>
+		<dependency>
+			<groupId>cz.vsb.fei.java2</groupId>
+			<artifactId>java2-lab02-db-v2</artifactId>
+			<version>0.0.1-SNAPSHOT</version>
+		</dependency>
+		<dependency>
+			<groupId>cz.vsb.fei.java2</groupId>
+			<artifactId>java2-lab02-file-v2</artifactId>
+			<version>1.0-SNAPSHOT</version>
+		</dependency>
+	</dependencies>
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>3.13.0</version>
+				<configuration>
+					<failOnError>false</failOnError>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-dependency-plugin</artifactId>
+				<version>3.8.1</version>
+				<executions>
+					<!-- Setup that goal copy-dependencies should be
+					automatically executed during phase package-->
+					<execution>
+						<id>copy-dependencies</id>
+						<phase>package</phase>
+						<goals>
+							<goal>copy-dependencies</goal>
+						</goals>
+						<configuration>
+							<!--Specify where should be dependencies (libraries) copied-->
+							<outputDirectory>${project.build.directory}/libs</outputDirectory>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-jar-plugin</artifactId>
+				<version>3.4.2</version>
+				<configuration>
+					<archive>
+						<!--Automatically create and add file MANIFEST.MF into jar and set specified properties-->
+						<manifest>
+							<addClasspath>true</addClasspath>
+							<classpathPrefix>libs/</classpathPrefix>
+							<mainClass>lab.gui.App</mainClass>
+						</manifest>
+					</archive>
+				</configuration>
+			</plugin>
+
+		</plugins>
+		<pluginManagement>
+			<plugins>
+				<!-- Ignore/Execute plugin execution in Eclipse (error of m2e
+			eclipse plugin) -->
+				<plugin>
+					<groupId>org.eclipse.m2e</groupId>
+					<artifactId>lifecycle-mapping</artifactId>
+					<version>1.0.0</version>
+					<configuration>
+						<lifecycleMappingMetadata>
+							<pluginExecutions>
+								<!-- copy-dependency plugin -->
+								<pluginExecution>
+									<pluginExecutionFilter>
+										<groupId>org.apache.maven.plugins</groupId>
+										<artifactId>maven-dependency-plugin</artifactId>
+										<versionRange>[1.0.0,)</versionRange>
+										<goals>
+											<goal>copy-dependencies</goal>
+										</goals>
+									</pluginExecutionFilter>
+									<action>
+										<ignore />
+									</action>
+								</pluginExecution>
+							</pluginExecutions>
+						</lifecycleMappingMetadata>
+					</configuration>
+				</plugin>
+			</plugins>
+		</pluginManagement>
+	</build>
+</project>
diff --git a/java2-lab02-v2/scores.csv b/java2-lab02-v2/scores.csv
new file mode 100644
index 0000000000000000000000000000000000000000..59e2fa85512ceada42ddd4897b21951dff9d66a8
--- /dev/null
+++ b/java2-lab02-v2/scores.csv
@@ -0,0 +1,3 @@
+ScreenSage;256
+EmojiEnthusiast;183
+EmojiEnthusiast;163
diff --git a/java2-lab02-v2/src/main/java/lab/ScoreStorageFactory.java b/java2-lab02-v2/src/main/java/lab/ScoreStorageFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..b613d07f62f9d822b12b7f943d596e6e0adfee2f
--- /dev/null
+++ b/java2-lab02-v2/src/main/java/lab/ScoreStorageFactory.java
@@ -0,0 +1,39 @@
+package lab;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.NoSuchElementException;
+import java.util.Random;
+import java.util.ServiceLoader;
+
+import cz.vsb.fei.java2.lab02.common.ScoreStorageInterface;
+import javafx.scene.control.Alert;
+import javafx.scene.control.ButtonType;
+import javafx.stage.Modality;
+import javafx.scene.control.Alert.AlertType;
+
+public class ScoreStorageFactory {
+
+	private static ScoreStorageInterface instance;
+
+	private ScoreStorageFactory() {
+		/* hide public one constructor */
+	}
+
+	public static ScoreStorageInterface getInstance() {
+		if (instance == null) {
+			List<ScoreStorageInterface> availableImplementations = new ArrayList<>();
+			ServiceLoader.load(ScoreStorageInterface.class).forEach(availableImplementations::add);
+			if (availableImplementations.isEmpty()) {
+				throw new NoSuchElementException(
+						"Service loader did not find any implementation of interface ScoreStorageInterface.");
+			}
+			instance = availableImplementations.get(new Random().nextInt(availableImplementations.size()));
+			Alert info = new Alert(AlertType.INFORMATION,
+					String.format("Storage %s selected.", instance.getClass().getName()), ButtonType.OK);
+			info.initModality(Modality.WINDOW_MODAL);
+			info.showAndWait();
+		}
+		return instance;
+	}
+}
diff --git a/src/main/java/lab/Collisionable.java b/java2-lab02-v2/src/main/java/lab/game/Collisionable.java
similarity index 91%
rename from src/main/java/lab/Collisionable.java
rename to java2-lab02-v2/src/main/java/lab/game/Collisionable.java
index 40a81570906acfe0a433fcda9f2bd47757b7cdf6..cf0bcdf8d4599ae18a428362a81c16c429fc1b8b 100644
--- a/src/main/java/lab/Collisionable.java
+++ b/java2-lab02-v2/src/main/java/lab/game/Collisionable.java
@@ -1,4 +1,4 @@
-package lab;
+package lab.game;
 
 import javafx.geometry.Rectangle2D;
 
diff --git a/src/main/java/lab/DeadListener.java b/java2-lab02-v2/src/main/java/lab/game/DeadListener.java
similarity index 81%
rename from src/main/java/lab/DeadListener.java
rename to java2-lab02-v2/src/main/java/lab/game/DeadListener.java
index 1a180021d22ecdf365ccc787a085cabfd2f17b93..8afff386a6bfe0b9b434ae7f4d742105a5a1aa18 100644
--- a/src/main/java/lab/DeadListener.java
+++ b/java2-lab02-v2/src/main/java/lab/game/DeadListener.java
@@ -1,4 +1,4 @@
-package lab;
+package lab.game;
 
 @FunctionalInterface
 public interface DeadListener {
diff --git a/src/main/java/lab/Difficult.java b/java2-lab02-v2/src/main/java/lab/game/Difficult.java
similarity index 93%
rename from src/main/java/lab/Difficult.java
rename to java2-lab02-v2/src/main/java/lab/game/Difficult.java
index 6186f2776225b25fed0029b5a39512e3ea6d8149..df2ee98f588b87503563f8da79cb2f6a1062ef79 100644
--- a/src/main/java/lab/Difficult.java
+++ b/java2-lab02-v2/src/main/java/lab/game/Difficult.java
@@ -1,4 +1,4 @@
-package lab;
+package lab.game;
 
 public enum Difficult {
 	EASY(2), MEDIUM(5), HARD(10);
diff --git a/src/main/java/lab/DrawableSimulable.java b/java2-lab02-v2/src/main/java/lab/game/DrawableSimulable.java
similarity index 90%
rename from src/main/java/lab/DrawableSimulable.java
rename to java2-lab02-v2/src/main/java/lab/game/DrawableSimulable.java
index f4faccac252d8f76a835f0976a675c26844dc843..34ae489233fbc15e040993cf4f74b866c5025fd9 100644
--- a/src/main/java/lab/DrawableSimulable.java
+++ b/java2-lab02-v2/src/main/java/lab/game/DrawableSimulable.java
@@ -1,4 +1,4 @@
-package lab;
+package lab.game;
 
 import javafx.scene.canvas.GraphicsContext;
 
diff --git a/src/main/java/lab/DrawingThread.java b/java2-lab02-v2/src/main/java/lab/game/DrawingThread.java
similarity index 97%
rename from src/main/java/lab/DrawingThread.java
rename to java2-lab02-v2/src/main/java/lab/game/DrawingThread.java
index f32c4a6985d4d017d0dd818b8dd5ad7b57c8d26c..7ee5063805b54b99ca855cf4f4f0cec28d28008c 100644
--- a/src/main/java/lab/DrawingThread.java
+++ b/java2-lab02-v2/src/main/java/lab/game/DrawingThread.java
@@ -1,4 +1,4 @@
-package lab;
+package lab.game;
 
 import javafx.animation.AnimationTimer;
 import javafx.scene.canvas.Canvas;
diff --git a/src/main/java/lab/Level.java b/java2-lab02-v2/src/main/java/lab/game/Level.java
similarity index 99%
rename from src/main/java/lab/Level.java
rename to java2-lab02-v2/src/main/java/lab/game/Level.java
index af3bee7f44b47e82d134cb446498fb8412c1a100..ecc6ec43b7fb80c128f4e0c631766a9c09a75fd9 100644
--- a/src/main/java/lab/Level.java
+++ b/java2-lab02-v2/src/main/java/lab/game/Level.java
@@ -1,4 +1,4 @@
-package lab;
+package lab.game;
 
 import java.util.ArrayList;
 import java.util.Comparator;
diff --git a/src/main/java/lab/Monster.java b/java2-lab02-v2/src/main/java/lab/game/Monster.java
similarity index 99%
rename from src/main/java/lab/Monster.java
rename to java2-lab02-v2/src/main/java/lab/game/Monster.java
index 64b677ce229b8f5074d2d775d04a8ff4a4e95ee8..666e4ce7a25d58a9cd788d5ec5a9239b125b49cf 100644
--- a/src/main/java/lab/Monster.java
+++ b/java2-lab02-v2/src/main/java/lab/game/Monster.java
@@ -1,4 +1,4 @@
-package lab;
+package lab.game;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/src/main/java/lab/MujListener.java b/java2-lab02-v2/src/main/java/lab/game/MujListener.java
similarity index 88%
rename from src/main/java/lab/MujListener.java
rename to java2-lab02-v2/src/main/java/lab/game/MujListener.java
index e7ba9fea16d46dd6d75370b2dc63ae91152e2afb..e506f3fe4706ac6f49d9748190a87e0b9b8213d0 100644
--- a/src/main/java/lab/MujListener.java
+++ b/java2-lab02-v2/src/main/java/lab/game/MujListener.java
@@ -1,4 +1,4 @@
-package lab;
+package lab.game;
 
 public class MujListener implements DeadListener {
 
diff --git a/src/main/java/lab/NicerObstacle.java b/java2-lab02-v2/src/main/java/lab/game/NicerObstacle.java
similarity index 96%
rename from src/main/java/lab/NicerObstacle.java
rename to java2-lab02-v2/src/main/java/lab/game/NicerObstacle.java
index a0a6c27249d75faa000874c7393d9a86dd10be21..02c42995be4edbc47e787e47bab9894e8b48e65e 100644
--- a/src/main/java/lab/NicerObstacle.java
+++ b/java2-lab02-v2/src/main/java/lab/game/NicerObstacle.java
@@ -1,4 +1,4 @@
-package lab;
+package lab.game;
 
 import javafx.geometry.Point2D;
 import javafx.scene.canvas.GraphicsContext;
diff --git a/src/main/java/lab/Obstacle.java b/java2-lab02-v2/src/main/java/lab/game/Obstacle.java
similarity index 97%
rename from src/main/java/lab/Obstacle.java
rename to java2-lab02-v2/src/main/java/lab/game/Obstacle.java
index 09a46c321649bd33a91df746d60c5d356e1eb187..03e6ba6544fb27fda5d880800f91eef42cd95aec 100644
--- a/src/main/java/lab/Obstacle.java
+++ b/java2-lab02-v2/src/main/java/lab/game/Obstacle.java
@@ -1,4 +1,4 @@
-package lab;
+package lab.game;
 
 import javafx.geometry.Dimension2D;
 import javafx.geometry.Point2D;
diff --git a/src/main/java/lab/Player.java b/java2-lab02-v2/src/main/java/lab/game/Player.java
similarity index 99%
rename from src/main/java/lab/Player.java
rename to java2-lab02-v2/src/main/java/lab/game/Player.java
index 93577d77259fced24dcdc78825708904bcdfabb6..547e9568532223de4f380c79bbe9b90d9becb5e0 100644
--- a/src/main/java/lab/Player.java
+++ b/java2-lab02-v2/src/main/java/lab/game/Player.java
@@ -1,4 +1,4 @@
-package lab;
+package lab.game;
 
 import java.util.Random;
 
diff --git a/src/main/java/lab/Routines.java b/java2-lab02-v2/src/main/java/lab/game/Routines.java
similarity index 94%
rename from src/main/java/lab/Routines.java
rename to java2-lab02-v2/src/main/java/lab/game/Routines.java
index 89fcce7f1e20229e95fbdc50c69e2b0bb695f060..47e508c666c9eee42ab601836b4706e8ff9b83e9 100644
--- a/src/main/java/lab/Routines.java
+++ b/java2-lab02-v2/src/main/java/lab/game/Routines.java
@@ -1,4 +1,4 @@
-package lab;
+package lab.game;
 
 public class Routines {
 
diff --git a/src/main/java/lab/WorldEntity.java b/java2-lab02-v2/src/main/java/lab/game/WorldEntity.java
similarity index 97%
rename from src/main/java/lab/WorldEntity.java
rename to java2-lab02-v2/src/main/java/lab/game/WorldEntity.java
index dd43f7c660d9a960c2f382043ee87a885c4e945c..20d26ada42ab1013ee2347029f3f9e030d643304 100644
--- a/src/main/java/lab/WorldEntity.java
+++ b/java2-lab02-v2/src/main/java/lab/game/WorldEntity.java
@@ -1,4 +1,4 @@
-package lab;
+package lab.game;
 
 import javafx.geometry.Point2D;
 import javafx.scene.canvas.GraphicsContext;
diff --git a/src/main/java/lab/App.java b/java2-lab02-v2/src/main/java/lab/gui/App.java
similarity index 96%
rename from src/main/java/lab/App.java
rename to java2-lab02-v2/src/main/java/lab/gui/App.java
index d9b260928b49e77c2ae47234b841b5ffbcad7609..fe54e7bfeb7cc1fb7d21f0292bf25e6934ffcb2b 100644
--- a/src/main/java/lab/App.java
+++ b/java2-lab02-v2/src/main/java/lab/gui/App.java
@@ -1,4 +1,4 @@
-package lab;
+package lab.gui;
 
 import java.io.IOException;
 import java.net.URL;
@@ -42,7 +42,7 @@ public class App extends Application {
 
 	public void switchToGame(String name, int numberOfMonsters) throws IOException {
 		// Construct a main window with a canvas.
-		FXMLLoader gameLoader = new FXMLLoader(getClass().getResource("/lab/gameWindow.fxml"));
+		FXMLLoader gameLoader = new FXMLLoader(getClass().getResource("/lab/gui/gameWindow.fxml"));
 		Parent root = gameLoader.load();
 		gameController = gameLoader.getController();
 		Scene scene = new Scene(root);
@@ -53,7 +53,7 @@ public class App extends Application {
 	}
 	private void switchToMenu() throws IOException {
 		// Construct a main window with a canvas.
-		FXMLLoader menuLoader = new FXMLLoader(getClass().getResource("/lab/mainScreen.fxml"));
+		FXMLLoader menuLoader = new FXMLLoader(getClass().getResource("/lab/gui/mainScreen.fxml"));
 		Parent root = menuLoader.load();
 		MainScreenController menuController = menuLoader.getController();
 		menuController.setApp(this);
diff --git a/src/main/java/lab/GameController.java b/java2-lab02-v2/src/main/java/lab/gui/GameController.java
similarity index 92%
rename from src/main/java/lab/GameController.java
rename to java2-lab02-v2/src/main/java/lab/gui/GameController.java
index 474bc6d7e0ed9f637169f383fc3f9305e7aab7bf..13c98d55bbb33eb2c0316019e9a31c3d13586bf7 100644
--- a/src/main/java/lab/GameController.java
+++ b/java2-lab02-v2/src/main/java/lab/gui/GameController.java
@@ -1,4 +1,4 @@
-package lab;
+package lab.gui;
 
 import javafx.animation.AnimationTimer;
 import javafx.beans.value.ObservableValue;
@@ -7,6 +7,11 @@ import javafx.fxml.FXML;
 import javafx.scene.canvas.Canvas;
 import javafx.scene.control.Label;
 import javafx.scene.control.Slider;
+import lab.game.DeadListener;
+import lab.game.DrawingThread;
+import lab.game.Level;
+import lab.game.Monster;
+import lab.game.MujListener;
 
 public class GameController {
 
diff --git a/src/main/java/lab/MainScreenController.java b/java2-lab02-v2/src/main/java/lab/gui/MainScreenController.java
similarity index 94%
rename from src/main/java/lab/MainScreenController.java
rename to java2-lab02-v2/src/main/java/lab/gui/MainScreenController.java
index 43f8f94505edbdb7356f2d0e134179c7dd581295..59b028250b83a94b42b3be98cfc9d76111cf6ad3 100644
--- a/src/main/java/lab/MainScreenController.java
+++ b/java2-lab02-v2/src/main/java/lab/gui/MainScreenController.java
@@ -1,8 +1,9 @@
-package lab;
+package lab.gui;
 
 import java.io.IOException;
 import java.util.List;
 
+import cz.vsb.fei.java2.lab02.common.Score;
 import javafx.event.ActionEvent;
 import javafx.fxml.FXML;
 import javafx.scene.control.Button;
@@ -12,6 +13,8 @@ import javafx.scene.control.TextField;
 import javafx.scene.control.ToggleButton;
 import javafx.scene.control.ToggleGroup;
 import javafx.scene.control.cell.PropertyValueFactory;
+import lab.ScoreStorageFactory;
+import lab.game.Difficult;
 
 /**
  * 
@@ -101,7 +104,7 @@ public class MainScreenController {
 	
 	private void initDB() {
 		//Stream.generate(Score::generate).limit(10).toList();
-		ScoreStorageFactory.getInstance().createTable();
+		ScoreStorageFactory.getInstance().init();
 		scores.getItems().addAll(ScoreStorageFactory.getInstance().getAll());
 	}
 
diff --git a/java2-lab02-v2/src/main/java/module-info.java b/java2-lab02-v2/src/main/java/module-info.java
new file mode 100644
index 0000000000000000000000000000000000000000..c24119824ad7b5cf98e7c098746fcbe2e77fdebb
--- /dev/null
+++ b/java2-lab02-v2/src/main/java/module-info.java
@@ -0,0 +1,12 @@
+import cz.vsb.fei.java2.lab02.common.ScoreStorageInterface;
+
+module cz.vsb.fei.java2.lab02_module {
+    requires transitive javafx.controls;
+    requires javafx.fxml;
+    requires javafx.base;
+    requires java.sql;
+	requires cz.vsb.fei.java2.lab02.common_module;
+    opens lab.gui to javafx.fxml;
+    exports lab.gui to javafx.fxml,javafx.graphics;
+    uses ScoreStorageInterface;
+}
\ No newline at end of file
diff --git a/src/main/resources/lab/red-monster.gif b/java2-lab02-v2/src/main/resources/lab/game/red-monster.gif
similarity index 100%
rename from src/main/resources/lab/red-monster.gif
rename to java2-lab02-v2/src/main/resources/lab/game/red-monster.gif
diff --git a/src/main/resources/lab/spike.gif b/java2-lab02-v2/src/main/resources/lab/game/spike.gif
similarity index 100%
rename from src/main/resources/lab/spike.gif
rename to java2-lab02-v2/src/main/resources/lab/game/spike.gif
diff --git a/src/main/resources/lab/application.css b/java2-lab02-v2/src/main/resources/lab/gui/application.css
similarity index 100%
rename from src/main/resources/lab/application.css
rename to java2-lab02-v2/src/main/resources/lab/gui/application.css
diff --git a/src/main/resources/lab/game-background.jpg b/java2-lab02-v2/src/main/resources/lab/gui/game-background.jpg
similarity index 100%
rename from src/main/resources/lab/game-background.jpg
rename to java2-lab02-v2/src/main/resources/lab/gui/game-background.jpg
diff --git a/src/main/resources/lab/gameWindow.fxml b/java2-lab02-v2/src/main/resources/lab/gui/gameWindow.fxml
similarity index 97%
rename from src/main/resources/lab/gameWindow.fxml
rename to java2-lab02-v2/src/main/resources/lab/gui/gameWindow.fxml
index 91a80e63eed85a4395b66a28bb92e15d14934d66..22eb1514de9f2ec46fe36562888f9dc7e6131570 100644
--- a/src/main/resources/lab/gameWindow.fxml
+++ b/java2-lab02-v2/src/main/resources/lab/gui/gameWindow.fxml
@@ -10,7 +10,7 @@
 <?import javafx.scene.layout.HBox?>
 <?import javafx.scene.text.Font?>
 
-<BorderPane fx:id="panel" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="459.0" prefWidth="824.0" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="lab.GameController">
+<BorderPane fx:id="panel" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="459.0" prefWidth="824.0" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="lab.gui.GameController">
    <bottom>
       <HBox alignment="TOP_CENTER" prefHeight="66.0" prefWidth="824.0" BorderPane.alignment="CENTER">
          <children>
diff --git a/src/main/resources/lab/mainScreen.fxml b/java2-lab02-v2/src/main/resources/lab/gui/mainScreen.fxml
similarity index 98%
rename from src/main/resources/lab/mainScreen.fxml
rename to java2-lab02-v2/src/main/resources/lab/gui/mainScreen.fxml
index 3229f448e9b72b4d547f12d81a45c561e9897727..768bc61a13c1ecf1e8135d1e077841f113433a7c 100644
--- a/src/main/resources/lab/mainScreen.fxml
+++ b/java2-lab02-v2/src/main/resources/lab/gui/mainScreen.fxml
@@ -13,7 +13,7 @@
 <?import javafx.scene.layout.VBox?>
 <?import javafx.scene.text.Font?>
 
-<BorderPane fx:id="menuPanel" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="547.0" prefWidth="804.0" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="lab.MainScreenController">
+<BorderPane fx:id="menuPanel" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="547.0" prefWidth="804.0" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="lab.gui.MainScreenController">
    <top>
       <HBox prefWidth="200.0" BorderPane.alignment="CENTER">
          <children>
diff --git a/src/main/resources/lab/red-monster-menu-background.jpg b/java2-lab02-v2/src/main/resources/lab/gui/red-monster-menu-background.jpg
similarity index 100%
rename from src/main/resources/lab/red-monster-menu-background.jpg
rename to java2-lab02-v2/src/main/resources/lab/gui/red-monster-menu-background.jpg
diff --git a/src/test/java/jez04/structure/test/AllOfContinue.java b/java2-lab02-v2/src/test/java/jez04/structure/test/AllOfContinue.java
similarity index 100%
rename from src/test/java/jez04/structure/test/AllOfContinue.java
rename to java2-lab02-v2/src/test/java/jez04/structure/test/AllOfContinue.java
diff --git a/src/test/java/jez04/structure/test/ClassExist.java b/java2-lab02-v2/src/test/java/jez04/structure/test/ClassExist.java
similarity index 100%
rename from src/test/java/jez04/structure/test/ClassExist.java
rename to java2-lab02-v2/src/test/java/jez04/structure/test/ClassExist.java
diff --git a/src/test/java/jez04/structure/test/ClassStructureTest.java b/java2-lab02-v2/src/test/java/jez04/structure/test/ClassStructureTest.java
similarity index 99%
rename from src/test/java/jez04/structure/test/ClassStructureTest.java
rename to java2-lab02-v2/src/test/java/jez04/structure/test/ClassStructureTest.java
index 74691a58d5ffa8c996fe56c72570e0bf0dbc31d9..bf058e02641b88d0f6de5ee9caf243014676e2b3 100644
--- a/src/test/java/jez04/structure/test/ClassStructureTest.java
+++ b/java2-lab02-v2/src/test/java/jez04/structure/test/ClassStructureTest.java
@@ -23,6 +23,6 @@ import org.junit.jupiter.api.Test;
 class ClassStructureTest {
 
 	StructureHelper helper = StructureHelper.getInstance();
-
+	
 
 }
diff --git a/src/test/java/jez04/structure/test/ContainsInnerClasses.java b/java2-lab02-v2/src/test/java/jez04/structure/test/ContainsInnerClasses.java
similarity index 100%
rename from src/test/java/jez04/structure/test/ContainsInnerClasses.java
rename to java2-lab02-v2/src/test/java/jez04/structure/test/ContainsInnerClasses.java
diff --git a/src/test/java/jez04/structure/test/HasMethod.java b/java2-lab02-v2/src/test/java/jez04/structure/test/HasMethod.java
similarity index 100%
rename from src/test/java/jez04/structure/test/HasMethod.java
rename to java2-lab02-v2/src/test/java/jez04/structure/test/HasMethod.java
diff --git a/src/test/java/jez04/structure/test/HasProperty.java b/java2-lab02-v2/src/test/java/jez04/structure/test/HasProperty.java
similarity index 100%
rename from src/test/java/jez04/structure/test/HasProperty.java
rename to java2-lab02-v2/src/test/java/jez04/structure/test/HasProperty.java
diff --git a/src/test/java/jez04/structure/test/IsDescendatOf.java b/java2-lab02-v2/src/test/java/jez04/structure/test/IsDescendatOf.java
similarity index 100%
rename from src/test/java/jez04/structure/test/IsDescendatOf.java
rename to java2-lab02-v2/src/test/java/jez04/structure/test/IsDescendatOf.java
diff --git a/src/test/java/jez04/structure/test/IsInterface.java b/java2-lab02-v2/src/test/java/jez04/structure/test/IsInterface.java
similarity index 100%
rename from src/test/java/jez04/structure/test/IsInterface.java
rename to java2-lab02-v2/src/test/java/jez04/structure/test/IsInterface.java
diff --git a/src/test/java/jez04/structure/test/ResourceContains.java b/java2-lab02-v2/src/test/java/jez04/structure/test/ResourceContains.java
similarity index 100%
rename from src/test/java/jez04/structure/test/ResourceContains.java
rename to java2-lab02-v2/src/test/java/jez04/structure/test/ResourceContains.java
diff --git a/src/test/java/jez04/structure/test/SrcContains.java b/java2-lab02-v2/src/test/java/jez04/structure/test/SrcContains.java
similarity index 100%
rename from src/test/java/jez04/structure/test/SrcContains.java
rename to java2-lab02-v2/src/test/java/jez04/structure/test/SrcContains.java
diff --git a/src/test/java/jez04/structure/test/StructureHelper.java b/java2-lab02-v2/src/test/java/jez04/structure/test/StructureHelper.java
similarity index 100%
rename from src/test/java/jez04/structure/test/StructureHelper.java
rename to java2-lab02-v2/src/test/java/jez04/structure/test/StructureHelper.java
diff --git a/src/test/java/jez04/structure/test/StructureMatcher.java b/java2-lab02-v2/src/test/java/jez04/structure/test/StructureMatcher.java
similarity index 100%
rename from src/test/java/jez04/structure/test/StructureMatcher.java
rename to java2-lab02-v2/src/test/java/jez04/structure/test/StructureMatcher.java
diff --git a/pom.xml b/pom.xml
deleted file mode 100644
index 1781554f4d807a9b9f8ca747a774f0228e321b89..0000000000000000000000000000000000000000
--- a/pom.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<groupId>cz.vsb.fei.java2</groupId>
-	<artifactId>java2-lab02-v2</artifactId>
-	<version>0.0.1-SNAPHOST</version>
-    <name>java2-lab02-v2</name>
-	<packaging>jar</packaging>
-	<properties>
-		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-		<maven.compiler.source>21</maven.compiler.source>
-		<maven.compiler.target>21</maven.compiler.target>
-	</properties>
-	<dependencies>
-		<!-- https://mvnrepository.com/artifact/com.h2database/h2 -->
-		<dependency>
-			<groupId>com.h2database</groupId>
-			<artifactId>h2</artifactId>
-			<version>2.3.232</version>
-		</dependency>
-		<dependency>
-			<groupId>org.openjfx</groupId>
-			<artifactId>javafx-controls</artifactId>
-			<version>23</version>
-		</dependency>
-		<dependency>
-			<groupId>org.openjfx</groupId>
-			<artifactId>javafx-fxml</artifactId>
-			<version>23</version>
-		</dependency>
-		<!--
-		https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
-		<dependency>
-			<groupId>org.junit.jupiter</groupId>
-			<artifactId>junit-jupiter-api</artifactId>
-			<version>5.11.0</version>
-			<scope>test</scope>
-		</dependency>
-		<!--
-		https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine -->
-		<dependency>
-			<groupId>org.junit.jupiter</groupId>
-			<artifactId>junit-jupiter-engine</artifactId>
-			<version>5.11.0</version>
-			<scope>test</scope>
-		</dependency>
-		<!--
-		https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params -->
-		<dependency>
-			<groupId>org.junit.jupiter</groupId>
-			<artifactId>junit-jupiter-params</artifactId>
-			<version>5.11.0</version>
-			<scope>test</scope>
-		</dependency>
-		<!-- https://mvnrepository.com/artifact/org.reflections/reflections -->
-		<dependency>
-			<groupId>org.reflections</groupId>
-			<artifactId>reflections</artifactId>
-			<version>0.10.2</version>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.hamcrest</groupId>
-			<artifactId>hamcrest</artifactId>
-			<version>3.0</version>
-			<scope>test</scope>
-		</dependency>
-	</dependencies>
-</project>
diff --git a/run.sh b/run.sh
new file mode 100755
index 0000000000000000000000000000000000000000..774747d5ec40289617f5f9f29b4f554267142c8e
--- /dev/null
+++ b/run.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+cd java2-lab02-v2
+java --module-path target/java2-lab02-v2-0.0.1-SNAPHOST.jar:target/libs -m cz.vsb.fei.java2.lab02_module/lab.gui.App
+cd ..
diff --git a/src/main/java/lab/ScoreStorageFactory.java b/src/main/java/lab/ScoreStorageFactory.java
deleted file mode 100644
index 3346de6eb41a256e171e1a9bfb3d6af18ad1b464..0000000000000000000000000000000000000000
--- a/src/main/java/lab/ScoreStorageFactory.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package lab;
-
-public class ScoreStorageFactory {
-
-	private static DbConnector instance;
-	
-	public static DbConnector getInstance() {
-		if(instance	== null) {
-			instance = new DbConnector();
-		}
-		return instance;
-	}
-}
diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java
deleted file mode 100644
index 51b9b1c06e53e56d996d38195f8a878b7315b6db..0000000000000000000000000000000000000000
--- a/src/main/java/module-info.java
+++ /dev/null
@@ -1,8 +0,0 @@
-module lab01 {
-    requires transitive javafx.controls;
-    requires javafx.fxml;
-    requires javafx.base;
-    requires java.sql;
-    opens lab to javafx.fxml;
-    exports lab;
-}
\ No newline at end of file