diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Persistence.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Persistence.java
index ed590c689081da1173a70e2c12f920f7e9489148..09485bed5dce623ca33d4866542a4db7b498ecf9 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Persistence.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Persistence.java
@@ -74,8 +74,10 @@ public class Persistence {
         try {
             if (account.getAccountType() == AccountType.LOCAL) {
                 statistics = gsonHandler.loadStats();
+                Parser.playerStatsValid(statistics);
             } else {
                 statistics = db.getStatistics(account.getPlayerName());
+                Parser.playerStatsValid(statistics);
             }
             log.info("Player statistics successfully loaded!");
         }
@@ -92,6 +94,9 @@ public class Persistence {
             log.error(e);
             throw new DatabaseException(e.getMessage());
         }
+        catch (ParserException e) {
+            throw new RuntimeException("Player statistics data corrupted!");
+        }
     }
 
     public void loadCoreMaps() throws DatabaseException {
@@ -184,6 +189,7 @@ public class Persistence {
 
     public void savePlayerStatistics() throws DatabaseException{     //on shutdown of game
         try {
+            Parser.playerStatsValid(statistics);
             if (account.getAccountType() == AccountType.LOCAL) {
                 gsonHandler.saveStats(statistics);
             } else if (account.getAccountType() == AccountType.ONLINE) {
@@ -232,7 +238,7 @@ public class Persistence {
         }
     }
 
-    public void updatePlayerStatistics(int kills, int deaths, int gameTime, int blocksDestroyed, boolean gameWon) throws DatabaseException{  //after game round
+    public void updatePlayerStatistics(int kills, int deaths, int gameTime, int blocksDestroyed, boolean gameWon) throws DatabaseException{  //after game round; only update stats in RAM, not in persistence (run savePlayerStatistics() method at end of program to save stats to persistence)
         try {
             Parser.playerStatsValid(new PlayerStatistics(0, 0, kills, deaths, blocksDestroyed, gameTime)); //temp instance of PLayerStatistics to validate new values
             statistics.addKills(kills);
@@ -461,14 +467,23 @@ public class Persistence {
             if (hash.equals(db.checkCredentials(userName))) {
                 PlayerAccount playerAccount = new PlayerAccount(userName, hash, AccountType.ONLINE);
                 gsonHandler.saveAccount(playerAccount);
+                gsonHandler.loadAccount();
                 db.getStatistics(userName);
+                Parser.playerStatsValid(statistics);
+                log.info("Login successful!");
             } else {
                 throw new DatabaseException();
             }
-        } catch (GSONException | SQLException e) {
+        }
+        catch (GSONException | SQLException e) {
             throw new RuntimeException(e);
-        } catch (DatabaseException e) {
-            throw new DatabaseException("Wrong password");
+        }
+        catch (DatabaseException e) {
+            throw new DatabaseException("Wrong password!");
+        }
+        catch (ParserException e) {
+            throw new DatabaseException("Player statistics data corrupted!");
         }
     }
+
 }
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/RuntimeInfo.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/RuntimeInfo.java
index 5564faa20622c1380dbaaaf80e2df616cebe5c7d..38ae10a6052607adc5c2279eb8058f1da8107551 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/RuntimeInfo.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/RuntimeInfo.java
@@ -24,28 +24,6 @@ public class RuntimeInfo {
     private EntityClass playerOneClass = EntityClass.HUMAN;
     private EntityClass playerTwoClass = EntityClass.HUMAN;
 
-    //Thread Status-Updates
-    private ThreadStatus threadStartup1;
-    private String threadStartup1Msg;
-    private ThreadStatus threadStartup2;
-    private String threadStartup2Msg;
-    private ThreadStatus threadUpdateMaps;
-    private String threadUpdateMapsMsg;
-    private ThreadStatus threadUpdateStats;
-    private String threadUpdateStatsMsg;
-    private ThreadStatus threadDLCommMap;
-    private String threadDLCommMapMsg;
-    private ThreadStatus threadSaveCommMap;
-    private String threadSaveCommMapMsg;
-    private ThreadStatus threadCommMapList;
-    private String threadCommMapListMsg;
-    private ThreadStatus threadRstStats;
-    private String threadRstStatsMsg;
-    private ThreadStatus threadSaveStats;
-    private String threadSaveStatsMsg;
-    private ThreadStatus threadCreateAcc;
-    private String threadCreateAccMsg;
-
     //Stats Tracking during Gameplay
     private int kills;
     private int deaths;
@@ -122,166 +100,6 @@ public class RuntimeInfo {
         return mapDataGame;
     }
 
-    public ThreadStatus getThreadStartup1() {
-        return threadStartup1;
-    }
-
-    public void setThreadStartup1(ThreadStatus threadStartup1) {
-        this.threadStartup1 = threadStartup1;
-    }
-
-    public String getThreadStartup1Msg() {
-        return threadStartup1Msg;
-    }
-
-    public void setThreadStartup1Msg(String threadStartup1Msg) {
-        this.threadStartup1Msg = threadStartup1Msg;
-    }
-
-    public ThreadStatus getThreadStartup2() {
-        return threadStartup2;
-    }
-
-    public void setThreadStartup2(ThreadStatus threadStartup2) {
-        this.threadStartup2 = threadStartup2;
-    }
-
-    public String getThreadStartup2Msg() {
-        return threadStartup2Msg;
-    }
-
-    public void setThreadStartup2Msg(String threadStartup2Msg) {
-        this.threadStartup2Msg = threadStartup2Msg;
-    }
-
-    public ThreadStatus getThreadUpdateMaps() {
-        return threadUpdateMaps;
-    }
-
-    public void setThreadUpdateMaps(ThreadStatus threadUpdateMaps) {
-        this.threadUpdateMaps = threadUpdateMaps;
-    }
-
-    public String getThreadUpdateMapsMsg() {
-        return threadUpdateMapsMsg;
-    }
-
-    public void setThreadUpdateMapsMsg(String threadUpdateMapsMsg) {
-        this.threadUpdateMapsMsg = threadUpdateMapsMsg;
-    }
-
-    public ThreadStatus getThreadUpdateStats() {
-        return threadUpdateStats;
-    }
-
-    public void setThreadUpdateStats(ThreadStatus threadUpdateStats) {
-        this.threadUpdateStats = threadUpdateStats;
-    }
-
-    public String getThreadUpdateStatsMsg() {
-        return threadUpdateStatsMsg;
-    }
-
-    public void setThreadUpdateStatsMsg(String threadUpdateStatsMsg) {
-        this.threadUpdateStatsMsg = threadUpdateStatsMsg;
-    }
-
-    public ThreadStatus getThreadDLCommMap() {
-        return threadDLCommMap;
-    }
-
-    public void setThreadDLCommMap(ThreadStatus threadDLCommMap) {
-        this.threadDLCommMap = threadDLCommMap;
-    }
-
-    public String getThreadDLCommMapMsg() {
-        return threadDLCommMapMsg;
-    }
-
-    public void setThreadDLCommMapMsg(String threadDLCommMapMsg) {
-        this.threadDLCommMapMsg = threadDLCommMapMsg;
-    }
-
-    public ThreadStatus getThreadSaveCommMap() {
-        return threadSaveCommMap;
-    }
-
-    public void setThreadSaveCommMap(ThreadStatus threadSaveCommMap) {
-        this.threadSaveCommMap = threadSaveCommMap;
-    }
-
-    public String getThreadSaveCommMapMsg() {
-        return threadSaveCommMapMsg;
-    }
-
-    public void setThreadSaveCommMapMsg(String threadSaveCommMapMsg) {
-        this.threadSaveCommMapMsg = threadSaveCommMapMsg;
-    }
-
-    public ThreadStatus getThreadCommMapList() {
-        return threadCommMapList;
-    }
-
-    public void setThreadCommMapList(ThreadStatus threadCommMapList) {
-        this.threadCommMapList = threadCommMapList;
-    }
-
-    public String getThreadCommMapListMsg() {
-        return threadCommMapListMsg;
-    }
-
-    public void setThreadCommMapListMsg(String threadCommMapListMsg) {
-        this.threadCommMapListMsg = threadCommMapListMsg;
-    }
-
-    public ThreadStatus getThreadRstStats() {
-        return threadRstStats;
-    }
-
-    public void setThreadRstStats(ThreadStatus threadRstStats) {
-        this.threadRstStats = threadRstStats;
-    }
-
-    public String getThreadRstStatsMsg() {
-        return threadRstStatsMsg;
-    }
-
-    public void setThreadRstStatsMsg(String threadRstStatsMsg) {
-        this.threadRstStatsMsg = threadRstStatsMsg;
-    }
-
-    public ThreadStatus getThreadSaveStats() {
-        return threadSaveStats;
-    }
-
-    public void setThreadSaveStats(ThreadStatus threadSaveStats) {
-        this.threadSaveStats = threadSaveStats;
-    }
-
-    public String getThreadSaveStatsMsg() {
-        return threadSaveStatsMsg;
-    }
-
-    public void setThreadSaveStatsMsg(String threadSaveStatsMsg) {
-        this.threadSaveStatsMsg = threadSaveStatsMsg;
-    }
-
-    public ThreadStatus getThreadCreateAcc() {
-        return threadCreateAcc;
-    }
-
-    public void setThreadCreateAcc(ThreadStatus threadCreateAcc) {
-        this.threadCreateAcc = threadCreateAcc;
-    }
-
-    public String getThreadCreateAccMsg() {
-        return threadCreateAccMsg;
-    }
-
-    public void setThreadCreateAccMsg(String threadCreateAccMsg) {
-        this.threadCreateAccMsg = threadCreateAccMsg;
-    }
-
     public int getKills() {
         return kills;
     }
@@ -290,6 +108,10 @@ public class RuntimeInfo {
         this.kills = kills;
     }
 
+    public void addKill() {
+        kills = kills + 1;
+    }
+
     public int getDeaths() {
         return deaths;
     }
@@ -298,6 +120,10 @@ public class RuntimeInfo {
         this.deaths = deaths;
     }
 
+    public void addDeath() {
+        deaths = deaths + 1;
+    }
+
     public int getBlocksDestroyed() {
         return blocksDestroyed;
     }
@@ -306,6 +132,10 @@ public class RuntimeInfo {
         this.blocksDestroyed = blocksDestroyed;
     }
 
+    public void addBlockDestroyed() {
+        blocksDestroyed = blocksDestroyed + 1;
+    }
+
     public int getGameTime() {
         return gameTime;
     }
@@ -314,6 +144,10 @@ public class RuntimeInfo {
         this.gameTime = gameTime;
     }
 
+    public void addGameTime() {
+        gameTime = gameTime + 1;
+    }
+
     public boolean isGameWon() {
         return gameWon;
     }
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadCreateAcc.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadCreateAcc.java
index e89ddac66104f2cb0603cf82060beab366839d3a..e7f37c6deec9db193b2f3ac8410cf28cbf44b202 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadCreateAcc.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadCreateAcc.java
@@ -16,19 +16,19 @@ public class ThreadCreateAcc extends Thread{
     public void run() {
 
         Persistence persistenceInst = Persistence.getInstance();
-        RuntimeInfo runtimeInfoInst = RuntimeInfo.getInstance();
+        Threads threadsInstance = Threads.getInstance();
 
         try {
-            runtimeInfoInst.setThreadCreateAccMsg("");
-            runtimeInfoInst.setThreadCreateAcc(ThreadStatus.RUNNING);
+            threadsInstance.setThreadCreateAccMsg("");
+            threadsInstance.setThreadCreateAcc(ThreadStatus.RUNNING);
             persistenceInst.createAccount(playerName, password, type);
             log.info("Create account thread finished successfully!");
-            runtimeInfoInst.setThreadCreateAcc(ThreadStatus.FINISHED);
+            threadsInstance.setThreadCreateAcc(ThreadStatus.FINISHED);
         } catch (Exception e) {
             log.error(e);
-            runtimeInfoInst.setThreadCreateAccMsg(e.getMessage());
+            threadsInstance.setThreadCreateAccMsg(e.getMessage());
             log.info("Create account thread failed!");
-            runtimeInfoInst.setThreadCreateAcc(ThreadStatus.FAILED);
+            threadsInstance.setThreadCreateAcc(ThreadStatus.FAILED);
         }
     }
 
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadDLCommMap.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadDLCommMap.java
index 8f83215abbb4dfe4f45b64f7ae6f8fb445158311..76bf3c0ebcc16150b3e34d907faaf0b5c33794e7 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadDLCommMap.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadDLCommMap.java
@@ -13,19 +13,19 @@ public class ThreadDLCommMap extends Thread{
     public void run() {
 
         Persistence persistenceInst = Persistence.getInstance();
-        RuntimeInfo runtimeInfoInst = RuntimeInfo.getInstance();
+        Threads threadsInstance = Threads.getInstance();
 
         try {
-            runtimeInfoInst.setThreadDLCommMapMsg("");
-            runtimeInfoInst.setThreadDLCommMap(ThreadStatus.RUNNING);
+            threadsInstance.setThreadDLCommMapMsg("");
+            threadsInstance.setThreadDLCommMap(ThreadStatus.RUNNING);
             persistenceInst.getCommunityMap(mapID);
             log.info("Download Community-Map thread finished successfully!");
-            runtimeInfoInst.setThreadDLCommMap(ThreadStatus.FINISHED);
+            threadsInstance.setThreadDLCommMap(ThreadStatus.FINISHED);
         } catch (Exception e) {
             log.error(e);
-            runtimeInfoInst.setThreadDLCommMapMsg(e.getMessage());
+            threadsInstance.setThreadDLCommMapMsg(e.getMessage());
             log.info("Download Community-Map thread failed!");
-            runtimeInfoInst.setThreadDLCommMap(ThreadStatus.FAILED);
+            threadsInstance.setThreadDLCommMap(ThreadStatus.FAILED);
         }
     }
 
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadGetMapList.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadGetMapList.java
index 49478417c2fcdc7268a18d6f78589858bc2d8d8c..0062eaf71c227ed5aa6614307e6024357f691560 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadGetMapList.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadGetMapList.java
@@ -12,19 +12,19 @@ public class ThreadGetMapList extends Thread {
     public void run() {
 
         Persistence persistenceInst = Persistence.getInstance();
-        RuntimeInfo runtimeInfoInst = RuntimeInfo.getInstance();
+        Threads threadsInstance = Threads.getInstance();
 
         try {
-            runtimeInfoInst.setThreadCommMapListMsg("");
-            runtimeInfoInst.setThreadCommMapList(ThreadStatus.RUNNING);
+            threadsInstance.setThreadCommMapListMsg("");
+            threadsInstance.setThreadCommMapList(ThreadStatus.RUNNING);
             persistenceInst.createRemoteCommunityMapsList();
             log.info("Retrieving Community-Map-List thread finished successfully!");
-            runtimeInfoInst.setThreadCommMapList(ThreadStatus.FINISHED);
+            threadsInstance.setThreadCommMapList(ThreadStatus.FINISHED);
         } catch (Exception e) {
             log.error(e);
-            runtimeInfoInst.setThreadCommMapListMsg(e.getMessage());
+            threadsInstance.setThreadCommMapListMsg(e.getMessage());
             log.info("Retrieving Community-Map-List thread failed!");
-            runtimeInfoInst.setThreadCommMapList(ThreadStatus.FAILED);
+            threadsInstance.setThreadCommMapList(ThreadStatus.FAILED);
         }
     }
 
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadLogin.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadLogin.java
new file mode 100644
index 0000000000000000000000000000000000000000..b6bb5e6c7c647dfe372702933672eead65c56b02
--- /dev/null
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadLogin.java
@@ -0,0 +1,39 @@
+package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes;
+
+import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.ENUMs.ThreadStatus;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+public class ThreadLogin extends Thread{
+
+    private static final Logger log = LogManager.getLogger(ThreadLogin.class);
+    private String userName;
+    private String password;
+
+    @Override
+    public void run() {
+
+        Persistence persistenceInst = Persistence.getInstance();
+        Threads threadsInstance = Threads.getInstance();
+
+        try {
+            threadsInstance.setThreadLoginMsg("");
+            threadsInstance.setThreadLogin(ThreadStatus.RUNNING);
+            persistenceInst.login(userName, password);
+            log.info("Login thread finished successfully!");
+            threadsInstance.setThreadLogin(ThreadStatus.FINISHED);
+        } catch (Exception e) {
+            log.error(e);
+            threadsInstance.setThreadLoginMsg(e.getMessage());
+            log.info("Login thread failed!");
+            threadsInstance.setThreadLogin(ThreadStatus.FAILED);
+        }
+    }
+
+    public void startThread(String userName, String password){
+        this.userName = userName;
+        this.password = password;
+        start();
+    }
+
+}
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadRstStats.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadRstStats.java
index 117fd08d7655da86f083dd6774342db8a97dee64..c815c70fc73043c305ddad9e575ac662207a50ac 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadRstStats.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadRstStats.java
@@ -12,19 +12,19 @@ public class ThreadRstStats extends Thread {
     public void run() {
 
         Persistence persistenceInst = Persistence.getInstance();
-        RuntimeInfo runtimeInfoInst = RuntimeInfo.getInstance();
+        Threads threadsInstance = Threads.getInstance();
 
         try {
-            runtimeInfoInst.setThreadRstStatsMsg("");
-            runtimeInfoInst.setThreadRstStats(ThreadStatus.RUNNING);
+            threadsInstance.setThreadRstStatsMsg("");
+            threadsInstance.setThreadRstStats(ThreadStatus.RUNNING);
             persistenceInst.resetPlayerStatistics();
             log.info("Reset Player-Statistics thread finished successfully!");
-            runtimeInfoInst.setThreadRstStats(ThreadStatus.FINISHED);
+            threadsInstance.setThreadRstStats(ThreadStatus.FINISHED);
         } catch (Exception e) {
             log.error(e);
-            runtimeInfoInst.setThreadRstStatsMsg(e.getMessage());
+            threadsInstance.setThreadRstStatsMsg(e.getMessage());
             log.info("Reset Player-Statistics thread failed!");
-            runtimeInfoInst.setThreadRstStats(ThreadStatus.FAILED);
+            threadsInstance.setThreadRstStats(ThreadStatus.FAILED);
         }
     }
 
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadSaveCommMap.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadSaveCommMap.java
index 984c6654c9a0acbea0c7601ab3b9edea8a18ff7e..47877f48acc768333279887fd1a899bdb046ac65 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadSaveCommMap.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadSaveCommMap.java
@@ -14,19 +14,19 @@ public class ThreadSaveCommMap extends Thread{
     public void run() {
 
         Persistence persistenceInst = Persistence.getInstance();
-        RuntimeInfo runtimeInfoInst = RuntimeInfo.getInstance();
+        Threads threadsInstance = Threads.getInstance();
 
         try {
-            runtimeInfoInst.setThreadSaveCommMapMsg("");
-            runtimeInfoInst.setThreadSaveCommMap(ThreadStatus.RUNNING);
+            threadsInstance.setThreadSaveCommMapMsg("");
+            threadsInstance.setThreadSaveCommMap(ThreadStatus.RUNNING);
             persistenceInst.saveCreatedMap(map, doUpload);
             log.info("Uploading Community-Map thread finished successfully!");
-            runtimeInfoInst.setThreadSaveCommMap(ThreadStatus.FINISHED);
+            threadsInstance.setThreadSaveCommMap(ThreadStatus.FINISHED);
         } catch (Exception e) {
             log.error(e);
-            runtimeInfoInst.setThreadSaveCommMapMsg(e.getMessage());
+            threadsInstance.setThreadSaveCommMapMsg(e.getMessage());
             log.info("Uploading Community-Map thread failed!");
-            runtimeInfoInst.setThreadSaveCommMap(ThreadStatus.FAILED);
+            threadsInstance.setThreadSaveCommMap(ThreadStatus.FAILED);
         }
     }
 
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadSaveStats.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadSaveStats.java
index ce753f13a26da1dbfd9976de6ac633a04ff968af..3b6c425300db7c7790908c47e36e2282e788b33e 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadSaveStats.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadSaveStats.java
@@ -12,19 +12,19 @@ public class ThreadSaveStats extends Thread{
     public void run() {
 
         Persistence persistenceInst = Persistence.getInstance();
-        RuntimeInfo runtimeInfoInst = RuntimeInfo.getInstance();
+        Threads threadsInstance = Threads.getInstance();
 
         try {
-            runtimeInfoInst.setThreadSaveStatsMsg("");
-            runtimeInfoInst.setThreadSaveStats(ThreadStatus.RUNNING);
+            threadsInstance.setThreadSaveStatsMsg("");
+            threadsInstance.setThreadSaveStats(ThreadStatus.RUNNING);
             persistenceInst.savePlayerStatistics();
             log.info("Save Player-Statistics thread finished successfully!");
-            runtimeInfoInst.setThreadSaveStats(ThreadStatus.FINISHED);
+            threadsInstance.setThreadSaveStats(ThreadStatus.FINISHED);
         } catch (Exception e) {
             log.error(e);
-            runtimeInfoInst.setThreadSaveStatsMsg(e.getMessage());
+            threadsInstance.setThreadSaveStatsMsg(e.getMessage());
             log.info("Save Player-Statistics thread failed!");
-            runtimeInfoInst.setThreadSaveStats(ThreadStatus.FAILED);
+            threadsInstance.setThreadSaveStats(ThreadStatus.FAILED);
         }
     }
 
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadStartup1.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadStartup1.java
index d7b273ce47aa67bf2c9d1a9326cb7ac5be732cee..3b8016b8ed5629b16ef2d949f6fc9a0376f51ad1 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadStartup1.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadStartup1.java
@@ -12,11 +12,11 @@ public class ThreadStartup1 extends Thread{
     public void run() {
 
         Persistence persistenceInst = Persistence.getInstance();
-        RuntimeInfo runtimeInfoInst = RuntimeInfo.getInstance();
+        Threads threadsInstance = Threads.getInstance();
 
         try {
-            runtimeInfoInst.setThreadStartup1Msg("");
-            runtimeInfoInst.setThreadStartup1(ThreadStatus.RUNNING);
+            threadsInstance.setThreadStartup1Msg("");
+            threadsInstance.setThreadStartup1(ThreadStatus.RUNNING);
             persistenceInst.loadSettings();
             persistenceInst.loadCoreMaps();
             persistenceInst.loadCommunityMaps();
@@ -24,12 +24,12 @@ public class ThreadStartup1 extends Thread{
             persistenceInst.verifyCoreMaps();
             persistenceInst.verifyCommunityMaps();
             log.info("Startup routine part1 complete!");
-            runtimeInfoInst.setThreadStartup1(ThreadStatus.FINISHED);
+            threadsInstance.setThreadStartup1(ThreadStatus.FINISHED);
         } catch (Exception e) {
             log.error(e);
-            runtimeInfoInst.setThreadStartup1Msg(e.getMessage());
+            threadsInstance.setThreadStartup1Msg(e.getMessage());
             log.info("Startup routine part1 failed!");
-            runtimeInfoInst.setThreadStartup1(ThreadStatus.FAILED);
+            threadsInstance.setThreadStartup1(ThreadStatus.FAILED);
         }
     }
 
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadStartup2.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadStartup2.java
index 4fc52e8654ba4827ef5bf22993ade103e6f44eb8..50ba60bf4edc9c10f56ed27e7833a65ae3e808d6 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadStartup2.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadStartup2.java
@@ -13,22 +13,22 @@ public class ThreadStartup2 extends Thread{
     public void run() {
 
         Persistence persistenceInst = Persistence.getInstance();
-        RuntimeInfo runtimeInfoInst = RuntimeInfo.getInstance();
+        Threads threadsInstance = Threads.getInstance();
 
         try {
-            runtimeInfoInst.setThreadStartup2Msg("");
-            runtimeInfoInst.setThreadStartup2(ThreadStatus.RUNNING);
+            threadsInstance.setThreadStartup2Msg("");
+            threadsInstance.setThreadStartup2(ThreadStatus.RUNNING);
             persistenceInst.loadPlayerAccount();
-            if (persistenceInst.getAccount().getAccountType() != AccountType.NONE) {
+            if(persistenceInst.getAccount().getAccountType() != AccountType.NONE){
                 persistenceInst.verifyPlayerAccount();
             }
             log.info("Startup routine part2 complete!");
-            runtimeInfoInst.setThreadStartup2(ThreadStatus.FINISHED);
+            threadsInstance.setThreadStartup2(ThreadStatus.FINISHED);
         } catch (Exception e) {
             log.error(e);
-            runtimeInfoInst.setThreadStartup2Msg(e.getMessage());
+            threadsInstance.setThreadStartup2Msg(e.getMessage());
             log.info("Startup routine part2 failed!");
-            runtimeInfoInst.setThreadStartup2(ThreadStatus.FAILED);
+            threadsInstance.setThreadStartup2(ThreadStatus.FAILED);
         }
     }
 
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadStartup3.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadStartup3.java
new file mode 100644
index 0000000000000000000000000000000000000000..738c4add7276cc2706a23204b0b7daef94e51975
--- /dev/null
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadStartup3.java
@@ -0,0 +1,35 @@
+package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes;
+
+import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.ENUMs.AccountType;
+import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.ENUMs.ThreadStatus;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+public class ThreadStartup3 extends Thread{
+
+    private static final Logger log = LogManager.getLogger(ThreadStartup3.class);
+
+    @Override
+    public void run() {
+
+        Persistence persistenceInst = Persistence.getInstance();
+        Threads threadsInstance = Threads.getInstance();
+
+        try {
+            threadsInstance.setThreadStartup3Msg("");
+            threadsInstance.setThreadStartup3(ThreadStatus.RUNNING);
+            persistenceInst.loadPlayerStatistics();
+            if(persistenceInst.getAccount().getAccountType() != AccountType.NONE){
+                persistenceInst.verifyPlayerAccount();
+            }
+            log.info("Startup routine part3 complete!");
+            threadsInstance.setThreadStartup3(ThreadStatus.FINISHED);
+        } catch (Exception e) {
+            log.error(e);
+            threadsInstance.setThreadStartup3Msg(e.getMessage());
+            log.info("Startup routine part3 failed!");
+            threadsInstance.setThreadStartup3(ThreadStatus.FAILED);
+        }
+    }
+
+}
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadUpdateMaps.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadUpdateMaps.java
index 793298791e2bda9e8da1af2a9796165878863eb7..f0bc303975da0e08d54330a3331e9dca7bee1577 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadUpdateMaps.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadUpdateMaps.java
@@ -12,19 +12,19 @@ public class ThreadUpdateMaps extends Thread{
     public void run() {
 
         Persistence persistenceInst = Persistence.getInstance();
-        RuntimeInfo runtimeInfoInst = RuntimeInfo.getInstance();
+        Threads threadsInstance = Threads.getInstance();
 
         try {
-            runtimeInfoInst.setThreadUpdateMapsMsg("");
-            runtimeInfoInst.setThreadUpdateMaps(ThreadStatus.RUNNING);
+            threadsInstance.setThreadUpdateMapsMsg("");
+            threadsInstance.setThreadUpdateMaps(ThreadStatus.RUNNING);
             persistenceInst.updateCoreMaps();
             log.info("Update Core-Maps thread finished successfully!");
-            runtimeInfoInst.setThreadUpdateMaps(ThreadStatus.FINISHED);
+            threadsInstance.setThreadUpdateMaps(ThreadStatus.FINISHED);
         } catch (Exception e) {
             log.error(e);
-            runtimeInfoInst.setThreadUpdateMapsMsg(e.getMessage());
+            threadsInstance.setThreadUpdateMapsMsg(e.getMessage());
             log.info("Update Core-Maps thread failed!");
-            runtimeInfoInst.setThreadUpdateMaps(ThreadStatus.FAILED);
+            threadsInstance.setThreadUpdateMaps(ThreadStatus.FAILED);
         }
     }
 
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadUpdateStats.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadUpdateStats.java
index f8869a397009d5b29511440ea4843ae5a7382567..44ae6fe13e20f599800784e95dc6b0bd9a8ca9b7 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadUpdateStats.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/ThreadUpdateStats.java
@@ -13,10 +13,11 @@ public class ThreadUpdateStats extends Thread{
 
         Persistence persistenceInst = Persistence.getInstance();
         RuntimeInfo runtimeInfoInst = RuntimeInfo.getInstance();
+        Threads threadsInstance = Threads.getInstance();
 
         try {
-            runtimeInfoInst.setThreadUpdateStatsMsg("");
-            runtimeInfoInst.setThreadUpdateStats(ThreadStatus.RUNNING);
+            threadsInstance.setThreadUpdateStatsMsg("");
+            threadsInstance.setThreadUpdateStats(ThreadStatus.RUNNING);
             persistenceInst.updatePlayerStatistics(runtimeInfoInst.getKills(), runtimeInfoInst.getDeaths(), runtimeInfoInst.getGameTime(), runtimeInfoInst.getBlocksDestroyed(), runtimeInfoInst.isGameWon());
             runtimeInfoInst.setKills(0);
             runtimeInfoInst.setDeaths(0);
@@ -24,12 +25,12 @@ public class ThreadUpdateStats extends Thread{
             runtimeInfoInst.setBlocksDestroyed(0);
             runtimeInfoInst.setGameWon(false);
             log.info("Update statistics thread finished successfully!");
-            runtimeInfoInst.setThreadUpdateStats(ThreadStatus.FINISHED);
+            threadsInstance.setThreadUpdateStats(ThreadStatus.FINISHED);
         } catch (Exception e) {
             log.error(e);
-            runtimeInfoInst.setThreadUpdateStatsMsg(e.getMessage());
+            threadsInstance.setThreadUpdateStatsMsg(e.getMessage());
             log.info("Update statistics thread failed!");
-            runtimeInfoInst.setThreadUpdateStats(ThreadStatus.FAILED);
+            threadsInstance.setThreadUpdateStats(ThreadStatus.FAILED);
         }
     }
 
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Threads.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Threads.java
new file mode 100644
index 0000000000000000000000000000000000000000..ebf4876b70d047545985366e5983fdd7438a97ec
--- /dev/null
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/DataStorage/Classes/Threads.java
@@ -0,0 +1,237 @@
+package de.hdm_stuttgart.battlearena.Model.DataStorage.Classes;
+
+import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.ENUMs.ThreadStatus;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+public class Threads {
+
+    private static final Logger log = LogManager.getLogger(Threads.class);
+    private static final Threads threadsSingleton = new Threads();
+
+    //Thread Status-Updates
+    private ThreadStatus threadStartup1;
+    private String threadStartup1Msg;
+    private ThreadStatus threadStartup2;
+    private String threadStartup2Msg;
+    private ThreadStatus threadStartup3;
+    private String threadStartup3Msg;
+    private ThreadStatus threadUpdateMaps;
+    private String threadUpdateMapsMsg;
+    private ThreadStatus threadUpdateStats;
+    private String threadUpdateStatsMsg;
+    private ThreadStatus threadDLCommMap;
+    private String threadDLCommMapMsg;
+    private ThreadStatus threadSaveCommMap;
+    private String threadSaveCommMapMsg;
+    private ThreadStatus threadCommMapList;
+    private String threadCommMapListMsg;
+    private ThreadStatus threadRstStats;
+    private String threadRstStatsMsg;
+    private ThreadStatus threadSaveStats;
+    private String threadSaveStatsMsg;
+    private ThreadStatus threadCreateAcc;
+    private String threadCreateAccMsg;
+    private ThreadStatus threadLogin;
+    private String threadLoginMsg;
+
+
+
+    private Threads(){};
+    public static Threads getInstance(){
+        return threadsSingleton;
+    }
+
+    public ThreadStatus getThreadStartup1() {
+        return threadStartup1;
+    }
+
+    public void setThreadStartup1(ThreadStatus threadStartup1) {
+        this.threadStartup1 = threadStartup1;
+    }
+
+    public String getThreadStartup1Msg() {
+        return threadStartup1Msg;
+    }
+
+    public void setThreadStartup1Msg(String threadStartup1Msg) {
+        this.threadStartup1Msg = threadStartup1Msg;
+    }
+
+    public ThreadStatus getThreadStartup2() {
+        return threadStartup2;
+    }
+
+    public void setThreadStartup2(ThreadStatus threadStartup2) {
+        this.threadStartup2 = threadStartup2;
+    }
+
+    public String getThreadStartup2Msg() {
+        return threadStartup2Msg;
+    }
+
+    public void setThreadStartup2Msg(String threadStartup2Msg) {
+        this.threadStartup2Msg = threadStartup2Msg;
+    }
+
+    public ThreadStatus getThreadUpdateMaps() {
+        return threadUpdateMaps;
+    }
+
+    public ThreadStatus getThreadStartup3() {
+        return threadStartup3;
+    }
+
+    public void setThreadStartup3(ThreadStatus threadStartup3) {
+        this.threadStartup3 = threadStartup3;
+    }
+
+    public String getThreadStartup3Msg() {
+        return threadStartup3Msg;
+    }
+
+    public void setThreadStartup3Msg(String threadStartup3Msg) {
+        this.threadStartup3Msg = threadStartup3Msg;
+    }
+
+    public void setThreadUpdateMaps(ThreadStatus threadUpdateMaps) {
+        this.threadUpdateMaps = threadUpdateMaps;
+    }
+
+    public String getThreadUpdateMapsMsg() {
+        return threadUpdateMapsMsg;
+    }
+
+    public void setThreadUpdateMapsMsg(String threadUpdateMapsMsg) {
+        this.threadUpdateMapsMsg = threadUpdateMapsMsg;
+    }
+
+    public ThreadStatus getThreadUpdateStats() {
+        return threadUpdateStats;
+    }
+
+    public void setThreadUpdateStats(ThreadStatus threadUpdateStats) {
+        this.threadUpdateStats = threadUpdateStats;
+    }
+
+    public String getThreadUpdateStatsMsg() {
+        return threadUpdateStatsMsg;
+    }
+
+    public void setThreadUpdateStatsMsg(String threadUpdateStatsMsg) {
+        this.threadUpdateStatsMsg = threadUpdateStatsMsg;
+    }
+
+    public ThreadStatus getThreadDLCommMap() {
+        return threadDLCommMap;
+    }
+
+    public void setThreadDLCommMap(ThreadStatus threadDLCommMap) {
+        this.threadDLCommMap = threadDLCommMap;
+    }
+
+    public String getThreadDLCommMapMsg() {
+        return threadDLCommMapMsg;
+    }
+
+    public void setThreadDLCommMapMsg(String threadDLCommMapMsg) {
+        this.threadDLCommMapMsg = threadDLCommMapMsg;
+    }
+
+    public ThreadStatus getThreadSaveCommMap() {
+        return threadSaveCommMap;
+    }
+
+    public void setThreadSaveCommMap(ThreadStatus threadSaveCommMap) {
+        this.threadSaveCommMap = threadSaveCommMap;
+    }
+
+    public String getThreadSaveCommMapMsg() {
+        return threadSaveCommMapMsg;
+    }
+
+    public void setThreadSaveCommMapMsg(String threadSaveCommMapMsg) {
+        this.threadSaveCommMapMsg = threadSaveCommMapMsg;
+    }
+
+    public ThreadStatus getThreadCommMapList() {
+        return threadCommMapList;
+    }
+
+    public void setThreadCommMapList(ThreadStatus threadCommMapList) {
+        this.threadCommMapList = threadCommMapList;
+    }
+
+    public String getThreadCommMapListMsg() {
+        return threadCommMapListMsg;
+    }
+
+    public void setThreadCommMapListMsg(String threadCommMapListMsg) {
+        this.threadCommMapListMsg = threadCommMapListMsg;
+    }
+
+    public ThreadStatus getThreadRstStats() {
+        return threadRstStats;
+    }
+
+    public void setThreadRstStats(ThreadStatus threadRstStats) {
+        this.threadRstStats = threadRstStats;
+    }
+
+    public String getThreadRstStatsMsg() {
+        return threadRstStatsMsg;
+    }
+
+    public void setThreadRstStatsMsg(String threadRstStatsMsg) {
+        this.threadRstStatsMsg = threadRstStatsMsg;
+    }
+
+    public ThreadStatus getThreadSaveStats() {
+        return threadSaveStats;
+    }
+
+    public void setThreadSaveStats(ThreadStatus threadSaveStats) {
+        this.threadSaveStats = threadSaveStats;
+    }
+
+    public String getThreadSaveStatsMsg() {
+        return threadSaveStatsMsg;
+    }
+
+    public void setThreadSaveStatsMsg(String threadSaveStatsMsg) {
+        this.threadSaveStatsMsg = threadSaveStatsMsg;
+    }
+
+    public ThreadStatus getThreadCreateAcc() {
+        return threadCreateAcc;
+    }
+
+    public void setThreadCreateAcc(ThreadStatus threadCreateAcc) {
+        this.threadCreateAcc = threadCreateAcc;
+    }
+
+    public String getThreadCreateAccMsg() {
+        return threadCreateAccMsg;
+    }
+
+    public void setThreadCreateAccMsg(String threadCreateAccMsg) {
+        this.threadCreateAccMsg = threadCreateAccMsg;
+    }
+
+    public ThreadStatus getThreadLogin() {
+        return threadLogin;
+    }
+
+    public void setThreadLogin(ThreadStatus threadLogin) {
+        this.threadLogin = threadLogin;
+    }
+
+    public String getThreadLoginMsg() {
+        return threadLoginMsg;
+    }
+
+    public void setThreadLoginMsg(String threadLoginMsg) {
+        this.threadLoginMsg = threadLoginMsg;
+    }
+
+}