diff --git a/CheckersClient/android/assets/Menu/1x/LobbyMenu@1x.png b/CheckersClient/android/assets/Menu/1x/LobbyMenu@1x.png
index e5846c8fca429429a70b90dcf4fd953a5fd9e8d5..801e3b7e3db2427537eb4beab9860b2a712bb35c 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/core/src/com/mygdx/game/UniCheckersClient.java b/CheckersClient/core/src/com/mygdx/game/UniCheckersClient.java
index ee5065b4828f3b9dea012ad197d337e91c0aadbf..77a1e5f99db3805b181021587ee6e54b00f8fb56 100644
--- a/CheckersClient/core/src/com/mygdx/game/UniCheckersClient.java
+++ b/CheckersClient/core/src/com/mygdx/game/UniCheckersClient.java
@@ -36,8 +36,6 @@ public class UniCheckersClient extends ApplicationAdapter {
 	public void create () {
 		Gdx.gl.glClearColor(1, 1, 1, 1);
 
-
-
 		viewport = new FitViewport(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
 		stage = new Stage(viewport);
 		Gdx.input.setInputProcessor(stage);
@@ -64,8 +62,12 @@ public class UniCheckersClient extends ApplicationAdapter {
 		Gdx.gl.glClearColor(1, 1, 1, 1);
 		Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
 		float dt = Gdx.graphics.getDeltaTime();
-		gvm.update(dt); //updates view
+		gvm.handleInput(dt);
+		gvm.update(dt);
 		gvm.render(dt);
+
+		if(gvm.getStartFadeIn() && !gvm.getStartFadeOut()) gvm.fadeIn(dt);
+		else if(gvm.getStartFadeOut() && !gvm.getStartFadeIn()) gvm.fadeOut(dt);
 	}
 
 }
diff --git a/CheckersClient/core/src/com/mygdx/game/views/GameViewManager.java b/CheckersClient/core/src/com/mygdx/game/views/GameViewManager.java
index f24c0d27f8ed6dd91872f34f0ea5ef2f1f7c9fe9..154bbc33b5977f585b3de67d398512e8e13f08db 100644
--- a/CheckersClient/core/src/com/mygdx/game/views/GameViewManager.java
+++ b/CheckersClient/core/src/com/mygdx/game/views/GameViewManager.java
@@ -1,9 +1,6 @@
 package com.mygdx.game.views;
 
 
-import com.badlogic.gdx.graphics.g2d.SpriteBatch;
-import com.badlogic.gdx.scenes.scene2d.Stage;
-
 import java.util.Stack;
 
 public class GameViewManager {
@@ -27,6 +24,10 @@ public class GameViewManager {
         views.push(view);
     }
 
+    public void handleInput(float dt){
+        views.peek().handleInput(dt);
+    }
+
     public void update(float dt){
         views.peek().update(dt);
     }
@@ -35,4 +36,20 @@ public class GameViewManager {
         views.peek().render(dt);
     }
 
+    public void fadeIn(float dt){
+        views.peek().fadeIn(dt);
+    }
+
+    public void fadeOut(float dt){
+        views.peek().fadeOut(dt);
+    }
+
+    public boolean getStartFadeIn(){
+        return views.peek().getStartFadeIn();
+    }
+
+    public boolean getStartFadeOut(){
+        return views.peek().getStartFadeOut();
+    }
+
 }
diff --git a/CheckersClient/core/src/com/mygdx/game/views/LoadingView.java b/CheckersClient/core/src/com/mygdx/game/views/LoadingView.java
index b6cfdeae4b4d09d3a1c012b8e1af10247557281f..b2fb3310a276b52120e5c734d11b2054bf593da1 100644
--- a/CheckersClient/core/src/com/mygdx/game/views/LoadingView.java
+++ b/CheckersClient/core/src/com/mygdx/game/views/LoadingView.java
@@ -1,6 +1,7 @@
 package com.mygdx.game.views;
 
 import com.badlogic.gdx.assets.AssetManager;
+import com.badlogic.gdx.graphics.Color;
 import com.badlogic.gdx.graphics.Texture;
 import com.badlogic.gdx.math.MathUtils;
 import com.badlogic.gdx.scenes.scene2d.Stage;
@@ -18,8 +19,6 @@ public class LoadingView extends View {
     private Image loadingBarFillImage = new Image(new Texture("Loading/LoadingBarFill.png"));
     private Image loadingBarBorderImage = new Image(new Texture("Loading/LoadingBarBorder.png"));
     private Image loadingBarBackgroundImage = new Image(new Texture("Loading/LoadingBarBackground.png"));
-    private float animationLoopTimer;
-    private float animationSpeedTimer;
 
     public LoadingView(GameViewManager gvm, PlayerController playerController, AssetManager assetManager, Stage stage, Skin skin) {
         super(gvm, playerController, assetManager, stage, skin);
@@ -45,15 +44,14 @@ public class LoadingView extends View {
     }
 
     @Override
-    protected void handleInput() {
+    public void handleInput(float dt) {
 
     }
 
     @Override
     public void update(float dt) {
         if(assetManager.update()){
-            stage.clear();
-            gvm.set(new MenuView(gvm, playerController, assetManager, stage, skin));
+            startFadeout = true;
         }
         else{
             loadingBarFillImage.setWidth(assetManager.getProgress()*loadingBarBackgroundImage.getWidth());
@@ -65,9 +63,39 @@ public class LoadingView extends View {
         stage.draw();
     }
 
+    @Override
+    public void fadeIn(float dt) {
+        stage.getBatch().begin();
+        Color c = Color.WHITE;
+        stage.getBatch().setColor(c.r, c.g, c.b, fadeInAlpha);
+        fadeInAlpha -= dt/fadeInLength;
+        stage.getBatch().draw(fadeOverlayTexture, 0, 0, col_width*Help_Guides, row_height*Help_Guides);
+        //stage.getBatch().setColor(c);
+        stage.getBatch().end();
+
+        if(fadeInAlpha <= 0){
+            startFadeIn = false;
+        }
+    }
+
+    @Override
+    public void fadeOut(float dt) {
+        stage.getBatch().begin();
+        Color c = Color.WHITE;
+        stage.getBatch().setColor(c.r, c.g, c.b, fadeOutAlpha);
+        fadeOutAlpha += dt/fadeOutLength;
+        stage.getBatch().draw(fadeOverlayTexture, 0, 0, col_width*Help_Guides, row_height*Help_Guides);
+        stage.getBatch().setColor(c);
+        stage.getBatch().end();
+        if(fadeOutAlpha >= 1){
+            stage.clear();
+            startFadeout = false;
+            gvm.set(new MenuView(gvm, playerController, assetManager, stage, skin));
+        }
+    }
+
     @Override
     public void dispose() {
-        // background.dispose();
-        //playBtn.dispose();
+        stage.dispose();
     }
 }
diff --git a/CheckersClient/core/src/com/mygdx/game/views/LobbyPlayTransitionScreen.java b/CheckersClient/core/src/com/mygdx/game/views/LobbyPlayTransitionScreen.java
index 73d52a8464bc5a6fab1c89855eabb0f03d7b759f..0b65397d8c7696fe14eac2083baf4e74cddf5407 100644
--- a/CheckersClient/core/src/com/mygdx/game/views/LobbyPlayTransitionScreen.java
+++ b/CheckersClient/core/src/com/mygdx/game/views/LobbyPlayTransitionScreen.java
@@ -4,6 +4,7 @@ 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.Color;
 import com.badlogic.gdx.graphics.Texture;
 import com.badlogic.gdx.graphics.g2d.BitmapFont;
 import com.badlogic.gdx.graphics.g2d.SpriteBatch;
@@ -26,6 +27,7 @@ public class LobbyPlayTransitionScreen extends View{
     private Image whiteImage;
     private Image exhaustImage;
     private Image backgroundImage;
+    private ArrayList<PlayerAvatar> availableAvatars;
 
     protected LobbyPlayTransitionScreen(GameViewManager gvm, PlayerController playerController, AssetManager assetManager, Stage stage, Skin skin, ArrayList<PlayerAvatar> availableAvatars) {
         super(gvm, playerController, assetManager, stage, skin);
@@ -33,6 +35,7 @@ public class LobbyPlayTransitionScreen extends View{
         rocketTexture = (Texture) assetManager.get(LobbyAssets.ROCKET.path, LobbyAssets.ROCKET.classType);
         exhaustTexture = (Texture) assetManager.get(LobbyAssets.ROCKET_EXHAUST.path, LobbyAssets.ROCKET_EXHAUST.classType);
 
+        this.availableAvatars = availableAvatars;
         backgroundImage = new Image(background);
         rocketImage = new Image(rocketTexture);
         rocketImage.setSize(200, 270);
@@ -44,28 +47,19 @@ public class LobbyPlayTransitionScreen extends View{
         exhaustImage.setPosition(rocketImage.getX()+rocketImage.getWidth()/2-exhaustImage.getWidth()/2, rocketImage.getY()-exhaustImage.getHeight());
         exhaustImage.setColor(1, 1, 1, 0);
 
+        setFadeColor(Color.BLACK);
         stage.addActor(backgroundImage);
     }
 
-    @Override
-    protected void handleInput() {
-        if(Gdx.input.isKeyPressed(Input.Keys.ESCAPE)){
 
-        }
-    }
+    @Override
+    public void handleInput(float dt) {
 
-    private void isGameOver(){
-        boolean someCondition = false;
-        if (someCondition){
-            Gdx.app.exit();
-        }
     }
 
     @Override
     public void update(float dt) {
         stage.act(dt);
-        isGameOver();
-        handleInput();
     }
 
 
@@ -75,15 +69,41 @@ public class LobbyPlayTransitionScreen extends View{
         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 fadeIn(float dt) {
+        stage.getBatch().begin();
+        Color c = stage.getBatch().getColor();
+        stage.getBatch().setColor(c.r, c.g, c.b, fadeOutAlpha);
+        fadeInAlpha -= dt/fadeInLength;
+        stage.getBatch().draw(fadeOverlayTexture, 0, 0, col_width*Help_Guides, row_height*Help_Guides);
+        stage.getBatch().setColor(c);
+        stage.getBatch().end();
 
+        if(fadeInAlpha <= 0){
+            startFadeIn = false;
+        }
     }
 
     @Override
-    public void dispose() {
+    public void fadeOut(float dt) {
+        stage.getBatch().begin();
+        Color c = stage.getBatch().getColor();
+        stage.getBatch().setColor(c.r, c.g, c.b, fadeOutAlpha);
+        fadeOutAlpha += dt/fadeOutLength;
+        stage.getBatch().draw(fadeOverlayTexture, 0, 0, col_width*Help_Guides, row_height*Help_Guides);
+        stage.getBatch().setColor(c);
+        stage.getBatch().end();
+        if(fadeOutAlpha >= 1){
+            stage.clear();
+            startFadeout = false;
+            gvm.set(new PlayView(gvm, playerController, assetManager, stage, skin, availableAvatars));
+        }
+    }
 
+    @Override
+    public void dispose() {
+        stage.dispose();
     }
 }
diff --git a/CheckersClient/core/src/com/mygdx/game/views/LobbyView.java b/CheckersClient/core/src/com/mygdx/game/views/LobbyView.java
index ba3e6dabac5767a52f4a996fe07098aa3c3261c7..c4ab7b9b318f2fdbcfd022b7fc8c832a3254a577 100644
--- a/CheckersClient/core/src/com/mygdx/game/views/LobbyView.java
+++ b/CheckersClient/core/src/com/mygdx/game/views/LobbyView.java
@@ -1,15 +1,20 @@
 package com.mygdx.game.views;
 
 import com.badlogic.gdx.Gdx;
+import com.badlogic.gdx.Input;
+import com.badlogic.gdx.InputProcessor;
 import com.badlogic.gdx.assets.AssetManager;
 import com.badlogic.gdx.audio.Sound;
-import com.badlogic.gdx.graphics.Pixmap;
+import com.badlogic.gdx.graphics.Camera;
+import com.badlogic.gdx.graphics.Color;
 import com.badlogic.gdx.graphics.Texture;
-import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
+import com.badlogic.gdx.math.MathUtils;
+import com.badlogic.gdx.math.Vector2;
 import com.badlogic.gdx.scenes.scene2d.Actor;
 import com.badlogic.gdx.scenes.scene2d.InputEvent;
 import com.badlogic.gdx.scenes.scene2d.InputListener;
 import com.badlogic.gdx.scenes.scene2d.Stage;
+import com.badlogic.gdx.scenes.scene2d.Touchable;
 import com.badlogic.gdx.scenes.scene2d.ui.Button;
 import com.badlogic.gdx.scenes.scene2d.ui.Image;
 import com.badlogic.gdx.scenes.scene2d.ui.ImageButton;
@@ -18,9 +23,9 @@ import com.badlogic.gdx.scenes.scene2d.ui.List;
 import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane;
 import com.badlogic.gdx.scenes.scene2d.ui.SelectBox;
 import com.badlogic.gdx.scenes.scene2d.ui.Skin;
-import com.badlogic.gdx.scenes.scene2d.ui.Table;
 import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
 import com.badlogic.gdx.scenes.scene2d.ui.TextField;
+import com.badlogic.gdx.scenes.scene2d.ui.Touchpad;
 import com.badlogic.gdx.utils.Align;
 
 import com.mygdx.game.controllers.PlayerController;
@@ -36,14 +41,7 @@ import java.util.HashMap;
 
 public class LobbyView extends View{
 
-    private final ArrayList<Actor> mainUIActors = new ArrayList<>();
-    private ScrollPane scroller;
-    private Table lobbyTable;
-
-    private boolean fadingToBlank = true;
-    private boolean fadeOut = true;
-    private boolean startFadeFromWhiteToBlank;
-    private boolean startRocketTransition;
+    private final ArrayList<Actor> playerUIWidgets = new ArrayList<>();
 
     private Button createLobbyButton;
     private Button findLobbyButton;
@@ -54,8 +52,9 @@ public class LobbyView extends View{
     private Button lobbyListBackButton;
     private Button startLobbyButton;
 
-    private float fadeTransitionLength = 1f;
-    private float alphaFadeValue = 1;
+    private float updateAvatarTimer = 0;
+    private float updateAvatarFrequency = 0.120f; //update every 250ms
+    private float refreshLobbyTimer = 1;
 
     private Image backgroundImage;
     private PlayerAvatar mrServer;
@@ -64,56 +63,54 @@ public class LobbyView extends View{
     private Image lobbyListBubbleImage;
     private Image lobbyListBubblePointerImage;
     private Image rocketImage;
-    private Image whiteImage;
 
     private Label mrServerBubbleLabel;
     private Label outputLabel;
 
     private Sound buttonClickAudio;
 
-    private Texture background;
-    private Texture rocketTexture;
-    private Texture exhaustTexture;
-
     private TextField lobbyCreateTextField;
 
-    private Image playerReady;
+    private Camera camera;
+
     private ImageButton playerReadyCheckButton;
 
     private SelectBox<Integer> lobbyCreateSizeSelectBox;
-    private ShapeRenderer shapeRenderer;
+
+    private ScrollPane scrollPane;
+    private List<String> lobbyListStrings;
+    private HashMap<String, Integer> getLobbyByStringHashMap;
+
+    private Image lobbyImage;
+
+    private final ArrayList<PlayerAvatar> availableAvatars;
+    private ArrayList<PlayerAvatar> lobbyAvatars = new ArrayList<>();
+
+    private ArrayList<Image> playerReadyImages = new ArrayList<>();
+    private ArrayList<Label> lobbyLabels= new ArrayList<>();
+
 
     public LobbyView(GameViewManager gvm, final PlayerController playerController, AssetManager assetManager, final Stage stage, Skin skin, ArrayList<PlayerAvatar> availableAvatars) {
         super(gvm, playerController, assetManager, stage, skin);
 
         this.availableAvatars = availableAvatars;
 
-        Pixmap tablePixmap = new Pixmap(1,1, Pixmap.Format.RGB565);
-        tablePixmap.setColor(1, 1, 1, 1);
-        tablePixmap.fill();
-        whiteImage = new Image(new Texture(tablePixmap));
-
-        startFadeFromWhiteToBlank = true;
-
-        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);
         buttonClickAudio = (Sound) assetManager.get(MenuAssets.BUTTON_CLICK_AUDIO.path, MenuAssets.BUTTON_CLICK_AUDIO.classType);
+        this.camera = stage.getCamera();
 
-        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));
-
+        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);
+        backgroundImage = new Image((Texture) assetManager.get(LobbyAssets.BACKGROUND.path, LobbyAssets.BACKGROUND.classType));
+        stage.getViewport().setWorldSize(backgroundImage.getWidth(), backgroundImage.getHeight());
 
-        rocketImage = new Image(rocketTexture);
+        rocketImage = new Image((Texture) assetManager.get(LobbyAssets.ROCKET.path, LobbyAssets.ROCKET.classType));
         rocketImage.setSize(200, 270);
         rocketImage.setPosition(Gdx.graphics.getWidth()/2+40, 370);
         rocketImage.setOrigin(0,0);
 
-        exhaustImage = new Image(exhaustTexture);
+        exhaustImage = new Image((Texture) assetManager.get(LobbyAssets.ROCKET_EXHAUST.path, LobbyAssets.ROCKET_EXHAUST.classType));
         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);
@@ -127,14 +124,23 @@ public class LobbyView extends View{
         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));
+        //mrServer.setPosition(247.5426f, 1 );
+
+        mrServer.scale(-0.63f);
+        mrServer.setOrigin(0,0 );
+        mrServer.setOriginBasedPosition(190, 1);
+
+
+        mrServerNameImage = new Image((Texture) assetManager.get(LobbyAssets.MR_SERVER_NAME.path, LobbyAssets.MR_SERVER_NAME.classType));
+        mrServerNameImage.setPosition(180+mrServerNameImage.getWidth()/2, 360);
+
+        lobbyImage = new Image((Texture) assetManager.get(LobbyAssets.LOBBY.path, LobbyAssets.LOBBY.classType));
+        lobbyImage.setPosition(774, 4320-4127.6141f);
 
-        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);
+        lobbyListBubbleImage = new Image((Texture) assetManager.get(LobbyAssets.MR_SERVER_BUBBLE_SQUARE.path, LobbyAssets.MR_SERVER_BUBBLE_SQUARE.classType));
+        lobbyListBubbleImage.setPosition(col_width*0.1f, row_height*4.75f);
 
         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);
@@ -145,9 +151,6 @@ public class LobbyView extends View{
         outputLabel.setAlignment(Align.topLeft);
         outputLabel.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.75));
         createLobbyButton.setPosition(lobbyListBubbleImage.getX()+xpad,lobbyListBubbleImage.getY()+ypad);
@@ -199,27 +202,25 @@ public class LobbyView extends View{
         lobbyCreateSizeSelectBox.setSize(lobbyListBackButton.getWidth(), lobbyListBackButton.getHeight());
 
         backgroundImage.setZIndex(1);
-        backgroundImage.setPosition(Gdx.graphics.getWidth()/2-backgroundImage.getWidth()/2, 0);
+        //backgroundImage.setPosition(Gdx.graphics.getWidth()/2-backgroundImage.getWidth()/2, 0);
         backgroundImage.setOrigin(0,0);
 
-        stage.clear();
-
         stage.addActor(backgroundImage);
         stage.addActor(outputLabel);
         stage.addActor(rocketImage);
         stage.addActor(exhaustImage);
+        stage.addActor(lobbyImage);
         stage.addActor(lobbyListBubbleImage);
         stage.addActor(lobbyListBubblePointerImage);
-        mainUIActors.add(createLobbyButton);
-        mainUIActors.add(findLobbyButton);
-        mainUIActors.add(mrServerBubbleLabel);
-        for (Actor actor: mainUIActors){
-            stage.addActor(actor);
+        stage.addActor(mrServerNameImage);
+
+        playerUIWidgets.add(createLobbyButton);
+        playerUIWidgets.add(findLobbyButton);
+        playerUIWidgets.add(mrServerBubbleLabel);
+        for (Actor widget: playerUIWidgets){
+            stage.addActor(widget);
         }
         stage.addActor(outputLabel); // OutputLabel for debugging purposes
-        whiteImage.setSize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
-        whiteImage.setPosition(0,0);
-        stage.addActor(whiteImage);
 
         createLobbyButton.addListener(new InputListener(){
             @Override
@@ -279,6 +280,7 @@ public class LobbyView extends View{
                 buttonClickAudio.play(0.8f);
                 Gdx.input.setOnscreenKeyboardVisible(false);
                 stage.unfocusAll();
+                Lobby lobby = playerController.getLobby();
                 try{
                     if(lobby.getPlayers().size() == 1){
                         playerController.deleteLobby(lobby.getID());
@@ -290,7 +292,6 @@ public class LobbyView extends View{
                 }catch(NullPointerException e){
 
                 }
-
                 showMainLobbyWindow();
             }
             @Override
@@ -326,14 +327,16 @@ public class LobbyView extends View{
                 Gdx.input.setOnscreenKeyboardVisible(false);
                 stage.unfocusAll();
 
-                if(playerController.getLobby() == null){System.out.println("NOT FINDING A LOBBY");}
+                Lobby lobby = playerController.getLobby();
 
-                if(playerController.getLobby().getPlayers().size() == 1){
-                    System.out.println("Deleting lobby " + playerController.getLobby().getName());
+                if(lobby.getID() == -1){System.out.println("Currently not in a lobby.");}
+
+                if(lobby.getPlayers().size() == 1){
+                    System.out.println("Deleting lobby " + lobby.getName());
                     playerController.deleteLobby(lobby.getID());
                 }
                 else{
-                    System.out.println("Leaving lobby " + playerController.getLobby().getName());
+                    System.out.println("Leaving lobby " + lobby.getName());
                     playerController.leaveLobby(lobby.getID());
                 }
 
@@ -457,30 +460,12 @@ public class LobbyView extends View{
         });
     }
 
-    private void clearActors(){
-        for (Actor actor: mainUIActors){
-            actor.remove();
+    private void clearUIWidgets(){
+        for (Actor widget: playerUIWidgets){
+            widget.remove();
         }
-        mainUIActors.clear();
-
+        playerUIWidgets.clear();
     }
-    private void drawGrid(){
-        if(shapeRenderer == null){
-            shapeRenderer = new ShapeRenderer();
-        }
-        shapeRenderer.begin(ShapeRenderer.ShapeType.Line);
-        shapeRenderer.setColor(1, 0, 0, 0.75f); // Red line
-        for (int i = 0; i < 12; i++) {
-            shapeRenderer.rect(col_width*i, 0, 1, Gdx.graphics.getHeight());
-            shapeRenderer.rect(0, row_height*i, Gdx.graphics.getWidth(), 1);
-        }
-        shapeRenderer.end();
-    }
-
-    private ScrollPane scrollPane;
-    private volatile ArrayList<Lobby> currentLobbyList;
-    private List<String> lobbyListStrings;
-    private HashMap<String, Integer> getLobbyByStringHashMap;
 
     public void lobbyListRefresh(){
         Thread thread = new Thread(){
@@ -488,7 +473,7 @@ public class LobbyView extends View{
                 playerController.setLobbies(null);
                 playerController.lobbyGetList();
                 while (playerController.getLastCommand() == null) {
-                    System.out.println("Waiting for lobby" + currentLobbyList);
+                    System.out.println("Waiting for lobby list .. ");
                 }
                 ArrayList<Lobby> lobbyList = playerController.getLobbyList();
                 System.out.println("Lobby loaded " + lobbyList + " Number of available lobbies are " + lobbyList.size());
@@ -496,8 +481,8 @@ public class LobbyView extends View{
                 //System.out.println("LobbyCount AFTER NUM OF PLAYERS" + lobbyList.get(0).getPlayers().size());
 
                 lobbyListStrings = new List(skin, "plain");
-                lobbyListStrings.setColor(1f, 1f, 1f, 1);
-                currentLobbyList = playerController.getLobbyList();
+                lobbyListStrings.setColor(Color.BLACK);
+                ArrayList<Lobby> currentLobbyList = playerController.getLobbyList();
                 String[] strings;
 
                 if(getLobbyByStringHashMap == null) getLobbyByStringHashMap = new HashMap<>();
@@ -524,8 +509,8 @@ public class LobbyView extends View{
                 scrollPane.setSmoothScrolling(false);
                 scrollPane.setTransform(true);
 
-                mainUIActors.add(scrollPane);
-                for (Actor actor: mainUIActors){
+                playerUIWidgets.add(scrollPane);
+                for (Actor actor: playerUIWidgets){
                     stage.addActor(actor);
                 }
             }
@@ -533,23 +518,23 @@ public class LobbyView extends View{
         thread.start();
     }
     private void showCreateLobbyWindow(){
-        clearActors();
-        mainUIActors.add(lobbyListBackButton);
-        mainUIActors.add(lobbyCreateTextField);
-        mainUIActors.add(lobbyCreateSizeSelectBox);
-        mainUIActors.add(startLobbyButton);
+        clearUIWidgets();
+        playerUIWidgets.add(lobbyListBackButton);
+        playerUIWidgets.add(lobbyCreateTextField);
+        playerUIWidgets.add(lobbyCreateSizeSelectBox);
+        playerUIWidgets.add(startLobbyButton);
         lobbyListBackButton.setY(startLobbyButton.getY());
-        for (Actor actor: mainUIActors){
+        for (Actor actor: playerUIWidgets){
             stage.addActor(actor);
         }
     }
     private void showLobbyListWindow(){
-        clearActors();
-        mainUIActors.add(lobbyListBackButton);
-        mainUIActors.add(lobbyListRefreshButton);
-        mainUIActors.add(joinLobbyButton);
+        clearUIWidgets();
+        playerUIWidgets.add(lobbyListBackButton);
+        playerUIWidgets.add(lobbyListRefreshButton);
+        playerUIWidgets.add(joinLobbyButton);
 
-        for (Actor actor: mainUIActors){
+        for (Actor actor: playerUIWidgets){
             stage.addActor(actor);
         }
         lobbyListRefresh();
@@ -579,16 +564,8 @@ public class LobbyView extends View{
     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, 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<>();
+    ArrayList<float[]> playerLabelPositions= new ArrayList<>(Arrays.asList(player1LabelPos, player2LabelPos, player3LabelPos, player4LabelPos, player5LabelPos, player6LabelPos, player7LabelPos, player8LabelPos));
 
     private void lobbyRefresh(){
         if(playerController.getLobby().getID() == -1) {
@@ -596,31 +573,27 @@ public class LobbyView extends View{
         }
         else{
             lobbyAvatars.clear();
-            lobby = playerController.getLobby();
-            playersInLobby = lobby.getPlayers();
+            Lobby lobby = playerController.getLobby();
 
             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++){
-                Player player = playersInLobby.get(i);
-                //System.out.printf("   >PlayerName:%s\tID:%d\n", player.getPlayerName(), player.getID());
-                PlayerAvatar playerAvatar =availableAvatars.get(player.getIndexAvatar());
 
+            for(int i = 0; i<lobby.getPlayers().size(); i++){
+                Player player = lobby.getPlayers().get(i);
+
+                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]);
+                label.setColor(Color.BLACK);
+                label.scaleBy(2f);
+                label.setPosition(lobbyListBubbleImage.getX()+xpad, lobbyListBubbleImage.getY()+lobbyListBubbleImage.getHeight()*(0.9f-label.getHeight()*i-i*0.05f));
 
                 lobbyLabels.add(label);
 
@@ -644,43 +617,30 @@ public class LobbyView extends View{
     }
 
 
-
     private void showLobbyWindow(){
-        clearActors();
-        mainUIActors.add(lobbyBackButton);
-        mainUIActors.add(lobbyRefreshButton);
+        clearUIWidgets();
+        playerUIWidgets.add(lobbyBackButton);
+        playerUIWidgets.add(lobbyRefreshButton);
 
-        for (Actor actor: mainUIActors){
+        for (Actor actor: playerUIWidgets){
             stage.addActor(actor);
         }
     }
 
     private void showMainLobbyWindow(){
-        clearActors();
-        mainUIActors.add(createLobbyButton);
-        mainUIActors.add(findLobbyButton);
-        mainUIActors.add(mrServerBubbleLabel);
+        clearUIWidgets();
+        playerUIWidgets.add(createLobbyButton);
+        playerUIWidgets.add(findLobbyButton);
+        playerUIWidgets.add(mrServerBubbleLabel);
 
-        for (Actor actor: mainUIActors){
+        for (Actor actor: playerUIWidgets){
             stage.addActor(actor);
         }
     }
 
     @Override
     public void dispose() {
-        /*
-        background.dispose();
-        menuForm.dispose();
-        sound.dispose();
-         */
-    }
-
-    @Override
-    public void handleInput() {
-        if(Gdx.input.isTouched()) {
-            int x = Gdx.input.getX();
-            int y = Gdx.input.getY();
-        }
+        stage.dispose();
     }
 
     @Override
@@ -689,66 +649,102 @@ public class LobbyView extends View{
 
         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();
+    }
+
+    @Override
+    public void fadeIn(float dt) {
+        stage.getBatch().begin();
+        Color c = stage.getBatch().getColor();
+        stage.getBatch().setColor(c.r, c.g, c.b, fadeInAlpha);
+        fadeInAlpha -= dt/fadeInLength;
+        stage.getBatch().draw(fadeOverlayTexture, 0, 0, col_width*Help_Guides, row_height*Help_Guides);
+        stage.getBatch().setColor(c);
+        stage.getBatch().end();
+
+        if(fadeInAlpha <= 0){
+            startFadeIn = false;
         }
+    }
 
-        drawGrid();
+    @Override
+    public void fadeOut(float dt) {
+        stage.getBatch().begin();
+        Color c = stage.getBatch().getColor();
+        stage.getBatch().setColor(c.r, c.g, c.b, fadeOutAlpha);
+        fadeOutAlpha += dt/fadeOutLength;
+        stage.getBatch().draw(fadeOverlayTexture, 0, 0, col_width*Help_Guides, row_height*Help_Guides);
+        stage.getBatch().setColor(c);
+        stage.getBatch().end();
+        if(fadeOutAlpha >= 1){
+            stage.clear();
+            startFadeout = false;
+            setFadeColor(Color.BLACK);
+            gvm.set(new LobbyPlayTransitionScreen(gvm, playerController, assetManager, stage, skin, availableAvatars));
+        }
     }
 
-    float updateAvatarTimer = 0;
-    float updateAvatarFrequency = 0.120f; //update every 250ms
-    float refreshLobbyTimer = 1;
+    boolean isDragging = false;
+    float sensitivity = 0.1f;
+
+    @Override
+    public void handleInput(float dt) {
+        if(Gdx.input.justTouched()){
+            lastTouch[0] = Gdx.input.getX();
+            lastTouch[1] = stage.getViewport().getScreenHeight()-Gdx.input.getY();
+            System.out.println("Only once");
+        }
+        if(Gdx.input.isTouched()){
+
+            float camXPos = camera.position.x + (lastTouch[0]-Gdx.input.getX())*sensitivity; //camera.position.x + (Gdx.input.getX()-lastTouch[0])*sensitivity;
+            float camYPos = camera.position.y + (-stage.getViewport().getScreenHeight()+Gdx.input.getY()+lastTouch[1])*sensitivity;
+
+            float a = MathUtils.clamp(camXPos, camera.viewportWidth/2, backgroundImage.getWidth()-camera.viewportWidth/2);
+            float b = MathUtils.clamp(camYPos, camera.viewportHeight/2, backgroundImage.getImageHeight()-camera.viewportHeight/2);
+
+            camera.position.set(a, b, 0);
+            System.out.println("Multiple times");
+        }
+    }
 
 
 
     @Override
     public void update(float dt) {
+        stage.getCamera().update();
+
+
         updateAvatarTimer+= dt;
+        refreshLobbyTimer += dt;
+
+        if(updateAvatarTimer>= updateAvatarFrequency){
+            for(PlayerAvatar playerAvatar : lobbyAvatars){
+                playerAvatar.updateTexture();
+            }
+            mrServer.updateTexture();
+            updateAvatarTimer=0;
+        }
 
         if(refreshLobbyTimer >= 1) {
             lobbyRefresh();
             refreshLobbyTimer=0;
         }
-        else {
-            refreshLobbyTimer += dt;
-        }
 
-        if(startFadeFromWhiteToBlank){
-            whiteImage.setColor(1, 1, 1, alphaFadeValue);
-            alphaFadeValue -= dt/fadeTransitionLength;
-            if(alphaFadeValue <= 0){
-                startFadeFromWhiteToBlank = false;
-                whiteImage.setZIndex(0);
-            }
-        }
+
         stage.act(dt);
 
+        if(playerController.getLobby().getLobbyGameStarted()){
+            startFadeout = true;
+        }
+    }
 
 
-    }
 }
diff --git a/CheckersClient/core/src/com/mygdx/game/views/MenuView.java b/CheckersClient/core/src/com/mygdx/game/views/MenuView.java
index a42b7b3256d0114e8756509bbe90c8d107596027..ed1fe94c0d30038f8f15639b7ae81f504f06d0ba 100644
--- a/CheckersClient/core/src/com/mygdx/game/views/MenuView.java
+++ b/CheckersClient/core/src/com/mygdx/game/views/MenuView.java
@@ -4,6 +4,7 @@ import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.assets.AssetManager;
 import com.badlogic.gdx.audio.Music;
 import com.badlogic.gdx.audio.Sound;
+import com.badlogic.gdx.graphics.Color;
 import com.badlogic.gdx.graphics.Pixmap;
 import com.badlogic.gdx.graphics.Texture;
 import com.badlogic.gdx.graphics.g2d.TextureRegion;
@@ -46,27 +47,19 @@ public class MenuView extends View{
 
     private Music music;
 
-    private ShapeRenderer shapeRenderer;
-
     private Sound buttonClickAudio;
     private Sound transitionAudio;
 
-    private Texture background;
-    private Texture form;
     private Texture formButtonTex;
 
     private TextField usernameTextField;
 
     private Label outputLabel;
-    private Image whiteImage;
-    private float fadeTransitionLength = 1f;
-    private float alphaFadeValue = 1;
 
 
     private ImageButton nextAvatarButton;
     private ImageButton previousAvatarButton;
     private Image avatarPortraitImage;
-    private String currentAvatar;
 
 
     private ArrayList<PlayerAvatar> availableAvatars;
@@ -112,13 +105,6 @@ public class MenuView extends View{
         formButton = new TextButton("Enter",skin,"default");
         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);
-        tablePixmap.fill();
-        whiteImage = new Image(new Texture(tablePixmap));
-        whiteImage.setSize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
-        whiteImage.setPosition(0,0);
-
         startFadeFromBlankToWhite = false;
         startFadeFromWhiteToBlank = true;
 
@@ -209,7 +195,6 @@ public class MenuView extends View{
                     currentIndexAvatar -= 1;
                 }
                 updateAvatarPortrait();
-                outputLabel.setText("PREV AVATAR: current avatar is: " + currentAvatar);
                 return true;
             }
 
@@ -232,13 +217,15 @@ public class MenuView extends View{
         formButton.addListener(new InputListener(){
             @Override
             public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
-                if(!usernameTextField.equals("Your name ..")){
+                if(!usernameTextField.getText().isEmpty() && usernameTextField.getText().length() >=3 && usernameTextField.getText().length() <= 10){
                     buttonClickAudio.play(0.70f);
                     transitionAudio.play(0.50f);
-                    startFadeFromBlankToWhite = true;
-                    whiteImage.setZIndex(stage.getActors().size);
                     playerController.playerSetName(usernameTextField.getText());
                     playerController.updateIndexAvatar(currentIndexAvatar);
+                    startFadeout = true;
+                }
+                else{
+                    outputLabel.setText("Please enter a valid name. Has to be between 3 and 10 characters.");
                 }
                 return true;
             }
@@ -270,7 +257,11 @@ public class MenuView extends View{
         stage.addActor(previousAvatarButton);
         stage.addActor(avatarPortraitImage);
         stage.addActor(logoImage);
-        stage.addActor(whiteImage);
+    }
+
+    @Override
+    public void handleInput(float dt) {
+
     }
 
     private void updateAvatarPortrait(){
@@ -278,67 +269,60 @@ public class MenuView extends View{
         avatarPortraitImage.setDrawable(portraitDrawable);
     }
 
-    @Override
-    public void handleInput() {
-
-    }
-
 
     @Override
     public void update(float dt) {
         assetManager.update();
         stage.act(dt);
-        handleInput();
     }
 
     @Override
     public void render(float dt) {
         Gdx.gl.glClearColor(1, 1, 1, 1);
-        if(startFadeFromWhiteToBlank){
-            whiteImage.setColor(1, 1, 1, alphaFadeValue);
-            alphaFadeValue -= dt/(fadeTransitionLength)/0.5;
-            outputLabel.setText("alphaFadeValue: " +alphaFadeValue);
-            if(alphaFadeValue <= 0){
-                startFadeFromWhiteToBlank = false;
-                whiteImage.setZIndex(0);
-            }
-        }
-        else if(startFadeFromBlankToWhite){
-            whiteImage.setColor(1, 1, 1, alphaFadeValue);
-            alphaFadeValue += dt/fadeTransitionLength;
-            outputLabel.setText("alphaFadeValue: " +alphaFadeValue);
-            if(alphaFadeValue >= 1){
-                startFadeFromBlankToWhite = false;
-                gvm.push(new LobbyView(gvm, playerController, assetManager, stage, skin, availableAvatars));
-            }
-        }
 
         if(playerController.getPlayer().getID() != -1){
             stage.addActor(connectionBarGreenCircle);
             connectionBarRedCircle.remove();
         }
+
         stage.draw();
         drawGrid();
     }
 
     @Override
-    public void dispose() {
-        /*
-        background.dispose();
-<<<<<<< HEAD
-        menuForm.dispose();
-        sound.dispose();
-         */
+    public void fadeIn(float dt) {
+        stage.getBatch().begin();
+        Color c = Color.WHITE;
+        stage.getBatch().setColor(c.r, c.g, c.b, fadeInAlpha);
+        fadeInAlpha -= dt/fadeInLength;
+        stage.getBatch().draw(fadeOverlayTexture, 0, 0, col_width*Help_Guides, row_height*Help_Guides);
+        stage.getBatch().setColor(c);
+        stage.getBatch().end();
+
+        if(fadeInAlpha <= 0){
+            startFadeIn = false;
+        }
     }
 
-    // For debugging purposes only..
-    private void drawGrid(){
-        shapeRenderer.begin(ShapeRenderer.ShapeType.Line);
-        shapeRenderer.setColor(1, 0, 0, 1); // Red line
-        for (int i = 0; i < 12; i++) {
-                shapeRenderer.rect(col_width*i, 0, 1, Gdx.graphics.getHeight());
-                shapeRenderer.rect(0, row_height*i, Gdx.graphics.getWidth(), 1);
+    @Override
+    public void fadeOut(float dt) {
+        stage.getBatch().begin();
+        Color c = Color.WHITE;
+        stage.getBatch().setColor(c.r, c.g, c.b, fadeOutAlpha);
+        fadeOutAlpha += dt/fadeOutLength;
+        stage.getBatch().draw(fadeOverlayTexture, 0, 0, col_width*Help_Guides, row_height*Help_Guides);
+        stage.getBatch().setColor(c);
+        stage.getBatch().end();
+        if(fadeOutAlpha >= 1){
+            stage.clear();
+            startFadeout = false;
+            gvm.push(new LobbyView(gvm, playerController, assetManager, stage, skin, availableAvatars));
         }
-        shapeRenderer.end();
+    }
+
+
+    @Override
+    public void dispose() {
+        stage.dispose();
     }
 }
diff --git a/CheckersClient/core/src/com/mygdx/game/views/PauseView.java b/CheckersClient/core/src/com/mygdx/game/views/PauseView.java
index 700bdf6aab9d9363df366ef517f93f14c34d218f..9c0712a7b7193edec88ee75cdb76d026839ff9de 100644
--- a/CheckersClient/core/src/com/mygdx/game/views/PauseView.java
+++ b/CheckersClient/core/src/com/mygdx/game/views/PauseView.java
@@ -22,7 +22,7 @@ public class PauseView extends View{
     }
 
     @Override
-    protected void handleInput() {
+    public void handleInput(float dt) {
 
     }
 
@@ -39,11 +39,19 @@ public class PauseView extends View{
     }
 
     @Override
-    public void dispose() {
-        background.dispose();
-        playBtn.dispose();
+    public void fadeIn(float dt) {
 
     }
 
+    @Override
+    public void fadeOut(float dt) {
+
+    }
 
+    @Override
+    public void dispose() {
+        background.dispose();
+        playBtn.dispose();
+        stage.dispose();
+    }
 }
diff --git a/CheckersClient/core/src/com/mygdx/game/views/PlayView.java b/CheckersClient/core/src/com/mygdx/game/views/PlayView.java
index da6a209dd969ff3db0f8ee918cdfc521688fbf21..90cf9ad906e8aaac3caddcfe5773e1958bc2b780 100644
--- a/CheckersClient/core/src/com/mygdx/game/views/PlayView.java
+++ b/CheckersClient/core/src/com/mygdx/game/views/PlayView.java
@@ -25,13 +25,6 @@ public class PlayView extends View{
 
     }
 
-    @Override
-    protected void handleInput() {
-        if(Gdx.input.isKeyPressed(Input.Keys.ESCAPE)){
-
-        }
-    }
-
     private void isGameOver(){
         boolean someCondition = false;
         if (someCondition){
@@ -39,14 +32,17 @@ public class PlayView extends View{
         }
     }
 
+    @Override
+    public void handleInput(float dt) {
+
+    }
+
     @Override
     public void update(float dt) {
         stage.act(dt);
         isGameOver();
-        handleInput();
     }
 
-
     @Override
     public void render(float dt) {
         stage.getBatch().begin();
@@ -56,6 +52,16 @@ public class PlayView extends View{
 
     }
 
+    @Override
+    public void fadeIn(float dt) {
+
+    }
+
+    @Override
+    public void fadeOut(float dt) {
+
+    }
+
     private void debugDraw(SpriteBatch sb, String text, int xPos, int yPos){
 
     }
diff --git a/CheckersClient/core/src/com/mygdx/game/views/View.java b/CheckersClient/core/src/com/mygdx/game/views/View.java
index 2e105e327ff4817c7ec0835c213df68fff64903a..5cc6e3558b09a2ea158f805c8ab421c1bf84cd98 100644
--- a/CheckersClient/core/src/com/mygdx/game/views/View.java
+++ b/CheckersClient/core/src/com/mygdx/game/views/View.java
@@ -2,27 +2,47 @@ package com.mygdx.game.views;
 
 import com.badlogic.gdx.ApplicationAdapter;
 import com.badlogic.gdx.Gdx;
+import com.badlogic.gdx.InputProcessor;
 import com.badlogic.gdx.assets.AssetManager;
+import com.badlogic.gdx.graphics.Color;
 import com.badlogic.gdx.graphics.OrthographicCamera;
+import com.badlogic.gdx.graphics.Pixmap;
+import com.badlogic.gdx.graphics.Texture;
+import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
+import com.badlogic.gdx.math.Vector2;
 import com.badlogic.gdx.math.Vector3;
 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;
 
+
 public abstract class View extends ApplicationAdapter {
 
     protected OrthographicCamera cam;
-    protected Vector3 mouse;
+    protected float[] lastTouch = new float[2];;
     protected final GameViewManager gvm;
     protected final PlayerController playerController;
     protected final AssetManager assetManager;
     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;
+
+    protected final int Help_Guides = 12;
+    protected final int row_height = Gdx.graphics.getHeight() / Help_Guides;
+    protected final int col_width = Gdx.graphics.getWidth() / Help_Guides;
+    protected final float xpad = col_width/2;
+    protected final float ypad = row_height/2;
+
+    protected ShapeRenderer shapeRenderer;
+    protected float fadeInAlpha;
+    protected float fadeOutAlpha;
+    protected float fadeInLength;
+    protected float fadeOutLength;
+
+    protected boolean startFadeout;
+    protected boolean startFadeIn;
+    protected Texture fadeOverlayTexture;
 
     protected View(GameViewManager gvm, PlayerController playerController, AssetManager assetManager, Stage stage, Skin skin){
         this.gvm = gvm;
@@ -30,27 +50,54 @@ public abstract class View extends ApplicationAdapter {
         this.assetManager = assetManager;
         this.skin = skin;
         cam = new OrthographicCamera();
-        mouse = new Vector3();
         this.playerController = playerController;
+        this.shapeRenderer = new ShapeRenderer();
+
+        fadeInAlpha = 1;
+        fadeOutAlpha= 0;
+        startFadeIn = true;
+        startFadeout = false;
+        fadeInLength = 1;
+        fadeOutLength = 1;
+
+        Pixmap tablePixmap = new Pixmap(1,1, Pixmap.Format.RGB565);
+        tablePixmap.setColor(Color.WHITE);
+        tablePixmap.fill();
+        fadeOverlayTexture = new Texture(tablePixmap);
     }
 
-    protected abstract void handleInput();
+    public abstract void handleInput(float dt);
     public abstract void update(float dt);
     public abstract void render(float dt);
+    public abstract void fadeIn(float dt);
+    public abstract void fadeOut(float dt);
     public abstract void dispose();
 
-    public Skin getSkin(){
-        return skin;
-    }
-    public Stage getStage(){
-        return stage;
+    public boolean getStartFadeIn(){
+        return startFadeIn;
     }
-    public AssetManager getAssetManager(){
-        return assetManager;
+
+    public boolean getStartFadeOut(){
+        return startFadeout;
     }
 
-    public GameViewManager getGameViewManager(){
-        return gvm;
+    protected void setFadeColor(Color c){
+        Pixmap tablePixmap = new Pixmap(1,1, Pixmap.Format.RGB565);
+        tablePixmap.setColor(c);
+        tablePixmap.fill();
+        fadeOverlayTexture = new Texture(tablePixmap);
     }
 
+    protected void drawGrid(){
+        if(shapeRenderer == null){
+            shapeRenderer = new ShapeRenderer();
+        }
+        shapeRenderer.begin(ShapeRenderer.ShapeType.Line);
+        shapeRenderer.setColor(1, 0, 0, 0.75f); // Red line
+        for (int i = 0; i < 12; i++) {
+            shapeRenderer.rect(col_width*i, 0, 1, Gdx.graphics.getHeight());
+            shapeRenderer.rect(0, row_height*i, Gdx.graphics.getWidth(), 1);
+        }
+        shapeRenderer.end();
+    }
 }
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 ce7bae67a250e495de30d1f8bf799b78d727a655..950d9af43fda3868e6295707bce0fe89074362b4 100644
--- a/CheckersClient/core/src/com/mygdx/game/views/enums/LobbyAssets.java
+++ b/CheckersClient/core/src/com/mygdx/game/views/enums/LobbyAssets.java
@@ -6,7 +6,7 @@ public enum LobbyAssets {
 
     LOBBY_LIST("Menu/1x/LobbyList.png", Texture.class),
     BACKGROUND("Menu/1x/LobbyMenu@1x.png", Texture.class),
-    LOBBY("Menu/1x/MrServer.png", Texture.class),
+    LOBBY("Menu/1x/Lobby.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),
diff --git a/CheckersServer/core/src/com/mygdx/game/model/Lobby.java b/CheckersServer/core/src/com/mygdx/game/model/Lobby.java
index 3f57299d1d5b51f93ca1f0e7bcda01d757db90d9..46496c47e23935f2a684e44961b033296ccf0ed7 100644
--- a/CheckersServer/core/src/com/mygdx/game/model/Lobby.java
+++ b/CheckersServer/core/src/com/mygdx/game/model/Lobby.java
@@ -82,8 +82,6 @@ public class Lobby {
             System.out.println("This should many times.");
             return false;
         }
-
-
     }
 
     @Override