diff --git a/controllers/game.py b/controllers/game.py
index 6459a99885db3088ecfa4a5d4fbdb18d7949ccfc..cc4b9e208219cfa8f29afa729650ebafa48342cf 100644
--- a/controllers/game.py
+++ b/controllers/game.py
@@ -91,7 +91,7 @@ def roles():
 
     #Update roles and prompts on server
     for uid in change:
-        db(db.Player.id == uid).update(role=change[uid]["role"], prompts=JSON_TO_B64(change[uid]["prompts"]))
+        db(db.Player.id == uid).update(role=change[uid]["role"], prompts=JSON_TO_B64(change[uid]["prompts"]), input_max=len(change[uid]["prompts"]), inputs=JSON_TO_B64([]))
 
     #Update roles on clients
     WEBSOCKET_SEND(room_record, "role", JSON_TO_B64(change))
diff --git a/controllers/player.py b/controllers/player.py
index fa366573dc82ddc3a312efd4989dd2b3a3fa50a3..92dd1ac03f2ebb0e5ddc39894c7c5e8f5f3ed8b2 100644
--- a/controllers/player.py
+++ b/controllers/player.py
@@ -1,7 +1,7 @@
-from parameter_util import JSON_BODY, JSON_CONTAINS
-from http_util import FAIL, SUCCESS, CODE_JSON, CODE_MISSING, CODE_SEMANTIC, CODE_GONE, CODE_NOTFOUND, CODE_CONFLICT
+from parameter_util import JSON_BODY, JSON_CONTAINS, JSON_TO_B64, B64_TO_JSON
+from http_util import FAIL, SUCCESS, CODE_JSON, CODE_MISSING, CODE_SEMANTIC, CODE_GONE, CODE_NOTFOUND, CODE_CONFLICT, CODE_PERMISSION
 from room_util import ROOM_GET_CODE, PLAYERS_GET
-from cookie_util import COOKIE_SET
+from cookie_util import COOKIE_SET, COOKIE_GET
 
 def create():
     parameters = JSON_BODY(request)
@@ -49,3 +49,42 @@ def create():
     COOKIE_SET(player_record)
 
     return(SUCCESS())
+
+
+def submit():
+    player_record, room_record = COOKIE_GET()
+
+    if not player_record or not room_record:
+        return(FAIL(CODE_PERMISSION))
+
+    if room_record.closed:
+        return(FAIL(CODE_GONE))
+
+    current_inputs = B64_TO_JSON(player_record.inputs)
+
+    #Check if the player has exceeded the maximum number of submits
+    if len(current_inputs) >= player_record.input_max:
+        return(FAIL(CODE_CONFLICT))
+
+    parameters = JSON_BODY(request)
+
+    if parameters == None:
+        return(FAIL(CODE_JSON))
+
+    if not JSON_CONTAINS(parameters, [('submit', str)]):
+        return(FAIL(CODE_MISSING))
+
+    new_input = {"submit": parameters["submit"]}
+
+    if JSON_CONTAINS(parameters, [('inputs', dict)]):
+        inputs = parameters["inputs"]
+        for key in inputs:
+            if not isinstance(inputs[key], str):
+                return(FAIL(CODE_MISSING))
+        new_input["inputs"] = inputs
+
+    #Insert new input into table
+    current_inputs.append(new_input)
+    db(db.Player.id == player_record.id).update(inputs=JSON_TO_B64(current_inputs))
+
+    return(SUCCESS())
diff --git a/models/i_players.py b/models/i_players.py
index a54e75331b77746b04a089971bed3b498b1823f6..893160982cc37df69093f5ad9c61a13d478ba86f 100644
--- a/models/i_players.py
+++ b/models/i_players.py
@@ -1,10 +1,14 @@
+import base64
+
 db.define_table(
     'Player',
     Field('room_id', db.Room, notnull=True),
     Field('hashcode', 'string', notnull=True),
     Field('name', 'string', notnull=True),
     Field('role', 'string', default="idle"),
-    Field('prompts', 'string', default=base64.standard_b64encode(b'[]'), notnull=True),
+    Field('prompts', 'text', default=base64.standard_b64encode(b'[]'), notnull=True),
+    Field('inputs', 'text', default=base64.standard_b64encode(b'[]'), notnull=True),
+    Field('input_max', 'integer', default=0, notnull=True),
     Field('creation', 'datetime', default=request.now, notnull=True)
 )
 
diff --git a/modules/http_util.py b/modules/http_util.py
index 1d3d71d510a9c37563438e2fd7d56bb99ebd8ffc..ed4456dab8d21d789b06eddb3de8b3a8e59f5e8a 100644
--- a/modules/http_util.py
+++ b/modules/http_util.py
@@ -1,6 +1,7 @@
 from gluon import *
 
 CODE_MISSING = 400
+CODE_PERMISSION = 401
 CODE_NOTFOUND = 404
 CODE_JSON = 406
 CODE_CONFLICT = 409
diff --git a/modules/parameter_util.py b/modules/parameter_util.py
index ce2c51bc1351761b6bf1b8cee9e3542af34f2a01..ea6aa3e33d04266c8596bb61ce210f2e5224f4e0 100644
--- a/modules/parameter_util.py
+++ b/modules/parameter_util.py
@@ -32,3 +32,6 @@ def JSON_CONTAINS(_json, _list):
 
 def JSON_TO_B64(_json):
     return (base64.standard_b64encode(json.dumps(_json).encode("ascii")).decode("utf-8"))
+
+def B64_TO_JSON(_b64):
+    return (json.loads(base64.standard_b64decode(_b64)))