diff --git a/.idea/sqldialects.xml b/.idea/sqldialects.xml
index 202cd50f9c4409d6939d4254c8f800abdc8d38f1..996ed7a25d217b840a5f22f95931c214327a93ef 100644
--- a/.idea/sqldialects.xml
+++ b/.idea/sqldialects.xml
@@ -4,7 +4,4 @@
     <file url="file://$PROJECT_DIR$/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Scripts/DDL_Script_Oracle.sql" dialect="AZURE" />
     <file url="PROJECT" dialect="AZURE" />
   </component>
-  <component name="SqlResolveMappings">
-    <file url="file://$PROJECT_DIR$/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/DBalt.java" scope="{&quot;node&quot;:{  &quot;@negative&quot;:&quot;1&quot;,  &quot;group&quot;:{   &quot;@kind&quot;:&quot;root&quot;,   &quot;node&quot;:{    &quot;@negative&quot;:&quot;1&quot;   }  } }}" />
-  </component>
 </project>
\ No newline at end of file
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/AzureDB.java b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/AzureDB.java
index d196f9401fea96ea0bbf624c8386acbe5864350a..072b5073ea12aeb56af5a87b1103b46e09b5c1c6 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/AzureDB.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/AzureDB.java
@@ -59,28 +59,170 @@ public class AzureDB implements ISQLDataBase {
         }
     }
 
-    public ArrayList<String> getCommunityMapsList() throws DatabaseError{
+    @Override
+    public ArrayList<MapInfo> getCommunityMapsList() throws DatabaseError{
         try(Connection connection = connect()) {
-            ArrayList<String> tempList = new ArrayList<String>();
-            String sql = "SELECT map_name FROM CommunityMaps";
+            ArrayList<MapInfo> tempList = new ArrayList<MapInfo>();
+            String sql = "SELECT map_id, map_name, map_width, map_height, map_downloads FROM battlearenadata.communitymaps";
             PreparedStatement stmt = connection.prepareStatement(sql);
 
             log.info("Sending SQL statement");
             ResultSet rs = stmt.executeQuery();
 
             while(rs.next()){
-                tempList.add(rs.getString("map_name"));
+                tempList.add(new MapInfo(rs.getString("map_id"), rs.getString("map_name"), rs.getInt("map_width"), rs.getInt("map_height"), rs.getInt("map_downloads")));
             }
-            log.info("SQL query successful");
             rs.close();
             stmt.close();
+            log.info("Community map names retrieved successfully");
             return tempList;
         }
         catch(Exception e){
             log.error(e);
-            throw new DatabaseError("Error retrieving MapList");
+            throw new DatabaseError("Error retrieving community map names");
+        }
+    }
+
+    @Override
+    public MapData getCommunityMapByID(String mapID) throws DatabaseError{
+        try(Connection connection = connect()) {
+            String sql = "SELECT * FROM battlearenadata.communitymaps WHERE map_ID = ?";
+            PreparedStatement stmt = connection.prepareStatement(sql);
+            stmt.setString(1, mapID);
+
+            log.info("Sending SQL statement");
+            ResultSet rs = stmt.executeQuery();
+
+            MapData mapChosen = new MapData(rs.getString("map_id"), rs.getString("map_name"), rs.getInt("map_width"), rs.getInt("map_height"), rs.getString("map_data"));
+
+            rs.close();
+            stmt.close();
+            log.info("Community map retrieved successfully");
+            return mapChosen;
+        }
+        catch(Exception e){
+            log.error(e);
+            throw new DatabaseError("Error retrieving community map");
+        }
+    }
+
+    @Override
+    public void uploadCommunityMap(MapData map) throws DatabaseError{
+        try(Connection connection = connect()) {
+            String sql = "INSERT INTO battlearenadata.communitymaps (map_id, map_name, map_width, map_height, map_data) VALUES (?, ?, ?, ?, ?)";
+            PreparedStatement stmt = connection.prepareStatement(sql);
+            stmt.setString(1, map.getMapID());
+            stmt.setString(2, map.getMapName());
+            stmt.setInt(3, map.getMapWidth());
+            stmt.setInt(4, map.getMapHeight());
+            stmt.setString(5, map.getMapData());
+
+            log.info("Sending SQL statement");
+            stmt.executeQuery();
+
+            stmt.close();
+            log.info("Community Map uploaded successfully");
+        }
+        catch(Exception e){
+            log.error(e);
+            throw new DatabaseError("Error uploading created community map");
+        }
+    }
+
+    @Override
+    public void createPlayer(PlayerStatistics stats, PlayerAccount account) throws DatabaseError{
+        try(Connection connection = connect()) {
+            String sql = "INSERT INTO battlearenadata.players (player_name, player_pw, games_won, games_lost, kills, deaths, blocks_destroyed, ingame_time) VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
+            PreparedStatement stmt = connection.prepareStatement(sql);
+            stmt.setString(1, account.getPlayerName());
+            stmt.setString(2, account.getAccountPassword());
+            stmt.setInt(3, stats.getGamesWon());
+            stmt.setInt(4, stats.getGamesLost());
+            stmt.setInt(5, stats.getKills());
+            stmt.setInt(6, stats.getDeaths());
+            stmt.setInt(7, stats.getBlocksDestroyed());
+            stmt.setInt(8, stats.getGameTime());
+
+            log.info("Sending SQL statement");
+            stmt.executeQuery();
+
+            stmt.close();
+            log.info("Online account created successfully");
+        }
+        catch(Exception e){
+            log.error(e);
+            throw new DatabaseError("Error creating online account");
         }
     }
 
+    @Override
+    public String checkCredentials(String playerName) throws DatabaseError{
+        try(Connection connection = connect()) {
+            String sql = "SELECT player_pw FROM battlearenadata.players WHERE player_name = ?";
+            PreparedStatement stmt = connection.prepareStatement(sql);
+            stmt.setString(1, playerName);
+
+            log.info("Sending SQL statement");
+            ResultSet rs = stmt.executeQuery();
+
+            String password = rs.getString("player_pw");
+
+            rs.close();
+            stmt.close();
+            log.info("Player credentials retrieved successfully");
+            return password;
+        }
+        catch(Exception e){
+            log.error(e);
+            throw new DatabaseError("Error retrieving retrieving player credentials");
+        }
+    }
+
+    @Override
+    public PlayerStatistics getStatistics(String playerName) throws DatabaseError{
+        try(Connection connection = connect()) {
+            String sql = "SELECT games_won, games_lost, kills, deaths, blocks_destroyed, ingame_time FROM battlearenadata.players WHERE player_name = ?";
+            PreparedStatement stmt = connection.prepareStatement(sql);
+            stmt.setString(1, playerName);
+
+            log.info("Sending SQL statement");
+            ResultSet rs = stmt.executeQuery();
+
+            PlayerStatistics stats = new PlayerStatistics(true, rs.getInt("games_won"), rs.getInt("games_lost"), rs.getInt("kills"), rs.getInt("deaths"), rs.getInt("blocks_destroyed"), rs.getInt("ingame_time"));
+
+            rs.close();
+            stmt.close();
+            log.info("Player statistics retrieved successfully");
+            return stats;
+        }
+        catch(Exception e){
+            log.error(e);
+            throw new DatabaseError("Error retrieving player statistics");
+        }
+    }
+
+    @Override
+    public void updatePlayerStats(PlayerStatistics stats, PlayerAccount account) throws DatabaseError{
+        try(Connection connection = connect()) {
+            String sql = "UPDATE battlearenadata.players SET games_won = ?, games_lost = ?, kills = ?, deaths = ?, blocks_destroyed = ?, ingame_time = ? WHERE player_name = ?";
+            PreparedStatement stmt = connection.prepareStatement(sql);
+            stmt.setInt(1, stats.getGamesWon());
+            stmt.setInt(2, stats.getGamesLost());
+            stmt.setInt(3, stats.getKills());
+            stmt.setInt(4, stats.getDeaths());
+            stmt.setInt(5, stats.getBlocksDestroyed());
+            stmt.setInt(6, stats.getGameTime());
+            stmt.setString(7, account.getPlayerName());
+
+            log.info("Sending SQL statement");
+
+            stmt.close();
+            log.info("Player statistics updated successfully");
+        }
+        catch(Exception e){
+            log.error(e);
+            throw new DatabaseError("Error updating player statistics");
+        }
+    }
 
 }
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/DBalt.java b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/DBalt.java
deleted file mode 100644
index 024b67e8994381ea9b34e0187d9fc7f914d37c47..0000000000000000000000000000000000000000
--- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/DBalt.java
+++ /dev/null
@@ -1,210 +0,0 @@
-package de.hdm_stuttgart.battlearena.Persistance.Classes;
-
-import de.hdm_stuttgart.battlearena.Exceptions.CryptoException;
-import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.LogManager;
-
-
-import java.io.File;
-import java.io.IOException;
-import java.util.LinkedHashMap;
-import java.util.Properties;
-import java.sql.*;
-
-public class DBalt implements IDataBasealt {
-
-    static String key = "Peters Olivenöl";
-
-    private static String user="";
-    private static String password="";
-    private static String[] parts= new String[2];
-
-    //static File inputFile = new File("src\\main\\resources\\database\\OracleDB_logindetails");
-    static File encryptedFile = new File("src\\main\\resources\\database\\AzureDB_logindetails");
-    //static File decryptedFile = new File("src\\main\\resources\\database\\document.decrypted");
-
-    protected static void getlogindata() throws CryptoException {
-        parts = CryptoUtils.decrypt(key, encryptedFile);
-        user = parts[0];
-        password = parts[1];
-        log.info("AzureDB logindetails:  user: " + user + "  password: " +  password);
-    }
-
-    private static final Logger log = LogManager.getLogger(DBalt.class);
-
-
-    @Override
-    public Connection connect() throws IOException, SQLException {
-
-        log.info("Loading the properties File!");
-        Properties properties = new Properties();
-        properties.load(getClass().getClassLoader().getResourceAsStream("config.properties"));
-
-        log.info("Connecting to the database!");
-        Connection connection = DriverManager.getConnection(properties.getProperty("url"), properties.getProperty(user), properties.getProperty(password));
-        log.info("Database connection test" + connection.getCatalog());
-
-        connection.setAutoCommit(true);
-
-        return connection;
-    }
-
-
-    @Override
-    public void createNewPlayer(String playerName) throws SQLException, IOException {
-        try(Connection connection = connect()) {
-            String sql = "INSERT INTO players (player_name, games_won, games_lost, kills, deaths, blocks_destroyed, ingame_time)" + "VALUES (?,?,?,?,?,?,?)";
-            PreparedStatement preparedStatement = connection.prepareStatement(sql);
-            preparedStatement.setString(1, playerName);
-            preparedStatement.setInt(2, 0);
-            preparedStatement.setInt(3, 0);
-            preparedStatement.setInt(4, 0);
-            preparedStatement.setInt(5, 0);
-            preparedStatement.setInt(6, 0);
-            preparedStatement.setInt(7, 0);
-
-            log.info("Inserting new player");
-            preparedStatement.execute();
-        }
-    }
-
-    @Override
-    public void createMap(String name, int length, int width, String mapData) throws SQLException, IOException {
-        try(Connection connection = connect()) {
-            String mapSize = length + "X" + width;
-
-            String sql = "INSERT INTO battleArena.dbo.maps (map_name, map_size, map_data, map_version, map_hash) VALUES(?,?,?,?,?)";
-            PreparedStatement preparedStatement = connection.prepareStatement(sql);
-            preparedStatement.setString(1, name);
-            preparedStatement.setString(2, mapSize);
-            preparedStatement.setString(3, mapData);
-
-            log.info("Inserting new map");
-            preparedStatement.execute();
-        }
-    }
-
-    @Override
-    public LinkedHashMap<String, String> getMapNames() throws SQLException, IOException {
-        LinkedHashMap<String, String> mapNames = new LinkedHashMap<>();
-
-        try(Connection connection = connect()) {
-            String sql = "SELECT maps.map_id, maps.map_name FROM maps";
-            PreparedStatement preparedStatement = connection.prepareStatement(sql);
-            ResultSet results = preparedStatement.executeQuery();
-            log.info("Getting map names");
-            while (results.next()) {
-                mapNames.put(results.getString("map_id"), results.getString("map_name"));
-            }
-            connection.close();
-            return mapNames;
-        }
-    }
-
-    @Override
-    public String getMapByID(String ID) throws SQLException, IOException {
-        try(Connection connection = connect()) {
-            String sql = "SELECT map_name FROM maps WHERE map_id = ?";
-            PreparedStatement preparedStatement = connection.prepareStatement(sql);
-            preparedStatement.setString(1, ID);
-            log.info("Getting Map...");
-            String map = preparedStatement.executeQuery().toString();
-            return map;
-        }
-    }
-
-    @Override
-    public String getMapSizeByID(String ID) throws SQLException, IOException {
-        try(Connection connection = connect()) {
-            String sql = "SELECT map_size FROM maps WHERE battleArena.dbo.maps.map_id=?";
-            PreparedStatement preparedStatement = connection.prepareStatement(sql);
-            preparedStatement.setString(1, ID);
-            ResultSet result = preparedStatement.executeQuery();
-            log.info("getting map size...");
-            String mapSize = result.getString("map_size");
-            return mapSize;
-        }
-    }
-
-    @Override
-    public ResultSet getStatistics(String playerName) throws SQLException, IOException {
-        try(Connection connection = connect()){
-        String sql = "SELECT * FROM players where player_name = ?";
-        PreparedStatement preparedStatement = connection.prepareStatement(sql);
-        preparedStatement.setString(1, playerName);
-        ResultSet resultSet = preparedStatement.executeQuery();
-        log.info("getting statistics...");
-        return resultSet;
-        }
-    }
-
-    @Override
-    public void updateMap(String mapID, String mapName, String mapData) throws SQLException, IOException {
-        try(Connection connection = connect()) {
-            String sql = "UPDATE maps SET map_name = ?, map_data = ? WHERE map_id = ?";
-            PreparedStatement preparedStatement = connection.prepareStatement(sql);
-            preparedStatement.setString(1, mapName);
-            preparedStatement.setString(2, mapData);
-            preparedStatement.setString(3, mapID);
-            preparedStatement.execute();
-            log.info("updating map in Database");
-        }
-    }
-
-
-    @Override
-    public void updatePlayerName(String playerNameNew, String playerNameOld) throws SQLException, IOException {
-        try(Connection connection = connect()){
-        String sql = "UPDATE players SET player_name = ? WHERE player_name = ?";
-        PreparedStatement preparedStatement = connection.prepareStatement(sql);
-        preparedStatement.setString(1, playerNameNew);
-        preparedStatement.setString(2, playerNameOld);
-        preparedStatement.execute();
-        log.info("updating player name in Database...");
-        }
-    }
-
-    @Override
-    public void updatePlayerStatistics(String playerName, int gamesWon, int gamesLost, int kills, int deaths, int blocksDestroyed, int gameTime) throws SQLException, IOException {
-        try (Connection connection = connect()){
-        String sql = "UPDATE players SET games_won = ?, games_lost = ?, kills = ?, " + "deaths = ?, blocks_destroyed = ?, ingame_time = ? WHERE player_name = ?";
-        PreparedStatement preparedStatement = connection.prepareStatement(sql);
-        preparedStatement.setInt(1, gamesWon);
-        preparedStatement.setInt(2, gamesLost);
-        preparedStatement.setInt(3, kills);
-        preparedStatement.setInt(4, deaths);
-        preparedStatement.setInt(5, blocksDestroyed);
-        preparedStatement.setInt(6, gameTime);
-        preparedStatement.setString(7, playerName);
-        preparedStatement.execute();
-        log.info("updating player statistics");
-
-        }
-    }
-
-
-    @Override
-    public void deletePlayer(String playerName) throws IOException, SQLException {
-        try(Connection connection = connect()) {
-            String sql = "DELETE FROM players WHERE player_name=?";
-            PreparedStatement preparedStatement = connection.prepareStatement(sql);
-            preparedStatement.setString(1, playerName);
-            preparedStatement.execute();
-            log.info("deleting player");
-
-        }
-    }
-
-    @Override
-    public void deleteMap(String mapID) throws SQLException, IOException {
-        try(Connection connection = connect()) {
-            String sql = "DELETE * FROM maps WHERE map_id = ?";
-            PreparedStatement preparedStatement = connection.prepareStatement(sql);
-            preparedStatement.setString(1, mapID);
-            preparedStatement.execute();
-            log.info("deleting map...");
-        }
-    }
-
-
-}
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/GsonHandler.java b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/GsonHandler.java
index 4fd108e06044c932e89c46903b1f86962c72a0ea..ce0d0608fe1f8811bdea040ae54a527c53eb6f89 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/GsonHandler.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/GsonHandler.java
@@ -24,7 +24,6 @@ public class GsonHandler {
     private final String filePathCoreMaps = "src/main/resources/maps/coreMaps.json";
     private final String filePathCommunityMaps = "src/main/resources/maps/communityMaps.json";
     private final String filePathPlayerStats = "src/main/resources/player/playerStatsLocal.json";
-    private final String filePathPlayerAccount = "src/main/resources/player/playerAccount.json";
     private final String filePathSettings = "src/main/resources/player/appSettings.json";
 
     public ArrayList<MapData> loadMaps(MapType type) throws DatabaseError{
@@ -110,26 +109,4 @@ public class GsonHandler {
         }
     }
 
-    public PlayerAccount loadAccount() throws DatabaseError{
-        try (FileReader reader = new FileReader(filePathPlayerAccount)) {
-            PlayerAccount account = gson.fromJson(reader, accountType);
-            log.info("GSON - Player account information successfully loaded from JSON");
-            return account;
-        } catch (Exception e) {
-            log.info(e);
-            log.info("GSON - Loading player account information from JSON failed");
-            throw new DatabaseError("Error loading player account information!");
-        }
-    }
-
-    public void saveAccount(PlayerAccount account) throws DatabaseError{
-        try (FileWriter writer = new FileWriter(filePathPlayerAccount)) {
-            gson.toJson(account, writer);
-            log.info("GSON - Player account information successfully saved to JSON");
-        } catch (Exception e) {
-            log.info(e);
-            log.info("GSON - Saving player account information to JSON failed");
-            throw new DatabaseError("Error loading player account information!");
-        }
-    }
 }
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/IDataBasealt.java b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/IDataBasealt.java
deleted file mode 100644
index fbd43943e8c18c1a57b381107379bf018375d238..0000000000000000000000000000000000000000
--- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/IDataBasealt.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package de.hdm_stuttgart.battlearena.Persistance.Classes;
-
-import java.io.IOException;
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.LinkedHashMap;
-
-public interface IDataBasealt {
-
-    //connection-Methods
-    Connection connect() throws IOException, SQLException;
-
-
-    //CRUD Operations
-
-    //Create Operations
-    void createNewPlayer(String playerName) throws SQLException, IOException;
-
-    void createMap(String name, int length, int width, String mapData) throws SQLException, IOException;
-
-    //Read-operations
-    LinkedHashMap<String, String> getMapNames() throws SQLException, IOException;
-    String getMapByID(String ID) throws SQLException, IOException;
-    String getMapSizeByID(String ID) throws SQLException, IOException;
-
-
-
-    ResultSet getStatistics(String playerName) throws SQLException, IOException;
-
-    //Update-operations
-    void updateMap(String mapID , String mapName, String mapData) throws SQLException, IOException;
-
-    void updatePlayerName(String playerNameNew, String PlayerNameOld) throws SQLException, IOException;
-
-    void updatePlayerStatistics(String playerName, int gamesWon, int gamesLost, int kills, int deaths, int blocksDestroyed, int gameTime) throws SQLException, IOException;
-
-
-    //Delete-operations
-    void deletePlayer(String playerName) throws IOException, SQLException;
-    void deleteMap(String mapID) throws SQLException, IOException;
-}
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/ISQLDataBase.java b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/ISQLDataBase.java
index 5403c83ede65914ac8584d677ac425722a7c44cc..f2c3175910d96011bf1e4cd0474f5cc4e0602847 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/ISQLDataBase.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/ISQLDataBase.java
@@ -8,8 +8,17 @@ import java.util.ArrayList;
 
 public interface ISQLDataBase {
 
-    Connection connect() throws DatabaseError, CryptoException;
+    //Establish Connection
+    Connection connect() throws DatabaseError;
 
+    //CRUD Operations in SQL
     ArrayList<MapData> getCoreMaps() throws DatabaseError;
+    ArrayList<MapInfo> getCommunityMapsList() throws DatabaseError;
+    MapData getCommunityMapByID(String mapID) throws DatabaseError;
+    void uploadCommunityMap(MapData map) throws DatabaseError;
+    void createPlayer(PlayerStatistics stats, PlayerAccount account) throws DatabaseError;
+    String checkCredentials(String playerName) throws DatabaseError;
+    PlayerStatistics getStatistics(String playerName) throws DatabaseError;
+    void updatePlayerStats(PlayerStatistics stats, PlayerAccount account) throws DatabaseError;
 
 }
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/OracleDB.java b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/OracleDB.java
index 11b8888157577c2e43b5356fdf240eac4264a399..003c5439e1139d287b9f21df250e24340c22ca1a 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/OracleDB.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/OracleDB.java
@@ -24,16 +24,17 @@ public class OracleDB implements ISQLDataBase {
     //static File decryptedFile = new File("src\\main\\resources\\database\\document.decrypted");
 
     private static final Logger log = LogManager.getLogger(OracleDB.class);
-    public static void getlogindata() throws CryptoException {
+    public static void getLoginData() throws CryptoException {
         parts = CryptoUtils.decrypt(key, encryptedFile);
         user = parts[0];
         password = parts[1];
         log.info("OracleDB_logindetails:  user: " + user + "  password: " +  password);
     }
+
     @Override
-    public Connection connect() throws DatabaseError, CryptoException {
-        //getlogindata();
+    public Connection connect() throws DatabaseError{
         try {
+            getLoginData();
             OracleDataSource ods = new OracleDataSource();
             ods.setURL("jdbc:oracle:thin:@(description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1521)(host=adb.eu-frankfurt-1.oraclecloud.com))(connect_data=(service_name=g093caf2cf1fea4_battlearena_high.adb.oraclecloud.com))(security=(ssl_server_dn_match=yes)))");
             ods.setUser(user);
@@ -74,6 +75,7 @@ public class OracleDB implements ISQLDataBase {
         }
     }
 
+    @Override
     public ArrayList<MapInfo> getCommunityMapsList() throws DatabaseError{
         try(Connection connection = connect()) {
             ArrayList<MapInfo> tempList = new ArrayList<MapInfo>();
@@ -97,6 +99,7 @@ public class OracleDB implements ISQLDataBase {
         }
     }
 
+    @Override
     public MapData getCommunityMapByID(String mapID) throws DatabaseError{
         try(Connection connection = connect()) {
             String sql = "SELECT * FROM battlearenadata.communitymaps WHERE map_ID = ?";
@@ -119,6 +122,7 @@ public class OracleDB implements ISQLDataBase {
         }
     }
 
+    @Override
     public void uploadCommunityMap(MapData map) throws DatabaseError{
         try(Connection connection = connect()) {
             String sql = "INSERT INTO battlearenadata.communitymaps (map_id, map_name, map_width, map_height, map_data) VALUES (?, ?, ?, ?, ?)";
@@ -133,7 +137,7 @@ public class OracleDB implements ISQLDataBase {
             stmt.executeQuery();
 
             stmt.close();
-            log.info("Community Map retrieved successfully");
+            log.info("Community Map uploaded successfully");
         }
         catch(Exception e){
             log.error(e);
@@ -141,10 +145,100 @@ public class OracleDB implements ISQLDataBase {
         }
     }
 
-/*
-    public void updateCommunityStats(Persistence persistence){
-         //Update the commulative Stats
+    @Override
+    public void createPlayer(PlayerStatistics stats, PlayerAccount account) throws DatabaseError{
+        try(Connection connection = connect()) {
+            String sql = "INSERT INTO battlearenadata.players (player_name, player_pw, games_won, games_lost, kills, deaths, blocks_destroyed, ingame_time) VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
+            PreparedStatement stmt = connection.prepareStatement(sql);
+            stmt.setString(1, account.getPlayerName());
+            stmt.setString(2, account.getAccountPassword());
+            stmt.setInt(3, stats.getGamesWon());
+            stmt.setInt(4, stats.getGamesLost());
+            stmt.setInt(5, stats.getKills());
+            stmt.setInt(6, stats.getDeaths());
+            stmt.setInt(7, stats.getBlocksDestroyed());
+            stmt.setInt(8, stats.getGameTime());
+
+            log.info("Sending SQL statement");
+            stmt.executeQuery();
+
+            stmt.close();
+            log.info("Online account created successfully");
+        }
+        catch(Exception e){
+            log.error(e);
+            throw new DatabaseError("Error creating online account");
+        }
     }
-*/
-}
 
+    @Override
+    public String checkCredentials(String playerName) throws DatabaseError{
+        try(Connection connection = connect()) {
+            String sql = "SELECT player_pw FROM battlearenadata.players WHERE player_name = ?";
+            PreparedStatement stmt = connection.prepareStatement(sql);
+            stmt.setString(1, playerName);
+
+            log.info("Sending SQL statement");
+            ResultSet rs = stmt.executeQuery();
+
+            String password = rs.getString("player_pw");
+
+            rs.close();
+            stmt.close();
+            log.info("Player credentials retrieved successfully");
+            return password;
+        }
+        catch(Exception e){
+            log.error(e);
+            throw new DatabaseError("Error retrieving retrieving player credentials");
+        }
+    }
+
+    @Override
+    public PlayerStatistics getStatistics(String playerName) throws DatabaseError{
+        try(Connection connection = connect()) {
+            String sql = "SELECT games_won, games_lost, kills, deaths, blocks_destroyed, ingame_time FROM battlearenadata.players WHERE player_name = ?";
+            PreparedStatement stmt = connection.prepareStatement(sql);
+            stmt.setString(1, playerName);
+
+            log.info("Sending SQL statement");
+            ResultSet rs = stmt.executeQuery();
+
+            PlayerStatistics stats = new PlayerStatistics(true, rs.getInt("games_won"), rs.getInt("games_lost"), rs.getInt("kills"), rs.getInt("deaths"), rs.getInt("blocks_destroyed"), rs.getInt("ingame_time"));
+
+            rs.close();
+            stmt.close();
+            log.info("Player statistics retrieved successfully");
+            return stats;
+        }
+        catch(Exception e){
+            log.error(e);
+            throw new DatabaseError("Error retrieving player statistics");
+        }
+    }
+
+    @Override
+    public void updatePlayerStats(PlayerStatistics stats, PlayerAccount account) throws DatabaseError{
+        try(Connection connection = connect()) {
+            String sql = "UPDATE battlearenadata.players SET games_won = ?, games_lost = ?, kills = ?, deaths = ?, blocks_destroyed = ?, ingame_time = ? WHERE player_name = ?";
+            PreparedStatement stmt = connection.prepareStatement(sql);
+            stmt.setInt(1, stats.getGamesWon());
+            stmt.setInt(2, stats.getGamesLost());
+            stmt.setInt(3, stats.getKills());
+            stmt.setInt(4, stats.getDeaths());
+            stmt.setInt(5, stats.getBlocksDestroyed());
+            stmt.setInt(6, stats.getGameTime());
+            stmt.setString(7, account.getPlayerName());
+
+            log.info("Sending SQL statement");
+
+            stmt.close();
+            log.info("Player statistics updated successfully");
+        }
+        catch(Exception e){
+            log.error(e);
+            throw new DatabaseError("Error updating player statistics");
+        }
+    }
+
+}
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/Persistence.java b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/Persistence.java
index c5c12aada73387a80d97985a7c7342147691e9e0..56b554beb01e654247c3cc42eb25f08eebc22836 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/Persistence.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/Persistence.java
@@ -95,7 +95,6 @@ public class Persistence {
 
     public void loadPlayerAccount() {
         try {
-            account = gsonHandler.loadAccount();
             //hier muss dann Entschlüsselung stattfinden, da GSON zuerst die verschlüsselten Accountdaten (Passwort und Username) als String speichert
         }
         catch(Exception e){
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/PlayerStatistics.java b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/PlayerStatistics.java
index fc46205131b8ea5a2a2dd37d17823261eaad90fa..1068ee89e923f97e71051e88a42ee09124c20500 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/PlayerStatistics.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/PlayerStatistics.java
@@ -6,16 +6,16 @@ import org.apache.logging.log4j.LogManager;
 public class PlayerStatistics {
     private static final Logger log = LogManager.getLogger(PlayerStatistics.class);
 
-    private String playerName;
-    private int gamesLost;
-    private int gamesWon;
-    private int kills;
-    private int deaths;
-    private int blocksDestroyed;
-    private int gameTime;
-
-    public PlayerStatistics(String playerName, int gamesLost, int gamesWon, int kills, int deaths, int blocksDestroyed, int gameTime) {
-        this.playerName = playerName;
+    private boolean statsLoaded = false;    //indicator, if stats were loaded at startup from JSON/SQL
+    private int gamesLost = 0;
+    private int gamesWon = 0;
+    private int kills = 0;
+    private int deaths = 0;
+    private int blocksDestroyed = 0;
+    private int gameTime = 0;
+
+    public PlayerStatistics(boolean statsLoaded, int gamesLost, int gamesWon, int kills, int deaths, int blocksDestroyed, int gameTime) {
+        this.statsLoaded = statsLoaded;
         this.gamesLost = gamesLost;
         this.gamesWon = gamesWon;
         this.kills = kills;
@@ -24,13 +24,6 @@ public class PlayerStatistics {
         this.gameTime = gameTime;
     }
 
-    public String getPlayerName() {
-        return playerName;
-    }
-
-    public void setPlayerName(String playerName) {
-        this.playerName = playerName;
-    }
 
     public int getGamesLost() {
         return gamesLost;