diff --git a/Lab_4/Twidder/database.db b/Lab_4/Twidder/database.db
index f0687480e0791cb203fd555a0773043605dcf1fc..39de255a9d2417fa8f3b100a73afdef1901f3fe2 100644
Binary files a/Lab_4/Twidder/database.db and b/Lab_4/Twidder/database.db differ
diff --git a/Lab_4/Twidder/server.py b/Lab_4/Twidder/server.py
index b9644c0bfe86ceeca239a561297f1a0ff88cc83c..02988a22703d99fd4b1a125ab3266790b6854c40 100644
--- a/Lab_4/Twidder/server.py
+++ b/Lab_4/Twidder/server.py
@@ -11,6 +11,7 @@ import json
 from flask_sock import Sock
 from flask_bcrypt import Bcrypt
 from gevent import monkey
+import threading
 monkey.patch_all()
 
 
@@ -25,6 +26,7 @@ monkey.patch_all()
 app = Flask(__name__, static_url_path = '/static') #in case flask does not recognize folder
 sock = Sock(app)
 bcrypt = Bcrypt(app)
+lock = threading.Lock()
 
 app.debug = True
 session = {'token': ("email", "wsObj")}
@@ -91,17 +93,23 @@ def echo(socket):
             return
 
         # Sign out if I am logged in somewhere else
-        for token in list(session.keys()):
-            if session[token][0] == myEmail and token != myToken:
-                if session[token][1] != "":
-                    session[token][1].send(json.dumps({"action" : "signOut"}))
-                    session[token][1].close()
-                session.pop(token)
-
-        # Put socket in global dict so server knows my connection is open
-        session[myToken] = (myEmail, socket)
-        socket.send(json.dumps({"action" : "signIn"}))
-    
+        lock.acquire() 
+        if myToken in session:
+            for token in list(session.keys()):
+                if session[token][0] == myEmail and token != myToken:
+                    if session[token][1] != "":
+                        session[token][1].send(json.dumps({"action" : "signOut"}))
+                        session[token][1].close()
+                    print("You got kicked out")
+                    session.pop(token)
+
+            # Put socket in global dict so server knows my connection is open
+            session[myToken] = (myEmail, socket)
+            socket.send(json.dumps({"action" : "signIn"}))
+        else:
+            socket.send(json.dumps({"action" : "signOut"}))
+            socket.close()
+        lock.release()
 
 
 @app.route("/myServer/sign_in", methods=['POST'])
@@ -131,7 +139,9 @@ def sign_in():
        
     # Generate a random token 
     token = str(uuid.uuid4())
+    lock.acquire()
     session[token] = (email, "")
+    lock.release()
     
     # return the token in the Authorization header
     response = make_response(jsonify({})) #"Server inserted user data into database"   
@@ -204,15 +214,18 @@ def sign_out():
     token = validate_token(hashedToken, "")
     if token == "":
         return jsonify({}), 401
-    
+
     # Close my socket
+    lock.acquire()
     try:
         session[token][1].close()
     except:
         pass # samma sak som ingenting
-
-    # set user to not logged in
-    session.pop(token)
+    try:
+        session.pop(token)
+    except:
+        pass
+    lock.release()
 
     return jsonify({}), 204 # "Successfully signed out")
 
diff --git a/Lab_4/Twidder/static/client.js b/Lab_4/Twidder/static/client.js
index ab59cbbee430c73a9eace5538b6ce57a7e02a885..ab604180cb62d4c98e0799a7df5982a372f984d2 100644
--- a/Lab_4/Twidder/static/client.js
+++ b/Lab_4/Twidder/static/client.js
@@ -73,7 +73,6 @@ async function connectWithSocket() {
     let myEmail = localStorage.getItem("homeEmail");
 
     // Make hash out of socket and message
-    // Todo - myEmail instead of token?
     let hashedToken = await hashMe(token, token); 
     // let hashedToken = crypto.createHmac('sha1', token).update("my data").digest().toString('base64');
 
@@ -90,9 +89,6 @@ async function connectWithSocket() {
         switch (response["action"]) {
             case "signOut":
 
-                // If old socket open, close it.
-                socket.close();
-
                 // Reset token in the localStorage
                 localStorage.setItem("currentUser", "");
                 localStorage.setItem("homeEmail", "");
@@ -103,6 +99,9 @@ async function connectWithSocket() {
                 document.getElementById("error").innerHTML = "Signed Out, you signed in elsewhere";
                 break;
             case "signIn":
+
+                displayView();
+                setUserDetails("home")
                 break;
         } 
     }