diff --git a/CheckersClient/core/src/com/mygdx/game/views/LobbyView.java b/CheckersClient/core/src/com/mygdx/game/views/LobbyView.java
index eec11c89718e5011b0827d1a5748c228ef120df9..ce115e2e806e394bba7101c51610ae6b5b01f0cf 100644
--- a/CheckersClient/core/src/com/mygdx/game/views/LobbyView.java
+++ b/CheckersClient/core/src/com/mygdx/game/views/LobbyView.java
@@ -4,19 +4,30 @@ import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.assets.AssetManager;
 import com.badlogic.gdx.audio.Sound;
 import com.badlogic.gdx.graphics.Texture;
-import com.badlogic.gdx.graphics.g2d.Sprite;
 import com.badlogic.gdx.graphics.g2d.TextureRegion;
 import com.badlogic.gdx.graphics.glutils.FrameBuffer;
 import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
+import com.badlogic.gdx.math.MathUtils;
+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.ui.Button;
+import com.badlogic.gdx.scenes.scene2d.ui.Dialog;
 import com.badlogic.gdx.scenes.scene2d.ui.Image;
 import com.badlogic.gdx.scenes.scene2d.ui.Label;
+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.utils.Align;
 import com.mygdx.game.controllers.PlayerController;
 import com.mygdx.game.views.enums.LobbyAssets;
+import com.mygdx.game.views.enums.MenuAssets;
+
+import java.util.Arrays;
+import java.util.List;
 
 public class LobbyView extends View{
 
@@ -29,16 +40,30 @@ public class LobbyView extends View{
     private Sound sound;
     private Button setUserNameButton;
     private Image backgroundImage;
-    private TextField usernameTextField;
+
+
+
     private FrameBuffer previousScreenFrameBuffer;
     private float fadeTransitionLength = 0.75f;
     private float fadeTransitionTimer = 1;
     private Image fadeImage;
     private TextureRegion fadeTextureRegion;
+    private boolean transitionFinished = false;
     private boolean fadeIn = true;
     private boolean fadeOut = true;
+    private Label mrServerBubbleLabel;
+
+    private Sound buttonClickAudio;
+
+    private TextField lobbyCreateTextField;
+    private Button joinLobbyButton;
+    private Button createLobbyButton;
+    private Button lobbyRefreshButton;
+    private Button lobbyBackButton;
+    private Dialog lobbyCreateDialogue;
+    private SelectBox<Integer> lobbyCreateSizeSelectBox;
+
 
-    private boolean transitionFinished = false;
 
     int Help_Guides = 12;
     int row_height = Gdx.graphics.getHeight() / Help_Guides;
@@ -49,20 +74,11 @@ public class LobbyView extends View{
         super(gvm, playerController, assetManager, stage, skin);
         this.previousScreenFrameBuffer = previousScreenFrameBuffer;
 
-        fadeTextureRegion = new TextureRegion(previousScreenFrameBuffer.getColorBufferTexture());
-        fadeTextureRegion.flip(false, true);
-        fadeImage = new Image(fadeTextureRegion);
-        fadeImage.setColor(1, 1, 1, 1f);
-
         background = (Texture) assetManager.get(LobbyAssets.BACKGROUND.path, LobbyAssets.BACKGROUND.classType);
-        Texture lobbyListTexture = (Texture) assetManager.get(LobbyAssets.LOBBYLIST.path, LobbyAssets.LOBBYLIST.classType);
-        this.lobbyListBubbleImage = new Image(lobbyListTexture);
-
-        lobbyListBubbleImage.setPosition(col_width*0.25f, row_height*5.5f);
-
         rocketTexture = (Texture) assetManager.get(LobbyAssets.ROCKET.path, LobbyAssets.ROCKET.classType);
         exhaustTexture = (Texture) assetManager.get(LobbyAssets.ROCKETEXHAUST.path, LobbyAssets.ROCKETEXHAUST.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);
 
         rocketImage = new Image(rocketTexture);
         exhaustImage = new Image(exhaustTexture);
@@ -71,8 +87,13 @@ public class LobbyView extends View{
         exhaustImage.setSize(col_width*0.6f, row_height*2f);
         exhaustImage.setPosition(rocketImage.getX()+rocketImage.getWidth()/2-exhaustImage.getWidth()/2, rocketImage.getY()-exhaustImage.getHeight());
 
+        fadeTextureRegion = new TextureRegion(previousScreenFrameBuffer.getColorBufferTexture());
+        fadeTextureRegion.flip(false, true);
+        fadeImage = new Image(fadeTextureRegion);
+        fadeImage.setColor(1, 1, 1, 1f);
 
-
+        lobbyListBubbleImage = new Image(lobbyListTexture);
+        lobbyListBubbleImage.setPosition(col_width*0.25f, row_height*5.5f);
         backgroundImage = new Image(background);
 
         outputLabel = new Label("Press a Button",skin,"black");
@@ -81,58 +102,184 @@ 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);
+
+        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);
+
+        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*1);
+
+        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);
+
+        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);
+
         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);
 
-        usernameTextField = new TextField("Your name ..", skin);
+        lobbyCreateTextField = new TextField("", skin);
+        lobbyCreateTextField.setMessageText("Name of your lobby.");
+        lobbyCreateTextField.setPosition(col_width*5,Gdx.graphics.getHeight()-row_height*3);
+        lobbyCreateTextField.setSize(col_width*2,(float)(row_height*0.75));
+        lobbyCreateTextField.scaleBy(1000);
+
+        lobbyCreateSizeSelectBox =new SelectBox<>(skin);
+        lobbyCreateSizeSelectBox.setItems(2, 4, 6, 8);
+        lobbyCreateTextField = new TextField("", skin);
+        lobbyCreateTextField.setMessageText("Enter lobby name.");
+        lobbyCreateTextField.setSize(col_width*1.5f,row_height*0.8f);
+        lobbyCreateTextField.setPosition(lobbyRefreshButton.getX(), lobbyRefreshButton.getY()+row_height*1.25f);
+        lobbyCreateSizeSelectBox.setPosition(lobbyBackButton.getX(), lobbyCreateTextField.getY());
+        lobbyCreateSizeSelectBox.setSize(lobbyBackButton.getWidth(), lobbyBackButton.getHeight());
 
-        usernameTextField.setMessageText("Enter your username");
-        usernameTextField.setPosition(col_width*5,Gdx.graphics.getHeight()-row_height*3);
-        usernameTextField.setSize(col_width*2,(float)(row_height*0.75));
-        usernameTextField.scaleBy(1000);
+        backgroundImage.setZIndex(1);
+        lobbyListBubbleImage.setZIndex(2);
+        fadeImage.setZIndex(3);
+        outputLabel.setZIndex(3);
+        stage.addActor(fadeImage);
+        stage.addActor(outputLabel);
 
+        createLobbyButton.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("Create Lobby");
+                showCreateLobbyWindow();
 
-        setUserNameButton.addListener(new InputListener(){
+            }
+        });
+        joinLobbyButton.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("Touch up a Button");
+                showJoinLobbyWindow();
+            }
+        });
+        lobbyBackButton.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) {
-                outputLabel.setText("Press a Button");
+                buttonClickAudio.play(0.8f);
+                outputLabel.setText("Back button");
+                showMainLobbyWindow();
             }
+        });
+        lobbyRefreshButton.addListener(new InputListener(){
             @Override
             public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
-                outputLabel.setText("Touch down a Button");
                 return true;
             }
+            @Override
+            public void touchUp (InputEvent event, float x, float y, int pointer, int button) {
+                buttonClickAudio.play(0.8f);
+                outputLabel.setText("Lobby refreshed!");
+                lobbyRefresh();
+            }
         });
-        usernameTextField.addListener(new InputListener(){
+        lobbyCreateTextField.addListener(new InputListener(){
             @Override
             public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
-                outputLabel.setText("Write your name");
                 return true;
             }
+            @Override
+            public void touchUp (InputEvent event, float x, float y, int pointer, int button) {
+                buttonClickAudio.play(0.8f);
+            }
+
             @Override
             public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) {
-                if(usernameTextField.getText().isEmpty()){
-                    playerController.setPlayerName(usernameTextField.getText());
-                    outputLabel.setText("");
+                buttonClickAudio.play(0.8f);
+                if(lobbyCreateTextField.getText().isEmpty()){
+                    outputLabel.setText(lobbyCreateTextField.getText());
                 }
             }
         });
+    }
 
-        usernameTextField.setZIndex(2);
-        setUserNameButton.setZIndex(2);
-        */
+    private void showCreateLobbyWindow(){
+        mrServerBubbleLabel.remove();
+        joinLobbyButton.remove();
+        createLobbyButton.remove();
 
-        backgroundImage.setZIndex(1);
-        lobbyListBubbleImage.setZIndex(2);
-        fadeImage.setZIndex(3);
-        outputLabel.setZIndex(3);
-        stage.addActor(fadeImage);
-        stage.addActor(outputLabel);
+        stage.addActor(lobbyBackButton);
+        stage.addActor(lobbyCreateTextField);
+        stage.addActor(lobbyCreateSizeSelectBox);
+    }
+
+    private Table lobbyRoomTable;
+    private void showJoinLobbyWindow(){
+        lobbyRoomTable = new Table();
+        mrServerBubbleLabel.remove();
+        joinLobbyButton.remove();
+        createLobbyButton.remove();
+        stage.addActor(lobbyRoomTable);
+        stage.addActor(lobbyBackButton);
+        stage.addActor(lobbyRefreshButton);
+        lobbyRefresh();
+
+    }
 
+    List<String> lobbyNames = Arrays.asList("Hello", "World!", "How", "Are", "You", "Lobby1", "Norway", "Oh yes", "No girls", "Only boys", "NTNU");
+    List<String> lobbySize = Arrays.asList("2", "4", "6");
+    private void lobbyRefresh(){
+        if(lobbyRoomTable != null){
+            lobbyRoomTable.clear();
+            // models.get(availableLobbies);
+            lobbyRoomTable.setSize(col_width*2.5f, row_height*3f);
+            lobbyRoomTable.setPosition(lobbyListBubbleImage.getX()+lobbyListBubbleImage.getWidth()*0.1f, row_height*8f);
+            Label availableLobbyLabel = new Label("Available Lobbies", skin);
+            lobbyRoomTable.addActor(availableLobbyLabel);
+            for (int i=0; i<4; i++) {
+                Label lobbyEntry = new Label("LobbyName: "+ lobbyNames.get((int) MathUtils.random(lobbyNames.size()-1)) + ", LobbySize = " + lobbySize.get((int) MathUtils.random(lobbySize.size()-1)), skin);
+                lobbyEntry.setWrap(true);
+                lobbyRoomTable.addActor(lobbyEntry);
+            }
+        }
     }
 
+    private void showMainLobbyWindow(){
+        if(lobbyRoomTable != null){
+            lobbyRoomTable.remove();
+        }
+        stage.addActor(createLobbyButton);
+        stage.addActor(joinLobbyButton);
+        stage.addActor(mrServerBubbleLabel);
+        try {
+            lobbyBackButton.remove();
+            lobbyRefreshButton.remove();
+            lobbyCreateTextField.remove();
+            lobbyCreateSizeSelectBox.remove();
+
+        } finally {
+            // Do nothing here
+        }
+    }
+
+
+
     @Override
     public void handleInput() {
         if(Gdx.input.isTouched()) {
@@ -168,9 +315,12 @@ public class LobbyView extends View{
     private void addActorsAfterTransition(){
         stage.addActor(backgroundImage);
         stage.addActor(outputLabel);
-        stage.addActor(lobbyListBubbleImage);
         stage.addActor(rocketImage);
         stage.addActor(exhaustImage);
+        stage.addActor(lobbyListBubbleImage);
+        stage.addActor(createLobbyButton);
+        stage.addActor(joinLobbyButton);
+        stage.addActor(mrServerBubbleLabel);
     }
 
     private float alphaFade1 = 1;
diff --git a/CheckersClient/core/src/com/mygdx/game/views/MenuView.java b/CheckersClient/core/src/com/mygdx/game/views/MenuView.java
index d50e73c02f1336edb0e35edc54fa78ef849a0c79..c62a88c511139a4ce0912b9cb67c5a47850a76b2 100644
--- a/CheckersClient/core/src/com/mygdx/game/views/MenuView.java
+++ b/CheckersClient/core/src/com/mygdx/game/views/MenuView.java
@@ -2,6 +2,7 @@ package com.mygdx.game.views;
 
 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.Pixmap;
 import com.badlogic.gdx.graphics.Texture;
@@ -36,6 +37,7 @@ public class MenuView extends View{
 
     private Sound buttonClickAudio;
     private Sound transitionAudio;
+    private Music music;
     private ShapeRenderer shapeRenderer;
 
     int Help_Guides = 12;
@@ -59,6 +61,11 @@ public class MenuView extends View{
 
         form = (Texture) assetManager.get(MenuAssets.FORM.path, MenuAssets.FORM.classType);
 
+        music = Gdx.audio.newMusic(Gdx.files.internal(MenuAssets.LOOP_AUDIO.path));
+        music.setVolume(1);
+        music.setLooping(true);
+        music.play();
+
         this.formImage = new Image(form);
         formImage.setPosition(col_width*5, row_height*5);
         formImage.setAlign((Align.center));
@@ -113,14 +120,15 @@ public class MenuView extends View{
        usernameTextField.addListener(new InputListener(){
             @Override
             public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
+                buttonClickAudio.play(0.8f);
                 outputLabel.setText("Write your name");
                 return true;
             }
 
             @Override
             public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) {
+                buttonClickAudio.play(0.8f);
                 if(usernameTextField.getText().isEmpty()){
-                    buttonClickAudio.play(0.8f);
                     playerController.setPlayerName(usernameTextField.getText());
                     outputLabel.setText("");
                 }
@@ -136,7 +144,7 @@ public class MenuView extends View{
         outputLabel.setZIndex(3);
 
          */
-        loopAudio.loop(0.9f);
+        //loopAudio.loop(0.9f);
         // Adding the initial actors in the scene
         stage.addActor(backgroundImage);
         stage.addActor(outputLabel);