diff --git a/plan.txt b/plan.txt
index 85476dc..b2b7e26 100644
--- a/plan.txt
+++ b/plan.txt
@@ -1,10 +1,10 @@
 Open:
-- Multiplayer loopback server
 - Insecured websocket server implementation
 - Cloneable RNG that goes in state (use MurmurHash3 finalizer in counter mode?)
 - remove all random() calls
 
 Done:
+- Multiplayer loopback server
 - Refactor input generics to distinct local/full types
 - Refactor input messages for more than one player
 - Rework State implementation for easier cloning/deserialization
diff --git a/src/Game/Main.ts b/src/Game/Main.ts
index 4142aeb..7bf2ddc 100644
--- a/src/Game/Main.ts
+++ b/src/Game/Main.ts
@@ -3,7 +3,7 @@ import subscribe from "callbag-subscribe";
 
 import { KeyControl, KeyName } from "../Applet/Keyboard";
 import { DrawSet } from "../Applet/Render";
-import { Location, Polygon, PolygonComponent, RenderBounds } from "../Ecs/Components";
+import { Location, PolygonComponent, RenderBounds } from "../Ecs/Components";
 import { Create } from "../Ecs/Data";
 import { RunRenderBounds } from "../Ecs/Renderers";
 import { LockstepClient } from "../Net/LockstepClient";
@@ -15,13 +15,11 @@ export class Main extends LockstepClient<KeyName[], KeyName[][], Data> {
 
     buttons = new Buttons();
 
-    constructor(canvas: HTMLCanvasElement, cx: CanvasRenderingContext2D, keys: KeyControl) {
+    constructor(canvas: HTMLCanvasElement, cx: CanvasRenderingContext2D, keys: KeyControl, server: LoopbackServer<KeyName[], Data>) {
         super(new Engine());
         keys.setHandler(this.buttons);
 
-        const server = new LoopbackServer<KeyName[], Data>();
         this.connect(server.socket);
-        server.resetState({});
 
         pipe(
             this.renderFrames,
diff --git a/src/index.html b/src/index.html
index 5e8fcac..12b24c5 100644
--- a/src/index.html
+++ b/src/index.html
@@ -4,7 +4,8 @@
     <title></title>
     <link rel="stylesheet" href="./index.scss" />
 </head><body>
-    <canvas id="GameCanvas" width="500" height="400"></canvas>
-    <canvas id="RenderTest" width="500" height="400"></canvas>
+    <canvas class="GameCanvas" width="500" height="400"></canvas>
+    <canvas class="GameCanvas" width="500" height="400"></canvas>
+    <!--<canvas id="RenderTest" width="500" height="400"></canvas>-->
     <script src="./index.ts"></script>
 </body></html>
diff --git a/src/index.scss b/src/index.scss
index 802907d..292dd43 100644
--- a/src/index.scss
+++ b/src/index.scss
@@ -12,7 +12,7 @@ body {
     line-height: $line-height;
 
     display: flex;
-    flex-flow: column;
+    flex-flow: row wrap;
     align-items: center;
     justify-content: center;
 }
diff --git a/src/index.ts b/src/index.ts
index 84f2efb..355b334 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,6 +1,9 @@
 import { Select } from "./Applet/Init";
+import { KeyName } from "./Applet/Keyboard";
+import { Data } from "./Ecs/Components";
 import { BindTests } from "./Ecs/test";
 import { Main } from "./Game/Main";
+import { LoopbackServer } from "./Net/LoopbackServer";
 
 /* // Hot Module Reloading stub, if that's viable
  * declare const module: any;
@@ -13,6 +16,10 @@ import { Main } from "./Game/Main";
  * }
  */
 
-Select("#GameCanvas").forEachCanvas((c, cx, keys) => new Main(c, cx, keys));
+const server = new LoopbackServer<KeyName[], Data>();
+
+Select(".GameCanvas").forEachCanvas((c, cx, keys) => new Main(c, cx, keys, server));
+
+server.resetState({});
 
 BindTests();