diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/hall.html b/gemp-lotr/gemp-lotr-async/src/main/web/hall.html
index 93a63dbd3..2ecfff1a3 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/web/hall.html
+++ b/gemp-lotr/gemp-lotr-async/src/main/web/hall.html
@@ -55,7 +55,7 @@
-
+
diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/src/Game/game.js b/gemp-lotr/gemp-lotr-async/src/main/web/src/Game/game.js
new file mode 100644
index 000000000..99f03cbeb
--- /dev/null
+++ b/gemp-lotr/gemp-lotr-async/src/main/web/src/Game/game.js
@@ -0,0 +1,20 @@
+var ui;
+var communication;
+
+$(document).ready(
+ function () {
+ var replay = getUrlParam("replayId");
+
+ ui = new GempLotrGameUI("/gemp-lotr-server", replay != null);
+
+ $(window).resize(function () {
+ ui.windowResized();
+ });
+
+ ui.layoutUI(true);
+
+ if (replay == null)
+ ui.startGameSession();
+ else
+ ui.startReplaySession(replay);
+ });
\ No newline at end of file
diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/src/Game/index.css b/gemp-lotr/gemp-lotr-async/src/main/web/src/Game/index.css
new file mode 100644
index 000000000..524c9da7f
--- /dev/null
+++ b/gemp-lotr/gemp-lotr-async/src/main/web/src/Game/index.css
@@ -0,0 +1,9 @@
+#main {
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ background-color: #000000;
+ overflow: hidden;
+}
\ No newline at end of file
diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/src/Merchant/index.css b/gemp-lotr/gemp-lotr-async/src/main/web/src/Merchant/index.css
new file mode 100644
index 000000000..6e4cc831f
--- /dev/null
+++ b/gemp-lotr/gemp-lotr-async/src/main/web/src/Merchant/index.css
@@ -0,0 +1,9 @@
+#main {
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ background-color: #000000;
+ overflow: hidden
+}
\ No newline at end of file
diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/src/Merchant/merchant.js b/gemp-lotr/gemp-lotr-async/src/main/web/src/Merchant/merchant.js
new file mode 100644
index 000000000..ca9a1502b
--- /dev/null
+++ b/gemp-lotr/gemp-lotr-async/src/main/web/src/Merchant/merchant.js
@@ -0,0 +1,26 @@
+$(document).ready(
+ function () {
+ var ui = new GempLotrMerchantUI($("#cardList"), $("#cardFilter"));
+
+ $(window).resize(function () {
+ layoutUi(ui);
+ });
+
+ layoutUi(ui);
+ });
+
+function layoutUi(ui) {
+var width = $(window).width();
+var height = $(window).height();
+if (width < 800)
+ width = 800;
+if (height < 400)
+ height = 400;
+
+var padding = 5;
+var filterHeight = 160;
+
+$("#cardFilter").css({position:"absolute", left:padding, top:padding, width:width - padding * 2, height:filterHeight});
+$("#cardList").css({position:"absolute", left:padding, top:2 * padding + filterHeight, width:width - padding * 2, height:height - filterHeight - padding * 3});
+ui.layoutUI();
+}
\ No newline at end of file
diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/awaiting_decision.mp3 b/gemp-lotr/gemp-lotr-async/src/main/web/src/assets/awaiting_decision.mp3
similarity index 100%
rename from gemp-lotr/gemp-lotr-async/src/main/web/awaiting_decision.mp3
rename to gemp-lotr/gemp-lotr-async/src/main/web/src/assets/awaiting_decision.mp3
diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/fanfare_x.mp3 b/gemp-lotr/gemp-lotr-async/src/main/web/src/assets/fanfare_x.mp3
similarity index 100%
rename from gemp-lotr/gemp-lotr-async/src/main/web/fanfare_x.mp3
rename to gemp-lotr/gemp-lotr-async/src/main/web/src/assets/fanfare_x.mp3
diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/fanfare_x.wav b/gemp-lotr/gemp-lotr-async/src/main/web/src/assets/fanfare_x.wav
similarity index 100%
rename from gemp-lotr/gemp-lotr-async/src/main/web/fanfare_x.wav
rename to gemp-lotr/gemp-lotr-async/src/main/web/src/assets/fanfare_x.wav