diff --git a/frontend/.gitignore b/frontend/.gitignore
index beb613922873843407bee5b15177252083f76cfa..1883d38f0dc8603fec8cf8d914420e050bd372fc 100644
--- a/frontend/.gitignore
+++ b/frontend/.gitignore
@@ -12,6 +12,9 @@ hs_err_pid*
 android/assets/storage.json
 android/assets/player_config.json
 
+## Release
+android/release
+
 ## GWT
 /html/war/
 /html/gwt-unitCache/
diff --git a/frontend/android/assets/config.json b/frontend/android/assets/config.json
index d8ebd300d3dc462bc401f13c9df626f5e764fa8b..55127234650845ca0f7aee77a401dc82411cc0a4 100644
--- a/frontend/android/assets/config.json
+++ b/frontend/android/assets/config.json
@@ -8,15 +8,15 @@
   "games": [
     {
       "id": "5e90541aeba599f7b1bffceb",
-      "class": "com.gameware.game.states.FruitSlicerState"
+      "class": "com.gameware.game.states.games.FruitSlicerState"
     },
     {
       "id": "5e5d0efaa6e2bc5cb4920b7a",
-      "class": "com.gameware.game.states.ColorRushState"
+      "class": "com.gameware.game.states.games.ColorRushState"
     },
     {
       "id": "5e5d0f1ea6e2bc5cb4920b7b",
-      "class": "com.gameware.game.states.BubbleWrapState"
+      "class": "com.gameware.game.states.games.BubbleWrapState"
     }
   ]
 }
diff --git a/frontend/android/assets/gameTextures/placeholderThumbnail.png b/frontend/android/assets/gameTextures/placeholderThumbnail.png
new file mode 100644
index 0000000000000000000000000000000000000000..31ad5582832270ceb3c70ac378a6d5eb701bb6fe
Binary files /dev/null and b/frontend/android/assets/gameTextures/placeholderThumbnail.png differ
diff --git a/frontend/core/src/com/gameware/game/states/GameStateManager.java b/frontend/core/src/com/gameware/game/GameStateManager.java
similarity index 79%
rename from frontend/core/src/com/gameware/game/states/GameStateManager.java
rename to frontend/core/src/com/gameware/game/GameStateManager.java
index 1cb34dbdb985db864c667a207e7ff27a057fb674..ab0098d4cc13a9f1e25d2792f20d856040cd5cff 100644
--- a/frontend/core/src/com/gameware/game/states/GameStateManager.java
+++ b/frontend/core/src/com/gameware/game/GameStateManager.java
@@ -1,9 +1,16 @@
-package com.gameware.game.states;
+package com.gameware.game;
 
 import com.badlogic.gdx.graphics.g2d.SpriteBatch;
+import com.gameware.game.states.State;
 
 import java.util.Stack;
 
+/*
+    GameStateManager keeps track of which state is the current one. Delegates to the correct state.
+
+    Patterns: State, Delegation, Update method
+ */
+
 public class GameStateManager {
     private Stack<State> states;
 
@@ -34,6 +41,7 @@ public class GameStateManager {
         states.push(state);
     }
 
+//    Update method (delegates to current state)
     public void update(float dt){
         states.peek().update(dt);
     }
diff --git a/frontend/core/src/com/gameware/game/GameWare.java b/frontend/core/src/com/gameware/game/GameWare.java
index ee8a0095effe4a946a02b21577cf95188f0b8949..10a4acad248275394e8fc5ede8d6ecc8872671af 100644
--- a/frontend/core/src/com/gameware/game/GameWare.java
+++ b/frontend/core/src/com/gameware/game/GameWare.java
@@ -13,10 +13,9 @@ import com.badlogic.gdx.utils.JsonValue;
 import com.gameware.game.models.Game;
 import com.gameware.game.models.LocalStorage;
 import com.gameware.game.models.Player;
-import com.gameware.game.states.GameStateManager;
-import com.gameware.game.states.LoginState;
-import com.gameware.game.states.MenuState;
-import com.gameware.game.states.PlayStateUnion;
+import com.gameware.game.states.menus.LoginState;
+import com.gameware.game.states.menus.MenuState;
+import com.gameware.game.states.games.PlayStateUnion;
 
 import java.io.IOException;
 import java.lang.reflect.Constructor;
@@ -25,6 +24,14 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+/*
+
+	GameWare is the main class, it is the first class to be created. It is called from the AndroidLauncher.
+	It extends LibGDX's ApplicationAdapter, and the render method (regarded as the game loop)
+	delegates to the GameStateManager.
+
+	Patterns: Singleton, Delegation, Game Loop
+*/
 
 public class GameWare extends ApplicationAdapter {
 	private SpriteBatch batch;
@@ -83,12 +90,23 @@ public class GameWare extends ApplicationAdapter {
 
 	@Override
 	public void render () {
-		Gdx.gl.glClearColor(1, 1, 1, 1);
+//		Game loop
+
+//      Clearing the screen
+	    Gdx.gl.glClearColor(1, 1, 1, 1);
 		Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
+//		Delegates to GameStateManager
 		gsm.update(Gdx.graphics.getDeltaTime());
 		gsm.render(batch);
 	}
 
+	@Override
+	public void dispose () {
+		batch.dispose();
+		music.dispose();
+	}
+
+//	Option toggles
 	public void toggleMusic(){
 		if(musicOn){music.pause();}
 		else{music.play();}
@@ -101,6 +119,7 @@ public class GameWare extends ApplicationAdapter {
 		writeToLocalStorage();
 	}
 
+//	Getters and setters
 	public void setPlayer(Player player){
 		this.player = player;
 		writeToLocalStorage();
@@ -140,13 +159,6 @@ public class GameWare extends ApplicationAdapter {
 		writeToLocalStorage();
 	}
 
-	@Override
-	public void dispose () {
-		batch.dispose();
-		music.dispose();
-	}
-
-
 	/*
 		The app uses local storage on the device to store the player and player options.
 		The app writes to local storage when one of the stored variables change and reads from
diff --git a/frontend/core/src/com/gameware/game/QueryIntermediate.java b/frontend/core/src/com/gameware/game/QueryIntermediate.java
index 9791163e6282f9c26be4c501291ecf0d10bbf2ab..e7ab020254c35832ccc4e453bc2e04f8468d8f8b 100644
--- a/frontend/core/src/com/gameware/game/QueryIntermediate.java
+++ b/frontend/core/src/com/gameware/game/QueryIntermediate.java
@@ -31,12 +31,17 @@ import java.util.Map;
 import java.util.NoSuchElementException;
 import java.util.TimeZone;
 
-public final class QueryIntermediate {
-    /*
-        QueryIntermediate works as connector between frontend and backend. It takes care of all
-        communications and requests with backend.
+/*
+    QueryIntermediate works as connector between frontend and backend. It takes care of all
+    communications and requests with backend.
+
+    Static class implemented with private constructor final class and only static methods.
+
+    Patterns: Pipe and Filter, Client-Server
+ */
 
-     */
+
+public final class QueryIntermediate {
 
     private QueryIntermediate(){}
 
@@ -198,7 +203,7 @@ public final class QueryIntermediate {
         Map<String, String> params = new HashMap<>();
         params.put("playerId", tournament.getPlayers().get(0));
         params.put("games", tournament.getGames().toString());
-        params.put("name", tournament.getName());
+        params.put("name", tournament.getName().trim());
         params.put("timePerRound", Double.toString(tournament.getTimePerRound()));
         params.put("maxPlayers", Integer.toString(tournament.getMaxPlayers()));
         params.put("roundsPerGame", Integer.toString(tournament.getRoundsPerGame()));
@@ -326,6 +331,8 @@ public final class QueryIntermediate {
     }
 
     public static Player loginPlayer(String username, String password) throws IOException, NoSuchElementException {
+        username = username.trim();
+        password = password.trim();
         String route = "players/login/" + username + "/" + password;
         String[] response = sendGetRequest(route);
         checkStatusCode(response);
@@ -336,6 +343,8 @@ public final class QueryIntermediate {
 
     public static Player createNewPlayer(String username, String password) throws IOException, NoSuchElementException {
         String route = "players/";
+        username = username.trim();
+        password = password.trim();
         Map<String, String> params = new HashMap<>();
         params.put("username", username);
         params.put("password", password);
diff --git a/frontend/core/src/com/gameware/game/models/Alert.java b/frontend/core/src/com/gameware/game/models/Alert.java
index 4b79fdff137948811cd9b357fb5e6ca62175c899..9bbf9b38bfcbf55559c1070322720c7f0fb07767 100644
--- a/frontend/core/src/com/gameware/game/models/Alert.java
+++ b/frontend/core/src/com/gameware/game/models/Alert.java
@@ -2,6 +2,10 @@ package com.gameware.game.models;
 
 import com.badlogic.gdx.utils.Json;
 
+/*
+    Model for the alerts about tournaments that finish
+*/
+
 public class Alert implements ModelInterface {
     private String _id;
     private String playerId;
diff --git a/frontend/core/src/com/gameware/game/models/Game.java b/frontend/core/src/com/gameware/game/models/Game.java
index 99bb212bbb624f7e1772928f859f4b38a0e1d52a..64e9f58925924750848e7b378618404616101fe2 100644
--- a/frontend/core/src/com/gameware/game/models/Game.java
+++ b/frontend/core/src/com/gameware/game/models/Game.java
@@ -2,6 +2,10 @@ package com.gameware.game.models;
 
 import com.badlogic.gdx.utils.Json;
 
+/*
+    Model for games
+*/
+
 public class Game implements ModelInterface {
     private String _id;
     private String name;
diff --git a/frontend/core/src/com/gameware/game/models/Highscore.java b/frontend/core/src/com/gameware/game/models/Highscore.java
index 2855049104928ced73775c17764710181de81414..2aca4d767996029763592fc6fdf62c6005190f21 100644
--- a/frontend/core/src/com/gameware/game/models/Highscore.java
+++ b/frontend/core/src/com/gameware/game/models/Highscore.java
@@ -4,6 +4,10 @@ import com.badlogic.gdx.utils.Json;
 
 import java.util.Comparator;
 
+/*
+    Model for the a high score a player gets on a specific game
+*/
+
 public class Highscore implements ModelInterface {
     private String _id;
     private String gameId;
diff --git a/frontend/core/src/com/gameware/game/models/LocalStorage.java b/frontend/core/src/com/gameware/game/models/LocalStorage.java
index a413fd5acf69a6465d9e0f2ddb096db138e6c09a..5b6c3bd469d2eaac9299a1718e3a20e249e381b7 100644
--- a/frontend/core/src/com/gameware/game/models/LocalStorage.java
+++ b/frontend/core/src/com/gameware/game/models/LocalStorage.java
@@ -2,14 +2,18 @@ package com.gameware.game.models;
 
 import com.badlogic.gdx.utils.Json;
 
+/*
+    Model for the local storage. Used to remember log in and options.
+    Loads in the config.json file, placed in the package "assets" under the package "android"
+*/
+
 public class LocalStorage implements ModelInterface {
     private Player player;
     private Boolean musicOn;
     private Boolean soundEffects;
     private Boolean includeFin;
 
-    public LocalStorage() {
-    }
+    public LocalStorage() {}
 
     public LocalStorage(Player player, Boolean musicOn, Boolean soundEffects, Boolean includeFin) {
         this.player = player;
diff --git a/frontend/core/src/com/gameware/game/models/ModelInterface.java b/frontend/core/src/com/gameware/game/models/ModelInterface.java
index 96283b11b1e258a6d4da42e0a7c162a92fd88aa2..0646df75a3883433b373e2c1cf10b39635c74e41 100644
--- a/frontend/core/src/com/gameware/game/models/ModelInterface.java
+++ b/frontend/core/src/com/gameware/game/models/ModelInterface.java
@@ -1,10 +1,18 @@
 package com.gameware.game.models;
 
-public interface ModelInterface {
-    public void reset();
-    public String report();
+/*
+    Data model interface for converting json objects to Java objects
+
+    Patterns: Pipe-and-filter
+
+    When implemented the class must be a model, in other words a data oriented java object.
+    Data models used for the filters input/output ports in the QueryIntermediate's pipe-and-filter implementation.
 
-    /*
-        Data models for converting json objects to Java objects
-     */
+    ModelInterface is also implementation of the testability tactic "Specialized interfaces" with
+    requiring models to have a reset and a report method.
+*/
+
+public interface ModelInterface {
+    void reset();
+    String report();
 }
diff --git a/frontend/core/src/com/gameware/game/models/Player.java b/frontend/core/src/com/gameware/game/models/Player.java
index 08ce14e2b45c1d4eb8f5db5b9c835c8853f6ae6b..15f7eac8c968c2f4cfcf291946901099222f06e2 100644
--- a/frontend/core/src/com/gameware/game/models/Player.java
+++ b/frontend/core/src/com/gameware/game/models/Player.java
@@ -6,6 +6,10 @@ import com.gameware.game.QueryIntermediate;
 import java.util.Date;
 import java.util.jar.JarEntry;
 
+/*
+    Model for users. The Player variable in the GameWare is set when logging in and out
+*/
+
 public class Player implements ModelInterface {
     private String _id;
     private String name;
diff --git a/frontend/core/src/com/gameware/game/models/Point.java b/frontend/core/src/com/gameware/game/models/Point.java
index 9046fdcce119db0336fe7c58d27e9d321c038e7b..0bf98664bd41dc7e6dfd1fad30df12db87f031a5 100644
--- a/frontend/core/src/com/gameware/game/models/Point.java
+++ b/frontend/core/src/com/gameware/game/models/Point.java
@@ -2,6 +2,10 @@ package com.gameware.game.models;
 
 import com.badlogic.gdx.utils.Json;
 
+/*
+    Model for the tournament points (TP). TP is the score a player has in a tournament
+*/
+
 public class Point implements ModelInterface {
     private String id; // playerId
     private String name;
diff --git a/frontend/core/src/com/gameware/game/models/Round.java b/frontend/core/src/com/gameware/game/models/Round.java
index 2dfb61857f14e0d7698c2ceb5773ccef8a44fa41..0ef17768089061398745407f93452d28990bf122 100644
--- a/frontend/core/src/com/gameware/game/models/Round.java
+++ b/frontend/core/src/com/gameware/game/models/Round.java
@@ -5,6 +5,10 @@ import com.gameware.game.QueryIntermediate;
 
 import java.util.Date;
 
+/*
+    Model for a player's round in a specific tournament.
+*/
+
 public class Round implements ModelInterface {
     private String _id;
     private String tournamentId;
diff --git a/frontend/core/src/com/gameware/game/models/RoundCheck.java b/frontend/core/src/com/gameware/game/models/RoundCheck.java
index 481d24dafd178770078af32cf23c7861dbae4034..82621464a2ddfce0aae3aa18dc969e03d98a1b15 100644
--- a/frontend/core/src/com/gameware/game/models/RoundCheck.java
+++ b/frontend/core/src/com/gameware/game/models/RoundCheck.java
@@ -2,6 +2,13 @@ package com.gameware.game.models;
 
 import com.badlogic.gdx.utils.Json;
 
+/*
+    Model for checking and updating tournaments.
+    If active is true, that means the tournament is not finished,
+    if nextRound is true, that means the next round of the tournament is ready to be fetched and played.
+    This is used inside PlayStateUnion to know which menu state is the next one after a game is over.
+*/
+
 public class RoundCheck implements ModelInterface {
    private boolean active;
    private boolean nextRound;
diff --git a/frontend/core/src/com/gameware/game/models/Tournament.java b/frontend/core/src/com/gameware/game/models/Tournament.java
index 324bd432331f8976ddf80c3543153f64dfcc4d11..72477a905ed775c5167593bb07d10f4d6ebf3c56 100644
--- a/frontend/core/src/com/gameware/game/models/Tournament.java
+++ b/frontend/core/src/com/gameware/game/models/Tournament.java
@@ -11,6 +11,10 @@ import java.util.Date;
 import java.util.List;
 import java.util.TimeZone;
 
+/*
+    Model for tournaments.
+*/
+
 public class Tournament implements ModelInterface {
     private String _id;
     private List<String> players;
diff --git a/frontend/core/src/com/gameware/game/sprites/LoadingText.java b/frontend/core/src/com/gameware/game/sprites/LoadingText.java
index bb70ce29a4dd5fb3c1b7829a07f069ad9662855e..d709c496f1daa7422978edc8ebcf3712dfc3a5e6 100644
--- a/frontend/core/src/com/gameware/game/sprites/LoadingText.java
+++ b/frontend/core/src/com/gameware/game/sprites/LoadingText.java
@@ -4,6 +4,8 @@ import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.graphics.Texture;
 import com.badlogic.gdx.graphics.g2d.SpriteBatch;
 
+// This is the "Loading..." text that can be seen throughout the application
+
 public class LoadingText extends Sprite {
     private boolean isLoading = false;
     private boolean firstUpdateFinished = false;
diff --git a/frontend/core/src/com/gameware/game/sprites/PauseButton.java b/frontend/core/src/com/gameware/game/sprites/PauseButton.java
index 4105e7effcf306bfbbaa243011858e158afa2a49..ac74936573816e66a52e59c6617f18c2ed2be0ff 100644
--- a/frontend/core/src/com/gameware/game/sprites/PauseButton.java
+++ b/frontend/core/src/com/gameware/game/sprites/PauseButton.java
@@ -7,6 +7,8 @@ import com.badlogic.gdx.math.Vector3;
 
 import javax.xml.soap.Text;
 
+// This is the pause button that is accessible in all minigames
+
 public class PauseButton extends Sprite {
     private Texture blackButtonTexture;
     private Texture whiteButtonTexture;
diff --git a/frontend/core/src/com/gameware/game/sprites/Sprite.java b/frontend/core/src/com/gameware/game/sprites/Sprite.java
index ce9583421d33fcf1dc5eb90b3f3192ab4b958524..1660c0c5912d976966d0fe1bc5e6ec3d5e877e4e 100644
--- a/frontend/core/src/com/gameware/game/sprites/Sprite.java
+++ b/frontend/core/src/com/gameware/game/sprites/Sprite.java
@@ -3,6 +3,13 @@ package com.gameware.game.sprites;
 import com.badlogic.gdx.graphics.g2d.SpriteBatch;
 import com.badlogic.gdx.math.Vector3;
 
+/*
+    Abstract super class/union for game-sprites. Super class instead of interface because of
+    necessary variables all sprites needs to have
+
+    Patterns: Union, Update method
+*/
+
 public abstract class Sprite {
 
     protected Vector3 position;
diff --git a/frontend/core/src/com/gameware/game/sprites/Bubble.java b/frontend/core/src/com/gameware/game/sprites/bubbleWrapSprites/Bubble.java
similarity index 94%
rename from frontend/core/src/com/gameware/game/sprites/Bubble.java
rename to frontend/core/src/com/gameware/game/sprites/bubbleWrapSprites/Bubble.java
index 5374aac1d3c583254efa52c006195f7d23f4cb58..8e00a33b1f9248a88613e33e6eb9448552cdae8f 100644
--- a/frontend/core/src/com/gameware/game/sprites/Bubble.java
+++ b/frontend/core/src/com/gameware/game/sprites/bubbleWrapSprites/Bubble.java
@@ -1,4 +1,4 @@
-package com.gameware.game.sprites;
+package com.gameware.game.sprites.bubbleWrapSprites;
 
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.audio.Sound;
@@ -7,9 +7,13 @@ import com.gameware.game.GameWare;
 
 import com.badlogic.gdx.graphics.g2d.SpriteBatch;
 import com.badlogic.gdx.math.Vector3;
+import com.gameware.game.sprites.Sprite;
+
 import java.util.ArrayList;
 import java.util.Random;
 
+// This is the bubble seen in the Bubble Wrap minigame
+
 public class Bubble extends Sprite {
     private boolean textureChanged = false;
     private ArrayList<Texture> poppedTextures;
diff --git a/frontend/core/src/com/gameware/game/sprites/ColorRushButton.java b/frontend/core/src/com/gameware/game/sprites/colorRushSprites/ColorRushButton.java
similarity index 90%
rename from frontend/core/src/com/gameware/game/sprites/ColorRushButton.java
rename to frontend/core/src/com/gameware/game/sprites/colorRushSprites/ColorRushButton.java
index 19f7370c90a4af2174cb2317bec51fcf08b13e09..0f81ffcc92b60e3d00d8c6a14331dde81bb6df27 100644
--- a/frontend/core/src/com/gameware/game/sprites/ColorRushButton.java
+++ b/frontend/core/src/com/gameware/game/sprites/colorRushSprites/ColorRushButton.java
@@ -1,4 +1,4 @@
-package com.gameware.game.sprites;
+package com.gameware.game.sprites.colorRushSprites;
 
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.audio.Sound;
@@ -6,8 +6,11 @@ import com.badlogic.gdx.graphics.Texture;
 import com.badlogic.gdx.graphics.g2d.SpriteBatch;
 import com.badlogic.gdx.math.Vector3;
 import com.gameware.game.GameWare;
+import com.gameware.game.sprites.Sprite;
 
-public class ColorRushButton extends Sprite{
+// These are the buttons that needs to be pressed according to the matching color of the target in the Color Rush minigame
+
+public class ColorRushButton extends Sprite {
     private Texture mainTexture;
     private Texture disabledTexture;
     private int colorNum;
diff --git a/frontend/core/src/com/gameware/game/sprites/ColorRushTarget.java b/frontend/core/src/com/gameware/game/sprites/colorRushSprites/ColorRushTarget.java
similarity index 93%
rename from frontend/core/src/com/gameware/game/sprites/ColorRushTarget.java
rename to frontend/core/src/com/gameware/game/sprites/colorRushSprites/ColorRushTarget.java
index cbd0da49b3fa89f4c3c1865376db8fc417dc4192..d8c1c5d49ecde0a027ab0872a0ed87d3ba91d9bf 100644
--- a/frontend/core/src/com/gameware/game/sprites/ColorRushTarget.java
+++ b/frontend/core/src/com/gameware/game/sprites/colorRushSprites/ColorRushTarget.java
@@ -1,11 +1,14 @@
-package com.gameware.game.sprites;
+package com.gameware.game.sprites.colorRushSprites;
 
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.graphics.Texture;
 import com.badlogic.gdx.graphics.g2d.SpriteBatch;
 import com.badlogic.gdx.math.Vector3;
+import com.gameware.game.sprites.Sprite;
 
-public class ColorRushTarget extends Sprite{
+// This is the block that you need to press the matching color to remove in the Color Rush minigame
+
+public class ColorRushTarget extends Sprite {
      private int nextHeight;
     private Vector3 velocity;
     private Texture mainTexture;
diff --git a/frontend/core/src/com/gameware/game/sprites/Fruit.java b/frontend/core/src/com/gameware/game/sprites/fruitSlicerSprites/Fruit.java
similarity index 97%
rename from frontend/core/src/com/gameware/game/sprites/Fruit.java
rename to frontend/core/src/com/gameware/game/sprites/fruitSlicerSprites/Fruit.java
index 6f23461d6e6d6c17f336a96b4554dabcaed60aa2..fd6c5a278bd14e3e8a3c81ac49a43f9b7dba82a9 100644
--- a/frontend/core/src/com/gameware/game/sprites/Fruit.java
+++ b/frontend/core/src/com/gameware/game/sprites/fruitSlicerSprites/Fruit.java
@@ -1,11 +1,13 @@
-package com.gameware.game.sprites;
+package com.gameware.game.sprites.fruitSlicerSprites;
 
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.graphics.Texture;
 import com.badlogic.gdx.graphics.g2d.SpriteBatch;
 import com.badlogic.gdx.graphics.g2d.TextureRegion;
 import com.badlogic.gdx.math.Vector3;
+import com.gameware.game.sprites.Sprite;
 
+// This is the fruit that can be chopped in the Fruit Slicer minigame
 
 public class Fruit extends Sprite {
     private Vector3 cutPosition1;
@@ -131,6 +133,7 @@ public class Fruit extends Sprite {
 
     @Override
     public void dispose() {
+        // Nothing to dispose
     }
 
     public boolean isDisposable() {
diff --git a/frontend/core/src/com/gameware/game/sprites/SlicingCircle.java b/frontend/core/src/com/gameware/game/sprites/fruitSlicerSprites/SlicingCircle.java
similarity index 85%
rename from frontend/core/src/com/gameware/game/sprites/SlicingCircle.java
rename to frontend/core/src/com/gameware/game/sprites/fruitSlicerSprites/SlicingCircle.java
index 7ecfcef2268b8847854779495a05cf79532ee06b..b2a84d184243d14e91c155fcda701893b783e37a 100644
--- a/frontend/core/src/com/gameware/game/sprites/SlicingCircle.java
+++ b/frontend/core/src/com/gameware/game/sprites/fruitSlicerSprites/SlicingCircle.java
@@ -1,9 +1,12 @@
-package com.gameware.game.sprites;
+package com.gameware.game.sprites.fruitSlicerSprites;
 
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.graphics.Texture;
 import com.badlogic.gdx.graphics.g2d.SpriteBatch;
 import com.badlogic.gdx.math.Vector3;
+import com.gameware.game.sprites.Sprite;
+
+// This is the circle trail that are left when slicing in the Fruit Slicer minigame
 
 public class SlicingCircle extends Sprite {
     private Texture slicingVFX;
diff --git a/frontend/core/src/com/gameware/game/sprites/ConfirmationBox.java b/frontend/core/src/com/gameware/game/sprites/pauseStateSprites/ConfirmationBox.java
similarity index 89%
rename from frontend/core/src/com/gameware/game/sprites/ConfirmationBox.java
rename to frontend/core/src/com/gameware/game/sprites/pauseStateSprites/ConfirmationBox.java
index 1dd4fd91ce87ed1644a3f7372a95533a0aa370bf..5e88acb27a8b25e7817e461666a08661c7120c0d 100644
--- a/frontend/core/src/com/gameware/game/sprites/ConfirmationBox.java
+++ b/frontend/core/src/com/gameware/game/sprites/pauseStateSprites/ConfirmationBox.java
@@ -1,9 +1,12 @@
-package com.gameware.game.sprites;
+package com.gameware.game.sprites.pauseStateSprites;
 
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.graphics.Texture;
 import com.badlogic.gdx.graphics.g2d.SpriteBatch;
 import com.badlogic.gdx.math.Vector3;
+import com.gameware.game.sprites.Sprite;
+
+// This is the confirmation box when trying to exit a minigame when in the pause state
 
 public class ConfirmationBox extends Sprite {
     private Texture boxTexture;
diff --git a/frontend/core/src/com/gameware/game/sprites/PauseCircle.java b/frontend/core/src/com/gameware/game/sprites/pauseStateSprites/PauseCircle.java
similarity index 92%
rename from frontend/core/src/com/gameware/game/sprites/PauseCircle.java
rename to frontend/core/src/com/gameware/game/sprites/pauseStateSprites/PauseCircle.java
index 2f76c7fbe0d2bf51670f0a343a335e6fd1e6d842..44ab8d171d7d52d9c543d9809418b17214ffdb51 100644
--- a/frontend/core/src/com/gameware/game/sprites/PauseCircle.java
+++ b/frontend/core/src/com/gameware/game/sprites/pauseStateSprites/PauseCircle.java
@@ -1,10 +1,13 @@
-package com.gameware.game.sprites;
+package com.gameware.game.sprites.pauseStateSprites;
 
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.graphics.Color;
 import com.badlogic.gdx.graphics.g2d.SpriteBatch;
 import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
 import com.badlogic.gdx.math.Vector3;
+import com.gameware.game.sprites.Sprite;
+
+// These are the animated circles that can be seen in the background of the pause state
 
 public class PauseCircle extends Sprite {
     private int radius;
diff --git a/frontend/core/src/com/gameware/game/sprites/PauseMenuButton.java b/frontend/core/src/com/gameware/game/sprites/pauseStateSprites/PauseMenuButton.java
similarity index 86%
rename from frontend/core/src/com/gameware/game/sprites/PauseMenuButton.java
rename to frontend/core/src/com/gameware/game/sprites/pauseStateSprites/PauseMenuButton.java
index 7b153868fbcf365c114a19ce8588d20f214f0fa3..8213a34de0e7524261e373ceb505f30893185007 100644
--- a/frontend/core/src/com/gameware/game/sprites/PauseMenuButton.java
+++ b/frontend/core/src/com/gameware/game/sprites/pauseStateSprites/PauseMenuButton.java
@@ -1,8 +1,11 @@
-package com.gameware.game.sprites;
+package com.gameware.game.sprites.pauseStateSprites;
 
 import com.badlogic.gdx.graphics.Texture;
 import com.badlogic.gdx.graphics.g2d.SpriteBatch;
 import com.badlogic.gdx.math.Vector3;
+import com.gameware.game.sprites.Sprite;
+
+// This is the button used for "Resume" and "Exit" in the pause state
 
 public class PauseMenuButton extends Sprite {
     private Texture buttonTexture;
diff --git a/frontend/core/src/com/gameware/game/states/PauseState.java b/frontend/core/src/com/gameware/game/states/PauseState.java
index 3ee77259f693b0b18f22fc01317e14917a45b456..f8832900b10a4578a3019452f4fad9d92f868d70 100644
--- a/frontend/core/src/com/gameware/game/states/PauseState.java
+++ b/frontend/core/src/com/gameware/game/states/PauseState.java
@@ -4,15 +4,25 @@ import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.graphics.Color;
 import com.badlogic.gdx.graphics.Texture;
 import com.badlogic.gdx.graphics.g2d.SpriteBatch;
+import com.gameware.game.GameStateManager;
 import com.gameware.game.GameWare;
-import com.gameware.game.sprites.ConfirmationBox;
+import com.gameware.game.sprites.pauseStateSprites.ConfirmationBox;
 import com.gameware.game.sprites.LoadingText;
-import com.gameware.game.sprites.PauseCircle;
-import com.gameware.game.sprites.PauseMenuButton;
+import com.gameware.game.sprites.pauseStateSprites.PauseCircle;
+import com.gameware.game.sprites.pauseStateSprites.PauseMenuButton;
+import com.gameware.game.states.games.PlayStateUnion;
 
 import java.util.ArrayList;
 import java.util.List;
 
+/*
+    State shown when players pause a game.
+
+    Since it is still inside a game, the group wanted it to have a different look than the other menu states.
+    However it was not a game, so it doesn't extend either the MenuStateUnion or the PlayStateUnion.
+    It is therefore a bit of a special state, kind of in between the menu states and the game states.
+*/
+
 public class PauseState extends State {
 
 //    Data
@@ -33,7 +43,7 @@ public class PauseState extends State {
     private boolean needsConfirmation;
 
 //    Widgets
-    private List<PauseCircle> pauseCircles;
+    private List<PauseCircle> pauseBackgroundCircles;
     private ConfirmationBox confirmationBox;
     private PauseMenuButton resumeButton;
     private PauseMenuButton exitButton;
@@ -54,7 +64,7 @@ public class PauseState extends State {
         this.countdownDurationLeft = 3f;
         this.countdownStarted = false;
 
-        this.pauseCircles = new ArrayList<PauseCircle>();
+        this.pauseBackgroundCircles = new ArrayList<PauseCircle>();
 
         this.pausedGame = pausedGame;
         this.originalFontColor = new Color(this.pausedGame.getFontColor());
@@ -76,7 +86,7 @@ public class PauseState extends State {
 
 
         for(int i = 0; i<25; i++){
-            this.pauseCircles.add(new PauseCircle());
+            this.pauseBackgroundCircles.add(new PauseCircle());
         }
     }
 
@@ -137,7 +147,7 @@ public class PauseState extends State {
         // If the user has pressed the resume button the countdown has started
         if(this.countdownStarted){
             this.countdownDurationLeft -= dt;
-            this.countdownNumberTexture = this.countdownNumbers.get(Math.min(Math.max((int) (this.countdownDurationLeft),0), 3));
+            this.countdownNumberTexture = this.countdownNumbers.get(Math.min(Math.max((int) (this.countdownDurationLeft),0), 2));
 
             // If the countdown has finished we resume the game
             if(this.countdownDurationLeft <= 0){
@@ -148,7 +158,7 @@ public class PauseState extends State {
             }
         }
 
-        for(PauseCircle pc : this.pauseCircles){
+        for(PauseCircle pc : this.pauseBackgroundCircles){
             pc.update(dt);
         }
     }
@@ -164,7 +174,7 @@ public class PauseState extends State {
 
 
         // Animated circles
-        for(PauseCircle pc : pauseCircles){
+        for(PauseCircle pc : pauseBackgroundCircles){
             pc.draw(sb);
         }
 
@@ -204,7 +214,7 @@ public class PauseState extends State {
 
     @Override
     public void dispose() {
-        for(PauseCircle pc : pauseCircles){
+        for(PauseCircle pc : pauseBackgroundCircles){
             pc.dispose();
         }
 
@@ -222,5 +232,9 @@ public class PauseState extends State {
     }
 
     @Override
-    public void reset() { }
+    public void reset() {
+        this.needsConfirmation = false;
+        this.countdownStarted = false;
+        this.countdownDurationLeft = 3f;
+    }
 }
diff --git a/frontend/core/src/com/gameware/game/states/State.java b/frontend/core/src/com/gameware/game/states/State.java
index abcdafa05680509423bbe47497245d2137e60820..c7873f255b2f37435ac8d82b722090cff639f4c3 100644
--- a/frontend/core/src/com/gameware/game/states/State.java
+++ b/frontend/core/src/com/gameware/game/states/State.java
@@ -2,20 +2,27 @@ package com.gameware.game.states;
 
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.audio.Sound;
-import com.badlogic.gdx.graphics.OrthographicCamera;
 import com.badlogic.gdx.graphics.g2d.SpriteBatch;
 import com.badlogic.gdx.scenes.scene2d.Stage;
 import com.badlogic.gdx.scenes.scene2d.ui.Skin;
+import com.gameware.game.GameStateManager;
 import com.gameware.game.GameWare;
 
+/*
+    State is the super class/union of all the states in the application.
+
+    A state has their own logic and rendering. State contains common variables between
+    MenuStateUnion and PlayStateUnion. All states must have their own update method.
+
+    Patterns: State, Union Design, Update method
+*/
+
 public abstract class State {
 
-//    Common variables between MenuStateUnion and PlayStateUnion
 
 //    Data
     protected GameStateManager gsm;
     protected Stage stage = new Stage();
-    protected final OrthographicCamera cam = new OrthographicCamera();
     protected final Skin skin = new Skin(Gdx.files.internal(GameWare.skinFilePath));
 
 //    Sound effects
@@ -23,13 +30,9 @@ public abstract class State {
     protected Sound pauseResumeBtnSound;
     protected Sound pauseStateBtnSound;
 
-//    Variables
-    protected boolean firstTimeRunningUpdate = true;
-
 
     protected State(GameStateManager gsm){
         this.gsm = gsm;
-        cam.setToOrtho(false, Gdx.graphics.getWidth()/2, Gdx.graphics.getHeight()/2);
 
 //        Add sound effects
         this.buttonPressSound = Gdx.audio.newSound(Gdx.files.internal("sfx/button_press.ogg"));
@@ -43,6 +46,7 @@ public abstract class State {
 //    Abstract state methods
     protected abstract void handleInput();
 
+//    Requires all states to have the update method
     public abstract void update(float dt);
 
     public abstract void render(SpriteBatch sb);
diff --git a/frontend/core/src/com/gameware/game/states/BubbleWrapState.java b/frontend/core/src/com/gameware/game/states/games/BubbleWrapState.java
similarity index 92%
rename from frontend/core/src/com/gameware/game/states/BubbleWrapState.java
rename to frontend/core/src/com/gameware/game/states/games/BubbleWrapState.java
index 57bb76cc5dc039027536cc1df779e6f5e90a9f7b..afde425c991f18948eace75c4c73974f1de1742b 100644
--- a/frontend/core/src/com/gameware/game/states/BubbleWrapState.java
+++ b/frontend/core/src/com/gameware/game/states/games/BubbleWrapState.java
@@ -1,9 +1,10 @@
-package com.gameware.game.states;
+package com.gameware.game.states.games;
 
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.graphics.Texture;
 import com.badlogic.gdx.graphics.g2d.SpriteBatch;
-import com.gameware.game.sprites.Bubble;
+import com.gameware.game.sprites.bubbleWrapSprites.Bubble;
+import com.gameware.game.GameStateManager;
 
 import java.util.ArrayList;
 
@@ -27,9 +28,9 @@ public class BubbleWrapState extends PlayStateUnion {
     public BubbleWrapState(GameStateManager gsm) {
         super(gsm);
         super.setPauseButtonWhite();
-        super.setTotalGameTime(20f);
+        super.setTotalTimeLimit(20f);
         super.setFontColorWhite();
-        super.screenshot = new Texture(Gdx.files.internal("gameTextures/BubbleWrap/bubbleWrapPhotoEdit.png"));
+        super.setThumbnail(new Texture(Gdx.files.internal("gameTextures/BubbleWrap/bubbleWrapPhotoEdit.png")));
 
         background = new Texture(Gdx.files.internal("gameTextures/BubbleWrap/bubblewrap_background.jpg"));
         unpopped = new Texture(Gdx.files.internal("gameTextures/BubbleWrap/bubble_unpopped_1.png"));
@@ -61,7 +62,7 @@ public class BubbleWrapState extends PlayStateUnion {
             // Keeps score consistent
             // One point per bubble popped, plus three points for each second of remaining time. Time bonus is only given if the player pops all the bubbles.
             if(this.poppedBubbles == this.bubbles.size()){
-                score = this.poppedBubbles + Math.max(Math.round((super.getTotalGameTime() - super.getCurrentDuration())*3), 0);
+                score = this.poppedBubbles + Math.max(Math.round((super.getTotalTimeLimit() - super.getCurrentDuration())*3), 0);
             }
             else{
                 score = this.poppedBubbles;
diff --git a/frontend/core/src/com/gameware/game/states/ColorRushState.java b/frontend/core/src/com/gameware/game/states/games/ColorRushState.java
similarity index 96%
rename from frontend/core/src/com/gameware/game/states/ColorRushState.java
rename to frontend/core/src/com/gameware/game/states/games/ColorRushState.java
index fe4283d8f0cdfc3bdddf0efec9f0fbec2dd04d31..89f400243a4dd2e62ec3f8edefbf1fa0c867f1d2 100644
--- a/frontend/core/src/com/gameware/game/states/ColorRushState.java
+++ b/frontend/core/src/com/gameware/game/states/games/ColorRushState.java
@@ -1,9 +1,10 @@
-package com.gameware.game.states;
+package com.gameware.game.states.games;
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.graphics.Texture;
 import com.badlogic.gdx.graphics.g2d.SpriteBatch;
-import com.gameware.game.sprites.ColorRushButton;
-import com.gameware.game.sprites.ColorRushTarget;
+import com.gameware.game.sprites.colorRushSprites.ColorRushButton;
+import com.gameware.game.sprites.colorRushSprites.ColorRushTarget;
+import com.gameware.game.GameStateManager;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -25,8 +26,8 @@ public class ColorRushState extends PlayStateUnion {
 
     public ColorRushState(GameStateManager gsm){
         super(gsm);
-        super.screenshot = new Texture(Gdx.files.internal("gameTextures/ColorRush/colorRushPhotoEdit.png"));
-        super.setTotalGameTime(30f);
+        super.setThumbnail(new Texture(Gdx.files.internal("gameTextures/ColorRush/colorRushPhotoEdit.png")));
+        super.setTotalTimeLimit(30f);
 
         // Creates the background
         this.background = new Texture(Gdx.files.internal("gameTextures/ColorRush/ColorRushBackground.jpg"));
diff --git a/frontend/core/src/com/gameware/game/states/FruitSlicerState.java b/frontend/core/src/com/gameware/game/states/games/FruitSlicerState.java
similarity index 93%
rename from frontend/core/src/com/gameware/game/states/FruitSlicerState.java
rename to frontend/core/src/com/gameware/game/states/games/FruitSlicerState.java
index 80bf25d96a3e64508559ea08d73921df0eaefb6d..05782ab0443383590208286efde4013788b0dbad 100644
--- a/frontend/core/src/com/gameware/game/states/FruitSlicerState.java
+++ b/frontend/core/src/com/gameware/game/states/games/FruitSlicerState.java
@@ -1,4 +1,4 @@
-package com.gameware.game.states;
+package com.gameware.game.states.games;
 
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.audio.Sound;
@@ -6,8 +6,9 @@ import com.badlogic.gdx.graphics.Texture;
 import com.badlogic.gdx.graphics.g2d.SpriteBatch;
 import com.badlogic.gdx.math.Vector3;
 import com.gameware.game.GameWare;
-import com.gameware.game.sprites.Fruit;
-import com.gameware.game.sprites.SlicingCircle;
+import com.gameware.game.sprites.fruitSlicerSprites.Fruit;
+import com.gameware.game.sprites.fruitSlicerSprites.SlicingCircle;
+import com.gameware.game.GameStateManager;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -32,8 +33,10 @@ public class FruitSlicerState extends PlayStateUnion {
 
     public FruitSlicerState(GameStateManager gsm) {
         super(gsm);
-        super.setTotalGameTime(60f);
-        super.screenshot = new Texture(Gdx.files.internal("gameTextures/FruitSlicer/FruitSlicerPhotoEdit.png"));
+        super.setTotalTimeLimit(45f);
+        super.setThumbnail(new Texture(Gdx.files.internal("gameTextures/FruitSlicer/FruitSlicerPhotoEdit.png")));
+        super.setFontColorWhite();
+        super.setPauseButtonWhite();
 
         this.sliceWhooshSound = Gdx.audio.newSound(Gdx.files.internal("sfx/FruitSlicerWhooshSound.mp3"));
         this.sliceSquishSound = Gdx.audio.newSound(Gdx.files.internal("sfx/FruitSlicerSquishSound.mp3"));
@@ -77,6 +80,12 @@ public class FruitSlicerState extends PlayStateUnion {
             this.oldTouchPosition.x = touchX;
             this.oldTouchPosition.y = touchY;
         }
+
+
+        // Adds new slicing circles if the user is touching
+        if(Gdx.input.isTouched()) {
+            this.slicingCircles.add(new SlicingCircle(Gdx.input.getX(), Gdx.graphics.getHeight() - Gdx.input.getY(), this.slicingCircleVFX));
+        }
     }
 
     @Override
@@ -86,11 +95,6 @@ public class FruitSlicerState extends PlayStateUnion {
 
         this.handleInput();
 
-        // Adds new slicing circles if the user is touching
-        if(Gdx.input.isTouched()) {
-            this.slicingCircles.add(new SlicingCircle(Gdx.input.getX(), Gdx.graphics.getHeight() - Gdx.input.getY(), this.slicingCircleVFX));
-        }
-
         // Updates the slicing circles
         for(SlicingCircle slicingCircle : this.slicingCircles){
             slicingCircle.update(dt);
@@ -104,7 +108,7 @@ public class FruitSlicerState extends PlayStateUnion {
         this.timeSinceLastEmit += dt;
 
         // Increases the emiting frequency towards the endingEmitFrequency as the game gets closer to the end
-        float currentFrequency = (float) (this.startingEmitFrequency - (this.startingEmitFrequency - this.endingEmitFrequency) * Math.min(super.getCurrentDuration() / (super.getTotalGameTime() * 0.6), 1));
+        float currentFrequency = (float) (this.startingEmitFrequency - (this.startingEmitFrequency - this.endingEmitFrequency) * Math.min(super.getCurrentDuration() / (super.getTotalTimeLimit() * 0.6), 1));
 
         // Emits a new fruit
         if(this.timeSinceLastEmit > currentFrequency){
@@ -164,7 +168,7 @@ public class FruitSlicerState extends PlayStateUnion {
         // Four different emit modes: from left, from right, from entire bottom, and from bottom center with different velocity angles
         int emitMode = (int) (Math.random() * 4);
         Fruit fruit;
-        Texture fruitTexture = this.fruitTextures.get((int) (Math.random() * 20));
+        Texture fruitTexture = this.fruitTextures.get((int) (Math.random() * this.fruitTextures.size()));
         Vector3 velocity = new Vector3(Gdx.graphics.getWidth() * 3 / 4, 0, 0);
 
         int x, y, emitAngle;
diff --git a/frontend/core/src/com/gameware/game/states/PlayStateUnion.java b/frontend/core/src/com/gameware/game/states/games/PlayStateUnion.java
similarity index 82%
rename from frontend/core/src/com/gameware/game/states/PlayStateUnion.java
rename to frontend/core/src/com/gameware/game/states/games/PlayStateUnion.java
index ec0567119c59b51338d42b2fa202fe999a896bd4..30ddf92722b5cbe49fa97a1336df39ed18cb3b8c 100644
--- a/frontend/core/src/com/gameware/game/states/PlayStateUnion.java
+++ b/frontend/core/src/com/gameware/game/states/games/PlayStateUnion.java
@@ -1,4 +1,4 @@
-package com.gameware.game.states;
+package com.gameware.game.states.games;
 
 
 import com.badlogic.gdx.Gdx;
@@ -14,17 +14,28 @@ import com.gameware.game.models.RoundCheck;
 import com.gameware.game.models.Tournament;
 import com.gameware.game.sprites.LoadingText;
 import com.gameware.game.sprites.PauseButton;
-import com.gameware.game.states.FinishedTournamentState;
-import com.gameware.game.states.GameStateManager;
+import com.gameware.game.states.menus.FinishedTournamentState;
+import com.gameware.game.GameStateManager;
 import com.gameware.game.states.PauseState;
-import com.gameware.game.states.ScoreState;
-import com.gameware.game.states.SinglePlayerSelectGameState;
+import com.gameware.game.states.menus.ScoreState;
+import com.gameware.game.states.menus.SinglePlayerSelectGameState;
 import com.gameware.game.states.State;
-import com.gameware.game.states.ViewTournamentState;
+import com.gameware.game.states.menus.ViewTournamentState;
 
 import java.io.IOException;
 import java.util.List;
 
+/*
+       The PlayStateUnion class is the Union of all game states.
+
+       If you are going to create a game, it has to extend this class. It has necessary variables
+       and methods, such as the gameDone() method which changes to the correct menu state.
+       Has the reset method abstract because all games must have a reset method, however it will
+       be different for each game.
+
+        Patterns: Union Design, (State)
+ */
+
 
 public abstract class PlayStateUnion extends State {
 
@@ -36,11 +47,11 @@ public abstract class PlayStateUnion extends State {
 
 //    Game values
     private int score;
-    protected float totalGameTime = 0f;
+    protected float totalTimeLimit = 0f;
     protected float currentDuration = 0f;
 
 //    Game objects
-    protected Texture screenshot = null;
+    private Texture thumbnail = new Texture(Gdx.files.internal("gameTextures/placeholderThumbnail.png"));
     private PauseButton pauseButton;
     private LoadingText loadingText = new LoadingText();
     private BitmapFont font;
@@ -60,7 +71,7 @@ public abstract class PlayStateUnion extends State {
         // Default font (black color)
         font = new BitmapFont();
         font.setColor(Color.BLACK);
-        font.getData().setScale((float) (Gdx.graphics.getWidth()/GameWare.WIDTH*1.75));
+        font.getData().setScale((float) (Gdx.graphics.getWidth()/GameWare.WIDTH*2.5));
     }
 
 //    Override methods
@@ -79,13 +90,13 @@ public abstract class PlayStateUnion extends State {
         this.loadingText.update(dt);
 
         // If the game has a total game time (if the game is time-based)
-        if(this.totalGameTime > 0f) {
+        if(this.totalTimeLimit > 0f) {
             // Increases the current duration, used to keep track of the play duration and stop the game
             // after a while
             this.currentDuration += dt;
 
             // Set score and start rendering the loading text if the game is over
-            if (this.currentDuration > this.totalGameTime) {
+            if (this.currentDuration > this.totalTimeLimit) {
                 this.setGameFinished();
                 return;
             }
@@ -116,24 +127,26 @@ public abstract class PlayStateUnion extends State {
         this.loadingText.dispose();
         this.pauseButton.dispose();
         this.font.dispose();
+        this.thumbnail.dispose();
     }
 
     @Override
-    public void reset(){}
+    public abstract void reset();
 
 
     // Renders the text - This is used by this class' render method as well as by the PauseState
     public void renderText(SpriteBatch sb){
         // Shows the current duration if it's supposed to be visible and the game is time-based
-        if(this.timeLeftVisible && this.totalGameTime > 0f) {
+        if(this.timeLeftVisible && this.totalTimeLimit > 0f) {
             sb.begin();
             // Time left
-            this.font.draw(sb, "Time: " + String.valueOf(Math.max(Math.round((this.totalGameTime - this.currentDuration) * 100), 0.00) / 100.0), Gdx.graphics.getWidth() / 40, Gdx.graphics.getHeight() - Gdx.graphics.getHeight() / 40 - Gdx.graphics.getHeight() / 60);
+            this.font.draw(sb, "Time: " + String.valueOf(Math.max(Math.round((this.totalTimeLimit - this.currentDuration) * 100), 0.00) / 100.0), Gdx.graphics.getWidth() / 40, Gdx.graphics.getHeight() - Gdx.graphics.getHeight() / 20);
             sb.end();
         }
 
         if(this.currentScoreVisible){
             sb.begin();
+            //Score
             this.font.draw(sb, "Score: " + String.valueOf(this.score), Gdx.graphics.getWidth() / 40, Gdx.graphics.getHeight() - Gdx.graphics.getHeight() / 100);
 
             sb.end();
@@ -241,14 +254,19 @@ public abstract class PlayStateUnion extends State {
         this.font.setColor(color);
     }
 
-    public void setTotalGameTime(float totalGameTime){
-        this.totalGameTime = totalGameTime;
+    public void setTotalTimeLimit(float totalTimeLimit){
+        this.totalTimeLimit = totalTimeLimit;
     }
 
     public void setCurrentDuration(float currentDuration){
         this.currentDuration = currentDuration;
     }
 
+    public void setThumbnail(Texture thumbnailTexture){
+        this.thumbnail.dispose();
+        this.thumbnail = thumbnailTexture;
+    }
+
 //    Getters
     public Color getFontColor(){
     return this.font.getColor();
@@ -258,12 +276,12 @@ public abstract class PlayStateUnion extends State {
         return this.currentDuration;
     }
 
-    public float getTotalGameTime(){
-        return this.totalGameTime;
+    public float getTotalTimeLimit(){
+        return this.totalTimeLimit;
     }
 
-    public Texture getScreenshot(){
-        return screenshot;
+    public Texture getThumbnail(){
+        return thumbnail;
     }
 
 //    Hide and show methods:
diff --git a/frontend/core/src/com/gameware/game/states/CreateJoinTournamentState.java b/frontend/core/src/com/gameware/game/states/menus/CreateJoinTournamentState.java
similarity index 97%
rename from frontend/core/src/com/gameware/game/states/CreateJoinTournamentState.java
rename to frontend/core/src/com/gameware/game/states/menus/CreateJoinTournamentState.java
index 1d5e5f85b120271b38ff21a93ae33d477f279a16..e848120044648983b4369951873089659b59b148 100644
--- a/frontend/core/src/com/gameware/game/states/CreateJoinTournamentState.java
+++ b/frontend/core/src/com/gameware/game/states/menus/CreateJoinTournamentState.java
@@ -1,4 +1,4 @@
-package com.gameware.game.states;
+package com.gameware.game.states.menus;
 
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.Input;
@@ -21,11 +21,21 @@ import com.gameware.game.models.Alert;
 import com.gameware.game.models.Round;
 import com.gameware.game.models.Tournament;
 import com.gameware.game.sprites.LoadingText;
+import com.gameware.game.GameStateManager;
 
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
+/*
+    State where players can view, join and enter tournaments, or go to the create new state.
+
+    Patterns: Publish-Subscribe, Delegation
+
+    Publish-Subscribe and delegation is used on the buttons. Where P-S is used by utilizing
+    click listeners and delegation is used by the button to delegate what happens to this state.
+*/
+
 public class CreateJoinTournamentState extends MenuStateUnion {
 
 //    Data
diff --git a/frontend/core/src/com/gameware/game/states/CreateNewTournamentState.java b/frontend/core/src/com/gameware/game/states/menus/CreateNewTournamentState.java
similarity index 96%
rename from frontend/core/src/com/gameware/game/states/CreateNewTournamentState.java
rename to frontend/core/src/com/gameware/game/states/menus/CreateNewTournamentState.java
index 8a8ee1ff1155b1f6321af582e320da089db26bc3..555f58ead7e4a281844d5b0544cfcba763fde3fe 100644
--- a/frontend/core/src/com/gameware/game/states/CreateNewTournamentState.java
+++ b/frontend/core/src/com/gameware/game/states/menus/CreateNewTournamentState.java
@@ -1,4 +1,4 @@
-package com.gameware.game.states;
+package com.gameware.game.states.menus;
 
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.Input;
@@ -22,11 +22,22 @@ import com.gameware.game.models.Game;
 import com.gameware.game.models.Round;
 import com.gameware.game.models.Tournament;
 import com.gameware.game.sprites.LoadingText;
+import com.gameware.game.GameStateManager;
 
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
+/*
+    State where players can create new tournaments. This state contains two pages, to not
+    many unnecessary many states.
+
+    Patterns: Publish-Subscribe, Delegation
+
+    Publish-Subscribe and delegation is used on the buttons. Where P-S is used by utilizing
+    click listeners and delegation is used by the button to delegate what happens to this state.
+*/
+
 public class CreateNewTournamentState extends MenuStateUnion {
 
 //    Data
@@ -176,7 +187,7 @@ public class CreateNewTournamentState extends MenuStateUnion {
                 continue;
             }
 
-            innerTable.add(new Image(GameWare.getInstance().getGameIdToPlayState().get(g.getId()).getScreenshot())).width(imageWidthAndHeigh).height(imageWidthAndHeigh);
+            innerTable.add(new Image(GameWare.getInstance().getGameIdToPlayState().get(g.getId()).getThumbnail())).width(imageWidthAndHeigh).height(imageWidthAndHeigh);
 
             Table innerInnerTable = new Table();
             innerInnerTable.defaults().space(spacingLittle);
diff --git a/frontend/core/src/com/gameware/game/states/FinishedTournamentState.java b/frontend/core/src/com/gameware/game/states/menus/FinishedTournamentState.java
similarity index 93%
rename from frontend/core/src/com/gameware/game/states/FinishedTournamentState.java
rename to frontend/core/src/com/gameware/game/states/menus/FinishedTournamentState.java
index 922e38da103fca8a382ffdd9dcacde6ebf2cf816..4640446c2b09af562c1a0437cb5607c76639968d 100644
--- a/frontend/core/src/com/gameware/game/states/FinishedTournamentState.java
+++ b/frontend/core/src/com/gameware/game/states/menus/FinishedTournamentState.java
@@ -1,4 +1,4 @@
-package com.gameware.game.states;
+package com.gameware.game.states.menus;
 
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.Input;
@@ -14,10 +14,20 @@ import com.gameware.game.GameWare;
 import com.gameware.game.QueryIntermediate;
 import com.gameware.game.models.Point;
 import com.gameware.game.models.Tournament;
+import com.gameware.game.GameStateManager;
 
 import java.util.ArrayList;
 import java.util.List;
 
+/*
+    State where players can view the tournament results.
+
+    Patterns: Publish-Subscribe, Delegation
+
+    Publish-Subscribe and delegation is used on the buttons. Where P-S is used by utilizing
+    click listeners and delegation is used by the button to delegate what happens to this state.
+*/
+
 public class FinishedTournamentState extends MenuStateUnion {
 
 //    Data
@@ -41,7 +51,6 @@ public class FinishedTournamentState extends MenuStateUnion {
     private final Color scrollPaneBGColor = Color.GOLD;
 
     private Dialog dialog;
-    private Dialog dialogTimeOut;
 
 
     public FinishedTournamentState(GameStateManager gsm, Tournament tournament) {
diff --git a/frontend/core/src/com/gameware/game/states/LoginState.java b/frontend/core/src/com/gameware/game/states/menus/LoginState.java
similarity index 96%
rename from frontend/core/src/com/gameware/game/states/LoginState.java
rename to frontend/core/src/com/gameware/game/states/menus/LoginState.java
index 2b35a1ff0f86fc147ed5160fe1f816d450848738..868d65c453162ab650d4d80e02b2834ae3af030c 100644
--- a/frontend/core/src/com/gameware/game/states/LoginState.java
+++ b/frontend/core/src/com/gameware/game/states/menus/LoginState.java
@@ -1,4 +1,4 @@
-package com.gameware.game.states;
+package com.gameware.game.states.menus;
 
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.Input;
@@ -14,10 +14,21 @@ import com.gameware.game.GameWare;
 import com.gameware.game.QueryIntermediate;
 import com.gameware.game.models.Player;
 import com.gameware.game.sprites.LoadingText;
+import com.gameware.game.GameStateManager;
 
 import java.io.IOException;
 import java.util.NoSuchElementException;
 
+/*
+    State where players can log in or create new user. This state contains two pages, to not
+    many unnecessary many states.
+
+    Patterns: Publish-Subscribe, Delegation
+
+    Publish-Subscribe and delegation is used on the buttons. Where P-S is used by utilizing
+    click listeners and delegation is used by the button to delegate what happens to this state.
+*/
+
 public class LoginState extends MenuStateUnion {
 
 //    Labels
diff --git a/frontend/core/src/com/gameware/game/states/MenuState.java b/frontend/core/src/com/gameware/game/states/menus/MenuState.java
similarity index 94%
rename from frontend/core/src/com/gameware/game/states/MenuState.java
rename to frontend/core/src/com/gameware/game/states/menus/MenuState.java
index 4d3972c985f292b5b50c39a4b6864fb6e7c41212..2f90d59fb95f5045a7e96f886e29d264ca15b4f9 100644
--- a/frontend/core/src/com/gameware/game/states/MenuState.java
+++ b/frontend/core/src/com/gameware/game/states/menus/MenuState.java
@@ -1,4 +1,4 @@
-package com.gameware.game.states;
+package com.gameware.game.states.menus;
 
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.Input;
@@ -14,6 +14,17 @@ import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
 import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;
 import com.gameware.game.GameWare;
 import com.gameware.game.sprites.LoadingText;
+import com.gameware.game.GameStateManager;
+
+/*
+    The main menu state, where players can either choose sinple-player, multiplayer, high scores,
+    options or log out.
+
+    Patterns: Publish-Subscribe, Delegation
+
+    Publish-Subscribe and delegation is used on the buttons. Where P-S is used by utilizing
+    click listeners and delegation is used by the button to delegate what happens to this state.
+*/
 
 public class MenuState extends MenuStateUnion {
 
diff --git a/frontend/core/src/com/gameware/game/states/MenuStateUnion.java b/frontend/core/src/com/gameware/game/states/menus/MenuStateUnion.java
similarity index 83%
rename from frontend/core/src/com/gameware/game/states/MenuStateUnion.java
rename to frontend/core/src/com/gameware/game/states/menus/MenuStateUnion.java
index 6c5b77fde6e90ad9834574ee00665acdf1bb0386..129e015e3f67bb35601662efdbb517919f7731a7 100644
--- a/frontend/core/src/com/gameware/game/states/MenuStateUnion.java
+++ b/frontend/core/src/com/gameware/game/states/menus/MenuStateUnion.java
@@ -1,4 +1,4 @@
-package com.gameware.game.states;
+package com.gameware.game.states.menus;
 
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.audio.Sound;
@@ -17,13 +17,27 @@ import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
 import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;
 import com.badlogic.gdx.utils.Align;
 import com.gameware.game.GameWare;
+import com.gameware.game.GameStateManager;
+import com.gameware.game.states.State;
 
-public abstract class MenuStateUnion extends State{
+
+/*
+    The MenuStateUnion class is the Union of all menu states.
+
+    It contains size variables, common menu widget methods, and abstract method makeStage.
+    Contains default implementations of the abstract methods inherited from State.
+    Uses the LibGDX Stage class, and delegates methods such as render and dispose.
+
+    Patterns: Union, (State), (Delegation)
+ */
+
+public abstract class MenuStateUnion extends State {
 
     //    Font
-    protected final float fontScale = 3f;
-    protected final float tinierTitleFontBigScale = 1.5f;
-    protected final float titleFontBigScale = 2.5f;
+    protected final float scaleRatio = Float.valueOf(Gdx.graphics.getWidth()) / 1080f;
+    protected final float fontScale = 3f * scaleRatio;
+    protected final float tinierTitleFontBigScale = 1.5f * scaleRatio;
+    protected final float titleFontBigScale = 2.5f * scaleRatio;
 
     //    Spacing
     protected final float spacingLittle = Gdx.graphics.getHeight()/50;
@@ -54,10 +68,16 @@ public abstract class MenuStateUnion extends State{
     //    Sound Effects
     protected Sound checkBoxSound;
 
+    //    Variables
+    private boolean firstTimeRunningUpdate = true;
+
 
     public MenuStateUnion(GameStateManager gsm){
         super(gsm);
+
+        // Scales the font according to the ratio between the screen width and the default 1080 width
         skin.getFont("font").getData().setScale(fontScale);
+        skin.getFont("font-big").getData().setScale(this.scaleRatio);
 
 //        Add sound effects
         this.checkBoxSound = Gdx.audio.newSound(Gdx.files.internal("sfx/check_box.ogg"));
@@ -89,6 +109,7 @@ public abstract class MenuStateUnion extends State{
         stage.dispose();
     }
 
+//    The default reset is empty since not all states has anything to reset
     @Override
     public void reset(){}
 
diff --git a/frontend/core/src/com/gameware/game/states/OptionsState.java b/frontend/core/src/com/gameware/game/states/menus/OptionsState.java
similarity index 91%
rename from frontend/core/src/com/gameware/game/states/OptionsState.java
rename to frontend/core/src/com/gameware/game/states/menus/OptionsState.java
index 495cd0be7ee5c379582af84d48388b3403e95100..7625fe818c3ba7d41bf1a932a3b85b9ccb656c0a 100644
--- a/frontend/core/src/com/gameware/game/states/OptionsState.java
+++ b/frontend/core/src/com/gameware/game/states/menus/OptionsState.java
@@ -1,4 +1,4 @@
-package com.gameware.game.states;
+package com.gameware.game.states.menus;
 
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.Input;
@@ -10,7 +10,16 @@ import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
 import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
 import com.badlogic.gdx.utils.Scaling;
 import com.gameware.game.GameWare;
+import com.gameware.game.GameStateManager;
 
+/*
+    State where players can edit the options of the game
+
+    Patterns: Publish-Subscribe, Delegation
+
+    Publish-Subscribe and delegation is used on the buttons/checkboxes. Where P-S is used by utilizing
+    click listeners and delegation is used by the button/checkbox to delegate what happens to this state.
+*/
 
 public class OptionsState extends MenuStateUnion {
 
diff --git a/frontend/core/src/com/gameware/game/states/ScoreState.java b/frontend/core/src/com/gameware/game/states/menus/ScoreState.java
similarity index 90%
rename from frontend/core/src/com/gameware/game/states/ScoreState.java
rename to frontend/core/src/com/gameware/game/states/menus/ScoreState.java
index 35b8b7e5ddfc79ea71fc6a24056b12ca6bfe6d2b..f8d72b9825d5e1e8aae623d0586eceecdd1582ef 100644
--- a/frontend/core/src/com/gameware/game/states/ScoreState.java
+++ b/frontend/core/src/com/gameware/game/states/menus/ScoreState.java
@@ -1,4 +1,4 @@
-package com.gameware.game.states;
+package com.gameware.game.states.menus;
 
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.graphics.g2d.GlyphLayout;
@@ -10,6 +10,12 @@ import com.badlogic.gdx.scenes.scene2d.ui.Label;
 import com.badlogic.gdx.scenes.scene2d.ui.Table;
 import com.badlogic.gdx.utils.Align;
 import com.gameware.game.GameWare;
+import com.gameware.game.GameStateManager;
+import com.gameware.game.states.State;
+
+/*
+    State after a game is over, showing the player which score they got on the game.
+*/
 
 public class ScoreState extends MenuStateUnion {
 
@@ -33,6 +39,7 @@ public class ScoreState extends MenuStateUnion {
         scoreLabel.setText(score+"");
         continueLabel.getColor().a = 0;
 
+//        GlyphLayout used to calculate the size of the label to scale it properly
         GlyphLayout g = new GlyphLayout();
         g.setText(skin.getFont("font-big"), score+"");
         scoreLabelDifferance = (g.width - (g.width*titleFontBigScale*2))/2;
diff --git a/frontend/core/src/com/gameware/game/states/SinglePlayerSelectGameState.java b/frontend/core/src/com/gameware/game/states/menus/SinglePlayerSelectGameState.java
similarity index 86%
rename from frontend/core/src/com/gameware/game/states/SinglePlayerSelectGameState.java
rename to frontend/core/src/com/gameware/game/states/menus/SinglePlayerSelectGameState.java
index 29b9b834d38b5b91c805d6af3fbea9c767427bde..25e948c250bec321cf2a2f911f54d9179c4af543 100644
--- a/frontend/core/src/com/gameware/game/states/SinglePlayerSelectGameState.java
+++ b/frontend/core/src/com/gameware/game/states/menus/SinglePlayerSelectGameState.java
@@ -1,4 +1,4 @@
-package com.gameware.game.states;
+package com.gameware.game.states.menus;
 
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.Input;
@@ -11,12 +11,23 @@ import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
 import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
 import com.gameware.game.GameWare;
 import com.gameware.game.models.Game;
+import com.gameware.game.GameStateManager;
+import com.gameware.game.states.games.PlayStateUnion;
 
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
+/*
+    State where players can choose which game they want to play.
+
+    Patterns: Publish-Subscribe, Delegation
+
+    Publish-Subscribe and delegation is used on the buttons. Where P-S is used by utilizing
+    click listeners and delegation is used by the button to delegate what happens to this state.
+*/
+
 public class SinglePlayerSelectGameState extends MenuStateUnion {
 
 //    Data
@@ -71,7 +82,7 @@ public class SinglePlayerSelectGameState extends MenuStateUnion {
         innerTable.setBackground(backgroundTableBlueRounded);
         innerTable.columnDefaults(0).spaceRight(spacingLittle);
 
-        if(games.size()==0){
+        if(games.isEmpty()){
 //            If the try failed, and no games found
             innerTable.add(noGamesLabel).pad(padding);
         }else {
@@ -79,7 +90,7 @@ public class SinglePlayerSelectGameState extends MenuStateUnion {
                 if(GameWare.getInstance().getGameIdToPlayState().get(g.getId()) == null){
                     continue;
                 }
-                innerTable.add(new Image(GameWare.getInstance().getGameIdToPlayState().get(g.getId()).getScreenshot())).width(imageWidthAndHeigh).height(imageWidthAndHeigh).pad(spacingLittle);
+                innerTable.add(new Image(GameWare.getInstance().getGameIdToPlayState().get(g.getId()).getThumbnail())).width(imageWidthAndHeigh).height(imageWidthAndHeigh).pad(spacingLittle);
 
                 Table innerInnerTable = new Table();
                 innerInnerTable.add(makeTableWithLabelAndQuestionIcon(new Label(g.getName(), skin), makeQuestionIconDialog(new Label(g.getExplanation().replaceAll("\\\\n", "\n"), skin)))).spaceBottom(spacingLittle);
@@ -105,7 +116,7 @@ public class SinglePlayerSelectGameState extends MenuStateUnion {
         return backBtn;
     }
 
-    private void handleGameBtnClick(State state){
+    private void handleGameBtnClick(PlayStateUnion state){
         if(GameWare.getInstance().isSoundEffectsOn()){ buttonPressSound.play(); }
         gsm.set(state);
     }
@@ -125,7 +136,7 @@ public class SinglePlayerSelectGameState extends MenuStateUnion {
         @Override
         public void clicked(InputEvent event, float x, float y) {
             Map<String, PlayStateUnion> map = GameWare.getInstance().getGameIdToPlayState();
-            State s = map.get(game.getId());
+            PlayStateUnion s = map.get(game.getId());
             handleGameBtnClick(s);
         };
     }
diff --git a/frontend/core/src/com/gameware/game/states/TournamentHighScoreState.java b/frontend/core/src/com/gameware/game/states/menus/TournamentHighScoreState.java
similarity index 92%
rename from frontend/core/src/com/gameware/game/states/TournamentHighScoreState.java
rename to frontend/core/src/com/gameware/game/states/menus/TournamentHighScoreState.java
index 1aefbcd25482a795aa650aeefc15ace9d87c8f6d..3691ae689758e7184b5e034ef95bd38396eb0d2a 100644
--- a/frontend/core/src/com/gameware/game/states/TournamentHighScoreState.java
+++ b/frontend/core/src/com/gameware/game/states/menus/TournamentHighScoreState.java
@@ -1,4 +1,4 @@
-package com.gameware.game.states;
+package com.gameware.game.states.menus;
 
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.Input;
@@ -13,10 +13,20 @@ import com.gameware.game.QueryIntermediate;
 import com.gameware.game.models.Point;
 import com.gameware.game.models.Round;
 import com.gameware.game.models.Tournament;
+import com.gameware.game.GameStateManager;
 
 import java.util.ArrayList;
 import java.util.List;
 
+/*
+    State where players can view the current scores in a tournament.
+
+    Patterns: Publish-Subscribe, Delegation
+
+    Publish-Subscribe and delegation is used on the buttons. Where P-S is used by utilizing
+    click listeners and delegation is used by the button to delegate what happens to this state.
+*/
+
 public class TournamentHighScoreState extends MenuStateUnion {
 
 //    Data
diff --git a/frontend/core/src/com/gameware/game/states/ViewHighScoreForGameState.java b/frontend/core/src/com/gameware/game/states/menus/ViewHighScoreForGameState.java
similarity index 93%
rename from frontend/core/src/com/gameware/game/states/ViewHighScoreForGameState.java
rename to frontend/core/src/com/gameware/game/states/menus/ViewHighScoreForGameState.java
index 42d1c81f29208ad2af760db2e340711d273b6593..b709839a198afa9c0c654cc781ccb1c600283943 100644
--- a/frontend/core/src/com/gameware/game/states/ViewHighScoreForGameState.java
+++ b/frontend/core/src/com/gameware/game/states/menus/ViewHighScoreForGameState.java
@@ -1,4 +1,4 @@
-package com.gameware.game.states;
+package com.gameware.game.states.menus;
 
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.Input;
@@ -12,12 +12,22 @@ import com.gameware.game.GameWare;
 import com.gameware.game.QueryIntermediate;
 import com.gameware.game.models.Game;
 import com.gameware.game.models.Highscore;
+import com.gameware.game.GameStateManager;
 
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.NoSuchElementException;
 
+/*
+    State where players can view high scores for a specified game
+
+    Patterns: Publish-Subscribe, Delegation
+
+    Publish-Subscribe and delegation is used on the buttons. Where P-S is used by utilizing
+    click listeners and delegation is used by the button to delegate what happens to this state.
+*/
+
 public class ViewHighScoreForGameState extends MenuStateUnion {
 
 //    Data
diff --git a/frontend/core/src/com/gameware/game/states/ViewHighScoreState.java b/frontend/core/src/com/gameware/game/states/menus/ViewHighScoreState.java
similarity index 91%
rename from frontend/core/src/com/gameware/game/states/ViewHighScoreState.java
rename to frontend/core/src/com/gameware/game/states/menus/ViewHighScoreState.java
index a3279667452fbfdc2749edfbac91304f6e9e0202..5821abe264a4ebd19efefed7e08c2e6d389d4a51 100644
--- a/frontend/core/src/com/gameware/game/states/ViewHighScoreState.java
+++ b/frontend/core/src/com/gameware/game/states/menus/ViewHighScoreState.java
@@ -1,4 +1,4 @@
-package com.gameware.game.states;
+package com.gameware.game.states.menus;
 
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.Input;
@@ -17,9 +17,19 @@ import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
 import com.gameware.game.GameWare;
 import com.gameware.game.models.Game;
 import com.gameware.game.sprites.LoadingText;
+import com.gameware.game.GameStateManager;
 
 import java.io.IOException;
 
+/*
+    State where players can choose which game they want to view high scores for
+
+    Patterns: Publish-Subscribe, Delegation
+
+    Publish-Subscribe and delegation is used on the buttons. Where P-S is used by utilizing
+    click listeners and delegation is used by the button to delegate what happens to this state.
+*/
+
 public class ViewHighScoreState extends MenuStateUnion {
 
 //    Data
@@ -87,7 +97,7 @@ public class ViewHighScoreState extends MenuStateUnion {
                 if(GameWare.getInstance().getGameIdToPlayState().get(g.getId()) == null){
                     continue;
                 }
-                innerTable.add(new Image(GameWare.getInstance().getGameIdToPlayState().get(g.getId()).getScreenshot())).width(imageWidthAndHeigh).height(imageWidthAndHeigh).pad(spacingLittle);
+                innerTable.add(new Image(GameWare.getInstance().getGameIdToPlayState().get(g.getId()).getThumbnail())).width(imageWidthAndHeigh).height(imageWidthAndHeigh).pad(spacingLittle);
 
                 Table innerInnerTable = new Table();
                 innerInnerTable.add(makeTableWithLabelAndQuestionIcon(new Label(g.getName(), skin), makeQuestionIconDialog(new Label(g.getExplanation().replaceAll("\\\\n", "\n"), skin)))).spaceBottom(spacingLittle);
diff --git a/frontend/core/src/com/gameware/game/states/ViewTournamentState.java b/frontend/core/src/com/gameware/game/states/menus/ViewTournamentState.java
similarity index 93%
rename from frontend/core/src/com/gameware/game/states/ViewTournamentState.java
rename to frontend/core/src/com/gameware/game/states/menus/ViewTournamentState.java
index fe649e3ea9a3560a97269316211b473ef6db0269..133b275beab7c1fe9e55841c6b4d3a43633b5896 100644
--- a/frontend/core/src/com/gameware/game/states/ViewTournamentState.java
+++ b/frontend/core/src/com/gameware/game/states/menus/ViewTournamentState.java
@@ -1,4 +1,4 @@
-package com.gameware.game.states;
+package com.gameware.game.states.menus;
 
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.Input;
@@ -20,10 +20,22 @@ import com.gameware.game.models.Game;
 import com.gameware.game.models.Round;
 import com.gameware.game.models.Tournament;
 import com.gameware.game.sprites.LoadingText;
+import com.gameware.game.GameStateManager;
+import com.gameware.game.states.games.PlayStateUnion;
 
 import java.io.IOException;
 import java.util.List;
 
+/*
+    State where players can view a specified tournament, from there they can play their round,
+    leave, or go to TournamentHighScoreState.
+
+    Patterns: Publish-Subscribe, Delegation
+
+    Publish-Subscribe and delegation is used on the buttons. Where P-S is used by utilizing
+    click listeners and delegation is used by the button to delegate what happens to this state.
+*/
+
 public class ViewTournamentState extends MenuStateUnion {
 
 //    Data
@@ -109,7 +121,7 @@ public class ViewTournamentState extends MenuStateUnion {
         currentRoundTable.setBackground(backgroundTableBlueRounded);
         currentRoundTable.add(new Label("This round:\n\n"+gameName,skin)).space(spacingLittle);
         PlayStateUnion state = GameWare.getInstance().getGameIdToPlayState().get(round.getGameId());
-        currentRoundTable.add(new Image(state.getScreenshot())).width(imageWidthAndHeigh).height(imageWidthAndHeigh).spaceBottom(spacingMedium).colspan(2);
+        currentRoundTable.add(new Image(state.getThumbnail())).width(imageWidthAndHeigh).height(imageWidthAndHeigh).spaceBottom(spacingMedium).colspan(2);
         rootTable.add(currentRoundTable).maxHeight(Gdx.graphics.getHeight()/5).colspan(2);
         rootTable.row();
 
@@ -127,7 +139,7 @@ public class ViewTournamentState extends MenuStateUnion {
         rootTable.add(innerTable).colspan(2);
         rootTable.row();
         rootTable.add(makeBackBtn()).expand().bottom().left();
-        roundDeadline.setFontScale(0.8f);
+        roundDeadline.setFontScale(0.8f * super.scaleRatio);
         rootTable.add(roundDeadline).expand().bottom().right();
 
         stage.addActor(rootTable);