diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..206a4832ae92354aef8616735cb9491c04be0a41
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,45 @@
+include:
+  - template: Jobs/SAST.gitlab-ci.yml
+
+cache:
+  paths:
+    - .m2/repository
+
+variables:
+  MAVEN_OPTS: "-Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository"
+
+stages:
+- build
+- test
+- package
+
+build-battlearena:
+  stage: build
+  image: maven:3.9.4-eclipse-temurin-20
+  script:
+  - "echo 'Starting Build Stage'"
+  - "mvn compile -X"
+test-battlearena:
+  stage: test
+  image: maven:3.9.4-eclipse-temurin-20
+  script:
+  - "echo 'Starting Test Stage'"
+  - "mvn test"
+  artifacts:
+    reports:
+      junit:
+      - target/surefire-reports/TEST-*.xml
+      - target/failsafe-reports/TEST-*.xml
+package-battlearena:
+  stage: package
+  image: maven:3.9.4-eclipse-temurin-20
+  script:
+  - "echo 'Starting Package Stage'"
+  - "mvn package"
+  only:
+    refs:
+    - main
+  artifacts:
+    paths:
+    - target/*.jar
+    expire_in: 2 days
diff --git a/README.md b/README.md
index eab1454caa44dab8605d96de620ae2ec8ebbe63c..c8ed180932d8034e6d7cf77be498959605726541 100644
--- a/README.md
+++ b/README.md
@@ -1,17 +1,23 @@
-## Hier könnte ihre Werbung stehn
+# Hier könnte ihre Werbung stehn
 
 ### Known issues:
- - JavaFX Mediaplayer is buggy under Windows 11. Videos can have weird behaviors and sometimes won't load at all
- - SQL server is very slow (thanks Oracle)
+    - JavaFX Mediaplayer is buggy under Windows 11. Videos can have weird behaviors and sometimes won't load at all
+    - SQL server is very slow (thanks Oracle)
 
-<br><br>
-#### FAQ:
-Why is the Game loading so long? <br> - cry about it
+<br>
+    
+## FAQ:
+### Why is the Game loading so long?
+cry about it
 
-Why can't I connect to the Multiplayer? <br> - cry about it
+### Why can't I connect to the Multiplayer?
+cry about it
 
-The character is moving too quickly <br> - cry about it
+### Why is my character moving so quickly? 
+cry about it
 
-The UI is too small <br> - cry about it
+### Why is the UI so small? 
+cry about it
 
-Why doesn't the intro load? <br> - cry about it
\ No newline at end of file
+### Why doesn't the intro load? 
+cry about it
diff --git a/pom.xml b/pom.xml
index 00cecae4b603bb2ef7a769e8effa5db5010b47d5..1aecd3dfda9b648f6512a200cc6b5651b8d55800 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
 
     <groupId>de.hdm_stuttgart.battlearena</groupId>
     <artifactId>BattleArena</artifactId>
-    <version>v0.0.1</version>
+    <version>0.6.1</version>
 
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java
index ae0435c5235abbbecfe2cd193261f7bc5a05ca23..517317a498a261c22d283ec45fa2cb6c7b767330 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/GameSceneController.java
@@ -196,13 +196,17 @@ public class GameSceneController implements Initializable {
         updateExplosionspawns();
         player.checkGameplayObjectInteraction(player, graphicsContext2D);
         enemy.checkGameplayObjectInteraction(enemy, graphicsContext2D);
-
         player.placeBombAction(player, graphicsContext2D);
         enemy.placeBombAction(enemy, graphicsContext2D);
+
+        healthBar();
+    }
+
+    private void healthBar() {
         double playerHP = (double) getPlayer().getHealth() / getPlayer().getMaxEntityHealth();
         double enemyHP = (double) getEnemy().getHealth() / getEnemy().getMaxEntityHealth();
         if (playerHP >= 0) {
-            playerHealth.setWidth(healthBarWidth * (playerHP));
+            playerHealth.setWidth(healthBarWidth * playerHP);
             double playerPercentage = playerHP * 100;
             playerHp.setText((int) playerPercentage + "%");
         } else {
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/LocalCreateController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/LocalCreateController.java
index 9284a0f05631f669f065ee4e3b8235b06b713322..d25105570cda2e6ed7f5242707a64ec3d915f4f5 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/LocalCreateController.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/LocalCreateController.java
@@ -4,6 +4,7 @@ import de.hdm_stuttgart.battlearena.Controller.Utilities.SceneLoader;
 import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Persistence;
 import javafx.fxml.FXML;
 import javafx.fxml.Initializable;
+import javafx.scene.control.Label;
 import javafx.scene.control.TitledPane;
 import javafx.scene.control.ToggleButton;
 import javafx.scene.control.ToggleGroup;
@@ -21,6 +22,8 @@ public class LocalCreateController implements Initializable {
     private TitledPane roundsTitledPane;
     @FXML
     private ToggleGroup rounds;
+    @FXML
+    private Label errorMsg;
     private final SceneLoader sceneLoader = new SceneLoader();
     private static final Logger log = LogManager.getLogger(Persistence.class);
 
@@ -34,6 +37,7 @@ public class LocalCreateController implements Initializable {
                 log.info("Match rounds: " + selected.getText());
             }
         });
+//        TODO: toggle for time and other items
     }
 
     @FXML
@@ -44,7 +48,11 @@ public class LocalCreateController implements Initializable {
 
     @FXML
     private void skinSelectionScene() {
-        parent.getChildren().clear();
-        parent.getChildren().add(sceneLoader.loadScene("SkinSelection"));
+        if (rounds.getSelectedToggle() == null) {
+            errorMsg.setText("Please select round");
+        } else {
+            parent.getChildren().clear();
+            parent.getChildren().add(sceneLoader.loadScene("SkinSelection"));
+        }
     }
 }
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/MapSelectionController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/MapSelectionController.java
index bd769f0765bc5ad4b966062eef20363e93bbf090..3a58b3af1a6088dd21a180c746953275619ae6dc 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/MapSelectionController.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/MapSelectionController.java
@@ -9,6 +9,7 @@ import de.hdm_stuttgart.battlearena.Model.Map.Biom;
 import javafx.fxml.FXML;
 import javafx.fxml.FXMLLoader;
 import javafx.fxml.Initializable;
+import javafx.scene.control.Label;
 import javafx.scene.control.TitledPane;
 import javafx.scene.control.ToggleButton;
 import javafx.scene.control.ToggleGroup;
@@ -29,7 +30,9 @@ public class MapSelectionController implements Initializable {
     @FXML
     private TitledPane maps, textures;
     @FXML
-    private ToggleGroup textureToggle;
+    private ToggleGroup textureToggle, mapToggle;
+    @FXML
+    private Label errorMsg;
 
     private String selectedTexture, selectedMap;
 
@@ -72,17 +75,17 @@ public class MapSelectionController implements Initializable {
     }
 
     private void setMap() {
-        ToggleGroup group = new ToggleGroup();
+        mapToggle = new ToggleGroup();
 
         for (MapData coreMap : coreMaps) {
             ToggleButton toggleButton = new ToggleButton(coreMap.getMapName());
-            toggleButton.setToggleGroup(group);
+            toggleButton.setToggleGroup(mapToggle);
             boxBox.getChildren().add(toggleButton);
         }
 
-        group.selectedToggleProperty().addListener((observableValue, oldToggle, newToggle) -> {
-            if (group.getSelectedToggle() != null) {
-                ToggleButton selected = (ToggleButton) group.getSelectedToggle();
+        mapToggle.selectedToggleProperty().addListener((observableValue, oldToggle, newToggle) -> {
+            if (mapToggle.getSelectedToggle() != null) {
+                ToggleButton selected = (ToggleButton) mapToggle.getSelectedToggle();
                 mapIndex = boxBox.getChildren().indexOf(selected);
                 selectedMap = selected.getText();
                 maps.setText(selectedMap);
@@ -92,15 +95,21 @@ public class MapSelectionController implements Initializable {
 
     @FXML
     private void gameScene() {
-        try {
-            RuntimeInfo.getInstance().setGameMap(coreMaps.get(mapIndex));
-            log.info("Selected map: " + selectedMap);
-            log.info("Selected texture: " + selectedTexture);
-            parent.getScene().setRoot(FXMLLoader.load(Objects.requireNonNull(getClass().getResource("/fxml/GameScene.fxml"))));
-            RuntimeInfo.getInstance().setGameState(GameState.PLAYING);
-        } catch (IOException e) {
-            log.error(e);
-            throw new RuntimeException();
+        if (mapToggle.getSelectedToggle() == null) {
+            errorMsg.setText("Please select a map");
+        } else if (textureToggle.getSelectedToggle() == null) {
+            errorMsg.setText("Please select a texture");
+        } else {
+            try {
+                RuntimeInfo.getInstance().setGameMap(coreMaps.get(mapIndex));
+                log.info("Selected map: " + selectedMap);
+                log.info("Selected texture: " + selectedTexture);
+                parent.getScene().setRoot(FXMLLoader.load(Objects.requireNonNull(getClass().getResource("/fxml/GameScene.fxml"))));
+                RuntimeInfo.getInstance().setGameState(GameState.PLAYING);
+            } catch (IOException e) {
+                log.error(e);
+                throw new RuntimeException();
+            }
         }
     }
 
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/MenuBorderPaneController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/MenuBorderPaneController.java
index 8b861d21b43392e78fa90bbac0297ed08817a49f..550fe92967678b0752a46bb94a39543c8859dd36 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/MenuBorderPaneController.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/MenuBorderPaneController.java
@@ -3,18 +3,23 @@ package de.hdm_stuttgart.battlearena.Controller;
 import de.hdm_stuttgart.battlearena.Controller.Enum.GameState;
 import de.hdm_stuttgart.battlearena.Controller.Utilities.CreateMediaPlayer;
 import de.hdm_stuttgart.battlearena.Controller.Utilities.SceneLoader;
+import de.hdm_stuttgart.battlearena.Main.Driver;
 import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.ENUMs.AccountType;
 import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Persistence;
 import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.RuntimeInfo;
 import javafx.fxml.FXML;
 import javafx.fxml.Initializable;
+import javafx.fxml.LoadException;
 import javafx.geometry.Rectangle2D;
 import javafx.scene.control.Button;
 import javafx.scene.image.ImageView;
 import javafx.scene.layout.StackPane;
+import javafx.scene.media.MediaException;
 import javafx.scene.media.MediaPlayer;
 import javafx.scene.media.MediaView;
 import javafx.stage.Screen;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.io.File;
 import java.net.URL;
@@ -34,11 +39,12 @@ public class MenuBorderPaneController implements Initializable {
     private final String[] videoFiles = {"depression", "cpr", "allMyFellas", "minecraftCat3", "steak", "wooOOoo", "myMind", "gender", "dogCheese", "gta", "cat", "bobama", "roomba", "firework", "cheezburger",
             "kangaroo", "lifeCouldBeMonke", "seal", "humping", "slap", "rolling", "spoderman", "imNotYou", "email", "parkingTickets", "russianKid", "rejectHumanity", "horse", "catSitting", "pablo", "holyCrap",
             "lessGoo", "sadCat", "basketball", "yoinkySploinky", "spinSlot", "justTheTwoOfUs", "denied", "msPuff", "=D", "banana", "chaCha", "async", "sadHorse", "minecraftCat", "muecke", "top10Cats", "dog",
-            "pot", "catRave", "mineCraftCat2", "defense", "singingCat", "tutel", "catEating", "catJump", "bear", "pancake", "frog", "gtfo", "carl", "dog2", "slippery", "wolf", "legCat", "sad", "waaahhh"};
+            "pot", "catRave", "mineCraftCat2", "defense", "singingCat", "rainbow", "tutel", "catEating", "catJump", "bear", "pancake", "frog", "gtfo", "carl", "dog2", "slippery", "wolf", "legCat", "sad", "waaahhh"};
 
     List<String> shuffledVideos = Arrays.asList(videoFiles);
     Rectangle2D screen = Screen.getPrimary().getVisualBounds();
     RuntimeInfo runtimeInfo = RuntimeInfo.getInstance();
+    private static final Logger log = LogManager.getLogger(MenuBorderPaneController.class);
 
     @Override
     public void initialize(URL url, ResourceBundle resourceBundle) {
@@ -53,7 +59,6 @@ public class MenuBorderPaneController implements Initializable {
         imgRight.setPreserveRatio(true);
         imgLeft.setFitWidth(imageWidth);
         imgLeft.setPreserveRatio(true);
-
         easterEgg();
 
 //      shuffle meme order
@@ -68,7 +73,6 @@ public class MenuBorderPaneController implements Initializable {
             }
         });
 
-
         btnLeft.setOnMouseClicked(mouseEvent -> {
 //            make background music continue play after there is no meme left
             if (videoCounter == shuffledVideos.size()) {
@@ -82,13 +86,17 @@ public class MenuBorderPaneController implements Initializable {
             if (videoCounter < videoFiles.length) {
                 String nextVideo = shuffledVideos.get(videoCounter);
                 runtimeInfo.setGameState(GameState.NONE);
-                mediaPlayer = new CreateMediaPlayer().getMediaPlayer(mediaView, new File("src/main/resources/videos/" + nextVideo + ".mp4"), false);
-                mediaView = new MediaView(mediaPlayer);
-                center.getChildren().add(mediaView);
-                mediaPlayer.setOnEndOfMedia(() -> {
-                    center.getChildren().remove(mediaView);
-                    runtimeInfo.setGameState(GameState.MENU);
-                });
+                try {
+                    mediaPlayer = new CreateMediaPlayer().getMediaPlayer(mediaView, new File("src/main/resources/videos/" + nextVideo + ".mp4"), false);
+                    mediaView = new MediaView(mediaPlayer);
+                    center.getChildren().add(mediaView);
+                    mediaPlayer.setOnEndOfMedia(() -> {
+                        center.getChildren().remove(mediaView);
+                        runtimeInfo.setGameState(GameState.MENU);
+                    });
+                } catch (MediaException e) {
+                    log.error(e);
+                }
             }
             videoCounter++;
         });
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/SettingsController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/SettingsController.java
index 195aaaa6af32a6356b9e4ee94d1e704d96b45fae..36a85f3392ca65235a13d57c8a246b04ffc05c63 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/SettingsController.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/SettingsController.java
@@ -2,6 +2,7 @@ package de.hdm_stuttgart.battlearena.Controller;
 
 import de.hdm_stuttgart.battlearena.Controller.Enum.GameState;
 import de.hdm_stuttgart.battlearena.Controller.Utilities.SceneLoader;
+import de.hdm_stuttgart.battlearena.Main.Driver;
 import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Persistence;
 import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.RuntimeInfo;
 import de.hdm_stuttgart.battlearena.Model.Sound.MusicPlayer;
@@ -9,8 +10,12 @@ import de.hdm_stuttgart.battlearena.Model.Sound.SoundEffects;
 import javafx.fxml.FXML;
 import javafx.fxml.FXMLLoader;
 import javafx.fxml.Initializable;
+import javafx.fxml.LoadException;
 import javafx.scene.control.Slider;
 import javafx.scene.layout.VBox;
+import javafx.scene.media.MediaException;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.io.IOException;
 import java.net.URL;
@@ -27,6 +32,7 @@ public class SettingsController implements Initializable {
     private final Persistence persistence = Persistence.getInstance();
     private final MusicPlayer player = MusicPlayer.getInstance();
     private final SoundEffects sfx = new SoundEffects();
+    private static final Logger log = LogManager.getLogger(SettingsController.class);
 
     @Override
     public void initialize(URL url, ResourceBundle resourceBundle) {
@@ -36,9 +42,12 @@ public class SettingsController implements Initializable {
 
     @FXML
     private void creditScene() throws IOException {
-        RuntimeInfo.getInstance().setGameState(GameState.NONE);
-        parent.getChildren().clear();
-        parent.getScene().setRoot(FXMLLoader.load(Objects.requireNonNull(getClass().getResource("/fxml/credits.fxml"))));
+        try {
+            RuntimeInfo.getInstance().setGameState(GameState.NONE);
+            parent.getScene().setRoot(FXMLLoader.load(Objects.requireNonNull(getClass().getResource("/fxml/credits.fxml"))));
+        } catch (LoadException e) {
+            log.error(e);
+        }
     }
 
     @FXML
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/SkinSelectionController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/SkinSelectionController.java
index 6c33ca6e90bf1e51034774959e53b53f7b2c1aa0..bd7dd2b91206e15e3ea8838388e3bc0262a0d35b 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/SkinSelectionController.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/SkinSelectionController.java
@@ -6,6 +6,7 @@ import de.hdm_stuttgart.battlearena.Model.Entity.EntityClass;
 import javafx.fxml.FXML;
 import javafx.fxml.Initializable;
 import javafx.geometry.Rectangle2D;
+import javafx.scene.control.Label;
 import javafx.scene.control.ToggleButton;
 import javafx.scene.control.ToggleGroup;
 import javafx.scene.image.ImageView;
@@ -24,6 +25,8 @@ public class SkinSelectionController implements Initializable {
     private ToggleGroup playerOne, playerTwo;
     @FXML
     private ImageView playerOne1, playerOne2, playerOne3, playerTwo1, playerTwo2, playerTwo3;
+    @FXML
+    private Label errorMsg;
     private String playerOneSkin, playerTwoSkin;
     private final RuntimeInfo runtimeInfo = RuntimeInfo.getInstance();
     private static final Logger log = LogManager.getLogger(MapSelectionController.class);
@@ -86,9 +89,13 @@ public class SkinSelectionController implements Initializable {
 
     @FXML
     private void gameScene() {
-        log.info("Player 1 skin: " + playerOneSkin);
-        log.info("Player 2 skin: " + playerTwoSkin);
-        parent.getChildren().clear();
-        parent.getChildren().add(new SceneLoader().loadScene("MapSelection"));
+        if (playerOne.getSelectedToggle() == null || playerTwo.getSelectedToggle() == null) {
+            errorMsg.setText("Please select a skin!");
+        } else {
+            log.info("Player 1 skin: " + playerOneSkin);
+            log.info("Player 2 skin: " + playerTwoSkin);
+            parent.getChildren().clear();
+            parent.getChildren().add(new SceneLoader().loadScene("MapSelection"));
+        }
     }
 }
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/Utilities/CreateMediaPlayer.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/Utilities/CreateMediaPlayer.java
index 4bf6c165db835d9908078118b40628cbfbc2350a..77b75f557afdfa53dcb6b66fe78603e873be2385 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/Utilities/CreateMediaPlayer.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/Utilities/CreateMediaPlayer.java
@@ -2,13 +2,14 @@ package de.hdm_stuttgart.battlearena.Controller.Utilities;
 
 import javafx.scene.layout.BorderPane;
 import javafx.scene.media.Media;
+import javafx.scene.media.MediaException;
 import javafx.scene.media.MediaPlayer;
 import javafx.scene.media.MediaView;
 
 import java.io.File;
 
 public class CreateMediaPlayer {
-    public MediaPlayer getMediaPlayer(MediaView mediaView, File file, boolean isFullscreen, BorderPane... parent) {
+    public MediaPlayer getMediaPlayer(MediaView mediaView, File file, boolean isFullscreen, BorderPane... parent) throws MediaException {
         Media media = new Media(file.toURI().toString());
         MediaPlayer mediaPlayer = new MediaPlayer(media);
 
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Main/Driver.java b/src/main/java/de/hdm_stuttgart/battlearena/Main/Driver.java
index 83297700dd3dff0d7550224eef882ca59a72d8e4..2a12b7cc499eb7f2caf792c736de439c1fe4201a 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Main/Driver.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Main/Driver.java
@@ -9,6 +9,7 @@ import javafx.application.Application;
 import javafx.application.Platform;
 import javafx.event.EventHandler;
 import javafx.fxml.FXMLLoader;
+import javafx.fxml.LoadException;
 import javafx.geometry.Rectangle2D;
 import javafx.scene.Parent;
 import javafx.scene.Scene;
@@ -30,6 +31,7 @@ public class Driver extends Application {
     Rectangle2D screen = Screen.getPrimary().getVisualBounds();
 
     InputHandler inputHandler = InputHandler.getInstance();
+    Parent root;
 
 
 
@@ -40,8 +42,11 @@ public class Driver extends Application {
         Font.loadFont(getClass().getResourceAsStream("/fonts/AmaticSC-Bold.ttf"), 50);
         Font.loadFont(getClass().getResourceAsStream("/fonts/Arthemis-mLA22.ttf"), 50);
         Font.loadFont(getClass().getResourceAsStream("/fonts/ShadowsIntoLight-Regular.ttf"), 50);
-
-        Parent root =  FXMLLoader.load(Objects.requireNonNull(getClass().getResource("/fxml/Intro.fxml")));
+        try {
+            root = FXMLLoader.load(Objects.requireNonNull(getClass().getResource("/fxml/Intro.fxml")));
+        } catch (LoadException e) {
+            root = FXMLLoader.load(Objects.requireNonNull(getClass().getResource("/fxml/LoadingScreen.fxml")));
+        }
 
         Scene scene = new Scene(root);
 
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/Player.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/Player.java
index b9ca0d85c98297bc29fb2bc01907268aeeb41e7e..ece752eefc537363b266a5074b5d83a6b90fd629 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/Player.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Entity/Player.java
@@ -538,6 +538,7 @@ class Player implements IEntity {
 
             blastradius = updateBlastradius(blastradius);
             if (isBigBombItemFrame && !isTeleportItemFrame) {
+                sfx.playSoundEffectOnce(SFX.BOMB);
                 log.debug("We have Big_Bomb ItemFrames in the List");
                 bombPlacementRate = updateBombPlacementRate(bombPlacementRate);
                 int xTile = (pixelpadding + mapPosX) / scaledTileSize;
@@ -576,6 +577,7 @@ class Player implements IEntity {
                 removeMarker(markerPlacedPlayerTwo);
                 isTeleportItemFrame = false;
             } else if (!isTeleportItemFrame) {
+                sfx.playSoundEffectOnce(SFX.BOMB);
                 log.debug("No BigBomb Itemframes in the List");
                 bombPlacementRate = bombReducedPlacementRate;
                 int xTile = (pixelpadding + mapPosX) / scaledTileSize;
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/ConnectionHandler.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/ConnectionHandler.java
index c1caafadcea8175884a736e19db31a4164e9bb08..48c31a576c546179217c67ec02df6f7041b555ea 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/ConnectionHandler.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/ConnectionHandler.java
@@ -36,7 +36,6 @@ public class ConnectionHandler {
 
         ConnectionThread connectionthread = new ConnectionThread(client);
         connectionthread.start();
-
     }
 
     private static class ConnectionThread extends Thread {
@@ -49,6 +48,7 @@ public class ConnectionHandler {
         public void run() {
             try {
                 while (!Thread.interrupted()) {
+                    System.out.println(Arrays.toString(coordinates));
                     int[] cords = client.sendcords(coordinates);
                     enemyX = cords[0];
                     enemyY = cords[1];
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/Server.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/Server.java
index 32ee4320d12999d77fc19bb1b4deae32433d779e..946bf73ae679fd9072b5706157079a968a7c4dd8 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/Server.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Multiplayer/Server.java
@@ -77,17 +77,13 @@ public class Server {
             this.clientSocket = socket;
         }
 
-        public void run() {
-            ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
-
-            executorService.scheduleAtFixedRate(() -> {
+        public synchronized void run() {
                 try {
                     BufferedReader localIn = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
                     PrintWriter localOut = new PrintWriter(clientSocket.getOutputStream(), true);
 
-                    String inputLine = localIn.readLine();
-
-                    if (inputLine != null) {
+                    String inputLine;
+                    while ((inputLine = localIn.readLine()) != null) {  //only runs if there is a request from a server
                         // Assuming that the input line is a comma-separated list of integers
                         String[] coordinates = inputLine.split(",");
                         cords = new int[coordinates.length];
@@ -157,27 +153,14 @@ public class Server {
 
                         localOut.println(Arrays.toString(returncords));
                         localOut.flush();
-                    }
 
-                    log.info("Player (X Y) : " + px + " " + py + " Attacking : " + playerAttacking + " direction : " + playerWalkDirection + " HP: " + playerHealth);
-                    log.info("Enemy (X Y) : " + enemyx + " " + enemyy + " Attacking : " + enemyAttacking + " direction : " + enemyWalkDirection + " HP: " + enemyHealth);
+                        log.info("Player (X Y) : " + px + " " + py + " Attacking : " + playerAttacking + " direction : " + playerWalkDirection + " HP: " + playerHealth);
+                        log.info("Enemy (X Y) : " + enemyx + " " + enemyy + " Attacking : " + enemyAttacking + " direction : " + enemyWalkDirection + " HP: " + enemyHealth);
 
-                    //check if server was shut down:W
-                    if (!isServerRunning) {
-                        executorService.shutdown();
-                        try {
-                            if (!executorService.awaitTermination(5, TimeUnit.SECONDS)) {
-                                executorService.shutdownNow();
-                            }
-                        } catch (InterruptedException e) {
-                            log.error("Error waiting for executor service termination: " + e.getMessage());
-                        }
                     }
-
                 } catch (IOException e) {
                     throw new RuntimeException(e);
                 }
-            }, 0, 50, TimeUnit.MILLISECONDS);
         }
     }
 
diff --git a/src/main/resources/fxml/LocalCreate.fxml b/src/main/resources/fxml/LocalCreate.fxml
index 50ecdfe94ed078789b47d315fe133810e54bdc28..8096d5ab272e22ce25d356d93dbf6c6543f0f362 100644
--- a/src/main/resources/fxml/LocalCreate.fxml
+++ b/src/main/resources/fxml/LocalCreate.fxml
@@ -3,6 +3,7 @@
 <?import javafx.geometry.Insets?>
 <?import javafx.scene.control.Accordion?>
 <?import javafx.scene.control.Button?>
+<?import javafx.scene.control.Label?>
 <?import javafx.scene.control.RadioButton?>
 <?import javafx.scene.control.ScrollPane?>
 <?import javafx.scene.control.TitledPane?>
@@ -116,6 +117,8 @@
          </children>
       </HBox>
       <Pane VBox.vgrow="ALWAYS" />
+      <Label fx:id="errorMsg" />
+      <Pane VBox.vgrow="ALWAYS" />
       <Button mnemonicParsing="false" onAction="#skinSelectionScene" text="Next" />
       <Pane VBox.vgrow="ALWAYS" />
       <Button mnemonicParsing="false" onAction="#backButton" text="Back">
diff --git a/src/main/resources/fxml/MapSelection.fxml b/src/main/resources/fxml/MapSelection.fxml
index 0d975539ecdb7d9a755ef8584c8fddb424ab7459..dbd32a672e977a1d93ff0d4900d4cf32483a7b60 100644
--- a/src/main/resources/fxml/MapSelection.fxml
+++ b/src/main/resources/fxml/MapSelection.fxml
@@ -3,6 +3,7 @@
 <?import javafx.geometry.Insets?>
 <?import javafx.scene.control.Accordion?>
 <?import javafx.scene.control.Button?>
+<?import javafx.scene.control.Label?>
 <?import javafx.scene.control.ScrollPane?>
 <?import javafx.scene.control.TitledPane?>
 <?import javafx.scene.control.ToggleButton?>
@@ -12,7 +13,6 @@
 <?import javafx.scene.layout.VBox?>
 <?import javafx.scene.text.Text?>
 
-
 <HBox xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.hdm_stuttgart.battlearena.Controller.MapSelectionController">
    <children>
       <Pane HBox.hgrow="ALWAYS" />
@@ -74,6 +74,7 @@
                   <Text fx:id="selectedMapText" strokeType="OUTSIDE" strokeWidth="0.0" />
                </children>
             </HBox>
+            <Label fx:id="errorMsg" />
             <Button mnemonicParsing="false" onAction="#gameScene" text="Start" />
             <Button mnemonicParsing="false" onAction="#backButton" text="Back">
                <VBox.margin>
diff --git a/src/main/resources/fxml/SkinSelection.fxml b/src/main/resources/fxml/SkinSelection.fxml
index 8e074b509d60f361acb6c7a63073fd407d51dfcc..942da1904c4701291fce7f2b1ab9824ca7538f58 100644
--- a/src/main/resources/fxml/SkinSelection.fxml
+++ b/src/main/resources/fxml/SkinSelection.fxml
@@ -81,6 +81,7 @@
             </ToggleButton>
          </children>
       </HBox>
+      <Label fx:id="errorMsg" />
       <Button mnemonicParsing="false" onAction="#gameScene" text="Next" />
       <Button mnemonicParsing="false" onAction="#backButton" text="Back" />
    </children>
diff --git a/src/main/resources/videos/rainbow.mp4 b/src/main/resources/videos/rainbow.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..9f084db5c1b430ab983f90036cc612a883cd93f1
Binary files /dev/null and b/src/main/resources/videos/rainbow.mp4 differ