diff --git a/game.py b/game.py
index e33f968..665148a 100644
--- a/game.py
+++ b/game.py
@@ -11,7 +11,10 @@ class Player:
         self.game = game
         self.name = name
         self.id = str(uuid.uuid4())
-        self.beginturn()
+        self.joined = False
+        self.word = ""
+        self.ready = False
+        self.selection = -1
         players[self.id] = self
 
     def beginturn(self):
@@ -19,6 +22,15 @@ class Player:
         self.ready = False
         self.selection = -1
 
+    def join(self, word):
+        if not self.joined:
+            del players[self.id]
+            self.id = str(uuid.uuid4())
+            players[self.id] = self
+            self.word = str(word).strip()
+            self.joined = True
+            self.game.playerJoin()
+
     def select(self, i):
         if self.selection < 0 and i >= 0 and i < len(self.game.cards):
             self.selection = i
@@ -32,7 +44,7 @@ class Player:
 
     def status(self):
         friend = self.game.players[1] if self.game.players[0] == self else self.game.players[0]
-        friendId = friend.id if self.game.players[0] == self else None
+        friendId = None if friend.joined else friend.id
         friendSelection = friend.selection if self.game.selected else -1
         cards = []
         for i in range(0, len(self.game.cards)):
@@ -43,11 +55,12 @@ class Player:
             "word": self.game.word,
             "wordSource": self.game.wordSource,
             "cards": cards,
+            "started": self.game.started,
             "selected": self.game.selected,
             "host": config.externalHost,
             "prefix": config.prefix,
             "cardsPrefix": config.cardsPrefix,
-            "waiting": (self.selection >= 0 and friendSelection < 0) or (self.ready and not friend.ready),
+            "waiting": (self.joined and not self.game.started) or (self.selection >= 0 and not self.game.selected) or self.ready,
             "win": self.game.selected and self.selection == friend.selection,
             "lose": self.game.selected and self.selection != friend.selection,
             "me": {
@@ -62,12 +75,16 @@ class Player:
 
 
 class Game:
-    def __init__(self):
+    def __init__(self, word):
         self.players = ( Player(self, "Player1"), Player(self, "Player2") )
         self.turn = 1
         self.score = 0
+        self.started = False
+        self.selected = False
         self.cards = []
-        self.beginturn()
+        self.word = ""
+        self.wordSource = ""
+        self.players[0].join(word)
 
     def beginturn(self):
         assert(cards)
@@ -102,14 +119,19 @@ class Game:
         self.players[1].beginturn()
         self.selected = False
 
+    def playerJoin(self):
+        if not self.started and all(p.joined for p in self.players):
+            self.started = True
+            self.beginturn()
+
     def playerSelect(self):
-        if not self.selected and self.players[0].selection >= 0 and self.players[1].selection >= 0:
+        if self.started and not self.selected and all(p.selection >= 0 for p in self.players):
             self.selected = True
             if self.players[0].selection == self.players[1].selection:
                 self.score = self.score + 1
 
     def playerReady(self):
-        if self.selected and self.players[0].ready and self.players[1].ready:
+        if self.started and self.selected and all(p.ready for p in self.players):
             self.turn = self.turn + 1
             self.beginturn()
 
diff --git a/server.py b/server.py
index 0b9d75e..ee17460 100755
--- a/server.py
+++ b/server.py
@@ -63,10 +63,11 @@ class Server(http.server.BaseHTTPRequestHandler):
         length = int(self.headers.get('content-length'))
         data = self.rfile.read(length)
         fields = urllib.parse.parse_qs(str(data,"UTF-8"))
+        word = str(fields.get("word", [""])[0])
 
         with mutex:
             if not path: # create new game
-                g = game.Game()
+                g = game.Game(word)
                 self.send_response(303)
                 self.send_header("Location", str(config.prefix) + "/" + str(g.players[0].id))
                 self.end_headers()
@@ -77,7 +78,9 @@ class Server(http.server.BaseHTTPRequestHandler):
                 return self.err()
             del path[0]
 
-            if len(path) == 2 and path[0] == "select":
+            if not path:
+                player.join(word)
+            elif len(path) == 2 and path[0] == "select":
                 i = -1
                 try:
                     i = int(path[1])
@@ -85,7 +88,6 @@ class Server(http.server.BaseHTTPRequestHandler):
                     return self.err()
                 player.select(i)
             elif len(path) == 1 and path[0] == "ready":
-                word = str(fields.get("word", [""])[0])
                 player.nextturn(word)
             else:
                 return self.err()
@@ -95,6 +97,8 @@ class Server(http.server.BaseHTTPRequestHandler):
             self.end_headers()
 
     def do_GET(self):
+        #loadTemplates()
+
         if self.command != 'GET':
             return self.err()
 
@@ -131,14 +135,23 @@ class Server(http.server.BaseHTTPRequestHandler):
             self.send_response(200)
             self.send_header("Content-type", "text/html")
             self.end_headers()
-            #tplPlayerpage = template.TplLoader.load("tpl/playerpage.tpl")
-            tplPlayerpage.write(self, player.status());
+            if player.game.started:
+                tplPlayerpage.write(self, player.status());
+            else:
+                tplJoinpage.write(self, player.status());
+
+
+def loadTemplates():
+    global tplStartpage, tplJoinpage, tplPlayerpage
+    tplStartpage = template.TplLoader.load("tpl/startpage.tpl")
+    tplJoinpage = template.TplLoader.load("tpl/joinpage.tpl")
+    tplPlayerpage = template.TplLoader.load("tpl/playerpage.tpl")
+
 
 
 mutex = threading.Lock()
 
-tplStartpage = template.TplLoader.load("tpl/startpage.tpl")
-tplPlayerpage = template.TplLoader.load("tpl/playerpage.tpl")
+loadTemplates()
 
 game.mergeCards("cards")
 game.mergeWords("words/words.txt")
diff --git a/tpl/css.tpl b/tpl/css.tpl
index 58e1fd4..9bef9f1 100644
--- a/tpl/css.tpl
+++ b/tpl/css.tpl
@@ -28,6 +28,12 @@ body { font-size: 12px; text-align: center; }
     color: gray;
 }
 
+#mainform {
+    display: block;
+    padding-top: 100px;
+    padding-bottom: 100px;
+}
+#word h1 { font-size: 24px; font-weight: bold; margin: 0 0 0 0; }
 
 #cards {
     margin-bottom: 18px;
diff --git a/tpl/joinpage.tpl b/tpl/joinpage.tpl
new file mode 100644
index 0000000..72a5bc9
--- /dev/null
+++ b/tpl/joinpage.tpl
@@ -0,0 +1,18 @@
+{include:header.tpl}
+
+{if:waiting}
+    <div id="mainform">
+    <h1>waiting for the friend</h1>
+    {if:friend.id}<p>URL for the friend: <a href="{:host}{:prefix}/{:friend.id}">{:host}{:prefix}/{:friend.id}</a></p>{endif}
+    </div>
+{else}
+    <form id="mainform" method="POST" action="{:prefix}/{:me.id}">
+    <p><input type="text" name="word" autocomplete="off" placeholder="here you may suggest your word for the first turn" size=40 value="" /></p>
+    <p><input type="submit" name="submit" value="join the game" /></p>
+    </form>
+{endif}
+
+<hr />
+<div id="logo"><a href="{:prefix}">back to start page</a></div>
+
+{include:footer.tpl}
diff --git a/tpl/startpage.tpl b/tpl/startpage.tpl
index db595c1..35b0f44 100644
--- a/tpl/startpage.tpl
+++ b/tpl/startpage.tpl
@@ -1,5 +1,6 @@
 {include:header.tpl}
-<form method="POST">
-<input type="submit" value="create game" />
+<form id="mainform" method="POST">
+<p><input type="text" name="word" autocomplete="off" placeholder="here you may suggest your word for the first turn" size=40 value="" /></p>
+<p><input type="submit" name="submit" value="create game" /></p>
 </form>
 {include:footer.tpl}