diff --git a/frontend/core/src/com/gameware/game/states/LoginState.java b/frontend/core/src/com/gameware/game/states/LoginState.java
index 54339aa120e9e6459ea296f7a1b1d98904b3391b..69b20b5d56c2ecf20b8a253165bd67cfb3136640 100644
--- a/frontend/core/src/com/gameware/game/states/LoginState.java
+++ b/frontend/core/src/com/gameware/game/states/LoginState.java
@@ -23,7 +23,8 @@ public class LoginState extends State {
 
 //    Labels
     private final Label titleLabel = new Label("GameWare", skin, "big");
-    private final Label subHeadLabel = new Label("Log in / Create User", skin, "big");
+    private final Label subHeadLabelLogIn = new Label("Log in", skin, "big");
+    private final Label subHeadLabelCreateUser = new Label("Create User", skin, "big");
     private Label errorLabel = new Label("", skin, "error");
 
 //    Input fields
@@ -31,22 +32,23 @@ public class LoginState extends State {
     private TextField usernameInputField;
     private String passwordInputText = "Password";
     private TextField passwordInputField;
+    private String confirmPasswordInputText = "Confirm password";
+    private TextField confirmPasswordInputField;
     private final char passwordCharacter = '*';
     private final int inputFieldWidth = Gdx.graphics.getWidth()/2;
     private final int inputFieldHeight = Gdx.graphics.getHeight()/15;
 
 //    Button texts
     private final String loginBtnText = "Log in";
+    private final String createUserText = "Create User";
     private final String signUpBtnText = "Sign Up";
+    private final String backText = "Back";
 
 //    Feedback texts
     private final String wrongLoginText = "User not found";
     private final String takenUsernameText = "Username already taken";
     private final String ioExceptionText = "Something went wrong with query";
-
-//    Feedback label animation
-    private final int animationDelay = 2;
-    private final int animationDuration = 1;
+    private final String passwordNotMatchingText = "Passwords do not match";
 
 //    Loading text
     private LoadingText loadingText = new LoadingText();
@@ -54,6 +56,10 @@ public class LoginState extends State {
     private boolean signUpBtnClicked = false;
 
 
+//    Variables
+    private int page = 0;
+
+
     public LoginState(GameStateManager gsm) {
         super(gsm);
         makeStage();
@@ -64,19 +70,36 @@ public class LoginState extends State {
 
 //        Add widgets
         titleLabel.setFontScale(titleFontBigScale);
-        rootTable.add(titleLabel).expandY();
-        rootTable.row();
-        rootTable.add(subHeadLabel).expandY();
-        rootTable.row();
-        rootTable.add(makeUserInputField()).size(inputFieldWidth, inputFieldHeight);
+        rootTable.add(titleLabel).expandY().top();
         rootTable.row();
-        rootTable.add(makePasswordInputField()).size(inputFieldWidth, inputFieldHeight);
-        rootTable.row();
-        rootTable.add(errorLabel);
-        rootTable.row();
-        rootTable.add(makeLoginBtn()).size(buttonWidth, buttonHeight);
-        rootTable.row();
-        rootTable.add(makeSignUpBtn()).size(buttonWidth, buttonHeight).padBottom(spacingLarge);
+
+        if (page == 0) {
+            rootTable.add(subHeadLabelLogIn).expandY();
+            rootTable.row();
+            rootTable.add(makeUserInputField()).size(inputFieldWidth, inputFieldHeight);
+            rootTable.row();
+            rootTable.add(makePasswordInputField()).size(inputFieldWidth, inputFieldHeight);
+            rootTable.row();
+            rootTable.add(errorLabel);
+            rootTable.row();
+            rootTable.add(makeLoginBtn()).size(buttonWidth, buttonHeight);
+            rootTable.row();
+            rootTable.add(makeCreateUserBtn()).size(buttonWidth, buttonHeight).padBottom(spacingMedium).expandY().top();
+        } else if (page == 1){
+            rootTable.add(subHeadLabelCreateUser).expandY().spaceBottom(spacingMedium);
+            rootTable.row();
+            rootTable.add(makeUserInputField()).size(inputFieldWidth, inputFieldHeight);
+            rootTable.row();
+            rootTable.add(makePasswordInputField()).size(inputFieldWidth, inputFieldHeight);
+            rootTable.row();
+            rootTable.add(makeConfirmPasswordInputField()).size(inputFieldWidth, inputFieldHeight);
+            rootTable.row();
+            rootTable.add(errorLabel);
+            rootTable.row();
+            rootTable.add(makeSignUpBtn()).size(buttonWidth, buttonHeight);
+            rootTable.row();
+            rootTable.add(makeBackBtn()).expand().bottom().left();
+        }
 
         removeKeyPadAtTouch();
 
@@ -116,6 +139,22 @@ public class LoginState extends State {
         return passwordInputField;
     }
 
+    private TextField makeConfirmPasswordInputField( ){
+        confirmPasswordInputField = new TextField(confirmPasswordInputText, skin);
+        confirmPasswordInputField.setPasswordCharacter(passwordCharacter);
+        confirmPasswordInputField.addListener(new ClickListener() {
+            @Override
+            public void clicked(InputEvent event, float x, float y) {
+                super.clicked(event, x, y);
+                if(confirmPasswordInputField.getText().equals(confirmPasswordInputText)){
+                    confirmPasswordInputField.setText("");
+                    confirmPasswordInputField.setPasswordMode(true);
+                }
+            }
+        });
+        return confirmPasswordInputField;
+    }
+
     private TextButton makeLoginBtn( ){
         TextButton loginBtn = new TextButton(loginBtnText, skin);
         loginBtn.addListener(new ClickListener() {
@@ -127,17 +166,51 @@ public class LoginState extends State {
         return loginBtn;
     }
 
+    private TextButton makeCreateUserBtn( ){
+        TextButton createUserBtn = new TextButton(createUserText, skin);
+        createUserBtn.addListener(new ClickListener() {
+            @Override
+            public void clicked(InputEvent e, float x, float y){
+                page ++;
+                errorLabel.setText("");
+                stage.clear();
+                makeStage();
+            }
+        });
+        return createUserBtn;
+    }
+
     private TextButton makeSignUpBtn( ){
         TextButton signUpBtn = new TextButton(signUpBtnText, skin);
         signUpBtn.addListener(new ClickListener() {
             @Override
             public void clicked(InputEvent e, float x, float y){
-                setSignUpBtnClicked();
+                try{
+                    isValidPassword();
+                    setSignUpBtnClicked();
+                }catch(IllegalArgumentException exception){
+                    errorLabel.setText(passwordNotMatchingText);
+                }
+
             }
         });
         return signUpBtn;
     }
 
+    private TextButton makeBackBtn(){
+        TextButton backBtn = new TextButton(backText, skin);
+        backBtn.addListener(new ClickListener() {
+            @Override
+            public void clicked(InputEvent e, float x, float y){
+                page --;
+                errorLabel.setText("");
+                stage.clear();
+                makeStage();
+            }
+        });
+        return backBtn;
+    }
+
 
 //    Handle click methods
     private void handleLoginBtnClick(){
@@ -157,12 +230,6 @@ public class LoginState extends State {
         }catch(Exception e) {
             e.printStackTrace();
 
-//            Add animation
-            errorLabel.getColor().a = 1;
-            errorLabel.addAction(Actions.sequence(
-                    new DelayAction(animationDelay),
-                    Actions.fadeOut(animationDuration)));
-
 //            Different feedback text depending on which exception
             if (e instanceof NoSuchElementException) {
                 errorLabel.setText(wrongLoginText);
@@ -191,12 +258,6 @@ public class LoginState extends State {
         } catch (Exception e) {
             e.printStackTrace();
 
-//            Add animation
-            errorLabel.getColor().a = 1;
-            errorLabel.addAction(Actions.sequence(
-                    new DelayAction(animationDelay),
-                    Actions.fadeOut(animationDuration)));
-
 //            Different feedback text depending on which exception
             if (e instanceof NoSuchElementException) {
                 errorLabel.setText(takenUsernameText);
@@ -221,6 +282,12 @@ public class LoginState extends State {
     }
 
 
+    private void isValidPassword() throws IllegalArgumentException {
+        if(!passwordInputField.getText().equals(confirmPasswordInputField.getText())){
+            throw new IllegalArgumentException();
+        }
+    }
+
     @Override
     public void update(float dt) {
         super.update(dt);
@@ -264,5 +331,7 @@ public class LoginState extends State {
     public void reset() {
         usernameInputField.setText(usernameInputText);
         passwordInputField.setText(passwordInputText);
+        confirmPasswordInputField.setText(confirmPasswordInputText);
+        errorLabel.setText("");
     }
 }