diff --git a/CheckersClient/.idea/caches/build_file_checksums.ser b/CheckersClient/.idea/caches/build_file_checksums.ser
index 13675fdaaed4926c89b045bb8c396fb86f523650..ff2c783aa53bb9b4f4b5276e8b692f30a5ec539a 100644
Binary files a/CheckersClient/.idea/caches/build_file_checksums.ser and b/CheckersClient/.idea/caches/build_file_checksums.ser differ
diff --git a/CheckersClient/.idea/libraries/Gradle__org_javatuples_javatuples_1_2.xml b/CheckersClient/.idea/libraries/Gradle__org_javatuples_javatuples_1_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..791ccad4fc6da6b6e176aa2a55444318bfcaf3dd
--- /dev/null
+++ b/CheckersClient/.idea/libraries/Gradle__org_javatuples_javatuples_1_2.xml
@@ -0,0 +1,11 @@
+<component name="libraryTable">
+  <library name="Gradle: org.javatuples:javatuples:1.2">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.javatuples/javatuples/1.2/507312ac4b601204a72a83380badbca82683dd36/javatuples-1.2.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.javatuples/javatuples/1.2/a7495f5370bdfcf46c6f3c6ed0badf52877aa467/javatuples-1.2-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/CheckersClient/android/assets/Menu/1x/Lobby.png b/CheckersClient/android/assets/Menu/1x/Lobby.png
new file mode 100644
index 0000000000000000000000000000000000000000..a3b932205022ad0d0d5bb1003f3ddded80637d0c
Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/Lobby.png differ
diff --git a/CheckersClient/android/assets/Menu/1x/LobbyMenu@1x.png b/CheckersClient/android/assets/Menu/1x/LobbyMenu@1x.png
index e32bb0211c00fcdb8162545271b661e85ea02467..e5846c8fca429429a70b90dcf4fd953a5fd9e8d5 100644
Binary files a/CheckersClient/android/assets/Menu/1x/LobbyMenu@1x.png and b/CheckersClient/android/assets/Menu/1x/LobbyMenu@1x.png differ
diff --git a/CheckersClient/android/assets/Menu/1x/MainMenu@1x.png b/CheckersClient/android/assets/Menu/1x/MainMenu@1x.png
index 7087a58412cbdd8363f7793659ac6be421ca5b40..49e98d44d7b293830464bf523b6cab7646435b44 100644
Binary files a/CheckersClient/android/assets/Menu/1x/MainMenu@1x.png and b/CheckersClient/android/assets/Menu/1x/MainMenu@1x.png differ
diff --git a/CheckersClient/android/assets/Menu/1x/MrServer.png b/CheckersClient/android/assets/Menu/1x/MrServer.png
new file mode 100644
index 0000000000000000000000000000000000000000..57a4adbfc58c73e2f9c79879a15cb558d363ffda
Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/MrServer.png differ
diff --git a/CheckersClient/android/assets/Menu/1x/MrServerBubblePointer.png b/CheckersClient/android/assets/Menu/1x/MrServerBubblePointer.png
new file mode 100644
index 0000000000000000000000000000000000000000..2c701128ef243ac63f3c2a5121536abbd6af5e02
Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/MrServerBubblePointer.png differ
diff --git a/CheckersClient/android/assets/Menu/1x/MrServerBubbleSquare.png b/CheckersClient/android/assets/Menu/1x/MrServerBubbleSquare.png
new file mode 100644
index 0000000000000000000000000000000000000000..98b8772403f067b3902e460ac5406a16de5bad15
Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/MrServerBubbleSquare.png differ
diff --git a/CheckersClient/android/assets/Menu/1x/PlayerReady.png b/CheckersClient/android/assets/Menu/1x/PlayerReady.png
new file mode 100644
index 0000000000000000000000000000000000000000..4cba8dc27d25bb4393a58b1f401141977f44b434
Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/PlayerReady.png differ
diff --git a/CheckersClient/android/assets/Menu/1x/PlayerReadyCheck.png b/CheckersClient/android/assets/Menu/1x/PlayerReadyCheck.png
new file mode 100644
index 0000000000000000000000000000000000000000..7b34127c2981fd699b19bfc0c757400edbf0904f
Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/PlayerReadyCheck.png differ
diff --git a/CheckersClient/android/assets/Menu/1x/SpaceCheckersLogoWithBackground.png b/CheckersClient/android/assets/Menu/1x/SpaceCheckersLogoWithBackground.png
new file mode 100644
index 0000000000000000000000000000000000000000..1459cd41e87948848498cd6e7bfbb8e327b50de5
Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/SpaceCheckersLogoWithBackground.png differ
diff --git a/CheckersClient/android/assets/characters/MrServer1@1x.png b/CheckersClient/android/assets/characters/MrServer1@1x.png
new file mode 100644
index 0000000000000000000000000000000000000000..bec3a1bdbf675a96e871066dac923858efd1873b
Binary files /dev/null and b/CheckersClient/android/assets/characters/MrServer1@1x.png differ
diff --git a/CheckersClient/android/assets/characters/MrServer2@1x.png b/CheckersClient/android/assets/characters/MrServer2@1x.png
new file mode 100644
index 0000000000000000000000000000000000000000..5aae4331a0e9f49bd27ea96a8d8ef00e817b8fc2
Binary files /dev/null and b/CheckersClient/android/assets/characters/MrServer2@1x.png differ
diff --git a/CheckersClient/android/assets/characters/MrServer3@1x.png b/CheckersClient/android/assets/characters/MrServer3@1x.png
new file mode 100644
index 0000000000000000000000000000000000000000..ad404fa898550132e12db36a0b007e87deef00b1
Binary files /dev/null and b/CheckersClient/android/assets/characters/MrServer3@1x.png differ
diff --git a/CheckersClient/android/assets/characters/MrServerName.png b/CheckersClient/android/assets/characters/MrServerName.png
new file mode 100644
index 0000000000000000000000000000000000000000..b0bb41a160668f668395ab603d57256779161db5
Binary files /dev/null and b/CheckersClient/android/assets/characters/MrServerName.png differ
diff --git a/CheckersClient/android/assets/characters/MrServerPortrait@1x.png b/CheckersClient/android/assets/characters/MrServerPortrait@1x.png
new file mode 100644
index 0000000000000000000000000000000000000000..c7dce48b35822d09931f827c601b143977109ae8
Binary files /dev/null and b/CheckersClient/android/assets/characters/MrServerPortrait@1x.png differ
diff --git a/CheckersClient/build.gradle b/CheckersClient/build.gradle
index 9d029760e9c300472e88cde54c412a341f3f91e4..dfc747b21022807316a09656376034b42935c0f6 100644
--- a/CheckersClient/build.gradle
+++ b/CheckersClient/build.gradle
@@ -13,8 +13,6 @@ buildscript {
         classpath 'com.android.tools.build:gradle:3.5.4'
         classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
 
-
-
     }
 }
 
@@ -53,6 +51,7 @@ project(":desktop") {
         api "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
 
         implementation group: "com.esotericsoftware", name: 'kryonet', version: "2.22.0-RC1"
+        implementation group: "org.javatuples", name: 'javatuples', version: "1.2"
     }
 }
 
@@ -79,6 +78,7 @@ project(":android") {
         api "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
 
         implementation group: "com.esotericsoftware", name: 'kryonet', version: "2.22.0-RC1"
+        implementation group: "org.javatuples", name: 'javatuples', version: "1.2"
     }
 }
 
@@ -92,5 +92,6 @@ project(":core") {
         api "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
 
         implementation group: "com.esotericsoftware", name: 'kryonet', version: "2.22.0-RC1"
+        implementation group: "org.javatuples", name: 'javatuples', version: "1.2"
     }
 }
\ No newline at end of file
diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/NetworkController.java b/CheckersClient/core/src/com/mygdx/game/controllers/NetworkController.java
index bb21226cdc36dc61932a35a3cea510bd8a1024ed..dfdbb501915317c049054cfdd6905e1b9d7ec494 100644
--- a/CheckersClient/core/src/com/mygdx/game/controllers/NetworkController.java
+++ b/CheckersClient/core/src/com/mygdx/game/controllers/NetworkController.java
@@ -11,6 +11,9 @@ import com.mygdx.game.model.Lobby;
 import com.mygdx.game.model.Player;
 import com.mygdx.game.views.tokens.PlayerAvatar;
 
+import org.javatuples.Pair;
+import org.javatuples.Tuple;
+
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.LinkedList;
@@ -27,7 +30,7 @@ public class NetworkController {
         client.start();
         try {
             //192.168.87.34
-            String IP4_LAN_ADDRESS = "192.168.10.154";
+            String IP4_LAN_ADDRESS = "192.168.87.23";
             client.connect(10000, IP4_LAN_ADDRESS, 54555, 54777);
         } catch (IOException e) {
             e.printStackTrace();
@@ -53,6 +56,9 @@ public class NetworkController {
         kryo.register(cLobbyDelete.class, 23);
         kryo.register(cLobbyGetList.class, 24);
         kryo.register(cSetIndexAvatar.class, 25);
+        kryo.register(cSetPlayerReady.class, 26);
+        kryo.register(cSetPlayerName.class, 27);
+        kryo.register(cStartGame.class, 28);
     }
 
     public Client getClient() { return client; }
diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/PlayerController.java b/CheckersClient/core/src/com/mygdx/game/controllers/PlayerController.java
index f2410d9f55c4789cd07dd4b50ee042961cf2bcbb..14b1461a79cbb67cc6d2b741d293cd0f02132497 100644
--- a/CheckersClient/core/src/com/mygdx/game/controllers/PlayerController.java
+++ b/CheckersClient/core/src/com/mygdx/game/controllers/PlayerController.java
@@ -1,14 +1,18 @@
 package com.mygdx.game.controllers;
 
+import com.badlogic.gdx.utils.Null;
 import com.esotericsoftware.kryonet.Connection;
 import com.esotericsoftware.kryonet.Listener;
 import com.mygdx.game.controllers.commands.*;
 import com.mygdx.game.model.Lobby;
 import com.mygdx.game.model.Player;
 
+import org.javatuples.Pair;
+
 import java.util.ArrayList;
 import java.util.LinkedList;
 
+
 public class PlayerController {
 
     private NetworkController net;
@@ -45,12 +49,20 @@ public class PlayerController {
 
     public void lobbyGetList(){ sendCommand(new cLobbyGetList()); }
 
+    public void setLobbyPlayerReady(boolean isPlayerReady){
+        sendCommand(new cSetPlayerReady(isPlayerReady, lobby.getID(), player.getID()));
+    }
+
     public void connectPlayer(int avatarIndex){ sendCommand(new cPlayerJoin(avatarIndex));}
 
     public void createLobby(String name, int MAX_PLAYERS){ sendCommand(new cLobbyCreate(name, MAX_PLAYERS)); }
 
     public void updateIndexAvatar(int indexAvatar){ sendCommand(new cSetIndexAvatar(indexAvatar)); }
 
+    public void playerSetName(String name) {
+        sendCommand(new cSetPlayerName(name));
+    }
+
     public void deleteLobby(int id){ sendCommand(new cLobbyDelete(id)); }
 
     public void joinLobby(int id){ sendCommand(new cLobbyJoin(id)); }
@@ -69,6 +81,22 @@ public class PlayerController {
 
     public void setLobbies(ArrayList<Lobby> lobbies){ this.lobbies = lobbies; }
 
+    public boolean isOwningPlayerInLobby(){
+        try{
+            if(lobby==null){
+                return false;
+            }
+            else if(lobby.getID() == -1){
+                return false;
+            }
+            else{
+                return true;
+            }
+        }catch (NullPointerException e){
+            return false;
+        }
+    }
+
     public PlayerController getPlayerController(){ return this; }
 
     public NetworkController getNetWorkController() { return net; }
@@ -76,6 +104,4 @@ public class PlayerController {
     public Command getLastCommand(){ return receivedCommands.getFirst(); }
 
 
-
-
 }
diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cSetIndexAvatar.java b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cSetIndexAvatar.java
index b917c6980a2e03d916895cb2e4959747cc2fa23c..fb713e07bfc07644cce55e5c140248a29bdd0427 100644
--- a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cSetIndexAvatar.java
+++ b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cSetIndexAvatar.java
@@ -7,7 +7,7 @@ import com.mygdx.game.model.Lobby;
 
 public class cSetIndexAvatar extends Command {
 
-    public cSetIndexAvatar() { super("cLobbyJoin"); }
+    public cSetIndexAvatar() { super("cSetIndexAvatar"); }
 
     public cSetIndexAvatar(int indexAvatar) {
         super("cSetIndexAvatar", indexAvatar);
diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cSetPlayerName.java b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cSetPlayerName.java
new file mode 100644
index 0000000000000000000000000000000000000000..b89a72c7761aae6c0c02746b267fc03ed28de372
--- /dev/null
+++ b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cSetPlayerName.java
@@ -0,0 +1,27 @@
+package com.mygdx.game.controllers.commands;
+
+import com.esotericsoftware.kryonet.Connection;
+import com.mygdx.game.controllers.PlayerController;
+import com.mygdx.game.model.Lobby;
+import com.mygdx.game.model.Player;
+
+import org.javatuples.Pair;
+
+
+public class cSetPlayerName extends Command{
+
+    public cSetPlayerName() { super("cSetPlayerName"); }
+
+    public cSetPlayerName(String name) {
+        super("cSetPlayerName", name);
+    }
+
+    @Override
+    public void execute(PlayerController playerController, Connection connection){
+        if(data instanceof String){
+            String name = (String) data;
+            playerController.getPlayer().setPlayerName(name);
+            System.out.printf("Player name is updated on server. %s \n", name);
+        }
+    }
+}
diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cSetPlayerReady.java b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cSetPlayerReady.java
new file mode 100644
index 0000000000000000000000000000000000000000..af752e948d1799a52c28ba486a32bd24084d5787
--- /dev/null
+++ b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cSetPlayerReady.java
@@ -0,0 +1,35 @@
+package com.mygdx.game.controllers.commands;
+
+import com.esotericsoftware.kryonet.Connection;
+import com.mygdx.game.controllers.PlayerController;
+
+public class cSetPlayerReady extends Command{
+
+    public cSetPlayerReady() { super("cSetPlayerReady"); }
+
+    private int lobbyID;
+    private int playerID;
+
+    public cSetPlayerReady(boolean isPlayerReady, int lobbyID) {
+        super("cSetPlayerReady", isPlayerReady);
+        this.lobbyID = lobbyID;
+        this.playerID = playerID;
+    }
+
+    public cSetPlayerReady(boolean isPlayerReady, int lobbyID, int playerID) {
+        super("cSetPlayerReady", isPlayerReady);
+        this.lobbyID = lobbyID;
+        this.playerID = playerID;
+    }
+
+    @Override
+    public void execute(PlayerController playerController, Connection connection){
+        if(data instanceof Boolean){
+            boolean isPlayerReady = (Boolean) data;
+            if(playerID == playerController.getPlayer().getID()) playerController.getPlayer().setIsPlayerReady(isPlayerReady);
+            playerController.getLobby().getPlayerByID(playerID).setIsPlayerReady(isPlayerReady);
+            //System.out.println("value of playerID" + playerID);
+            System.out.printf("Player status updated. Is player %d currently ready? %b \n", playerID, isPlayerReady);
+        }
+    }
+}
diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cStartGame.java b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cStartGame.java
new file mode 100644
index 0000000000000000000000000000000000000000..65911658b63156212ab1b12872670dc2ebab5db2
--- /dev/null
+++ b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cStartGame.java
@@ -0,0 +1,19 @@
+package com.mygdx.game.controllers.commands;
+
+
+import com.esotericsoftware.kryonet.Connection;
+import com.mygdx.game.controllers.PlayerController;
+
+public class cStartGame extends Command{
+
+    public cStartGame() { super("cStartGame"); }
+
+    public cStartGame(int id) { super("cStartGame", (Integer) id); }
+
+    @Override
+    public void execute(PlayerController playerController, Connection connection){
+        playerController.getLobby().setLobbyGameStarted(true);
+        System.out.println("GAME HAS STARTED");
+
+    }
+}
diff --git a/CheckersClient/core/src/com/mygdx/game/model/Lobby.java b/CheckersClient/core/src/com/mygdx/game/model/Lobby.java
index 4b170d62e45db0a338fdfcf35fa115da11220114..9dfe3ba94a9b4feb979a8b3812d3125ef1c301fd 100644
--- a/CheckersClient/core/src/com/mygdx/game/model/Lobby.java
+++ b/CheckersClient/core/src/com/mygdx/game/model/Lobby.java
@@ -9,6 +9,7 @@ public class Lobby {
     private String name;
     private int MAX_PLAYERS;
     private ArrayList<Player> players;
+    private boolean lobbyGameStarted = false;
 
     public Lobby() {}
 
@@ -26,6 +27,13 @@ public class Lobby {
 
     public int getID(){ return ID; }
 
+    public boolean getLobbyGameStarted(){
+        return lobbyGameStarted;
+    }
+    public void setLobbyGameStarted(boolean lobbyGameStarted){
+        this.lobbyGameStarted = lobbyGameStarted;
+    }
+
     public void setName(String name){
         this.name = name;
     }
@@ -34,6 +42,17 @@ public class Lobby {
         return name;
     }
 
+    public Player getPlayerByID(int playerID){
+
+        Player returnPlayer = null;
+
+        for (Player player : players){
+            if (player.getID() == playerID) returnPlayer = player;
+        }
+
+        return returnPlayer;
+    }
+
     public int getMaxPlayers(){
         return MAX_PLAYERS;
     }
diff --git a/CheckersClient/core/src/com/mygdx/game/model/Player.java b/CheckersClient/core/src/com/mygdx/game/model/Player.java
index e8200a4ff01d3bb3bbc6a2d8f71d9417ff93fdc4..1a3a7c9799d7ae0c34ea13715a652ca6d86a787b 100644
--- a/CheckersClient/core/src/com/mygdx/game/model/Player.java
+++ b/CheckersClient/core/src/com/mygdx/game/model/Player.java
@@ -5,6 +5,7 @@ public class Player {
     private int ID;
     private int indexAvatar;
     private String playerName;
+    private boolean isPlayerReady;
 
     public Player(){}
 
@@ -43,4 +44,16 @@ public class Player {
     public void setPlayerName(String playerName) {
         this.playerName = playerName;
     }
+
+    public String getPlayerName(){
+        return this.playerName;
+    }
+
+    public void setIsPlayerReady(boolean isPlayerReady) {
+        this.isPlayerReady = isPlayerReady;
+    }
+
+    public boolean getIsPlayerReady(){
+        return this.isPlayerReady;
+    }
 }
diff --git a/CheckersClient/core/src/com/mygdx/game/views/LoadingView.java b/CheckersClient/core/src/com/mygdx/game/views/LoadingView.java
index 2a1c001ba04ff01fd8fe7c3b42c56c353f3cd4ac..b6cfdeae4b4d09d3a1c012b8e1af10247557281f 100644
--- a/CheckersClient/core/src/com/mygdx/game/views/LoadingView.java
+++ b/CheckersClient/core/src/com/mygdx/game/views/LoadingView.java
@@ -52,6 +52,7 @@ public class LoadingView extends View {
     @Override
     public void update(float dt) {
         if(assetManager.update()){
+            stage.clear();
             gvm.set(new MenuView(gvm, playerController, assetManager, stage, skin));
         }
         else{
diff --git a/CheckersClient/core/src/com/mygdx/game/views/LobbyPlayTransitionScreen.java b/CheckersClient/core/src/com/mygdx/game/views/LobbyPlayTransitionScreen.java
new file mode 100644
index 0000000000000000000000000000000000000000..73d52a8464bc5a6fab1c89855eabb0f03d7b759f
--- /dev/null
+++ b/CheckersClient/core/src/com/mygdx/game/views/LobbyPlayTransitionScreen.java
@@ -0,0 +1,89 @@
+package com.mygdx.game.views;
+
+import com.badlogic.gdx.Gdx;
+import com.badlogic.gdx.Input;
+import com.badlogic.gdx.assets.AssetManager;
+import com.badlogic.gdx.audio.Sound;
+import com.badlogic.gdx.graphics.Texture;
+import com.badlogic.gdx.graphics.g2d.BitmapFont;
+import com.badlogic.gdx.graphics.g2d.SpriteBatch;
+import com.badlogic.gdx.scenes.scene2d.Stage;
+import com.badlogic.gdx.scenes.scene2d.ui.Image;
+import com.badlogic.gdx.scenes.scene2d.ui.Skin;
+import com.mygdx.game.controllers.PlayerController;
+import com.mygdx.game.views.enums.LobbyAssets;
+import com.mygdx.game.views.tokens.PlayerAvatar;
+
+import java.util.ArrayList;
+
+
+public class LobbyPlayTransitionScreen extends View{
+
+    private Texture background;
+    private Texture rocketTexture;
+    private Texture exhaustTexture;
+    private Image rocketImage;
+    private Image whiteImage;
+    private Image exhaustImage;
+    private Image backgroundImage;
+
+    protected LobbyPlayTransitionScreen(GameViewManager gvm, PlayerController playerController, AssetManager assetManager, Stage stage, Skin skin, ArrayList<PlayerAvatar> availableAvatars) {
+        super(gvm, playerController, assetManager, stage, skin);
+        background = (Texture) assetManager.get(LobbyAssets.BACKGROUND.path, LobbyAssets.BACKGROUND.classType);
+        rocketTexture = (Texture) assetManager.get(LobbyAssets.ROCKET.path, LobbyAssets.ROCKET.classType);
+        exhaustTexture = (Texture) assetManager.get(LobbyAssets.ROCKET_EXHAUST.path, LobbyAssets.ROCKET_EXHAUST.classType);
+
+        backgroundImage = new Image(background);
+        rocketImage = new Image(rocketTexture);
+        rocketImage.setSize(200, 270);
+        rocketImage.setPosition(Gdx.graphics.getWidth()/2+40, 370);
+        rocketImage.setOrigin(0,0);
+
+        exhaustImage = new Image(exhaustTexture);
+        exhaustImage.setSize(col_width*0.6f, row_height*2f);
+        exhaustImage.setPosition(rocketImage.getX()+rocketImage.getWidth()/2-exhaustImage.getWidth()/2, rocketImage.getY()-exhaustImage.getHeight());
+        exhaustImage.setColor(1, 1, 1, 0);
+
+        stage.addActor(backgroundImage);
+    }
+
+    @Override
+    protected void handleInput() {
+        if(Gdx.input.isKeyPressed(Input.Keys.ESCAPE)){
+
+        }
+    }
+
+    private void isGameOver(){
+        boolean someCondition = false;
+        if (someCondition){
+            Gdx.app.exit();
+        }
+    }
+
+    @Override
+    public void update(float dt) {
+        stage.act(dt);
+        isGameOver();
+        handleInput();
+    }
+
+
+    @Override
+    public void render(float dt) {
+        stage.getBatch().begin();
+        stage.getBatch().draw(background, 0, 0);
+        stage.getBatch().end();
+        stage.draw();
+
+    }
+
+    private void debugDraw(SpriteBatch sb, String text, int xPos, int yPos){
+
+    }
+
+    @Override
+    public void dispose() {
+
+    }
+}
diff --git a/CheckersClient/core/src/com/mygdx/game/views/LobbyView.java b/CheckersClient/core/src/com/mygdx/game/views/LobbyView.java
index dce43f98a4004339ec4f20133bce4cf821e354b2..ca31751a652416fe6e4d25ed799f2aa2e2f7e591 100644
--- a/CheckersClient/core/src/com/mygdx/game/views/LobbyView.java
+++ b/CheckersClient/core/src/com/mygdx/game/views/LobbyView.java
@@ -12,6 +12,7 @@ import com.badlogic.gdx.scenes.scene2d.InputListener;
 import com.badlogic.gdx.scenes.scene2d.Stage;
 import com.badlogic.gdx.scenes.scene2d.ui.Button;
 import com.badlogic.gdx.scenes.scene2d.ui.Image;
+import com.badlogic.gdx.scenes.scene2d.ui.ImageButton;
 import com.badlogic.gdx.scenes.scene2d.ui.Label;
 import com.badlogic.gdx.scenes.scene2d.ui.List;
 import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane;
@@ -44,21 +45,23 @@ public class LobbyView extends View{
     private boolean startRocketTransition;
 
     private Button createLobbyButton;
-    private Button lobbyListBackButton;
+    private Button findLobbyButton;
     private Button joinLobbyButton;
     private Button lobbyBackButton;
     private Button lobbyListRefreshButton;
     private Button lobbyRefreshButton;
-    private Button findLobbyButton;
-    private Button setUserNameButton;
+    private Button lobbyListBackButton;
     private Button startLobbyButton;
 
     private float fadeTransitionLength = 1f;
     private float alphaFadeValue = 1;
 
     private Image backgroundImage;
+    private PlayerAvatar mrServer;
+    private Image mrServerNameImage;
     private Image exhaustImage;
     private Image lobbyListBubbleImage;
+    private Image lobbyListBubblePointerImage;
     private Image rocketImage;
     private Image whiteImage;
 
@@ -73,11 +76,12 @@ public class LobbyView extends View{
 
     private TextField lobbyCreateTextField;
 
-    private SelectBox<Integer> lobbyCreateSizeSelectBox;
+    private Image playerReady;
+    private ImageButton playerReadyCheckButton;
 
+    private SelectBox<Integer> lobbyCreateSizeSelectBox;
     private ShapeRenderer shapeRenderer;
 
-
     public LobbyView(GameViewManager gvm, final PlayerController playerController, AssetManager assetManager, final Stage stage, Skin skin, ArrayList<PlayerAvatar> availableAvatars) {
         super(gvm, playerController, assetManager, stage, skin);
 
@@ -92,20 +96,47 @@ public class LobbyView extends View{
 
         background = (Texture) assetManager.get(LobbyAssets.BACKGROUND.path, LobbyAssets.BACKGROUND.classType);
         rocketTexture = (Texture) assetManager.get(LobbyAssets.ROCKET.path, LobbyAssets.ROCKET.classType);
-        exhaustTexture = (Texture) assetManager.get(LobbyAssets.ROCKETEXHAUST.path, LobbyAssets.ROCKETEXHAUST.classType);
+        exhaustTexture = (Texture) assetManager.get(LobbyAssets.ROCKET_EXHAUST.path, LobbyAssets.ROCKET_EXHAUST.classType);
         buttonClickAudio = (Sound) assetManager.get(MenuAssets.BUTTON_CLICK_AUDIO.path, MenuAssets.BUTTON_CLICK_AUDIO.classType);
-        Texture lobbyListTexture = (Texture) assetManager.get(LobbyAssets.LOBBYLIST.path, LobbyAssets.LOBBYLIST.classType);
+
+        Image playerReady = new Image(assetManager.get(LobbyAssets.PLAYER_READY.path, Texture.class));
+        final Image playerReadyCheck = new Image((Texture) assetManager.get(LobbyAssets.PLAYER_READY_CHECK.path, Texture.class));
+
+        playerReadyCheckButton = new ImageButton(playerReadyCheck.getDrawable());
+        playerReadyCheckButton.setPosition(col_width*6, row_height*2);
+
+        backgroundImage = new Image(background);
 
         rocketImage = new Image(rocketTexture);
+        rocketImage.setSize(200, 270);
+        rocketImage.setPosition(Gdx.graphics.getWidth()/2+40, 370);
+        rocketImage.setOrigin(0,0);
+
         exhaustImage = new Image(exhaustTexture);
-        rocketImage.setPosition(col_width*8.5f, row_height*4f);
-        rocketImage.setSize(col_width*1, row_height*2.5f);
         exhaustImage.setSize(col_width*0.6f, row_height*2f);
         exhaustImage.setPosition(rocketImage.getX()+rocketImage.getWidth()/2-exhaustImage.getWidth()/2, rocketImage.getY()-exhaustImage.getHeight());
+        exhaustImage.setColor(1, 1, 1, 0);
 
-        lobbyListBubbleImage = new Image(lobbyListTexture);
-        lobbyListBubbleImage.setPosition(col_width*0.25f, row_height*5.5f);
-        backgroundImage = new Image(background);
+        lobbyListBubbleImage = new Image((Texture) assetManager.get(LobbyAssets.MR_SERVER_BUBBLE_SQUARE.path, LobbyAssets.MR_SERVER_BUBBLE_SQUARE.classType));
+
+        Texture mrServerAnim1 = (Texture) assetManager.get(LobbyAssets.MR_SERVER_ANIM1.path, LobbyAssets.MR_SERVER_ANIM1.classType);
+        Texture mrServerAnim2 = (Texture) assetManager.get(LobbyAssets.MR_SERVER_ANIM2.path, LobbyAssets.MR_SERVER_ANIM2.classType);
+        Texture mrServerAnim3 = (Texture) assetManager.get(LobbyAssets.MR_SERVER_ANIM3.path, LobbyAssets.MR_SERVER_ANIM3.classType);
+
+        ArrayList<Texture> mrServerAnimTextures= new ArrayList<>(Arrays.asList(mrServerAnim1, mrServerAnim2, mrServerAnim3));
+
+        mrServer = new PlayerAvatar( mrServerAnimTextures, (Texture) assetManager.get(LobbyAssets.MR_SERVER_PORTRAIT.path, LobbyAssets.MR_SERVER_PORTRAIT.classType), "Mr. Server");
+        mrServer.setScale(0.3f, 0.3f);
+        mrServer.setPosition(col_width*2, row_height*1);
+        mrServer.setOrigin(0, 0);
+
+        mrServerNameImage = new Image((Texture) assetManager.get(LobbyAssets.MR_SERVER_PORTRAIT.path, LobbyAssets.MR_SERVER_PORTRAIT.classType));
+
+        lobbyListBubbleImage = new Image((Texture) assetManager.get(LobbyAssets.MR_SERVER_BUBBLE_SQUARE.path, LobbyAssets.MR_SERVER_BUBBLE_SQUARE.classType));
+        lobbyListBubbleImage.setPosition(col_width*0.25f, row_height*4.5f);
+
+        lobbyListBubblePointerImage = new Image((Texture) assetManager.get(LobbyAssets.MR_SERVER_BUBBLE_POINTER.path, LobbyAssets.MR_SERVER_BUBBLE_POINTER.classType));
+        lobbyListBubblePointerImage.setPosition(lobbyListBubbleImage.getX()+lobbyListBubblePointerImage.getWidth()*1.25f, lobbyListBubbleImage.getY()-lobbyListBubblePointerImage.getHeight()+2);
 
         outputLabel = new Label("Press a Button",skin,"black");
         outputLabel.setSize(Gdx.graphics.getWidth(),row_height);
@@ -113,47 +144,48 @@ public class LobbyView extends View{
         outputLabel.setAlignment(Align.topLeft);
         outputLabel.setFontScale(2);
 
-        mrServerBubbleLabel = new Label("Hi, I am mr. Server. I allow creation and joining of lobby rooms.", skin,"black");
-        mrServerBubbleLabel.setSize(col_width*2.5f, row_height*3f);
-        mrServerBubbleLabel.setPosition(lobbyListBubbleImage.getX()+lobbyListBubbleImage.getWidth()*0.1f, row_height*8f);
-        mrServerBubbleLabel.setWrap(true);
-        mrServerBubbleLabel.setFontScale(2);
+        float xpad = col_width/2;
+        float ypad = row_height/2;
 
         createLobbyButton = new TextButton("Create Lobby",skin,"small");
-        createLobbyButton.setSize(col_width*1f,(float)(row_height*0.65));
-        createLobbyButton.setPosition(lobbyListBubbleImage.getX()+lobbyListBubbleImage.getWidth()*0.1f,lobbyListBubbleImage.getY()+lobbyListBubbleImage.getHeight()*0.125f+row_height*1);
+        createLobbyButton.setSize(col_width*1f,(float)(row_height*0.75));
+        createLobbyButton.setPosition(lobbyListBubbleImage.getX()+xpad,lobbyListBubbleImage.getY()+ypad);
 
         findLobbyButton = new TextButton("Find Lobby",skin,"small");
-        findLobbyButton.setSize(col_width*1f,(float)(row_height*0.65));
-        findLobbyButton.setPosition(lobbyListBubbleImage.getX()+lobbyListBubbleImage.getWidth()*0.6f,lobbyListBubbleImage.getY()+lobbyListBubbleImage.getHeight()*0.125f+row_height*1);
+        findLobbyButton.setSize(col_width*1f,(float)(row_height*0.75));
+        findLobbyButton.setPosition(lobbyListBubbleImage.getX()+lobbyListBubbleImage.getWidth()-findLobbyButton.getWidth()-xpad,lobbyListBubbleImage.getY()+ypad);
+
+        mrServerBubbleLabel = new Label("Hi, I am mr. Server. I allow creation and joining of lobby rooms.", skin,"black");
+        mrServerBubbleLabel.setSize(lobbyListBubbleImage.getWidth()-xpad*2, lobbyListBubbleImage.getHeight()-createLobbyButton.getY()-createLobbyButton.getHeight()-ypad*2);
+        mrServerBubbleLabel.setPosition(lobbyListBubbleImage.getX()+xpad, createLobbyButton.getY()+lobbyListBubbleImage.getHeight()-ypad*3);
+
+        mrServerBubbleLabel.setOrigin(0,0);
+        mrServerBubbleLabel.setWrap(true);
+        mrServerBubbleLabel.setFontScale(2);
 
         lobbyListRefreshButton = new TextButton("Refresh",skin,"small");
         lobbyListRefreshButton.setSize(col_width*1f,(float)(row_height*0.65));
-        lobbyListRefreshButton.setPosition(lobbyListBubbleImage.getX()+lobbyListBubbleImage.getWidth()*0.1f,lobbyListBubbleImage.getY()+lobbyListBubbleImage.getHeight()*0.125f+row_height*1);
+        lobbyListRefreshButton.setPosition(createLobbyButton.getX(), createLobbyButton.getY());
 
         lobbyRefreshButton = new TextButton("Refresh",skin,"small");
         lobbyRefreshButton.setSize(col_width*1f,(float)(row_height*0.65));
-        lobbyRefreshButton.setPosition(lobbyListBubbleImage.getX()+lobbyListBubbleImage.getWidth()*0.1f,lobbyListBubbleImage.getY()+lobbyListBubbleImage.getHeight()*0.125f+row_height*1);
+        lobbyRefreshButton.setPosition(createLobbyButton.getX(), createLobbyButton.getY());
 
         lobbyBackButton = new TextButton("Back",skin,"small");
         lobbyBackButton.setSize(col_width*1f,(float)(row_height*0.65));
-        lobbyBackButton.setPosition(lobbyListBubbleImage.getX()+lobbyListBubbleImage.getWidth()*0.6f,lobbyListBubbleImage.getY()+lobbyListBubbleImage.getHeight()*0.125f+row_height*1);
+        lobbyBackButton.setPosition(findLobbyButton.getX(), findLobbyButton.getY());
 
         lobbyListBackButton = new TextButton("Back",skin,"small");
         lobbyListBackButton.setSize(col_width*1f,(float)(row_height*0.65));
-        lobbyListBackButton.setPosition(lobbyListBubbleImage.getX()+lobbyListBubbleImage.getWidth()*0.6f,lobbyListBubbleImage.getY()+lobbyListBubbleImage.getHeight()*0.125f+row_height*1);
+        lobbyListBackButton.setPosition(findLobbyButton.getX(),findLobbyButton.getY());
 
         joinLobbyButton = new TextButton("Join Lobby",skin,"small");
         joinLobbyButton.setSize(col_width*1f,(float)(row_height*0.65));
-        joinLobbyButton.setPosition(lobbyListBubbleImage.getX()+lobbyListBubbleImage.getWidth()*0.6f,lobbyListBubbleImage.getY()+lobbyListBubbleImage.getHeight()*0.125f+row_height*2);
+        joinLobbyButton.setPosition(findLobbyButton.getX(), findLobbyButton.getY()+ypad+findLobbyButton.getHeight()/3);
 
         startLobbyButton = new TextButton("Start",skin,"small");
         startLobbyButton.setSize(col_width*1f,(float)(row_height*0.65));
-        startLobbyButton.setPosition(lobbyListBubbleImage.getX()+lobbyListBubbleImage.getWidth()*0.1f,lobbyListBubbleImage.getY()+lobbyListBubbleImage.getHeight()*0.125f+row_height*1);
-
-        setUserNameButton = new TextButton("Text Button",skin,"small");
-        setUserNameButton.setSize(col_width*2,(float)(row_height*0.5));
-        setUserNameButton.setPosition(col_width*5,Gdx.graphics.getHeight()-row_height*4);
+        startLobbyButton.setPosition(createLobbyButton.getX(), createLobbyButton.getY());
 
         lobbyCreateTextField = new TextField("", skin);
         lobbyCreateTextField.setMessageText("Enter lobby name.");
@@ -166,8 +198,8 @@ public class LobbyView extends View{
         lobbyCreateSizeSelectBox.setSize(lobbyListBackButton.getWidth(), lobbyListBackButton.getHeight());
 
         backgroundImage.setZIndex(1);
-        lobbyListBubbleImage.setZIndex(2);
-        outputLabel.setZIndex(3);
+        backgroundImage.setPosition(Gdx.graphics.getWidth()/2-backgroundImage.getWidth()/2, 0);
+        backgroundImage.setOrigin(0,0);
 
         stage.clear();
 
@@ -176,6 +208,7 @@ public class LobbyView extends View{
         stage.addActor(rocketImage);
         stage.addActor(exhaustImage);
         stage.addActor(lobbyListBubbleImage);
+        stage.addActor(lobbyListBubblePointerImage);
         mainUIActors.add(createLobbyButton);
         mainUIActors.add(findLobbyButton);
         mainUIActors.add(mrServerBubbleLabel);
@@ -203,6 +236,23 @@ public class LobbyView extends View{
                 outputLabel.setText("createLobbyButton");
             }
         });
+        playerReadyCheckButton.addListener(new InputListener(){
+            @Override
+            public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
+                return true;
+            }
+            @Override
+            public void touchUp (InputEvent event, float x, float y, int pointer, int button) {
+                buttonClickAudio.play(0.8f);
+                outputLabel.setText("Player Ready");
+                playerController.setLobbyPlayerReady(true);
+            }
+            @Override
+            public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) {
+                outputLabel.setText("playerReadyCheckButton");
+            }
+        });
+
         findLobbyButton.addListener(new InputListener(){
             @Override
             public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
@@ -286,6 +336,7 @@ public class LobbyView extends View{
                     playerController.leaveLobby(lobby.getID());
                 }
 
+
                 showMainLobbyWindow();
 
             }
@@ -497,9 +548,6 @@ public class LobbyView extends View{
         mainUIActors.add(lobbyListBackButton);
         mainUIActors.add(lobbyListRefreshButton);
         mainUIActors.add(joinLobbyButton);
-        joinLobbyButton.setPosition(col_width*4, row_height*3);
-        lobbyListRefreshButton.setY(row_height*3);
-        lobbyListBackButton.setY(row_height*3);
 
         for (Actor actor: mainUIActors){
             stage.addActor(actor);
@@ -507,6 +555,7 @@ public class LobbyView extends View{
         lobbyListRefresh();
     }
 
+
     float[] player1Pos = {col_width*3.75f, row_height*2};
     float[] player2Pos = {col_width*3.5f, row_height*1.5f};
 
@@ -516,35 +565,87 @@ public class LobbyView extends View{
     float[] player5Pos = {col_width*5, row_height*2};
     float[] player6Pos = {col_width*4.8f, row_height*1.5f};
 
+    float[] player7Pos = {col_width*5.7f, row_height*2};
+    float[] player8Pos = {col_width*5.5f, row_height*1.5f};
+
+    float[] player1LabelPos = {col_width*0.5f, row_height*9.8f};
+    float[] player2LabelPos = {col_width*0.5f, row_height*9.3f};
+
+    float[] player3LabelPos = {col_width*0.5f, row_height*8.8f};
+    float[] player4LabelPos = {col_width*0.5f, row_height*8.3f};
+
+    float[] player5LabelPos = {col_width*0.5f, row_height*7.8f};
+    float[] player6LabelPos = {col_width*0.5f, row_height*7.3f};
+
+    float[] player7LabelPos = {col_width*0.5f, row_height*6.8f};
+    float[] player8LabelPos = {col_width*0.5f, row_height*6.3f};
+
     private Lobby lobby;
     private ArrayList<Player> playersInLobby;
-    ArrayList<float[]> playerPositions= new ArrayList<>(Arrays.asList(player1Pos, player2Pos, player3Pos, player4Pos, player5Pos, player6Pos));;
+    ArrayList<float[]> playerPositions= new ArrayList<>(Arrays.asList(player1Pos, player2Pos, player3Pos, player4Pos, player5Pos, player6Pos, player7Pos, player8Pos));;
+    ArrayList<float[]> playerLabelPositions= new ArrayList<>(Arrays.asList(player1LabelPos, player2LabelPos, player3LabelPos, player4LabelPos, player5LabelPos, player6LabelPos, player7LabelPos, player8LabelPos));;
 
     private final ArrayList<PlayerAvatar> availableAvatars;
     private ArrayList<PlayerAvatar> lobbyAvatars = new ArrayList<>();
 
+    private ArrayList<Image> playerReadyImages = new ArrayList<>();
+    private ArrayList<Label> lobbyLabels= new ArrayList<>();
+
     private void lobbyRefresh(){
-        if(playerController.getLobby() == null) {
-            System.out.println("Error during lobby refresh: not in a lobby");
+        if(playerController.getLobby().getID() == -1) {
+            System.out.println("Player currently not in lobby.");
         }
         else{
             lobbyAvatars.clear();
             lobby = playerController.getLobby();
             playersInLobby = lobby.getPlayers();
+
+            if(lobby.getID() == -1 || playerController.getPlayer().getIsPlayerReady()) playerReadyCheckButton.remove();
+            else stage.addActor(playerReadyCheckButton);
+
+            for (Label label : lobbyLabels) label.remove();
+            for (Image image : playerReadyImages) image.remove();
             //System.out.println("My avatar Index: "+ playerController.getPlayer().getIndexAvatar());
             //System.out.println("Number of players in lobby: "+ lobby.getPlayers().size());
-
+            //System.out.printf(">Current Lobby Size:\t%d\n", lobby.getPlayers().size());
             for(int i = 0; i<playersInLobby.size(); i++){
-                //System.out.println("This players ID: "+ playersInLobby.get(i).getID() + " avatarIndex: "+ playersInLobby.get(i).getIndexAvatar());
-                PlayerAvatar pa = availableAvatars.get(playersInLobby.get(i).getIndexAvatar());
-                pa.setScale(0.3f, 0.3f);
-                pa.setOrigin(0, 0);
-                pa.setPosition(playerPositions.get(i)[0], playerPositions.get(i)[1]);
-                lobbyAvatars.add(pa);
+                Player player = playersInLobby.get(i);
+                //System.out.printf("   >PlayerName:%s\tID:%d\n", player.getPlayerName(), player.getID());
+                PlayerAvatar playerAvatar =availableAvatars.get(player.getIndexAvatar());
+
+                playerAvatar.setScale(0.3f, 0.3f);
+                playerAvatar.setOrigin(0, 0);
+                playerAvatar.setPosition(playerPositions.get(i)[0], playerPositions.get(i)[1]);
+                lobbyAvatars.add(playerAvatar);
+
+                Label label = new Label("Player"+i+":\t%d" + player.getPlayerName() + "\t", skin, "black");
+                label.setColor(1, 0, 0, 1);
+                label.scaleBy(1.5f);
+                label.setPosition(playerLabelPositions.get(i)[0], playerLabelPositions.get(i)[1]);
+
+                lobbyLabels.add(label);
+
+                if(player.getIsPlayerReady()) {
+                    Image image = new Image(assetManager.get(LobbyAssets.PLAYER_READY.path, Texture.class));
+                    image.setPosition(label.getX()+image.getWidth()+col_width*1f, label.getY()-image.getHeight()/2+label.getHeight()/2);
+                    playerReadyImages.add(image);
+
+                    //System.out.println("ready???");
+                }
+                else{
+                    System.out.println("Player is not ready..");
+                }
+
+                stage.addActor(lobbyLabels.get(i));
+            }
+            for (Image image : playerReadyImages){
+                stage.addActor(image);
             }
         }
     }
 
+
+
     private void showLobbyWindow(){
         clearActors();
         mainUIActors.add(lobbyBackButton);
@@ -554,6 +655,7 @@ public class LobbyView extends View{
             stage.addActor(actor);
         }
     }
+
     private void showMainLobbyWindow(){
         clearActors();
         mainUIActors.add(createLobbyButton);
@@ -573,6 +675,7 @@ public class LobbyView extends View{
         sound.dispose();
          */
     }
+
     @Override
     public void handleInput() {
         if(Gdx.input.isTouched()) {
@@ -581,14 +684,51 @@ public class LobbyView extends View{
         }
     }
 
+    @Override
+    public void render(float dt) {
+        Gdx.gl.glClearColor(1, 1, 1, 1);
+
+        stage.draw();
+        stage.getBatch().begin();
+        for(PlayerAvatar playerAvatar : lobbyAvatars){
+            if(updateAvatarTimer>= updateAvatarFrequency){
+                playerAvatar.updateTexture();
+            }
+            playerAvatar.draw(stage.getBatch());
+        }
+        if(updateAvatarTimer>= updateAvatarFrequency){
+            mrServer.updateTexture();
+            updateAvatarTimer=0;
+        }
+
+        mrServer.draw(stage.getBatch());
+        stage.getBatch().end();
+
+        if(playerController.getLobby().getLobbyGameStarted()){
+            if(whiteImage.getStage() != stage){
+                stage.addActor(whiteImage);
+            }
+            whiteImage.setZIndex(1000);
+            whiteImage.setColor(1, 1, 1, alphaFadeValue);
+            alphaFadeValue += dt/(fadeTransitionLength*3);
+            if(alphaFadeValue >= 1){
+                stage.clear();
+                stage.addActor(whiteImage);
+                gvm.set(new LobbyPlayTransitionScreen(gvm, playerController, assetManager, stage, skin, availableAvatars));
+            }
+        }
+
+        drawGrid();
+    }
+
     float updateAvatarTimer = 0;
     float updateAvatarFrequency = 0.120f; //update every 250ms
     float refreshLobbyTimer = 1;
 
-    @Override
-    public void render(float dt) {
-        Gdx.gl.glClearColor(1, 1, 1, 1);
 
+
+    @Override
+    public void update(float dt) {
         updateAvatarTimer+= dt;
 
         if(refreshLobbyTimer >= 1) {
@@ -607,27 +747,9 @@ public class LobbyView extends View{
                 whiteImage.setZIndex(0);
             }
         }
-        else if(startRocketTransition){
+        stage.act(dt);
+
 
-        }
-        stage.draw();
-        stage.getBatch().begin();
-        for(PlayerAvatar playerAvatar : lobbyAvatars){
-            if(updateAvatarTimer>= updateAvatarFrequency){
-                playerAvatar.updateTexture();
-            }
-            playerAvatar.draw(stage.getBatch());
-        }
-        if(updateAvatarTimer>= updateAvatarFrequency){
-            updateAvatarTimer=0;
-        }
-        stage.getBatch().end();
-        drawGrid();
-    }
 
-    @Override
-    public void update(float dt) {
-        stage.act(dt);
-        handleInput();
     }
 }
diff --git a/CheckersClient/core/src/com/mygdx/game/views/MenuView.java b/CheckersClient/core/src/com/mygdx/game/views/MenuView.java
index 3051fb3e375e2b59fb2341ae3cf61b583c60efa6..a42b7b3256d0114e8756509bbe90c8d107596027 100644
--- a/CheckersClient/core/src/com/mygdx/game/views/MenuView.java
+++ b/CheckersClient/core/src/com/mygdx/game/views/MenuView.java
@@ -21,7 +21,6 @@ import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
 import com.badlogic.gdx.scenes.scene2d.ui.TextField;
 import com.badlogic.gdx.scenes.scene2d.utils.Drawable;
 import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;
-import com.badlogic.gdx.utils.Align;
 import com.mygdx.game.controllers.PlayerController;
 import com.mygdx.game.views.enums.CharacterAssets;
 import com.mygdx.game.views.enums.LobbyAssets;
@@ -39,6 +38,7 @@ public class MenuView extends View{
     private Button formButton;
 
     private Image backgroundImage;
+    private Image logoImage;
     private Image formImage;
     private Image connectionBarImage;
     private Image connectionBarGreenCircle;
@@ -81,22 +81,23 @@ public class MenuView extends View{
         }
         shapeRenderer = new ShapeRenderer(); // Used for draw debugging
 
-        background = (Texture) assetManager.get(MenuAssets.BACKGROUND.path, MenuAssets.BACKGROUND.classType);
-        this.backgroundImage = new Image (background);
+        this.backgroundImage = new Image ((Texture) assetManager.get(MenuAssets.BACKGROUND.path, MenuAssets.BACKGROUND.classType));
+        backgroundImage.setPosition(Gdx.graphics.getWidth()/2-backgroundImage.getWidth()/2, 0);
+        backgroundImage.setOrigin(0,0);
 
-        backgroundImage.setPosition(col_width*6-backgroundImage.getWidth()/2, row_height*6-backgroundImage.getHeight()/2);
-
-        form = (Texture) assetManager.get(MenuAssets.FORM.path, MenuAssets.FORM.classType);
-
-        this.formImage = new Image(form);
-        formImage.setPosition(col_width*5, row_height*5);
-        formImage.setAlign((Align.center));
+        formImage = new Image((Texture) assetManager.get(MenuAssets.FORM.path, MenuAssets.FORM.classType));
+        formImage.setPosition(col_width*6-formImage.getWidth()/2, row_height*0.15f);
+        formImage.setOrigin(0, 0);
 
         formButtonTex = (Texture) assetManager.get(MenuAssets.FORM_BUTTON.path, MenuAssets.FORM_BUTTON.classType);
         music = Gdx.audio.newMusic(Gdx.files.internal(MenuAssets.LOOP_AUDIO.path));
         buttonClickAudio = (Sound) assetManager.get(MenuAssets.BUTTON_CLICK_AUDIO.path, MenuAssets.BUTTON_CLICK_AUDIO.classType);
         transitionAudio = (Sound) assetManager.get(MenuAssets.TRANSITION_AUDIO.path, MenuAssets.TRANSITION_AUDIO.classType);
 
+        logoImage = new Image((Texture) assetManager.get(MenuAssets.LOGO.path, MenuAssets.LOGO.classType));
+        logoImage.setPosition(col_width*6-logoImage.getWidth()/2, row_height*11.75f-logoImage.getHeight());
+        logoImage.setOrigin(0,0);
+
         outputLabel = new Label("Press a Button",skin,"black");
         outputLabel.setSize(Gdx.graphics.getWidth(),row_height);
         outputLabel.setPosition(col_width*0.5f,row_height*10);
@@ -104,13 +105,12 @@ public class MenuView extends View{
 
         usernameTextField = new TextField("", skin);
         usernameTextField.setMessageText("Your name ..");
-        usernameTextField.setSize(col_width*2, row_height*1);
-        usernameTextField.setPosition(col_width*5-usernameTextField.getMaxWidth(),row_height*8.15f-usernameTextField.getMaxHeight()/2);
+        usernameTextField.setSize(formImage.getWidth()*0.75f, row_height*1);
+        usernameTextField.setPosition(formImage.getX()+formImage.getWidth()/2-usernameTextField.getWidth()/2,formImage.getHeight()*0.75f);
+        usernameTextField.setOrigin(0,0);
 
         formButton = new TextButton("Enter",skin,"default");
-        formButton.setPosition(col_width*6-formButton.getWidth()/2,row_height*2.25f-formButton.getHeight()/2);
-
-        formImage.setPosition(col_width*6-formImage.getWidth()/2, row_height*6-formImage.getHeight()/2);
+        formButton.setPosition(formImage.getX()+formImage.getWidth()/2 -formButton.getWidth()/2,formImage.getHeight()*0.08f);
 
         Pixmap tablePixmap = new Pixmap(1,1, Pixmap.Format.RGB565);
         tablePixmap.setColor(1, 1, 1, 1);
@@ -144,10 +144,10 @@ public class MenuView extends View{
         PlayerAvatar grandmaAvatar = new PlayerAvatar(anim_tex_arr, portrait, "Grandma");
         availableAvatars.add(grandmaAvatar);
 
-        anim_tex_1 = assetManager.get(CharacterAssets.HIGHSCHOOL_GUY_ANIM_FRAME1.path, Texture.class);
-        anim_tex_2 = assetManager.get(CharacterAssets.HIGHSCHOOL_GUY_ANIM_FRAME2.path, Texture.class);
-        anim_tex_3 = assetManager.get(CharacterAssets.HIGHSCHOOL_GUY_ANIM_FRAME3.path, Texture.class);
-        portrait = assetManager.get(CharacterAssets.HIGHSCHOOL_GUY_PORTRAIT.path, Texture.class);
+        anim_tex_1 = assetManager.get(CharacterAssets.HIGH_SCHOOL_GUY_ANIM_FRAME1.path, Texture.class);
+        anim_tex_2 = assetManager.get(CharacterAssets.HIGH_SCHOOL_GUY_ANIM_FRAME2.path, Texture.class);
+        anim_tex_3 = assetManager.get(CharacterAssets.HIGH_SCHOOL_GUY_ANIM_FRAME3.path, Texture.class);
+        portrait = assetManager.get(CharacterAssets.HIGH_SCHOOL_GUY_PORTRAIT.path, Texture.class);
         anim_tex_arr = new ArrayList<>(Arrays.asList(anim_tex_1, anim_tex_2, anim_tex_3));
         PlayerAvatar highSchoolGuy = new PlayerAvatar(anim_tex_arr, portrait, "High School Guy");
         availableAvatars.add(highSchoolGuy);
@@ -237,6 +237,7 @@ public class MenuView extends View{
                     transitionAudio.play(0.50f);
                     startFadeFromBlankToWhite = true;
                     whiteImage.setZIndex(stage.getActors().size);
+                    playerController.playerSetName(usernameTextField.getText());
                     playerController.updateIndexAvatar(currentIndexAvatar);
                 }
                 return true;
@@ -254,8 +255,7 @@ public class MenuView extends View{
             public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) {
                 buttonClickAudio.play(0.8f);
                 if(usernameTextField.getText().isEmpty()){
-                    playerController.getPlayer().setPlayerName(usernameTextField.getText());
-                    outputLabel.setText("");
+                    outputLabel.setText(usernameTextField.getText());
                 }
             }
         });
@@ -269,6 +269,7 @@ public class MenuView extends View{
         stage.addActor(nextAvatarButton);
         stage.addActor(previousAvatarButton);
         stage.addActor(avatarPortraitImage);
+        stage.addActor(logoImage);
         stage.addActor(whiteImage);
     }
 
diff --git a/CheckersClient/core/src/com/mygdx/game/views/PlayView.java b/CheckersClient/core/src/com/mygdx/game/views/PlayView.java
index 0f227b949019ce0edccbd1bbb6e76db496fc6877..da6a209dd969ff3db0f8ee918cdfc521688fbf21 100644
--- a/CheckersClient/core/src/com/mygdx/game/views/PlayView.java
+++ b/CheckersClient/core/src/com/mygdx/game/views/PlayView.java
@@ -10,27 +10,19 @@ import com.badlogic.gdx.graphics.g2d.SpriteBatch;
 import com.badlogic.gdx.scenes.scene2d.Stage;
 import com.badlogic.gdx.scenes.scene2d.ui.Skin;
 import com.mygdx.game.controllers.PlayerController;
+import com.mygdx.game.views.tokens.PlayerAvatar;
+
+import java.util.ArrayList;
 
 
 public class PlayView extends View{
 
     private Texture background;
-    private Sound gameLoop;
-    private Sound transitionFX;
-
-    BitmapFont font;
 
-    protected PlayView(GameViewManager gvm, PlayerController playerController, AssetManager assetManager, Stage stage, Skin skin) {
+    protected PlayView(GameViewManager gvm, PlayerController playerController, AssetManager assetManager, Stage stage, Skin skin, ArrayList<PlayerAvatar> availableAvatars) {
         super(gvm, playerController, assetManager, stage, skin);
         background = new Texture ("Game/GameBoard/1x/GameBoard@1x.png");
 
-        font = new BitmapFont();
-
-        gameLoop = Gdx.audio.newSound(Gdx.files.internal("Game/Audio/GameLoop.mp3"));
-        transitionFX= Gdx.audio.newSound(Gdx.files.internal("Game/Audio/TransitionFX.mp3"));
-        transitionFX.play();
-        gameLoop.loop(0.6f);
-
     }
 
     @Override
@@ -57,21 +49,19 @@ public class PlayView extends View{
 
     @Override
     public void render(float dt) {
+        stage.getBatch().begin();
+        stage.getBatch().draw(background, 0, 0);
+        stage.getBatch().end();
         stage.draw();
+
     }
 
     private void debugDraw(SpriteBatch sb, String text, int xPos, int yPos){
-        font.draw(sb, text, xPos, yPos);
+
     }
 
     @Override
     public void dispose() {
-        /* DISPOSE OBJECTS
-        for (Object ob: objects){
-              ob.dispose();
-
-        }
-        */
 
     }
 }
diff --git a/CheckersClient/core/src/com/mygdx/game/views/View.java b/CheckersClient/core/src/com/mygdx/game/views/View.java
index 36018df802ea679bbc9c3fe2c24326a063b962a4..2e105e327ff4817c7ec0835c213df68fff64903a 100644
--- a/CheckersClient/core/src/com/mygdx/game/views/View.java
+++ b/CheckersClient/core/src/com/mygdx/game/views/View.java
@@ -19,6 +19,7 @@ public abstract class View extends ApplicationAdapter {
     protected final Stage stage;
     protected Skin skin;
 
+    public final int gridStep = 1920/20;
     public final int Help_Guides = 12;
     public final int row_height = Gdx.graphics.getHeight() / Help_Guides;
     public final int col_width = Gdx.graphics.getWidth() / Help_Guides;
diff --git a/CheckersClient/core/src/com/mygdx/game/views/enums/CharacterAssets.java b/CheckersClient/core/src/com/mygdx/game/views/enums/CharacterAssets.java
index faa815eedbc5537d6efecfd5fe59f6f9342646a0..a74887a922a1347499eab794f4053267a64bca37 100644
--- a/CheckersClient/core/src/com/mygdx/game/views/enums/CharacterAssets.java
+++ b/CheckersClient/core/src/com/mygdx/game/views/enums/CharacterAssets.java
@@ -14,10 +14,10 @@ public enum CharacterAssets {
     GRANDMA_ANIM_FRAME3("characters/Grandma3@1x.png", Texture.class),
     GRANDMA_PORTRAIT("characters/GrandmaPortrait@1x.png", Texture.class),
 
-    HIGHSCHOOL_GUY_ANIM_FRAME1("characters/HighSchoolGuy1@1x.png", Texture.class),
-    HIGHSCHOOL_GUY_ANIM_FRAME2("characters/HighSchoolGuy2@1x.png", Texture.class),
-    HIGHSCHOOL_GUY_ANIM_FRAME3("characters/HighSchoolGuy3@1x.png", Texture.class),
-    HIGHSCHOOL_GUY_PORTRAIT("characters/HighSchoolGuyPortrait@1x.png", Texture.class),
+    HIGH_SCHOOL_GUY_ANIM_FRAME1("characters/HighSchoolGuy1@1x.png", Texture.class),
+    HIGH_SCHOOL_GUY_ANIM_FRAME2("characters/HighSchoolGuy2@1x.png", Texture.class),
+    HIGH_SCHOOL_GUY_ANIM_FRAME3("characters/HighSchoolGuy3@1x.png", Texture.class),
+    HIGH_SCHOOL_GUY_PORTRAIT("characters/HighSchoolGuyPortrait@1x.png", Texture.class),
 
     HIPSTER_GIRL_ANIM_FRAME1("characters/HipsterGirl1@1x.png", Texture.class),
     HIPSTER_GIRL_ANIM_FRAME2("characters/HipsterGirl2@1x.png", Texture.class),
diff --git a/CheckersClient/core/src/com/mygdx/game/views/enums/LobbyAssets.java b/CheckersClient/core/src/com/mygdx/game/views/enums/LobbyAssets.java
index b57ecc40aaef0f875cee6bee3121418c80356f26..ce7bae67a250e495de30d1f8bf799b78d727a655 100644
--- a/CheckersClient/core/src/com/mygdx/game/views/enums/LobbyAssets.java
+++ b/CheckersClient/core/src/com/mygdx/game/views/enums/LobbyAssets.java
@@ -4,10 +4,20 @@ import com.badlogic.gdx.graphics.Texture;
 
 public enum LobbyAssets {
 
-    LOBBYLIST("Menu/1x/LobbyList.png", Texture.class),
+    LOBBY_LIST("Menu/1x/LobbyList.png", Texture.class),
     BACKGROUND("Menu/1x/LobbyMenu@1x.png", Texture.class),
+    LOBBY("Menu/1x/MrServer.png", Texture.class),
+    MR_SERVER_ANIM1("characters/MrServer1@1x.png", Texture.class),
+    MR_SERVER_ANIM2("characters/MrServer2@1x.png", Texture.class),
+    MR_SERVER_ANIM3("characters/MrServer3@1x.png", Texture.class),
+    MR_SERVER_PORTRAIT("characters/MrServerPortrait@1x.png", Texture.class),
+    MR_SERVER_NAME("characters/MrServerName.png", Texture.class),
+    MR_SERVER_BUBBLE_SQUARE("Menu/1x/MrServerBubbleSquare.png", Texture.class),
+    MR_SERVER_BUBBLE_POINTER("Menu/1x/MrServerBubblePointer.png", Texture.class),
     ROCKET("Menu/1x/Rocket_Main@1x.png", Texture.class),
-    ROCKETEXHAUST("Menu/1x/Rocket_Exhaust@1x.png", Texture.class);
+    ROCKET_EXHAUST("Menu/1x/Rocket_Exhaust@1x.png", Texture.class),
+    PLAYER_READY_CHECK("Menu/1x/PlayerReadyCheck.png", Texture.class),
+    PLAYER_READY("Menu/1x/PlayerReady.png", Texture.class);
 
     public final String path;
     public final Class classType;
diff --git a/CheckersClient/core/src/com/mygdx/game/views/enums/MenuAssets.java b/CheckersClient/core/src/com/mygdx/game/views/enums/MenuAssets.java
index 3a6f241eebaffbb325068a599752ef4778f7f175..b79d542d1923f1744e840df10ef23516aaf7a8de 100644
--- a/CheckersClient/core/src/com/mygdx/game/views/enums/MenuAssets.java
+++ b/CheckersClient/core/src/com/mygdx/game/views/enums/MenuAssets.java
@@ -8,6 +8,7 @@ import com.badlogic.gdx.graphics.g2d.BitmapFont;
 public enum MenuAssets {
     FORM_BUTTON("Menu/1x/FormButton.png", Texture.class),
     BACKGROUND("Menu/1x/MainMenu@1x.png", Texture.class),
+    LOGO("Menu/1x/SpaceCheckersLogoWithBackground.png", Texture.class),
     FORM("Menu/1x/MainMenuForm.png", Texture.class),
     LOOP_AUDIO("Menu/MenuLoop.mp3",Sound .class),
     BUTTON_CLICK_AUDIO("Menu/ButtonClick1.mp3",Sound .class),
diff --git a/CheckersServer/.idea/caches/build_file_checksums.ser b/CheckersServer/.idea/caches/build_file_checksums.ser
index 480a5d2f508b4aad98032d39a6cb4fff257b0c33..47d0d86c7d85efaa967a18f7352fc5005063ac72 100644
Binary files a/CheckersServer/.idea/caches/build_file_checksums.ser and b/CheckersServer/.idea/caches/build_file_checksums.ser differ
diff --git a/CheckersServer/.idea/libraries/Gradle__CheckersServer_desktop_desktop_1_0.xml b/CheckersServer/.idea/libraries/Gradle__CheckersServer_desktop_desktop_1_0.xml
deleted file mode 100644
index 369215da594e454a7837187b554b3dc8ecc711ec..0000000000000000000000000000000000000000
--- a/CheckersServer/.idea/libraries/Gradle__CheckersServer_desktop_desktop_1_0.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<component name="libraryTable">
-  <library name="Gradle: CheckersServer.desktop.desktop-1.0">
-    <CLASSES>
-      <root url="jar://$PROJECT_DIR$/desktop/build/libs/desktop-1.0.jar!/" />
-    </CLASSES>
-    <JAVADOC />
-    <SOURCES />
-  </library>
-</component>
\ No newline at end of file
diff --git a/CheckersServer/.idea/libraries/Gradle__org_javatuples_javatuples_1_2.xml b/CheckersServer/.idea/libraries/Gradle__org_javatuples_javatuples_1_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..791ccad4fc6da6b6e176aa2a55444318bfcaf3dd
--- /dev/null
+++ b/CheckersServer/.idea/libraries/Gradle__org_javatuples_javatuples_1_2.xml
@@ -0,0 +1,11 @@
+<component name="libraryTable">
+  <library name="Gradle: org.javatuples:javatuples:1.2">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.javatuples/javatuples/1.2/507312ac4b601204a72a83380badbca82683dd36/javatuples-1.2.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.javatuples/javatuples/1.2/a7495f5370bdfcf46c6f3c6ed0badf52877aa467/javatuples-1.2-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/CheckersServer/build.gradle b/CheckersServer/build.gradle
index 5c2215da91e6b1acf38c9b87f66c340d43d3d0f7..d8825f555768b1081e122ce6ce88fda6c4bd8591 100644
--- a/CheckersServer/build.gradle
+++ b/CheckersServer/build.gradle
@@ -12,9 +12,6 @@ buildscript {
     dependencies {
         classpath 'com.android.tools.build:gradle:4.1.3'
         classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
-
-
-
     }
 }
 
@@ -53,6 +50,7 @@ project(":desktop") {
         api "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
 
         implementation group: "com.esotericsoftware", name: 'kryonet', version: "2.22.0-RC1"
+        implementation group: "org.javatuples", name: 'javatuples', version: "1.2"
     }
 }
 
@@ -79,6 +77,7 @@ project(":android") {
         api "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
 
         implementation group: "com.esotericsoftware", name: 'kryonet', version: "2.22.0-RC1"
+        implementation group: "org.javatuples", name: 'javatuples', version: "1.2"
     }
 }
 
@@ -92,5 +91,6 @@ project(":core") {
         api "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
 
         implementation group: "com.esotericsoftware", name: 'kryonet', version: "2.22.0-RC1"
+        implementation group: "org.javatuples", name: 'javatuples', version: "1.2"
     }
 }
diff --git a/CheckersServer/core/src/com/mygdx/game/controller/NetworkController.java b/CheckersServer/core/src/com/mygdx/game/controller/NetworkController.java
index 7174984c8e015d874b989531b7d3c32cfd258eed..fc3b72f22cdb075d7788ae99ebf6552bf4be237d 100644
--- a/CheckersServer/core/src/com/mygdx/game/controller/NetworkController.java
+++ b/CheckersServer/core/src/com/mygdx/game/controller/NetworkController.java
@@ -155,6 +155,9 @@ public class NetworkController {
         kryo.register(cLobbyDelete.class, 23);
         kryo.register(cLobbyGetList.class, 24);
         kryo.register(cSetIndexAvatar.class, 25);
+        kryo.register(cSetPlayerReady.class, 26);
+        kryo.register(cSetPlayerName.class, 27);
+        kryo.register(cStartGame.class, 28);
     }
 
     public NetworkController getNetworkController() { return this; }
diff --git a/CheckersServer/core/src/com/mygdx/game/controller/commands/cSetPlayerName.java b/CheckersServer/core/src/com/mygdx/game/controller/commands/cSetPlayerName.java
new file mode 100644
index 0000000000000000000000000000000000000000..323be48847559289ea56bd005f016e208f8dbd27
--- /dev/null
+++ b/CheckersServer/core/src/com/mygdx/game/controller/commands/cSetPlayerName.java
@@ -0,0 +1,27 @@
+package com.mygdx.game.controller.commands;
+
+import com.esotericsoftware.kryonet.Connection;
+import com.mygdx.game.controller.NetworkController;
+import com.mygdx.game.model.Lobby;
+import com.mygdx.game.model.Player;
+
+import org.javatuples.Pair;
+
+public class cSetPlayerName extends Command{
+
+    public cSetPlayerName() { super("cLobbyJoin"); }
+
+    public cSetPlayerName(String name) {
+        super("cLobbyJoin", name);
+    }
+
+    @Override
+    public void execute(NetworkController net, Connection connection){
+        if(data instanceof String){
+            String name = (String) data;
+            net.getPlayer(connection.getID()).setPlayerName(name);
+            connection.sendTCP(this);
+            System.out.printf("Player name is updated. %s \n", name);
+        }
+    }
+}
\ No newline at end of file
diff --git a/CheckersServer/core/src/com/mygdx/game/controller/commands/cSetPlayerReady.java b/CheckersServer/core/src/com/mygdx/game/controller/commands/cSetPlayerReady.java
new file mode 100644
index 0000000000000000000000000000000000000000..eb793ad0742c6e7f9473a98834db1876a8c5c7a7
--- /dev/null
+++ b/CheckersServer/core/src/com/mygdx/game/controller/commands/cSetPlayerReady.java
@@ -0,0 +1,46 @@
+package com.mygdx.game.controller.commands;
+
+import com.esotericsoftware.kryonet.Connection;
+import com.mygdx.game.controller.NetworkController;
+import com.mygdx.game.model.Lobby;
+
+public class cSetPlayerReady extends Command{
+
+    public cSetPlayerReady() { super("cSetPlayerReady"); }
+
+    private int lobbyID;
+    private int playerID;
+
+    public cSetPlayerReady(boolean isPlayerReady, int lobbyID) {
+        super("cSetPlayerReady", isPlayerReady);
+        this.lobbyID = lobbyID;
+        this.playerID = playerID;
+    }
+
+    public cSetPlayerReady(boolean isPlayerReady, int lobbyID, int playerID) {
+        super("cSetPlayerReady", isPlayerReady);
+        this.lobbyID = lobbyID;
+        this.playerID = playerID;
+    }
+
+    @Override
+    public void execute(NetworkController net, Connection connection){
+        if(data instanceof Boolean){
+            boolean isPlayerReady = (Boolean) data;
+            net.getPlayer(connection.getID()).setIsPlayerReady(isPlayerReady);
+            Lobby lobby = net.getLobby(lobbyID);
+
+            for (Connection c : net.getConnections(lobby)) {
+                c.sendTCP(new cSetPlayerReady(isPlayerReady, lobbyID, connection.getID()));
+            }
+
+            if(lobby.isFullAndReady()){
+                for (Connection c : net.getConnections(lobby)) {
+                    c.sendTCP(new cStartGame());
+                }
+                System.out.printf("Lobby %b is about to start. \n", lobbyID);
+            }
+            System.out.printf("Player status updated. Is player %d currently ready? %b \n", playerID, isPlayerReady);
+        }
+    }
+}
\ No newline at end of file
diff --git a/CheckersServer/core/src/com/mygdx/game/controller/commands/cStartGame.java b/CheckersServer/core/src/com/mygdx/game/controller/commands/cStartGame.java
new file mode 100644
index 0000000000000000000000000000000000000000..0b907c8dfca301ccf82f729926856a99d7f9ddb4
--- /dev/null
+++ b/CheckersServer/core/src/com/mygdx/game/controller/commands/cStartGame.java
@@ -0,0 +1,17 @@
+package com.mygdx.game.controller.commands;
+
+import com.esotericsoftware.kryonet.Connection;
+import com.mygdx.game.controller.NetworkController;
+import com.mygdx.game.model.Lobby;
+
+public class cStartGame extends Command{
+
+    public cStartGame() { super("cStartGame"); }
+
+    public cStartGame(int id) { super("cStartGame", (Integer) id); }
+
+    @Override
+    public void execute(NetworkController net, Connection connection){
+
+    }
+}
diff --git a/CheckersServer/core/src/com/mygdx/game/model/Lobby.java b/CheckersServer/core/src/com/mygdx/game/model/Lobby.java
index 57eb0c96655bf2236e828692b88130fc4000b314..3f57299d1d5b51f93ca1f0e7bcda01d757db90d9 100644
--- a/CheckersServer/core/src/com/mygdx/game/model/Lobby.java
+++ b/CheckersServer/core/src/com/mygdx/game/model/Lobby.java
@@ -50,8 +50,42 @@ public class Lobby {
         return set;
     }
 
+    public Player getPlayerByID(int playerID){
+
+        Player returnPlayer = null;
+
+        for (Player player : players){
+            if (player.getID() == playerID) returnPlayer = player;
+        }
+
+        return returnPlayer;
+    }
+
+    public ArrayList<Player> getPlayers(){
+        return players;
+    }
+
     public int getPlayersCount(){ return players.size(); }
 
+    public boolean isFullAndReady(){
+        if(MAX_PLAYERS == getPlayersCount()){
+            for(Player player : players){
+                if(!player.getIsPlayerReady()) {
+                    System.out.println("This should run only once.");
+                    return false;
+                }
+            }
+            System.out.println("This should run a few times.");
+            return true;
+        }
+        else{
+            System.out.println("This should many times.");
+            return false;
+        }
+
+
+    }
+
     @Override
     public boolean equals(Object o) {
         if (this == o) return true;
diff --git a/CheckersServer/core/src/com/mygdx/game/model/Player.java b/CheckersServer/core/src/com/mygdx/game/model/Player.java
index 2797bc0136acc153b84b08f80ef547ddf9e8b8fe..4d983c30a153da076fdf5657e701a2152c556863 100644
--- a/CheckersServer/core/src/com/mygdx/game/model/Player.java
+++ b/CheckersServer/core/src/com/mygdx/game/model/Player.java
@@ -5,6 +5,7 @@ public class Player {
     private int ID;
     private int indexAvatar;
     private String playerName;
+    private boolean isPlayerReady;
 
     public Player(){}
 
@@ -43,4 +44,16 @@ public class Player {
     public void setPlayerName(String playerName) {
         this.playerName = playerName;
     }
+
+    public String getPlayerName(){
+        return this.playerName;
+    }
+
+    public void setIsPlayerReady(boolean isPlayerReady) {
+        this.isPlayerReady = isPlayerReady;
+    }
+
+    public boolean getIsPlayerReady(){
+        return this.isPlayerReady;
+    }
 }