diff --git a/Lab_3/Twidder/database b/Lab_3/Twidder/database
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/Lab_3/Twidder/database.db b/Lab_3/Twidder/database.db
index 8fe4ebebb2292c96f53f6a2c93251177c70eb068..b8863ccbb4f1c57137f8f44aa97d3cac6c1560e4 100644
Binary files a/Lab_3/Twidder/database.db and b/Lab_3/Twidder/database.db differ
diff --git a/Lab_3/Twidder/server.py b/Lab_3/Twidder/server.py
index c167af9baa4955f519dbb10c5baa3f4c427442fb..c345c922635f5f9bec0fcc7c81c6e460372a72a8 100644
--- a/Lab_3/Twidder/server.py
+++ b/Lab_3/Twidder/server.py
@@ -9,9 +9,12 @@ import database_helper
 
 # source "/Users/lorenzo/OneDrive - Linköpings universitet/Skola/DI3B/TDDD97/virtualenv/bin/activate"
 # python3 server.py
-# http://127.0.0.1:5000/myServer'
+# http://127.0.0.1:5000/myServer
 # sqlite3 database.db ".read schema.sql"
 
+#Questions:
+#Why does localhost in URL not work?
+
 app = Flask(__name__, static_url_path = '/static')#in case flask does not recognize folder
 app.debug = True
 session = {'token':'email'}
@@ -92,6 +95,7 @@ def sign_up():
 
     tmp = input_has_error('email')
     if tmp[0]:
+        print(tmp[1])
         return jsonify({}), tmp[1]
     email = tmp[2]
 
@@ -156,17 +160,20 @@ def change_password():
     # Validate Token 
     tmp = token_has_error(token)
     if tmp[0]:
+        print("validate token")
         return jsonify({}), tmp[1]
 
     # Validate Old Password
     tmp = input_has_error('old_password')
     if tmp[0]:
+        print("validate old password")
         return jsonify({}), tmp[1]
     old_password = tmp[2]
 
     # Validate New Password
     tmp = input_has_error('new_password')
     if tmp[0]:
+        print("validate new password")
         return jsonify({}), tmp[1]
     new_password = tmp[2]
 
@@ -177,6 +184,7 @@ def change_password():
     if old_password == database_helper.find_user(email)[1]: #checks if old_password is correct
         status = database_helper.update_user(new_password, email)
         if status: 
+            print("Password changed")
             return jsonify({}), 204  # "Password has been changed!"  
         else:
             return jsonify({}), 500 # "Password has not been changed"
diff --git a/Lab_3/Twidder/static/client.css b/Lab_3/Twidder/static/client.css
index 2dc5da192dae09f6ac4fde68ed88fc0acc1cf59c..ed4d8f6a197114a38324290aac70379ad5f9ce3c 100644
--- a/Lab_3/Twidder/static/client.css
+++ b/Lab_3/Twidder/static/client.css
@@ -109,7 +109,7 @@ h1, h3{
 
 #error{
     bottom: 20px;
-    left:30px;
+    left: 4px;
     color: rgb(252, 6, 170);
     position: relative;
     font-size: 12px;
diff --git a/Lab_3/Twidder/static/client.js b/Lab_3/Twidder/static/client.js
index 18db399d1c34aa88254c512fd389e074abf29af4..0a5fad9358c24f6f8bf121d174cd388bb427f258 100644
--- a/Lab_3/Twidder/static/client.js
+++ b/Lab_3/Twidder/static/client.js
@@ -4,22 +4,13 @@ var windowDiv;
 var welcomeDiv;
 var profileDiv;
 var url = 'http://127.0.0.1:5000/myServer/';
+var curr_page = "";
 
 // source "/Users/lorenzo/OneDrive - Linköpings universitet/Skola/DI3B/TDDD97/virtualenv/bin/activate"
 
-// - - - - - Init Request Objects - - - - - //
-
-//Todo (Lawrence)
-/*  
-    Sign up
-    change password
-    post message (+ updateWall)
-    get message by token (+ kommentera fram stycke i reloadWall)
 
-*/
 
-// Todo - implement
-// Sign Up Request Object
+// - - - - - Init Request Objects - - - - - //
 
 // Sign In Request Object
 var signInRequest = new XMLHttpRequest();
@@ -32,28 +23,21 @@ signInRequest.onreadystatechange = function() {
             let token = this.getResponseHeader("Authorization")
             localStorage.setItem("currentUser", token);
             
-            // Changes the view to profile view an loads user info
+            // Changes the view to profile view and loads user info
             displayView();
-
             setUserDetails("home");
-            // Todo - kommentera fram när den är klar
-            // reloadWall("home");
         }
         else if (this.status == 400) {
-            // Todo - implement
-            console.log('got this: 400')
+            errorMessage.innerHTML = "Error 400: Incorrect format"; 
         }
         else if (this.status == 404) {
-            // Todo - implement
-            console.log('got this: 404')
+            errorMessage.innerHTML = "Error 404: No user with that email exists"; 
         }
         else if (this.status == 401) {
-            // Todo - implement
-            console.log('got this: 401')
+            errorMessage.innerHTML = "Error 401: Incorrect password"; 
         }
         else {
-            // Todo - implement
-            console.log('unknown error -_-')
+            errorMessage.innerHTML = "Unknown error"; 
         } 
     }
 };
@@ -73,56 +57,79 @@ signOutRequest.onreadystatechange = function() {
             displayView();
         }
         else if (this.status == 401) {
-            // Todo - implement
-            console.log('got this: 401')
+            console.log("Error 401: You are not loged in");
         }
         else {
-            // Todo - implement
-            console.log('unknown error -_-')
+            console.log("Unknown error");
         } 
     }
 };
 
+// Sign Up Request Object
 var signUpRequest = new XMLHttpRequest();
-signInRequest.onreadystatechange = function () {
+signUpRequest.onreadystatechange = function () {
     if (this.readyState == 4) {
 
         let errorMessage = document.getElementById("error");
         if (this.status == 204) {
-            errorMessage.innerHTML = "You are signed in";
-            let token = this.getResponseHeader("Authorization")
-            localStorage.setItem("currentUser", token);
-
-            // Changes the view to profile view an loads user info
-            displayView();
-
-            setUserDetails("home");
-            // Todo - kommentera fram när den är klar
-            // reloadWall("home");
+            errorMessage.innerHTML = "You have signed up";
         }
         else if (this.status == 400) {
             // Todo - implement
-            console.log('got this: 400')
+            errorMessage.innerHTML = "Enter the data in the correct format";
         }
-        else if (this.status == 404) {
+        else if (this.status == 401) {
             // Todo - implement
-            console.log('got this: 404')
+            errorMessage.innerHTML = "Enter the data in the correct format";
+            console.log('got this: 401');
         }
-        else if (this.status == 401) {
+        else if (this.status == 409) {
             // Todo - implement
-            console.log('got this: 401')
+            console.log('got this: 409');
         }
+        else if (this.status == 500) {
+            // Todo - implement
+            console.log('got this: 500');
+            }
         else {
             // Todo - implement
-            console.log('unknown error -_-')
+            console.log('unknown error -_-');
         }
     }
 };
 
-// Todo - implement
 // Change Password Request Object
+var ChangePassRequest = new XMLHttpRequest();
+ChangePassRequest.onreadystatechange = function () {
+    if (this.readyState == 4) {
+
+        let errorMessage = document.getElementById("match_error");
+        if (this.status == 204) {
+            console.log("inside 204 statement");
+            errorMessage.innerHTML = "Password has been changed!";
+            console.log('Password has been changed!');
+        }
+        else if (this.status == 400) {
+            // Todo - implement
+            console.log('got this: 400');
+        }
+        else if (this.status == 401) {
+            // Todo - implement
+            console.log('got this: 401');
+        }
+        else if (this.status == 500) {
+            // Todo - implement
+            console.log('got this: 500');
+        }
+        else {
+            // Todo - implement
+            console.log('unknown error -_-');
+        }
+        errorMessage.style.display = "block";
+    }
+};
 
-// Get use data by token
+// Get user data by token Request Object
 var dataByTokenRequest = new XMLHttpRequest();
 dataByTokenRequest.onreadystatechange = function() {
     if (this.readyState == 4) {
@@ -140,27 +147,24 @@ dataByTokenRequest.onreadystatechange = function() {
             userTable.rows[5].cells[1].innerHTML = userDataArray["data"].country;
 
             localStorage.setItem("homeEmail", userDataArray["data"].email);
+            reloadWall("home");
         }
         else if (this.status == 401) {
-            // Todo - implement
-            console.log('got this: 401')
+            console.log("Error 401: You are not loged in");
         }
         else if (this.status == 400) {
-            // Todo - implement
-            console.log('got this: 400')
+            console.log("Error 400: Incorrect format");
         }
         else if (this.status == 404) {
-            // Todo - implement
-            console.log('got this: 404')
+            console.log("Error 404: No user with that email exists");
         }
         else {
-            // Todo - implement
-            console.log('unknown error -_-')
-        } 
+            console.log("Unknown error");
+        }
     }
 };
 
-// Get use data by email
+// Get user data by email Request Object
 var dataByEmailRequest = new XMLHttpRequest();
 dataByEmailRequest.onreadystatechange = function() {
     if (this.readyState == 4) {
@@ -180,42 +184,67 @@ dataByEmailRequest.onreadystatechange = function() {
             userTable.rows[5].cells[1].innerHTML = userDataArray["data"].country;
 
             localStorage.setItem("browseEmail", userDataArray["data"].email);
+            errorMessage.iinnerHTML = ""
+            reloadWall("browse");
         }
-        else if (this.status == 401) {
-            // Todo - implement
-            console.log('got this: 401')
-            //errorMessage.innerHTML = "something";
+        else {
+            if (this.status == 401) {
+                errorMessage.innerHTML = "Error 401: You are not loged in"; 
+            }
+            else if (this.status == 400) {
+                errorMessage.innerHTML = "Error 400: Incorrect format"; 
+            }
+            else if (this.status == 404) {
+                errorMessage.innerHTML = "Error 404: No user with that email exists"; 
+            }
+            else {
+                errorMessage.innerHTML = "Unknown error"; 
+            } 
             localStorage.setItem("browseEmail", "");
         }
+    }
+};
+
+// Get Messages By Token Request Object
+var messagesByTokenRequest = new XMLHttpRequest();
+messagesByTokenRequest.onreadystatechange = function() {
+    if (this.readyState == 4) {
+
+        if (this.status == 200) {
+           
+            let currentWall = JSON.parse(this.responseText);
+
+            // Fromating the text before putting to wall
+            let complete = "";
+            for (let i = 0; i < currentWall.data.length; i++) {
+                complete += currentWall.data[i].person_who_posted + ':   ' + currentWall.data[i].message + "</br>";
+            }
+            document.getElementById('homePostedMessagesDiv').innerHTML = complete;
+        }
+        else if (this.status == 204) {
+            console.log("Success, but no messages to receive");
+        }
+        else if (this.status == 401) {
+            console.log("Error 401: You are not loged in");
+        }
         else if (this.status == 400) {
-            // Todo - implement
-            console.log('got this: 400')
-            localStorage.setItem("browseEmail", "");
+            console.log("Error 400: Incorrect format");
         }
         else if (this.status == 404) {
-            // Todo - implement
-            console.log('got this: 404')
-            localStorage.setItem("browseEmail", "");
+            console.log("Error 404: No user with that email exists");
         }
         else {
-            // Todo - implement
-            console.log('unknown error -_-')
-            localStorage.setItem("browseEmail", "");
+            console.log("Unknown error");
         } 
     }
 };
 
-// Todo - implement
-// Get Messages By Token Request Object
-
-
-
 // Get Messages By Email Request Object
 var messagesByEmailRequest = new XMLHttpRequest();
 messagesByEmailRequest.onreadystatechange = function() {
     if (this.readyState == 4) {
 
-        if (this.status == 200 || this.status == 204) {
+        if (this.status == 200) {
            
             let currentWall = JSON.parse(this.responseText);
 
@@ -225,30 +254,56 @@ messagesByEmailRequest.onreadystatechange = function() {
                 complete += currentWall.data[i].person_who_posted + ':   ' + currentWall.data[i].message + "</br>";
             }
             document.getElementById('browsePostedMessagesDiv').innerHTML = complete;
-            // Todo - implement
-  
+
+        }
+        else if (this.status == 204) {
+            console.log("Success, but no messages to receive");
         }
         else if (this.status == 401) {
-            // Todo - implement
-            console.log('got this: 401')
+            console.log("Error 401: You are not loged in");
         }
         else if (this.status == 400) {
-            // Todo - implement
-            console.log('got this: 400')
+            console.log("Error 400: Incorrect format");
         }
         else if (this.status == 404) {
-            // Todo - implement
-            console.log('got this: 404')
+            console.log("Error 404: No user with that email exists");
         }
         else {
-            // Todo - implement
-            console.log('unknown error -_-')
+            console.log("Unknown error");
         } 
     }
 };
 
-// Todo - implement
 // Post Message Request Object
+var postMessageRequest = new XMLHttpRequest();
+postMessageRequest.onreadystatechange = function () {
+    if (this.readyState == 4) {
+
+        let errorMessage = document.getElementById('searchMessage');
+        if (this.status == 204) {   
+            console.log('Message posted!')
+            errorMessage.innerHTML = "";
+            if (curr_page != null && curr_page != "")
+                reloadWall(curr_page);
+        }
+        else if (this.status == 400) {
+            errorMessage.innerHTML = "Error 400: Incorrect format";
+        }
+        else if (this.status == 404) {
+            errorMessage.innerHTML = "Error 404: No user selected to write to";
+        }
+        else if (this.status == 401) {
+            errorMessage.innerHTML = "Error 401: You are not loged in";
+        }
+        else if (this.status == 500) {
+            errorMessage.innerHTML = "Error 500: Error at server side";
+        }
+        else {
+            errorMessage.innerHTML = "Unknown error";
+        }
+    }
+};
+
 
 // - - - - - Init functions - - - - - //
 
@@ -260,12 +315,15 @@ displayView = function(){
         windowDiv.innerHTML = profileDiv.innerHTML;
 };
 
+
 // - - - - - The function when page loads - - - - - //
 
 window.onload = function () {
 
-    // Todo - Delete when done - används för att hoppa tillbaka till rtt view under utveckling
-    localStorage.setItem("currentUser", "");
+    // Delete when done - används för att hoppa tillbaka till rtt view under utveckling
+    // localStorage.setItem("currentUser", "");
+    // localStorage.setItem("homeEmail", "");
+    // localStorage.setItem("browseEmail", "");
 
     // All key/value pairs stored in out localStorage
     // If first time? check this:
@@ -285,7 +343,6 @@ window.onload = function () {
     displayView();
 
     // Load user details to home page and browse page
-    // Todo - kan bli problem om dess inte innehåller giltig email
     setUserDetails("home");
     setUserDetails("browse");
 };
@@ -317,9 +374,9 @@ function setUserDetails(who) {
             dataByEmailRequest.send();
         }
     }
+    return false;
 }
 
-
 // - - - - - Sign Up/In/Out - - - - - //
 
 function sign_up() {
@@ -337,6 +394,7 @@ function sign_up() {
         repeat_password: form[7].value
     };
 
+
     // Error checks
     if (user.password.length < minPassLength)
         errorMess.innerHTML = "Password's length is too short";
@@ -344,28 +402,10 @@ function sign_up() {
         errorMess.innerHTML = "Passwords does not match";
     else {
 
-        // // Todo
-        // // Submission to "server"
-        // let signUpObj = serverstub.signUp(user);
-        // // Set message to user
-        // errorMess.innerHTML = signUpObj["message"];
-
-        //xhttp.addEventListener("load", reqListener);
-        xhttp.open("POST", url + "sign_up", true);
-        signInRequest.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
-        xhttp.send(JSON.stringify({
-            email: email,
-            password: password,
-            firstname: firstname,
-            familyname: familyname,
-            gender: gender,
-            city: city,
-            country: country
-        }));
-        // obj = JSON.parse(xhttp.responseText);
-        // alert(obj.alert)
-//----------------//----------------//----------------//----------------
-
+        // Sending sign_ou request to "server"
+        signUpRequest.open("POST", url + "sign_up", true);
+        signUpRequest.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
+        signUpRequest.send(JSON.stringify(user));
     }
     return false;
 }
@@ -397,6 +437,8 @@ function sign_out(){
     signOutRequest.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
     signOutRequest.setRequestHeader("Authorization", token)
     signOutRequest.send();
+
+    return false;
 }
 
 
@@ -425,6 +467,8 @@ function showPage(ourEvent, name) {
     // Select only the one we want
     let selected_tab = document.getElementById(name);
     selected_tab.style.display = "block";
+
+    return false;
 }
 
 
@@ -447,15 +491,12 @@ function change_password(ourEvent){
         error_text.innerHTML = "New password and confirm password does not match";
     }
     else {
-
-        // Todo
-        // Success
-        let message = serverstub.changePassword(token, old_pass, new_pass);
-
-        // Set error text
-        error_text.innerHTML = message["message"];
+        ChangePassRequest.open("PUT", url + "change_password", true);
+        ChangePassRequest.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
+        ChangePassRequest.setRequestHeader("Authorization", token)
+        ChangePassRequest.send(JSON.stringify({old_password:old_pass, new_password:new_pass}));
     }
-   error_text.style.display = "block";
+    return false;
 }
 
 // - - - - - Changing the wall - - - - - //
@@ -464,15 +505,27 @@ function change_password(ourEvent){
 function updateWall(who){
     // "who" could be either home or browse, this way know which wall to write on 
     let messageToWall = document.getElementById(who + 'Textarea').value;
+    let errorMessage = document.getElementById('searchMessage');
     let token = localStorage.getItem("currentUser");
     let email = localStorage.getItem(who + "Email");
+    curr_page = who;
 
-    // Todo
-    // Send user's message to the server
-    serverstub.postMessage(token, messageToWall, email);
+    if (email != null && email != "" && token != null && token != "") {
 
+        // Send user's message to the server
+        postMessageRequest.open("POST", url + "post", true);
+        postMessageRequest.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
+        postMessageRequest.setRequestHeader("Authorization", token)
+        postMessageRequest.send(JSON.stringify({ email: email, message: messageToWall }));
+
+        errorMessage.innerHTML = "";
+    }
+    else{
+        errorMessage.innerHTML = "No user selected to write to";
+    }
+
+    // Clear the text area the user just wrote in
     document.getElementById(who + 'Textarea').value = "";
-    
     return false;
 }
 
@@ -482,18 +535,16 @@ function reloadWall(who) {
     let token = localStorage.getItem("currentUser");
     let email = localStorage.getItem(who + "Email");
 
-    // Get messages from my own wall
+    // If wanting messages from my own wall
     if (who == 'home') {
         // Send request to server about receiving the info
-
-        // Comment
-        // messagesByTokenRequest.open("GET", url + "getUserMessageByToken/" + email, true);
-        // messagesByTokenRequest.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
-        // messagesByTokenRequest.setRequestHeader("Authorization", token)
-        // messagesByTokenRequest.send();
+        messagesByTokenRequest.open("GET", url + "getUserMessageByToken", true);
+        messagesByTokenRequest.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
+        messagesByTokenRequest.setRequestHeader("Authorization", token)
+        messagesByTokenRequest.send();
     }
 
-    // Get messages from another's wall
+    // If wanting messages from another's wall
     else if (who == 'browse' && email != null && email != "") {
         // Send request to server about receiving the info
         messagesByEmailRequest.open("GET", url + "getMessagesByEmail/" + email, true);
@@ -509,8 +560,8 @@ function reloadWall(who) {
 function searchAnotherUser(event){
     let token = localStorage.getItem("currentUser");
 
-    // Todo - download the wall of the user we searched for ?
-    // let user_obj = serverstub.getUserMessagesByEmail(token, email);
+    // Reseting the error messages
+    document.getElementById('searchMessage').innerHTML = "";
 
     if(token != "") {
 
diff --git a/Lab_3/Twidder/static/serverstub.js b/Lab_3/Twidder/static/serverstub.js
index ad5c722f67d50028e8dfd0bfe507851069e406f3..949405c3b0f3567e1294e4b322b6909e2a322704 100644
--- a/Lab_3/Twidder/static/serverstub.js
+++ b/Lab_3/Twidder/static/serverstub.js
@@ -6,6 +6,8 @@
  * If you're a student, you shouldn't need to look through this file,
  *  the description of how it works is in the lab instructions.
  **/
+
+
 var serverstub = (function() {
   'use strict';