diff --git a/CheckersClient/.idea/libraries/Gradle__org_javatuples_javatuples_1_2.xml b/CheckersClient/.idea/libraries/Gradle__org_javatuples_javatuples_1_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..791ccad4fc6da6b6e176aa2a55444318bfcaf3dd
--- /dev/null
+++ b/CheckersClient/.idea/libraries/Gradle__org_javatuples_javatuples_1_2.xml
@@ -0,0 +1,11 @@
+<component name="libraryTable">
+  <library name="Gradle: org.javatuples:javatuples:1.2">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.javatuples/javatuples/1.2/507312ac4b601204a72a83380badbca82683dd36/javatuples-1.2.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.javatuples/javatuples/1.2/a7495f5370bdfcf46c6f3c6ed0badf52877aa467/javatuples-1.2-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/CheckersClient/android/assets/Game/1.5x/Backgroundhdpi.png b/CheckersClient/android/assets/Game/1.5x/Backgroundhdpi.png
deleted file mode 100644
index 1ca27217d50e555b3321669e4b4c4683531a2169..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/1.5x/Backgroundhdpi.png and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/1.5x/Borderhdpi.png b/CheckersClient/android/assets/Game/1.5x/Borderhdpi.png
deleted file mode 100644
index 9565b7e1d24fe7ed4666877ce00a633dcb0a9a5d..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/1.5x/Borderhdpi.png and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/1.5x/Computerhdpi.png b/CheckersClient/android/assets/Game/1.5x/Computerhdpi.png
deleted file mode 100644
index e346f36f1a5e5b8f0183202fcdd3ce07fdc366a1..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/1.5x/Computerhdpi.png and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/1.5x/ExerciseTexthdpi.png b/CheckersClient/android/assets/Game/1.5x/ExerciseTexthdpi.png
deleted file mode 100644
index e7e771da1d050111122f518823011d5427a059f0..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/1.5x/ExerciseTexthdpi.png and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/1.5x/Playerhdpi.png b/CheckersClient/android/assets/Game/1.5x/Playerhdpi.png
deleted file mode 100644
index f075d043a70c30385b633408cdb5f3777517ed13..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/1.5x/Playerhdpi.png and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/1.5x/ScoreComputerhdpi.png b/CheckersClient/android/assets/Game/1.5x/ScoreComputerhdpi.png
deleted file mode 100644
index 8e37fffc61560ecb1302a5fbccf0ec0e82511a24..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/1.5x/ScoreComputerhdpi.png and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/1.5x/ScorePlayerhdpi.png b/CheckersClient/android/assets/Game/1.5x/ScorePlayerhdpi.png
deleted file mode 100644
index d2167f7b345a5c5493fc9a44c3e4571d6656a9d4..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/1.5x/ScorePlayerhdpi.png and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/1x/Backgroundmdpi.png b/CheckersClient/android/assets/Game/1x/Backgroundmdpi.png
deleted file mode 100644
index 986a7ddd76c32d0c875e8c5d1ec1ff3d5ab8b280..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/1x/Backgroundmdpi.png and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/1x/Ball.png b/CheckersClient/android/assets/Game/1x/Ball.png
deleted file mode 100644
index 6980c6dceb5ff3feae4d25eb0eb0717e35d2fcbc..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/1x/Ball.png and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/BlackHole/1x/BlackHole@1x.png b/CheckersClient/android/assets/Game/1x/BlackHole@1x.png
similarity index 100%
rename from CheckersClient/android/assets/Game/BlackHole/1x/BlackHole@1x.png
rename to CheckersClient/android/assets/Game/1x/BlackHole@1x.png
diff --git a/CheckersClient/android/assets/Game/1x/Border.png b/CheckersClient/android/assets/Game/1x/Border.png
deleted file mode 100644
index f66fa26dfc631967b05a5aaf7ce0919e4da235b1..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/1x/Border.png and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/1x/Computer.png b/CheckersClient/android/assets/Game/1x/Computer.png
deleted file mode 100644
index 49270c90a1fea6cbfcf0022cf0b7e6ca05a93de7..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/1x/Computer.png and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/1x/ExerciseText.png b/CheckersClient/android/assets/Game/1x/ExerciseText.png
deleted file mode 100644
index ccb042cbe5fa9801a269b864e901798f938c177a..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/1x/ExerciseText.png and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/GameBoard/1x/GameBoard@1x.png b/CheckersClient/android/assets/Game/1x/GameBoard@1x.png
similarity index 100%
rename from CheckersClient/android/assets/Game/GameBoard/1x/GameBoard@1x.png
rename to CheckersClient/android/assets/Game/1x/GameBoard@1x.png
diff --git a/CheckersClient/android/assets/Game/1x/PlayBackground.png b/CheckersClient/android/assets/Game/1x/PlayBackground.png
deleted file mode 100644
index 986a7ddd76c32d0c875e8c5d1ec1ff3d5ab8b280..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/1x/PlayBackground.png and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/1x/Player.png b/CheckersClient/android/assets/Game/1x/Player.png
deleted file mode 100644
index 82540f810272d4968d2eba146f10ec190e59f640..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/1x/Player.png and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/1x/ScoreComputer.png b/CheckersClient/android/assets/Game/1x/ScoreComputer.png
deleted file mode 100644
index e6a196aeeca41626c8e7aeb7117ef1a31c9f9da0..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/1x/ScoreComputer.png and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/1x/ScorePlayer.png b/CheckersClient/android/assets/Game/1x/ScorePlayer.png
deleted file mode 100644
index 4601de2f50f359061bee3aaafe127bdf53ab6b00..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/1x/ScorePlayer.png and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/StarPiece/1x/StarPiece@1x.png b/CheckersClient/android/assets/Game/1x/StarPiece@1x.png
similarity index 100%
rename from CheckersClient/android/assets/Game/StarPiece/1x/StarPiece@1x.png
rename to CheckersClient/android/assets/Game/1x/StarPiece@1x.png
diff --git a/CheckersClient/android/assets/Game/1x/StarPiece_Base.png b/CheckersClient/android/assets/Game/1x/StarPiece_Base.png
new file mode 100644
index 0000000000000000000000000000000000000000..040b12a9790d15be21adb537132c06f63a3a4b65
Binary files /dev/null and b/CheckersClient/android/assets/Game/1x/StarPiece_Base.png differ
diff --git a/CheckersClient/android/assets/Game/1x/StarPiece_BaseBrd.png b/CheckersClient/android/assets/Game/1x/StarPiece_BaseBrd.png
new file mode 100644
index 0000000000000000000000000000000000000000..84d222841be9143734b0bdb9d77516bbbc213da1
Binary files /dev/null and b/CheckersClient/android/assets/Game/1x/StarPiece_BaseBrd.png differ
diff --git a/CheckersClient/android/assets/Game/1x/StarPiece_Head.png b/CheckersClient/android/assets/Game/1x/StarPiece_Head.png
new file mode 100644
index 0000000000000000000000000000000000000000..4cb6a8f8a6d3c467ec20bec63dd9ca355f9ed0ba
Binary files /dev/null and b/CheckersClient/android/assets/Game/1x/StarPiece_Head.png differ
diff --git a/CheckersClient/android/assets/Game/1x/StarPiece_HeadBrd.png b/CheckersClient/android/assets/Game/1x/StarPiece_HeadBrd.png
new file mode 100644
index 0000000000000000000000000000000000000000..d81726096c497cf7bedb126741a1b88e0e9034f3
Binary files /dev/null and b/CheckersClient/android/assets/Game/1x/StarPiece_HeadBrd.png differ
diff --git a/CheckersClient/android/assets/Game/1x/StarPiece_Mast.png b/CheckersClient/android/assets/Game/1x/StarPiece_Mast.png
new file mode 100644
index 0000000000000000000000000000000000000000..635019413438ffd84ea32e45ce1f2b73c3905356
Binary files /dev/null and b/CheckersClient/android/assets/Game/1x/StarPiece_Mast.png differ
diff --git a/CheckersClient/android/assets/Game/1x/StarPiece_MastBrd.png b/CheckersClient/android/assets/Game/1x/StarPiece_MastBrd.png
new file mode 100644
index 0000000000000000000000000000000000000000..c35cef5814583fb3fceafb456fda001da13f9bf6
Binary files /dev/null and b/CheckersClient/android/assets/Game/1x/StarPiece_MastBrd.png differ
diff --git a/CheckersClient/android/assets/Game/Audio/GameLoop.mp3 b/CheckersClient/android/assets/Game/Audio/GameLoop.mp3
deleted file mode 100644
index a212222cad7cfe2de6d5ef21cfaa4083839788f5..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/Audio/GameLoop.mp3 and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/Audio/H1.mp3 b/CheckersClient/android/assets/Game/Audio/H1.mp3
deleted file mode 100644
index 77a4041c07d67fdace4225c570b472376ccaa224..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/Audio/H1.mp3 and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/Audio/H2.mp3 b/CheckersClient/android/assets/Game/Audio/H2.mp3
deleted file mode 100644
index c38034eb34651569fc420ac68521c45f67c39d3f..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/Audio/H2.mp3 and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/Audio/N1.mp3 b/CheckersClient/android/assets/Game/Audio/N1.mp3
deleted file mode 100644
index 8427315e93d6dbed6031cd54cb1c3c4c349de1cb..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/Audio/N1.mp3 and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/Audio/N2.mp3 b/CheckersClient/android/assets/Game/Audio/N2.mp3
deleted file mode 100644
index 28052dda8a09f65d338cb5f26046a27c46b6957e..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/Audio/N2.mp3 and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/Audio/TransitionFX.mp3 b/CheckersClient/android/assets/Game/Audio/TransitionFX.mp3
deleted file mode 100644
index 9827b25e62f9ef322c54ace86fbfe5cdf1ec778b..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/Audio/TransitionFX.mp3 and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/Audio/V1.mp3 b/CheckersClient/android/assets/Game/Audio/V1.mp3
deleted file mode 100644
index 564fe09ae78d3402f1ce129fbdfc645a17800e17..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/Audio/V1.mp3 and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/Audio/V2.mp3 b/CheckersClient/android/assets/Game/Audio/V2.mp3
deleted file mode 100644
index ae11f6368fccccafbae713be777dc367739c51cc..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/Audio/V2.mp3 and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/BlackHole/0.25x/BlackHole@0.25x.png b/CheckersClient/android/assets/Game/BlackHole/0.25x/BlackHole@0.25x.png
deleted file mode 100644
index 7cd6e4ab015107b072e4438ca92fff62c921e5ea..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/BlackHole/0.25x/BlackHole@0.25x.png and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/BlackHole/0.5x/BlackHole@0.5x.png b/CheckersClient/android/assets/Game/BlackHole/0.5x/BlackHole@0.5x.png
deleted file mode 100644
index 53eef5505b55ff44a67fa6f5e71f69cef01986a3..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/BlackHole/0.5x/BlackHole@0.5x.png and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/BlackHole/SVG/Asset 3.svg b/CheckersClient/android/assets/Game/BlackHole/SVG/Asset 3.svg
deleted file mode 100644
index bd1633bc59a83077c2f303955abfafc280cfab02..0000000000000000000000000000000000000000
--- a/CheckersClient/android/assets/Game/BlackHole/SVG/Asset 3.svg	
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 41 45"><defs><style>.cls-1,.cls-3{fill:none;}.cls-1,.cls-2{stroke:#000;}.cls-1,.cls-2,.cls-3{stroke-miterlimit:10;}.cls-2,.cls-3{stroke-width:5px;}.cls-3{stroke:#662d91;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><ellipse class="cls-1" cx="20.79" cy="28.55" rx="19.71" ry="15.95"/><ellipse class="cls-2" cx="20.03" cy="23.05" rx="12.66" ry="10.55"/><ellipse class="cls-3" cx="20.5" cy="26.5" rx="18" ry="15"/><ellipse class="cls-3" cx="20.5" cy="22.5" rx="18" ry="15"/><ellipse class="cls-3" cx="20.5" cy="17.5" rx="18" ry="15"/></g></g></svg>
\ No newline at end of file
diff --git a/CheckersClient/android/assets/Game/GameBoard/0.25x/GameBoard@0.25x.png b/CheckersClient/android/assets/Game/GameBoard/0.25x/GameBoard@0.25x.png
deleted file mode 100644
index 9fbd01556abab0aa79d11825672bcdc923ad9cae..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/GameBoard/0.25x/GameBoard@0.25x.png and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/GameBoard/0.5x/GameBoard@0.5x.png b/CheckersClient/android/assets/Game/GameBoard/0.5x/GameBoard@0.5x.png
deleted file mode 100644
index c5a5a0045491c4deeab09794c64af970d2793756..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/GameBoard/0.5x/GameBoard@0.5x.png and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/StarPiece/0.25x/StarPiece_Base@0.25x.png b/CheckersClient/android/assets/Game/StarPiece/0.25x/StarPiece_Base@0.25x.png
deleted file mode 100644
index d4841d8448831e9730ed89c032902bfdf089fafc..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/StarPiece/0.25x/StarPiece_Base@0.25x.png and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/StarPiece/0.25x/StarPiece_Body@0.25x.png b/CheckersClient/android/assets/Game/StarPiece/0.25x/StarPiece_Body@0.25x.png
deleted file mode 100644
index b8c57693f2d422ca01ea0865bd5c7063aef35fb3..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/StarPiece/0.25x/StarPiece_Body@0.25x.png and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/StarPiece/0.25x/StarPiece_Head@0.25x.png b/CheckersClient/android/assets/Game/StarPiece/0.25x/StarPiece_Head@0.25x.png
deleted file mode 100644
index 7afdc3391f41dc9b828a16d65ffe477f612468df..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/StarPiece/0.25x/StarPiece_Head@0.25x.png and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/StarPiece/0.25x/StarPiece_Ring@0.25x.png b/CheckersClient/android/assets/Game/StarPiece/0.25x/StarPiece_Ring@0.25x.png
deleted file mode 100644
index bd4b7bd12727b40503a99906547c689c8d2b2593..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/StarPiece/0.25x/StarPiece_Ring@0.25x.png and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/StarPiece/0.5x/StarPiece@0.5x.png b/CheckersClient/android/assets/Game/StarPiece/0.5x/StarPiece@0.5x.png
deleted file mode 100644
index df92d2c3259e233255aaaf8d17998b79e8a11d67..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/StarPiece/0.5x/StarPiece@0.5x.png and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/StarPiece/0.5x/StarPiece_Base@0.5x.png b/CheckersClient/android/assets/Game/StarPiece/0.5x/StarPiece_Base@0.5x.png
deleted file mode 100644
index 04e65a962cefe0d8c84a2a5238be3addb098c112..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/StarPiece/0.5x/StarPiece_Base@0.5x.png and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/StarPiece/0.5x/StarPiece_Body@0.5x.png b/CheckersClient/android/assets/Game/StarPiece/0.5x/StarPiece_Body@0.5x.png
deleted file mode 100644
index 9628f30bf8ed2309c9b5658e7b125c191e46fbbe..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/StarPiece/0.5x/StarPiece_Body@0.5x.png and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/StarPiece/0.5x/StarPiece_Head@0.5x.png b/CheckersClient/android/assets/Game/StarPiece/0.5x/StarPiece_Head@0.5x.png
deleted file mode 100644
index 1a62f7926d201117432622b83d563cc94c4413da..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/StarPiece/0.5x/StarPiece_Head@0.5x.png and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/StarPiece/0.5x/StarPiece_Ring@0.5x.png b/CheckersClient/android/assets/Game/StarPiece/0.5x/StarPiece_Ring@0.5x.png
deleted file mode 100644
index 17f10f27e289260890dcf077601ba2b8436adb1f..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/StarPiece/0.5x/StarPiece_Ring@0.5x.png and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/StarPiece/0.75x/StarPiece@0.75x.png b/CheckersClient/android/assets/Game/StarPiece/0.75x/StarPiece@0.75x.png
deleted file mode 100644
index 8312d9b428f5cd583916db4c8dd7c33bd298c730..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/StarPiece/0.75x/StarPiece@0.75x.png and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/StarPiece/0.75x/StarPiece_Baseldpi.png b/CheckersClient/android/assets/Game/StarPiece/0.75x/StarPiece_Baseldpi.png
deleted file mode 100644
index 8d08f0d2dcc8b6e86b843554e1f2a84b586a3ae1..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/StarPiece/0.75x/StarPiece_Baseldpi.png and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/StarPiece/0.75x/StarPiece_Bodyldpi.png b/CheckersClient/android/assets/Game/StarPiece/0.75x/StarPiece_Bodyldpi.png
deleted file mode 100644
index afd75800fa06af0a42ad1abb829fbf0ba92ae0c8..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/StarPiece/0.75x/StarPiece_Bodyldpi.png and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/StarPiece/0.75x/StarPiece_Headldpi.png b/CheckersClient/android/assets/Game/StarPiece/0.75x/StarPiece_Headldpi.png
deleted file mode 100644
index f5f8042fed1ecbdc5f191b3b3f769016c5cf50e7..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/StarPiece/0.75x/StarPiece_Headldpi.png and /dev/null differ
diff --git a/CheckersClient/android/assets/Game/StarPiece/0.75x/StarPiece_Ringldpi.png b/CheckersClient/android/assets/Game/StarPiece/0.75x/StarPiece_Ringldpi.png
deleted file mode 100644
index 6aea68228d83ce5729705bc41134e1862403177e..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Game/StarPiece/0.75x/StarPiece_Ringldpi.png and /dev/null differ
diff --git a/CheckersClient/android/assets/Loading/LoadingBarBackground.png b/CheckersClient/android/assets/Loading/LoadingBarBackground.png
new file mode 100644
index 0000000000000000000000000000000000000000..5128e41cf63ae4f7d2432993ccb11f4dd96e34c6
Binary files /dev/null and b/CheckersClient/android/assets/Loading/LoadingBarBackground.png differ
diff --git a/CheckersClient/android/assets/Loading/LoadingBarBorder.png b/CheckersClient/android/assets/Loading/LoadingBarBorder.png
new file mode 100644
index 0000000000000000000000000000000000000000..7da6d2851e8b4b11e3026df1417c1cedcf1c1fa2
Binary files /dev/null and b/CheckersClient/android/assets/Loading/LoadingBarBorder.png differ
diff --git a/CheckersClient/android/assets/Loading/LoadingBarFill.png b/CheckersClient/android/assets/Loading/LoadingBarFill.png
new file mode 100644
index 0000000000000000000000000000000000000000..a62a4be48ca8fdf71b70ea42ce2452a942628dfb
Binary files /dev/null and b/CheckersClient/android/assets/Loading/LoadingBarFill.png differ
diff --git a/CheckersClient/android/assets/Loading/LoadingDot.png b/CheckersClient/android/assets/Loading/LoadingDot.png
new file mode 100644
index 0000000000000000000000000000000000000000..43e0eb9fe132cdef62f6acd96ae08b1fd619b249
Binary files /dev/null and b/CheckersClient/android/assets/Loading/LoadingDot.png differ
diff --git a/CheckersClient/android/assets/Loading/LoadingText.png b/CheckersClient/android/assets/Loading/LoadingText.png
new file mode 100644
index 0000000000000000000000000000000000000000..3327f9ee7a66412f3e2e14badba2284ec74fa6c9
Binary files /dev/null and b/CheckersClient/android/assets/Loading/LoadingText.png differ
diff --git a/CheckersClient/android/assets/Menu/1x/ConnectionBar.png b/CheckersClient/android/assets/Menu/1x/ConnectionBar.png
new file mode 100644
index 0000000000000000000000000000000000000000..99923e288792146810e0f085778c452d813bd8af
Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/ConnectionBar.png differ
diff --git a/CheckersClient/android/assets/Menu/1x/GreenCircleSmall.png b/CheckersClient/android/assets/Menu/1x/GreenCircleSmall.png
new file mode 100644
index 0000000000000000000000000000000000000000..d87d4975b87432cc4b8c6ecea587ab8f0d231755
Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/GreenCircleSmall.png differ
diff --git a/CheckersClient/android/assets/Menu/1x/Lobby.png b/CheckersClient/android/assets/Menu/1x/Lobby.png
new file mode 100644
index 0000000000000000000000000000000000000000..a3b932205022ad0d0d5bb1003f3ddded80637d0c
Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/Lobby.png differ
diff --git a/CheckersClient/android/assets/Menu/1x/LobbyMenu@1x.png b/CheckersClient/android/assets/Menu/1x/LobbyMenu@1x.png
index e32bb0211c00fcdb8162545271b661e85ea02467..801e3b7e3db2427537eb4beab9860b2a712bb35c 100644
Binary files a/CheckersClient/android/assets/Menu/1x/LobbyMenu@1x.png and b/CheckersClient/android/assets/Menu/1x/LobbyMenu@1x.png differ
diff --git a/CheckersClient/android/assets/Menu/1x/MainMenu@1x.png b/CheckersClient/android/assets/Menu/1x/MainMenu@1x.png
index 7087a58412cbdd8363f7793659ac6be421ca5b40..49e98d44d7b293830464bf523b6cab7646435b44 100644
Binary files a/CheckersClient/android/assets/Menu/1x/MainMenu@1x.png and b/CheckersClient/android/assets/Menu/1x/MainMenu@1x.png differ
diff --git a/CheckersClient/android/assets/Menu/1x/MainMenuForm.png b/CheckersClient/android/assets/Menu/1x/MainMenuForm.png
index 795f9abecd1f2d70eb99328dc3436b8fc89c54aa..fa2fd0625e2059a7110678fbd4975f68f2c3d20b 100644
Binary files a/CheckersClient/android/assets/Menu/1x/MainMenuForm.png and b/CheckersClient/android/assets/Menu/1x/MainMenuForm.png differ
diff --git a/CheckersClient/android/assets/Menu/1x/MrServer.png b/CheckersClient/android/assets/Menu/1x/MrServer.png
new file mode 100644
index 0000000000000000000000000000000000000000..57a4adbfc58c73e2f9c79879a15cb558d363ffda
Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/MrServer.png differ
diff --git a/CheckersClient/android/assets/Menu/1x/MrServerBubblePointer.png b/CheckersClient/android/assets/Menu/1x/MrServerBubblePointer.png
new file mode 100644
index 0000000000000000000000000000000000000000..2c701128ef243ac63f3c2a5121536abbd6af5e02
Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/MrServerBubblePointer.png differ
diff --git a/CheckersClient/android/assets/Menu/1x/MrServerBubbleSquare.png b/CheckersClient/android/assets/Menu/1x/MrServerBubbleSquare.png
new file mode 100644
index 0000000000000000000000000000000000000000..98b8772403f067b3902e460ac5406a16de5bad15
Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/MrServerBubbleSquare.png differ
diff --git a/CheckersClient/android/assets/Menu/1x/PlayerReady.png b/CheckersClient/android/assets/Menu/1x/PlayerReady.png
new file mode 100644
index 0000000000000000000000000000000000000000..4cba8dc27d25bb4393a58b1f401141977f44b434
Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/PlayerReady.png differ
diff --git a/CheckersClient/android/assets/Menu/1x/PlayerReadyCheck.png b/CheckersClient/android/assets/Menu/1x/PlayerReadyCheck.png
new file mode 100644
index 0000000000000000000000000000000000000000..7b34127c2981fd699b19bfc0c757400edbf0904f
Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/PlayerReadyCheck.png differ
diff --git a/CheckersClient/android/assets/Menu/1x/RedCircleSmall.png b/CheckersClient/android/assets/Menu/1x/RedCircleSmall.png
new file mode 100644
index 0000000000000000000000000000000000000000..ee77e4b35c5408d48caf1e5bbe9b763adc1f5785
Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/RedCircleSmall.png differ
diff --git a/CheckersClient/android/assets/Menu/1x/Rocket_Small@1x.png b/CheckersClient/android/assets/Menu/1x/Rocket_Small@1x.png
new file mode 100644
index 0000000000000000000000000000000000000000..f9e9d27e2379eeedbcfd0e27531e7c4aeefc9514
Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/Rocket_Small@1x.png differ
diff --git a/CheckersClient/android/assets/Menu/1x/SpaceCheckersLogo.png b/CheckersClient/android/assets/Menu/1x/SpaceCheckersLogo.png
new file mode 100644
index 0000000000000000000000000000000000000000..8d3ed55d3f843c6c381317e59784ec31c7dd7371
Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/SpaceCheckersLogo.png differ
diff --git a/CheckersClient/android/assets/Menu/1x/SpaceCheckersLogoWithBackground.png b/CheckersClient/android/assets/Menu/1x/SpaceCheckersLogoWithBackground.png
new file mode 100644
index 0000000000000000000000000000000000000000..1459cd41e87948848498cd6e7bfbb8e327b50de5
Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/SpaceCheckersLogoWithBackground.png differ
diff --git a/CheckersClient/android/assets/Menu/1x/flipButton.png b/CheckersClient/android/assets/Menu/1x/flipButton.png
new file mode 100644
index 0000000000000000000000000000000000000000..11d2f62806263409f481bd6474f278d85c2f42a0
Binary files /dev/null and b/CheckersClient/android/assets/Menu/1x/flipButton.png differ
diff --git a/CheckersClient/android/assets/Menu/Click11.wav.asd b/CheckersClient/android/assets/Menu/Click11.wav.asd
new file mode 100644
index 0000000000000000000000000000000000000000..bf1f98b27e67a96ebba6a054e49ec6db5ba82a58
Binary files /dev/null and b/CheckersClient/android/assets/Menu/Click11.wav.asd differ
diff --git a/CheckersClient/android/assets/Menu/LobbyPlayTransition.mp3 b/CheckersClient/android/assets/Menu/LobbyPlayTransition.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..704fec6dd367e3de9ed0785ec5a11f598201fd78
Binary files /dev/null and b/CheckersClient/android/assets/Menu/LobbyPlayTransition.mp3 differ
diff --git a/CheckersClient/android/assets/Menu/LobbyPlayTransition.mp3.asd b/CheckersClient/android/assets/Menu/LobbyPlayTransition.mp3.asd
new file mode 100644
index 0000000000000000000000000000000000000000..107da36ee1ecf8194cf68d1a17ad7a71144ddc3e
Binary files /dev/null and b/CheckersClient/android/assets/Menu/LobbyPlayTransition.mp3.asd differ
diff --git a/CheckersClient/android/assets/Menu/MenuLoop.mp3.asd b/CheckersClient/android/assets/Menu/MenuLoop.mp3.asd
new file mode 100644
index 0000000000000000000000000000000000000000..affd8edeb9392f173dcaa97bb57f733610c90e8f
Binary files /dev/null and b/CheckersClient/android/assets/Menu/MenuLoop.mp3.asd differ
diff --git a/CheckersClient/android/assets/Menu/PostLobbyLoop.mp3 b/CheckersClient/android/assets/Menu/PostLobbyLoop.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..5b4c91bef411aeb95b82c4c4fa88898865a246f3
Binary files /dev/null and b/CheckersClient/android/assets/Menu/PostLobbyLoop.mp3 differ
diff --git a/CheckersClient/android/assets/Menu/PostLobbyLoop.mp3.asd b/CheckersClient/android/assets/Menu/PostLobbyLoop.mp3.asd
new file mode 100644
index 0000000000000000000000000000000000000000..5c7a5744db7e1e8c4f983a87d5c338072e558506
Binary files /dev/null and b/CheckersClient/android/assets/Menu/PostLobbyLoop.mp3.asd differ
diff --git a/CheckersClient/android/assets/Pause/PauseBackground.png b/CheckersClient/android/assets/Pause/PauseBackground.png
deleted file mode 100644
index 197fa67442edb07b049d2b334b6c977541036aa0..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Pause/PauseBackground.png and /dev/null differ
diff --git a/CheckersClient/android/assets/Pause/PauseButton.png b/CheckersClient/android/assets/Pause/PauseButton.png
deleted file mode 100644
index 42c154ceb5125b00599c90e44e1b228d7e50cae5..0000000000000000000000000000000000000000
Binary files a/CheckersClient/android/assets/Pause/PauseButton.png and /dev/null differ
diff --git a/CheckersClient/android/assets/UISkins/glassy/skin/glassy-ui.json b/CheckersClient/android/assets/UISkins/glassy/skin/glassy-ui.json
index 2eaad5f5e125bf3f1261282a500a514a3676e4c4..91c0c1d90fc85877454aedeae03b6ae812bc7830 100644
--- a/CheckersClient/android/assets/UISkins/glassy/skin/glassy-ui.json
+++ b/CheckersClient/android/assets/UISkins/glassy/skin/glassy-ui.json
@@ -111,7 +111,7 @@ com.badlogic.gdx.scenes.scene2d.ui.List$ListStyle: {
 		background: list
 	}
 	plain: {
-		font: font
+		font: font-big
 		fontColorSelected: white
 		fontColorUnselected: dark-cyan
 		selection: pale-blue
@@ -183,7 +183,7 @@ com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle: {
 }
 com.badlogic.gdx.scenes.scene2d.ui.TextField$TextFieldStyle: {
 	default: {
-		font: font
+		font: font-big
 		fontColor: black
 		background: textfield
 		cursor: black
@@ -210,4 +210,4 @@ com.badlogic.gdx.scenes.scene2d.ui.Window$WindowStyle: {
 		titleFontColor: black
 	}
 }
-}
\ No newline at end of file
+}
diff --git a/CheckersClient/android/assets/characters/AsianGirl1.png b/CheckersClient/android/assets/characters/AsianGirl1.png
new file mode 100644
index 0000000000000000000000000000000000000000..9207f25f0067db0cd8b0d9f7546a585682eeabfa
Binary files /dev/null and b/CheckersClient/android/assets/characters/AsianGirl1.png differ
diff --git a/CheckersClient/android/assets/characters/AsianGirl2.png b/CheckersClient/android/assets/characters/AsianGirl2.png
new file mode 100644
index 0000000000000000000000000000000000000000..f946f74ff365a73570e41a3686b2013cb84b9491
Binary files /dev/null and b/CheckersClient/android/assets/characters/AsianGirl2.png differ
diff --git a/CheckersClient/android/assets/characters/AsianGirl3.png b/CheckersClient/android/assets/characters/AsianGirl3.png
new file mode 100644
index 0000000000000000000000000000000000000000..cd4d6415be2bbb29a9c896ef4f748703526f6ff3
Binary files /dev/null and b/CheckersClient/android/assets/characters/AsianGirl3.png differ
diff --git a/CheckersClient/android/assets/characters/AsianGirlPortrait.png b/CheckersClient/android/assets/characters/AsianGirlPortrait.png
new file mode 100644
index 0000000000000000000000000000000000000000..f138ad58031933fb192c74abee8c81cf6acaf53d
Binary files /dev/null and b/CheckersClient/android/assets/characters/AsianGirlPortrait.png differ
diff --git a/CheckersClient/android/assets/characters/Grandma1.png b/CheckersClient/android/assets/characters/Grandma1.png
new file mode 100644
index 0000000000000000000000000000000000000000..8184f9e78b481da0907fba6e2262b65e6846add9
Binary files /dev/null and b/CheckersClient/android/assets/characters/Grandma1.png differ
diff --git a/CheckersClient/android/assets/characters/Grandma2.png b/CheckersClient/android/assets/characters/Grandma2.png
new file mode 100644
index 0000000000000000000000000000000000000000..ae0e623fe877a26cc74a1d02815eaae524cb61c9
Binary files /dev/null and b/CheckersClient/android/assets/characters/Grandma2.png differ
diff --git a/CheckersClient/android/assets/characters/Grandma3.png b/CheckersClient/android/assets/characters/Grandma3.png
new file mode 100644
index 0000000000000000000000000000000000000000..ebf9759a7045d1b5802cb6bb51902ed47e1cc8c6
Binary files /dev/null and b/CheckersClient/android/assets/characters/Grandma3.png differ
diff --git a/CheckersClient/android/assets/characters/GrandmaPortrait.png b/CheckersClient/android/assets/characters/GrandmaPortrait.png
new file mode 100644
index 0000000000000000000000000000000000000000..eb923bf8eeb718e32bb962687e3ec5fbc0e88d39
Binary files /dev/null and b/CheckersClient/android/assets/characters/GrandmaPortrait.png differ
diff --git a/CheckersClient/android/assets/characters/HighSchoolGuy1.png b/CheckersClient/android/assets/characters/HighSchoolGuy1.png
new file mode 100644
index 0000000000000000000000000000000000000000..f80b3dbbc2daa0dc8d5aac09e6e4c6fc976b524d
Binary files /dev/null and b/CheckersClient/android/assets/characters/HighSchoolGuy1.png differ
diff --git a/CheckersClient/android/assets/characters/HighSchoolGuy2.png b/CheckersClient/android/assets/characters/HighSchoolGuy2.png
new file mode 100644
index 0000000000000000000000000000000000000000..7ad6e0646cf20dd067e1516caa6198dbebbac895
Binary files /dev/null and b/CheckersClient/android/assets/characters/HighSchoolGuy2.png differ
diff --git a/CheckersClient/android/assets/characters/HighSchoolGuy3.png b/CheckersClient/android/assets/characters/HighSchoolGuy3.png
new file mode 100644
index 0000000000000000000000000000000000000000..ead8ebdbc6a508b7489064390a122a3d7cc127f5
Binary files /dev/null and b/CheckersClient/android/assets/characters/HighSchoolGuy3.png differ
diff --git a/CheckersClient/android/assets/characters/HighSchoolGuyPortrait.png b/CheckersClient/android/assets/characters/HighSchoolGuyPortrait.png
new file mode 100644
index 0000000000000000000000000000000000000000..a07477ed3ce86273e5ab690fddd337619a3ce5dc
Binary files /dev/null and b/CheckersClient/android/assets/characters/HighSchoolGuyPortrait.png differ
diff --git a/CheckersClient/android/assets/characters/HipsterGirl1.png b/CheckersClient/android/assets/characters/HipsterGirl1.png
new file mode 100644
index 0000000000000000000000000000000000000000..1cd2a9579d3302499abe202e5e7b23aa0792db59
Binary files /dev/null and b/CheckersClient/android/assets/characters/HipsterGirl1.png differ
diff --git a/CheckersClient/android/assets/characters/HipsterGirl2.png b/CheckersClient/android/assets/characters/HipsterGirl2.png
new file mode 100644
index 0000000000000000000000000000000000000000..888706fd549bc08ae191ddd112526381abc26b48
Binary files /dev/null and b/CheckersClient/android/assets/characters/HipsterGirl2.png differ
diff --git a/CheckersClient/android/assets/characters/HipsterGirl3.png b/CheckersClient/android/assets/characters/HipsterGirl3.png
new file mode 100644
index 0000000000000000000000000000000000000000..14441d5e98ac5588a0576a9307a6b41b2f080ce1
Binary files /dev/null and b/CheckersClient/android/assets/characters/HipsterGirl3.png differ
diff --git a/CheckersClient/android/assets/characters/HipsterGirlPortrait.png b/CheckersClient/android/assets/characters/HipsterGirlPortrait.png
new file mode 100644
index 0000000000000000000000000000000000000000..dd6062657c9589c5ccfdf0051d2f72993a368d30
Binary files /dev/null and b/CheckersClient/android/assets/characters/HipsterGirlPortrait.png differ
diff --git a/CheckersClient/android/assets/characters/MrServer1.png b/CheckersClient/android/assets/characters/MrServer1.png
new file mode 100644
index 0000000000000000000000000000000000000000..bec3a1bdbf675a96e871066dac923858efd1873b
Binary files /dev/null and b/CheckersClient/android/assets/characters/MrServer1.png differ
diff --git a/CheckersClient/android/assets/characters/MrServer2.png b/CheckersClient/android/assets/characters/MrServer2.png
new file mode 100644
index 0000000000000000000000000000000000000000..5aae4331a0e9f49bd27ea96a8d8ef00e817b8fc2
Binary files /dev/null and b/CheckersClient/android/assets/characters/MrServer2.png differ
diff --git a/CheckersClient/android/assets/characters/MrServer3.png b/CheckersClient/android/assets/characters/MrServer3.png
new file mode 100644
index 0000000000000000000000000000000000000000..ad404fa898550132e12db36a0b007e87deef00b1
Binary files /dev/null and b/CheckersClient/android/assets/characters/MrServer3.png differ
diff --git a/CheckersClient/android/assets/characters/MrServerName.png b/CheckersClient/android/assets/characters/MrServerName.png
new file mode 100644
index 0000000000000000000000000000000000000000..b0bb41a160668f668395ab603d57256779161db5
Binary files /dev/null and b/CheckersClient/android/assets/characters/MrServerName.png differ
diff --git a/CheckersClient/android/assets/characters/MrServerPortrait.png b/CheckersClient/android/assets/characters/MrServerPortrait.png
new file mode 100644
index 0000000000000000000000000000000000000000..c7dce48b35822d09931f827c601b143977109ae8
Binary files /dev/null and b/CheckersClient/android/assets/characters/MrServerPortrait.png differ
diff --git a/CheckersClient/android/assets/characters/RegularGuy1.png b/CheckersClient/android/assets/characters/RegularGuy1.png
new file mode 100644
index 0000000000000000000000000000000000000000..b736ba2e352862d74c4fed640a0444c1369e69e3
Binary files /dev/null and b/CheckersClient/android/assets/characters/RegularGuy1.png differ
diff --git a/CheckersClient/android/assets/characters/RegularGuy2.png b/CheckersClient/android/assets/characters/RegularGuy2.png
new file mode 100644
index 0000000000000000000000000000000000000000..f87dea69fd985da55a60493e5d24808520960bf4
Binary files /dev/null and b/CheckersClient/android/assets/characters/RegularGuy2.png differ
diff --git a/CheckersClient/android/assets/characters/RegularGuy3.png b/CheckersClient/android/assets/characters/RegularGuy3.png
new file mode 100644
index 0000000000000000000000000000000000000000..1f00a24030b5f9e6226e9b0e5f064e89bc89f27d
Binary files /dev/null and b/CheckersClient/android/assets/characters/RegularGuy3.png differ
diff --git a/CheckersClient/android/assets/characters/RegularGuyPortrait.png b/CheckersClient/android/assets/characters/RegularGuyPortrait.png
new file mode 100644
index 0000000000000000000000000000000000000000..81566ea5eb9977cd5b74c2ff69521e496e9cb0aa
Binary files /dev/null and b/CheckersClient/android/assets/characters/RegularGuyPortrait.png differ
diff --git a/CheckersClient/android/assets/characters/RocketGuy1x.png b/CheckersClient/android/assets/characters/RocketGuy1x.png
new file mode 100644
index 0000000000000000000000000000000000000000..53d5f2cb7c8ca10f1998ae568367b128b0e9ff00
Binary files /dev/null and b/CheckersClient/android/assets/characters/RocketGuy1x.png differ
diff --git a/CheckersClient/android/assets/characters/RocketGuy2x.png b/CheckersClient/android/assets/characters/RocketGuy2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..5bbd38171337784452613a1aafe8d5a64d67071b
Binary files /dev/null and b/CheckersClient/android/assets/characters/RocketGuy2x.png differ
diff --git a/CheckersClient/android/assets/characters/RocketGuy3x.png b/CheckersClient/android/assets/characters/RocketGuy3x.png
new file mode 100644
index 0000000000000000000000000000000000000000..4606ea58abb7f0c5349e3b295b5cfaf9531ca056
Binary files /dev/null and b/CheckersClient/android/assets/characters/RocketGuy3x.png differ
diff --git a/CheckersClient/android/assets/characters/RocketGuyPortrait.png b/CheckersClient/android/assets/characters/RocketGuyPortrait.png
new file mode 100644
index 0000000000000000000000000000000000000000..8ede5685a057250e49ba5708eab0d71d67f87424
Binary files /dev/null and b/CheckersClient/android/assets/characters/RocketGuyPortrait.png differ
diff --git a/CheckersClient/android/assets/characters/atlases/AsianGirl.atlas b/CheckersClient/android/assets/characters/atlases/AsianGirl.atlas
new file mode 100644
index 0000000000000000000000000000000000000000..debabc38439c4510fd41d931d5b955a72abdeb7e
--- /dev/null
+++ b/CheckersClient/android/assets/characters/atlases/AsianGirl.atlas
@@ -0,0 +1,27 @@
+
+AsianGirl.png
+size: 2048, 2048
+format: RGBA8888
+filter: Nearest, Nearest
+repeat: none
+AsianGirl1
+  rotate: false
+  xy: 1004, 1004
+  size: 1000, 1000
+  orig: 1000, 1000
+  offset: 0, 0
+  index: -1
+AsianGirl2
+  rotate: false
+  xy: 2, 2
+  size: 1000, 1000
+  orig: 1000, 1000
+  offset: 0, 0
+  index: -1
+AsianGirl3
+  rotate: false
+  xy: 2, 1004
+  size: 1000, 1000
+  orig: 1000, 1000
+  offset: 0, 0
+  index: -1
diff --git a/CheckersClient/android/assets/characters/atlases/AsianGirl.png b/CheckersClient/android/assets/characters/atlases/AsianGirl.png
new file mode 100644
index 0000000000000000000000000000000000000000..834312feba24f0fe6f6142fb1c7ecb2b2cdbd443
Binary files /dev/null and b/CheckersClient/android/assets/characters/atlases/AsianGirl.png differ
diff --git a/CheckersClient/android/assets/characters/atlases/Grandma.atlas b/CheckersClient/android/assets/characters/atlases/Grandma.atlas
new file mode 100644
index 0000000000000000000000000000000000000000..1a084ad67529e47762553fd9e92ac58a66e5c004
--- /dev/null
+++ b/CheckersClient/android/assets/characters/atlases/Grandma.atlas
@@ -0,0 +1,27 @@
+
+Grandma.png
+size: 2048, 2048
+format: RGBA8888
+filter: Nearest, Nearest
+repeat: none
+Grandma1
+  rotate: false
+  xy: 1004, 1004
+  size: 1000, 1000
+  orig: 1000, 1000
+  offset: 0, 0
+  index: -1
+Grandma2
+  rotate: false
+  xy: 2, 2
+  size: 1000, 1000
+  orig: 1000, 1000
+  offset: 0, 0
+  index: -1
+Grandma3
+  rotate: false
+  xy: 2, 1004
+  size: 1000, 1000
+  orig: 1000, 1000
+  offset: 0, 0
+  index: -1
diff --git a/CheckersClient/android/assets/characters/atlases/Grandma.png b/CheckersClient/android/assets/characters/atlases/Grandma.png
new file mode 100644
index 0000000000000000000000000000000000000000..342d2659e65061e3c0d9cf29f0b53b75da3c93f1
Binary files /dev/null and b/CheckersClient/android/assets/characters/atlases/Grandma.png differ
diff --git a/CheckersClient/android/assets/characters/atlases/HighSchoolGuy.atlas b/CheckersClient/android/assets/characters/atlases/HighSchoolGuy.atlas
new file mode 100644
index 0000000000000000000000000000000000000000..cdc11ae7fde2968e0048587db8eec439405fdc27
--- /dev/null
+++ b/CheckersClient/android/assets/characters/atlases/HighSchoolGuy.atlas
@@ -0,0 +1,27 @@
+
+HighSchoolGuy.png
+size: 2048, 2048
+format: RGBA8888
+filter: Nearest, Nearest
+repeat: none
+HighSchoolGuy1
+  rotate: false
+  xy: 2, 1004
+  size: 1000, 1000
+  orig: 1000, 1000
+  offset: 0, 0
+  index: -1
+HighSchoolGuy2
+  rotate: false
+  xy: 1004, 1004
+  size: 1000, 1000
+  orig: 1000, 1000
+  offset: 0, 0
+  index: -1
+HighSchoolGuy3
+  rotate: false
+  xy: 2, 2
+  size: 1000, 1000
+  orig: 1000, 1000
+  offset: 0, 0
+  index: -1
diff --git a/CheckersClient/android/assets/characters/atlases/HighSchoolGuy.png b/CheckersClient/android/assets/characters/atlases/HighSchoolGuy.png
new file mode 100644
index 0000000000000000000000000000000000000000..f7d83af4b5c71213da483f1f1bd6879c0e0d4bfa
Binary files /dev/null and b/CheckersClient/android/assets/characters/atlases/HighSchoolGuy.png differ
diff --git a/CheckersClient/android/assets/characters/atlases/HipsterGirl.atlas b/CheckersClient/android/assets/characters/atlases/HipsterGirl.atlas
new file mode 100644
index 0000000000000000000000000000000000000000..812d4b63b58a03ff0863bb88c67fffec14928fdc
--- /dev/null
+++ b/CheckersClient/android/assets/characters/atlases/HipsterGirl.atlas
@@ -0,0 +1,27 @@
+
+HipsterGirl.png
+size: 2048, 2048
+format: RGBA8888
+filter: Nearest, Nearest
+repeat: none
+HipsterGirl1
+  rotate: false
+  xy: 1004, 1004
+  size: 1000, 1000
+  orig: 1000, 1000
+  offset: 0, 0
+  index: -1
+HipsterGirl2
+  rotate: false
+  xy: 2, 2
+  size: 1000, 1000
+  orig: 1000, 1000
+  offset: 0, 0
+  index: -1
+HipsterGirl3
+  rotate: false
+  xy: 2, 1004
+  size: 1000, 1000
+  orig: 1000, 1000
+  offset: 0, 0
+  index: -1
diff --git a/CheckersClient/android/assets/characters/atlases/HipsterGirl.png b/CheckersClient/android/assets/characters/atlases/HipsterGirl.png
new file mode 100644
index 0000000000000000000000000000000000000000..7e327a3d37d15eb057cabc3132022614a31090e4
Binary files /dev/null and b/CheckersClient/android/assets/characters/atlases/HipsterGirl.png differ
diff --git a/CheckersClient/android/assets/characters/atlases/MrServer.atlas b/CheckersClient/android/assets/characters/atlases/MrServer.atlas
new file mode 100644
index 0000000000000000000000000000000000000000..22634838e5edd5776d625c3951e4cea3c0b6ac11
--- /dev/null
+++ b/CheckersClient/android/assets/characters/atlases/MrServer.atlas
@@ -0,0 +1,27 @@
+
+MrServer.png
+size: 2048, 2048
+format: RGBA8888
+filter: Nearest, Nearest
+repeat: none
+MrServer1
+  rotate: false
+  xy: 2, 2
+  size: 1000, 1000
+  orig: 1000, 1000
+  offset: 0, 0
+  index: -1
+MrServer2
+  rotate: false
+  xy: 2, 1004
+  size: 1000, 1000
+  orig: 1000, 1000
+  offset: 0, 0
+  index: -1
+MrServer3
+  rotate: false
+  xy: 1004, 1004
+  size: 1000, 1000
+  orig: 1000, 1000
+  offset: 0, 0
+  index: -1
diff --git a/CheckersClient/android/assets/characters/atlases/MrServer.png b/CheckersClient/android/assets/characters/atlases/MrServer.png
new file mode 100644
index 0000000000000000000000000000000000000000..01b9caa2dd9000a6de9da33afe8c6333e7d7fdfc
Binary files /dev/null and b/CheckersClient/android/assets/characters/atlases/MrServer.png differ
diff --git a/CheckersClient/android/assets/characters/atlases/Portraits.atlas b/CheckersClient/android/assets/characters/atlases/Portraits.atlas
new file mode 100644
index 0000000000000000000000000000000000000000..4fdafb10149606cb41a0547680022e1098e29e33
--- /dev/null
+++ b/CheckersClient/android/assets/characters/atlases/Portraits.atlas
@@ -0,0 +1,55 @@
+
+Portraits.png
+size: 4096, 2048
+format: RGBA8888
+filter: Nearest, Nearest
+repeat: none
+AsianGirlPortrait
+  rotate: false
+  xy: 2, 1004
+  size: 1000, 1000
+  orig: 1000, 1000
+  offset: 0, 0
+  index: -1
+GrandmaPortrait
+  rotate: false
+  xy: 1004, 2
+  size: 1000, 1000
+  orig: 1000, 1000
+  offset: 0, 0
+  index: -1
+HighSchoolGuyPortrait
+  rotate: false
+  xy: 1004, 1004
+  size: 1000, 1000
+  orig: 1000, 1000
+  offset: 0, 0
+  index: -1
+HipsterGirlPortrait
+  rotate: false
+  xy: 3008, 1004
+  size: 1000, 1000
+  orig: 1000, 1000
+  offset: 0, 0
+  index: -1
+MrServerPortrait
+  rotate: false
+  xy: 2006, 2
+  size: 1000, 1000
+  orig: 1000, 1000
+  offset: 0, 0
+  index: -1
+RegularGuyPortrait
+  rotate: false
+  xy: 2, 2
+  size: 1000, 1000
+  orig: 1000, 1000
+  offset: 0, 0
+  index: -1
+RocketGuyPortrait
+  rotate: false
+  xy: 2006, 1004
+  size: 1000, 1000
+  orig: 1000, 1000
+  offset: 0, 0
+  index: -1
diff --git a/CheckersClient/android/assets/characters/atlases/Portraits.png b/CheckersClient/android/assets/characters/atlases/Portraits.png
new file mode 100644
index 0000000000000000000000000000000000000000..8d5cee4297be4a591288ec538df02d0bbf7d4236
Binary files /dev/null and b/CheckersClient/android/assets/characters/atlases/Portraits.png differ
diff --git a/CheckersClient/android/assets/characters/atlases/RegularGuy.atlas b/CheckersClient/android/assets/characters/atlases/RegularGuy.atlas
new file mode 100644
index 0000000000000000000000000000000000000000..8f20f19e2bf494bd46187ba0626ed6dad60452ff
--- /dev/null
+++ b/CheckersClient/android/assets/characters/atlases/RegularGuy.atlas
@@ -0,0 +1,27 @@
+
+RegularGuy.png
+size: 2048, 2048
+format: RGBA8888
+filter: Nearest, Nearest
+repeat: none
+RegularGuy1
+  rotate: false
+  xy: 2, 2
+  size: 1000, 1000
+  orig: 1000, 1000
+  offset: 0, 0
+  index: -1
+RegularGuy2
+  rotate: false
+  xy: 2, 1004
+  size: 1000, 1000
+  orig: 1000, 1000
+  offset: 0, 0
+  index: -1
+RegularGuy3
+  rotate: false
+  xy: 1004, 1004
+  size: 1000, 1000
+  orig: 1000, 1000
+  offset: 0, 0
+  index: -1
diff --git a/CheckersClient/android/assets/characters/atlases/RegularGuy.png b/CheckersClient/android/assets/characters/atlases/RegularGuy.png
new file mode 100644
index 0000000000000000000000000000000000000000..51663f9086c9cd73424b588861394414de9169a6
Binary files /dev/null and b/CheckersClient/android/assets/characters/atlases/RegularGuy.png differ
diff --git a/CheckersClient/android/assets/characters/atlases/RocketGuy.atlas b/CheckersClient/android/assets/characters/atlases/RocketGuy.atlas
new file mode 100644
index 0000000000000000000000000000000000000000..5346f98324ad83171824f8a71b431a2db46526e2
--- /dev/null
+++ b/CheckersClient/android/assets/characters/atlases/RocketGuy.atlas
@@ -0,0 +1,27 @@
+
+RocketGuy.png
+size: 2048, 2048
+format: RGBA8888
+filter: Nearest, Nearest
+repeat: none
+RocketGuy1x
+  rotate: false
+  xy: 2, 1004
+  size: 1000, 1000
+  orig: 1000, 1000
+  offset: 0, 0
+  index: -1
+RocketGuy2x
+  rotate: false
+  xy: 2, 2
+  size: 1000, 1000
+  orig: 1000, 1000
+  offset: 0, 0
+  index: -1
+RocketGuy3x
+  rotate: false
+  xy: 1004, 1004
+  size: 1000, 1000
+  orig: 1000, 1000
+  offset: 0, 0
+  index: -1
diff --git a/CheckersClient/android/assets/characters/atlases/RocketGuy.png b/CheckersClient/android/assets/characters/atlases/RocketGuy.png
new file mode 100644
index 0000000000000000000000000000000000000000..180b8a67cd98d7307de04b23dc614302a0bc00c4
Binary files /dev/null and b/CheckersClient/android/assets/characters/atlases/RocketGuy.png differ
diff --git a/CheckersClient/android/assets/cinematic/CinematicMusic.mp3 b/CheckersClient/android/assets/cinematic/CinematicMusic.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..704fec6dd367e3de9ed0785ec5a11f598201fd78
Binary files /dev/null and b/CheckersClient/android/assets/cinematic/CinematicMusic.mp3 differ
diff --git a/CheckersClient/android/assets/cinematic/Cloud1.png b/CheckersClient/android/assets/cinematic/Cloud1.png
new file mode 100644
index 0000000000000000000000000000000000000000..bb442086e41ac13f3d197451b242476abc628603
Binary files /dev/null and b/CheckersClient/android/assets/cinematic/Cloud1.png differ
diff --git a/CheckersClient/android/assets/cinematic/Cloud2.png b/CheckersClient/android/assets/cinematic/Cloud2.png
new file mode 100644
index 0000000000000000000000000000000000000000..d8d8f87a79786cf74944a9c239b4e3df44ad61fd
Binary files /dev/null and b/CheckersClient/android/assets/cinematic/Cloud2.png differ
diff --git a/CheckersClient/android/assets/cinematic/Cloud3.png b/CheckersClient/android/assets/cinematic/Cloud3.png
new file mode 100644
index 0000000000000000000000000000000000000000..725e50e800545898e797867124e41a582aa74d66
Binary files /dev/null and b/CheckersClient/android/assets/cinematic/Cloud3.png differ
diff --git a/CheckersClient/android/assets/cinematic/Cloud4.png b/CheckersClient/android/assets/cinematic/Cloud4.png
new file mode 100644
index 0000000000000000000000000000000000000000..44fa2cb62ce53ba0cbacd0880c2b8ff089f16c91
Binary files /dev/null and b/CheckersClient/android/assets/cinematic/Cloud4.png differ
diff --git a/CheckersClient/android/assets/cinematic/Cloud5.png b/CheckersClient/android/assets/cinematic/Cloud5.png
new file mode 100644
index 0000000000000000000000000000000000000000..c4df1e05b20bd497d3764050a53190f8838dcb02
Binary files /dev/null and b/CheckersClient/android/assets/cinematic/Cloud5.png differ
diff --git a/CheckersClient/android/assets/cinematic/Cloud6.png b/CheckersClient/android/assets/cinematic/Cloud6.png
new file mode 100644
index 0000000000000000000000000000000000000000..cc424ea24795d11cd34f19e489e1232a19100aa6
Binary files /dev/null and b/CheckersClient/android/assets/cinematic/Cloud6.png differ
diff --git a/CheckersClient/android/assets/cinematic/Cloud7.png b/CheckersClient/android/assets/cinematic/Cloud7.png
new file mode 100644
index 0000000000000000000000000000000000000000..e3db6a487c35fbf3887f431cc01c901d1ce08cc2
Binary files /dev/null and b/CheckersClient/android/assets/cinematic/Cloud7.png differ
diff --git a/CheckersClient/android/assets/cinematic/Cloud8.png b/CheckersClient/android/assets/cinematic/Cloud8.png
new file mode 100644
index 0000000000000000000000000000000000000000..f2d6563a67fa7a8b8188212fa1c9d07160340c7a
Binary files /dev/null and b/CheckersClient/android/assets/cinematic/Cloud8.png differ
diff --git a/CheckersClient/android/assets/cinematic/atlas/Cloud.atlas b/CheckersClient/android/assets/cinematic/atlas/Cloud.atlas
new file mode 100644
index 0000000000000000000000000000000000000000..6e046584814de1c6217ef17b82aa8532b549d379
--- /dev/null
+++ b/CheckersClient/android/assets/cinematic/atlas/Cloud.atlas
@@ -0,0 +1,62 @@
+
+Cloud.png
+size: 1024, 512
+format: RGBA8888
+filter: Nearest, Nearest
+repeat: none
+Cloud1
+  rotate: false
+  xy: 2, 205
+  size: 299, 280
+  orig: 299, 280
+  offset: 0, 0
+  index: -1
+Cloud2
+  rotate: false
+  xy: 303, 238
+  size: 280, 247
+  orig: 280, 247
+  offset: 0, 0
+  index: -1
+Cloud3
+  rotate: false
+  xy: 2, 11
+  size: 210, 192
+  orig: 210, 192
+  offset: 0, 0
+  index: -1
+Cloud4
+  rotate: false
+  xy: 727, 316
+  size: 117, 169
+  orig: 117, 169
+  offset: 0, 0
+  index: -1
+Cloud5
+  rotate: false
+  xy: 585, 315
+  size: 140, 170
+  orig: 140, 170
+  offset: 0, 0
+  index: -1
+Cloud6
+  rotate: false
+  xy: 846, 373
+  size: 111, 112
+  orig: 111, 112
+  offset: 0, 0
+  index: -1
+Cloud7
+  rotate: false
+  xy: 214, 94
+  size: 109, 109
+  orig: 109, 109
+  offset: 0, 0
+  index: -1
+Cloud8
+  rotate: false
+  xy: 214, 2
+  size: 80, 90
+  orig: 80, 90
+  offset: 0, 0
+  index: -1
diff --git a/CheckersClient/android/assets/cinematic/atlas/Cloud.png b/CheckersClient/android/assets/cinematic/atlas/Cloud.png
new file mode 100644
index 0000000000000000000000000000000000000000..c1478599adc99e6c2d635dac8b4038deba2282e2
Binary files /dev/null and b/CheckersClient/android/assets/cinematic/atlas/Cloud.png differ
diff --git a/CheckersClient/android/assets/cinematic/atlas/CountDown.atlas b/CheckersClient/android/assets/cinematic/atlas/CountDown.atlas
new file mode 100644
index 0000000000000000000000000000000000000000..6648bd910a9a2617c548643a3d97c6f08ea4e1cd
--- /dev/null
+++ b/CheckersClient/android/assets/cinematic/atlas/CountDown.atlas
@@ -0,0 +1,27 @@
+
+CountDown.png
+size: 2048, 512
+format: RGBA8888
+filter: Nearest, Nearest
+repeat: none
+CountDown1
+  rotate: false
+  xy: 354, 2
+  size: 350, 350
+  orig: 350, 350
+  offset: 0, 0
+  index: -1
+CountDown2
+  rotate: false
+  xy: 2, 2
+  size: 350, 350
+  orig: 350, 350
+  offset: 0, 0
+  index: -1
+CountDown3
+  rotate: false
+  xy: 706, 2
+  size: 350, 350
+  orig: 350, 350
+  offset: 0, 0
+  index: -1
diff --git a/CheckersClient/android/assets/cinematic/atlas/CountDown.png b/CheckersClient/android/assets/cinematic/atlas/CountDown.png
new file mode 100644
index 0000000000000000000000000000000000000000..fc91e7a03b368fda24e51f83dc032efa54c4147e
Binary files /dev/null and b/CheckersClient/android/assets/cinematic/atlas/CountDown.png differ
diff --git a/CheckersClient/build.gradle b/CheckersClient/build.gradle
index 9d029760e9c300472e88cde54c412a341f3f91e4..dfc747b21022807316a09656376034b42935c0f6 100644
--- a/CheckersClient/build.gradle
+++ b/CheckersClient/build.gradle
@@ -13,8 +13,6 @@ buildscript {
         classpath 'com.android.tools.build:gradle:3.5.4'
         classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
 
-
-
     }
 }
 
@@ -53,6 +51,7 @@ project(":desktop") {
         api "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
 
         implementation group: "com.esotericsoftware", name: 'kryonet', version: "2.22.0-RC1"
+        implementation group: "org.javatuples", name: 'javatuples', version: "1.2"
     }
 }
 
@@ -79,6 +78,7 @@ project(":android") {
         api "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
 
         implementation group: "com.esotericsoftware", name: 'kryonet', version: "2.22.0-RC1"
+        implementation group: "org.javatuples", name: 'javatuples', version: "1.2"
     }
 }
 
@@ -92,5 +92,6 @@ project(":core") {
         api "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
 
         implementation group: "com.esotericsoftware", name: 'kryonet', version: "2.22.0-RC1"
+        implementation group: "org.javatuples", name: 'javatuples', version: "1.2"
     }
 }
\ No newline at end of file
diff --git a/CheckersClient/core/src/com/mygdx/game/UniCheckersClient.java b/CheckersClient/core/src/com/mygdx/game/UniCheckersClient.java
index 147d4749d671d6bf641e5624b22e552c28acd5c8..872de7e1eaaa7e9133c1ce0baf95a41ae359a990 100644
--- a/CheckersClient/core/src/com/mygdx/game/UniCheckersClient.java
+++ b/CheckersClient/core/src/com/mygdx/game/UniCheckersClient.java
@@ -3,24 +3,36 @@ package com.mygdx.game;
 import com.badlogic.gdx.ApplicationAdapter;
 import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.assets.AssetManager;
+import com.badlogic.gdx.assets.loaders.resolvers.InternalFileHandleResolver;
 import com.badlogic.gdx.graphics.GL20;
 import com.badlogic.gdx.graphics.g2d.SpriteBatch;
 import com.badlogic.gdx.scenes.scene2d.Stage;
 import com.badlogic.gdx.scenes.scene2d.ui.Skin;
 import com.badlogic.gdx.utils.viewport.FitViewport;
 import com.badlogic.gdx.utils.viewport.Viewport;
+import com.mygdx.game.controllers.GameController;
 import com.mygdx.game.controllers.NetworkController;
 import com.mygdx.game.controllers.PlayerController;
+import com.mygdx.game.model.DefaultBoard;
 import com.mygdx.game.model.Game;
+import com.mygdx.game.model.GameMode;
 import com.mygdx.game.model.GameState;
+import com.mygdx.game.model.gamemodes.rules.DefaultRules;
+import com.mygdx.game.views.CinematicView;
 import com.mygdx.game.views.GameViewManager;
-import com.mygdx.game.views.MenuLoadingView;
+import com.mygdx.game.views.LoadingView;
+import com.mygdx.game.views.PlayView;
+import com.mygdx.game.views.enums.CharacterAssets;
+import com.mygdx.game.views.enums.CinematicAssets;
+import com.mygdx.game.views.enums.LobbyAssets;
+import com.mygdx.game.views.enums.MenuAssets;
 
 import java.util.ArrayList;
 
 public class UniCheckersClient extends ApplicationAdapter {
 
 	PlayerController playerController;
+	GameController gameController;
 
 	private GameViewManager gvm;
 	private SpriteBatch sb;
@@ -35,17 +47,15 @@ public class UniCheckersClient extends ApplicationAdapter {
 
 	@Override
 	public void create () {
-		Gdx.gl.glClearColor(1, 1, 1, 1);
-
-
+		Gdx.gl.glClearColor(0, 0, 1, 1);
 
 		viewport = new FitViewport(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
 		stage = new Stage(viewport);
 		Gdx.input.setInputProcessor(stage);
 
 		// Initialize Models..
-		Game model = new Game(new GameState());
-		System.out.println("Det gikk bra");
+		// Temporary model with default board and rules
+		Game model = new Game(new GameState(new GameMode(new DefaultRules(), new DefaultBoard())));
 
 		// Initialize controllers..
 		NetworkController networkController = new NetworkController();
@@ -53,12 +63,16 @@ public class UniCheckersClient extends ApplicationAdapter {
 
 		// Initialize Views..
 		sb = new SpriteBatch();
-		assetManager = new AssetManager();
+		assetManager = new AssetManager(new InternalFileHandleResolver());
 
 		skin = new Skin(Gdx.files.internal("UISkins/glassy/skin/glassy-ui.json"));
 		gvm = new GameViewManager();
-		gvm.push(new MenuLoadingView(gvm, playerController, assetManager, stage, skin));
 
+		//gvm.push(new LoadingView(gvm, playerController, assetManager, stage, skin));
+		//gvm.push(new CinematicView(gvm, playerController, assetManager, stage, skin));
+		PlayView playView = new PlayView(gvm, playerController, assetManager, stage, skin, null);
+		gameController = new GameController(model, playView);
+		gvm.push(playView);
 	}
 
 	@Override
@@ -66,8 +80,12 @@ public class UniCheckersClient extends ApplicationAdapter {
 		Gdx.gl.glClearColor(1, 1, 1, 1);
 		Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
 		float dt = Gdx.graphics.getDeltaTime();
-		gvm.update(dt); //updates view
+		gvm.handleInput(dt);
+		gvm.update(dt);
 		gvm.render(dt);
+
+		if(gvm.getStartFadeIn() && !gvm.getStartFadeOut()) gvm.fadeIn(dt);
+		else if(gvm.getStartFadeOut() && !gvm.getStartFadeIn()) gvm.fadeOut(dt);
 	}
 
 }
diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/GameController.java b/CheckersClient/core/src/com/mygdx/game/controllers/GameController.java
new file mode 100644
index 0000000000000000000000000000000000000000..5756b5486e508d333cbc3e5af5b469a45b65ef1c
--- /dev/null
+++ b/CheckersClient/core/src/com/mygdx/game/controllers/GameController.java
@@ -0,0 +1,35 @@
+package com.mygdx.game.controllers;
+
+import com.badlogic.gdx.math.Vector3;
+import com.mygdx.game.model.Game;
+import com.mygdx.game.views.PlayView;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class GameController {
+
+    private Game model;
+    private PlayView view;
+
+    public GameController(Game model, PlayView view) {
+        this.model = model;
+        this.view = view;
+
+        List<List<Vector3>> startFieldCoordinates = this.model.getStartFieldCoordinates();
+
+        List<List<Float[]>> startFieldCoordinatesPixel = new ArrayList<>();
+
+        for (List<Vector3> coordinateSet : startFieldCoordinates) {
+            List<Float[]> coordinateSetPixel = new ArrayList<>();
+
+            for (Vector3 coordinate : coordinateSet) {
+                coordinateSetPixel.add(UtilsKt.cubeToPixel(coordinate, 100F));
+            }
+
+            startFieldCoordinatesPixel.add(coordinateSetPixel);
+        }
+
+        this.view.initializePieces(startFieldCoordinatesPixel);
+    }
+}
diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/NetworkController.java b/CheckersClient/core/src/com/mygdx/game/controllers/NetworkController.java
index 88e367a27f80bc6a8732bebadb448982cb198d42..1392a4fde07c7bf38672b49ab1896fef6c21e123 100644
--- a/CheckersClient/core/src/com/mygdx/game/controllers/NetworkController.java
+++ b/CheckersClient/core/src/com/mygdx/game/controllers/NetworkController.java
@@ -1,10 +1,7 @@
 package com.mygdx.game.controllers;
 
-import com.badlogic.gdx.utils.Queue;
 import com.esotericsoftware.kryo.Kryo;
 import com.esotericsoftware.kryonet.Client;
-import com.esotericsoftware.kryonet.Server;
-import com.mygdx.game.UniCheckersClient;
 import com.mygdx.game.controllers.commands.Command;
 import com.mygdx.game.controllers.commands.*;
 import com.mygdx.game.model.Lobby;
@@ -17,9 +14,8 @@ public class NetworkController {
 
     private Client client;
     private Kryo kryo;
-    private Queue<Command> commandQueue;
 
-    private boolean devMode = true;
+    private boolean devMode = false;
 
     public NetworkController(){
         this.client = new Client();
@@ -32,18 +28,12 @@ public class NetworkController {
         }
         kryo = client.getKryo();
         registerClasses();
-        commandQueue = new Queue<>();
     }
 
     public void sendToServer(Command command){
-        //commandQueue.addFirst(command);
         client.sendTCP(command);
     }
 
-    public void clearCommands(){
-        commandQueue.clear();
-    }
-
     public void registerClasses(){
         kryo.register(ArrayList.class, 100);
         kryo.register(Lobby.class, 5);
@@ -56,6 +46,10 @@ public class NetworkController {
         kryo.register(cLobbyLeave.class, 22);
         kryo.register(cLobbyDelete.class, 23);
         kryo.register(cLobbyGetList.class, 24);
+        kryo.register(cSetIndexAvatar.class, 25);
+        kryo.register(cSetPlayerReady.class, 26);
+        kryo.register(cSetPlayerName.class, 27);
+        kryo.register(cStartGame.class, 28);
     }
 
     public Client getClient() { return client; }
diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/PlayerController.java b/CheckersClient/core/src/com/mygdx/game/controllers/PlayerController.java
index b583aee91f43ac58278a1522a2f08ffc9da9cc9a..14b1461a79cbb67cc6d2b741d293cd0f02132497 100644
--- a/CheckersClient/core/src/com/mygdx/game/controllers/PlayerController.java
+++ b/CheckersClient/core/src/com/mygdx/game/controllers/PlayerController.java
@@ -1,25 +1,32 @@
 package com.mygdx.game.controllers;
 
+import com.badlogic.gdx.utils.Null;
 import com.esotericsoftware.kryonet.Connection;
 import com.esotericsoftware.kryonet.Listener;
 import com.mygdx.game.controllers.commands.*;
 import com.mygdx.game.model.Lobby;
 import com.mygdx.game.model.Player;
 
+import org.javatuples.Pair;
+
 import java.util.ArrayList;
+import java.util.LinkedList;
+
 
 public class PlayerController {
 
     private NetworkController net;
+    private LinkedList<Command> receivedCommands;
     private Player player;               //This is the current player
     private Lobby lobby;                 //Current lobby
     private ArrayList<Lobby> lobbies;    //List of all lobbies
 
-
-    private String playerName; // NB..! THIS IS TEMPORARY.. SHOULD BE IN MODEL..
-
     public PlayerController(NetworkController networkController){
         net = networkController;
+        player = new Player(-1);
+        lobby = new Lobby(-1);
+        lobbies = new ArrayList<Lobby>();
+        receivedCommands = new LinkedList<Command>();
 
         net.getClient().addListener(new Listener() {
             public void received (Connection connection, Object object) {
@@ -27,39 +34,40 @@ public class PlayerController {
                     Command command = (Command) object;
                     System.out.println("Received: "+ command.toString());
                     command.execute(getPlayerController(), connection);
+                    receivedCommands.removeFirst();
+                    receivedCommands.addFirst(command);
                 }
             }
         });
+        connectPlayer(0);
+    }
 
-        net.sendToServer(new cPlayerJoin());
+    private void sendCommand(Command command){
+        receivedCommands.addFirst(null);
+        net.sendToServer(command);
     }
 
+    public void lobbyGetList(){ sendCommand(new cLobbyGetList()); }
 
-    public void issueACommand(String commandString) {
-        if (commandString.equals("W")){
-            cPlayerPieceMove newCommand = new cPlayerPieceMove();
-            net.sendToServer(newCommand);
-        }
+    public void setLobbyPlayerReady(boolean isPlayerReady){
+        sendCommand(new cSetPlayerReady(isPlayerReady, lobby.getID(), player.getID()));
     }
 
-    // This could be a command invoked on the controller that changes PlayerState in the model. (Bit hard since model isn't written yet..)
-    public void setPlayerName(String playerName){
-        this.playerName = playerName;
-        System.out.println("Updating playername.. Name is " + playerName);
-        // UpdatePlayerName code
-    }
+    public void connectPlayer(int avatarIndex){ sendCommand(new cPlayerJoin(avatarIndex));}
 
-    public String getPlayerName(){
-        return this.playerName;
-    }
+    public void createLobby(String name, int MAX_PLAYERS){ sendCommand(new cLobbyCreate(name, MAX_PLAYERS)); }
 
-    public void joinLobby(int id){ net.sendToServer(new cLobbyJoin(id)); }
+    public void updateIndexAvatar(int indexAvatar){ sendCommand(new cSetIndexAvatar(indexAvatar)); }
+
+    public void playerSetName(String name) {
+        sendCommand(new cSetPlayerName(name));
+    }
 
-    public void lobbyGetList(){ net.sendToServer(new cLobbyGetList()); }
+    public void deleteLobby(int id){ sendCommand(new cLobbyDelete(id)); }
 
-    public void createLobby(int MAX_PLAYERS){ net.sendToServer(new cLobbyCreate(MAX_PLAYERS)); }
+    public void joinLobby(int id){ sendCommand(new cLobbyJoin(id)); }
 
-    public void deleteLobby(int id){ net.sendToServer(new cLobbyDelete(id)); }
+    public void leaveLobby(int id) { sendCommand(new cLobbyLeave(id)); }
 
     public Lobby getLobby(){ return lobby; }
 
@@ -73,7 +81,27 @@ public class PlayerController {
 
     public void setLobbies(ArrayList<Lobby> lobbies){ this.lobbies = lobbies; }
 
+    public boolean isOwningPlayerInLobby(){
+        try{
+            if(lobby==null){
+                return false;
+            }
+            else if(lobby.getID() == -1){
+                return false;
+            }
+            else{
+                return true;
+            }
+        }catch (NullPointerException e){
+            return false;
+        }
+    }
+
     public PlayerController getPlayerController(){ return this; }
 
     public NetworkController getNetWorkController() { return net; }
+
+    public Command getLastCommand(){ return receivedCommands.getFirst(); }
+
+
 }
diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/commands/Command.java b/CheckersClient/core/src/com/mygdx/game/controllers/commands/Command.java
index 9da62d69f3aee8d931616c2394e8aa811240e02c..b8bb4a064a608a853094fc3f0db75d0ea0d88286 100644
--- a/CheckersClient/core/src/com/mygdx/game/controllers/commands/Command.java
+++ b/CheckersClient/core/src/com/mygdx/game/controllers/commands/Command.java
@@ -19,6 +19,7 @@ public class Command{
         this.data = "None";
     }
 
+
     public void execute(PlayerController playerController, Connection connection){}
 
     public String getText(){ return text; }
diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cLobbyCreate.java b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cLobbyCreate.java
index de48edb5cfae4fc4fb5e2f5443ee8ba8d28d5e8a..45856d504f3926f95185e1915a5b1fc28830a384 100644
--- a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cLobbyCreate.java
+++ b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cLobbyCreate.java
@@ -4,11 +4,19 @@ import com.esotericsoftware.kryonet.Connection;
 import com.mygdx.game.controllers.PlayerController;
 import com.mygdx.game.model.Lobby;
 
+import java.util.ArrayList;
+
 public class cLobbyCreate extends Command {
 
     public cLobbyCreate() { super("cLobbyCreate"); }
 
-    public cLobbyCreate(int MAX_PLAYERS) { super("cLobbyCreate", (Integer) MAX_PLAYERS); }
+    public cLobbyCreate(String name, int MAX_PLAYERS) {
+        super("cLobbyCreate");
+        ArrayList<Object> data = new ArrayList<Object>();
+        data.add(name);
+        data.add(MAX_PLAYERS);
+        this.data = data;
+    }
 
     @Override
     public void execute(PlayerController playerController, Connection connection){
diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cLobbyJoin.java b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cLobbyJoin.java
index 59ae87197d3f28afaf2f4f472ed289be75421b6c..77d5b4e4f1eb2d301beeb96eeab8d3c33bd87ca7 100644
--- a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cLobbyJoin.java
+++ b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cLobbyJoin.java
@@ -9,7 +9,9 @@ public class cLobbyJoin extends Command{
 
     public cLobbyJoin() { super("cLobbyJoin"); }
 
-    public cLobbyJoin(int id) { super("cLobbyJoin", (Integer) id); }
+    public cLobbyJoin(int id) {
+        super("cLobbyJoin", (Integer) id);
+    }
 
     @Override
     public void execute(PlayerController playerController, Connection connection){
diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cLobbyLeave.java b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cLobbyLeave.java
index 90b4200c309965ce6d68fe7d81967ee6506d292c..21c47b8be275a93e9b65009cd363ddf7685ebb24 100644
--- a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cLobbyLeave.java
+++ b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cLobbyLeave.java
@@ -12,12 +12,22 @@ public class cLobbyLeave extends Command{
 
     @Override
     public void execute(PlayerController playerController, Connection connection){
-        if(data instanceof Integer){
-            int result = (int) data;
-            if (result == -1) System.out.println("Failed to leave lobby");
-            else {
-                playerController.setLobby(new Lobby(-1));
-                System.out.println("Request to leave lobby successful");
+        if(data instanceof Lobby){
+            Lobby lobby = (Lobby) data;
+            if(lobby.getID() != -1){
+                if (lobby.getPlayersID().contains((Integer) connection.getID())) {
+                    //Somebody else left
+                    System.out.println("Somebody left the lobby");
+                    playerController.setLobby(lobby);
+                }
+                else{
+                    //The current player left
+                    playerController.setLobby(new Lobby(-1));
+                    System.out.println("Request to leave lobby successful");
+                }
+            }
+            else{
+                System.out.println("Received leaveLobby command with an error");
             }
         }
     }
diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cPlayerJoin.java b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cPlayerJoin.java
index 77c20a07fa49c6ed732ccc96aa3e11037de26bab..bae2c3eea518a58867241addae49b42a7450f198 100644
--- a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cPlayerJoin.java
+++ b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cPlayerJoin.java
@@ -11,6 +11,10 @@ public class cPlayerJoin extends Command {
         super("cPlayerJoin");
     }
 
+    public cPlayerJoin(int indexAvatar) {
+        super("cPlayerJoin", (Integer) indexAvatar);
+    }
+
     @Override
     public void execute(PlayerController playerController, Connection connection){
         if(data instanceof Player){
diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cSetIndexAvatar.java b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cSetIndexAvatar.java
new file mode 100644
index 0000000000000000000000000000000000000000..fb713e07bfc07644cce55e5c140248a29bdd0427
--- /dev/null
+++ b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cSetIndexAvatar.java
@@ -0,0 +1,26 @@
+package com.mygdx.game.controllers.commands;
+
+import com.esotericsoftware.kryonet.Connection;
+import com.mygdx.game.controllers.NetworkController;
+import com.mygdx.game.controllers.PlayerController;
+import com.mygdx.game.model.Lobby;
+
+public class cSetIndexAvatar extends Command {
+
+    public cSetIndexAvatar() { super("cSetIndexAvatar"); }
+
+    public cSetIndexAvatar(int indexAvatar) {
+        super("cSetIndexAvatar", indexAvatar);
+    }
+
+    @Override
+    public void execute(PlayerController playerController, Connection connection){
+        if(data instanceof Integer){
+            int indexAvatar = (int) data;
+            if (indexAvatar == -1) System.out.println("Failed to set indexAvatar.");
+            else {
+                playerController.getPlayer().setIndexAvatar(indexAvatar);
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cSetPlayerName.java b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cSetPlayerName.java
new file mode 100644
index 0000000000000000000000000000000000000000..b89a72c7761aae6c0c02746b267fc03ed28de372
--- /dev/null
+++ b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cSetPlayerName.java
@@ -0,0 +1,27 @@
+package com.mygdx.game.controllers.commands;
+
+import com.esotericsoftware.kryonet.Connection;
+import com.mygdx.game.controllers.PlayerController;
+import com.mygdx.game.model.Lobby;
+import com.mygdx.game.model.Player;
+
+import org.javatuples.Pair;
+
+
+public class cSetPlayerName extends Command{
+
+    public cSetPlayerName() { super("cSetPlayerName"); }
+
+    public cSetPlayerName(String name) {
+        super("cSetPlayerName", name);
+    }
+
+    @Override
+    public void execute(PlayerController playerController, Connection connection){
+        if(data instanceof String){
+            String name = (String) data;
+            playerController.getPlayer().setPlayerName(name);
+            System.out.printf("Player name is updated on server. %s \n", name);
+        }
+    }
+}
diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cSetPlayerReady.java b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cSetPlayerReady.java
new file mode 100644
index 0000000000000000000000000000000000000000..af752e948d1799a52c28ba486a32bd24084d5787
--- /dev/null
+++ b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cSetPlayerReady.java
@@ -0,0 +1,35 @@
+package com.mygdx.game.controllers.commands;
+
+import com.esotericsoftware.kryonet.Connection;
+import com.mygdx.game.controllers.PlayerController;
+
+public class cSetPlayerReady extends Command{
+
+    public cSetPlayerReady() { super("cSetPlayerReady"); }
+
+    private int lobbyID;
+    private int playerID;
+
+    public cSetPlayerReady(boolean isPlayerReady, int lobbyID) {
+        super("cSetPlayerReady", isPlayerReady);
+        this.lobbyID = lobbyID;
+        this.playerID = playerID;
+    }
+
+    public cSetPlayerReady(boolean isPlayerReady, int lobbyID, int playerID) {
+        super("cSetPlayerReady", isPlayerReady);
+        this.lobbyID = lobbyID;
+        this.playerID = playerID;
+    }
+
+    @Override
+    public void execute(PlayerController playerController, Connection connection){
+        if(data instanceof Boolean){
+            boolean isPlayerReady = (Boolean) data;
+            if(playerID == playerController.getPlayer().getID()) playerController.getPlayer().setIsPlayerReady(isPlayerReady);
+            playerController.getLobby().getPlayerByID(playerID).setIsPlayerReady(isPlayerReady);
+            //System.out.println("value of playerID" + playerID);
+            System.out.printf("Player status updated. Is player %d currently ready? %b \n", playerID, isPlayerReady);
+        }
+    }
+}
diff --git a/CheckersClient/core/src/com/mygdx/game/controllers/commands/cStartGame.java b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cStartGame.java
new file mode 100644
index 0000000000000000000000000000000000000000..65911658b63156212ab1b12872670dc2ebab5db2
--- /dev/null
+++ b/CheckersClient/core/src/com/mygdx/game/controllers/commands/cStartGame.java
@@ -0,0 +1,19 @@
+package com.mygdx.game.controllers.commands;
+
+
+import com.esotericsoftware.kryonet.Connection;
+import com.mygdx.game.controllers.PlayerController;
+
+public class cStartGame extends Command{
+
+    public cStartGame() { super("cStartGame"); }
+
+    public cStartGame(int id) { super("cStartGame", (Integer) id); }
+
+    @Override
+    public void execute(PlayerController playerController, Connection connection){
+        playerController.getLobby().setLobbyGameStarted(true);
+        System.out.println("GAME HAS STARTED");
+
+    }
+}
diff --git a/CheckersClient/core/src/com/mygdx/game/model/Game.kt b/CheckersClient/core/src/com/mygdx/game/model/Game.kt
index 1aaed5dde9c864667c4016b8844b114fc1c08cb6..cfce692310a7fa6aa0d9590b8cb343238adb492f 100644
--- a/CheckersClient/core/src/com/mygdx/game/model/Game.kt
+++ b/CheckersClient/core/src/com/mygdx/game/model/Game.kt
@@ -1,5 +1,7 @@
 package com.mygdx.game.model
 
+import com.badlogic.gdx.math.Vector3
+
 //Logic of the game, holds a GameState, operations
 //(((Controller???))) Model can change its own data, but has to be told by controller
 
@@ -10,4 +12,8 @@ class Game(gameState: GameState) {
     init {
         this.gameState = gameState
     }
+
+    fun getStartFieldCoordinates(): List<List<Vector3>>? {
+        return this.gameState.getRules()?.generateStartFields()
+    }
 }
\ No newline at end of file
diff --git a/CheckersClient/core/src/com/mygdx/game/model/Lobby.java b/CheckersClient/core/src/com/mygdx/game/model/Lobby.java
index d198b3d091395e403dbca069f5988b14323bbf5c..9dfe3ba94a9b4feb979a8b3812d3125ef1c301fd 100644
--- a/CheckersClient/core/src/com/mygdx/game/model/Lobby.java
+++ b/CheckersClient/core/src/com/mygdx/game/model/Lobby.java
@@ -1,12 +1,15 @@
 package com.mygdx.game.model;
 
 import java.util.ArrayList;
+import java.util.HashSet;
 
 public class Lobby {
 
     private int ID;
+    private String name;
     private int MAX_PLAYERS;
     private ArrayList<Player> players;
+    private boolean lobbyGameStarted = false;
 
     public Lobby() {}
 
@@ -15,14 +18,57 @@ public class Lobby {
         players = new ArrayList<Player>();
     }
 
-    public Lobby(int ID, int MAX_PLAYERS){
+    public Lobby(int ID, String name, int MAX_PLAYERS){
         this.ID = ID;
+        this.name = name;
         this.MAX_PLAYERS = MAX_PLAYERS;
         players = new ArrayList<Player>();
     }
 
     public int getID(){ return ID; }
 
+    public boolean getLobbyGameStarted(){
+        return lobbyGameStarted;
+    }
+    public void setLobbyGameStarted(boolean lobbyGameStarted){
+        this.lobbyGameStarted = lobbyGameStarted;
+    }
+
+    public void setName(String name){
+        this.name = name;
+    }
+
+    public String getName(){
+        return name;
+    }
+
+    public Player getPlayerByID(int playerID){
+
+        Player returnPlayer = null;
+
+        for (Player player : players){
+            if (player.getID() == playerID) returnPlayer = player;
+        }
+
+        return returnPlayer;
+    }
+
+    public int getMaxPlayers(){
+        return MAX_PLAYERS;
+    }
+
+    public ArrayList<Player> getPlayers(){
+        return players;
+    }
+
+    public HashSet<Integer> getPlayersID(){
+        HashSet set = new HashSet();
+        for(Player player : players){
+            set.add((Integer) player.getID());
+        }
+        return set;
+    }
+
     @Override
     public boolean equals(Object o) {
         if (this == o) return true;
@@ -35,9 +81,9 @@ public class Lobby {
     public String toString() {
         return "Lobby{" +
                 "ID=" + ID +
+                ", name='" + name + '\'' +
                 ", MAX_PLAYERS=" + MAX_PLAYERS +
                 ", players=" + players +
                 '}';
     }
-
 }
diff --git a/CheckersClient/core/src/com/mygdx/game/model/Player.java b/CheckersClient/core/src/com/mygdx/game/model/Player.java
index 168218638ce097035d6195ac675d782d2e72e10f..1a3a7c9799d7ae0c34ea13715a652ca6d86a787b 100644
--- a/CheckersClient/core/src/com/mygdx/game/model/Player.java
+++ b/CheckersClient/core/src/com/mygdx/game/model/Player.java
@@ -3,11 +3,17 @@ package com.mygdx.game.model;
 public class Player {
 
     private int ID;
+    private int indexAvatar;
+    private String playerName;
+    private boolean isPlayerReady;
 
     public Player(){}
 
-    public Player(int ID){
+    public Player(int ID){ this.ID = ID; }
+
+    public Player(int ID, int indexAvatar){
         this.ID = ID;
+        this.indexAvatar = indexAvatar;
     }
 
     public int getID(){ return ID; }
@@ -26,4 +32,28 @@ public class Player {
                 "ID=" + ID +
                 '}';
     }
+
+    public void setIndexAvatar(int indexAvatar){
+        this.indexAvatar = indexAvatar;
+    }
+
+    public int getIndexAvatar(){
+        return this.indexAvatar;
+    }
+
+    public void setPlayerName(String playerName) {
+        this.playerName = playerName;
+    }
+
+    public String getPlayerName(){
+        return this.playerName;
+    }
+
+    public void setIsPlayerReady(boolean isPlayerReady) {
+        this.isPlayerReady = isPlayerReady;
+    }
+
+    public boolean getIsPlayerReady(){
+        return this.isPlayerReady;
+    }
 }
diff --git a/CheckersClient/core/src/com/mygdx/game/model/gamemodes/rules/AbstractRules.kt b/CheckersClient/core/src/com/mygdx/game/model/gamemodes/rules/AbstractRules.kt
index 0459f5911ed156ad01d652f2d56314a779f8e0ac..7ef5f737eca93795b1a7c113b2d4c15330999f24 100644
--- a/CheckersClient/core/src/com/mygdx/game/model/gamemodes/rules/AbstractRules.kt
+++ b/CheckersClient/core/src/com/mygdx/game/model/gamemodes/rules/AbstractRules.kt
@@ -10,4 +10,5 @@ abstract class AbstractRules {
 
     abstract fun getPlayerStartfields(playerId: Int) : List<Vector3>  // Returns a list of startfields for a given player
     abstract fun getPlayerTargetFields(playerId: Int) : List<Vector3> // Returns a list of targetfields for a given player
+    abstract fun generateStartFields(): List<List<Vector3>>           // Returns a list with lists of startfields
 }
\ No newline at end of file
diff --git a/CheckersClient/core/src/com/mygdx/game/model/gamemodes/rules/DefaultRules.kt b/CheckersClient/core/src/com/mygdx/game/model/gamemodes/rules/DefaultRules.kt
index 025b07e9b23a9b46e9a5402d38046f5b3f80fe80..2f32088d1f2c1fe5361b40566a16587d83c378aa 100644
--- a/CheckersClient/core/src/com/mygdx/game/model/gamemodes/rules/DefaultRules.kt
+++ b/CheckersClient/core/src/com/mygdx/game/model/gamemodes/rules/DefaultRules.kt
@@ -27,7 +27,7 @@ class DefaultRules: AbstractRules() {
         return startFields[index]
     }
 
-    private fun generateStartFields(): List<List<Vector3>> {
+    override fun generateStartFields(): List<List<Vector3>> {
         return(listOf(
                     listOf( Vector3(1F,4F,-5F), Vector3(2F,3F,-5F), Vector3(3F,2F,-5F), Vector3(4F,1F,-5F),
                             Vector3(2F,4F,-6F), Vector3(3F,3F,-6F), Vector3(4F,2F,-6F), Vector3(3F,4F,-7F),
diff --git a/CheckersClient/core/src/com/mygdx/game/views/CinematicView.java b/CheckersClient/core/src/com/mygdx/game/views/CinematicView.java
new file mode 100644
index 0000000000000000000000000000000000000000..139aa54ba420c5b53f88bf02a61c23744044bbba
--- /dev/null
+++ b/CheckersClient/core/src/com/mygdx/game/views/CinematicView.java
@@ -0,0 +1,280 @@
+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.Camera;
+import com.badlogic.gdx.graphics.Color;
+import com.badlogic.gdx.graphics.Texture;
+import com.badlogic.gdx.graphics.g2d.TextureAtlas;
+import com.badlogic.gdx.graphics.g2d.TextureRegion;
+import com.badlogic.gdx.scenes.scene2d.Stage;
+import com.badlogic.gdx.scenes.scene2d.ui.Image;
+import com.badlogic.gdx.scenes.scene2d.ui.Skin;
+import com.mygdx.game.controllers.PlayerController;
+import com.mygdx.game.views.enums.CharacterAssets;
+import com.mygdx.game.views.enums.CinematicAssets;
+import com.mygdx.game.views.enums.LobbyAssets;
+import com.mygdx.game.views.enums.MenuAssets;
+import com.mygdx.game.views.tokens.AnimatedSprite;
+
+import java.util.ArrayList;
+
+
+public class CinematicView extends View{
+
+    private final Image lobbyImage;
+    private final Image backgroundImage;
+    private final Image rocketImage;
+    private final Image exhaustImage;
+    private final AnimatedSprite countDownAnimationSprite;
+
+    private ArrayList<AnimatedSprite> lobbyAvatars;
+    private final float keyframe1;
+    private final float keyframe2;
+    private final float keyframe3;
+    private final float keyframe4;
+    private final Music cinematicSound;
+    private float fadeInVolume;
+    private TextureAtlas cloudAtlas;
+    private TextureAtlas countDownAtlas;
+    private AnimatedSprite cloudSprite;
+    private float updateSpritesTimer;
+    private float updateAvatarFrequency = 0.120f;
+    private float timer = 0;
+    private final Camera cam;
+
+    boolean onlyOnce1 = true;
+    boolean onlyOnce2 = true;
+    boolean onlyOnce3 = true;
+
+    public CinematicView(GameViewManager gvm, PlayerController playerController, AssetManager assetManager, Stage stage, Skin skin, ArrayList<AnimatedSprite> lobbyAvatars) {
+        super(gvm, playerController, assetManager, stage, skin);
+
+        rocketImage = new Image((Texture) assetManager.get(LobbyAssets.ROCKET_SMALL.path, LobbyAssets.ROCKET_SMALL.classType));
+        rocketImage.setPosition(1556, 360);
+
+        countDownAtlas = (TextureAtlas)assetManager.get(CinematicAssets.COUNT_DOWN_ATLAS.path, CinematicAssets.COUNT_DOWN_ATLAS.classType);
+        cam = stage.getCamera();
+        cam.position.set(rocketImage.getX()+rocketImage.getWidth()/2, cam.viewportHeight/2, 0);
+
+        this.lobbyAvatars = lobbyAvatars;
+        fadeInLength = 0.5f;
+        fadeOutLength= 0.25f;
+
+        backgroundImage = new Image((Texture) assetManager.get(LobbyAssets.BACKGROUND.path, LobbyAssets.BACKGROUND.classType));
+
+        countDownAnimationSprite = new AnimatedSprite(
+                countDownAtlas, new TextureRegion ( (Texture) assetManager.get(MenuAssets.RED_CIRCLE_SMALL.path,
+                MenuAssets.RED_CIRCLE_SMALL.classType)),
+                "CountDown",
+                3);
+        countDownAnimationSprite.setPosition(cam.position.x-countDownAnimationSprite.getWidth()/2, rocketImage.getY()+rocketImage.getHeight()/2+countDownAnimationSprite.getHeight()/2);
+        countDownAnimationSprite.setAlpha(0);
+
+        exhaustImage = new Image((Texture) assetManager.get(LobbyAssets.ROCKET_EXHAUST.path, LobbyAssets.ROCKET_EXHAUST.classType));
+        exhaustImage.setSize(rocketImage.getHeight()/3, rocketImage.getHeight()/2);
+        exhaustImage.setPosition(rocketImage.getX()+rocketImage.getWidth()/2-exhaustImage.getWidth()/2, rocketImage.getY()-exhaustImage.getHeight());
+        exhaustImage.setColor(1, 1, 1, 0);
+
+        lobbyImage = new Image((Texture) assetManager.get(LobbyAssets.LOBBY.path, LobbyAssets.LOBBY.classType));
+        lobbyImage.setPosition(774, 192);
+
+        cinematicSound = (Music) assetManager.get(CinematicAssets.CINEMATIC_AUDIO.path, CinematicAssets.CINEMATIC_AUDIO.classType);
+
+        cloudAtlas = (TextureAtlas) assetManager.get(CinematicAssets.CLOUD_ATLAS.path, CinematicAssets.CLOUD_ATLAS.classType);
+        TextureRegion texReg = cloudAtlas.findRegion("Cloud1");
+        cloudSprite = new AnimatedSprite(cloudAtlas, texReg, "Cloud", 8);
+        cloudSprite.setPosition(774+lobbyImage.getWidth()/2, 140);
+        cloudSprite.setAlpha(0);
+        cloudSprite.setOrigin(0, 0);
+        countDownAnimationSprite.updateTexture();
+        countDownAnimationSprite.updateTexture();
+
+        setFadeColor(Color.BLACK);
+        stage.addActor(backgroundImage);
+        stage.addActor(lobbyImage);
+        stage.addActor(exhaustImage);
+        stage.addActor(rocketImage);
+
+        keyframe1 = 1.05f*1.92f;
+        keyframe2 = 2.1f*1.92f;
+        keyframe3 = 3.15f*1.92f;
+        keyframe4 = 3.3f*1.92f;
+
+
+    }
+
+    public CinematicView(GameViewManager gvm, PlayerController playerController, AssetManager assetManager, Stage stage, Skin skin){
+        this(gvm, playerController, assetManager, stage, skin, new ArrayList<AnimatedSprite>());
+
+        AnimatedSprite asianGirl = new AnimatedSprite(
+                (TextureAtlas) assetManager.get(CharacterAssets.AsianGirlAtlas.path, CharacterAssets.AsianGirlAtlas.classType),
+                new TextureRegion ( (Texture) assetManager.get(MenuAssets.RED_CIRCLE_SMALL.path, MenuAssets.RED_CIRCLE_SMALL.classType)),
+                "AsianGirl",
+                3);
+
+        AnimatedSprite regularGuy = new AnimatedSprite(
+                (TextureAtlas) assetManager.get(CharacterAssets.RegularGuyAtlas.path, CharacterAssets.RegularGuyAtlas.classType),
+                new TextureRegion ( (Texture) assetManager.get(MenuAssets.RED_CIRCLE_SMALL.path, MenuAssets.RED_CIRCLE_SMALL.classType)),
+                "RegularGuy",
+                3);
+
+        int xPad = 10;
+        int remX = 0;
+        int remY = 0;
+
+        asianGirl.setPosition(lobbyImage.getX()-xPad+remX*((lobbyImage.getWidth()-xPad)/4), lobbyImage.getY()-remY*(lobbyImage.getHeight()/7.5f));
+        asianGirl.setScale(0.3f+0.025f*remY, 0.3f+0.025f*remY);
+        asianGirl.setOrigin(0, 0);
+
+        remX = 1;
+        remY = 0;
+
+        regularGuy.setPosition(lobbyImage.getX()-xPad+remX*((lobbyImage.getWidth()-xPad)/4), lobbyImage.getY()-remY*(lobbyImage.getHeight()/7.5f));
+        regularGuy.setScale(0.3f+0.025f*remY, 0.3f+0.025f*remY);
+        regularGuy.setOrigin(0, 0);
+
+        lobbyAvatars.add(asianGirl);
+        lobbyAvatars.add(regularGuy);
+        stage.addActor(backgroundImage);
+        stage.addActor(lobbyImage);
+        stage.addActor(exhaustImage);
+        stage.addActor(rocketImage);
+
+    }
+
+
+    @Override
+    public void handleInput(float dt) {
+
+    }
+    float cloudSpriteAlpha = 1;
+
+    @Override
+    public void update(float dt) {
+
+        if(startFadeIn){
+
+        }
+        else{
+            updateSpritesTimer+= dt;
+            if(0<= timer && timer <= keyframe1){
+                System.out.println("KEYFRAME 1!!");
+                for(AnimatedSprite lobbyAvatar : lobbyAvatars){
+                    if(updateSpritesTimer >= updateAvatarFrequency) {
+                        lobbyAvatar.updateTexture();
+                    }
+                    lobbyAvatar.translateX(1);
+                }
+            }
+            if(keyframe1 <= timer &&  timer <= keyframe2){
+                System.out.println("KEYFRAME 2!!");
+                if(onlyOnce1){
+                    cloudSprite.setAlpha(1);
+                    countDownAnimationSprite.updateTexture();
+                    onlyOnce1 = false;
+                }
+                for(AnimatedSprite lobbyAvatar : lobbyAvatars){
+                    lobbyAvatar.translateX(50);
+                    if(lobbyAvatar.getX() >= cloudSprite.getX()+cloudSprite.getWidth()/2){
+                        lobbyAvatar.setAlpha( 0);
+                    }
+                }
+            }
+            if(keyframe2 <= timer &&  timer <= keyframe3){
+                if(onlyOnce2) {
+                    countDownAnimationSprite.updateTexture();
+                    exhaustImage.setColor(1, 1, 1, 1);
+                    onlyOnce2 = false;
+                }
+                rocketImage.setPosition(rocketImage.getX(), rocketImage.getY()+3);
+                exhaustImage.setPosition(exhaustImage.getX(), exhaustImage.getY()+3);
+                cam.position.set(rocketImage.getX(), rocketImage.getY(), 0);
+                System.out.println("KEYFRAME 3!!");
+            }
+            if(keyframe3 <= timer &&  timer <= keyframe4){
+                if(onlyOnce3) {
+                    countDownAnimationSprite.setAlpha(0);
+                    onlyOnce3 = false;
+                }
+                rocketImage.setPosition(rocketImage.getX(), rocketImage.getY()+50);
+                exhaustImage.setPosition(exhaustImage.getX(), exhaustImage.getY()+50);
+                System.out.println("KEYFRAME 4!!");
+                cloudSpriteAlpha -= dt*2;
+                cloudSprite.setAlpha(cloudSpriteAlpha);
+            }
+            if(timer>keyframe4){
+                startFadeout=true;
+                cloudSpriteAlpha -= dt*2;
+                cloudSprite.setAlpha(cloudSpriteAlpha);
+            }
+
+            if(updateSpritesTimer >= updateAvatarFrequency) {
+                cloudSprite.updateTexture();
+                updateSpritesTimer = 0;
+            }
+            //rocketImage.setPosition(rocketImage.getX(), rocketImage.getY()+3);
+            //exhaustImage.setPosition(exhaustImage.getX(), exhaustImage.getY()+3);
+            timer += dt;
+        }
+    }
+
+
+    @Override
+    public void render(float dt) {
+        stage.draw();
+        stage.getBatch().begin();
+
+        for(AnimatedSprite animatedSprite : lobbyAvatars){
+            animatedSprite.draw(stage.getBatch());
+        }
+
+        countDownAnimationSprite.draw(stage.getBatch());
+        cloudSprite.draw(stage.getBatch());
+
+
+        stage.getBatch().end();
+    }
+
+    @Override
+    public void fadeIn(float dt) {
+        stage.getBatch().begin();
+        Color c = stage.getBatch().getColor();
+        stage.getBatch().setColor(c.r, c.g, c.b, fadeOutAlpha);
+        fadeInAlpha -= dt/fadeInLength;
+        stage.getBatch().draw(fadeOverlayTexture, 0, 0, col_width*Help_Guides, row_height*Help_Guides);
+        stage.getBatch().setColor(c);
+        stage.getBatch().end();
+
+        if(fadeInAlpha <= 0){
+            countDownAnimationSprite.setAlpha(1);
+            cinematicSound.play();
+            startFadeIn = false;
+        }
+        fadeInVolume += dt/fadeOutLength;
+    }
+
+    @Override
+    public void fadeOut(float dt) {
+        stage.getBatch().begin();
+        Color c = stage.getBatch().getColor();
+        stage.getBatch().setColor(c.r, c.g, c.b, fadeOutAlpha);
+        fadeOutAlpha += dt/fadeOutLength;
+        stage.getBatch().draw(fadeOverlayTexture, cam.position.x-cam.viewportWidth/2, cam.position.y-cam.viewportHeight/2, col_width*Help_Guides, row_height*Help_Guides);
+        stage.getBatch().setColor(c);
+        stage.getBatch().end();
+
+        if(fadeOutAlpha >= 1){
+            stage.clear();
+            startFadeout = false;
+            gvm.set(new PlayView(gvm, playerController, assetManager, stage, skin, lobbyAvatars));
+        }
+    }
+
+    @Override
+    public void dispose() {
+        stage.dispose();
+    }
+}
diff --git a/CheckersClient/core/src/com/mygdx/game/views/GameViewManager.java b/CheckersClient/core/src/com/mygdx/game/views/GameViewManager.java
index f24c0d27f8ed6dd91872f34f0ea5ef2f1f7c9fe9..154bbc33b5977f585b3de67d398512e8e13f08db 100644
--- a/CheckersClient/core/src/com/mygdx/game/views/GameViewManager.java
+++ b/CheckersClient/core/src/com/mygdx/game/views/GameViewManager.java
@@ -1,9 +1,6 @@
 package com.mygdx.game.views;
 
 
-import com.badlogic.gdx.graphics.g2d.SpriteBatch;
-import com.badlogic.gdx.scenes.scene2d.Stage;
-
 import java.util.Stack;
 
 public class GameViewManager {
@@ -27,6 +24,10 @@ public class GameViewManager {
         views.push(view);
     }
 
+    public void handleInput(float dt){
+        views.peek().handleInput(dt);
+    }
+
     public void update(float dt){
         views.peek().update(dt);
     }
@@ -35,4 +36,20 @@ public class GameViewManager {
         views.peek().render(dt);
     }
 
+    public void fadeIn(float dt){
+        views.peek().fadeIn(dt);
+    }
+
+    public void fadeOut(float dt){
+        views.peek().fadeOut(dt);
+    }
+
+    public boolean getStartFadeIn(){
+        return views.peek().getStartFadeIn();
+    }
+
+    public boolean getStartFadeOut(){
+        return views.peek().getStartFadeOut();
+    }
+
 }
diff --git a/CheckersClient/core/src/com/mygdx/game/views/LoadingView.java b/CheckersClient/core/src/com/mygdx/game/views/LoadingView.java
new file mode 100644
index 0000000000000000000000000000000000000000..ffdadf1d75bd490ed8475a8f40941bdf80d37b19
--- /dev/null
+++ b/CheckersClient/core/src/com/mygdx/game/views/LoadingView.java
@@ -0,0 +1,100 @@
+package com.mygdx.game.views;
+
+import com.badlogic.gdx.assets.AssetManager;
+import com.badlogic.gdx.graphics.Color;
+import com.badlogic.gdx.graphics.Texture;
+import com.badlogic.gdx.math.MathUtils;
+import com.badlogic.gdx.scenes.scene2d.Stage;
+import com.badlogic.gdx.scenes.scene2d.ui.Image;
+import com.badlogic.gdx.scenes.scene2d.ui.Skin;
+import com.mygdx.game.controllers.PlayerController;
+import com.mygdx.game.views.enums.CharacterAssets;
+import com.mygdx.game.views.enums.LobbyAssets;
+import com.mygdx.game.views.enums.MenuAssets;
+
+public class LoadingView extends View {
+
+    private Image loadingTextImage = new Image(new Texture("Loading/LoadingText.png"));
+    private Image loadingDotImage = new Image(new Texture("Loading/LoadingDot.png"));
+    private Image loadingBarFillImage = new Image(new Texture("Loading/LoadingBarFill.png"));
+    private Image loadingBarBorderImage = new Image(new Texture("Loading/LoadingBarBorder.png"));
+    private Image loadingBarBackgroundImage = new Image(new Texture("Loading/LoadingBarBackground.png"));
+
+    public LoadingView(GameViewManager gvm, PlayerController playerController, AssetManager assetManager, Stage stage, Skin skin) {
+        super(gvm, playerController, assetManager, stage, skin);
+
+        this.loadingBarBackgroundImage.setPosition((float)(this.col_width * 6) - this.loadingBarBackgroundImage.getWidth() / 2.0F, (float)(this.row_height * 1));
+        this.loadingBarBorderImage.setPosition(this.loadingBarBackgroundImage.getX(), this.loadingBarBackgroundImage.getY());
+        this.loadingTextImage.setPosition(this.loadingBarBackgroundImage.getX(), this.loadingBarBackgroundImage.getY() + this.loadingTextImage.getHeight() * 1.25F);
+        this.loadingDotImage.setPosition(this.loadingTextImage.getX() + this.loadingDotImage.getWidth() * 2.0F, this.loadingTextImage.getY());
+        this.loadingBarFillImage.setBounds(this.loadingBarBackgroundImage.getX(), this.loadingBarBackgroundImage.getY(), this.loadingBarBackgroundImage.getWidth() * 0.05F, this.loadingBarBackgroundImage.getHeight());
+        stage.addActor(this.loadingTextImage);
+        stage.addActor(this.loadingDotImage);
+        stage.addActor(this.loadingBarBackgroundImage);
+        stage.addActor(this.loadingBarFillImage);
+        stage.addActor(this.loadingBarBorderImage);
+
+        for(MenuAssets asset : MenuAssets.values()) {
+            assetManager.load(asset.path, asset.classType);
+        }
+
+        for(CharacterAssets asset : CharacterAssets.values()) {
+            assetManager.load(asset.path, asset.classType);
+        }
+    }
+
+    @Override
+    public void handleInput(float dt) {
+
+    }
+
+    @Override
+    public void update(float dt) {
+        if(assetManager.update()){
+            startFadeout = true;
+        }
+        else{
+            loadingBarFillImage.setWidth(assetManager.getProgress()*loadingBarBackgroundImage.getWidth());
+        }
+    }
+
+    @Override
+    public void render(float dt) {
+        stage.draw();
+    }
+
+    @Override
+    public void fadeIn(float dt) {
+        stage.getBatch().begin();
+        Color c = Color.WHITE;
+        stage.getBatch().setColor(c.r, c.g, c.b, fadeInAlpha);
+        fadeInAlpha -= dt/fadeInLength;
+        stage.getBatch().draw(fadeOverlayTexture, 0, 0, col_width*Help_Guides, row_height*Help_Guides);
+        stage.getBatch().end();
+
+        if(fadeInAlpha <= 0){
+            startFadeIn = false;
+        }
+    }
+
+    @Override
+    public void fadeOut(float dt) {
+        stage.getBatch().begin();
+        Color c = Color.WHITE;
+        stage.getBatch().setColor(c.r, c.g, c.b, fadeOutAlpha);
+        fadeOutAlpha += dt/fadeOutLength;
+        stage.getBatch().draw(fadeOverlayTexture, 0, 0, col_width*Help_Guides, row_height*Help_Guides);
+        stage.getBatch().setColor(c);
+        stage.getBatch().end();
+        if(fadeOutAlpha >= 1){
+            stage.clear();
+            startFadeout = false;
+            gvm.set(new MenuView(gvm, playerController, assetManager, stage, skin));
+        }
+    }
+
+    @Override
+    public void dispose() {
+        stage.dispose();
+    }
+}
diff --git a/CheckersClient/core/src/com/mygdx/game/views/LobbyView.java b/CheckersClient/core/src/com/mygdx/game/views/LobbyView.java
index ce115e2e806e394bba7101c51610ae6b5b01f0cf..1fae377e59ff69f1ac755ae8ffb528aa3ceec3fe 100644
--- a/CheckersClient/core/src/com/mygdx/game/views/LobbyView.java
+++ b/CheckersClient/core/src/com/mygdx/game/views/LobbyView.java
@@ -2,99 +2,150 @@ 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.Camera;
+import com.badlogic.gdx.graphics.Color;
 import com.badlogic.gdx.graphics.Texture;
-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.graphics.g2d.TextureAtlas;
 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.ImageButton;
 import com.badlogic.gdx.scenes.scene2d.ui.Label;
+import com.badlogic.gdx.scenes.scene2d.ui.List;
+import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane;
 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.model.Lobby;
+import com.mygdx.game.model.Player;
+import com.mygdx.game.views.enums.CharacterAssets;
+import com.mygdx.game.views.enums.CinematicAssets;
 import com.mygdx.game.views.enums.LobbyAssets;
 import com.mygdx.game.views.enums.MenuAssets;
+import com.mygdx.game.views.tokens.AnimatedSprite;
 
+import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.List;
+import java.util.HashMap;
 
 public class LobbyView extends View{
 
-    private Texture background;
-    private Image lobbyListBubbleImage;
-    private Image rocketImage;
-    private Image exhaustImage;
-    private Texture rocketTexture;
-    private Texture exhaustTexture;
-    private Sound sound;
-    private Button setUserNameButton;
-    private Image backgroundImage;
+    private final ArrayList<Actor> playerUIWidgets = new ArrayList<>();
+    private final Music currentSong;
+    private final TextureAtlas portraitAtlas;
 
+    private Button createLobbyButton;
+    private Button findLobbyButton;
+    private Button joinLobbyButton;
+    private Button lobbyBackButton;
+    private Button lobbyListRefreshButton;
+    private Button lobbyRefreshButton;
+    private Button lobbyListBackButton;
+    private Button startLobbyButton;
 
+    private float updateAvatarTimer = 0;
+    private float updateAvatarFrequency = 0.120f; //update every 250ms
+    private float refreshLobbyTimer = 1;
+    private float touchSensitivity = 0.1f;
+    private float fadeOutVolume = 0;
+
+    private Image backgroundImage;
+    private AnimatedSprite mrServer;
+    private Image mrServerNameImage;
+    private Image exhaustImage;
+    private Image lobbyListBubbleImage;
+    private Image lobbyListBubblePointerImage;
+    private Image rocketImage;
 
-    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 Label outputLabel;
 
     private Sound buttonClickAudio;
 
     private TextField lobbyCreateTextField;
-    private Button joinLobbyButton;
-    private Button createLobbyButton;
-    private Button lobbyRefreshButton;
-    private Button lobbyBackButton;
-    private Dialog lobbyCreateDialogue;
+
+    private Camera camera;
+
+    private ImageButton playerReadyCheckButton;
+
     private SelectBox<Integer> lobbyCreateSizeSelectBox;
 
+    private ScrollPane scrollPane;
+    private List<String> lobbyListStrings;
+    private HashMap<String, Integer> getLobbyByStringHashMap;
 
+    private Image lobbyImage;
 
-    int Help_Guides = 12;
-    int row_height = Gdx.graphics.getHeight() / Help_Guides;
-    int col_width = Gdx.graphics.getWidth() / Help_Guides;
-    private Label outputLabel;
+    private ArrayList<AnimatedSprite> lobbyAvatars = new ArrayList<>();
+
+    private ArrayList<Image> playerReadyImages = new ArrayList<>();
+    private ArrayList<Label> lobbyLabels= new ArrayList<>();
+    private final HashMap<Integer, String> availableAvatarsHashMap;
 
-    public LobbyView(GameViewManager gvm, final PlayerController playerController, AssetManager assetManager, Stage stage, Skin skin, FrameBuffer previousScreenFrameBuffer) {
+    public LobbyView(GameViewManager gvm, final PlayerController playerController, AssetManager assetManager, final Stage stage, Skin skin, HashMap<Integer,String> availableAvatarsHashMap, Music currentSong) {
         super(gvm, playerController, assetManager, stage, skin);
-        this.previousScreenFrameBuffer = previousScreenFrameBuffer;
 
-        background = (Texture) assetManager.get(LobbyAssets.BACKGROUND.path, LobbyAssets.BACKGROUND.classType);
-        rocketTexture = (Texture) assetManager.get(LobbyAssets.ROCKET.path, LobbyAssets.ROCKET.classType);
-        exhaustTexture = (Texture) assetManager.get(LobbyAssets.ROCKETEXHAUST.path, LobbyAssets.ROCKETEXHAUST.classType);
+        this.portraitAtlas = (TextureAtlas) assetManager.get(CharacterAssets.PortraitsAtlas.path, CharacterAssets.PortraitsAtlas.classType);
+
+        this.currentSong = currentSong;
+        fadeOutVolume = currentSong.getVolume();
+
         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);
+        this.camera = stage.getCamera();
+
+        this.availableAvatarsHashMap = availableAvatarsHashMap;
+
+        for(CinematicAssets asset : CinematicAssets.values()) {
+            assetManager.load(asset.path, asset.classType);
+        }
 
-        rocketImage = new Image(rocketTexture);
-        exhaustImage = new Image(exhaustTexture);
-        rocketImage.setPosition(col_width*8.5f, row_height*4f);
-        rocketImage.setSize(col_width*1, row_height*2.5f);
-        exhaustImage.setSize(col_width*0.6f, row_height*2f);
+        Image playerReadyCheck = new Image((Texture) assetManager.get(LobbyAssets.PLAYER_READY_CHECK.path, Texture.class));
+        playerReadyCheckButton = new ImageButton(playerReadyCheck.getDrawable());
+        playerReadyCheckButton.setPosition(col_width*6, row_height*2);
+
+        backgroundImage = new Image((Texture) assetManager.get(LobbyAssets.BACKGROUND.path, LobbyAssets.BACKGROUND.classType));
+        stage.getViewport().setWorldSize(backgroundImage.getWidth(), backgroundImage.getHeight());
+
+        rocketImage = new Image((Texture) assetManager.get(LobbyAssets.ROCKET_SMALL.path, LobbyAssets.ROCKET_SMALL.classType));
+        rocketImage.setPosition(1556, 360);
+
+
+        exhaustImage = new Image((Texture) assetManager.get(LobbyAssets.ROCKET_EXHAUST.path, LobbyAssets.ROCKET_EXHAUST.classType));
+        exhaustImage.setSize(rocketImage.getHeight()/6, rocketImage.getHeight()/2);
         exhaustImage.setPosition(rocketImage.getX()+rocketImage.getWidth()/2-exhaustImage.getWidth()/2, rocketImage.getY()-exhaustImage.getHeight());
+        exhaustImage.setColor(1, 1, 1, 0);
+
+
+        TextureAtlas portraitAtlas = (TextureAtlas)assetManager.get(CharacterAssets.PortraitsAtlas.path, CharacterAssets.PortraitsAtlas.classType);
+        mrServer = new AnimatedSprite( (TextureAtlas) assetManager.get(LobbyAssets.MR_SERVER_ATLAS.path, LobbyAssets.MR_SERVER_ATLAS.classType),
+                portraitAtlas.findRegion("MrServerPortrait"),
+                "MrServer",
+                3);
+        mrServer.scale(-0.63f);
+        mrServer.setOrigin(0,0 );
+        mrServer.setOriginBasedPosition(190, 1);
+
+        mrServerNameImage = new Image((Texture) assetManager.get(LobbyAssets.MR_SERVER_NAME.path, LobbyAssets.MR_SERVER_NAME.classType));
+        mrServerNameImage.setPosition(180+mrServerNameImage.getWidth()/2, 360);
+
+        lobbyImage = new Image((Texture) assetManager.get(LobbyAssets.LOBBY.path, LobbyAssets.LOBBY.classType));
+        lobbyImage.setPosition(774, 192);
 
-        fadeTextureRegion = new TextureRegion(previousScreenFrameBuffer.getColorBufferTexture());
-        fadeTextureRegion.flip(false, true);
-        fadeImage = new Image(fadeTextureRegion);
-        fadeImage.setColor(1, 1, 1, 1f);
+        lobbyListBubbleImage = new Image((Texture) assetManager.get(LobbyAssets.MR_SERVER_BUBBLE_SQUARE.path, LobbyAssets.MR_SERVER_BUBBLE_SQUARE.classType));
+        lobbyListBubbleImage.setPosition(29.535f, 4328-3930);
 
-        lobbyListBubbleImage = new Image(lobbyListTexture);
-        lobbyListBubbleImage.setPosition(col_width*0.25f, row_height*5.5f);
-        backgroundImage = new Image(background);
+        lobbyListBubblePointerImage = new Image((Texture) assetManager.get(LobbyAssets.MR_SERVER_BUBBLE_POINTER.path, LobbyAssets.MR_SERVER_BUBBLE_POINTER.classType));
+        lobbyListBubblePointerImage.setPosition(lobbyListBubbleImage.getX()+lobbyListBubblePointerImage.getWidth()*1.25f, lobbyListBubbleImage.getY()-lobbyListBubblePointerImage.getHeight()+2);
 
         outputLabel = new Label("Press a Button",skin,"black");
         outputLabel.setSize(Gdx.graphics.getWidth(),row_height);
@@ -102,53 +153,75 @@ public class LobbyView extends View{
         outputLabel.setAlignment(Align.topLeft);
         outputLabel.setFontScale(2);
 
+        createLobbyButton = new TextButton("Create Lobby",skin,"small");
+        createLobbyButton.setSize(col_width*1f,(float)(row_height*0.75));
+        createLobbyButton.setPosition(lobbyListBubbleImage.getX()+xpad,lobbyListBubbleImage.getY()+ypad);
+
+        findLobbyButton = new TextButton("Find Lobby",skin,"small");
+        findLobbyButton.setSize(col_width*1f,(float)(row_height*0.75));
+        findLobbyButton.setPosition(lobbyListBubbleImage.getX()+lobbyListBubbleImage.getWidth()-findLobbyButton.getWidth()-xpad,lobbyListBubbleImage.getY()+ypad);
+
         mrServerBubbleLabel = new Label("Hi, I am mr. Server. I allow creation and joining of lobby rooms.", skin,"black");
-        mrServerBubbleLabel.setSize(col_width*2.5f, row_height*3f);
-        mrServerBubbleLabel.setPosition(lobbyListBubbleImage.getX()+lobbyListBubbleImage.getWidth()*0.1f, row_height*8f);
+        mrServerBubbleLabel.setSize(lobbyListBubbleImage.getWidth()-xpad*2, lobbyListBubbleImage.getHeight()-createLobbyButton.getY()-createLobbyButton.getHeight()-ypad*2);
+        mrServerBubbleLabel.setPosition(lobbyListBubbleImage.getX()+xpad, createLobbyButton.getY()+lobbyListBubbleImage.getHeight()-ypad*3);
+
+        mrServerBubbleLabel.setOrigin(0,0);
         mrServerBubbleLabel.setWrap(true);
         mrServerBubbleLabel.setFontScale(2);
 
-        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);
+        lobbyListRefreshButton = new TextButton("Refresh",skin,"small");
+        lobbyListRefreshButton.setSize(col_width*1f,(float)(row_height*0.65));
+        lobbyListRefreshButton.setPosition(createLobbyButton.getX(), createLobbyButton.getY());
 
         lobbyRefreshButton = new TextButton("Refresh",skin,"small");
         lobbyRefreshButton.setSize(col_width*1f,(float)(row_height*0.65));
-        lobbyRefreshButton.setPosition(lobbyListBubbleImage.getX()+lobbyListBubbleImage.getWidth()*0.1f,lobbyListBubbleImage.getY()+lobbyListBubbleImage.getHeight()*0.125f+row_height*1);
+        lobbyRefreshButton.setPosition(createLobbyButton.getX(), createLobbyButton.getY());
 
         lobbyBackButton = new TextButton("Back",skin,"small");
         lobbyBackButton.setSize(col_width*1f,(float)(row_height*0.65));
-        lobbyBackButton.setPosition(lobbyListBubbleImage.getX()+lobbyListBubbleImage.getWidth()*0.6f,lobbyListBubbleImage.getY()+lobbyListBubbleImage.getHeight()*0.125f+row_height*1);
+        lobbyBackButton.setPosition(findLobbyButton.getX(), findLobbyButton.getY());
+
+        lobbyListBackButton = new TextButton("Back",skin,"small");
+        lobbyListBackButton.setSize(col_width*1f,(float)(row_height*0.65));
+        lobbyListBackButton.setPosition(findLobbyButton.getX(),findLobbyButton.getY());
 
-        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);
+        joinLobbyButton = new TextButton("Join Lobby",skin,"small");
+        joinLobbyButton.setSize(col_width*1f,(float)(row_height*0.65));
+        joinLobbyButton.setPosition(findLobbyButton.getX(), findLobbyButton.getY()+ypad+findLobbyButton.getHeight()/3);
+
+        startLobbyButton = new TextButton("Start",skin,"small");
+        startLobbyButton.setSize(col_width*1f,(float)(row_height*0.65));
+        startLobbyButton.setPosition(createLobbyButton.getX(), createLobbyButton.getY());
 
         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);
+        lobbyCreateTextField.setMessageText("Enter lobby name.");
+        lobbyCreateTextField.setSize(col_width*1f,row_height*1f);
+        lobbyCreateTextField.setPosition(lobbyListRefreshButton.getX(), lobbyListRefreshButton.getY()+row_height*1.25f);
 
         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());
+        lobbyCreateSizeSelectBox.setPosition(lobbyListBackButton.getX(), lobbyCreateTextField.getY());
+        lobbyCreateSizeSelectBox.setSize(lobbyListBackButton.getWidth(), lobbyListBackButton.getHeight());
 
         backgroundImage.setZIndex(1);
-        lobbyListBubbleImage.setZIndex(2);
-        fadeImage.setZIndex(3);
-        outputLabel.setZIndex(3);
-        stage.addActor(fadeImage);
+        backgroundImage.setOrigin(0,0);
+
+        stage.addActor(backgroundImage);
         stage.addActor(outputLabel);
+        stage.addActor(rocketImage);
+        stage.addActor(exhaustImage);
+        stage.addActor(lobbyImage);
+        stage.addActor(lobbyListBubbleImage);
+        stage.addActor(lobbyListBubblePointerImage);
+        stage.addActor(mrServerNameImage);
+
+        playerUIWidgets.add(createLobbyButton);
+        playerUIWidgets.add(findLobbyButton);
+        playerUIWidgets.add(mrServerBubbleLabel);
+        for (Actor widget: playerUIWidgets){
+            stage.addActor(widget);
+        }
+        stage.addActor(outputLabel); // OutputLabel for debugging purposes
 
         createLobbyButton.addListener(new InputListener(){
             @Override
@@ -160,10 +233,45 @@ public class LobbyView extends View{
                 buttonClickAudio.play(0.8f);
                 outputLabel.setText("Create Lobby");
                 showCreateLobbyWindow();
+            }
+            @Override
+            public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) {
+                outputLabel.setText("createLobbyButton");
+            }
+        });
+        playerReadyCheckButton.addListener(new InputListener(){
+            @Override
+            public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
+                return true;
+            }
+            @Override
+            public void touchUp (InputEvent event, float x, float y, int pointer, int button) {
+                buttonClickAudio.play(0.8f);
+                outputLabel.setText("Player Ready");
+                playerController.setLobbyPlayerReady(true);
+            }
+            @Override
+            public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) {
+                outputLabel.setText("playerReadyCheckButton");
+            }
+        });
 
+        findLobbyButton.addListener(new InputListener(){
+            @Override
+            public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
+                return true;
+            }
+            @Override
+            public void touchUp (InputEvent event, float x, float y, int pointer, int button) {
+                buttonClickAudio.play(0.8f);
+                showLobbyListWindow();
+            }
+            @Override
+            public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) {
+                outputLabel.setText("findLobbyButton");
             }
         });
-        joinLobbyButton.addListener(new InputListener(){
+        lobbyListBackButton.addListener(new InputListener(){
             @Override
             public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
                 return true;
@@ -171,10 +279,44 @@ public class LobbyView extends View{
             @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();
+                Gdx.input.setOnscreenKeyboardVisible(false);
+                stage.unfocusAll();
+                Lobby lobby = playerController.getLobby();
+                try{
+                    if(lobby.getPlayers().size() == 1){
+                        playerController.deleteLobby(lobby.getID());
+                    }
+                    else{
+                        playerController.leaveLobby(lobby.getID());
+                    }
+
+                }catch(NullPointerException e){
+
+                }
+                showMainLobbyWindow();
+            }
+            @Override
+            public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) {
+                outputLabel.setText("lobbyListBackButton");
+            }
+        });
+        lobbyListRefreshButton.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("Lobby refreshed!");
+                lobbyListRefresh();
+            }
+            @Override
+            public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) {
+                outputLabel.setText("lobbyListRefreshButton");
             }
         });
+
         lobbyBackButton.addListener(new InputListener(){
             @Override
             public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
@@ -183,10 +325,74 @@ public class LobbyView extends View{
             @Override
             public void touchUp (InputEvent event, float x, float y, int pointer, int button) {
                 buttonClickAudio.play(0.8f);
-                outputLabel.setText("Back button");
+                Gdx.input.setOnscreenKeyboardVisible(false);
+                stage.unfocusAll();
+
+                Lobby lobby = playerController.getLobby();
+
+                if(lobby.getID() == -1){System.out.println("Currently not in a lobby.");}
+
+                if(lobby.getPlayers().size() == 1){
+                    System.out.println("Deleting lobby " + lobby.getName());
+                    playerController.deleteLobby(lobby.getID());
+                }
+                else{
+                    System.out.println("Leaving lobby " + lobby.getName());
+                    playerController.leaveLobby(lobby.getID());
+                }
+
+
+                for (Label label :lobbyLabels) label.remove();
+                for(Image image: playerReadyImages) image.remove();
+                lobbyAvatars.clear();
                 showMainLobbyWindow();
+
+            }
+            @Override
+            public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) {
+                outputLabel.setText("LobbybackButton");
             }
         });
+
+        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) {
+                //if(lobby != null) playerController.leaveLobby(lobby.getID());
+
+                if(getLobbyByStringHashMap.containsKey(lobbyListStrings.getSelected())){
+                    Thread thread = new Thread(){
+                        public void run(){
+                            for(Lobby lobby : playerController.getLobbyList()){
+                                System.out.println("LobbyId available: " +lobby.getID());
+                            }
+                            playerController.joinLobby(getLobbyByStringHashMap.get(lobbyListStrings.getSelected()));
+                            System.out.println("joining lobby with lobbyID: " + lobbyListStrings.getSelectedIndex());
+                            while (playerController.getLastCommand() == null) {
+                                System.out.println("Waiting for lobby");
+                            }
+                            Lobby lobby = playerController.getLobby();
+                            System.out.println("Lobby loaded " + lobby);
+                            Gdx.input.setOnscreenKeyboardVisible(false);
+                            showLobbyWindow();
+                            lobbyRefresh();
+                        }
+                    };
+                    thread.start();
+                }
+                else{
+                    outputLabel.setText("LobbyListHash did not contain the selected key.");
+                }
+            }
+            @Override
+            public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) {
+                outputLabel.setText("joinLobbyButton");
+            }
+        });
+
         lobbyRefreshButton.addListener(new InputListener(){
             @Override
             public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
@@ -198,7 +404,12 @@ public class LobbyView extends View{
                 outputLabel.setText("Lobby refreshed!");
                 lobbyRefresh();
             }
+            @Override
+            public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) {
+                outputLabel.setText("lobbyRefreshButton");
+            }
         });
+
         lobbyCreateTextField.addListener(new InputListener(){
             @Override
             public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
@@ -217,172 +428,338 @@ public class LobbyView extends View{
                 }
             }
         });
+        startLobbyButton.addListener(new InputListener(){
+            @Override
+            public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
+                buttonClickAudio.play(0.80f);
+                if(!lobbyCreateTextField.getText().isEmpty()){
+                    Thread thread = new Thread(){
+                        public void run(){
+                            playerController.createLobby(lobbyCreateTextField.getText(), lobbyCreateSizeSelectBox.getSelected());
+                            System.out.println("Creating lobby '" + lobbyCreateTextField.getText() + "' with maxSize " + lobbyCreateSizeSelectBox.getSelected());
+                            while (playerController.getLastCommand() == null) {
+                                System.out.println("Waiting for lobby object from server..");
+                            }
+                            while(playerController.getLobby().getID() == -1){
+                                System.out.println("Waiting for lobby object from server. Current id is -1..");
+                            }
+
+                            Lobby lobby = playerController.getLobby();
+                            System.out.println("Lobby loaded successfully.  '" + playerController.getLobby().getName() + "', maxPlayers: " + lobby.getMaxPlayers() + ", NumOfPlayersInLobby: " + lobby.getPlayers().size());
+
+                            playerController.joinLobby(playerController.getLobby().getID());
+                            while(playerController.getLastCommand() == null){System.out.println("NOT JOINED LOBBY YET");}
+                            Gdx.input.setOnscreenKeyboardVisible(false);
+                            showLobbyWindow();
+                            lobbyRefresh();
+                        }
+                    };
+                    thread.start();
+                }
+                else{
+                    outputLabel.setText("Lobby has no name, hehe");
+                }
+                return true;
+            }
+        });
     }
 
-    private void showCreateLobbyWindow(){
-        mrServerBubbleLabel.remove();
-        joinLobbyButton.remove();
-        createLobbyButton.remove();
-
-        stage.addActor(lobbyBackButton);
-        stage.addActor(lobbyCreateTextField);
-        stage.addActor(lobbyCreateSizeSelectBox);
+    private void clearUIWidgets(){
+        for (Actor widget: playerUIWidgets){
+            widget.remove();
+        }
+        playerUIWidgets.clear();
     }
 
-    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();
+    public void lobbyListRefresh(){
+        Thread thread = new Thread(){
+            public void run(){
+                playerController.setLobbies(null);
+                playerController.lobbyGetList();
+                while (playerController.getLastCommand() == null) {
+                    System.out.println("Waiting for lobby list .. ");
+                }
+                ArrayList<Lobby> lobbyList = playerController.getLobbyList();
+                System.out.println("Lobby loaded " + lobbyList + " Number of available lobbies are " + lobbyList.size());
+                System.out.println("LobbyCount AFTER" + lobbyList.size());
+                //System.out.println("LobbyCount AFTER NUM OF PLAYERS" + lobbyList.get(0).getPlayers().size());
+
+                lobbyListStrings = new List(skin, "plain");
+                lobbyListStrings.setColor(Color.BLACK);
+                ArrayList<Lobby> currentLobbyList = playerController.getLobbyList();
+                String[] strings;
+
+                if(getLobbyByStringHashMap == null) getLobbyByStringHashMap = new HashMap<>();
+                else getLobbyByStringHashMap.clear();
+
+                if(currentLobbyList.size() > 0){
+                    strings = new String[currentLobbyList.size()];
+                    for (int i = 0; i < currentLobbyList.size(); i++) {
+                        strings[i] = currentLobbyList.get(i).getName() + "\t" + currentLobbyList.get(i).getPlayers().size()+ "/" + currentLobbyList.get(i).getMaxPlayers();
+                        getLobbyByStringHashMap.put(strings[i], currentLobbyList.get(i).getID());
+                    }
+                }
+                else{
+                    strings = new String[1];
+                    strings[0] = "No lobbies currently available.";
+                }
+
+                if(scrollPane != null) scrollPane.remove();
 
+                lobbyListStrings.setItems(strings);
+                scrollPane = new ScrollPane(lobbyListStrings);
+                scrollPane.setBounds(0, 0, col_width*4f, row_height*4);
+                scrollPane.setPosition(col_width*0.25f, row_height*6);
+                scrollPane.setSmoothScrolling(false);
+                scrollPane.setTransform(true);
+
+                playerUIWidgets.add(scrollPane);
+                for (Actor actor: playerUIWidgets){
+                    stage.addActor(actor);
+                }
+            }
+        };
+        thread.start();
+    }
+    private void showCreateLobbyWindow(){
+        clearUIWidgets();
+        playerUIWidgets.add(lobbyListBackButton);
+        playerUIWidgets.add(lobbyCreateTextField);
+        playerUIWidgets.add(lobbyCreateSizeSelectBox);
+        playerUIWidgets.add(startLobbyButton);
+        lobbyListBackButton.setY(startLobbyButton.getY());
+        for (Actor actor: playerUIWidgets){
+            stage.addActor(actor);
+        }
+    }
+    private void showLobbyListWindow(){
+        clearUIWidgets();
+        playerUIWidgets.add(lobbyListBackButton);
+        playerUIWidgets.add(lobbyListRefreshButton);
+        playerUIWidgets.add(joinLobbyButton);
+
+        for (Actor actor: playerUIWidgets){
+            stage.addActor(actor);
+        }
+        lobbyListRefresh();
     }
 
-    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");
+    float[] player1Pos = {col_width*3.75f, row_height*2};
+    float[] player2Pos = {col_width*3.5f, row_height*1.5f};
+
+    float[] player3Pos = {col_width*4.3f, row_height*2};
+    float[] player4Pos = {col_width*4.1f, row_height*1.5f};
+
+    float[] player5Pos = {col_width*5, row_height*2};
+    float[] player6Pos = {col_width*4.8f, row_height*1.5f};
+
+    float[] player7Pos = {col_width*5.7f, row_height*2};
+    float[] player8Pos = {col_width*5.5f, row_height*1.5f};
+
+    ArrayList<float[]> playerPositions= new ArrayList<>(Arrays.asList(player1Pos, player2Pos, player3Pos, player4Pos, player5Pos, player6Pos, player7Pos, player8Pos));;
+
     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);
+        if(playerController.getLobby().getID() == -1) {
+            System.out.println("Player currently not in lobby.");
+        }
+        else{
+            lobbyAvatars.clear();
+            Lobby lobby = playerController.getLobby();
+
+            if(lobby.getID() == -1 || playerController.getPlayer().getIsPlayerReady()) playerReadyCheckButton.remove();
+            else stage.addActor(playerReadyCheckButton);
+
+            for (Label label : lobbyLabels) label.remove();
+            for (Image image : playerReadyImages) image.remove();
+
+            for(int i = 0; i<lobby.getPlayers().size(); i++){
+                Player player = lobby.getPlayers().get(i);
+
+                System.out.println("Finding avatar with index:  " + player.getIndexAvatar());
+                System.out.println("Name is:  " + availableAvatarsHashMap.get(player.getIndexAvatar()));
+
+                String path = Enum.valueOf(CharacterAssets.class, availableAvatarsHashMap.get(player.getIndexAvatar())+"Atlas").path;
+                Class classType = Enum.valueOf(CharacterAssets.class, availableAvatarsHashMap.get(player.getIndexAvatar())+"Atlas").classType;
+
+                AnimatedSprite animatedSprite = new AnimatedSprite(
+                        (TextureAtlas) assetManager.get(path, classType),
+                        portraitAtlas.findRegion(availableAvatarsHashMap.get(player.getIndexAvatar())+"Portrait"),
+                        availableAvatarsHashMap.get(player.getIndexAvatar()),
+                        3);
+
+
+                animatedSprite.setOrigin(0, 0);
+                int remX = i%4;
+                int remY = mod(2, i+2);
+                int xPad = 10;
+                System.out.printf("remX: %d\tremY: %d\n", remX, remY);
+                animatedSprite.setPosition(lobbyImage.getX()-xPad+remX*((lobbyImage.getWidth()-xPad)/4), lobbyImage.getY()-remY*(lobbyImage.getHeight()/7.5f));
+                animatedSprite.setScale(0.3f+0.025f*remY, 0.3f+0.025f*remY);
+                lobbyAvatars.add(animatedSprite);
+
+                Label label = new Label("Player"+i+":\t%d" + player.getPlayerName() + "\t", skin, "black");
+                label.setColor(Color.BLACK);
+                label.scaleBy(2f);
+                label.setPosition(lobbyListBubbleImage.getX()+xpad, lobbyListBubbleImage.getY()+lobbyListBubbleImage.getHeight()*(0.9f-label.getHeight()*i-i*0.05f));
+
+                lobbyLabels.add(label);
+
+                if(player.getIsPlayerReady()) {
+                    Image image = new Image(assetManager.get(LobbyAssets.PLAYER_READY.path, Texture.class));
+                    image.setPosition(label.getX()+image.getWidth()+col_width*1f, label.getY()-image.getHeight()/2+label.getHeight()/2);
+                    playerReadyImages.add(image);
+                }
+                else{
+                    System.out.println("Player is not ready..");
+                }
+                stage.addActor(lobbyLabels.get(i));
+            }
+            for (Image image : playerReadyImages){
+                stage.addActor(image);
             }
         }
     }
 
-    private void showMainLobbyWindow(){
-        if(lobbyRoomTable != null){
-            lobbyRoomTable.remove();
+    private int mod(int a, int b)
+    {
+        int c = (a % b + b) % b;
+        if(c == a){
+            return 0;
         }
-        stage.addActor(createLobbyButton);
-        stage.addActor(joinLobbyButton);
-        stage.addActor(mrServerBubbleLabel);
-        try {
-            lobbyBackButton.remove();
-            lobbyRefreshButton.remove();
-            lobbyCreateTextField.remove();
-            lobbyCreateSizeSelectBox.remove();
-
-        } finally {
-            // Do nothing here
+        else{
+            return c;
         }
     }
 
 
+    private void showLobbyWindow(){
+        clearUIWidgets();
+        playerUIWidgets.add(lobbyBackButton);
+        playerUIWidgets.add(lobbyRefreshButton);
 
-    @Override
-    public void handleInput() {
-        if(Gdx.input.isTouched()) {
-            int x = Gdx.input.getX();
-            int y = Gdx.input.getY();
-        }/*
-        if(Gdx.input.isButtonJustPressed(1)){
-            sound.stop();
-            gvm.set(new PlayView(gvm, playerController, assetManager));
-            dispose();
+        for (Actor actor: playerUIWidgets){
+            stage.addActor(actor);
         }
-        */
     }
 
-    @Override
-    public void update(float dt) {
-        stage.act(dt);
-        handleInput();
+    private void showMainLobbyWindow(){
+        clearUIWidgets();
+        playerUIWidgets.add(createLobbyButton);
+        playerUIWidgets.add(findLobbyButton);
+        playerUIWidgets.add(mrServerBubbleLabel);
 
+        for (Actor actor: playerUIWidgets){
+            stage.addActor(actor);
+        }
+    }
+
+    @Override
+    public void dispose() {
+        stage.dispose();
     }
 
     @Override
     public void render(float dt) {
-        if(!transitionFinished){
-            fadeToWhiteTransition(dt);
-        }
-        else{
-            stage.draw();
+        Gdx.gl.glClearColor(1, 1, 1, 1);
+
+        stage.draw();
+        stage.getBatch().begin();
+
+        for(AnimatedSprite animatedSprite : lobbyAvatars){
+            animatedSprite.draw(stage.getBatch());
         }
+
+        mrServer.draw(stage.getBatch());
+        stage.getBatch().end();
+
         drawGrid();
     }
 
-    private void addActorsAfterTransition(){
-        stage.addActor(backgroundImage);
-        stage.addActor(outputLabel);
-        stage.addActor(rocketImage);
-        stage.addActor(exhaustImage);
-        stage.addActor(lobbyListBubbleImage);
-        stage.addActor(createLobbyButton);
-        stage.addActor(joinLobbyButton);
-        stage.addActor(mrServerBubbleLabel);
+    @Override
+    public void fadeIn(float dt) {
+        stage.getBatch().begin();
+        Color c = stage.getBatch().getColor();
+        stage.getBatch().setColor(c.r, c.g, c.b, fadeInAlpha);
+        fadeInAlpha -= dt/fadeInLength;
+        stage.getBatch().draw(fadeOverlayTexture, 0, 0, col_width*Help_Guides, row_height*Help_Guides);
+        stage.getBatch().setColor(c);
+        stage.getBatch().end();
+
+        if(fadeInAlpha <= 0){
+            startFadeIn = false;
+        }
     }
 
-    private float alphaFade1 = 1;
-    private float alphaFade2 = 1;
-
-    /*
-    Helper class.
-    Creates the logic for transitioning between two states.
-    Fades from a texture region to white, then from white to the current stage.
-     */
-    private void fadeToWhiteTransition(float dt){
-        if (fadeIn) {
-            if (alphaFade1 <= 0) {
-                fadeIn = false;
-                stage.clear();
-                addActorsAfterTransition();
-                outputLabel.setText("Fade to white is complete.");
-            }
-            else{
-                fadeImage.setColor(1, 1, 1, alphaFade1);
-                alphaFade1 -= dt/fadeTransitionLength;
-                outputLabel.setText("Fading to white.");
-                stage.draw();
-            }
-        }
-        else {
-            if(alphaFade2 <= 0){
-                outputLabel.setText("Fade to normal state is complete.");
-                transitionFinished = true;
-                stage.draw();
-            }
-            else{
-                outputLabel.setText("Fade from white to background image.");
-                backgroundImage.setColor(1, 1, 1, 1-alphaFade2);
-                alphaFade2 -= dt/fadeTransitionLength;
-                stage.draw();
-            }
+    @Override
+    public void fadeOut(float dt) {
+        stage.getBatch().begin();
+        Color c = stage.getBatch().getColor();
+        stage.getBatch().setColor(c.r, c.g, c.b, fadeOutAlpha);
+        fadeOutAlpha += dt/fadeOutLength;
+        stage.getBatch().draw(fadeOverlayTexture, 0, 0, col_width*Help_Guides, row_height*Help_Guides);
+        stage.getBatch().setColor(c);
+        stage.getBatch().end();
+        if(fadeOutAlpha >= 1){
+            currentSong.stop();
+            stage.clear();
+            startFadeout = false;
+            setFadeColor(Color.BLACK);
+            gvm.set(new CinematicView(gvm, playerController, assetManager, stage, skin, lobbyAvatars));
         }
 
+        fadeOutVolume -= dt/fadeOutLength;
+        currentSong.setVolume(fadeOutVolume);
     }
 
     @Override
-    public void dispose() {
-        /*
-        background.dispose();
-        menuForm.dispose();
-        sound.dispose();
-         */
+    public void handleInput(float dt) {
+        if(Gdx.input.justTouched()){
+            lastTouch[0] = Gdx.input.getX();
+            lastTouch[1] = stage.getViewport().getScreenHeight()-Gdx.input.getY();
+            System.out.println("Only once");
+        }
+        if(Gdx.input.isTouched()){
+            float camXPos = camera.position.x + (lastTouch[0]-Gdx.input.getX())* touchSensitivity; //camera.position.x + (Gdx.input.getX()-lastTouch[0])*sensitivity;
+            float camYPos = camera.position.y + (-stage.getViewport().getScreenHeight()+Gdx.input.getY()+lastTouch[1])* touchSensitivity;
+
+            float a = MathUtils.clamp(camXPos, camera.viewportWidth/2, backgroundImage.getWidth()-camera.viewportWidth/2);
+            float b = MathUtils.clamp(camYPos, camera.viewportHeight/2, backgroundImage.getImageHeight()-camera.viewportHeight/2);
+
+            camera.position.set(a, b, 0);
+            System.out.println("Multiple times");
+        }
     }
 
-    private ShapeRenderer shapeRenderer;
-    // For debugging purposes only..
-    private void drawGrid(){
-        if(shapeRenderer == null){
-            shapeRenderer = new ShapeRenderer(); // Used for draw debugging
+
+
+    @Override
+    public void update(float dt) {
+        stage.getCamera().update();
+
+        assetManager.update();
+
+        updateAvatarTimer+= dt;
+        refreshLobbyTimer += dt;
+
+        if(updateAvatarTimer-1/Gdx.graphics.getFramesPerSecond()/2>= updateAvatarFrequency){
+            for(AnimatedSprite animatedSprite : lobbyAvatars){
+                animatedSprite.updateTexture();
+            }
+            mrServer.updateTexture();
+            updateAvatarTimer=0;
         }
-        shapeRenderer.begin(ShapeRenderer.ShapeType.Line);
-        shapeRenderer.setColor(1, 0, 0, 0.75f); // Red line
-        for (int i = 0; i < 12; i++) {
-            shapeRenderer.rect(col_width*i, 0, 1, Gdx.graphics.getHeight());
-            shapeRenderer.rect(0, row_height*i, Gdx.graphics.getWidth(), 1);
+
+        if(refreshLobbyTimer >= 1) {
+            lobbyRefresh();
+            refreshLobbyTimer=0;
+        }
+
+        stage.act(dt);
+
+        if(playerController.getLobby().getLobbyGameStarted()){
+            startFadeout = true;
         }
-        shapeRenderer.end();
     }
+
+
 }
diff --git a/CheckersClient/core/src/com/mygdx/game/views/MenuLoadingView.java b/CheckersClient/core/src/com/mygdx/game/views/MenuLoadingView.java
deleted file mode 100644
index 86567c1e037742b47b148188e9f22a152d47c888..0000000000000000000000000000000000000000
--- a/CheckersClient/core/src/com/mygdx/game/views/MenuLoadingView.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package com.mygdx.game.views;
-
-import com.badlogic.gdx.assets.AssetManager;
-import com.badlogic.gdx.graphics.Texture;
-import com.badlogic.gdx.math.MathUtils;
-import com.badlogic.gdx.scenes.scene2d.Stage;
-import com.badlogic.gdx.scenes.scene2d.ui.Skin;
-import com.mygdx.game.controllers.PlayerController;
-import com.mygdx.game.views.enums.MenuAssets;
-
-public class MenuLoadingView extends View {
-
-    private Texture background;
-    private Texture playBtn;
-
-    public MenuLoadingView(GameViewManager gvm, PlayerController playerController, AssetManager assetManager, Stage stage, Skin skin) {
-        super(gvm, playerController, assetManager, stage, skin);
-
-        // Loading Menu Assets in the background.
-        for(MenuAssets asset : MenuAssets.values()) {
-            assetManager.load(asset.path, asset.classType);
-        }
-
-        background = new Texture ("Pause/PauseBackground.png");
-        playBtn = new Texture ("Pause/PauseButton.png");
-
-    }
-
-    @Override
-    protected void handleInput() {
-
-    }
-
-    @Override
-    public void update(float dt) {
-        assetManager.update();
-        if(assetManager.isFinished()){
-            gvm.set(new MenuView(gvm, playerController, assetManager, stage, skin));
-        }
-        else{
-            System.out.print("LOADING... ");
-            System.out.print( (int) MathUtils.floor(assetManager.getProgress()*100));
-            System.out.print("%");
-            System.out.println("");
-        }
-    }
-
-    @Override
-    public void render(float dt) {
-
-        stage.draw();
-    }
-
-    @Override
-    public void dispose() {
-        // background.dispose();
-        //playBtn.dispose();
-    }
-}
diff --git a/CheckersClient/core/src/com/mygdx/game/views/MenuView.java b/CheckersClient/core/src/com/mygdx/game/views/MenuView.java
index b9e5014899aa2fcd3501c692ab478489250aa1be..0c5c69b944c6607a93816f87fda6f2d510e920c8 100644
--- a/CheckersClient/core/src/com/mygdx/game/views/MenuView.java
+++ b/CheckersClient/core/src/com/mygdx/game/views/MenuView.java
@@ -4,10 +4,10 @@ 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.Color;
 import com.badlogic.gdx.graphics.Texture;
-import com.badlogic.gdx.graphics.g3d.utils.MeshBuilder;
-import com.badlogic.gdx.graphics.glutils.FrameBuffer;
+import com.badlogic.gdx.graphics.g2d.TextureAtlas;
+import com.badlogic.gdx.graphics.g2d.TextureRegion;
 import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
 import com.badlogic.gdx.scenes.scene2d.Actor;
 import com.badlogic.gdx.scenes.scene2d.InputEvent;
@@ -15,37 +15,60 @@ import com.badlogic.gdx.scenes.scene2d.InputListener;
 import com.badlogic.gdx.scenes.scene2d.Stage;
 import com.badlogic.gdx.scenes.scene2d.ui.Button;
 import com.badlogic.gdx.scenes.scene2d.ui.Image;
+import com.badlogic.gdx.scenes.scene2d.ui.ImageButton;
 import com.badlogic.gdx.scenes.scene2d.ui.Label;
 import com.badlogic.gdx.scenes.scene2d.ui.Skin;
 import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
 import com.badlogic.gdx.scenes.scene2d.ui.TextField;
-import com.badlogic.gdx.utils.Align;
+import com.badlogic.gdx.scenes.scene2d.utils.Drawable;
+import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;
 import com.mygdx.game.controllers.PlayerController;
+import com.mygdx.game.views.enums.CharacterAssets;
 import com.mygdx.game.views.enums.LobbyAssets;
 import com.mygdx.game.views.enums.MenuAssets;
+import com.mygdx.game.views.tokens.AnimatedSprite;
+
+import java.util.ArrayList;
+import java.util.HashMap;
 
 public class MenuView extends View{
 
-    private Texture background;
+    private boolean startFadeFromWhiteToBlank;
+    private boolean startFadeFromBlankToWhite;
+
+    private Button formButton;
+
     private Image backgroundImage;
+    private Image logoImage;
     private Image formImage;
-    private Texture form;
-    private Texture formButtonTex;
-    private Sound loopAudio;
-    private Button formButton;
-    private TextField usernameTextField;
-    private Texture readyBtn;
+    private Image connectionBarImage;
+    private Image connectionBarGreenCircle;
+    private Image connectionBarRedCircle;
+
     private Music music;
+
     private Sound buttonClickAudio;
     private Sound transitionAudio;
-    private ShapeRenderer shapeRenderer;
-    int Help_Guides = 12;
-    int row_height = Gdx.graphics.getHeight() / Help_Guides;
-    int col_width = Gdx.graphics.getWidth() / Help_Guides;
+
+    private Texture formButtonTex;
+
+    private TextField usernameTextField;
+
     private Label outputLabel;
-    private Texture bufferTexture;
 
-    public MenuView(final GameViewManager gvm, final PlayerController playerController, final AssetManager assetManager, final Stage stage, final Skin skin) {
+
+    private ImageButton nextAvatarButton;
+    private ImageButton previousAvatarButton;
+    private Image avatarPortraitImage;
+    private TextureAtlas portraitAtlas;
+
+
+    private ArrayList<AnimatedSprite> availableAvatars;
+    int currentIndexAvatar = 0;
+
+    private HashMap<Integer, String> availableAvatarsHashMap;
+
+    public MenuView(final GameViewManager gvm, final PlayerController playerController, AssetManager assetManager, final Stage stage, Skin skin) {
         super(gvm, playerController, assetManager, stage, skin);
 
         for(LobbyAssets asset : LobbyAssets.values()) {
@@ -53,27 +76,31 @@ public class MenuView extends View{
         }
         shapeRenderer = new ShapeRenderer(); // Used for draw debugging
 
-        background = (Texture) assetManager.get(MenuAssets.BACKGROUND.path, MenuAssets.BACKGROUND.classType);
-        this.backgroundImage = new Image (background);
+        availableAvatarsHashMap = new HashMap<>();
+        availableAvatarsHashMap.put(0, "RegularGuy");
+        availableAvatarsHashMap.put(1, "HipsterGirl");
+        availableAvatarsHashMap.put(2, "HighSchoolGuy");
+        availableAvatarsHashMap.put(3, "RocketGuy");
+        availableAvatarsHashMap.put(4, "AsianGirl");
+        availableAvatarsHashMap.put(5, "Grandma");
 
-        backgroundImage.setPosition(col_width*6-backgroundImage.getWidth()/2, row_height*6-backgroundImage.getHeight()/2);
+        this.backgroundImage = new Image ((Texture) assetManager.get(MenuAssets.BACKGROUND.path, MenuAssets.BACKGROUND.classType));
+        backgroundImage.setPosition(Gdx.graphics.getWidth()/2-backgroundImage.getWidth()/2, 0);
+        backgroundImage.setOrigin(0,0);
 
-        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));
+        formImage = new Image((Texture) assetManager.get(MenuAssets.FORM.path, MenuAssets.FORM.classType));
+        formImage.setPosition(col_width*6-formImage.getWidth()/2, row_height*0.15f);
+        formImage.setOrigin(0, 0);
 
         formButtonTex = (Texture) assetManager.get(MenuAssets.FORM_BUTTON.path, MenuAssets.FORM_BUTTON.classType);
-        this.loopAudio = (Sound) assetManager.get(MenuAssets.LOOP_AUDIO.path, MenuAssets.LOOP_AUDIO.classType);
+        music = Gdx.audio.newMusic(Gdx.files.internal(MenuAssets.LOOP_AUDIO.path));
         buttonClickAudio = (Sound) assetManager.get(MenuAssets.BUTTON_CLICK_AUDIO.path, MenuAssets.BUTTON_CLICK_AUDIO.classType);
         transitionAudio = (Sound) assetManager.get(MenuAssets.TRANSITION_AUDIO.path, MenuAssets.TRANSITION_AUDIO.classType);
 
+        logoImage = new Image((Texture) assetManager.get(MenuAssets.LOGO.path, MenuAssets.LOGO.classType));
+        logoImage.setPosition(col_width*6-logoImage.getWidth()/2, row_height*11.75f-logoImage.getHeight());
+        logoImage.setOrigin(0,0);
+
         outputLabel = new Label("Press a Button",skin,"black");
         outputLabel.setSize(Gdx.graphics.getWidth(),row_height);
         outputLabel.setPosition(col_width*0.5f,row_height*10);
@@ -81,42 +108,91 @@ public class MenuView extends View{
 
         usernameTextField = new TextField("", skin);
         usernameTextField.setMessageText("Your name ..");
-        usernameTextField.setSize(col_width*2, row_height*1);
-        usernameTextField.setPosition(col_width*5-usernameTextField.getMaxWidth(),row_height*6.5f-usernameTextField.getMaxHeight()/2);
+        usernameTextField.setSize(formImage.getWidth()*0.75f, row_height*1);
+        usernameTextField.setPosition(formImage.getX()+formImage.getWidth()/2-usernameTextField.getWidth()/2,formImage.getHeight()*0.75f);
+        usernameTextField.setOrigin(0,0);
+
+        formButton = new TextButton("Enter",skin,"default");
+        formButton.setPosition(formImage.getX()+formImage.getWidth()/2 -formButton.getWidth()/2,formImage.getHeight()*0.08f);
+
+        startFadeFromBlankToWhite = false;
+        startFadeFromWhiteToBlank = true;
+
+        music.setVolume(1);
+        music.setLooping(true);
+        music.play();
+
+        Drawable drawable = new TextureRegionDrawable(new TextureRegion(assetManager.get(MenuAssets.NEXT_AVATAR_BUTTON.path, Texture.class)));
+        nextAvatarButton = new ImageButton(drawable);
+
+        TextureRegion previousAvatarButton = new TextureRegion(assetManager.get(MenuAssets.NEXT_AVATAR_BUTTON.path, Texture.class));
+        previousAvatarButton.flip(true,false);
+        Drawable flippedDrawable = new TextureRegionDrawable(previousAvatarButton);
+        this.previousAvatarButton = new ImageButton(flippedDrawable);
+        this.portraitAtlas = (TextureAtlas) assetManager.get(CharacterAssets.PortraitsAtlas.path, CharacterAssets.PortraitsAtlas.classType);
+
+        TextureRegion texReggy = (TextureRegion) portraitAtlas.findRegion(availableAvatarsHashMap.get(currentIndexAvatar)+"Portrait");
+        System.out.println("Finding avatar with index:  " + currentIndexAvatar);
+        System.out.println("Name is:  " + availableAvatarsHashMap.get(currentIndexAvatar));
+        avatarPortraitImage = new Image(texReggy);
+        avatarPortraitImage.setBounds(0,0,265,265);
+        avatarPortraitImage.setPosition(formImage.getX()+formImage.getWidth()/2-avatarPortraitImage.getScaleX()*avatarPortraitImage.getWidth()/2, formButton.getY()+formButton.getHeight()+40);
+
+        nextAvatarButton.setPosition(avatarPortraitImage.getX()+ avatarPortraitImage.getWidth()+col_width*0.8f-nextAvatarButton.getWidth(), avatarPortraitImage.getY()+ avatarPortraitImage.getHeight()/2-nextAvatarButton.getHeight()/2);
+        this.previousAvatarButton.setPosition(avatarPortraitImage.getX()-col_width*0.8f, avatarPortraitImage.getY()+ avatarPortraitImage.getHeight()/2- this.previousAvatarButton.getHeight()/2);
+
 
+        connectionBarImage = new Image(assetManager.get(MenuAssets.CONNECTION_BAR.path, Texture.class));
+        connectionBarGreenCircle = new Image(assetManager.get(MenuAssets.GREEN_CIRCLE_SMALL.path, Texture.class));
+        connectionBarRedCircle = new Image(assetManager.get(MenuAssets.RED_CIRCLE_SMALL.path, Texture.class));
 
-        formButton = new TextButton("Enter",skin,"small");
-        formButton.setSize(col_width*2,(float)(row_height*0.5));
-        formButton.setPosition(col_width*6-formButton.getWidth()/2,row_height*5-formButton.getHeight()/2);
+        connectionBarImage.setPosition(Gdx.graphics.getWidth()-connectionBarImage.getWidth(), Gdx.graphics.getHeight()-connectionBarImage.getHeight());
+        connectionBarRedCircle.setPosition(connectionBarImage.getX()+connectionBarImage.getWidth()*0.75f, connectionBarImage.getY()+connectionBarImage.getHeight()/2-connectionBarRedCircle.getHeight()/2);
+        connectionBarGreenCircle.setPosition(connectionBarImage.getX()+connectionBarImage.getWidth()*0.75f, connectionBarImage.getY()+connectionBarImage.getHeight()/2-connectionBarGreenCircle.getHeight()/2);
 
-        formImage.setPosition(col_width*6-formImage.getWidth()/2, row_height*6-formImage.getHeight()/2);
+        this.previousAvatarButton.addListener(new InputListener(){
+            @Override
+            public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
+                buttonClickAudio.play(0.8f);
+                if(currentIndexAvatar >0){
+                    currentIndexAvatar -= 1;
+                    updateAvatarPortrait();
+                }
+                return true;
+            }
 
+        });
+
+        nextAvatarButton.addListener(new InputListener(){
+            @Override
+            public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
+                buttonClickAudio.play(0.8f);
+                if(availableAvatarsHashMap.size()-1 > currentIndexAvatar){
+                    currentIndexAvatar += 1;
+                    updateAvatarPortrait();
+                }
+                return true;
+            }
+        });
 
         // Adding listeners
         formButton.addListener(new InputListener(){
-
             @Override
             public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
-                if(!usernameTextField.equals("Your name ..")){
+                if(!usernameTextField.getText().isEmpty() && usernameTextField.getText().length() >=3 && usernameTextField.getText().length() <= 10){
                     buttonClickAudio.play(0.70f);
                     transitionAudio.play(0.50f);
-                    FrameBuffer fbo;
-                    fbo = new FrameBuffer(Pixmap.Format.RGB888, Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), false);
-                    fbo.begin();
-                    /*
-                    stage.getBatch().begin();
-                    stage.getBatch().draw(background, 0, 0);
-                    stage.getBatch().draw(form, Gdx.graphics.getWidth()/2-form.getWidth()/2, Gdx.graphics.getHeight()/2-form.getHeight()/2);
-                    stage.getBatch().end();
-                     */
-                    stage.draw();
-                    fbo.end();
-                    gvm.push(new LobbyView(gvm, playerController, assetManager, stage, skin, fbo));
+                    playerController.playerSetName(usernameTextField.getText());
+                    playerController.updateIndexAvatar(currentIndexAvatar);
+                    startFadeout = true;
+                }
+                else{
+                    outputLabel.setText("Please enter a valid name. Has to be between 3 and 10 characters.");
                 }
                 return true;
             }
         });
-       usernameTextField.addListener(new InputListener(){
+        usernameTextField.addListener(new InputListener(){
             @Override
             public boolean touchDown (InputEvent event, float x, float y, int pointer, int button) {
                 buttonClickAudio.play(0.8f);
@@ -128,83 +204,90 @@ public class MenuView extends View{
             public void enter(InputEvent event, float x, float y, int pointer, Actor fromActor) {
                 buttonClickAudio.play(0.8f);
                 if(usernameTextField.getText().isEmpty()){
-                    playerController.setPlayerName(usernameTextField.getText());
-                    outputLabel.setText("");
+                    outputLabel.setText(usernameTextField.getText());
                 }
             }
         });
-
-       //Stratas
-        /*
-        backgroundImage.setZIndex(1);
-        formImage.setZIndex(2);
-        usernameTextField.setZIndex(3);
-        formButton.setZIndex(3);
-        outputLabel.setZIndex(3);
-
-         */
-        //loopAudio.loop(0.9f);
-        // Adding the initial actors in the scene
         stage.addActor(backgroundImage);
+        stage.addActor(connectionBarImage);
+        stage.addActor(connectionBarRedCircle);
         stage.addActor(outputLabel);
         stage.addActor(formImage);
         stage.addActor(usernameTextField);
         stage.addActor(formButton);
-
+        stage.addActor(nextAvatarButton);
+        stage.addActor(this.previousAvatarButton);
+        stage.addActor(avatarPortraitImage);
+        stage.addActor(logoImage);
     }
 
-
     @Override
-    public void handleInput() {
-        if(Gdx.input.isTouched()) {
-            int x = Gdx.input.getX();
-            int y = Gdx.input.getY();
-        }/*
-        if(Gdx.input.isButtonJustPressed(1)){
-<<<<<<< HEAD
-            sound.stop();
-            gvm.set(new PlayView(gvm, playerController, assetManager));
-=======
-            music.stop();
-            gvm.set(new PlayView(gvm, super.playerController));
->>>>>>> master
-            dispose();
-        }
-        */
+    public void handleInput(float dt) {
+
+    }
+
+    private void updateAvatarPortrait(){
+        System.out.println("Finding avatar with index:  " + currentIndexAvatar);
+        System.out.println("Name is:  " + availableAvatarsHashMap.get(currentIndexAvatar) + "Portrait");
+       avatarPortraitImage.setDrawable(new TextureRegionDrawable(
+               (TextureRegion) portraitAtlas.findRegion(availableAvatarsHashMap.get(currentIndexAvatar)+"Portrait")
+       ));
     }
 
+
     @Override
     public void update(float dt) {
         assetManager.update();
         stage.act(dt);
-        handleInput();
-
     }
 
     @Override
     public void render(float dt) {
+        Gdx.gl.glClearColor(1, 1, 1, 1);
+
+        if(playerController.getPlayer().getID() != -1){
+            stage.addActor(connectionBarGreenCircle);
+            connectionBarRedCircle.remove();
+        }
+
         stage.draw();
         drawGrid();
     }
 
     @Override
-    public void dispose() {
-        /*
-        background.dispose();
-<<<<<<< HEAD
-        menuForm.dispose();
-        sound.dispose();
-         */
+    public void fadeIn(float dt) {
+        stage.getBatch().begin();
+        Color c = Color.WHITE;
+        stage.getBatch().setColor(c.r, c.g, c.b, fadeInAlpha);
+        fadeInAlpha -= dt/fadeInLength;
+        stage.getBatch().draw(fadeOverlayTexture, 0, 0, col_width*Help_Guides, row_height*Help_Guides);
+        stage.getBatch().setColor(c);
+        stage.getBatch().end();
+
+        if(fadeInAlpha <= 0){
+            startFadeIn = false;
+        }
     }
 
-    // For debugging purposes only..
-    private void drawGrid(){
-        shapeRenderer.begin(ShapeRenderer.ShapeType.Line);
-        shapeRenderer.setColor(1, 0, 0, 1); // Red line
-        for (int i = 0; i < 12; i++) {
-                shapeRenderer.rect(col_width*i, 0, 1, Gdx.graphics.getHeight());
-                shapeRenderer.rect(0, row_height*i, Gdx.graphics.getWidth(), 1);
+    @Override
+    public void fadeOut(float dt) {
+        stage.getBatch().begin();
+        Color c = Color.WHITE;
+        stage.getBatch().setColor(c.r, c.g, c.b, fadeOutAlpha);
+        fadeOutAlpha += dt/fadeOutLength;
+        stage.getBatch().draw(fadeOverlayTexture, 0, 0, col_width*Help_Guides, row_height*Help_Guides);
+        stage.getBatch().setColor(c);
+        stage.getBatch().end();
+        if(fadeOutAlpha >= 1){
+            stage.clear();
+            startFadeout = false;
+            gvm.push(new LobbyView(gvm, playerController, assetManager, stage, skin, availableAvatarsHashMap, music));
         }
-        shapeRenderer.end();
+    }
+
+
+    @Override
+    public void dispose() {
+        stage.dispose();
     }
 }
diff --git a/CheckersClient/core/src/com/mygdx/game/views/PauseView.java b/CheckersClient/core/src/com/mygdx/game/views/PauseView.java
index 700bdf6aab9d9363df366ef517f93f14c34d218f..9c0712a7b7193edec88ee75cdb76d026839ff9de 100644
--- a/CheckersClient/core/src/com/mygdx/game/views/PauseView.java
+++ b/CheckersClient/core/src/com/mygdx/game/views/PauseView.java
@@ -22,7 +22,7 @@ public class PauseView extends View{
     }
 
     @Override
-    protected void handleInput() {
+    public void handleInput(float dt) {
 
     }
 
@@ -39,11 +39,19 @@ public class PauseView extends View{
     }
 
     @Override
-    public void dispose() {
-        background.dispose();
-        playBtn.dispose();
+    public void fadeIn(float dt) {
 
     }
 
+    @Override
+    public void fadeOut(float dt) {
+
+    }
 
+    @Override
+    public void dispose() {
+        background.dispose();
+        playBtn.dispose();
+        stage.dispose();
+    }
 }
diff --git a/CheckersClient/core/src/com/mygdx/game/views/PlayView.java b/CheckersClient/core/src/com/mygdx/game/views/PlayView.java
index 09338d97a92575df7749d5369ddad4eae0ab640f..c0564ca41438fdd6d5902c8d663c935027874bed 100644
--- a/CheckersClient/core/src/com/mygdx/game/views/PlayView.java
+++ b/CheckersClient/core/src/com/mygdx/game/views/PlayView.java
@@ -1,56 +1,71 @@
 package com.mygdx.game.views;
 
 import com.badlogic.gdx.Gdx;
-import com.badlogic.gdx.Input;
 import com.badlogic.gdx.assets.AssetManager;
-import com.badlogic.gdx.audio.Sound;
+import com.badlogic.gdx.graphics.Color;
+import com.badlogic.gdx.graphics.Pixmap;
 import com.badlogic.gdx.graphics.Texture;
-import com.badlogic.gdx.graphics.g2d.BitmapFont;
 import com.badlogic.gdx.graphics.g2d.SpriteBatch;
+import com.badlogic.gdx.math.Vector2;
 import com.badlogic.gdx.scenes.scene2d.Stage;
 import com.badlogic.gdx.scenes.scene2d.ui.Image;
 import com.badlogic.gdx.scenes.scene2d.ui.Skin;
+import com.badlogic.gdx.utils.Scaling;
 import com.mygdx.game.controllers.PlayerController;
+import com.mygdx.game.views.enums.PlayAssets;
+import com.mygdx.game.views.tokens.AnimatedSprite;
+import com.mygdx.game.views.tokens.StarPiece;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
 
 
 public class PlayView extends View{
 
     private Texture background;
     private Image backgroundImage;
-    private Sound gameLoop;
-    private Sound transitionFX;
+
     int Help_Guides = 12;
     int row_height = Gdx.graphics.getHeight() / Help_Guides;
     int col_width = Gdx.graphics.getWidth() / Help_Guides;
-    BitmapFont font;
 
-    protected PlayView(GameViewManager gvm, PlayerController playerController, AssetManager assetManager, Stage stage, Skin skin) {
+    Texture starPieceBase;
+    Texture starPieceBaseBorder;
+    Texture starPieceMast;
+    Texture starPieceMastBorder;
+    Texture starPieceHead;
+    Texture starPieceHeadBorder;
+
+    HashMap<Float[], StarPiece> pieces;
+
+    public PlayView(GameViewManager gvm, PlayerController playerController, AssetManager assetManager, Stage stage, Skin skin, ArrayList<AnimatedSprite> lobbyAvatars) {
         super(gvm, playerController, assetManager, stage, skin);
-        background = new Texture ("Game/GameBoard/0.25x/GameBoard@0.25x.png");
+        background = new Texture("Game/1x/GameBoard@1x.png");
         this.backgroundImage = new Image(background);
-        backgroundImage.setPosition(col_width*6-backgroundImage.getWidth()/2, row_height*6-backgroundImage.getHeight()/2);
-        stage.addActor(backgroundImage);
 
-        font = new BitmapFont();
+        backgroundImage.setScaleX(0.25F);
+        backgroundImage.setScaleY(0.25F);
+        backgroundImage.setScaling(Scaling.fill);
 
-        gameLoop = Gdx.audio.newSound(Gdx.files.internal("Game/Audio/GameLoop.mp3"));
-        transitionFX= Gdx.audio.newSound(Gdx.files.internal("Game/Audio/TransitionFX.mp3"));
-        transitionFX.play();
-        gameLoop.loop(0.6f);
+        backgroundImage.setPosition(Gdx.graphics.getWidth() / 2F - backgroundImage.getWidth() * backgroundImage.getScaleX() / 2F, Gdx.graphics.getHeight() / 2F - backgroundImage.getHeight() * backgroundImage.getScaleY() / 2F);
+        stage.addActor(backgroundImage);
 
-    }
+        for (PlayAssets asset : PlayAssets.values()) {
+            assetManager.load(asset.path, asset.classType);
+        }
+        assetManager.finishLoading();
 
-    @Override
-    protected void handleInput() {
-        if(Gdx.input.isTouched()) {
-            int x = Gdx.input.getX() - (Gdx.graphics.getWidth() / 2);
-            int y = Gdx.input.getY() - (Gdx.graphics.getHeight() / 2);
+        setFadeColor(Color.BLACK);
 
-            System.out.println(x + ", " + y);
-        }
-        if(Gdx.input.isKeyPressed(Input.Keys.ESCAPE)){
+        starPieceBase = (Texture) assetManager.get(PlayAssets.STAR_PIECE_BASE.path, PlayAssets.STAR_PIECE_BASE.classType);
+        starPieceBaseBorder = (Texture) assetManager.get(PlayAssets.STAR_PIECE_BASE_BORDER.path, PlayAssets.STAR_PIECE_BASE_BORDER.classType);
+        starPieceMast = (Texture) assetManager.get(PlayAssets.STAR_PIECE_MAST.path, PlayAssets.STAR_PIECE_MAST.classType);
+        starPieceMastBorder = (Texture) assetManager.get(PlayAssets.STAR_PIECE_MAST_BORDER.path, PlayAssets.STAR_PIECE_MAST_BORDER.classType);
+        starPieceHead = (Texture) assetManager.get(PlayAssets.STAR_PIECE_HEAD.path, PlayAssets.STAR_PIECE_HEAD.classType);
+        starPieceHeadBorder = (Texture) assetManager.get(PlayAssets.STAR_PIECE_HEAD_BORDER.path, PlayAssets.STAR_PIECE_HEAD_BORDER.classType);
 
-        }
+        this.pieces = new HashMap<>();
     }
 
     private void isGameOver(){
@@ -60,31 +75,85 @@ public class PlayView extends View{
         }
     }
 
+    @Override
+    public void handleInput(float dt) {
+        if(Gdx.input.isTouched()) {
+            int x = Gdx.input.getX() - (Gdx.graphics.getWidth() / 2);
+            int y = Gdx.input.getY() - (Gdx.graphics.getHeight() / 2);
+
+            System.out.println("Midtstilt: " + x + ", " + y);
+            System.out.println("Vanlig: " + Gdx.input.getX());
+        }
+    }
+
     @Override
     public void update(float dt) {
         stage.act(dt);
         isGameOver();
-        handleInput();
     }
 
-
     @Override
     public void render(float dt) {
+
+        stage.getBatch().begin();
+        //stage.getBatch().draw(background, 0, 0);
+        stage.getBatch().end();
+
         stage.draw();
+
+        for (StarPiece piece : pieces.values()) {
+            piece.draw(stage.getBatch());
+        }
     }
 
-    private void debugDraw(SpriteBatch sb, String text, int xPos, int yPos){
-        font.draw(sb, text, xPos, yPos);
+    public void initializePieces(List<List<Float[]>> coordinates) {
+        for (List<Float[]> coordinateSet : coordinates) {
+            for (Float[] coordinate : coordinateSet) {
+                StarPiece piece = new StarPiece(coordinate[0], coordinate[1], Color.RED, starPieceBase, starPieceBaseBorder, starPieceMast, starPieceMastBorder, starPieceHead, starPieceHeadBorder);
+                //piece.setRotateHead(true);
+                pieces.put(coordinate, piece);
+            }
+        }
     }
 
     @Override
-    public void dispose() {
-        /* DISPOSE OBJECTS
-        for (Object ob: objects){
-              ob.dispose();
+    public void fadeIn(float dt) {
+        stage.getBatch().begin();
+        Color c = stage.getBatch().getColor();
+        stage.getBatch().setColor(c.r, c.g, c.b, fadeOutAlpha);
+        fadeInAlpha -= dt/fadeInLength;
+        stage.getBatch().draw(fadeOverlayTexture, 0, 0, col_width*Help_Guides, row_height*Help_Guides);
+        stage.getBatch().setColor(c);
+        stage.getBatch().end();
+
+        if(fadeInAlpha <= 0){
+            startFadeIn = false;
+        }
+    }
 
+    @Override
+    public void fadeOut(float dt) {
+        stage.getBatch().begin();
+        Color c = stage.getBatch().getColor();
+        stage.getBatch().setColor(c.r, c.g, c.b, fadeOutAlpha);
+        fadeOutAlpha += dt/fadeOutLength;
+        stage.getBatch().draw(fadeOverlayTexture, 0, 0, col_width*Help_Guides, row_height*Help_Guides);
+        stage.getBatch().setColor(c);
+        stage.getBatch().end();
+        if(fadeOutAlpha >= 1){
+            stage.clear();
+            startFadeout = false;
+
+            //gvm.set(new CinematicView(gvm, playerController, assetManager, stage, skin, lobbyAvatars));
         }
-        */
+    }
+
+    private void debugDraw(SpriteBatch sb, String text, int xPos, int yPos){
+
+    }
+
+    @Override
+    public void dispose() {
 
     }
 }
diff --git a/CheckersClient/core/src/com/mygdx/game/views/View.java b/CheckersClient/core/src/com/mygdx/game/views/View.java
index a702c0dcf6db495332d8e3cc5e376636560a53e0..5cc6e3558b09a2ea158f805c8ab421c1bf84cd98 100644
--- a/CheckersClient/core/src/com/mygdx/game/views/View.java
+++ b/CheckersClient/core/src/com/mygdx/game/views/View.java
@@ -1,50 +1,103 @@
 package com.mygdx.game.views;
 
 import com.badlogic.gdx.ApplicationAdapter;
+import com.badlogic.gdx.Gdx;
+import com.badlogic.gdx.InputProcessor;
 import com.badlogic.gdx.assets.AssetManager;
+import com.badlogic.gdx.graphics.Color;
 import com.badlogic.gdx.graphics.OrthographicCamera;
+import com.badlogic.gdx.graphics.Pixmap;
+import com.badlogic.gdx.graphics.Texture;
+import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
+import com.badlogic.gdx.math.Vector2;
 import com.badlogic.gdx.math.Vector3;
 import com.badlogic.gdx.scenes.scene2d.Stage;
+import com.badlogic.gdx.scenes.scene2d.ui.Image;
 import com.badlogic.gdx.scenes.scene2d.ui.Skin;
 import com.mygdx.game.controllers.PlayerController;
 
+
 public abstract class View extends ApplicationAdapter {
 
     protected OrthographicCamera cam;
-    protected Vector3 mouse;
+    protected float[] lastTouch = new float[2];;
     protected final GameViewManager gvm;
-    protected PlayerController playerController;
-    protected AssetManager assetManager;
-    protected Stage stage;
+    protected final PlayerController playerController;
+    protected final AssetManager assetManager;
+    protected final Stage stage;
     protected Skin skin;
 
+
+    protected final int Help_Guides = 12;
+    protected final int row_height = Gdx.graphics.getHeight() / Help_Guides;
+    protected final int col_width = Gdx.graphics.getWidth() / Help_Guides;
+    protected final float xpad = col_width/2;
+    protected final float ypad = row_height/2;
+
+    protected ShapeRenderer shapeRenderer;
+    protected float fadeInAlpha;
+    protected float fadeOutAlpha;
+    protected float fadeInLength;
+    protected float fadeOutLength;
+
+    protected boolean startFadeout;
+    protected boolean startFadeIn;
+    protected Texture fadeOverlayTexture;
+
     protected View(GameViewManager gvm, PlayerController playerController, AssetManager assetManager, Stage stage, Skin skin){
         this.gvm = gvm;
         this.stage = stage;
         this.assetManager = assetManager;
         this.skin = skin;
         cam = new OrthographicCamera();
-        mouse = new Vector3();
         this.playerController = playerController;
+        this.shapeRenderer = new ShapeRenderer();
+
+        fadeInAlpha = 1;
+        fadeOutAlpha= 0;
+        startFadeIn = true;
+        startFadeout = false;
+        fadeInLength = 1;
+        fadeOutLength = 1;
+
+        Pixmap tablePixmap = new Pixmap(1,1, Pixmap.Format.RGB565);
+        tablePixmap.setColor(Color.WHITE);
+        tablePixmap.fill();
+        fadeOverlayTexture = new Texture(tablePixmap);
     }
 
-    protected abstract void handleInput();
+    public abstract void handleInput(float dt);
     public abstract void update(float dt);
     public abstract void render(float dt);
+    public abstract void fadeIn(float dt);
+    public abstract void fadeOut(float dt);
     public abstract void dispose();
 
-    public Skin getSkin(){
-        return skin;
-    }
-    public Stage getStage(){
-        return stage;
+    public boolean getStartFadeIn(){
+        return startFadeIn;
     }
-    public AssetManager getAssetManager(){
-        return assetManager;
+
+    public boolean getStartFadeOut(){
+        return startFadeout;
     }
 
-    public GameViewManager getGameViewManager(){
-        return gvm;
+    protected void setFadeColor(Color c){
+        Pixmap tablePixmap = new Pixmap(1,1, Pixmap.Format.RGB565);
+        tablePixmap.setColor(c);
+        tablePixmap.fill();
+        fadeOverlayTexture = new Texture(tablePixmap);
     }
 
+    protected void drawGrid(){
+        if(shapeRenderer == null){
+            shapeRenderer = new ShapeRenderer();
+        }
+        shapeRenderer.begin(ShapeRenderer.ShapeType.Line);
+        shapeRenderer.setColor(1, 0, 0, 0.75f); // Red line
+        for (int i = 0; i < 12; i++) {
+            shapeRenderer.rect(col_width*i, 0, 1, Gdx.graphics.getHeight());
+            shapeRenderer.rect(0, row_height*i, Gdx.graphics.getWidth(), 1);
+        }
+        shapeRenderer.end();
+    }
 }
diff --git a/CheckersClient/core/src/com/mygdx/game/views/enums/CharacterAssets.java b/CheckersClient/core/src/com/mygdx/game/views/enums/CharacterAssets.java
new file mode 100644
index 0000000000000000000000000000000000000000..c77661dbc6838fc15a8573c98c30685841f0ccbd
--- /dev/null
+++ b/CheckersClient/core/src/com/mygdx/game/views/enums/CharacterAssets.java
@@ -0,0 +1,23 @@
+package com.mygdx.game.views.enums;
+
+import com.badlogic.gdx.graphics.Texture;
+import com.badlogic.gdx.graphics.g2d.TextureAtlas;
+
+public enum CharacterAssets {
+
+    AsianGirlAtlas("characters/atlases/AsianGirl.atlas", TextureAtlas.class),
+    GrandmaAtlas("characters/atlases/Grandma.atlas", TextureAtlas.class),
+    HighSchoolGuyAtlas("characters/atlases/HighSchoolGuy.atlas", TextureAtlas.class),
+    HipsterGirlAtlas("characters/atlases/HipsterGirl.atlas", TextureAtlas.class),
+    RegularGuyAtlas("characters/atlases/RegularGuy.atlas", TextureAtlas.class),
+    RocketGuyAtlas("characters/atlases/RocketGuy.atlas", TextureAtlas.class),
+    PortraitsAtlas("characters/atlases/Portraits.atlas", TextureAtlas.class);
+
+    public final String path;
+    public final Class classType;
+
+    private CharacterAssets(String menuAssetPath, Class classType) {
+        this.path = menuAssetPath;
+        this.classType = classType;
+    }
+}
\ No newline at end of file
diff --git a/CheckersClient/core/src/com/mygdx/game/views/enums/CinematicAssets.java b/CheckersClient/core/src/com/mygdx/game/views/enums/CinematicAssets.java
new file mode 100644
index 0000000000000000000000000000000000000000..77ac1e41ed59c63fdf6c8965841916b2b9dd653e
--- /dev/null
+++ b/CheckersClient/core/src/com/mygdx/game/views/enums/CinematicAssets.java
@@ -0,0 +1,19 @@
+package com.mygdx.game.views.enums;
+
+import com.badlogic.gdx.audio.Music;
+import com.badlogic.gdx.graphics.g2d.TextureAtlas;
+
+public enum CinematicAssets {
+
+    CINEMATIC_AUDIO("cinematic/CinematicMusic.mp3", Music.class),
+    COUNT_DOWN_ATLAS("cinematic/atlas/CountDown.atlas", TextureAtlas.class),
+    CLOUD_ATLAS("cinematic/atlas/Cloud.atlas", TextureAtlas.class);
+
+    public final String path;
+    public final Class classType;
+
+    CinematicAssets(String assetPath, Class classType) {
+        this.path = assetPath;
+        this.classType = classType;
+    }
+}
\ No newline at end of file
diff --git a/CheckersClient/core/src/com/mygdx/game/views/enums/LobbyAssets.java b/CheckersClient/core/src/com/mygdx/game/views/enums/LobbyAssets.java
index b57ecc40aaef0f875cee6bee3121418c80356f26..4b27859d170fa984718572be93a6004e1ed7bf45 100644
--- a/CheckersClient/core/src/com/mygdx/game/views/enums/LobbyAssets.java
+++ b/CheckersClient/core/src/com/mygdx/game/views/enums/LobbyAssets.java
@@ -1,13 +1,25 @@
 package com.mygdx.game.views.enums;
 
 import com.badlogic.gdx.graphics.Texture;
+import com.badlogic.gdx.graphics.TextureArray;
+import com.badlogic.gdx.graphics.g2d.TextureAtlas;
 
 public enum LobbyAssets {
 
-    LOBBYLIST("Menu/1x/LobbyList.png", Texture.class),
+    LOBBY_LIST("Menu/1x/LobbyList.png", Texture.class),
     BACKGROUND("Menu/1x/LobbyMenu@1x.png", Texture.class),
-    ROCKET("Menu/1x/Rocket_Main@1x.png", Texture.class),
-    ROCKETEXHAUST("Menu/1x/Rocket_Exhaust@1x.png", Texture.class);
+    LOBBY("Menu/1x/Lobby.png", Texture.class),
+    MR_SERVER_ATLAS("characters/atlases/MrServer.atlas", TextureAtlas.class),
+    MR_SERVER_NAME("characters/MrServerName.png", Texture.class),
+    MR_SERVER_BUBBLE_SQUARE("Menu/1x/MrServerBubbleSquare.png", Texture.class),
+    MR_SERVER_BUBBLE_POINTER("Menu/1x/MrServerBubblePointer.png", Texture.class),
+
+    ROCKET_BIG("Menu/1x/Rocket_Main@1x.png", Texture.class),
+    ROCKET_SMALL("Menu/1x/Rocket_Small@1x.png", Texture.class),
+    ROCKET_EXHAUST("Menu/1x/Rocket_Exhaust@1x.png", Texture.class),
+    PLAYER_READY_CHECK("Menu/1x/PlayerReadyCheck.png", Texture.class),
+    PLAYER_READY("Menu/1x/PlayerReady.png", Texture.class);
+
 
     public final String path;
     public final Class classType;
diff --git a/CheckersClient/core/src/com/mygdx/game/views/enums/MenuAssets.java b/CheckersClient/core/src/com/mygdx/game/views/enums/MenuAssets.java
index b4489177112b3c9816ceeab337af0c3fb244280f..b461218431ef6f34418a71894fb57be9fd464dae 100644
--- a/CheckersClient/core/src/com/mygdx/game/views/enums/MenuAssets.java
+++ b/CheckersClient/core/src/com/mygdx/game/views/enums/MenuAssets.java
@@ -1,17 +1,22 @@
 package com.mygdx.game.views.enums;
 
-import com.badlogic.gdx.Gdx;
 import com.badlogic.gdx.audio.Sound;
 import com.badlogic.gdx.graphics.Texture;
-import com.badlogic.gdx.graphics.g2d.BitmapFont;
 
 public enum MenuAssets {
     FORM_BUTTON("Menu/1x/FormButton.png", Texture.class),
     BACKGROUND("Menu/1x/MainMenu@1x.png", Texture.class),
+    LOGO("Menu/1x/SpaceCheckersLogoWithBackground.png", Texture.class),
     FORM("Menu/1x/MainMenuForm.png", Texture.class),
     LOOP_AUDIO("Menu/MenuLoop.mp3",Sound .class),
     BUTTON_CLICK_AUDIO("Menu/ButtonClick1.mp3",Sound .class),
-    TRANSITION_AUDIO("Menu/1.5s_fade.mp3",Sound .class);
+    TRANSITION_AUDIO("Menu/1.5s_fade.mp3",Sound .class),
+
+    NEXT_AVATAR_BUTTON("Menu/1x/flipButton.png",Texture.class),
+    CONNECTION_BAR("Menu/1x/ConnectionBar.png",Texture.class),
+    GREEN_CIRCLE_SMALL("Menu/1x/GreenCircleSmall.png",Texture.class),
+    RED_CIRCLE_SMALL("Menu/1x/RedCircleSmall.png",Texture.class);
+
 
     public final String path;
     public final Class classType;
diff --git a/CheckersClient/core/src/com/mygdx/game/views/enums/PlayAssets.java b/CheckersClient/core/src/com/mygdx/game/views/enums/PlayAssets.java
new file mode 100644
index 0000000000000000000000000000000000000000..735057d8b89bdd4dce271fd7e1e3e5901263bd0e
--- /dev/null
+++ b/CheckersClient/core/src/com/mygdx/game/views/enums/PlayAssets.java
@@ -0,0 +1,23 @@
+package com.mygdx.game.views.enums;
+
+import com.badlogic.gdx.audio.Sound;
+import com.badlogic.gdx.graphics.Texture;
+
+
+public enum PlayAssets {
+
+    STAR_PIECE_BASE("Game/1x/StarPiece_Base.png", Texture.class),
+    STAR_PIECE_BASE_BORDER("Game/1x/StarPiece_BaseBrd.png", Texture.class),
+    STAR_PIECE_HEAD("Game/1x/StarPiece_Head.png", Texture.class),
+    STAR_PIECE_HEAD_BORDER("Game/1x/StarPiece_HeadBrd.png", Texture.class),
+    STAR_PIECE_MAST("Game/1x/StarPiece_Mast.png", Texture.class),
+    STAR_PIECE_MAST_BORDER("Game/1x/StarPiece_MastBrd.png", Texture.class);
+
+    public final String path;
+    public final Class classType;
+
+    PlayAssets(String menuAssetPath, Class classType) {
+        this.path = menuAssetPath;
+        this.classType = classType;
+    }
+}
diff --git a/CheckersClient/core/src/com/mygdx/game/views/tokens/AnimatedSprite.java b/CheckersClient/core/src/com/mygdx/game/views/tokens/AnimatedSprite.java
new file mode 100644
index 0000000000000000000000000000000000000000..f3ff1823cb2a1ebabe45457a9c3340325f37574d
--- /dev/null
+++ b/CheckersClient/core/src/com/mygdx/game/views/tokens/AnimatedSprite.java
@@ -0,0 +1,54 @@
+//
+// Source code recreated from a .class file by IntelliJ IDEA
+// (powered by Fernflower decompiler)
+//
+
+package com.mygdx.game.views.tokens;
+
+import com.badlogic.gdx.graphics.Texture;
+import com.badlogic.gdx.graphics.g2d.Sprite;
+import com.badlogic.gdx.graphics.g2d.TextureAtlas;
+import com.badlogic.gdx.graphics.g2d.TextureRegion;
+
+public class AnimatedSprite extends Sprite {
+
+    private final TextureRegion portrait;
+    private final String name;
+    private final TextureAtlas textureAtlas;
+    private int currentFrame = 1;
+    private final int maxFrame;
+    private boolean reversed = false;
+
+
+    public AnimatedSprite(TextureAtlas textureAtlas, TextureRegion portrait, String name, int maxFrame) {
+        super(textureAtlas.findRegion(name+1));
+        this.portrait = portrait;
+        this.name = name;
+        this.maxFrame = maxFrame;
+        this.textureAtlas = textureAtlas;
+    }
+
+    public void updateTexture() {
+        if (reversed) {
+            --currentFrame;
+            if (currentFrame == 1) {
+                reversed = false;
+            }
+        } else {
+            ++currentFrame;
+            if (currentFrame == maxFrame) {
+                reversed = true;
+            }
+        }
+        setRegion(textureAtlas.findRegion(name+currentFrame));
+    }
+
+
+    public TextureRegion getPortrait() {
+        return this.portrait;
+    }
+
+    public String getName() {
+        return this.name;
+    }
+}
diff --git a/CheckersClient/core/src/com/mygdx/game/views/tokens/StarPiece.java b/CheckersClient/core/src/com/mygdx/game/views/tokens/StarPiece.java
new file mode 100644
index 0000000000000000000000000000000000000000..dd197e8183e6b186dec51da2cc8c5e9f2979fc7d
--- /dev/null
+++ b/CheckersClient/core/src/com/mygdx/game/views/tokens/StarPiece.java
@@ -0,0 +1,133 @@
+package com.mygdx.game.views.tokens;
+
+import com.badlogic.gdx.graphics.Color;
+import com.badlogic.gdx.graphics.Texture;
+import com.badlogic.gdx.graphics.g2d.Batch;
+import com.badlogic.gdx.graphics.g2d.Sprite;
+
+public class StarPiece {
+
+    private final Color color;
+    private Texture base;
+    private Texture baseBorder;
+    private float xPos;
+    private float yPos;
+
+    private Texture mast;
+    private Texture mastBorder;
+
+    private Texture head;
+    private Texture headBorder;
+    private boolean rotateHead;
+    private float headRotation = 1;
+
+    public StarPiece (float xPos, float yPos, Color color, Texture base, Texture baseBorder, Texture mast, Texture mastBorder, Texture head, Texture headBorder){
+
+        this.xPos = xPos;
+        this.yPos = yPos;
+        this.color = color;
+
+        this.base = base;
+        this.baseBorder = baseBorder;
+        this.mast = mast;
+        this.mastBorder = mastBorder;
+        this.head = head;
+        this.headBorder = headBorder;
+        this.rotateHead=false;
+    }
+
+
+    public void draw(Batch sb){
+        Color sbColor = sb.getColor();
+        sb.begin();
+        sb.setColor(color);
+        sb.draw(base, xPos, yPos);
+        sb.setColor(Color.BLACK);
+        sb.draw(baseBorder, xPos, yPos);
+
+        sb.setColor(color);
+        sb.draw(mast, xPos+base.getWidth()/2-mast.getWidth()/2, yPos+base.getHeight()*0.35f);
+        sb.setColor(Color.BLACK);
+        sb.draw(mastBorder, xPos+base.getWidth()/2-mast.getWidth()/2, yPos+base.getHeight()*0.35f);
+
+        if(rotateHead){
+            sb.setColor(color);
+
+            sb.draw(head,
+             xPos+base.getWidth()/2-head.getWidth()/2,
+            yPos+base.getHeight()-head.getWidth()/2,
+            head.getWidth()/2,
+            head.getHeight()/2,
+            head.getWidth(),
+            head.getHeight(),
+            1f,
+            1f,
+            headRotation++,
+            0,
+            0,
+                    head.getWidth(),
+                    head.getHeight(),
+            false,
+            false);
+
+            sb.setColor(Color.BLACK);
+            sb.draw(headBorder,
+                    xPos+base.getWidth()/2-head.getWidth()/2,
+                    yPos+base.getHeight()-head.getWidth()/2,
+                    head.getWidth()/2,
+                    head.getHeight()/2,
+                    head.getWidth(),
+                    head.getHeight(),
+                    1f,
+                    1f,
+                    headRotation++,
+                    0,
+                    0,
+                    head.getWidth(),
+                    head.getHeight(),
+                    false,
+                    false);
+        }
+        else{
+            sb.setColor(color);
+            sb.draw(head, xPos+base.getWidth()/2-head.getWidth()/2, yPos+base.getHeight()-head.getWidth()/2);
+            sb.setColor(Color.BLACK);
+            sb.draw(headBorder, xPos+base.getWidth()/2-head.getWidth()/2, yPos+base.getHeight()-head.getWidth()/2);
+        }
+
+        sb.setColor(sbColor);
+        sb.end();
+    }
+
+    public void setRotateHead(boolean rotateHead){
+        this.rotateHead = rotateHead;
+    }
+
+
+    public void setX(float xPos){
+        this.xPos = xPos;
+    }
+
+    public void setY(float yPos){
+        this.yPos = yPos;
+    }
+
+    public float getX(){
+        return xPos;
+    }
+
+    public float getY(){
+        return yPos;
+    }
+
+    public void setPosition(float xPos, float yPos){
+        this.xPos = xPos;
+        this.yPos = yPos;
+    }
+
+
+
+
+
+
+}
diff --git a/CheckersServer/.idea/libraries/Gradle__CheckersServer_core_core_1_0.xml b/CheckersServer/.idea/libraries/Gradle__CheckersServer_core_core_1_0.xml
new file mode 100644
index 0000000000000000000000000000000000000000..50fec341c8000eb96f59c19192ccb94fd1f8912d
--- /dev/null
+++ b/CheckersServer/.idea/libraries/Gradle__CheckersServer_core_core_1_0.xml
@@ -0,0 +1,9 @@
+<component name="libraryTable">
+  <library name="Gradle: CheckersServer.core.core-1.0">
+    <CLASSES>
+      <root url="jar://$PROJECT_DIR$/core/build/libs/core-1.0.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES />
+  </library>
+</component>
\ No newline at end of file
diff --git a/CheckersServer/.idea/libraries/Gradle__org_javatuples_javatuples_1_2.xml b/CheckersServer/.idea/libraries/Gradle__org_javatuples_javatuples_1_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..791ccad4fc6da6b6e176aa2a55444318bfcaf3dd
--- /dev/null
+++ b/CheckersServer/.idea/libraries/Gradle__org_javatuples_javatuples_1_2.xml
@@ -0,0 +1,11 @@
+<component name="libraryTable">
+  <library name="Gradle: org.javatuples:javatuples:1.2">
+    <CLASSES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.javatuples/javatuples/1.2/507312ac4b601204a72a83380badbca82683dd36/javatuples-1.2.jar!/" />
+    </CLASSES>
+    <JAVADOC />
+    <SOURCES>
+      <root url="jar://$USER_HOME$/.gradle/caches/modules-2/files-2.1/org.javatuples/javatuples/1.2/a7495f5370bdfcf46c6f3c6ed0badf52877aa467/javatuples-1.2-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/CheckersServer/build.gradle b/CheckersServer/build.gradle
index c5f57c6b5dcd11f5867a795bf1dcec2c4fe27208..d8825f555768b1081e122ce6ce88fda6c4bd8591 100644
--- a/CheckersServer/build.gradle
+++ b/CheckersServer/build.gradle
@@ -10,11 +10,8 @@ buildscript {
         google()
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:3.5.4'
+        classpath 'com.android.tools.build:gradle:4.1.3'
         classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
-
-
-
     }
 }
 
@@ -53,6 +50,7 @@ project(":desktop") {
         api "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
 
         implementation group: "com.esotericsoftware", name: 'kryonet', version: "2.22.0-RC1"
+        implementation group: "org.javatuples", name: 'javatuples', version: "1.2"
     }
 }
 
@@ -79,6 +77,7 @@ project(":android") {
         api "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
 
         implementation group: "com.esotericsoftware", name: 'kryonet', version: "2.22.0-RC1"
+        implementation group: "org.javatuples", name: 'javatuples', version: "1.2"
     }
 }
 
@@ -92,5 +91,6 @@ project(":core") {
         api "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
 
         implementation group: "com.esotericsoftware", name: 'kryonet', version: "2.22.0-RC1"
+        implementation group: "org.javatuples", name: 'javatuples', version: "1.2"
     }
 }
diff --git a/CheckersServer/core/src/com/mygdx/game/controller/CameraController.kt b/CheckersServer/core/src/com/mygdx/game/controller/CameraController.kt
deleted file mode 100644
index 132c9615d9d596862f77abe67fd9035d73672b7a..0000000000000000000000000000000000000000
--- a/CheckersServer/core/src/com/mygdx/game/controller/CameraController.kt
+++ /dev/null
@@ -1,4 +0,0 @@
-package com.mygdx.game.controller
-
-class CameraController {
-}
\ No newline at end of file
diff --git a/CheckersServer/core/src/com/mygdx/game/controller/NetworkController.java b/CheckersServer/core/src/com/mygdx/game/controller/NetworkController.java
index 18c9ad7015af7207b2eeee3a46afa3d8edbbf8ff..fc3b72f22cdb075d7788ae99ebf6552bf4be237d 100644
--- a/CheckersServer/core/src/com/mygdx/game/controller/NetworkController.java
+++ b/CheckersServer/core/src/com/mygdx/game/controller/NetworkController.java
@@ -10,11 +10,12 @@ import com.mygdx.game.model.Player;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.HashSet;
 
 public class NetworkController {
 
-    private final int MAX_PLAYERS = 2;
-    private final int MAX_LOBBIES = 2;
+    private final int MAX_PLAYERS = 8;
+    private final int MAX_LOBBIES = 40;
 
     private ArrayList<Player> players;
     private ArrayList<Lobby> lobbies;
@@ -52,9 +53,9 @@ public class NetworkController {
         });
     }
 
-    public Player playerJoin(int newID){
+    public Player playerJoin(int newID, int indexAvatar){
         if(players.size() < MAX_PLAYERS){
-            Player player = new Player(newID);
+            Player player = new Player(newID, indexAvatar);
             players.add(player);
             return player;
         }
@@ -63,13 +64,27 @@ public class NetworkController {
 
     public void playerKick(int id){
         int index = players.indexOf(new Player(id));
-        if (index!= -1) players.remove(index);
+        if (index!= -1) {
+            if (lobbies.size() > 0) {
+                for(Lobby lobby : lobbies){
+                    if(lobby.getPlayersID().contains(id)){
+                        ArrayList<Connection> connections = getConnections(lobby);
+                        cLobbyLeave command =  new cLobbyLeave(leaveLobby(id, lobby.getID()));
+                        for(Connection c : connections){
+                            c.sendTCP(command);
+                        }
+                        break;
+                    }
+                }
+            }
+            players.remove(index);
+        }
     }
 
-    public Lobby createLobby(int MAX_PLAYERS){
+    public Lobby createLobby(String name, int MAX_PLAYERS){
         if(lobbies.size() < MAX_LOBBIES){
             lobby_id++;
-            Lobby lobby = new Lobby(lobby_id, MAX_PLAYERS);
+            Lobby lobby = new Lobby(lobby_id, name, MAX_PLAYERS);
             lobbies.add(lobby);
             return lobby;
         }
@@ -83,36 +98,50 @@ public class NetworkController {
     }
 
     public Lobby joinLobby(int playerID, int lobbyID){
-        int lobby_idx = lobbies.indexOf(new Lobby(lobbyID));
-        int player_idx =  players.indexOf(new Player(playerID));
-        if (lobby_idx != -1 && player_idx != -1) {
-            Lobby lobby = lobbies.get(lobby_idx);
-            Player player = players.get(player_idx);
+        Lobby lobby = getLobby(lobbyID);
+        Player player = getPlayer(playerID);
+        if (lobby.getID() != -1 && player.getID() != -1) {
             if(lobby.playerJoin(player) != -1){
-                lobbies.set(lobby_idx, lobby);
+                lobbies.set(lobbies.indexOf(lobby), lobby);
                 return lobby;
             }
         }
         return new Lobby(-1);
     }
 
-    public int leaveLobby(int playerID, int lobbyID){
-        int lobby_idx = lobbies.indexOf(new Lobby(lobbyID));
-        int player_idx =  players.indexOf(new Player(playerID));
-        if (lobby_idx != -1 && player_idx != -1) {
-            Lobby lobby = lobbies.get(lobby_idx);
-            Player player = players.get(player_idx);
+    public Lobby leaveLobby(int playerID, int lobbyID){
+        Lobby lobby = getLobby(lobbyID);
+        Player player = getPlayer(playerID);
+        if (lobby.getID() != -1 && player.getID() != -1) {
             if(lobby.playerKick(player) != -1){
-                if(lobby.getPlayersCount() == 0) deleteLobby(lobby_idx);
-                else lobbies.set(lobby_idx, lobby);
-                return 0;
+                if(lobby.getPlayersCount() == 0) deleteLobby(lobbyID);
+                else lobbies.set(lobbies.indexOf(lobby), lobby);
+                return lobby;
             }
         }
-        return -1;
+        return new Lobby(-1);
+    }
+
+    public Lobby getLobby(int lobbyID){
+        int lobby_idx = lobbies.indexOf(new Lobby(lobbyID));
+        if (lobby_idx != -1){
+            return lobbies.get(lobby_idx);
+        }
+        return new Lobby(-1);
+    }
+
+    public Player getPlayer(int playerID){
+        int player_idx =  players.indexOf(new Player(playerID));
+        if (player_idx != -1){
+            return players.get(player_idx);
+        }
+        return new Player(-1);
     }
 
     public ArrayList<Lobby> getLobbies(){ return lobbies; }
 
+    public ArrayList<Player> getPlayers(){ return players; }
+
     public void registerClasses(){
         kryo.register(ArrayList.class, 100);
         kryo.register(Lobby.class, 5);
@@ -125,10 +154,21 @@ public class NetworkController {
         kryo.register(cLobbyLeave.class, 22);
         kryo.register(cLobbyDelete.class, 23);
         kryo.register(cLobbyGetList.class, 24);
+        kryo.register(cSetIndexAvatar.class, 25);
+        kryo.register(cSetPlayerReady.class, 26);
+        kryo.register(cSetPlayerName.class, 27);
+        kryo.register(cStartGame.class, 28);
     }
 
     public NetworkController getNetworkController() { return this; }
 
-    public Connection[] getConnections(){ return server.getConnections(); }
+    public ArrayList<Connection> getConnections(Lobby lobby){
+        HashSet<Integer> players_id = lobby.getPlayersID();
+        ArrayList<Connection> connections = new ArrayList<Connection>();
+        for (Connection c : server.getConnections()) {
+            if (players_id.contains((Integer) c.getID())) connections.add(c);
+        }
+        return connections;
+    }
 
 }
diff --git a/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyCreate.java b/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyCreate.java
index e0a85104aacf5e6967b3de07f8ae197eb8a16f60..06c2633c9e2718e9766088afad23cf65728902cc 100644
--- a/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyCreate.java
+++ b/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyCreate.java
@@ -6,6 +6,8 @@ import com.mygdx.game.controller.commands.Command;
 import com.mygdx.game.model.Lobby;
 import com.mygdx.game.model.Player;
 
+import java.util.ArrayList;
+
 public class cLobbyCreate extends Command {
 
     public cLobbyCreate() { super("cLobbyCreate"); }
@@ -14,9 +16,10 @@ public class cLobbyCreate extends Command {
 
     @Override
     public void execute(NetworkController net, Connection connection){
-        if(data instanceof Integer){
-            int MAX_PLAYERS = (int) data;
-            data = net.createLobby(MAX_PLAYERS);
+        if(data instanceof ArrayList){
+            String name = (String) ((ArrayList) data).get(0);
+            int MAX_PLAYERS = (int) ((ArrayList) data).get(1);
+            data = net.createLobby(name, MAX_PLAYERS);
             System.out.printf("Request to create lobby received. Returning Lobby w. ID: %d \n", ((Lobby)data).getID());
             connection.sendTCP(this);
         }
diff --git a/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyDelete.java b/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyDelete.java
index 09736981208b8473d4c22158ceb726f9be2c91fb..029006dfdf6409a238319fef327e5c869f907c43 100644
--- a/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyDelete.java
+++ b/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyDelete.java
@@ -14,23 +14,14 @@ public class cLobbyDelete extends Command{
     public void execute(NetworkController net, Connection connection){
         if(data instanceof Integer) {
             int lobby_id = (int) data;
-            int lobby_idx = net.getLobbies().indexOf(new Lobby(lobby_id));
-            if (lobby_idx != -1) {
-                //Notify all players in the lobby
-                Lobby lobby = net.getLobbies().get(lobby_idx);
-                HashSet<Integer> players_id = lobby.getPlayersID();
-                data = (Integer) net.deleteLobby(lobby_id);
-                for (Connection c : net.getConnections()) {
-                    if (players_id.contains((Integer) c.getID())) c.sendTCP(this);
-                }
-            }
-            else {
-                //Notify the sender only
-                data = (Integer) net.deleteLobby(lobby_id);
-                connection.sendTCP(this);
-            }
+            Lobby lobby = net.getLobby(lobby_id);
+            //Notify all players in the lobby
+            data = (Integer) net.deleteLobby(lobby_id);
             System.out.printf("Request from Player w. ID: %d to delete Lobby w. ID: %d. Returning code: %d \n",
                     connection.getID(), lobby_id, ((Integer) data));
+            for (Connection c : net.getConnections(lobby)) {
+                c.sendTCP(this);
+            }
         }
     }
 }
diff --git a/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyGetList.java b/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyGetList.java
index b49e1547e05e03677e92cb7d6e57731a9dec7fd6..6ccd56a74c4d2f52823b12bc1e2627b77048e14d 100644
--- a/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyGetList.java
+++ b/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyGetList.java
@@ -16,5 +16,6 @@ public class cLobbyGetList extends Command{
         data = net.getLobbies();
         System.out.printf("Request to get list of lobbies from Client. Returning: %s \n", data.toString());
         connection.sendTCP(this);
+        System.out.println("Number of available lobbies" + net.getLobbies().size());
     }
 }
diff --git a/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyJoin.java b/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyJoin.java
index 6cb5990df1c0873976f41488d239ec621bed8d71..e27c87eb04923377c80eea1d421a2d05ec27327f 100644
--- a/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyJoin.java
+++ b/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyJoin.java
@@ -17,7 +17,9 @@ public class cLobbyJoin extends Command{
             data = net.joinLobby(connection.getID(), lobby_id);
             System.out.printf("Request from Player w. ID: %d to join Lobby w. ID: %d. Returning Lobby w. ID: %d \n",
                     connection.getID(), lobby_id, ((Lobby)data).getID());
-            connection.sendTCP(this);
+            for (Connection c : net.getConnections(net.getLobby(lobby_id))) {
+                c.sendTCP(this);
+            }
         }
     }
 }
diff --git a/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyLeave.java b/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyLeave.java
index 12ff2fa5f909ba25b1c94f7ec6b61c8cf9da0ffa..d21ef48818cd6ce678666110eb275672ab18b77e 100644
--- a/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyLeave.java
+++ b/CheckersServer/core/src/com/mygdx/game/controller/commands/cLobbyLeave.java
@@ -4,20 +4,28 @@ import com.esotericsoftware.kryonet.Connection;
 import com.mygdx.game.controller.NetworkController;
 import com.mygdx.game.model.Lobby;
 
+import java.util.ArrayList;
 import java.util.HashSet;
 
 public class cLobbyLeave extends Command{
 
     public cLobbyLeave() { super("cLobbyLeave"); }
 
+    public cLobbyLeave(Lobby lobby) { super("cLobbyLeave", lobby); }
+
     @Override
     public void execute(NetworkController net, Connection connection){
         if(data instanceof Integer) {
             int lobby_id = (int) data;
-            data = (Integer) net.leaveLobby(connection.getID(),lobby_id);
-            System.out.printf("Request from Player w. ID: %d to leave Lobby w. ID: %d. Returning code: %d \n",
-                    connection.getID(), lobby_id, ((Integer)data));
-            connection.sendTCP(this);
+            Lobby lobby = net.getLobby(lobby_id);
+            ArrayList<Connection> connections = net.getConnections(lobby);
+            data = net.leaveLobby(connection.getID(),lobby_id);
+            net.getPlayer(connection.getID()).setIsPlayerReady(false);
+            System.out.printf("Request from Player w. ID: %d to leave Lobby w. ID: %d. Returning Lobby w. ID: %d \n",
+                    connection.getID(), lobby_id, ((Lobby)data).getID());
+            for (Connection c : connections) {
+                c.sendTCP(this);
+            }
         }
     }
 }
diff --git a/CheckersServer/core/src/com/mygdx/game/controller/commands/cPlayerJoin.java b/CheckersServer/core/src/com/mygdx/game/controller/commands/cPlayerJoin.java
index 5bca00f6ca8b356c64af42ec2c8fe08f67097dc3..c99cadce1f7c244f7dd26c2586647b8326fb577d 100644
--- a/CheckersServer/core/src/com/mygdx/game/controller/commands/cPlayerJoin.java
+++ b/CheckersServer/core/src/com/mygdx/game/controller/commands/cPlayerJoin.java
@@ -14,9 +14,12 @@ public class cPlayerJoin extends Command {
 
     @Override
     public void execute(NetworkController net, Connection connection){
-        data = net.playerJoin(connection.getID());
-        System.out.printf("Request to join from Client. Returning ID: %d \n", ((Player)data).getID());
-        connection.sendTCP(this);
-        if(((Player)data).getID() == -1) connection.close();
+        if (data instanceof Integer){
+            int indexAvatar = (int) data;
+            data = net.playerJoin(connection.getID(), indexAvatar);
+            System.out.printf("Request to join from Client. Returning ID: %d \n", ((Player)data).getID());
+            connection.sendTCP(this);
+            if(((Player)data).getID() == -1) connection.close();
+        }
     }
 }
diff --git a/CheckersServer/core/src/com/mygdx/game/controller/commands/cSetIndexAvatar.java b/CheckersServer/core/src/com/mygdx/game/controller/commands/cSetIndexAvatar.java
new file mode 100644
index 0000000000000000000000000000000000000000..a3dc1e88d5891fc0ee138c48e3186c142c6b39b3
--- /dev/null
+++ b/CheckersServer/core/src/com/mygdx/game/controller/commands/cSetIndexAvatar.java
@@ -0,0 +1,35 @@
+package com.mygdx.game.controller.commands;
+
+import com.esotericsoftware.kryonet.Connection;
+import com.mygdx.game.controller.NetworkController;
+import com.mygdx.game.model.Player;
+
+import java.util.HashSet;
+
+public class cSetIndexAvatar extends Command {
+
+    public cSetIndexAvatar() { super("cLobbyJoin"); }
+
+    public cSetIndexAvatar(int indexAvatar) {
+        super("cSetIndexAvatar", indexAvatar);
+    }
+
+    @Override
+    public void execute(NetworkController net, Connection connection){
+        if(data instanceof Integer){
+            int indexAvatar = (int) data;
+            if (indexAvatar == -1) System.out.println("Failed to set index avatar.");
+            else {
+                for (Player p : net.getPlayers()) {
+                    if(p.getID() == connection.getID()){
+                        p.setIndexAvatar(indexAvatar);
+                        connection.sendTCP(this);
+                    }
+                    else{
+                        connection.sendTCP(new cSetIndexAvatar(-1));
+                    }
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/CheckersServer/core/src/com/mygdx/game/controller/commands/cSetPlayerName.java b/CheckersServer/core/src/com/mygdx/game/controller/commands/cSetPlayerName.java
new file mode 100644
index 0000000000000000000000000000000000000000..323be48847559289ea56bd005f016e208f8dbd27
--- /dev/null
+++ b/CheckersServer/core/src/com/mygdx/game/controller/commands/cSetPlayerName.java
@@ -0,0 +1,27 @@
+package com.mygdx.game.controller.commands;
+
+import com.esotericsoftware.kryonet.Connection;
+import com.mygdx.game.controller.NetworkController;
+import com.mygdx.game.model.Lobby;
+import com.mygdx.game.model.Player;
+
+import org.javatuples.Pair;
+
+public class cSetPlayerName extends Command{
+
+    public cSetPlayerName() { super("cLobbyJoin"); }
+
+    public cSetPlayerName(String name) {
+        super("cLobbyJoin", name);
+    }
+
+    @Override
+    public void execute(NetworkController net, Connection connection){
+        if(data instanceof String){
+            String name = (String) data;
+            net.getPlayer(connection.getID()).setPlayerName(name);
+            connection.sendTCP(this);
+            System.out.printf("Player name is updated. %s \n", name);
+        }
+    }
+}
\ No newline at end of file
diff --git a/CheckersServer/core/src/com/mygdx/game/controller/commands/cSetPlayerReady.java b/CheckersServer/core/src/com/mygdx/game/controller/commands/cSetPlayerReady.java
new file mode 100644
index 0000000000000000000000000000000000000000..eb793ad0742c6e7f9473a98834db1876a8c5c7a7
--- /dev/null
+++ b/CheckersServer/core/src/com/mygdx/game/controller/commands/cSetPlayerReady.java
@@ -0,0 +1,46 @@
+package com.mygdx.game.controller.commands;
+
+import com.esotericsoftware.kryonet.Connection;
+import com.mygdx.game.controller.NetworkController;
+import com.mygdx.game.model.Lobby;
+
+public class cSetPlayerReady extends Command{
+
+    public cSetPlayerReady() { super("cSetPlayerReady"); }
+
+    private int lobbyID;
+    private int playerID;
+
+    public cSetPlayerReady(boolean isPlayerReady, int lobbyID) {
+        super("cSetPlayerReady", isPlayerReady);
+        this.lobbyID = lobbyID;
+        this.playerID = playerID;
+    }
+
+    public cSetPlayerReady(boolean isPlayerReady, int lobbyID, int playerID) {
+        super("cSetPlayerReady", isPlayerReady);
+        this.lobbyID = lobbyID;
+        this.playerID = playerID;
+    }
+
+    @Override
+    public void execute(NetworkController net, Connection connection){
+        if(data instanceof Boolean){
+            boolean isPlayerReady = (Boolean) data;
+            net.getPlayer(connection.getID()).setIsPlayerReady(isPlayerReady);
+            Lobby lobby = net.getLobby(lobbyID);
+
+            for (Connection c : net.getConnections(lobby)) {
+                c.sendTCP(new cSetPlayerReady(isPlayerReady, lobbyID, connection.getID()));
+            }
+
+            if(lobby.isFullAndReady()){
+                for (Connection c : net.getConnections(lobby)) {
+                    c.sendTCP(new cStartGame());
+                }
+                System.out.printf("Lobby %b is about to start. \n", lobbyID);
+            }
+            System.out.printf("Player status updated. Is player %d currently ready? %b \n", playerID, isPlayerReady);
+        }
+    }
+}
\ No newline at end of file
diff --git a/CheckersServer/core/src/com/mygdx/game/controller/commands/cStartGame.java b/CheckersServer/core/src/com/mygdx/game/controller/commands/cStartGame.java
new file mode 100644
index 0000000000000000000000000000000000000000..0b907c8dfca301ccf82f729926856a99d7f9ddb4
--- /dev/null
+++ b/CheckersServer/core/src/com/mygdx/game/controller/commands/cStartGame.java
@@ -0,0 +1,17 @@
+package com.mygdx.game.controller.commands;
+
+import com.esotericsoftware.kryonet.Connection;
+import com.mygdx.game.controller.NetworkController;
+import com.mygdx.game.model.Lobby;
+
+public class cStartGame extends Command{
+
+    public cStartGame() { super("cStartGame"); }
+
+    public cStartGame(int id) { super("cStartGame", (Integer) id); }
+
+    @Override
+    public void execute(NetworkController net, Connection connection){
+
+    }
+}
diff --git a/CheckersServer/core/src/com/mygdx/game/managers/ViewManager.kt b/CheckersServer/core/src/com/mygdx/game/managers/ViewManager.kt
deleted file mode 100644
index 1313b07b8081f83d858636c649b39a408cf1ed81..0000000000000000000000000000000000000000
--- a/CheckersServer/core/src/com/mygdx/game/managers/ViewManager.kt
+++ /dev/null
@@ -1,4 +0,0 @@
-package com.mygdx.game.managers
-
-class ViewManager {
-}
\ No newline at end of file
diff --git a/CheckersServer/core/src/com/mygdx/game/model/Lobby.java b/CheckersServer/core/src/com/mygdx/game/model/Lobby.java
index d558e7b2bb432894d846e8986a90bc1bb192f317..46496c47e23935f2a684e44961b033296ccf0ed7 100644
--- a/CheckersServer/core/src/com/mygdx/game/model/Lobby.java
+++ b/CheckersServer/core/src/com/mygdx/game/model/Lobby.java
@@ -6,6 +6,7 @@ import java.util.HashSet;
 public class Lobby {
 
     private int ID;
+    private String name;
     private int MAX_PLAYERS;
     private ArrayList<Player> players;
 
@@ -16,14 +17,15 @@ public class Lobby {
         players = new ArrayList<Player>();
     }
 
-    public Lobby(int ID, int MAX_PLAYERS){
+    public Lobby(int ID, String name, int MAX_PLAYERS){
         this.ID = ID;
+        this.name = name;
         this.MAX_PLAYERS = MAX_PLAYERS;
         players = new ArrayList<Player>();
     }
 
     public int playerJoin(Player player){
-        if(players.size() < MAX_PLAYERS){
+        if(players.size() < MAX_PLAYERS && !getPlayersID().contains(player.getID())){
             players.add(player);
             return 0;
         }
@@ -48,8 +50,40 @@ public class Lobby {
         return set;
     }
 
+    public Player getPlayerByID(int playerID){
+
+        Player returnPlayer = null;
+
+        for (Player player : players){
+            if (player.getID() == playerID) returnPlayer = player;
+        }
+
+        return returnPlayer;
+    }
+
+    public ArrayList<Player> getPlayers(){
+        return players;
+    }
+
     public int getPlayersCount(){ return players.size(); }
 
+    public boolean isFullAndReady(){
+        if(MAX_PLAYERS == getPlayersCount()){
+            for(Player player : players){
+                if(!player.getIsPlayerReady()) {
+                    System.out.println("This should run only once.");
+                    return false;
+                }
+            }
+            System.out.println("This should run a few times.");
+            return true;
+        }
+        else{
+            System.out.println("This should many times.");
+            return false;
+        }
+    }
+
     @Override
     public boolean equals(Object o) {
         if (this == o) return true;
@@ -62,6 +96,7 @@ public class Lobby {
     public String toString() {
         return "Lobby{" +
                 "ID=" + ID +
+                ", name='" + name + '\'' +
                 ", MAX_PLAYERS=" + MAX_PLAYERS +
                 ", players=" + players +
                 '}';
diff --git a/CheckersServer/core/src/com/mygdx/game/model/Player.java b/CheckersServer/core/src/com/mygdx/game/model/Player.java
index dcdbf53880bf6148551ec35aeb51bf52d017b6e2..4d983c30a153da076fdf5657e701a2152c556863 100644
--- a/CheckersServer/core/src/com/mygdx/game/model/Player.java
+++ b/CheckersServer/core/src/com/mygdx/game/model/Player.java
@@ -3,11 +3,17 @@ package com.mygdx.game.model;
 public class Player {
 
     private int ID;
+    private int indexAvatar;
+    private String playerName;
+    private boolean isPlayerReady;
 
     public Player(){}
 
-    public Player(int ID){
+    public Player(int ID){ this.ID = ID; }
+
+    public Player(int ID, int indexAvatar){
         this.ID = ID;
+        this.indexAvatar = indexAvatar;
     }
 
     public int getID(){ return ID; }
@@ -27,4 +33,27 @@ public class Player {
                 '}';
     }
 
+    public void setIndexAvatar(int indexAvatar){
+        this.indexAvatar = indexAvatar;
+    }
+
+    public int getPlayerAvatar(int indexAvatar){
+        return this.indexAvatar;
+    }
+
+    public void setPlayerName(String playerName) {
+        this.playerName = playerName;
+    }
+
+    public String getPlayerName(){
+        return this.playerName;
+    }
+
+    public void setIsPlayerReady(boolean isPlayerReady) {
+        this.isPlayerReady = isPlayerReady;
+    }
+
+    public boolean getIsPlayerReady(){
+        return this.isPlayerReady;
+    }
 }
diff --git a/CheckersServer/core/src/com/mygdx/game/singletons/AssetLoader.kt b/CheckersServer/core/src/com/mygdx/game/singletons/AssetLoader.kt
deleted file mode 100644
index 18c8c08a3333370e4e003f0b0019270a5f8fe7c7..0000000000000000000000000000000000000000
--- a/CheckersServer/core/src/com/mygdx/game/singletons/AssetLoader.kt
+++ /dev/null
@@ -1,4 +0,0 @@
-package com.mygdx.game.singletons
-
-class AssetLoader {
-}
\ No newline at end of file
diff --git a/CheckersServer/core/src/com/mygdx/game/views/AbstractView.kt b/CheckersServer/core/src/com/mygdx/game/views/AbstractView.kt
deleted file mode 100644
index a6cdbeb1eb6158a79c848759219690491cb88d41..0000000000000000000000000000000000000000
--- a/CheckersServer/core/src/com/mygdx/game/views/AbstractView.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-package com.mygdx.game.views
-
-abstract class AbstractView {
-
-}
\ No newline at end of file
diff --git a/CheckersServer/core/src/com/mygdx/game/views/JoinView.kt b/CheckersServer/core/src/com/mygdx/game/views/JoinView.kt
deleted file mode 100644
index 2564b4066b150acea47b864812f917a1d1c0f90a..0000000000000000000000000000000000000000
--- a/CheckersServer/core/src/com/mygdx/game/views/JoinView.kt
+++ /dev/null
@@ -1,4 +0,0 @@
-package com.mygdx.game.views
-
-class JoinView {
-}
\ No newline at end of file
diff --git a/CheckersServer/core/src/com/mygdx/game/views/LoadingView.kt b/CheckersServer/core/src/com/mygdx/game/views/LoadingView.kt
deleted file mode 100644
index 817f848849cfb382d9c19f2b617598acb4bb8bce..0000000000000000000000000000000000000000
--- a/CheckersServer/core/src/com/mygdx/game/views/LoadingView.kt
+++ /dev/null
@@ -1,4 +0,0 @@
-package com.mygdx.game.views
-
-class LoadingView : WaitingView() {
-}
\ No newline at end of file
diff --git a/CheckersServer/core/src/com/mygdx/game/views/LobbyView.kt b/CheckersServer/core/src/com/mygdx/game/views/LobbyView.kt
deleted file mode 100644
index 0db2ca11a2a33c8425cc298d64d333bca1d07b48..0000000000000000000000000000000000000000
--- a/CheckersServer/core/src/com/mygdx/game/views/LobbyView.kt
+++ /dev/null
@@ -1,4 +0,0 @@
-package com.mygdx.game.views
-
-class LobbyView {
-}
\ No newline at end of file
diff --git a/CheckersServer/core/src/com/mygdx/game/views/LoginView.kt b/CheckersServer/core/src/com/mygdx/game/views/LoginView.kt
deleted file mode 100644
index c7557ddd383976a73e3af964301a27618e395cbe..0000000000000000000000000000000000000000
--- a/CheckersServer/core/src/com/mygdx/game/views/LoginView.kt
+++ /dev/null
@@ -1,4 +0,0 @@
-package com.mygdx.game.views
-
-class LoginView {
-}
\ No newline at end of file
diff --git a/CheckersServer/core/src/com/mygdx/game/views/WaitingView.kt b/CheckersServer/core/src/com/mygdx/game/views/WaitingView.kt
deleted file mode 100644
index 38edc85c3f81329ca929b58ba92e46a6e4c9f1bf..0000000000000000000000000000000000000000
--- a/CheckersServer/core/src/com/mygdx/game/views/WaitingView.kt
+++ /dev/null
@@ -1,4 +0,0 @@
-package com.mygdx.game.views
-
-open class WaitingView{
-}
\ No newline at end of file