diff --git a/.vscode/ipch/f84947e8a755eb57/mmap_address.bin b/.vscode/ipch/f84947e8a755eb57/mmap_address.bin
new file mode 100644
index 0000000000000000000000000000000000000000..93f05e1823747a395639026c3f8f5ecdf1511a26
Binary files /dev/null and b/.vscode/ipch/f84947e8a755eb57/mmap_address.bin differ
diff --git a/http-server.c b/http-server.c
index 4b39fa3b6c5ce7206ec176c18f1cb197d6161d0f..b627f7a0ee8ea032832190d5c9d0399374aebdf1 100644
--- a/http-server.c
+++ b/http-server.c
@@ -36,9 +36,15 @@ static int const HTTP_404_LENGTH = 45;
 
 static int user1 = -1;
 static int user1_start = 0;
+char user1_guesses[100][100];
+int user1_guess_number = 0;
 
 static int user2 = -1;
 static int user2_start = 0;
+char user2_guesses[100][100];
+int user2_guess_number = 0;
+
+int gameover = 0;
 
 static char *webpage;
 
@@ -153,6 +159,7 @@ static bool handle_http_request(int sockfd)
             struct stat st;
 
             if(strstr(buff, "quit=Quit") != NULL){
+                webpage = "html/7_gameover.html";
                 stat(webpage, &st);
                 // Reset User
                 if(sockfd == user1){
@@ -171,7 +178,7 @@ static bool handle_http_request(int sockfd)
                     perror("write");
                     return false;
                 }
-                webpage = "html/1_intro.html";
+
                 int filefd = open(webpage, O_RDONLY);
                 n = read(filefd, buff, 2048);
                 if (n < 0)
@@ -195,20 +202,69 @@ static bool handle_http_request(int sockfd)
                 size = st.st_size + added_length;
                 n = sprintf(buff, HTTP_200_FORMAT, size);
             }
-            else if(strstr(buff, "guess=Guess") != NULL) {     
+            else if(strstr(buff, "guess=Guess") != NULL) {  
                 char *keyword = strstr(buff, "keyword=")+8;
                 int keyword_length = strlen(keyword);
-                printf("%s\n", keyword);
+                keyword[keyword_length-12] = '\0';
 
                 if(sockfd == user1){
                     if(user2_start == 1){
                         webpage = "html/4_accepted.html";
+                        strcpy(user1_guesses[user1_guess_number], keyword);
+                        printf("%s\n", user1_guesses[user1_guess_number]);
+                        user1_guess_number++;
+
+                        for(int i=0; i<user2_guess_number; i++)
+                        {
+                            if(strcmp(user2_guesses[i], keyword) == 0){
+                                gameover = 1;
+                                user1 = -1;
+                                user2 = -1;
+                                user1_guess_number = 0;
+                                user2_guess_number = 0;
+                                user1_start = 0;
+                                user2_start = 0;
+                                for(int i=0; i<100; i++){
+                                    memset(user1_guesses[i], '\0', 100);
+                                    memset(user2_guesses[i], '\0', 100);
+                                }
+                                webpage = "html/6_endgame.html";
+                            }
+                        }
+                        
+                    } else if( gameover == 1){
+                        webpage = "html/6_endgame.html";
+                        gameover = 0;
                     } else {
                         webpage = "html/5_discarded.html";
                     }
                 } else if(sockfd == user2){
                     if(user1_start == 1){
                         webpage = "html/4_accepted.html";
+                        strcpy(user2_guesses[user2_guess_number], keyword);
+                        printf("%s\n", user2_guesses[user2_guess_number]);
+                        user2_guess_number++;
+
+                        for(int i=0; i<user1_guess_number; i++)
+                        {
+                            if(strcmp(user1_guesses[i], keyword) == 0){
+                                gameover = 1;
+                                user1 = -1;
+                                user2 = -1;
+                                user1_guess_number = 0;
+                                user2_guess_number = 0;
+                                user1_start = 0;
+                                user2_start = 0;
+                                for(int i=0; i<100; i++){
+                                    memset(user1_guesses[i], '\0', 100);
+                                    memset(user2_guesses[i], '\0', 100);
+                                }
+                                webpage = "html/6_endgame.html";
+                            }
+                        }
+                    } else if( gameover == 1){
+                        webpage = "html/6_endgame.html";
+                        gameover = 0;
                     } else {
                         webpage = "html/5_discarded.html";
                     }
@@ -247,7 +303,7 @@ static bool handle_http_request(int sockfd)
                     buff[p1] = buff[p2];
                 ++p2;
                 // put the separator
-                buff[p2++] = ',';
+                buff[p2++] = ' ';
                 buff[p2++] = ' ';
                 // copy the username
                 strncpy(buff + p2, username, username_length);
@@ -262,6 +318,7 @@ static bool handle_http_request(int sockfd)
                     perror("write");
                     return false;
                 }
+                
             }
         } 
         else {