diff --git a/Projekte/.run/MdgaApp.run.xml b/Projekte/.run/MdgaApp.run.xml
deleted file mode 100644
index 82e2f2b6..00000000
--- a/Projekte/.run/MdgaApp.run.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-  
-    
-    
-    
-    
-    
-      
-        
-        
-      
-    
-    
-      
-    
-  
-
\ No newline at end of file
diff --git a/Projekte/mdga/client/src/main/java/pp/mdga/client/server/MdgaServer.java b/Projekte/mdga/client/src/main/java/pp/mdga/client/server/MdgaServer.java
index a128bb82..b1b488ae 100644
--- a/Projekte/mdga/client/src/main/java/pp/mdga/client/server/MdgaServer.java
+++ b/Projekte/mdga/client/src/main/java/pp/mdga/client/server/MdgaServer.java
@@ -1,14 +1,11 @@
 package pp.mdga.client.server;
 
-import com.jme3.network.ConnectionListener;
-import com.jme3.network.HostedConnection;
-import com.jme3.network.Message;
-import com.jme3.network.MessageListener;
-import com.jme3.network.Network;
-import com.jme3.network.Server;
+import com.jme3.network.*;
 import com.jme3.network.serializing.Serializer;
 import pp.mdga.game.Game;
 import pp.mdga.game.Player;
+import pp.mdga.message.client.*;
+import pp.mdga.message.server.ServerMessage;
 import pp.mdga.server.ServerGameLogic;
 import pp.mdga.server.ServerSender;
 
@@ -16,6 +13,7 @@
 import java.io.IOException;
 import java.lang.System.Logger;
 import java.lang.System.Logger.Level;
+import java.util.Map;
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.logging.LogManager;
@@ -53,7 +51,7 @@ public static void main(String[] args) {
      */
     public MdgaServer() {
         LOGGER.log(Level.INFO, "Creating MdgaServer"); //NON-NLS
-        logic = new ServerGameLogic(new Game(), this);
+        logic = new ServerGameLogic(this, new Game());
     }
 
     public void run() {
@@ -92,14 +90,14 @@ private void initializeSerializables() {
         Serializer.registerClass(ClientStartGame.class);
         Serializer.registerClass(DeselectTSK.class);
         Serializer.registerClass(ForceContinueGame.class);
-        Serializer.registerClass(ForceStartGame.class);
+        Serializer.registerClass(StartGame.class);
         Serializer.registerClass(JoinServer.class);
         Serializer.registerClass(LeaveGame.class);
         Serializer.registerClass(LobbyNotReady.class);
         Serializer.registerClass(LobbyReady.class);
         Serializer.registerClass(NoPowerCard.class);
         Serializer.registerClass(RequestBriefing.class);
-        Serializer.registerClass(RequestDice.class);
+        Serializer.registerClass(RequestDie.class);
         Serializer.registerClass(RequestMove.class);
         Serializer.registerClass(RequestPlayCard.class);
         Serializer.registerClass(SelectCard.class);
@@ -147,7 +145,7 @@ private void registerListeners() {
         myServer.addMessageListener(this, LobbyReady.class);
         myServer.addMessageListener(this, NoPowerCard.class);
         myServer.addMessageListener(this, RequestBriefing.class);
-        myServer.addMessageListener(this, RequestDice.class);
+        myServer.addMessageListener(this, RequestDie.class);
         myServer.addMessageListener(this, RequestMove.class);
         myServer.addMessageListener(this, RequestPlayCard.class);
         myServer.addMessageListener(this, SelectCard.class);
@@ -156,32 +154,42 @@ private void registerListeners() {
         myServer.addConnectionListener(this);
     }
 
-    @Override
-    public void messageReceived(HostedConnection source, Message message) {
+
+    public void messageReceived(HostedConnection source, ClientMessage message) {
         LOGGER.log(Level.INFO, "message received from {0}: {1}", source.getId(), message); //NON-NLS
-        if (message instanceof ClientMessage clientMessage)
-            pendingMessages.add(new ReceivedMessage(clientMessage, source.getId()));
+        pendingMessages.add(new ReceivedMessage(message, source.getId()));
     }
 
     @Override
     public void connectionAdded(Server server, HostedConnection hostedConnection) {
         LOGGER.log(Level.INFO, "new connection {0}", hostedConnection); //NON-NLS
-        logic.addPlayer(hostedConnection.getId());
+        // ToDo: Synchronize data between server and client.
+        logic.getGame().addPlayer(hostedConnection.getId(), new Player());
     }
 
     @Override
     public void connectionRemoved(Server server, HostedConnection hostedConnection) {
         LOGGER.log(Level.INFO, "connection closed: {0}", hostedConnection); //NON-NLS
-        final Player player = logic.getPlayerById(hostedConnection.getId());
+        final Player player = logic.getGame().getPlayerById(hostedConnection.getId());
         if (player == null)
             LOGGER.log(Level.INFO, "closed connection does not belong to an active player"); //NON-NLS
         else { //NON-NLS
             LOGGER.log(Level.INFO, "closed connection belongs to {0}", player); //NON-NLS
-            exit(0);
+            // exit(0);
+            this.handleDisconnect(hostedConnection.getId());
         }
     }
 
-    private void exit(int exitValue) { //NON-NLS
+    /**
+     * This method will be used to handle unintentional disconnections from players.
+     *
+     * @param id as the id of the disconnected player.
+     */
+    public void handleDisconnect(int id) {
+        this.logic.received(new Disconnected(), id);
+    }
+
+    public void exit(int exitValue) { //NON-NLS
         LOGGER.log(Level.INFO, "close request"); //NON-NLS
         if (myServer != null)
             for (HostedConnection client : myServer.getConnections()) //NON-NLS
@@ -206,4 +214,16 @@ public void send(int id, ServerMessage message) {
         else
             LOGGER.log(Level.ERROR, "there is no connection with id={0}", id); //NON-NLS
     }
+
+    /**
+     * This method will be used to send the given message parameter to all connected players which are saved inside the
+     * players attribute of Game class.
+     *
+     * @param message as the message which will be sent to all players as a ServerMessage.
+     */
+    public void broadcast(ServerMessage message) {
+        for (Map.Entry entry: this.logic.getGame().getPlayers().entrySet()) {
+            this.send(entry.getValue().getId(), message);
+        }
+    }
 }
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/Animation.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/Animation.java
deleted file mode 100644
index 6ed12c3b..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/Animation.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.client;
-
-public class Animation extends ClientState {
-    public Animation(ClientState parent, ClientGameLogic logic) {
-        super(parent, logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/AudioSettings.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/AudioSettings.java
deleted file mode 100644
index add83883..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/AudioSettings.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.client;
-
-public class AudioSettings extends ClientState {
-    public AudioSettings(ClientState parent, ClientGameLogic logic) {
-        super(parent, logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/Ceremony.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/Ceremony.java
index 432f90f9..2832f0fa 100644
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/Ceremony.java
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/Ceremony.java
@@ -1,14 +1,19 @@
 package pp.mdga.client;
 
 public class Ceremony extends ClientState {
-    private final CeremonyStateMachine ceremonyStateMachine;
+
 
     public Ceremony(ClientState parent, ClientGameLogic logic) {
         super(parent, logic);
-        this.ceremonyStateMachine = new CeremonyStateMachine(parent, logic);
     }
 
-    public CeremonyStateMachine getCeremonyStateMachine() {
-        return ceremonyStateMachine;
+    @Override
+    public void enter() {
+
+    }
+
+    @Override
+    public void exit() {
+
     }
 }
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/CeremonyStateMachine.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/CeremonyStateMachine.java
deleted file mode 100644
index 758950f8..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/CeremonyStateMachine.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package pp.mdga.client;
-
-public class CeremonyStateMachine extends ClientStateMachine {
-
-    public CeremonyStateMachine(ClientState parent, ClientGameLogic logic) {
-        super(parent, logic);
-    }
-
-
-    @Override
-    public Podium initialState() {
-        return new Podium(this, logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/ChoosePiece.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/ChoosePiece.java
deleted file mode 100644
index 828b12bd..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/ChoosePiece.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package pp.mdga.client;
-
-public class ChoosePiece extends ClientState {
-
-    private final ChoosePieceStateMachine choosePieceStateMachine;
-
-    public ChoosePiece(ClientState parent, ClientGameLogic logic) {
-        super(parent, logic);
-        this.choosePieceStateMachine = new ChoosePieceStateMachine(parent, logic);
-    }
-
-    public ChoosePieceStateMachine getChoosePieceStateMachine() {
-        return choosePieceStateMachine;
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/ChoosePieceStateMachine.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/ChoosePieceStateMachine.java
deleted file mode 100644
index 5346214c..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/ChoosePieceStateMachine.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package pp.mdga.client;
-
-public class ChoosePieceStateMachine extends ClientStateMachine{
-    public ChoosePieceStateMachine(ClientState parent, ClientGameLogic logic) {
-        super(parent, logic);
-    }
-
-    @Override
-    public NoPiece initialState() {
-        return new NoPiece(this, logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/ChoosePowerCard.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/ChoosePowerCard.java
deleted file mode 100644
index a11259b0..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/ChoosePowerCard.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.client;
-
-public class ChoosePowerCard extends ClientState {
-    public ChoosePowerCard(ClientState parent, ClientGameLogic logic) {
-        super(parent, logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientAutomaton.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientAutomaton.java
deleted file mode 100644
index c90e199b..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientAutomaton.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package pp.mdga.client;
-
-public class ClientAutomaton extends ClientStateMachine {
-
-    public ClientAutomaton(ClientGameLogic logic){
-        super(null, logic);
-        entry();
-    }
-
-    @Override
-    public Dialogs initialState(){
-        return new Dialogs(this, logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientGameLogic.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientGameLogic.java
index 9ec3bca9..d197c0d4 100644
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientGameLogic.java
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientGameLogic.java
@@ -1,20 +1,33 @@
 package pp.mdga.client;
 
+import pp.mdga.game.BonusCard;
+import pp.mdga.game.Color;
 import pp.mdga.game.Game;
+import pp.mdga.game.Piece;
 import pp.mdga.message.client.ClientMessage;
 import pp.mdga.message.server.*;
 
+import java.util.Map;
+import java.util.UUID;
+
 public class ClientGameLogic implements ServerInterpreter {
     static final System.Logger LOGGER = System.getLogger(ClientGameLogic.class.getName());
 
     private Game game;
     private final ClientSender clientSender;
     private ClientState state;
+    private Map pieces;
+    private Map cards;
+
+    private Dialogs dialogs = new Dialogs(null, this);
+    private GameState gameState = new GameState(null, this);
+    private Ceremony ceremony = new Ceremony(null, this);
+    private Interrupt interrupt = new Interrupt(null, this);
 
     public ClientGameLogic(Game game, ClientSender clientSender) {
         this.game = game;
         this.clientSender = clientSender;
-        state = new ClientAutomaton(this);
+        state = dialogs;
     }
 
     public void send(ClientMessage msg){
@@ -36,136 +49,197 @@ public ClientState getState(){
 
     @Override
     public void received(ActivePlayer msg) {
-
+        state.received(msg);
     }
 
     @Override
     public void received(AnyPiece msg) {
-
+        state.received(msg);
     }
 
     @Override
     public void received(Briefing msg) {
-
+        state.received(msg);
     }
 
     @Override
     public void received(CeremonyMessage msg) {
-
+        state.received(msg);
     }
 
     @Override
-    public void received(Dice msg) {
-
+    public void received(Die msg) {
+        state.received(msg);
     }
 
     @Override
     public void received(DiceAgain msg) {
-
+        state.received(msg);
     }
 
     @Override
     public void received(DiceNow msg) {
-
+        state.received(msg);
     }
 
     @Override
     public void received(EndOfTurn msg) {
-
+        state.received(msg);
     }
 
     @Override
     public void received(LobbyAccept msg) {
-
+        state.received(msg);
     }
 
     @Override
     public void received(LobbyDeny msg) {
-
+        state.received(msg);
     }
 
     @Override
     public void received(LobbyPlayerJoin msg) {
-
+        state.received(msg);
     }
 
     @Override
     public void received(LobbyPlayerLeave msg) {
-
+        state.received(msg);
     }
 
     @Override
     public void received(MoveMessage msg) {
-
+        state.received(msg);
     }
 
     @Override
     public void received(NoTurn msg) {
-
+        state.received(msg);
     }
 
     @Override
     public void received(PauseGame msg) {
-
+        state.received(msg);
     }
 
     @Override
     public void received(PlayCard msg) {
-
+        state.received(msg);
     }
 
     @Override
     public void received(PossibleCard msg) {
-
+        state.received(msg);
     }
 
     @Override
     public void received(PossiblePiece msg) {
-
+        state.received(msg);
     }
 
     @Override
     public void received(RankingResponse msg) {
-
+        state.received(msg);
     }
 
     @Override
     public void received(RankingRollAgain msg) {
-
+        state.received(msg);
     }
 
     @Override
     public void received(ReconnectBriefing msg) {
-
+        state.received(msg);
     }
 
     @Override
     public void received(ResumeGame msg) {
-
+        state.received(msg);
     }
 
     @Override
     public void received(ServerStartGame msg) {
-
+        state.received(msg);
     }
 
     @Override
     public void received(StartPiece msg) {
-
+        state.received(msg);
     }
 
     @Override
     public void received(UpdateReady msg) {
-
+        state.received(msg);
     }
 
     @Override
     public void received(UpdateTSK msg) {
-
+        state.received(msg);
     }
 
     @Override
     public void received(WaitPiece msg) {
+        state.received(msg);
+    }
 
+    public void selectPiece(UUID pieceId){
+        state.selectPiece(pieceId);
+    }
+
+    public void selectCard(UUID cardId){
+        state.selectCard(cardId);
+    }
+
+    public void selectTsk(Color color){
+        state.selectTSK(color);
+    }
+
+    public void selectDice(){
+        state.selectDice();
+    }
+
+    public void selectName(String name){
+        state.setName(name);
+    }
+
+    public void selectReady(boolean ready){
+        state.selectReady();
+    }
+
+    public void selectHost(){
+        state.selectHost();
+    }
+
+    public void selectLeave(){
+        state.selectLeave();
+    }
+
+    public void selectJoin(){
+        state.selectJoin();
+    }
+
+    public void selectStart(){
+        state.selectStart();
+    }
+
+    public void setState(ClientState state){
+        this.state.exit();
+        this.state = state;
+    }
+
+    public GameState getGameState(){
+        return gameState;
+    }
+
+    public Ceremony getCeremony(){
+        return ceremony;
+    }
+
+    public Interrupt getInterrupt(){
+        return interrupt;
+    }
+
+    public Dialogs getDialogs(){
+        return dialogs;
     }
 }
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientState.java
index 2c45fbb7..a337cfc0 100644
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientState.java
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientState.java
@@ -1,6 +1,12 @@
 package pp.mdga.client;
 
-public abstract class ClientState implements Observer {
+import pp.mdga.game.Color;
+import pp.mdga.message.server.*;
+
+import java.lang.System.Logger.Level;
+import java.util.UUID;
+
+public abstract class ClientState implements Observer, ServerInterpreter {
     protected static final System.Logger LOGGER = System.getLogger(ClientState.class.getName());
 
     protected ClientState parent;
@@ -12,13 +18,9 @@ protected ClientState(ClientState parent, ClientGameLogic logic){
         this.logic = logic;
     }
 
-    public void entry(){/* do nothing */}
+    public abstract void enter();
 
-    public void exit() {/* do nothing*/}
-
-    public void gotoState(ClientState newState){
-        throw new IllegalStateException("not in a statemachine");
-    }
+    public abstract void exit();
 
     public ClientState getParent(){
         return parent;
@@ -30,4 +32,187 @@ public void update() {/* do nothing */}
     public String toString(){
         return getClass().getSimpleName();
     }
+
+    @Override
+    public void received(ActivePlayer msg) {
+        LOGGER.log(Level.DEBUG, "Received {0} not allowed.", msg);
+    }
+
+    @Override
+    public void received(AnyPiece msg) {
+        LOGGER.log(Level.DEBUG, "Received {0} not allowed.", msg);
+    }
+
+    @Override
+    public void received(Briefing msg) {
+        LOGGER.log(Level.DEBUG, "Received {0} not allowed.", msg);
+    }
+
+    @Override
+    public void received(CeremonyMessage msg) {
+        LOGGER.log(Level.DEBUG, "Received {0} not allowed.", msg);
+    }
+
+    @Override
+    public void received(Die msg) {
+        LOGGER.log(Level.DEBUG, "Received {0} not allowed.", msg);
+    }
+
+    @Override
+    public void received(DiceAgain msg) {
+        LOGGER.log(Level.DEBUG, "Received {0} not allowed.", msg);
+    }
+
+    @Override
+    public void received(DiceNow msg) {
+        LOGGER.log(Level.DEBUG, "Received {0} not allowed.", msg);
+    }
+
+    @Override
+    public void received(EndOfTurn msg) {
+        LOGGER.log(Level.DEBUG, "Received {0} not allowed.", msg);
+    }
+
+    @Override
+    public void received(LobbyAccept msg) {
+        LOGGER.log(Level.DEBUG, "Received {0} not allowed.", msg);
+    }
+
+    @Override
+    public void received(LobbyDeny msg) {
+        LOGGER.log(Level.DEBUG, "Received {0} not allowed.", msg);
+    }
+
+    @Override
+    public void received(LobbyPlayerJoin msg) {
+        LOGGER.log(Level.DEBUG, "Received {0} not allowed.", msg);
+    }
+
+    @Override
+    public void received(LobbyPlayerLeave msg) {
+        LOGGER.log(Level.DEBUG, "Received {0} not allowed.", msg);
+    }
+
+    @Override
+    public void received(MoveMessage msg) {
+        LOGGER.log(Level.DEBUG, "Received {0} not allowed.", msg);
+    }
+
+    @Override
+    public void received(NoTurn msg) {
+        LOGGER.log(Level.DEBUG, "Received {0} not allowed.", msg);
+    }
+
+    @Override
+    public void received(PauseGame msg) {
+        LOGGER.log(Level.DEBUG, "Received {0} not allowed.", msg);
+    }
+
+    @Override
+    public void received(PlayCard msg) {
+        LOGGER.log(Level.DEBUG, "Received {0} not allowed.", msg);
+    }
+
+    @Override
+    public void received(PossibleCard msg) {
+        LOGGER.log(Level.DEBUG, "Received {0} not allowed.", msg);
+    }
+
+    @Override
+    public void received(PossiblePiece msg) {
+        LOGGER.log(Level.DEBUG, "Received {0} not allowed.", msg);
+    }
+
+    @Override
+    public void received(RankingResponse msg) {
+        LOGGER.log(Level.DEBUG, "Received {0} not allowed.", msg);
+    }
+
+    @Override
+    public void received(RankingRollAgain msg) {
+        LOGGER.log(Level.DEBUG, "Received {0} not allowed.", msg);
+    }
+
+    @Override
+    public void received(ReconnectBriefing msg) {
+        LOGGER.log(Level.DEBUG, "Received {0} not allowed.", msg);
+    }
+
+    @Override
+    public void received(ResumeGame msg) {
+        LOGGER.log(Level.DEBUG, "Received {0} not allowed.", msg);
+    }
+
+    @Override
+    public void received(ServerStartGame msg) {
+        LOGGER.log(Level.DEBUG, "Received {0} not allowed.", msg);
+    }
+
+    @Override
+    public void received(StartPiece msg) {
+        LOGGER.log(Level.DEBUG, "Received {0} not allowed.", msg);
+    }
+
+    @Override
+    public void received(UpdateReady msg) {
+        LOGGER.log(Level.DEBUG, "Received {0} not allowed.", msg);
+    }
+
+    @Override
+    public void received(UpdateTSK msg) {
+        LOGGER.log(Level.DEBUG, "Received {0} not allowed.", msg);
+    }
+
+    @Override
+    public void received(WaitPiece msg) {
+        LOGGER.log(Level.DEBUG, "Received {0} not allowed.", msg);
+    }
+
+    public void selectPiece(UUID id) {
+        LOGGER.log(Level.DEBUG, "Selecting piece not allowed.");
+    }
+
+    public void selectCard(UUID id) {
+        LOGGER.log(Level.DEBUG, "Selecting card not allowed.");
+    }
+
+    public void selectTSK(Color color) {
+        LOGGER.log(Level.DEBUG, "Selecting TSK not allowed.");
+    }
+
+    public void selectDice() {
+        LOGGER.log(Level.DEBUG, "Selecting dice not allowed.");
+    }
+
+    public void setName(String name) {
+        LOGGER.log(Level.DEBUG, "Setting name not allowed.");
+    }
+
+    public void selectReady() {
+        LOGGER.log(Level.DEBUG, "Selecting ready not allowed.");
+    }
+
+    public void selectHost() {
+        LOGGER.log(Level.DEBUG, "Selecting host not allowed.");
+    }
+
+    public void selectJoin() {
+        LOGGER.log(Level.DEBUG, "Selecting join not allowed.");
+    }
+
+    public void selectLeave() {
+        LOGGER.log(Level.DEBUG, "Selecting leave not allowed.");
+    }
+
+    public void deselectTSK(Color color) {
+        LOGGER.log(Level.DEBUG, "Deselecting TSK not allowed.");
+    }
+
+    public void selectUnready(){
+        LOGGER.log(Level.DEBUG, "Selecting unready not allowed.");
+    }
+
+    public void selectStart(){
+        LOGGER.log(Level.DEBUG, "Starting not allowed");
+    }
 }
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientStateMachine.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientStateMachine.java
deleted file mode 100644
index 9537ccb7..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/ClientStateMachine.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package pp.mdga.client;
-
-public abstract class ClientStateMachine extends ClientState {
-
-    private ClientState state;
-
-    protected ClientStateMachine(ClientState parent, ClientGameLogic logic){
-        super(parent, logic);
-    }
-
-    public abstract ClientState initialState();
-
-    @Override
-    public void gotoState(ClientState newState){
-        LOGGER.log(System.Logger.Level.DEBUG, "{0}: {1} --> {2}", this, state, newState);
-        enter(newState);
-    }
-
-    @Override
-    public void entry(){
-        final ClientState newState = initialState();
-        LOGGER.log(System.Logger.Level.DEBUG, "{0}: initial state={1}", this, newState);
-        enter(newState);
-    }
-
-    private void enter(ClientState newState){
-        if(newState.parent != this)
-            throw new IllegalArgumentException("Wrong state: " + newState + " belongs to " + newState.parent + " instead of " + this);
-        state = newState;
-        state.entry();
-    }
-
-    @Override
-    public void exit(){state.exit();}
-
-    @Override
-    public String toString(){
-        return super.toString() + "(in " + state + ")";
-    }
-
-    public ClientState getState(){
-        return state;
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/DetermineStartPlayer.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/DetermineStartPlayer.java
deleted file mode 100644
index 3a773bc8..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/DetermineStartPlayer.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package pp.mdga.client;
-
-public class DetermineStartPlayer extends ClientState {
-    private final DetermineStartPlayerStateMachine determineStartPlayerStateMachine;
-
-    public DetermineStartPlayer(ClientState parent, ClientGameLogic logic) {
-        super(parent, logic);
-        this.determineStartPlayerStateMachine = new DetermineStartPlayerStateMachine(parent, logic);
-    }
-
-    public DetermineStartPlayerStateMachine getDetermineStartPlayerStateMachine() {
-        return determineStartPlayerStateMachine;
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/DetermineStartPlayerStateMachine.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/DetermineStartPlayerStateMachine.java
deleted file mode 100644
index 16c192c7..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/DetermineStartPlayerStateMachine.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package pp.mdga.client;
-
-public class DetermineStartPlayerStateMachine extends ClientStateMachine{
-    public DetermineStartPlayerStateMachine(ClientState parent, ClientGameLogic logic) {
-        super(parent, logic);
-    }
-
-    @Override
-    public RollRankingDice initialState() {
-        return new RollRankingDice(this, logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/DialogStates.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/DialogStates.java
deleted file mode 100644
index f5ad1568..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/DialogStates.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package pp.mdga.client;
-
-public abstract class DialogStates extends ClientState{
-
-    public DialogStates(ClientState parent, ClientGameLogic logic){
-        super(parent, logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/Dialogs.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/Dialogs.java
index 02a63715..54288e29 100644
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/Dialogs.java
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/Dialogs.java
@@ -1,14 +1,53 @@
 package pp.mdga.client;
 
+import pp.mdga.client.dialogState.DialogStates;
+import pp.mdga.client.dialogState.Lobby;
+import pp.mdga.client.dialogState.NetworkDialog;
+import pp.mdga.client.dialogState.StartDialog;
+
 public class Dialogs extends ClientState {
-    private final DialogsStateMachine dialogsStateMachine;
+
+    private DialogStates currentState;
+
+    private final Lobby lobby = new Lobby(this, logic);
+    private final NetworkDialog networkDialog = new NetworkDialog(this, logic);
+    private final StartDialog startDialog = new StartDialog(this, logic);
+
 
     public Dialogs(ClientState parent, ClientGameLogic logic) {
         super(parent, logic);
-        this.dialogsStateMachine = new DialogsStateMachine(parent, logic);
     }
 
-    public DialogsStateMachine getDialogsStateMachine() {
-        return dialogsStateMachine;
+    @Override
+    public void exit(){
+        currentState.exit();
+    }
+
+    @Override
+    public void enter(){
+        currentState = startDialog;
+    }
+
+    public void setState(DialogStates newState){
+        currentState.exit();
+        currentState = newState;
+        currentState.enter();
+    }
+
+    public Lobby getLobby() {
+        return lobby;
+    }
+
+    public NetworkDialog getNetworkDialog() {
+        return networkDialog;
+    }
+
+    public StartDialog getStartDialog() {
+        return startDialog;
+    }
+
+    public void startGame(){
+        exit();
+        logic.setState(logic.getGameState());
     }
 }
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/DialogsStateMachine.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/DialogsStateMachine.java
deleted file mode 100644
index e1b833ad..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/DialogsStateMachine.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package pp.mdga.client;
-
-public class DialogsStateMachine extends ClientStateMachine {
-    public DialogsStateMachine(ClientState parent, ClientGameLogic logic) {
-        super(parent, logic);
-    }
-
-    @Override
-    public StartDialog initialState() {
-        return new StartDialog(this, logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/GameState.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/GameState.java
index 8819c103..b7b9a8cf 100644
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/GameState.java
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/GameState.java
@@ -1,14 +1,29 @@
 package pp.mdga.client;
 
+import pp.mdga.client.gameState.*;
+
 public class GameState extends ClientState {
-    private final GameStateMachine gameStateMachine;
+
+    private GameStates state;
+
+    private Animation animation = new Animation(this, logic);
+    private DetermineStartPlayer determineStartPlayer = new DetermineStartPlayer(this, logic);
+    private Spectator spectator  = new Spectator(this, logic);
+    private Turn turn = new Turn(this, logic);
+    private Waiting waiting = new Waiting(this, logic);
 
     public GameState(ClientState parent, ClientGameLogic logic) {
         super(parent, logic);
-        this.gameStateMachine = new GameStateMachine(parent, logic);
+        state = determineStartPlayer;
     }
 
-    public GameStateMachine getGameStateMachine() {
-        return gameStateMachine;
+    @Override
+    public void enter() {
+
+    }
+
+    @Override
+    public void exit() {
+
     }
 }
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/GameStateMachine.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/GameStateMachine.java
deleted file mode 100644
index 4028c28e..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/GameStateMachine.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package pp.mdga.client;
-
-public class GameStateMachine extends ClientStateMachine {
-    public GameStateMachine(ClientState parent, ClientGameLogic logic) {
-        super(parent, logic);
-    }
-
-    @Override
-    public ClientState initialState() {
-        return null;
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/Interrupt.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/Interrupt.java
index 739a6bd2..3d0cb8cd 100644
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/Interrupt.java
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/Interrupt.java
@@ -2,10 +2,17 @@
 
 public class Interrupt extends ClientState {
 
-    private final GameState lastState;
-
-    public Interrupt(ClientState parent, ClientGameLogic logic, GameState lastState) {
+    public Interrupt(ClientState parent, ClientGameLogic logic) {
         super(parent, logic);
-        this.lastState = lastState;
+    }
+
+    @Override
+    public void enter() {
+
+    }
+
+    @Override
+    public void exit() {
+
     }
 }
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/Lobby.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/Lobby.java
deleted file mode 100644
index 0f23c854..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/Lobby.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.client;
-
-public class Lobby extends ClientState {
-    public Lobby(ClientState parent, ClientGameLogic logic) {
-        super(parent, logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/MainSettings.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/MainSettings.java
deleted file mode 100644
index e8af6b05..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/MainSettings.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.client;
-
-public class MainSettings extends ClientState {
-    public MainSettings(ClientState parent, ClientGameLogic logic) {
-        super(parent, logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/MovePiece.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/MovePiece.java
deleted file mode 100644
index 13bd9b85..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/MovePiece.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.client;
-
-public class MovePiece extends ClientState {
-    public MovePiece(ClientState parent, ClientGameLogic logic) {
-        super(parent, logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/NetworkDialog.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/NetworkDialog.java
deleted file mode 100644
index 8075ae90..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/NetworkDialog.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.client;
-
-public class NetworkDialog extends ClientState {
-    public NetworkDialog(ClientState parent, ClientGameLogic logic) {
-        super(parent, logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/NoPiece.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/NoPiece.java
deleted file mode 100644
index 42375b01..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/NoPiece.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.client;
-
-public class NoPiece extends ClientState {
-    public NoPiece(ClientState parent, ClientGameLogic logic) {
-        super(parent, logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/PlayPowerCard.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/PlayPowerCard.java
deleted file mode 100644
index 4278445f..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/PlayPowerCard.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.client;
-
-public class PlayPowerCard extends ClientState {
-    public PlayPowerCard(ClientState parent, ClientGameLogic logic) {
-        super(parent, logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/Podium.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/Podium.java
deleted file mode 100644
index f962aa68..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/Podium.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.client;
-
-public class Podium extends ClientState {
-    public Podium(ClientState parent, ClientGameLogic logic) {
-        super(parent, logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/PowerCard.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/PowerCard.java
deleted file mode 100644
index 42ea2741..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/PowerCard.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package pp.mdga.client;
-
-public class PowerCard extends ClientState {
-    private final PowerCardStateMachine powerCardStateMachine;
-
-    public PowerCard(ClientState parent, ClientGameLogic logic) {
-        super(parent, logic);
-        this.powerCardStateMachine = new PowerCardStateMachine(parent, logic);
-    }
-
-    public PowerCardStateMachine getPowerCardStateMachine() {
-        return powerCardStateMachine;
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/PowerCardStateMachine.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/PowerCardStateMachine.java
deleted file mode 100644
index 037417bc..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/PowerCardStateMachine.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package pp.mdga.client;
-
-public class PowerCardStateMachine extends ClientStateMachine {
-    public PowerCardStateMachine(ClientState parent, ClientGameLogic logic) {
-        super(parent, logic);
-    }
-
-    @Override
-    public ChoosePowerCard initialState() {
-        return new ChoosePowerCard(this, logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/RollDice.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/RollDice.java
deleted file mode 100644
index 4af7c7ad..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/RollDice.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.client;
-
-public class RollDice extends ClientState {
-    public RollDice(ClientState parent, ClientGameLogic logic) {
-        super(parent, logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/RollRankingDice.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/RollRankingDice.java
deleted file mode 100644
index f1a27dce..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/RollRankingDice.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.client;
-
-public class RollRankingDice extends ClientState {
-    public RollRankingDice(ClientState parent, ClientGameLogic logic) {
-        super(parent, logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/SelectPiece.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/SelectPiece.java
deleted file mode 100644
index 790e91b2..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/SelectPiece.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.client;
-
-public class SelectPiece extends ClientState {
-    public SelectPiece(ClientState parent, ClientGameLogic logic) {
-        super(parent, logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/Settings.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/Settings.java
index a30942ab..7f57598b 100644
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/Settings.java
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/Settings.java
@@ -1,14 +1,18 @@
 package pp.mdga.client;
 
 public class Settings extends ClientState {
-    private final SettingsStateMachine settingsStateMachine;
 
     public Settings(ClientState parent, ClientGameLogic logic) {
         super(parent, logic);
-        this.settingsStateMachine = new SettingsStateMachine(parent, logic);
     }
 
-    public SettingsStateMachine getSettingsStateMachine() {
-        return settingsStateMachine;
+    @Override
+    public void enter() {
+
+    }
+
+    @Override
+    public void exit() {
+
     }
 }
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/SettingsStateMachine.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/SettingsStateMachine.java
deleted file mode 100644
index 0abb565e..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/SettingsStateMachine.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package pp.mdga.client;
-
-public class SettingsStateMachine extends ClientStateMachine {
-    public SettingsStateMachine(ClientState parent, ClientGameLogic logic) {
-        super(parent, logic);
-    }
-
-    @Override
-    public ClientState initialState() {
-        return null;
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/Shield.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/Shield.java
deleted file mode 100644
index a3f205ba..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/Shield.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.client;
-
-public class Shield extends ClientState {
-    public Shield(ClientState parent, ClientGameLogic logic) {
-        super(parent, logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/Spectator.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/Spectator.java
deleted file mode 100644
index 293fc2b3..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/Spectator.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.client;
-
-public class Spectator extends ClientState {
-    public Spectator(ClientState parent, ClientGameLogic logic) {
-        super(parent, logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/StartDialog.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/StartDialog.java
deleted file mode 100644
index 90bb1e2b..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/StartDialog.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.client;
-
-public class StartDialog extends DialogStates {
-    public StartDialog(ClientState parent, ClientGameLogic logic) {
-        super(parent, logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/StartPiece.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/StartPiece.java
deleted file mode 100644
index 7e52fd56..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/StartPiece.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.client;
-
-public class StartPiece extends ClientState {
-    public StartPiece(ClientState parent, ClientGameLogic logic) {
-        super(parent, logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/Statistics.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/Statistics.java
deleted file mode 100644
index 8eecb5ce..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/Statistics.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.client;
-
-public class Statistics extends ClientState {
-    public Statistics(ClientState parent, ClientGameLogic logic) {
-        super(parent, logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/Swap.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/Swap.java
deleted file mode 100644
index da3ef3c5..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/Swap.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.client;
-
-public class Swap extends ClientState {
-    public Swap(ClientState parent, ClientGameLogic logic) {
-        super(parent, logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/Turn.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/Turn.java
deleted file mode 100644
index 3bdef5e6..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/Turn.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package pp.mdga.client;
-
-public class Turn extends ClientState {
-    private final TurnStateMachine turnStateMachine;
-
-    public Turn(ClientState parent, ClientGameLogic logic) {
-        super(parent, logic);
-        this.turnStateMachine = new TurnStateMachine(parent, logic);
-    }
-
-    public TurnStateMachine getTurnStateMachine() {
-        return turnStateMachine;
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/TurnStateMachine.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/TurnStateMachine.java
deleted file mode 100644
index 60501cd8..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/TurnStateMachine.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package pp.mdga.client;
-
-public class TurnStateMachine extends ClientStateMachine {
-    public TurnStateMachine(ClientState parent, ClientGameLogic logic) {
-        super(parent, logic);
-    }
-
-    @Override
-    public PowerCard initialState() {
-        return new PowerCard(this, logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/VideoSettings.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/VideoSettings.java
deleted file mode 100644
index 0b397e1a..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/VideoSettings.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.client;
-
-public class VideoSettings extends ClientState {
-    public VideoSettings(ClientState parent, ClientGameLogic logic) {
-        super(parent, logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/WaitRanking.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/WaitRanking.java
deleted file mode 100644
index b9db2175..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/WaitRanking.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.client;
-
-public class WaitRanking extends ClientState {
-    public WaitRanking(ClientState parent, ClientGameLogic logic) {
-        super(parent, logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/Waiting.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/Waiting.java
deleted file mode 100644
index 14a32cdf..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/Waiting.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.client;
-
-public class Waiting extends ClientState {
-    public Waiting(ClientState parent, ClientGameLogic logic) {
-        super(parent, logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/WaitingPiece.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/WaitingPiece.java
deleted file mode 100644
index 7b12a023..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/client/WaitingPiece.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.client;
-
-public class WaitingPiece extends ClientState {
-    public WaitingPiece(ClientState parent, ClientGameLogic logic) {
-        super(parent, logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/ceremonyState/CeremonyStates.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/ceremonyState/CeremonyStates.java
new file mode 100644
index 00000000..8bd888c7
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/ceremonyState/CeremonyStates.java
@@ -0,0 +1,10 @@
+package pp.mdga.client.ceremonyState;
+
+import pp.mdga.client.ClientGameLogic;
+import pp.mdga.client.ClientState;
+
+public abstract class CeremonyStates extends ClientState {
+    protected CeremonyStates(ClientState parent, ClientGameLogic logic) {
+        super(parent, logic);
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/ceremonyState/Podium.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/ceremonyState/Podium.java
new file mode 100644
index 00000000..b7bac3c2
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/ceremonyState/Podium.java
@@ -0,0 +1,20 @@
+package pp.mdga.client.ceremonyState;
+
+import pp.mdga.client.ClientGameLogic;
+import pp.mdga.client.ClientState;
+
+public class Podium extends CeremonyStates {
+    public Podium(ClientState parent, ClientGameLogic logic) {
+        super(parent, logic);
+    }
+
+    @Override
+    public void enter() {
+
+    }
+
+    @Override
+    public void exit() {
+
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/ceremonyState/Statistics.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/ceremonyState/Statistics.java
new file mode 100644
index 00000000..76f00d76
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/ceremonyState/Statistics.java
@@ -0,0 +1,20 @@
+package pp.mdga.client.ceremonyState;
+
+import pp.mdga.client.ClientGameLogic;
+import pp.mdga.client.ClientState;
+
+public class Statistics extends CeremonyStates {
+    public Statistics(ClientState parent, ClientGameLogic logic) {
+        super(parent, logic);
+    }
+
+    @Override
+    public void enter() {
+
+    }
+
+    @Override
+    public void exit() {
+
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/dialogState/DialogStates.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/dialogState/DialogStates.java
new file mode 100644
index 00000000..f4c549d2
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/dialogState/DialogStates.java
@@ -0,0 +1,11 @@
+package pp.mdga.client.dialogState;
+
+import pp.mdga.client.ClientGameLogic;
+import pp.mdga.client.ClientState;
+
+public abstract class DialogStates extends ClientState {
+
+    public DialogStates(ClientState parent, ClientGameLogic logic){
+        super(parent, logic);
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/dialogState/Lobby.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/dialogState/Lobby.java
new file mode 100644
index 00000000..e2eb9091
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/dialogState/Lobby.java
@@ -0,0 +1,63 @@
+package pp.mdga.client.dialogState;
+
+import pp.mdga.client.ClientGameLogic;
+import pp.mdga.client.ClientState;
+import pp.mdga.client.Dialogs;
+import pp.mdga.game.Color;
+import pp.mdga.message.client.*;
+import pp.mdga.message.server.ServerStartGame;
+
+public class Lobby extends DialogStates {
+
+    private final Dialogs parent;
+
+    public Lobby(ClientState parent, ClientGameLogic logic) {
+        super(parent, logic);
+        this.parent = (Dialogs) parent;
+    }
+
+    @Override
+    public void enter() {
+
+    }
+
+    @Override
+    public void exit() {
+
+    }
+
+    @Override
+    public void selectLeave() {
+        parent.setState(parent.getStartDialog());
+    }
+
+    @Override
+    public void selectTSK(Color color) {
+        logic.send(new SelectTSK(color));
+    }
+
+    @Override
+    public void deselectTSK(Color color) {
+        logic.send(new DeselectTSK(color));
+    }
+
+    @Override
+    public void selectReady() {
+        logic.send(new LobbyReady());
+    }
+
+    @Override
+    public void selectUnready(){
+        logic.send(new LobbyNotReady());
+    }
+
+    @Override
+    public void selectStart(){
+        logic.send(new StartGame());
+    }
+
+    @Override
+    public void received(ServerStartGame msg){
+        parent.startGame();
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/dialogState/NetworkDialog.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/dialogState/NetworkDialog.java
new file mode 100644
index 00000000..923c3b82
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/dialogState/NetworkDialog.java
@@ -0,0 +1,62 @@
+package pp.mdga.client.dialogState;
+
+import pp.mdga.client.ClientGameLogic;
+import pp.mdga.client.ClientState;
+import pp.mdga.client.Dialogs;
+
+public class NetworkDialog extends DialogStates {
+
+    private final Dialogs parent;
+
+    public NetworkDialog(ClientState parent, ClientGameLogic logic) {
+        super(parent, logic);
+        this.parent = (Dialogs) parent;
+    }
+
+    private boolean checkIP(String IP){
+        String[] parts = IP.split("\\.");
+
+        // Step 2: Check if there are exactly 4 parts
+        if (parts.length != 4) {
+            return false;
+        }
+
+        // Step 3: Check each part for valid number
+        for (String part : parts) {
+            try {
+                // Step 4: Convert each part into a number
+                int num = Integer.parseInt(part);
+
+                // Step 5: Check whether the number lies in between 0 and 255
+                if (num < 0 || num > 255) {
+                    return false;
+                }
+            } catch (NumberFormatException e) {
+                // If parsing fails, it's not a valid number
+                return false;
+            }
+        }
+
+        // If all checks passed, return true
+        return true;
+    }
+
+    @Override
+    public void enter() {
+    }
+
+    @Override
+    public void exit() {
+    }
+
+    public void selectBack() {
+        parent.setState(parent.getStartDialog());
+    }
+
+    public void selectJoin(String IP) {
+        if(checkIP(IP)){
+            parent.setState(parent.getLobby());
+        }
+
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/dialogState/StartDialog.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/dialogState/StartDialog.java
new file mode 100644
index 00000000..0ebac81c
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/dialogState/StartDialog.java
@@ -0,0 +1,37 @@
+package pp.mdga.client.dialogState;
+
+import pp.mdga.client.ClientGameLogic;
+import pp.mdga.client.ClientState;
+import pp.mdga.client.Dialogs;
+
+public class StartDialog extends DialogStates {
+
+    private final Dialogs parent;
+
+    public StartDialog(ClientState parent, ClientGameLogic logic) {
+        super(parent, logic);
+        this.parent = (Dialogs) parent;
+    }
+
+    @Override
+    public void enter() {
+
+    }
+
+    @Override
+    public void exit() {
+
+    }
+
+    public void selectJoin() {
+        parent.setState(parent.getNetworkDialog());
+    }
+
+    public void selectHost() {
+        parent.setState(parent.getLobby());
+    }
+
+    public void selectLeave() {
+        parent.exit();
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/Animation.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/Animation.java
new file mode 100644
index 00000000..0d662c08
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/Animation.java
@@ -0,0 +1,20 @@
+package pp.mdga.client.gameState;
+
+import pp.mdga.client.ClientGameLogic;
+import pp.mdga.client.ClientState;
+
+public class Animation extends GameStates {
+    public Animation(ClientState parent, ClientGameLogic logic) {
+        super(parent, logic);
+    }
+
+    @Override
+    public void enter() {
+
+    }
+
+    @Override
+    public void exit() {
+
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/DetermineStartPlayer.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/DetermineStartPlayer.java
new file mode 100644
index 00000000..9bfb9a6e
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/DetermineStartPlayer.java
@@ -0,0 +1,21 @@
+package pp.mdga.client.gameState;
+
+import pp.mdga.client.ClientGameLogic;
+import pp.mdga.client.ClientState;
+
+public class DetermineStartPlayer extends GameStates {
+
+    public DetermineStartPlayer(ClientState parent, ClientGameLogic logic) {
+        super(parent, logic);
+    }
+
+    @Override
+    public void enter() {
+
+    }
+
+    @Override
+    public void exit() {
+
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/GameStates.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/GameStates.java
new file mode 100644
index 00000000..05d1c404
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/GameStates.java
@@ -0,0 +1,10 @@
+package pp.mdga.client.gameState;
+
+import pp.mdga.client.ClientGameLogic;
+import pp.mdga.client.ClientState;
+
+public abstract class GameStates extends ClientState {
+    public GameStates(ClientState parent, ClientGameLogic logic) {
+        super(parent, logic);
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/Spectator.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/Spectator.java
new file mode 100644
index 00000000..4610a264
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/Spectator.java
@@ -0,0 +1,20 @@
+package pp.mdga.client.gameState;
+
+import pp.mdga.client.ClientGameLogic;
+import pp.mdga.client.ClientState;
+
+public class Spectator extends GameStates {
+    public Spectator(ClientState parent, ClientGameLogic logic) {
+        super(parent, logic);
+    }
+
+    @Override
+    public void enter() {
+
+    }
+
+    @Override
+    public void exit() {
+
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/Turn.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/Turn.java
new file mode 100644
index 00000000..d5ecd747
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/Turn.java
@@ -0,0 +1,21 @@
+package pp.mdga.client.gameState;
+
+import pp.mdga.client.ClientGameLogic;
+import pp.mdga.client.ClientState;
+
+public class Turn extends GameStates {
+
+    public Turn(ClientState parent, ClientGameLogic logic) {
+        super(parent, logic);
+    }
+
+    @Override
+    public void enter() {
+
+    }
+
+    @Override
+    public void exit() {
+
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/Waiting.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/Waiting.java
new file mode 100644
index 00000000..2ac53405
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/Waiting.java
@@ -0,0 +1,20 @@
+package pp.mdga.client.gameState;
+
+import pp.mdga.client.ClientGameLogic;
+import pp.mdga.client.ClientState;
+
+public class Waiting extends GameStates {
+    public Waiting(ClientState parent, ClientGameLogic logic) {
+        super(parent, logic);
+    }
+
+    @Override
+    public void enter() {
+
+    }
+
+    @Override
+    public void exit() {
+
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/determineStartPlayerState/DetermineStartPlayerStates.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/determineStartPlayerState/DetermineStartPlayerStates.java
new file mode 100644
index 00000000..6be7ece5
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/determineStartPlayerState/DetermineStartPlayerStates.java
@@ -0,0 +1,12 @@
+package pp.mdga.client.gameState.determineStartPlayerState;
+
+import pp.mdga.client.ClientGameLogic;
+import pp.mdga.client.ClientState;
+import pp.mdga.client.gameState.GameStates;
+
+public abstract class DetermineStartPlayerStates extends GameStates {
+    public DetermineStartPlayerStates(ClientState parent, ClientGameLogic logic) {
+        super(parent, logic);
+    }
+
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/determineStartPlayerState/RollRankingDice.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/determineStartPlayerState/RollRankingDice.java
new file mode 100644
index 00000000..774f5f00
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/determineStartPlayerState/RollRankingDice.java
@@ -0,0 +1,20 @@
+package pp.mdga.client.gameState.determineStartPlayerState;
+
+import pp.mdga.client.ClientGameLogic;
+import pp.mdga.client.ClientState;
+
+public class RollRankingDice extends DetermineStartPlayerStates {
+    public RollRankingDice(ClientState parent, ClientGameLogic logic) {
+        super(parent, logic);
+    }
+
+    @Override
+    public void enter() {
+
+    }
+
+    @Override
+    public void exit() {
+
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/determineStartPlayerState/WaitRanking.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/determineStartPlayerState/WaitRanking.java
new file mode 100644
index 00000000..3619c7d9
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/determineStartPlayerState/WaitRanking.java
@@ -0,0 +1,21 @@
+package pp.mdga.client.gameState.determineStartPlayerState;
+
+import pp.mdga.client.ClientGameLogic;
+import pp.mdga.client.ClientState;
+import pp.mdga.client.gameState.GameStates;
+
+public class WaitRanking extends GameStates {
+    public WaitRanking(ClientState parent, ClientGameLogic logic) {
+        super(parent, logic);
+    }
+
+    @Override
+    public void enter() {
+
+    }
+
+    @Override
+    public void exit() {
+
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/ChoosePiece.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/ChoosePiece.java
new file mode 100644
index 00000000..a161030f
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/ChoosePiece.java
@@ -0,0 +1,21 @@
+package pp.mdga.client.gameState.turnState;
+
+import pp.mdga.client.ClientGameLogic;
+import pp.mdga.client.ClientState;
+
+public class ChoosePiece extends TurnStates {
+
+    public ChoosePiece(ClientState parent, ClientGameLogic logic) {
+        super(parent, logic);
+    }
+
+    @Override
+    public void enter() {
+
+    }
+
+    @Override
+    public void exit() {
+
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/MovePiece.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/MovePiece.java
new file mode 100644
index 00000000..2fb60032
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/MovePiece.java
@@ -0,0 +1,20 @@
+package pp.mdga.client.gameState.turnState;
+
+import pp.mdga.client.ClientGameLogic;
+import pp.mdga.client.ClientState;
+
+public class MovePiece extends TurnStates {
+    public MovePiece(ClientState parent, ClientGameLogic logic) {
+        super(parent, logic);
+    }
+
+    @Override
+    public void enter() {
+
+    }
+
+    @Override
+    public void exit() {
+
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/PlayPowerCard.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/PlayPowerCard.java
new file mode 100644
index 00000000..8d5724f7
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/PlayPowerCard.java
@@ -0,0 +1,20 @@
+package pp.mdga.client.gameState.turnState;
+
+import pp.mdga.client.ClientGameLogic;
+import pp.mdga.client.ClientState;
+
+public class PlayPowerCard extends TurnStates {
+    public PlayPowerCard(ClientState parent, ClientGameLogic logic) {
+        super(parent, logic);
+    }
+
+    @Override
+    public void enter() {
+
+    }
+
+    @Override
+    public void exit() {
+
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/PowerCard.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/PowerCard.java
new file mode 100644
index 00000000..02682c4f
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/PowerCard.java
@@ -0,0 +1,21 @@
+package pp.mdga.client.gameState.turnState;
+
+import pp.mdga.client.ClientGameLogic;
+import pp.mdga.client.ClientState;
+
+public class PowerCard extends TurnStates {
+
+    public PowerCard(ClientState parent, ClientGameLogic logic) {
+        super(parent, logic);
+    }
+
+    @Override
+    public void enter() {
+
+    }
+
+    @Override
+    public void exit() {
+
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/RollDice.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/RollDice.java
new file mode 100644
index 00000000..bf0544cd
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/RollDice.java
@@ -0,0 +1,20 @@
+package pp.mdga.client.gameState.turnState;
+
+import pp.mdga.client.ClientGameLogic;
+import pp.mdga.client.ClientState;
+
+public class RollDice extends TurnStates {
+    public RollDice(ClientState parent, ClientGameLogic logic) {
+        super(parent, logic);
+    }
+
+    @Override
+    public void enter() {
+
+    }
+
+    @Override
+    public void exit() {
+
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/TurnStates.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/TurnStates.java
new file mode 100644
index 00000000..6ca2cd4d
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/TurnStates.java
@@ -0,0 +1,11 @@
+package pp.mdga.client.gameState.turnState;
+
+import pp.mdga.client.ClientGameLogic;
+import pp.mdga.client.ClientState;
+import pp.mdga.client.gameState.GameStates;
+
+public  abstract class TurnStates extends GameStates {
+    public TurnStates(ClientState parent, ClientGameLogic logic) {
+        super(parent, logic);
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/choosePieceState/ChoosePieceStates.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/choosePieceState/ChoosePieceStates.java
new file mode 100644
index 00000000..231b2d37
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/choosePieceState/ChoosePieceStates.java
@@ -0,0 +1,11 @@
+package pp.mdga.client.gameState.turnState.choosePieceState;
+
+import pp.mdga.client.ClientGameLogic;
+import pp.mdga.client.ClientState;
+import pp.mdga.client.gameState.turnState.TurnStates;
+
+public abstract class ChoosePieceStates extends TurnStates {
+    public ChoosePieceStates(ClientState parent, ClientGameLogic logic) {
+        super(parent, logic);
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/choosePieceState/NoPiece.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/choosePieceState/NoPiece.java
new file mode 100644
index 00000000..2daf6271
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/choosePieceState/NoPiece.java
@@ -0,0 +1,20 @@
+package pp.mdga.client.gameState.turnState.choosePieceState;
+
+import pp.mdga.client.ClientGameLogic;
+import pp.mdga.client.ClientState;
+
+public class NoPiece extends ChoosePieceStates {
+    public NoPiece(ClientState parent, ClientGameLogic logic) {
+        super(parent, logic);
+    }
+
+    @Override
+    public void enter() {
+
+    }
+
+    @Override
+    public void exit() {
+
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/choosePieceState/SelectPiece.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/choosePieceState/SelectPiece.java
new file mode 100644
index 00000000..bfac2134
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/choosePieceState/SelectPiece.java
@@ -0,0 +1,20 @@
+package pp.mdga.client.gameState.turnState.choosePieceState;
+
+import pp.mdga.client.ClientGameLogic;
+import pp.mdga.client.ClientState;
+
+public class SelectPiece extends ChoosePieceStates {
+    public SelectPiece(ClientState parent, ClientGameLogic logic) {
+        super(parent, logic);
+    }
+
+    @Override
+    public void enter() {
+
+    }
+
+    @Override
+    public void exit() {
+
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/choosePieceState/StartPiece.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/choosePieceState/StartPiece.java
new file mode 100644
index 00000000..9a192957
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/choosePieceState/StartPiece.java
@@ -0,0 +1,20 @@
+package pp.mdga.client.gameState.turnState.choosePieceState;
+
+import pp.mdga.client.ClientGameLogic;
+import pp.mdga.client.ClientState;
+
+public class StartPiece extends ChoosePieceStates {
+    public StartPiece(ClientState parent, ClientGameLogic logic) {
+        super(parent, logic);
+    }
+
+    @Override
+    public void enter() {
+
+    }
+
+    @Override
+    public void exit() {
+
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/choosePieceState/WaitingPiece.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/choosePieceState/WaitingPiece.java
new file mode 100644
index 00000000..77b44da1
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/choosePieceState/WaitingPiece.java
@@ -0,0 +1,20 @@
+package pp.mdga.client.gameState.turnState.choosePieceState;
+
+import pp.mdga.client.ClientGameLogic;
+import pp.mdga.client.ClientState;
+
+public class WaitingPiece extends ChoosePieceStates {
+    public WaitingPiece(ClientState parent, ClientGameLogic logic) {
+        super(parent, logic);
+    }
+
+    @Override
+    public void enter() {
+
+    }
+
+    @Override
+    public void exit() {
+
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/powerCardState/ChoosePowerCard.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/powerCardState/ChoosePowerCard.java
new file mode 100644
index 00000000..9638f798
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/powerCardState/ChoosePowerCard.java
@@ -0,0 +1,20 @@
+package pp.mdga.client.gameState.turnState.powerCardState;
+
+import pp.mdga.client.ClientGameLogic;
+import pp.mdga.client.ClientState;
+
+public class ChoosePowerCard extends PowerCardStates {
+    public ChoosePowerCard(ClientState parent, ClientGameLogic logic) {
+        super(parent, logic);
+    }
+
+    @Override
+    public void enter() {
+
+    }
+
+    @Override
+    public void exit() {
+
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/powerCardState/PowerCardStates.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/powerCardState/PowerCardStates.java
new file mode 100644
index 00000000..753e5aa8
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/powerCardState/PowerCardStates.java
@@ -0,0 +1,11 @@
+package pp.mdga.client.gameState.turnState.powerCardState;
+
+import pp.mdga.client.ClientGameLogic;
+import pp.mdga.client.ClientState;
+import pp.mdga.client.gameState.turnState.TurnStates;
+
+public abstract class PowerCardStates extends TurnStates {
+    public PowerCardStates(ClientState parent, ClientGameLogic logic) {
+        super(parent, logic);
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/powerCardState/Shield.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/powerCardState/Shield.java
new file mode 100644
index 00000000..748e57ad
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/powerCardState/Shield.java
@@ -0,0 +1,20 @@
+package pp.mdga.client.gameState.turnState.powerCardState;
+
+import pp.mdga.client.ClientGameLogic;
+import pp.mdga.client.ClientState;
+
+public class Shield extends PowerCardStates {
+    public Shield(ClientState parent, ClientGameLogic logic) {
+        super(parent, logic);
+    }
+
+    @Override
+    public void enter() {
+
+    }
+
+    @Override
+    public void exit() {
+
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/powerCardState/Swap.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/powerCardState/Swap.java
new file mode 100644
index 00000000..b88c53d3
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/gameState/turnState/powerCardState/Swap.java
@@ -0,0 +1,20 @@
+package pp.mdga.client.gameState.turnState.powerCardState;
+
+import pp.mdga.client.ClientGameLogic;
+import pp.mdga.client.ClientState;
+
+public class Swap extends PowerCardStates {
+    public Swap(ClientState parent, ClientGameLogic logic) {
+        super(parent, logic);
+    }
+
+    @Override
+    public void enter() {
+
+    }
+
+    @Override
+    public void exit() {
+
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/settingsState/AudioSettings.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/settingsState/AudioSettings.java
new file mode 100644
index 00000000..c8e6f258
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/settingsState/AudioSettings.java
@@ -0,0 +1,20 @@
+package pp.mdga.client.settingsState;
+
+import pp.mdga.client.ClientGameLogic;
+import pp.mdga.client.ClientState;
+
+public class AudioSettings extends SettingStates {
+    public AudioSettings(ClientState parent, ClientGameLogic logic) {
+        super(parent, logic);
+    }
+
+    @Override
+    public void enter() {
+
+    }
+
+    @Override
+    public void exit() {
+
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/settingsState/MainSettings.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/settingsState/MainSettings.java
new file mode 100644
index 00000000..44241156
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/settingsState/MainSettings.java
@@ -0,0 +1,20 @@
+package pp.mdga.client.settingsState;
+
+import pp.mdga.client.ClientGameLogic;
+import pp.mdga.client.ClientState;
+
+public class MainSettings extends ClientState {
+    public MainSettings(ClientState parent, ClientGameLogic logic) {
+        super(parent, logic);
+    }
+
+    @Override
+    public void enter() {
+
+    }
+
+    @Override
+    public void exit() {
+
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/settingsState/SettingStates.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/settingsState/SettingStates.java
new file mode 100644
index 00000000..2b9fb2ff
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/settingsState/SettingStates.java
@@ -0,0 +1,10 @@
+package pp.mdga.client.settingsState;
+
+import pp.mdga.client.ClientGameLogic;
+import pp.mdga.client.ClientState;
+
+public abstract class SettingStates extends ClientState {
+    public SettingStates(ClientState parent, ClientGameLogic logic) {
+        super(parent, logic);
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/client/settingsState/VideoSettings.java b/Projekte/mdga/model/src/main/java/pp/mdga/client/settingsState/VideoSettings.java
new file mode 100644
index 00000000..214ebcb5
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/client/settingsState/VideoSettings.java
@@ -0,0 +1,20 @@
+package pp.mdga.client.settingsState;
+
+import pp.mdga.client.ClientGameLogic;
+import pp.mdga.client.ClientState;
+
+public class VideoSettings extends SettingStates {
+    public VideoSettings(ClientState parent, ClientGameLogic logic) {
+        super(parent, logic);
+    }
+
+    @Override
+    public void enter() {
+
+    }
+
+    @Override
+    public void exit() {
+
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/game/Color.java b/Projekte/mdga/model/src/main/java/pp/mdga/game/Color.java
index 99b42856..7e7e2344 100644
--- a/Projekte/mdga/model/src/main/java/pp/mdga/game/Color.java
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/game/Color.java
@@ -1,9 +1,12 @@
 package pp.mdga.game;
 
 public enum Color {
-    ARMY,
-    NAVY,
+    AIRFORCE,
     CYBER,
-    AIRFORCE
+    NAVY,
+    ARMY;
 
+    public Color next() {
+        return values()[(ordinal() + 1) % values().length];
+    }
 }
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/game/Game.java b/Projekte/mdga/model/src/main/java/pp/mdga/game/Game.java
index 87669c71..e76cffb6 100644
--- a/Projekte/mdga/model/src/main/java/pp/mdga/game/Game.java
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/game/Game.java
@@ -8,29 +8,27 @@
  * The game state is updated by the game logic.
  */
 public class Game {
+    /**
+     * Constants.
+     */
+    public static final int AMOUNT_OF_TURBO_CARDS = 16;
+    public static final int AMOUNT_OF_SHIELD_AND_SWAP_CARDS = 12;
+
+    /**
+     * Attributes.
+     */
     private int diceModifier = 1;
     private int diceEyes;
-    private Map players = new EnumMap<>(Color.class);
+    private Map players = new HashMap<>();
     private Statistic gameStatistics;
     private List drawPile;
     private List discardPile = new ArrayList<>();
     private Board board;
     private Color activeColor;
-    private List order;
-    private final ArrayList playerList = new ArrayList<>(4);
-
     private final ArrayList observers = new ArrayList<>();
-    private Player startPlayer;
-    private Boolean gameHasStarted = false;
-    private Boolean playerHasDisconnected = false;
-    private Boolean gameIsInterrupted = false;
-    private Boolean allRanked = false;
-    private Boolean movablePieces = false;
-
-    private Boolean allReady = false;
-
-    private static final int AMOUNT_OF_TURBO_CARDS = 16;
-    private static final int AMOUNT_OF_SHIELD_AND_SWAP_CARDS = 12;
+    private boolean allRanked = false;
+    private boolean movablePieces = false;
+    private boolean allReady = false;
 
     /**
      * This constructor creates a new Game object.
@@ -48,185 +46,23 @@ public Game() {
         board = new Board();
     }
 
-    /**
-     * This method returns the dice modifier.
-     *
-     * @return the dice modifier
-     */
-    public int getDiceModifier() {
-        return diceModifier;
-    }
-
-    /**
-     * This method sets the dice modifier.
-     *
-     * @param diceModifier the new dice modifier
-     */
-    public void setDiceModifier(int diceModifier) {
-        this.diceModifier = diceModifier;
-    }
-
-    /**
-     * This method returns the dice eyes.
-     *
-     * @return the dice eyes
-     */
-    public int getDiceEyes() {
-        return diceEyes;
-    }
-
-    /**
-     * This method sets the dice eyes.
-     *
-     * @param diceEyes the new dice eyes
-     */
-    public void setDiceEyes(int diceEyes) {
-        this.diceEyes = diceEyes;
-    }
-
-    /**
-     * This method returns the players.
-     *
-     * @return the players
-     */
-    public Map getPlayers() {
-        return players;
-    }
-
-    /**
-     * This method sets the players.
-     *
-     * @param players the new players
-     */
-    public void setPlayers(Map players) {
-        this.players = players;
-    }
-
-    /**
-     * This method returns the game statistics.
-     *
-     * @return the game statistics
-     */
-    public Statistic getGameStatistics() {
-        return gameStatistics;
-    }
-
-    /**
-     * This method sets the game statistics.
-     *
-     * @param gameStatistics the new game statistics
-     */
-    public void setGameStatistics(Statistic gameStatistics) {
-        this.gameStatistics = gameStatistics;
-    }
-
-    /**
-     * This method returns the draw pile.
-     *
-     * @return the draw pile
-     */
-    public List getDrawPile() {
-        return drawPile;
-    }
-
-    /**
-     * This method sets the draw pile.
-     *
-     * @param drawPile the new draw pile
-     */
-    public void setDrawPile(List drawPile) {
-        this.drawPile = drawPile;
-    }
-
-    /**
-     * This method returns the discard pile.
-     *
-     * @return the discard pile
-     */
-    public List getDiscardPile() {
-        return discardPile;
-    }
-
-    /**
-     * This method sets the discard pile.
-     *
-     * @param discardPile the new discard pile
-     */
-    public void setDiscardPile(List discardPile) {
-        this.discardPile = discardPile;
-    }
-
-    /**
-     * This method returns the board.
-     *
-     * @return the board
-     */
-    public Board getBoard() {
-        return board;
-    }
-
-    /**
-     * This method sets the board.
-     *
-     * @param board the new board
-     */
-    public void setBoard(Board board) {
-        this.board = board;
-    }
-
-    /**
-     * This method returns the active color.
-     *
-     * @return the active color
-     */
-    public Color getActiveColor() {
-        return activeColor;
-    }
-
-    /**
-     * This method sets the active color.
-     *
-     * @param activeColor the new active color
-     */
-    public void setActiveColor(Color activeColor) {
-        this.activeColor = activeColor;
-    }
-
-    /**
-     * This method returns the order of the players.
-     *
-     * @return the order of the players
-     */
-    public List getOrder() {
-        return order;
-    }
-
-    /**
-     * This method sets the order of the players.
-     *
-     * @param order the new order of the players
-     */
-    public void setOrder(List order) {
-        this.order = order;
-    }
-
     /**
      * This method adds a player to the game.
      *
-     * @param color  the color of the player
+     * @param id     the id of the player
      * @param player the player to be added
      */
-    public void addPlayer(Color color, Player player) {
-        players.put(color, player);
+    public void addPlayer(int id, Player player) {
+        players.put(id, player);
     }
 
     /**
      * This method removes a player from the game.
      *
-     * @param color the color of the player
+     * @param id the color of the player
      */
-    public void removePlayer(Color color) {
-        players.remove(color);
+    public void removePlayer(int id) {
+        players.remove(id);
     }
 
     /**
@@ -248,49 +84,135 @@ public void removeObserver(Observer observer) {
     }
 
     /**
-     * This method returns the game has started.
      *
-     * @return the game has started
+     * @param id
+     * @param active
      */
-    public Boolean getGameHasStarted() {
-        return gameHasStarted;
+    public void updatePlayerActiveState(int id, boolean active) {
+        this.players.get(id).setActive(active);
     }
 
     /**
-     * This method sets the game has started.
+     * This method will be used to return the player which has the given id parameter.
      *
-     * @param gameHasStarted the new game has started
+     * @param id as the unique id of a player as an Integer.
+     * @return the player with the given id as a Player object.
      */
-    public void setGameHasStarted(Boolean gameHasStarted) {
-        this.gameHasStarted = gameHasStarted;
+    public Player getPlayerById(int id) {
+        return this.players.get(id);
     }
 
     /**
-     * This method returns the player has disconnected.
+     * This method will be used to the get the player depending on the given color parameter.
      *
-     * @return the player has disconnected
+     * @param color as the color of the player as a Color enumeration.
+     * @return the player with the given color as a Player object.
      */
-    public Boolean playerHasDisconnected() {
-        return playerHasDisconnected;
+    public Player getPlayerByColor(Color color) {
+        for (Map.Entry entry : this.players.entrySet()) {
+            if (entry.getValue().getColor() == color) {
+                return entry.getValue();
+            }
+        }
+
+        return null;
     }
 
     /**
-     * This method sets the game interruption state.
+     * This method will be used to return the number of active players of this game.
      *
-     * @param gameIsInterrupted the new game interruption state
+     * @return activePlayers as an Integer.
      */
-    public void setGameIsInterrupted(Boolean gameIsInterrupted) {
-        this.gameIsInterrupted = gameIsInterrupted;
-        if (Boolean.FALSE.equals(gameIsInterrupted)) notifyObservers();
+    public int getNumberOfActivePlayers() {
+        int activePlayers = 0;
+        for (Map.Entry entry : this.players.entrySet()) {
+            if (entry.getValue().isActive()) {
+                activePlayers++;
+            }
+        }
+
+        return activePlayers;
     }
 
     /**
-     * This method returns whether the game is interrupted.
-     *
-     * @return true if the game is interrupted, false otherwise
+     * This method notifies the observers.
      */
-    public Boolean gameIsInterrupted() {
-        return gameIsInterrupted;
+    public void notifyObservers() {
+        for (Observer observer : new ArrayList<>(observers)) {
+            observer.update();
+        }
+    }
+
+    /**
+     * This method returns the dice modifier.
+     *
+     * @return the dice modifier
+     */
+    public int getDiceModifier() {
+        return diceModifier;
+    }
+
+    /**
+     * This method returns the dice eyes.
+     *
+     * @return the dice eyes
+     */
+    public int getDiceEyes() {
+        return diceEyes;
+    }
+
+    /**
+     * This method returns the players.
+     *
+     * @return the players
+     */
+    public Map getPlayers() {
+        return players;
+    }
+
+    /**
+     * This method returns the game statistics.
+     *
+     * @return the game statistics
+     */
+    public Statistic getGameStatistics() {
+        return gameStatistics;
+    }
+
+    /**
+     * This method returns the draw pile.
+     *
+     * @return the draw pile
+     */
+    public List getDrawPile() {
+        return drawPile;
+    }
+
+    /**
+     * This method returns the discard pile.
+     *
+     * @return the discard pile
+     */
+    public List getDiscardPile() {
+        return discardPile;
+    }
+
+    /**
+     * This method returns the board.
+     *
+     * @return the board
+     */
+    public Board getBoard() {
+        return board;
+    }
+
+    /**
+     * This method returns the active color.
+     *
+     * @return the active color
+     */
+    public Color getActiveColor() {
+        return activeColor;
     }
 
     /**
@@ -302,6 +224,78 @@ public Boolean getMovablePieces() {
         return movablePieces;
     }
 
+    /**
+     * This method sets the dice modifier.
+     *
+     * @param diceModifier the new dice modifier
+     */
+    public void setDiceModifier(int diceModifier) {
+        this.diceModifier = diceModifier;
+    }
+
+    /**
+     * This method sets the dice eyes.
+     *
+     * @param diceEyes the new dice eyes
+     */
+    public void setDiceEyes(int diceEyes) {
+        this.diceEyes = diceEyes;
+    }
+
+    /**
+     * This method sets the players.
+     *
+     * @param players the new players
+     */
+    public void setPlayers(Map players) {
+        this.players = players;
+    }
+
+    /**
+     * This method sets the game statistics.
+     *
+     * @param gameStatistics the new game statistics
+     */
+    public void setGameStatistics(Statistic gameStatistics) {
+        this.gameStatistics = gameStatistics;
+    }
+
+    /**
+     * This method sets the draw pile.
+     *
+     * @param drawPile the new draw pile
+     */
+    public void setDrawPile(List drawPile) {
+        this.drawPile = drawPile;
+    }
+
+    /**
+     * This method sets the discard pile.
+     *
+     * @param discardPile the new discard pile
+     */
+    public void setDiscardPile(List discardPile) {
+        this.discardPile = discardPile;
+    }
+
+    /**
+     * This method sets the board.
+     *
+     * @param board the new board
+     */
+    public void setBoard(Board board) {
+        this.board = board;
+    }
+
+    /**
+     * This method sets the active color.
+     *
+     * @param activeColor the new active color
+     */
+    public void setActiveColor(Color activeColor) {
+        this.activeColor = activeColor;
+    }
+
     /**
      * This method sets the game interruption state.
      *
@@ -312,16 +306,6 @@ public void setMovablePieces(Boolean movablePieces) {
         if (Boolean.FALSE.equals(movablePieces)) notifyObservers();
     }
 
-    /**
-     * This method sets the player has disconnected.
-     *
-     * @param playerHasDisconnected the new player has disconnected
-     */
-    public void setPlayerHasDisconnected(Boolean playerHasDisconnected) {
-        this.playerHasDisconnected = playerHasDisconnected;
-        if (Boolean.TRUE.equals(playerHasDisconnected)) notifyObservers();
-    }
-
     /**
      * This method returns whether all players have ranked.
      *
@@ -341,24 +325,6 @@ public void setAllRanked(Boolean allRanked) {
         if (Boolean.TRUE.equals(allRanked)) notifyObservers();
     }
 
-    /**
-     * This method returns the start player.
-     *
-     * @return the start player
-     */
-    public Player getStartPlayer() {
-        return startPlayer;
-    }
-
-    /**
-     * This method sets the start player.
-     *
-     * @param startPlayer the new start player
-     */
-    public void setStartPlayer(Player startPlayer) {
-        this.startPlayer = startPlayer;
-    }
-
     /**
      * This method returns the all ready state.
      *
@@ -371,53 +337,10 @@ public Boolean allReady() {
     /**
      * This method sets the all ready state.
      *
-     * @param allReady the new all ready state
+     * @param allReady the new all-ready state
      */
     public void setAllReady(Boolean allReady) {
         this.allReady = allReady;
         if (Boolean.TRUE.equals(allReady)) notifyObservers();
     }
-
-    /**
-     * This method notifies the observers.
-     */
-    public void notifyObservers() {
-        for (Observer observer : new ArrayList<>(observers)) {
-            observer.update();
-        }
-    }
-
-    /**
-     * This method returns the piece through its identifier.
-     *
-     * @param identifier the identifier of the piece
-     * @return the piece
-     */
-    public Piece getPieceThroughIdentifier(String identifier) {
-        String[] parts = identifier.split("-");
-        Color color = Color.valueOf(parts[0]);
-        int index = Integer.parseInt(parts[1]);
-        return board.getPlayerData().get(color).getPieces()[index];
-    }
-
-    public ArrayList getPlayerList() {
-        return playerList;
-    }
-
-    public void addPlayerToList(Player player) {
-        playerList.add(player);
-    }
-
-    public void removePlayerFromList(Player player) {
-        playerList.remove(player);
-    }
-
-    public Player getPlayerFromList(String name) {
-        for (Player player : playerList) {
-            if (player.getName().equals(name)) {
-                return player;
-            }
-        }
-        return null;
-    }
 }
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/game/Player.java b/Projekte/mdga/model/src/main/java/pp/mdga/game/Player.java
index 7371cf7b..c536438f 100644
--- a/Projekte/mdga/model/src/main/java/pp/mdga/game/Player.java
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/game/Player.java
@@ -6,22 +6,12 @@
  * This class will be used to handle general PlayerData
  */
 public class Player {
-
     private String name;
     private Statistic playerStatistic;
     private ArrayList handCards;
-    private final int id;
     private Color color;
     private boolean isReady;
-
-    /**
-     * This constructor constructs a new Player object
-     */
-    public Player(int id) {
-        this.id = id;
-        playerStatistic = new Statistic();
-        handCards = new ArrayList<>();
-    }
+    private boolean active = true;
 
     /**
      * This constructor constructs a new Player object
@@ -32,7 +22,13 @@ public Player(String name) {
         this.name = name;
         playerStatistic = new Statistic();
         handCards = new ArrayList<>();
-        id = 0;
+    }
+
+    /**
+     * Constructor.
+     */
+    public Player() {
+        this("");
     }
 
     /**
@@ -76,7 +72,7 @@ public ArrayList getHandCards() {
      *
      * @param card the card to be added to the players hand
      */
-    public void addHandCards(BonusCard card){
+    public void addHandCards(BonusCard card) {
         handCards.add(card);
     }
 
@@ -94,15 +90,6 @@ public BonusCard removeHandCard(BonusCard card) {
         return cardToRemove;
     }
 
-    /**
-     * Returns the id of the connection to the client represented by this player.
-     *
-     * @return the id
-     */
-    public int getId() {
-        return id;
-    }
-
     /**
      * This method returns the color of the player
      *
@@ -130,6 +117,15 @@ public boolean isReady() {
         return isReady;
     }
 
+    /**
+     * This method will be used to return active attribute of Player class.
+     *
+     * @return active as a Boolean.
+     */
+    public boolean isActive() {
+        return this.active;
+    }
+
     /**
      * This method sets the player to ready
      *
@@ -138,4 +134,13 @@ public boolean isReady() {
     public void setReady(boolean ready) {
         isReady = ready;
     }
+
+    /**
+     * This method will be used to set active attribute of Player class to the given active parameter.
+     *
+     * @param active as the new active value as a Boolean.
+     */
+    public void setActive(boolean active) {
+        this.active = active;
+    }
 }
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/message/client/ClientInterpreter.java b/Projekte/mdga/model/src/main/java/pp/mdga/message/client/ClientInterpreter.java
index 6e0565d0..e38ee74f 100644
--- a/Projekte/mdga/model/src/main/java/pp/mdga/message/client/ClientInterpreter.java
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/message/client/ClientInterpreter.java
@@ -20,14 +20,13 @@ public interface ClientInterpreter {
      */
     void received(DeselectTSK msg, int from);
 
-
     /**
      * Processes a received ForceStartGame message.
      *
      * @param msg  the ForceStartGame message to be processed
      * @param from the connection ID from which the message was received
      */
-    void received(ForceStartGame msg, int from);
+    void received(StartGame msg, int from);
 
     /**
      * Processes a received JoinServer message.
@@ -61,6 +60,14 @@ public interface ClientInterpreter {
      */
     void received(LobbyReady msg, int from);
 
+    /**
+     * Processes a received Disconnected message.
+     *
+     * @param msg  the Disconnected message to be processed
+     * @param from the connection ID from which the message was received
+     */
+    void received(Disconnected msg, int from);
+
     /**
      * Processes a received RequestBriefing message.
      *
@@ -70,12 +77,12 @@ public interface ClientInterpreter {
     void received(RequestBriefing msg, int from);
 
     /**
-     * Processes a received RequestDice message.
+     * Processes a received RequestDie message.
      *
-     * @param msg  the RequestDice message to be processed
+     * @param msg  the RequestDie message to be processed
      * @param from the connection ID from which the message was received
      */
-    void received(RequestDice msg, int from);
+    void received(RequestDie msg, int from);
 
     /**
      * Processes a received RequestMove message.
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/message/client/Disconnected.java b/Projekte/mdga/model/src/main/java/pp/mdga/message/client/Disconnected.java
new file mode 100644
index 00000000..0b901ff7
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/message/client/Disconnected.java
@@ -0,0 +1,34 @@
+package pp.mdga.message.client;
+
+import com.jme3.network.serializing.Serializable;
+
+/**
+ *
+ */
+@Serializable
+public class Disconnected extends ClientMessage {
+    public Disconnected() {
+        super();
+    }
+
+    /**
+     * Returns a string representation of this message.
+     *
+     * @return a string representation of this message
+     */
+    @Override
+    public String toString() {
+        return "ClientStartGame{}";
+    }
+
+    /**
+     * Accepts a visitor to process this message.
+     *
+     * @param interpreter the visitor to process this message
+     * @param from        the connection ID from which the message was received
+     */
+    @Override
+    public void accept(ClientInterpreter interpreter, int from) {
+        interpreter.received(this, from);
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/message/client/JoinServer.java b/Projekte/mdga/model/src/main/java/pp/mdga/message/client/JoinServer.java
index a7192fe9..965fbaea 100644
--- a/Projekte/mdga/model/src/main/java/pp/mdga/message/client/JoinServer.java
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/message/client/JoinServer.java
@@ -7,11 +7,23 @@
  */
 @Serializable
 public class JoinServer extends ClientMessage {
+
+    private final String name;
+
+    /**
+     * Constructs a new JoinServer instance.
+     */
+    public JoinServer(String name) {
+        super();
+        this.name = name;
+    }
+
     /**
      * Constructs a new JoinServer instance.
      */
     public JoinServer() {
         super();
+        name = null;
     }
 
     /**
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/message/client/RequestDice.java b/Projekte/mdga/model/src/main/java/pp/mdga/message/client/RequestDie.java
similarity index 82%
rename from Projekte/mdga/model/src/main/java/pp/mdga/message/client/RequestDice.java
rename to Projekte/mdga/model/src/main/java/pp/mdga/message/client/RequestDie.java
index bfd687bd..b50b467e 100644
--- a/Projekte/mdga/model/src/main/java/pp/mdga/message/client/RequestDice.java
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/message/client/RequestDie.java
@@ -6,11 +6,11 @@
  * A message sent by a client to request a die roll.
  */
 @Serializable
-public class RequestDice extends ClientMessage {
+public class RequestDie extends ClientMessage {
     /**
-     * Constructs a new RequestDice instance.
+     * Constructs a new RequestDie instance.
      */
-    public RequestDice() {
+    public RequestDie() {
         super();
     }
 
@@ -21,7 +21,7 @@ public RequestDice() {
      */
     @Override
     public String toString() {
-        return "RequestDice{}";
+        return "RequestDie{}";
     }
 
     /**
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/message/client/ForceStartGame.java b/Projekte/mdga/model/src/main/java/pp/mdga/message/client/StartGame.java
similarity index 76%
rename from Projekte/mdga/model/src/main/java/pp/mdga/message/client/ForceStartGame.java
rename to Projekte/mdga/model/src/main/java/pp/mdga/message/client/StartGame.java
index 2a98e880..c0ce62a5 100644
--- a/Projekte/mdga/model/src/main/java/pp/mdga/message/client/ForceStartGame.java
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/message/client/StartGame.java
@@ -6,12 +6,21 @@
  * A message sent by the host to force start the game when not everyone is ready or not everyone has selected a TSK.
  */
 @Serializable
-public class ForceStartGame extends ClientMessage {
+public class StartGame extends ClientMessage {
+
+    private final boolean forceStartGame;
+
+    public StartGame(boolean forceStartGame){
+        super();
+        this.forceStartGame = forceStartGame;
+    }
+
     /**
      * Constructs a new ForceStartGame message.
      */
-    public ForceStartGame() {
+    public StartGame() {
         super();
+        forceStartGame = false;
     }
 
     /**
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/message/server/Dice.java b/Projekte/mdga/model/src/main/java/pp/mdga/message/server/Die.java
similarity index 86%
rename from Projekte/mdga/model/src/main/java/pp/mdga/message/server/Dice.java
rename to Projekte/mdga/model/src/main/java/pp/mdga/message/server/Die.java
index 6b4bc1ee..607dea38 100644
--- a/Projekte/mdga/model/src/main/java/pp/mdga/message/server/Dice.java
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/message/server/Die.java
@@ -8,7 +8,7 @@
  * A message sent by the server to the client to inform about the dice roll.
  */
 @Serializable
-public class Dice extends ServerMessage {
+public class Die extends ServerMessage {
     /**
      * The eye of the dice
      */
@@ -25,7 +25,7 @@ public class Dice extends ServerMessage {
      * @param diceEye        the eye of the dice
      * @param moveablePieces the pieces that can be moved
      */
-    public Dice(int diceEye, List moveablePieces) {
+    public Die(int diceEye, List moveablePieces) {
         super();
         this.diceEye = diceEye;
         this.moveablePieces = moveablePieces;
@@ -34,7 +34,7 @@ public Dice(int diceEye, List moveablePieces) {
     /**
      * Default constructor for serialization purposes.
      */
-    private Dice() {
+    private Die() {
         diceEye = 0;
         moveablePieces = null;
     }
@@ -45,8 +45,8 @@ private Dice() {
      * @param diceEye the eye of the dice
      * @return a new Dice object
      */
-    public static Dice inactivePlayer(int diceEye) {
-        return new Dice(diceEye, null);
+    public static Die inactivePlayer(int diceEye) {
+        return new Die(diceEye, null);
     }
 
     /**
@@ -56,8 +56,8 @@ public static Dice inactivePlayer(int diceEye) {
      * @param moveablePieces the pieces that can be moved
      * @return a new Dice object
      */
-    public static Dice activePlayer(int diceEye, List moveablePieces) {
-        return new Dice(diceEye, moveablePieces);
+    public static Die activePlayer(int diceEye, List moveablePieces) {
+        return new Die(diceEye, moveablePieces);
     }
 
     /**
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/message/server/LobbyPlayerJoin.java b/Projekte/mdga/model/src/main/java/pp/mdga/message/server/LobbyPlayerJoin.java
index 9472a150..a04f8639 100644
--- a/Projekte/mdga/model/src/main/java/pp/mdga/message/server/LobbyPlayerJoin.java
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/message/server/LobbyPlayerJoin.java
@@ -13,14 +13,20 @@ public class LobbyPlayerJoin extends ServerMessage {
      */
     private final String name;
 
+    /**
+     * The ID of the new Player
+     */
+    private final int id;
+
     /**
      * Constructs a new LobbyPlayerJoin instance with the specified player name.
      *
      * @param name the name of the player joining the lobby
      */
-    public LobbyPlayerJoin(String name) {
+    public LobbyPlayerJoin(int id, String name) {
         super();
         this.name = name;
+        this.id = id;
     }
 
     /**
@@ -28,6 +34,7 @@ public LobbyPlayerJoin(String name) {
      */
     private LobbyPlayerJoin() {
         name = null;
+        id = 0;
     }
 
     /**
@@ -39,6 +46,15 @@ public String getName() {
         return name;
     }
 
+    /**
+     * Returns the id of the new Player
+     *
+     * @return the id of the player
+     */
+    public int getId(){
+        return id;
+    }
+
     /**
      * Accepts a visitor to process this message.
      *
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/message/server/LobbyPlayerLeave.java b/Projekte/mdga/model/src/main/java/pp/mdga/message/server/LobbyPlayerLeave.java
index f68b7054..7cf928f2 100644
--- a/Projekte/mdga/model/src/main/java/pp/mdga/message/server/LobbyPlayerLeave.java
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/message/server/LobbyPlayerLeave.java
@@ -11,7 +11,7 @@ public class LobbyPlayerLeave extends ServerMessage {
     /**
      * The name of the player leaving the lobby.
      */
-    private final String name;
+    private final int id;
 
     /**
      * The color associated with the player leaving the lobby.
@@ -21,12 +21,12 @@ public class LobbyPlayerLeave extends ServerMessage {
     /**
      * Constructs a new LobbyPlayerLeave instance with the specified player name and color.
      *
-     * @param name  the name of the player leaving the lobby
+     * @param id  the id of the player leaving the lobby
      * @param color the color associated with the player leaving the lobby
      */
-    public LobbyPlayerLeave(String name, Color color) {
+    public LobbyPlayerLeave(int id, Color color) {
         super();
-        this.name = name;
+        this.id = id;
         this.color = color;
     }
 
@@ -34,7 +34,7 @@ public LobbyPlayerLeave(String name, Color color) {
      * Default constructor for serialization purposes.
      */
     private LobbyPlayerLeave() {
-        name = null;
+        id = 0;
         color = null;
     }
 
@@ -43,8 +43,8 @@ private LobbyPlayerLeave() {
      *
      * @return the name of the player leaving the lobby
      */
-    public String getName() {
-        return name;
+    public int getId() {
+        return id;
     }
 
     /**
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/message/server/ServerInterpreter.java b/Projekte/mdga/model/src/main/java/pp/mdga/message/server/ServerInterpreter.java
index c83abefd..0b7e26b5 100644
--- a/Projekte/mdga/model/src/main/java/pp/mdga/message/server/ServerInterpreter.java
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/message/server/ServerInterpreter.java
@@ -34,11 +34,11 @@ public interface ServerInterpreter {
     void received(CeremonyMessage msg);
 
     /**
-     * Handles a Dice message received from the server.
+     * Handles a Die message received from the server.
      *
      * @param msg the Dice message received
      */
-    void received(Dice msg);
+    void received(Die msg);
 
     /**
      * Handles a DiceAgain message received from the server.
@@ -193,4 +193,11 @@ public interface ServerInterpreter {
      * @param msg the WaitPiece message received
      */
     void received(WaitPiece msg);
+
+    /**
+     * Handles a Spectator message received from the server.
+     *
+     * @param msg the Spectator message received.
+     */
+    void received(Spectator msg);
 }
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/message/server/Spectator.java b/Projekte/mdga/model/src/main/java/pp/mdga/message/server/Spectator.java
new file mode 100644
index 00000000..88c92b77
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/message/server/Spectator.java
@@ -0,0 +1,32 @@
+package pp.mdga.message.server;
+
+/**
+ *
+ */
+public class Spectator extends ServerMessage {
+    /**
+     * Construc
+     */
+    public Spectator() {
+        super();
+    }
+
+    /**
+     *
+     * @param interpreter the visitor to process this message
+     */
+    @Override
+    public void accept(ServerInterpreter interpreter) {
+        interpreter.received(this);
+    }
+
+
+    /**
+     *
+     * @return
+     */
+    @Override
+    public String getInfoTextKey() {
+        return "";
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/message/server/UpdateTSK.java b/Projekte/mdga/model/src/main/java/pp/mdga/message/server/UpdateTSK.java
index 017dd29b..e6cd5e03 100644
--- a/Projekte/mdga/model/src/main/java/pp/mdga/message/server/UpdateTSK.java
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/message/server/UpdateTSK.java
@@ -11,7 +11,7 @@ public class UpdateTSK extends ServerMessage {
     /**
      * The name associated with the update.
      */
-    private final String name;
+    private final int id;
 
     /**
      * The color associated with the update.
@@ -21,12 +21,12 @@ public class UpdateTSK extends ServerMessage {
     /**
      * Constructs a new UpdateTSK instance with the specified name and color.
      *
-     * @param name  the name associated with the update
+     * @param id  the name associated with the update
      * @param color the color associated with the update
      */
-    public UpdateTSK(String name, Color color) {
+    public UpdateTSK(int id, Color color) {
         super();
-        this.name = name;
+        this.id = id;
         this.color = color;
     }
 
@@ -34,7 +34,7 @@ public UpdateTSK(String name, Color color) {
      * Default constructor for serialization purposes.
      */
     private UpdateTSK() {
-        this("", null);
+        this(0, null);
     }
 
     /**
@@ -42,8 +42,8 @@ private UpdateTSK() {
      *
      * @return the name
      */
-    public String getName() {
-        return name;
+    public int getId() {
+        return id;
     }
 
     /**
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/Ceremony.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/Ceremony.java
deleted file mode 100644
index 35c9b51c..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/server/Ceremony.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.server;
-
-public class Ceremony extends ServerState {
-    public Ceremony(ServerGameLogic logic) {
-        super(logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/ChoosePiece.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/ChoosePiece.java
deleted file mode 100644
index a91abdea..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/server/ChoosePiece.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.server;
-
-public class ChoosePiece extends Turn {
-    public ChoosePiece(ServerGameLogic logic) {
-        super(logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/ChoosePieceState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/ChoosePieceState.java
new file mode 100644
index 00000000..beb19efa
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/ChoosePieceState.java
@@ -0,0 +1,7 @@
+package pp.mdga.server;
+
+public class ChoosePieceState extends TurnState {
+    public ChoosePieceState(ServerGameLogic logic) {
+        super(logic);
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/DetermineStartPlayer.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/DetermineStartPlayer.java
deleted file mode 100644
index 3686ab3e..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/server/DetermineStartPlayer.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.server;
-
-public class DetermineStartPlayer extends Game {
-    public DetermineStartPlayer(ServerGameLogic logic) {
-        super(logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/DetermineStartPlayerState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/DetermineStartPlayerState.java
new file mode 100644
index 00000000..9f041111
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/DetermineStartPlayerState.java
@@ -0,0 +1,9 @@
+package pp.mdga.server;
+
+import pp.mdga.server.automaton.GameState;
+
+public class DetermineStartPlayerState extends GameState {
+    public DetermineStartPlayerState(ServerGameLogic logic) {
+        super(logic);
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/FirstRoll.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/FirstRoll.java
deleted file mode 100644
index 18ceb186..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/server/FirstRoll.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.server;
-
-public class FirstRoll extends RollDice {
-    public FirstRoll(ServerGameLogic logic) {
-        super(logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/FirstRollStateState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/FirstRollStateState.java
new file mode 100644
index 00000000..b8d91c26
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/FirstRollStateState.java
@@ -0,0 +1,7 @@
+package pp.mdga.server;
+
+public class FirstRollStateState extends RollDiceState {
+    public FirstRollStateState(ServerGameLogic logic) {
+        super(logic);
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/Game.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/Game.java
deleted file mode 100644
index ad3f5897..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/server/Game.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.server;
-
-public class Game extends ServerState {
-    public Game(ServerGameLogic logic) {
-        super(logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/Interrupt.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/Interrupt.java
deleted file mode 100644
index 1f9e0351..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/server/Interrupt.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.server;
-
-public class Interrupt extends ServerState {
-    public Interrupt(ServerGameLogic logic) {
-        super(logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/Lobby.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/Lobby.java
deleted file mode 100644
index 02c32338..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/server/Lobby.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package pp.mdga.server;
-
-public class Lobby extends ServerState {
-
-
-    /**
-     * Constructs a server state of the specified game logic.
-     *
-     * @param logic the game logic
-     */
-    public Lobby(ServerGameLogic logic) {
-        super(logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/MovePiece.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/MovePiece.java
deleted file mode 100644
index b536b228..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/server/MovePiece.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.server;
-
-public class MovePiece extends Turn {
-    public MovePiece(ServerGameLogic logic) {
-        super(logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/MovePieceState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/MovePieceState.java
new file mode 100644
index 00000000..27aac8fd
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/MovePieceState.java
@@ -0,0 +1,7 @@
+package pp.mdga.server;
+
+public class MovePieceState extends TurnState {
+    public MovePieceState(ServerGameLogic logic) {
+        super(logic);
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/NoPiece.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/NoPiece.java
deleted file mode 100644
index ea3bdfd2..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/server/NoPiece.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.server;
-
-public class NoPiece extends ChoosePiece {
-    public NoPiece(ServerGameLogic logic) {
-        super(logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/NoPieceState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/NoPieceState.java
new file mode 100644
index 00000000..a4120ecb
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/NoPieceState.java
@@ -0,0 +1,7 @@
+package pp.mdga.server;
+
+public class NoPieceState extends ChoosePieceState {
+    public NoPieceState(ServerGameLogic logic) {
+        super(logic);
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/NoTurn.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/NoTurn.java
deleted file mode 100644
index 79c77433..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/server/NoTurn.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.server;
-
-public class NoTurn extends ChoosePiece {
-    public NoTurn(ServerGameLogic logic) {
-        super(logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/NoTurnState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/NoTurnState.java
new file mode 100644
index 00000000..d96a3e78
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/NoTurnState.java
@@ -0,0 +1,7 @@
+package pp.mdga.server;
+
+public class NoTurnState extends ChoosePieceState {
+    public NoTurnState(ServerGameLogic logic) {
+        super(logic);
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/PowerCard.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/PowerCard.java
deleted file mode 100644
index a00592b0..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/server/PowerCard.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.server;
-
-public class PowerCard extends Turn {
-    public PowerCard(ServerGameLogic logic) {
-        super(logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/PowerCardState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/PowerCardState.java
new file mode 100644
index 00000000..d5db6a11
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/PowerCardState.java
@@ -0,0 +1,7 @@
+package pp.mdga.server;
+
+public class PowerCardState extends TurnState {
+    public PowerCardState(ServerGameLogic logic) {
+        super(logic);
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/RollDice.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/RollDice.java
deleted file mode 100644
index f93c7599..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/server/RollDice.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.server;
-
-public class RollDice extends Turn {
-    public RollDice(ServerGameLogic logic) {
-        super(logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/RollDiceState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/RollDiceState.java
new file mode 100644
index 00000000..cf1edf5c
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/RollDiceState.java
@@ -0,0 +1,7 @@
+package pp.mdga.server;
+
+public class RollDiceState extends TurnState {
+    public RollDiceState(ServerGameLogic logic) {
+        super(logic);
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/SecondRoll.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/SecondRoll.java
deleted file mode 100644
index 140ac1b9..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/server/SecondRoll.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.server;
-
-public class SecondRoll extends RollDice {
-    public SecondRoll(ServerGameLogic logic) {
-        super(logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/SecondRollState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/SecondRollState.java
new file mode 100644
index 00000000..f612cd2c
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/SecondRollState.java
@@ -0,0 +1,7 @@
+package pp.mdga.server;
+
+public class SecondRollState extends RollDiceState {
+    public SecondRollState(ServerGameLogic logic) {
+        super(logic);
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/SelectPiece.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/SelectPiece.java
deleted file mode 100644
index d022a16c..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/server/SelectPiece.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.server;
-
-public class SelectPiece extends ChoosePiece {
-    public SelectPiece(ServerGameLogic logic) {
-        super(logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/SelectPieceState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/SelectPieceState.java
new file mode 100644
index 00000000..37a0c8f9
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/SelectPieceState.java
@@ -0,0 +1,7 @@
+package pp.mdga.server;
+
+public class SelectPieceState extends ChoosePieceState {
+    public SelectPieceState(ServerGameLogic logic) {
+        super(logic);
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/ServerGameLogic.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/ServerGameLogic.java
index bb754961..3ea9735e 100644
--- a/Projekte/mdga/model/src/main/java/pp/mdga/server/ServerGameLogic.java
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/ServerGameLogic.java
@@ -2,128 +2,215 @@
 
 import pp.mdga.game.Game;
 import pp.mdga.message.client.*;
-import pp.mdga.message.server.NoTurn;
-import pp.mdga.message.server.StartPiece;
+import pp.mdga.server.automaton.*;
 
 import java.lang.System.Logger;
 
+/**
+ *
+ */
 public class ServerGameLogic implements ClientInterpreter  {
+    /**
+     * Constants.
+     */
     private static final Logger LOGGER = System.getLogger(ServerGameLogic.class.getName());
 
+    /**
+     *
+     */
     private final ServerSender serverSender;
-
     private final Game game;
 
-    private final ServerState state;
-
-    private final ServerState lobby = new Lobby(this);
-    private final ServerState game = new Game(this);
-    private final ServerState interrupt = new Interrupt(this);
-    private final ServerState ceremony = new Ceremony(this);
-    private final ServerState turn = new Turn(this);
-    private final ServerState determineStartPlayer = new DetermineStartPlayer(this);
-    private final ServerState rollDice = new RollDice(this);
-    private final ServerState powerCard = new PowerCard(this);
-    private final ServerState movePiece = new MovePiece(this);
-    private final ServerState choosePiece = new ChoosePiece(this);
-    private final ServerState firstRoll = new FirstRoll(this);
-    private final ServerState secondRoll = new SecondRoll(this);
-    private final ServerState thirdRoll = new ThirdRoll(this);
-    private final ServerState noPiece = new NoPiece(this);
-    private final ServerState noTurn = new NoTurn(this);
-    private final ServerState waitingPiece = new WaitingPiece(this);
-    private final ServerState startPiece = new StartPiece(this);
-    private final ServerState selectPiece = new SelectPiece(this);
+    /**
+     * States
+     */
+    private ServerState currentState;
+    private final ServerState lobbyState;
+    private final ServerState gameState;
+    private final ServerState interruptState;
+    private final ServerState ceremonyState;
 
+    /**
+     * Constructor.
+     *
+     * @param serverSender
+     * @param game
+     */
     public ServerGameLogic(ServerSender serverSender, Game game) {
         this.serverSender = serverSender;
         this.game = game;
-        this.state = lobby;
+        this.lobbyState = new LobbyState(this);
+        this.gameState = new GameState(this);
+        this.interruptState = new InterruptState(this);
+        this.ceremonyState = new CeremonyState(this);
+        this.currentState = this.lobbyState;
     }
 
 
     @Override
     public void received(AnimationEnd msg, int from) {
-
+        this.currentState.received(msg, from);
     }
 
     @Override
     public void received(DeselectTSK msg, int from) {
-
+        this.currentState.received(msg, from);
     }
 
     @Override
-    public void received(ForceStartGame msg, int from) {
-
+    public void received(StartGame msg, int from) {
+        this.currentState.received(msg, from);
     }
 
     @Override
     public void received(JoinServer msg, int from) {
-
+        this.currentState.received(msg, from);
     }
 
     @Override
     public void received(LeaveGame msg, int from) {
-
-    }
-
-    @Override
-    public void received(LobbyNotReady msg, int from) {
-
+        this.currentState.received(msg, from);
     }
 
     @Override
     public void received(LobbyReady msg, int from) {
+        this.currentState.received(msg, from);
+    }
 
+    @Override
+    public void received(LobbyNotReady msg, int from) {
+        this.currentState.received(msg, from);
+    }
+
+    @Override
+    public void received(Disconnected msg, int from) {
+        this.currentState.received(msg, from);
     }
 
     @Override
     public void received(RequestBriefing msg, int from) {
-
+        this.currentState.received(msg, from);
     }
 
     @Override
-    public void received(RequestDice msg, int from) {
-
+    public void received(RequestDie msg, int from) {
+        this.currentState.received(msg, from);
     }
 
     @Override
     public void received(RequestMove msg, int from) {
-
+        this.currentState.received(msg, from);
     }
 
     @Override
     public void received(RequestPlayCard msg, int from) {
-
+        this.currentState.received(msg, from);
     }
 
     @Override
     public void received(SelectCard msg, int from) {
-
+        this.currentState.received(msg, from);
     }
 
     @Override
     public void received(SelectTSK msg, int from) {
-
+        this.currentState.received(msg, from);
     }
 
     @Override
     public void received(ForceContinueGame msg, int from) {
-
+        this.currentState.received(msg, from);
     }
 
     @Override
     public void received(ClientStartGame msg, int from) {
-
+        this.currentState.received(msg, from);
     }
 
     @Override
     public void received(NoPowerCard msg, int from) {
-
+        this.currentState.received(msg, from);
     }
 
     @Override
     public void received(SelectedPieces msg, int from) {
+        this.currentState.received(msg, from);
+    }
 
+    /**
+     * This method will be used to return serverSender attribute of ServerGameLogic class.
+     *
+     * @return serverSender as a ServerSender object.
+     */
+    public ServerSender getServerSender() {
+        return this.serverSender;
+    }
+
+    /**
+     * This method will be used to return game attribute of ServerGameLogic class.
+     *
+     * @return game as a Game object.
+     */
+    public Game getGame() {
+        return this.game;
+    }
+
+    /**
+     * This method will be used to return currentState attribute of ServerGameLogic class.
+     *
+     * @return currentState as a ServerState object.
+     */
+    public ServerState getCurrentState() {
+        return this.currentState;
+    }
+
+    /**
+     * This method will be used to return lobbyState attribute of ServerGameLogic class.
+     *
+     * @return lobbyState as a ServerState object.
+     */
+    public ServerState getLobbyState() {
+        return this.lobbyState;
+    }
+
+    /**
+     * This method will be used to return gameState attribute of ServerGameLogic class.
+     *
+     * @return gameState as a ServerState object.
+     */
+    public ServerState getGameState() {
+        return this.gameState;
+    }
+
+    /**
+     * This method will be used to return interruptState attribute of ServerGameLogic class.
+     *
+     * @return interruptState as a ServerState object.
+     */
+    public ServerState getInterruptState() {
+        return this.interruptState;
+    }
+
+    /**
+     * This method will be used to return ceremonyState attribute of ServerGameLogic class.
+     *
+     * @return ceremonyState as a ServerState object.
+     */
+    public ServerState getCeremonyState() {
+        return this.ceremonyState;
+    }
+
+    /**
+     * This method will be used to set currentState attribute of ServerGameLogic class to the given state parameter.
+     * In Addition, the currentState will be exited, changed and entered.
+     *
+     * @param state as the new currentState attribute as a ServerState object.
+     */
+    public void setCurrentState(ServerState state) {
+        if (this.currentState != null) {
+            this.currentState.exit();
+        }
+        this.currentState = state;
+        this.currentState.enter();
     }
 }
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/ServerSender.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/ServerSender.java
index 63ce27b1..7d628e6c 100644
--- a/Projekte/mdga/model/src/main/java/pp/mdga/server/ServerSender.java
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/ServerSender.java
@@ -13,4 +13,12 @@ public interface ServerSender {
      * @param message the message
      */
     void send(int id, ServerMessage message);
+
+    /**
+     * This method will be used to send the given message parameter to all connected players which are saved inside the
+     * players attribute of Game class.
+     *
+     * @param message as the message which will be sent to all players as a ServerMessage.
+     */
+    void broadcast(ServerMessage message);
 }
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/ServerState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/ServerState.java
deleted file mode 100644
index 949eb48f..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/server/ServerState.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package pp.mdga.server;
-
-/**
- * Defines the behavior and state transitions for the server-side game logic.
- * Different states of the game logic implement this interface to handle various game events and actions.
- */
-public class ServerState {
-    /**
-     * The server logic object.
-     */
-    private final ServerGameLogic logic;
-
-    /**
-     * Constructs a server state of the specified game logic.
-     *
-     * @param logic the game logic
-     */
-    public ServerState(ServerGameLogic logic) {
-        this.logic = logic;
-    }
-
-
-
-
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/StartPiece.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/StartPiece.java
deleted file mode 100644
index b3d7a2d5..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/server/StartPiece.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.server;
-
-public class StartPiece extends ChoosePiece {
-    public StartPiece(ServerGameLogic logic) {
-        super(logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/StartPieceState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/StartPieceState.java
new file mode 100644
index 00000000..fff134ce
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/StartPieceState.java
@@ -0,0 +1,7 @@
+package pp.mdga.server;
+
+public class StartPieceState extends ChoosePieceState {
+    public StartPieceState(ServerGameLogic logic) {
+        super(logic);
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/ThirdRoll.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/ThirdRoll.java
deleted file mode 100644
index cb588fb0..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/server/ThirdRoll.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.server;
-
-public class ThirdRoll extends RollDice {
-    public ThirdRoll(ServerGameLogic logic) {
-        super(logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/ThirdRollState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/ThirdRollState.java
new file mode 100644
index 00000000..d5607225
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/ThirdRollState.java
@@ -0,0 +1,7 @@
+package pp.mdga.server;
+
+public class ThirdRollState extends RollDiceState {
+    public ThirdRollState(ServerGameLogic logic) {
+        super(logic);
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/Turn.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/Turn.java
deleted file mode 100644
index 77c28708..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/server/Turn.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.server;
-
-public class Turn extends Game {
-    public Turn(ServerGameLogic logic) {
-        super(logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/TurnState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/TurnState.java
new file mode 100644
index 00000000..cbf0f999
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/TurnState.java
@@ -0,0 +1,9 @@
+package pp.mdga.server;
+
+import pp.mdga.server.automaton.GameState;
+
+public class TurnState extends GameState {
+    public TurnState(ServerGameLogic logic) {
+        super(logic);
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/WaitingPiece.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/WaitingPiece.java
deleted file mode 100644
index ed088e8f..00000000
--- a/Projekte/mdga/model/src/main/java/pp/mdga/server/WaitingPiece.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package pp.mdga.server;
-
-public class WaitingPiece extends ChoosePiece {
-    public WaitingPiece(ServerGameLogic logic) {
-        super(logic);
-    }
-}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/WaitingPieceState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/WaitingPieceState.java
new file mode 100644
index 00000000..64095bf1
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/WaitingPieceState.java
@@ -0,0 +1,7 @@
+package pp.mdga.server;
+
+public class WaitingPieceState extends ChoosePieceState {
+    public WaitingPieceState(ServerGameLogic logic) {
+        super(logic);
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/CeremonyState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/CeremonyState.java
new file mode 100644
index 00000000..4182bdb1
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/CeremonyState.java
@@ -0,0 +1,33 @@
+package pp.mdga.server.automaton;
+
+import pp.mdga.server.ServerGameLogic;
+
+/**
+ *
+ */
+public class CeremonyState extends ServerState {
+    /**
+     * Constructor.
+     *
+     * @param logic as the server game logic which is the automaton as a ServerGameLogic object.
+     */
+    public CeremonyState(ServerGameLogic logic) {
+        super(logic);
+    }
+
+    /**
+     * This method will be used whenever this state will be entered.
+     */
+    @Override
+    public void enter() {
+        // ToDo: Close server.
+    }
+
+    /**
+     * This method will be used whenever this state will be exited.
+     */
+    @Override
+    public void exit() {
+
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/GameState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/GameState.java
new file mode 100644
index 00000000..f49f50d0
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/GameState.java
@@ -0,0 +1,60 @@
+package pp.mdga.server.automaton;
+
+import pp.mdga.message.client.Disconnected;
+import pp.mdga.message.client.LeaveGame;
+import pp.mdga.message.server.PauseGame;
+import pp.mdga.server.ServerGameLogic;
+
+/**
+ *
+ */
+public class GameState extends ServerState {
+    /**
+     * Constructor.
+     *
+     * @param logic as the server game logic which is the automaton as a ServerGameLogic object.
+     */
+    public GameState(ServerGameLogic logic) {
+        super(logic);
+    }
+
+    /**
+     * This method will be used whenever this state will be entered.
+     */
+    @Override
+    public void enter() {
+
+    }
+
+    /**
+     * This method will be used whenever this state will be exited.
+     */
+    @Override
+    public void exit() {
+
+    }
+
+    /**
+     *
+     * @param msg  as the message which was sent by the player as a Disconnected object.
+     * @param from as the client id of the player as an Integer.
+     */
+    @Override
+    public void received(Disconnected msg, int from) {
+        this.logic.getServerSender().broadcast(new PauseGame());
+        this.logic.setCurrentState(this.logic.getInterruptState());
+    }
+
+    /**
+     *
+     * @param msg  as the message which was sent by the player as a LeaveGame object.
+     * @param from as the client id of the player as an Integer.
+     */
+    @Override
+    public void received(LeaveGame msg, int from) {
+        this.logic.getGame().updatePlayerActiveState(from, false);
+        if (this.logic.getGame().getNumberOfActivePlayers() == 1) {
+            this.logic.setCurrentState(this.logic.getCeremonyState());
+        }
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/InterruptState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/InterruptState.java
new file mode 100644
index 00000000..b0283d83
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/InterruptState.java
@@ -0,0 +1,47 @@
+package pp.mdga.server.automaton;
+
+import com.jme3.system.Timer;
+import pp.mdga.message.client.ForceContinueGame;
+import pp.mdga.message.server.ResumeGame;
+import pp.mdga.server.ServerGameLogic;
+
+/**
+ *
+ */
+public class InterruptState extends ServerState {
+    /**
+     * Attributes.
+     */
+    private Timer timer;
+
+    /**
+     * Constructor.
+     *
+     * @param logic as the server game logic which is the automaton as a ServerGameLogic object.
+     */
+    public InterruptState(ServerGameLogic logic) {
+        super(logic);
+    }
+
+    /**
+     * This method will be used whenever this state will be entered.
+     */
+    @Override
+    public void enter() {
+        // Create timer and connect signal.
+    }
+
+    /**
+     * This method will be used whenever this state will be exited.
+     */
+    @Override
+    public void exit() {
+
+    }
+
+    @Override
+    public void received(ForceContinueGame msg, int from) {
+        this.logic.getServerSender().broadcast(new ResumeGame());
+        this.logic.setCurrentState(this.logic.getGameState());
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/LobbyState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/LobbyState.java
new file mode 100644
index 00000000..a41075ea
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/LobbyState.java
@@ -0,0 +1,88 @@
+package pp.mdga.server.automaton;
+
+import pp.mdga.message.client.*;
+import pp.mdga.message.server.ServerStartGame;
+import pp.mdga.message.server.UpdateReady;
+import pp.mdga.message.server.UpdateTSK;
+import pp.mdga.server.ServerGameLogic;
+
+/**
+ *
+ */
+public class LobbyState extends ServerState {
+    /**
+     * Constructs a server state of the specified game logic.
+     *
+     * @param logic the game logic
+     */
+    public LobbyState(ServerGameLogic logic) {
+        super(logic);
+    }
+
+    /**
+     * This method will be used whenever this state will be entered.
+     */
+    @Override
+    public void enter() {
+
+    }
+
+    /**
+     * This method will be used whenever this state will be exited.
+     */
+    @Override
+    public void exit() {
+
+    }
+
+    /**
+     *
+     * @param msg  as the message which was sent by the player as a SelectTSK object.
+     * @param from as the client id of the player as an Integer.
+     */
+    @Override
+    public void received(SelectTSK msg, int from) {
+        this.logic.getServerSender().broadcast(new UpdateTSK(from, msg.getColor()));
+    }
+
+    /**
+     *
+     * @param msg  as the message which was sent by the player as a DeselectTSK object.
+     * @param from as the client id of the player as an Integer.
+     */
+    @Override
+    public void received(DeselectTSK msg, int from) {
+        this.logic.getServerSender().broadcast(new UpdateTSK(from, msg.getColor()));
+    }
+
+    /**
+     *
+     * @param msg  as the message which was sent by the player as a LobbyReady object.
+     * @param from as the client id of the player as an Integer.
+     */
+    @Override
+    public void received(LobbyReady msg, int from) {
+        this.logic.getServerSender().broadcast(new UpdateReady(from, true));
+    }
+
+    /**
+     *
+     * @param msg  as the message which was sent by the player as a LobbyNotReady object.
+     * @param from as the client id of the player as an Integer.
+     */
+    @Override
+    public void received(LobbyNotReady msg, int from) {
+        this.logic.getServerSender().broadcast(new UpdateReady(from, false));
+    }
+
+    /**
+     *
+     * @param msg  as the message which was sent by the player as a ForceStartGame object.
+     * @param from as the client id of the player as an Integer.
+     */
+    @Override
+    public void received(ForceStartGame msg, int from) {
+        this.logic.getServerSender().broadcast(new ServerStartGame());
+        this.logic.setCurrentState(this.logic.getGameState());
+    }
+}
diff --git a/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/ServerState.java b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/ServerState.java
new file mode 100644
index 00000000..ce6a99fd
--- /dev/null
+++ b/Projekte/mdga/model/src/main/java/pp/mdga/server/automaton/ServerState.java
@@ -0,0 +1,196 @@
+package pp.mdga.server.automaton;
+
+import pp.mdga.message.client.*;
+import pp.mdga.server.ServerGameLogic;
+
+/**
+ * Defines the behavior and state transitions for the server-side game logic.
+ * Different states of the game logic implement this interface to handle various game events and actions.
+ */
+public abstract class ServerState {
+    /**
+     * The server logic object.
+     */
+    protected final ServerGameLogic logic;
+
+    /**
+     * Constructs a server state of the specified game logic.
+     *
+     * @param logic the game logic
+     */
+    public ServerState(ServerGameLogic logic) {
+        this.logic = logic;
+    }
+
+    /**
+     * This method will be used whenever this state will be entered.
+     */
+    public abstract void enter();
+
+    /**
+     * This method will be used whenever this state will be exited.
+     */
+    public abstract void exit();
+
+    /**
+     * This method will be called whenever the server received an AnimationEnd message.
+     * It will also get the client id of the player who send this message.
+     *
+     * @param msg  as the message which was sent by the player as a AnimationEnd object.
+     * @param from as the client id of the player as an Integer.
+     */
+    public void received(AnimationEnd msg, int from) {}
+
+    /**
+     * This method will be called whenever the server received an DeselectTSK message.
+     * It will also get the client id of the player who send this message.
+     *
+     * @param msg  as the message which was sent by the player as a DeselectTSK object.
+     * @param from as the client id of the player as an Integer.
+     */
+    public void received(DeselectTSK msg, int from) {}
+
+    /**
+     * This method will be called whenever the server received a StartGame message.
+     * It will also get the client id of the player who send this message.
+     *
+     * @param msg  as the message which was sent by the player as a StartGame object.
+     * @param from as the client id of the player as an Integer.
+     */
+    public void received(StartGame msg, int from) {}
+
+    /**
+     * This method will be called whenever the server received a JoinServer message.
+     * It will also get the client id of the player who send this message.
+     *
+     * @param msg  as the message which was sent by the player as a JoinServer object.
+     * @param from as the client id of the player as an Integer.
+     */
+    public void received(JoinServer msg, int from) {}
+
+    /**
+     * This method will be called whenever the server received an LeaveGame message.
+     * It will also get the client id of the player who send this message.
+     *
+     * @param msg  as the message which was sent by the player as a LeaveGame object.
+     * @param from as the client id of the player as an Integer.
+     */
+    public void received(LeaveGame msg, int from) {}
+
+    /**
+     * This method will be called whenever the server received a LobbyReady message.
+     * It will also get the client id of the player who send this message.
+     *
+     * @param msg  as the message which was sent by the player as a LobbyReady object.
+     * @param from as the client id of the player as an Integer.
+     */
+    public void received(LobbyReady msg, int from) {}
+
+    /**
+     * This method will be called whenever the server received a LobbyNotReady message.
+     * It will also get the client id of the player who send this message.
+     *
+     * @param msg  as the message which was sent by the player as a LobbyNotReady object.
+     * @param from as the client id of the player as an Integer.
+     */
+    public void received(LobbyNotReady msg, int from) {}
+
+    /**
+     * This method will be called whenever the server received a Disconnected message.
+     * It will also get the client id of the player who send this message.
+     *
+     * @param msg  as the message which was sent by the player as a Disconnected object.
+     * @param from as the client id of the player as an Integer.
+     */
+    public void received(Disconnected msg, int from) {}
+
+    /**
+     * This method will be called whenever the server received a Briefing message.
+     * It will also get the client id of the player who send this message.
+     *
+     * @param msg  as the message which was sent by the player as a Briefing object.
+     * @param from as the client id of the player as an Integer.
+     */
+    public void received(RequestBriefing msg, int from) {}
+
+    /**
+     * This method will be called whenever the server received a Die message.
+     * It will also get the client id of the player who send this message.
+     *
+     * @param msg  as the message which was sent by the player as a Die object.
+     * @param from as the client id of the player as an Integer.
+     */
+    public void received(RequestDie msg, int from) {}
+
+    /**
+     * This method will be called whenever the server received a RequestMove message.
+     * It will also get the client id of the player who send this message.
+     *
+     * @param msg  as the message which was sent by the player as a RequestMove object.
+     * @param from as the client id of the player as an Integer.
+     */
+    public void received(RequestMove msg, int from) {}
+
+    /**
+     * This method will be called whenever the server received a PlayCard message.
+     * It will also get the client id of the player who send this message.
+     *
+     * @param msg  as the message which was sent by the player as a PlayCard object.
+     * @param from as the client id of the player as an Integer.
+     */
+    public void received(RequestPlayCard msg, int from) {}
+
+    /**
+     * This method will be called whenever the server received a SelectCard message.
+     * It will also get the client id of the player who send this message.
+     *
+     * @param msg  as the message which was sent by the player as a SelectCard object.
+     * @param from as the client id of the player as an Integer.
+     */
+    public void received(SelectCard msg, int from) {}
+
+    /**
+     * This method will be called whenever the server received a SelectTSK message.
+     * It will also get the client id of the player who send this message.
+     *
+     * @param msg  as the message which was sent by the player as a SelectTSK object.
+     * @param from as the client id of the player as an Integer.
+     */
+    public void received(SelectTSK msg, int from) {}
+
+    /**
+     * This method will be called whenever the server received a ForceContinueGame message.
+     * It will also get the client id of the player who send this message.
+     *
+     * @param msg  as the message which was sent by the player as a ForceContinueGame object.
+     * @param from as the client id of the player as an Integer.
+     */
+    public void received(ForceContinueGame msg, int from) {}
+
+    /**
+     * This method will be called whenever the server received a ClientStartGame message.
+     * It will also get the client id of the player who send this message.
+     *
+     * @param msg  as the message which was sent by the player as a ClientStartGame object.
+     * @param from as the client id of the player as an Integer.
+     */
+    public void received(ClientStartGame msg, int from) {}
+
+    /**
+     * This method will be called whenever the server received a NoPowerCard message.
+     * It will also get the client id of the player who send this message.
+     *
+     * @param msg  as the message which was sent by the player as a NoPowerCard object.
+     * @param from as the client id of the player as an Integer.
+     */
+    public void received(NoPowerCard msg, int from) {}
+
+    /**
+     * This method will be called whenever the server received a SelectedPieces message.
+     * It will also get the client id of the player who send this message.
+     *
+     * @param msg  as the message which was sent by the player as a SelectedPieces object.
+     * @param from as the client id of the player as an Integer.
+     */
+    public void received(SelectedPieces msg, int from) {}
+}
diff --git a/Projekte/mdga/model/src/test/java/pp/mdga/client/Dialog/LobbyTest.java b/Projekte/mdga/model/src/test/java/pp/mdga/client/Dialog/LobbyStateTest.java
similarity index 98%
rename from Projekte/mdga/model/src/test/java/pp/mdga/client/Dialog/LobbyTest.java
rename to Projekte/mdga/model/src/test/java/pp/mdga/client/Dialog/LobbyStateTest.java
index fba98391..c8c2344f 100644
--- a/Projekte/mdga/model/src/test/java/pp/mdga/client/Dialog/LobbyTest.java
+++ b/Projekte/mdga/model/src/test/java/pp/mdga/client/Dialog/LobbyStateTest.java
@@ -6,7 +6,7 @@
 /**
  * this test-class tests the testcases T084-T095
  */
-public class LobbyTest {
+public class LobbyStateTest {
 
     @Before
     public void setUp() {
diff --git a/Projekte/mdga/model/src/test/java/pp/mdga/client/clientState/ClientStateTest.java b/Projekte/mdga/model/src/test/java/pp/mdga/client/clientState/ClientStateTest.java
index d48890a0..0293f46d 100644
--- a/Projekte/mdga/model/src/test/java/pp/mdga/client/clientState/ClientStateTest.java
+++ b/Projekte/mdga/model/src/test/java/pp/mdga/client/clientState/ClientStateTest.java
@@ -4,10 +4,24 @@
 import org.junit.Test;
 import pp.mdga.client.*;
 import pp.mdga.client.Ceremony;
-import pp.mdga.client.StartPiece;
+import pp.mdga.client.ceremonyState.Podium;
+import pp.mdga.client.ceremonyState.Statistics;
+import pp.mdga.client.dialogState.Lobby;
+import pp.mdga.client.dialogState.NetworkDialog;
+import pp.mdga.client.dialogState.StartDialog;
+import pp.mdga.client.gameState.*;
+import pp.mdga.client.gameState.turnState.choosePieceState.*;
+import pp.mdga.client.gameState.determineStartPlayer.DetermineStartPlayerStateMachine;
+import pp.mdga.client.gameState.turnState.*;
+import pp.mdga.client.gameState.turnState.powerCardState.ChoosePowerCard;
+import pp.mdga.client.gameState.turnState.powerCardState.Shield;
+import pp.mdga.client.gameState.turnState.powerCardState.Swap;
+import pp.mdga.client.Settings;
+import pp.mdga.client.settingsState.AudioSettings;
+import pp.mdga.client.settingsState.MainSettings;
+import pp.mdga.client.settingsState.VideoSettings;
 import pp.mdga.game.BonusCard;
 import pp.mdga.game.Color;
-import pp.mdga.game.Game;
 import pp.mdga.message.client.ClientMessage;
 
 import java.util.ArrayList;
@@ -104,12 +118,12 @@ public class ClientStateTest {
     private BonusCard shieldCard;
     private BonusCard turboCard;
 
-    private Game game;
+    private pp.mdga.game.Game game;
 
     @Before
     public void setUp() {
         //initialize the game
-        game = new Game();
+        game = new pp.mdga.game.Game();
 
         //initialize the playerID
         from=1234;
diff --git a/Projekte/mdga/model/src/test/java/pp/mdga/server/serverState/ServerStateTest.java b/Projekte/mdga/model/src/test/java/pp/mdga/server/serverState/ServerStateTest.java
index bd3c78e2..f410785c 100644
--- a/Projekte/mdga/model/src/test/java/pp/mdga/server/serverState/ServerStateTest.java
+++ b/Projekte/mdga/model/src/test/java/pp/mdga/server/serverState/ServerStateTest.java
@@ -5,6 +5,11 @@
 import pp.mdga.game.Game;
 import pp.mdga.message.server.ServerMessage;
 import pp.mdga.server.*;
+import pp.mdga.server.automaton.CeremonyState;
+import pp.mdga.server.automaton.InterruptState;
+import pp.mdga.server.automaton.LobbyState;
+import pp.mdga.server.automaton.ServerAutomaton;
+
 import static org.junit.Assert.*;
 
 /**
@@ -46,25 +51,25 @@ public class ServerStateTest {
 
     //TODO
     private Animation animation;
-    private Ceremony ceremony;
-    private ChoosePiece choosePiece;
-    private DetermineStartPlayer determineStartPlayer;
-    private FirstRoll firstRoll;
+    private CeremonyState ceremonyState;
+    private ChoosePieceState choosePieceState;
+    private DetermineStartPlayerState determineStartPlayerState;
+    private FirstRollStateState firstRollState;
     private GameState gameState;
-    private Interrupt interrupt;
-    private Lobby lobby;
-    private MovePiece movePiece;
-    private NoPiece noPiece;
-    private NoTurn noTurn;
+    private InterruptState interruptState;
+    private LobbyState lobbyState;
+    private MovePieceState movePieceState;
+    private NoPieceState noPiece;
+    private NoTurnState noTurnState;
     private PlayPowerCard playPowerCard;
-    private PowerCard powerCard;
-    private RollDice rollDice;
-    private SecondRoll secondRoll;
-    private SelectPiece selectPiece;
-    private StartPiece startPiece;
-    private ThirdRoll thirdRoll;
-    private Turn turn;
-    private WaitingPiece waitingPiece;
+    private PowerCardState powerCardState;
+    private RollDiceState rollDiceState;
+    private SecondRollState secondRoll;
+    private SelectPieceState selectPiece;
+    private StartPieceState startPiece;
+    private ThirdRollState thirdRoll;
+    private TurnState turnState;
+    private WaitingPieceState waitingPiece;
 
     /**
      * TODO
@@ -115,36 +120,36 @@ public void send(int id, ServerMessage msg) {
         from = 1234;
         fromHost = 2345;
 
-        choosePieceStateMachine = choosePiece.getChoosePieceMachine();
-        rollDiceMachine = rollDice.getRollDicemachine();
-        turnStateMachine = turn.getTurnStatemachine();
+        choosePieceStateMachine = choosePieceState.getChoosePieceMachine();
+        rollDiceMachine = rollDiceState.getRollDicemachine();
+        turnStateMachine = turnState.getTurnStatemachine();
         serverAutomaton = logic.getServerAutomaton();
         gameStateMachine = gameState.getGameStatemachine();
 
-        thirdRoll = new ThirdRoll(rollDiceMachine, logic);
-        secondRoll = new SecondRoll(rollDiceMachine, logic);
-        firstRoll = new FirstRoll(rollDiceMachine, logic);
+        thirdRoll = new ThirdRollState(rollDiceMachine, logic);
+        secondRoll = new SecondRollState(rollDiceMachine, logic);
+        firstRollState = new FirstRollStateState(rollDiceMachine, logic);
 
-        noPiece = new NoPiece(choosePieceStateMachine, logic);
-        noTurn = new NoTurn(choosePieceStateMachine, logic);
-        waitingPiece = new WaitingPiece(choosePieceStateMachine, logic);
-        startPiece = new StartPiece(choosePieceStateMachine, logic);
-        selectPiece = new SelectPiece(choosePieceStateMachine, logic);
+        noPiece = new NoPieceState(choosePieceStateMachine, logic);
+        noTurnState = new NoTurnState(choosePieceStateMachine, logic);
+        waitingPiece = new WaitingPieceState(choosePieceStateMachine, logic);
+        startPiece = new StartPieceState(choosePieceStateMachine, logic);
+        selectPiece = new SelectPieceState(choosePieceStateMachine, logic);
 
-        powerCard = new PowerCard(turnStateMachine, logic);
+        powerCardState = new PowerCardState(turnStateMachine, logic);
         playPowerCard = new PlayPowerCard(turnStateMachine, logic);
-        rollDice = new RollDice(turnStateMachine, logic);
-        choosePiece = new ChoosePiece(turnStateMachine, logic);
-        movePiece = new MovePiece(turnStateMachine, logic);
+        rollDiceState = new RollDiceState(turnStateMachine, logic);
+        choosePieceState = new ChoosePieceState(turnStateMachine, logic);
+        movePieceState = new MovePieceState(turnStateMachine, logic);
 
-        determineStartPlayer = new DetermineStartPlayer(gameStateMachine, logic);
-        turn = new Turn(gameStateMachine, logic);
+        determineStartPlayerState = new DetermineStartPlayerState(gameStateMachine, logic);
+        turnState = new TurnState(gameStateMachine, logic);
         animation = new Animation(gameStateMachine, logic);
 
-        lobby = new Lobby(serverAutomaton, logic);
+        lobbyState = new LobbyState(serverAutomaton, logic);
         gameState = new GameState(serverAutomaton, logic);
-        ceremony = new Ceremony(serverAutomaton, logic);
-        interrupt = new Interrupt(serverAutomaton, logic, gameState);
+        ceremonyState = new CeremonyState(serverAutomaton, logic);
+        interruptState = new InterruptState(serverAutomaton, logic, gameState);
     }
 
     /**
@@ -152,7 +157,7 @@ public void send(int id, ServerMessage msg) {
      */
     @Test
     public void testInitialStateServerState() {
-        assertTrue(serverAutomaton.getState() instanceof Lobby);
+        assertTrue(serverAutomaton.getState() instanceof LobbyState);
     }
 
     /**
@@ -162,8 +167,8 @@ public void testInitialStateServerState() {
     @Test
     public void testLobbyToDetermineStartPlayer() {
         //sends the server in the lobby-state
-        serverAutomaton.gotoState(lobby);
-        assertTrue(serverAutomaton.getState() instanceof Lobby);
+        serverAutomaton.gotoState(lobbyState);
+        assertTrue(serverAutomaton.getState() instanceof LobbyState);
 
         //sends the startGame message from the Host to the server
         logic.received(clientStartGame, from);
@@ -172,7 +177,7 @@ public void testLobbyToDetermineStartPlayer() {
         assertTrue(serverAutomaton.getState() instanceof GameState);
         GameState gameState1 = (GameState) serverAutomaton.getState();//Todo erzeuge state
         GameStateMachine gameStateMachine1 = gameState.getGameStateMachine();
-        assertTrue(gameStateMachine1.getState() instanceof DetermineStartPlayer);
+        assertTrue(gameStateMachine1.getState() instanceof DetermineStartPlayerState);
     }
 
     /**
@@ -181,8 +186,8 @@ public void testLobbyToDetermineStartPlayer() {
     @Test
     public void testStayInLobby() {
         //sends the server in the lobby-state
-        serverAutomaton.gotoState(lobby);
-        assertTrue(serverAutomaton.getState() instanceof Lobby);
+        serverAutomaton.gotoState(lobbyState);
+        assertTrue(serverAutomaton.getState() instanceof LobbyState);
 
         //TODO logic gets all messages
         logic.received(animationEnd, from);
@@ -203,7 +208,7 @@ public void testStayInLobby() {
         logic.received(selectTSK, from);
 
         //tests if Server is still in Lobby
-        assertTrue(serverAutomaton.getState() instanceof Lobby);
+        assertTrue(serverAutomaton.getState() instanceof LobbyState);
     }
 
     /**
@@ -218,7 +223,7 @@ public void testServerGameSubStatesToInterrupt() {
         //TODO create interrupt
 
         //tests if the server is in the Interrupt-state
-        assertTrue(serverAutomaton.getState() instanceof Interrupt);
+        assertTrue(serverAutomaton.getState() instanceof InterruptState);
     }
 
     /**
@@ -233,7 +238,7 @@ public void testServerGameToCeremony() {
         //Todo game is finished
 
         //tests if the server is in the Ceremony-state
-        assertTrue(serverAutomaton.getState() instanceof Ceremony);
+        assertTrue(serverAutomaton.getState() instanceof CeremonyState);
     }
 
     /**
@@ -242,8 +247,8 @@ public void testServerGameToCeremony() {
     @Test
     public void testInterruptToGameContinue() {
         //sends the server in the Interrupt-State
-        serverAutomaton.gotoState(interrupt);
-        assertTrue(serverAutomaton.getState() instanceof Interrupt);
+        serverAutomaton.gotoState(interruptState);
+        assertTrue(serverAutomaton.getState() instanceof InterruptState);
 
         //sends the continue-message to the server
         logic.received(forceContinueGame, from);
@@ -258,8 +263,8 @@ public void testInterruptToGameContinue() {
     @Test
     public void testInterruptToGameReconnect() {
         //sends the server in the Interrupt-State
-        serverAutomaton.gotoState(interrupt);
-        assertTrue(serverAutomaton.getState() instanceof Interrupt);
+        serverAutomaton.gotoState(interruptState);
+        assertTrue(serverAutomaton.getState() instanceof InterruptState);
 
         //todo implement the timer
 
@@ -273,8 +278,8 @@ public void testInterruptToGameReconnect() {
     @Test
     public void testInterruptToGameTimer() {
         //sends the server in the Interrupt-State
-        serverAutomaton.gotoState(interrupt);
-        assertTrue(serverAutomaton.getState() instanceof Interrupt);
+        serverAutomaton.gotoState(interruptState);
+        assertTrue(serverAutomaton.getState() instanceof InterruptState);
 
         //Todo implement the timer
 
@@ -301,14 +306,14 @@ public void testDetermineStartPlayerToDetermineStartPlayer1() {
         assertTrue(serverAutomaton.getState() instanceof GameState);
 
         //sends the gameStateMachine in DSP-state
-        gameStateMachine.gotoState(determineStartPlayer);
-        assertTrue(gameStateMachine.getState() instanceof DetermineStartPlayer);
+        gameStateMachine.gotoState(determineStartPlayerState);
+        assertTrue(gameStateMachine.getState() instanceof DetermineStartPlayerState);
 
         //TODO sends messages to the server
 
         //tests if the server is still in DSP-state
         assertTrue(serverAutomaton.getState() instanceof GameState);
-        assertTrue(gameStateMachine.getState() instanceof DetermineStartPlayer);
+        assertTrue(gameStateMachine.getState() instanceof DetermineStartPlayerState);
     }
 
     /**
@@ -321,14 +326,14 @@ public void testDetermineStartPlayerToDetermineStartPlayer2() {
         assertTrue(serverAutomaton.getState() instanceof GameState);
 
         //sends the gameStateMachine in DSP-state
-        gameStateMachine.gotoState(determineStartPlayer);
-        assertTrue(gameStateMachine.getState() instanceof DetermineStartPlayer);
+        gameStateMachine.gotoState(determineStartPlayerState);
+        assertTrue(gameStateMachine.getState() instanceof DetermineStartPlayerState);
 
         //TODO sends messages 2 RequestDiceMessage, die gleich geränkt werden to the server
 
         //tests if the server is still in DSP-state
         assertTrue(serverAutomaton.getState() instanceof GameState);
-        assertTrue(gameStateMachine.getState() instanceof DetermineStartPlayer);
+        assertTrue(gameStateMachine.getState() instanceof DetermineStartPlayerState);
     }
 
     /**
@@ -341,8 +346,8 @@ public void testDetermineStartPlayerToAnimation() {
         assertTrue(serverAutomaton.getState() instanceof GameState);
 
         //sends the gameStateMachine in DSP-state
-        gameStateMachine.gotoState(determineStartPlayer);
-        assertTrue(gameStateMachine.getState() instanceof DetermineStartPlayer);
+        gameStateMachine.gotoState(determineStartPlayerState);
+        assertTrue(gameStateMachine.getState() instanceof DetermineStartPlayerState);
 
         //TODO sends messages 2 RequestDiceMessage, die ungleich geränkt werden, sodass der server weitergeht
 
@@ -375,10 +380,10 @@ public void testAnimationToPowerCard() {
 
         //tests if the server is in the PowerCard-state
         assertTrue(serverAutomaton.getState() instanceof GameState);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
-        Turn turn1 = (Turn) gameStateMachine.getState();
-        TurnStateMachine turnStateMachine = (TurnStateMachine) turn1.getTurnStateMachine();
-        assertTrue(turnStateMachine.getState() instanceof PowerCard);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
+        TurnState turnState1 = (TurnState) gameStateMachine.getState();
+        TurnStateMachine turnStateMachine = (TurnStateMachine) turnState1.getTurnStateMachine();
+        assertTrue(turnStateMachine.getState() instanceof PowerCardState);
     }
 
     /**
@@ -392,8 +397,8 @@ public void testTurnToAnimation() {
         assertTrue(serverAutomaton.getState() instanceof GameState);
 
         //sends the gameStateMachine in Turn
-        gameStateMachine.gotoState(turn);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
+        gameStateMachine.gotoState(turnState);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
 
         //todo set the turn finished and there are still two players left
 
@@ -413,13 +418,13 @@ public void testTurnToGameEndState() {
         assertTrue(serverAutomaton.getState() instanceof GameState);
 
         //sends the gameStateMachine in Turn
-        gameStateMachine.gotoState(turn);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
+        gameStateMachine.gotoState(turnState);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
 
         //todo set the turn finished and there is only one players left
 
         //tests if the server is in the end-state of game, Ceremony
-        assertTrue(serverAutomaton.getState() instanceof Ceremony);
+        assertTrue(serverAutomaton.getState() instanceof CeremonyState);
     }
 
     /**
@@ -433,19 +438,19 @@ public void testStayInPowerCard() {
         assertTrue(serverAutomaton.getState() instanceof GameState);
 
         //sends the gameStateMachine in Turn
-        gameStateMachine.gotoState(turn);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
+        gameStateMachine.gotoState(turnState);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
 
         //sends the TurnStateMachine in PowerCard
-        turnStateMachine.gotoState(powerCard);
-        assertTrue(turnStateMachine.getState() instanceof PowerCard);
+        turnStateMachine.gotoState(powerCardState);
+        assertTrue(turnStateMachine.getState() instanceof PowerCardState);
 
         //Todo: receive messages which dont lead to a state change
 
         //tests if the server is in PowerCard
         assertTrue(serverAutomaton.getState() instanceof GameState);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
-        assertTrue(turnStateMachine.getState() instanceof PowerCard);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
+        assertTrue(turnStateMachine.getState() instanceof PowerCardState);
     }
 
     /**
@@ -459,18 +464,18 @@ public void testPowerCardToPlayPowerCard() {
         assertTrue(serverAutomaton.getState() instanceof GameState);
 
         //sends the gameStateMachine in Turn
-        gameStateMachine.gotoState(turn);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
+        gameStateMachine.gotoState(turnState);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
 
         //sends the TurnStateMachine in PowerCard
-        turnStateMachine.gotoState(powerCard);
-        assertTrue(turnStateMachine.getState() instanceof PowerCard);
+        turnStateMachine.gotoState(powerCardState);
+        assertTrue(turnStateMachine.getState() instanceof PowerCardState);
 
         //todo
 
         //tests if the server is in PlayPowerCard
         assertTrue(serverAutomaton.getState() instanceof GameState);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
         assertTrue(turnStateMachine.getState() instanceof PlayPowerCard);
     }
 
@@ -485,8 +490,8 @@ public void testPlayPowerCardToRollDice() {
         assertTrue(serverAutomaton.getState() instanceof GameState);
 
         //sends the gameStateMachine in Turn
-        gameStateMachine.gotoState(turn);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
+        gameStateMachine.gotoState(turnState);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
 
         //sends the TurnStateMachine in PowerCard
         turnStateMachine.gotoState(playPowerCard);
@@ -495,7 +500,7 @@ public void testPlayPowerCardToRollDice() {
         //receive first AnimationEndMessage from the host
         logic.received(animationEnd, fromHost);
         assertTrue(serverAutomaton.getState() instanceof GameState);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
         assertTrue(turnStateMachine.getState() instanceof PlayPowerCard);
 
         //receive second AnimationEndMessage
@@ -503,11 +508,11 @@ public void testPlayPowerCardToRollDice() {
 
         //tests if the server is in RollDice and in FirstRoll
         assertTrue(serverAutomaton.getState() instanceof GameState);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
-        assertTrue(turnStateMachine.getState() instanceof RollDice);
-        RollDice rollDice = (RollDice) turnStateMachine.getState();
-        RollDiceMachine rollDiceMachine1 = rollDice.getRollDiceStateMachine();
-        assertTrue(rollDiceMachine1.getState() instanceof FirstRoll);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
+        assertTrue(turnStateMachine.getState() instanceof RollDiceState);
+        RollDiceState rollDiceState = (RollDiceState) turnStateMachine.getState();
+        RollDiceMachine rollDiceMachine1 = rollDiceState.getRollDiceStateMachine();
+        assertTrue(rollDiceMachine1.getState() instanceof FirstRollStateState);
     }
 
     /**
@@ -521,18 +526,18 @@ public void testChoosePieceToMovePiece() {
         assertTrue(serverAutomaton.getState() instanceof GameState);
 
         //sends the gameStateMachine in Turn
-        gameStateMachine.gotoState(turn);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
+        gameStateMachine.gotoState(turnState);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
 
         //sends the TurnStateMachine in ChoosePiece
-        turnStateMachine.gotoState(choosePiece);
-        assertTrue(turnStateMachine.getState() instanceof ChoosePiece);
+        turnStateMachine.gotoState(choosePieceState);
+        assertTrue(turnStateMachine.getState() instanceof ChoosePieceState);
 
         //Todo ???
 
         assertTrue(serverAutomaton.getState() instanceof GameState);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
-        assertTrue(turnStateMachine.getState() instanceof MovePiece);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
+        assertTrue(turnStateMachine.getState() instanceof MovePieceState);
     }
 
     /**
@@ -546,12 +551,12 @@ public void testMovePieceToTurnEndState() {
         assertTrue(serverAutomaton.getState() instanceof GameState);
 
         //sends the gameStateMachine in Turn
-        gameStateMachine.gotoState(turn);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
+        gameStateMachine.gotoState(turnState);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
 
         //sends the TurnStateMachine in MovePiece
-        turnStateMachine.gotoState(movePiece);
-        assertTrue(turnStateMachine.getState() instanceof MovePiece);
+        turnStateMachine.gotoState(movePieceState);
+        assertTrue(turnStateMachine.getState() instanceof MovePieceState);
 
         //Todo no 6 was rolled, so the server looks, if there are 2 or less player are still in the game
         //TODO
@@ -569,21 +574,21 @@ public void testMovePieceToFirstRoll() {
         assertTrue(serverAutomaton.getState() instanceof GameState);
 
         //sends the gameStateMachine in Turn
-        gameStateMachine.gotoState(turn);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
+        gameStateMachine.gotoState(turnState);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
 
         //sends the TurnStateMachine in MovePiece
-        turnStateMachine.gotoState(movePiece);
-        assertTrue(turnStateMachine.getState() instanceof MovePiece);
+        turnStateMachine.gotoState(movePieceState);
+        assertTrue(turnStateMachine.getState() instanceof MovePieceState);
 
         //Todo the player rolled a 6 and the player is not finished
 
         assertTrue(serverAutomaton.getState() instanceof GameState);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
-        assertTrue(turnStateMachine.getState() instanceof RollDice);
-        RollDice rollDice = (RollDice) turnStateMachine.getState();
-        RollDiceMachine rollDiceMachine1 = rollDice.getRollDiceStateMachine();
-        assertTrue(rollDiceMachine1.getState() instanceof FirstRoll);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
+        assertTrue(turnStateMachine.getState() instanceof RollDiceState);
+        RollDiceState rollDiceState = (RollDiceState) turnStateMachine.getState();
+        RollDiceMachine rollDiceMachine1 = rollDiceState.getRollDiceStateMachine();
+        assertTrue(rollDiceMachine1.getState() instanceof FirstRollStateState);
     }
 
     /**
@@ -597,26 +602,26 @@ public void testFirstRollToRollDiceEndState() {
         assertTrue(serverAutomaton.getState() instanceof GameState);
 
         //sends the gameStateMachine in Turn
-        gameStateMachine.gotoState(turn);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
+        gameStateMachine.gotoState(turnState);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
 
         //sends the TurnStateMachine in RollDice
-        turnStateMachine.gotoState(rollDice);
-        assertTrue(turnStateMachine.getState() instanceof RollDice);
+        turnStateMachine.gotoState(rollDiceState);
+        assertTrue(turnStateMachine.getState() instanceof RollDiceState);
 
         //sends the RollDiceMachine in FirstRoll
-        rollDiceMachine.gotoState(firstRoll);
-        assertTrue(rollDiceMachine.getState() instanceof FirstRoll);
+        rollDiceMachine.gotoState(firstRollState);
+        assertTrue(rollDiceMachine.getState() instanceof FirstRollStateState);
 
         //TODO 2 Möglichkeiten
 
         //tests if the server is in NoPiece of ChoosePiece
         assertTrue(serverAutomaton.getState() instanceof GameState);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
-        assertTrue(turnStateMachine.getState() instanceof ChoosePiece);
-        ChoosePiece choosePiece1 = (ChoosePiece) turnStateMachine.getState();
-        ChoosePieceStateMachine choosePieceStateMachine = choosePiece1.getChoosePieceStateMachine();
-        assertTrue(choosePieceStateMachine.getState() instanceof NoPiece);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
+        assertTrue(turnStateMachine.getState() instanceof ChoosePieceState);
+        ChoosePieceState choosePieceState1 = (ChoosePieceState) turnStateMachine.getState();
+        ChoosePieceStateMachine choosePieceStateMachine = choosePieceState1.getChoosePieceStateMachine();
+        assertTrue(choosePieceStateMachine.getState() instanceof NoPieceState);
     }
 
     /**
@@ -630,24 +635,24 @@ public void testFirstRollToSecondRoll() {
         assertTrue(serverAutomaton.getState() instanceof GameState);
 
         //sends the gameStateMachine in Turn
-        gameStateMachine.gotoState(turn);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
+        gameStateMachine.gotoState(turnState);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
 
         //sends the TurnStateMachine in RollDice
-        turnStateMachine.gotoState(rollDice);
-        assertTrue(turnStateMachine.getState() instanceof RollDice);
+        turnStateMachine.gotoState(rollDiceState);
+        assertTrue(turnStateMachine.getState() instanceof RollDiceState);
 
         //sends the RollDiceMachine in FirstRoll
-        rollDiceMachine.gotoState(firstRoll);
-        assertTrue(rollDiceMachine.getState() instanceof FirstRoll);
+        rollDiceMachine.gotoState(firstRollState);
+        assertTrue(rollDiceMachine.getState() instanceof FirstRollStateState);
 
         //Todo player has no figures to move and had no 6
 
         //tests if the server is in the SecondRoll
         assertTrue(serverAutomaton.getState() instanceof GameState);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
-        assertTrue(turnStateMachine.getState() instanceof RollDice);
-        assertTrue(rollDiceMachine.getState() instanceof SecondRoll);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
+        assertTrue(turnStateMachine.getState() instanceof RollDiceState);
+        assertTrue(rollDiceMachine.getState() instanceof SecondRollState);
     }
 
     /**
@@ -661,26 +666,26 @@ public void testSecondRollToRollDiceEndState() {
         assertTrue(serverAutomaton.getState() instanceof GameState);
 
         //sends the gameStateMachine in Turn
-        gameStateMachine.gotoState(turn);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
+        gameStateMachine.gotoState(turnState);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
 
         //sends the TurnStateMachine in RollDice
-        turnStateMachine.gotoState(rollDice);
-        assertTrue(turnStateMachine.getState() instanceof RollDice);
+        turnStateMachine.gotoState(rollDiceState);
+        assertTrue(turnStateMachine.getState() instanceof RollDiceState);
 
         //sends the RollDiceMachine in SecondRoll
         rollDiceMachine.gotoState(secondRoll);
-        assertTrue(rollDiceMachine.getState() instanceof SecondRoll);
+        assertTrue(rollDiceMachine.getState() instanceof SecondRollState);
 
         //Todo
 
         //tests if the server is in NoPiece of ChoosePiece
         assertTrue(serverAutomaton.getState() instanceof GameState);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
-        assertTrue(turnStateMachine.getState() instanceof ChoosePiece);
-        ChoosePiece choosePiece1 = (ChoosePiece) turnStateMachine.getState();
-        ChoosePieceStateMachine choosePieceStateMachine = choosePiece1.getChoosePieceStateMachine();
-        assertTrue(choosePieceStateMachine.getState() instanceof NoPiece);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
+        assertTrue(turnStateMachine.getState() instanceof ChoosePieceState);
+        ChoosePieceState choosePieceState1 = (ChoosePieceState) turnStateMachine.getState();
+        ChoosePieceStateMachine choosePieceStateMachine = choosePieceState1.getChoosePieceStateMachine();
+        assertTrue(choosePieceStateMachine.getState() instanceof NoPieceState);
     }
 
     /**
@@ -694,24 +699,24 @@ public void testSecondRollToThirdRoll() {
         assertTrue(serverAutomaton.getState() instanceof GameState);
 
         //sends the gameStateMachine in Turn
-        gameStateMachine.gotoState(turn);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
+        gameStateMachine.gotoState(turnState);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
 
         //sends the TurnStateMachine in RollDice
-        turnStateMachine.gotoState(rollDice);
-        assertTrue(turnStateMachine.getState() instanceof RollDice);
+        turnStateMachine.gotoState(rollDiceState);
+        assertTrue(turnStateMachine.getState() instanceof RollDiceState);
 
         //sends the RollDiceMachine in SecondRoll
         rollDiceMachine.gotoState(secondRoll);
-        assertTrue(rollDiceMachine.getState() instanceof SecondRoll);
+        assertTrue(rollDiceMachine.getState() instanceof SecondRollState);
 
         //Todo player has no figures to move and had no 6
 
         //tests if the server is in the ThirdRoll
         assertTrue(serverAutomaton.getState() instanceof GameState);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
-        assertTrue(turnStateMachine.getState() instanceof RollDice);
-        assertTrue(rollDiceMachine.getState() instanceof ThirdRoll);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
+        assertTrue(turnStateMachine.getState() instanceof RollDiceState);
+        assertTrue(rollDiceMachine.getState() instanceof ThirdRollState);
     }
 
     /**
@@ -725,26 +730,26 @@ public void testThirdRollToRollDiceEndState() {
         assertTrue(serverAutomaton.getState() instanceof GameState);
 
         //sends the gameStateMachine in Turn
-        gameStateMachine.gotoState(turn);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
+        gameStateMachine.gotoState(turnState);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
 
         //sends the TurnStateMachine in RollDice
-        turnStateMachine.gotoState(rollDice);
-        assertTrue(turnStateMachine.getState() instanceof RollDice);
+        turnStateMachine.gotoState(rollDiceState);
+        assertTrue(turnStateMachine.getState() instanceof RollDiceState);
 
         //sends the RollDiceMachine in ThirdRoll
         rollDiceMachine.gotoState(thirdRoll);
-        assertTrue(rollDiceMachine.getState() instanceof ThirdRoll);
+        assertTrue(rollDiceMachine.getState() instanceof ThirdRollState);
 
         //Todo
 
         //tests if the server is in NoPiece of ChoosePiece
         assertTrue(serverAutomaton.getState() instanceof GameState);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
-        assertTrue(turnStateMachine.getState() instanceof ChoosePiece);
-        ChoosePiece choosePiece1 = (ChoosePiece) turnStateMachine.getState();
-        ChoosePieceStateMachine choosePieceStateMachine = choosePiece1.getChoosePieceStateMachine();
-        assertTrue(choosePieceStateMachine.getState() instanceof NoPiece);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
+        assertTrue(turnStateMachine.getState() instanceof ChoosePieceState);
+        ChoosePieceState choosePieceState1 = (ChoosePieceState) turnStateMachine.getState();
+        ChoosePieceStateMachine choosePieceStateMachine = choosePieceState1.getChoosePieceStateMachine();
+        assertTrue(choosePieceStateMachine.getState() instanceof NoPieceState);
     }
 
     /**
@@ -758,16 +763,16 @@ public void testThirdRollToTurnEndState() {
         assertTrue(serverAutomaton.getState() instanceof GameState);
 
         //sends the gameStateMachine in Turn
-        gameStateMachine.gotoState(turn);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
+        gameStateMachine.gotoState(turnState);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
 
         //sends the TurnStateMachine in RollDice
-        turnStateMachine.gotoState(rollDice);
-        assertTrue(turnStateMachine.getState() instanceof RollDice);
+        turnStateMachine.gotoState(rollDiceState);
+        assertTrue(turnStateMachine.getState() instanceof RollDiceState);
 
         //sends the RollDiceMachine in ThirdRoll
         rollDiceMachine.gotoState(thirdRoll);
-        assertTrue(rollDiceMachine.getState() instanceof ThirdRoll);
+        assertTrue(rollDiceMachine.getState() instanceof ThirdRollState);
 
         //Todo
     }
@@ -783,24 +788,24 @@ public void testNoPieceToWaitingPiece() {
         assertTrue(serverAutomaton.getState() instanceof GameState);
 
         //sends the server in Turn
-        gameStateMachine.gotoState(turn);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
+        gameStateMachine.gotoState(turnState);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
 
         //sends the server in ChoosePiece
-        turnStateMachine.gotoState(choosePiece);
-        assertTrue(turnStateMachine.getState() instanceof ChoosePiece);
+        turnStateMachine.gotoState(choosePieceState);
+        assertTrue(turnStateMachine.getState() instanceof ChoosePieceState);
 
         //sends the server in NoPiece
         choosePieceStateMachine.gotoState(noPiece);
-        assertTrue(choosePieceStateMachine.getState() instanceof NoPiece);
+        assertTrue(choosePieceStateMachine.getState() instanceof NoPieceState);
 
         //TODO
 
         //tests if the server is in WaitingPiece
         assertTrue(serverAutomaton.getState() instanceof GameState);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
-        assertTrue(turnStateMachine.getState() instanceof ChoosePiece);
-        assertTrue(choosePieceStateMachine.getState() instanceof WaitingPiece);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
+        assertTrue(turnStateMachine.getState() instanceof ChoosePieceState);
+        assertTrue(choosePieceStateMachine.getState() instanceof WaitingPieceState);
 
     }
 
@@ -815,24 +820,24 @@ public void testNoPieceToNoTurn() {
         assertTrue(serverAutomaton.getState() instanceof GameState);
 
         //sends the server in Turn
-        gameStateMachine.gotoState(turn);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
+        gameStateMachine.gotoState(turnState);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
 
         //sends the server in ChoosePiece
-        turnStateMachine.gotoState(choosePiece);
-        assertTrue(turnStateMachine.getState() instanceof ChoosePiece);
+        turnStateMachine.gotoState(choosePieceState);
+        assertTrue(turnStateMachine.getState() instanceof ChoosePieceState);
 
         //sends the server in NoPiece
         choosePieceStateMachine.gotoState(noPiece);
-        assertTrue(choosePieceStateMachine.getState() instanceof NoPiece);
+        assertTrue(choosePieceStateMachine.getState() instanceof NoPieceState);
 
         //TODO
 
         //tests if the server is in NoTurn
         assertTrue(serverAutomaton.getState() instanceof GameState);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
-        assertTrue(turnStateMachine.getState() instanceof ChoosePiece);
-        assertTrue(choosePieceStateMachine.getState() instanceof NoTurn);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
+        assertTrue(turnStateMachine.getState() instanceof ChoosePieceState);
+        assertTrue(choosePieceStateMachine.getState() instanceof NoTurnState);
     }
 
     /**
@@ -846,16 +851,16 @@ public void testNoTurnToTurnEndState() {
         assertTrue(serverAutomaton.getState() instanceof GameState);
 
         //sends the server in Turn
-        gameStateMachine.gotoState(turn);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
+        gameStateMachine.gotoState(turnState);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
 
         //sends the server in ChoosePiece
-        turnStateMachine.gotoState(choosePiece);
-        assertTrue(turnStateMachine.getState() instanceof ChoosePiece);
+        turnStateMachine.gotoState(choosePieceState);
+        assertTrue(turnStateMachine.getState() instanceof ChoosePieceState);
 
         //sends the server in NoTurn
-        choosePieceStateMachine.gotoState(noTurn);
-        assertTrue(choosePieceStateMachine.getState() instanceof NoTurn);
+        choosePieceStateMachine.gotoState(noTurnState);
+        assertTrue(choosePieceStateMachine.getState() instanceof NoTurnState);
 
         //TODO
     }
@@ -871,24 +876,24 @@ public void testStayInWaitingPiece() {
         assertTrue(serverAutomaton.getState() instanceof GameState);
 
         //sends the server in Turn
-        gameStateMachine.gotoState(turn);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
+        gameStateMachine.gotoState(turnState);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
 
         //sends the server in ChoosePiece
-        turnStateMachine.gotoState(choosePiece);
-        assertTrue(turnStateMachine.getState() instanceof ChoosePiece);
+        turnStateMachine.gotoState(choosePieceState);
+        assertTrue(turnStateMachine.getState() instanceof ChoosePieceState);
 
         //sends the server in WaitingPiece
         choosePieceStateMachine.gotoState(waitingPiece);
-        assertTrue(choosePieceStateMachine.getState() instanceof WaitingPiece);
+        assertTrue(choosePieceStateMachine.getState() instanceof WaitingPieceState);
 
         //TODO
 
         //tests if the server is in WaitingPiece
         assertTrue(serverAutomaton.getState() instanceof GameState);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
-        assertTrue(turnStateMachine.getState() instanceof ChoosePiece);
-        assertTrue(choosePieceStateMachine.getState() instanceof WaitingPiece);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
+        assertTrue(turnStateMachine.getState() instanceof ChoosePieceState);
+        assertTrue(choosePieceStateMachine.getState() instanceof WaitingPieceState);
     }
 
     /**
@@ -902,16 +907,16 @@ public void testWaitingPieceToMovePiece() {
         assertTrue(serverAutomaton.getState() instanceof GameState);
 
         //sends the server in Turn
-        gameStateMachine.gotoState(turn);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
+        gameStateMachine.gotoState(turnState);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
 
         //sends the server in ChoosePiece
-        turnStateMachine.gotoState(choosePiece);
-        assertTrue(turnStateMachine.getState() instanceof ChoosePiece);
+        turnStateMachine.gotoState(choosePieceState);
+        assertTrue(turnStateMachine.getState() instanceof ChoosePieceState);
 
         //sends the server in WaitingPiece
         choosePieceStateMachine.gotoState(waitingPiece);
-        assertTrue(choosePieceStateMachine.getState() instanceof WaitingPiece);
+        assertTrue(choosePieceStateMachine.getState() instanceof WaitingPieceState);
 
         //TODO
     }
@@ -927,24 +932,24 @@ public void testNoPieceToSelectPiece() {
         assertTrue(serverAutomaton.getState() instanceof GameState);
 
         //sends the server in Turn
-        gameStateMachine.gotoState(turn);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
+        gameStateMachine.gotoState(turnState);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
 
         //sends the server in ChoosePiece
-        turnStateMachine.gotoState(choosePiece);
-        assertTrue(turnStateMachine.getState() instanceof ChoosePiece);
+        turnStateMachine.gotoState(choosePieceState);
+        assertTrue(turnStateMachine.getState() instanceof ChoosePieceState);
 
         //sends the server in NoPiece
         choosePieceStateMachine.gotoState(noPiece);
-        assertTrue(choosePieceStateMachine.getState() instanceof NoPiece);
+        assertTrue(choosePieceStateMachine.getState() instanceof NoPieceState);
 
         //TODO
 
         //tests if the server is in SelectPiece
         assertTrue(serverAutomaton.getState() instanceof GameState);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
-        assertTrue(turnStateMachine.getState() instanceof ChoosePiece);
-        assertTrue(choosePieceStateMachine.getState() instanceof SelectPiece);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
+        assertTrue(turnStateMachine.getState() instanceof ChoosePieceState);
+        assertTrue(choosePieceStateMachine.getState() instanceof SelectPieceState);
     }
 
     /**
@@ -958,24 +963,24 @@ public void testNoPieceToStartPiece() {
         assertTrue(serverAutomaton.getState() instanceof GameState);
 
         //sends the server in Turn
-        gameStateMachine.gotoState(turn);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
+        gameStateMachine.gotoState(turnState);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
 
         //sends the server in ChoosePiece
-        turnStateMachine.gotoState(choosePiece);
-        assertTrue(turnStateMachine.getState() instanceof ChoosePiece);
+        turnStateMachine.gotoState(choosePieceState);
+        assertTrue(turnStateMachine.getState() instanceof ChoosePieceState);
 
         //sends the server in NoPiece
         choosePieceStateMachine.gotoState(noPiece);
-        assertTrue(choosePieceStateMachine.getState() instanceof NoPiece);
+        assertTrue(choosePieceStateMachine.getState() instanceof NoPieceState);
 
         //TODO
 
         //tests if the server is in StartPiece
         assertTrue(serverAutomaton.getState() instanceof GameState);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
-        assertTrue(turnStateMachine.getState() instanceof ChoosePiece);
-        assertTrue(choosePieceStateMachine.getState() instanceof StartPiece);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
+        assertTrue(turnStateMachine.getState() instanceof ChoosePieceState);
+        assertTrue(choosePieceStateMachine.getState() instanceof StartPieceState);
     }
 
     /**
@@ -989,24 +994,24 @@ public void testStayInSelectPiece() {
         assertTrue(serverAutomaton.getState() instanceof GameState);
 
         //sends the server in Turn
-        gameStateMachine.gotoState(turn);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
+        gameStateMachine.gotoState(turnState);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
 
         //sends the server in ChoosePiece
-        turnStateMachine.gotoState(choosePiece);
-        assertTrue(turnStateMachine.getState() instanceof ChoosePiece);
+        turnStateMachine.gotoState(choosePieceState);
+        assertTrue(turnStateMachine.getState() instanceof ChoosePieceState);
 
         //sends the server in SelectPiece
         choosePieceStateMachine.gotoState(selectPiece);
-        assertTrue(choosePieceStateMachine.getState() instanceof SelectPiece);
+        assertTrue(choosePieceStateMachine.getState() instanceof SelectPieceState);
 
         //TODO
 
         //tests if the server is in SelectPiece
         assertTrue(serverAutomaton.getState() instanceof GameState);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
-        assertTrue(turnStateMachine.getState() instanceof ChoosePiece);
-        assertTrue(choosePieceStateMachine.getState() instanceof SelectPiece);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
+        assertTrue(turnStateMachine.getState() instanceof ChoosePieceState);
+        assertTrue(choosePieceStateMachine.getState() instanceof SelectPieceState);
     }
 
     /**
@@ -1020,16 +1025,16 @@ public void testSelectPieceToMovePiece() {
         assertTrue(serverAutomaton.getState() instanceof GameState);
 
         //sends the server in Turn
-        gameStateMachine.gotoState(turn);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
+        gameStateMachine.gotoState(turnState);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
 
         //sends the server in ChoosePiece
-        turnStateMachine.gotoState(choosePiece);
-        assertTrue(turnStateMachine.getState() instanceof ChoosePiece);
+        turnStateMachine.gotoState(choosePieceState);
+        assertTrue(turnStateMachine.getState() instanceof ChoosePieceState);
 
         //sends the server in SelectPiece
         choosePieceStateMachine.gotoState(selectPiece);
-        assertTrue(choosePieceStateMachine.getState() instanceof SelectPiece);
+        assertTrue(choosePieceStateMachine.getState() instanceof SelectPieceState);
 
         //TODO
     }
@@ -1045,24 +1050,24 @@ public void testStayInStartPiece() {
         assertTrue(serverAutomaton.getState() instanceof GameState);
 
         //sends the server in Turn
-        gameStateMachine.gotoState(turn);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
+        gameStateMachine.gotoState(turnState);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
 
         //sends the server in ChoosePiece
-        turnStateMachine.gotoState(choosePiece);
-        assertTrue(turnStateMachine.getState() instanceof ChoosePiece);
+        turnStateMachine.gotoState(choosePieceState);
+        assertTrue(turnStateMachine.getState() instanceof ChoosePieceState);
 
         //sends the server in StartPiece
         choosePieceStateMachine.gotoState(startPiece);
-        assertTrue(choosePieceStateMachine.getState() instanceof StartPiece);
+        assertTrue(choosePieceStateMachine.getState() instanceof StartPieceState);
 
         //TODO
 
         //tests if the server is in StartPiece
         assertTrue(serverAutomaton.getState() instanceof GameState);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
-        assertTrue(turnStateMachine.getState() instanceof ChoosePiece);
-        assertTrue(choosePieceStateMachine.getState() instanceof StartPiece);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
+        assertTrue(turnStateMachine.getState() instanceof ChoosePieceState);
+        assertTrue(choosePieceStateMachine.getState() instanceof StartPieceState);
     }
 
     /**
@@ -1076,16 +1081,16 @@ public void testStartPieceToMovePiece() {
         assertTrue(serverAutomaton.getState() instanceof GameState);
 
         //sends the server in Turn
-        gameStateMachine.gotoState(turn);
-        assertTrue(gameStateMachine.getState() instanceof Turn);
+        gameStateMachine.gotoState(turnState);
+        assertTrue(gameStateMachine.getState() instanceof TurnState);
 
         //sends the server in ChoosePiece
-        turnStateMachine.gotoState(choosePiece);
-        assertTrue(turnStateMachine.getState() instanceof ChoosePiece);
+        turnStateMachine.gotoState(choosePieceState);
+        assertTrue(turnStateMachine.getState() instanceof ChoosePieceState);
 
         //sends the server in StartPiece
         choosePieceStateMachine.gotoState(startPiece);
-        assertTrue(choosePieceStateMachine.getState() instanceof StartPiece);
+        assertTrue(choosePieceStateMachine.getState() instanceof StartPieceState);
 
         //TODO
     }