diff --git a/http-response.h b/http-response.h
index 11a55c2c670be3afbe20c2dc46892d3291d134da..63fdbb30275c61b0dbfcaefcf29aa904e91c43a3 100644
--- a/http-response.h
+++ b/http-response.h
@@ -19,4 +19,4 @@ char* cookie_generator();
 
 void free_response(Response* resp);
 
-Response* initialise_session(Request* request);
\ No newline at end of file
+Response* initialise_session(Request* request);
diff --git a/http-server.c b/http-server.c
index 6a35732b042294b73e443fc5967c06d70631d4fd..c91fb1ebc3cf1c82b8c69f8c3094cac103e2acde 100644
--- a/http-server.c
+++ b/http-server.c
@@ -231,28 +231,32 @@ static bool handle_http_request(int sockfd, User_list *users)
         printf("run\n\n\n\n\\n");
         change_player_status(sockfd,users, QUIT);
         request(buff,sockfd, "7_gameover.html");
+        // free_request(req);
+        // return false;
     }
     else if (strncmp(req->url, "/?start=Start", 24)  == 0){
         // printf("matches start");
         if (req->method == GET){
             change_player_status(sockfd, users, READY);
             int round = change_player_round(sockfd, users);
-            // printf("THIS IS ROUND NUMBER %d\n", round);
-            //get_request(buff, sockfd, "3_first_turn.html");
             game_change(buff,sockfd, "3_first_turn.html", round);
         }
         if (req->method == POST){
             if(strncmp(req->body, "keyword=", 8)  == 0){
-                if(player_won(users)){
-                    request(buff,sockfd, "6_endgame.html");
-                    change_all_status(users, RESTART);
-                }
-                else if(should_player_quit(users)){
+                if(should_player_quit(users)){
+                    printf("is quit");
                     change_player_status(sockfd,users, QUIT);
                     request(buff,sockfd, "7_gameover.html");
-                    free_request(req);
-                    keep_alive = 0;
-                    return false;
+                    // free_request(req);
+                    // keep_alive = 0;
+                    // return false;
+                }
+                else if (different_round_discard(sockfd,users)){
+                    game_change(buff,sockfd, "5_discarded.html", user->round);
+                }
+                else if(player_won(users)){
+                    request(buff,sockfd, "6_endgame.html");
+                    change_player_status(sockfd, users, WAIT);
                 }
                 else if(!players_ready(users) && user!= NULL){
                     game_change(buff,sockfd, "5_discarded.html", user->round);
@@ -268,11 +272,9 @@ static bool handle_http_request(int sockfd, User_list *users)
                         if(user!= NULL){
                             char* keywords = return_all_keywords(user);
                             text_render_game_play(buff,sockfd, "4_accepted.html", keywords, user->round);
-                            //text_render_request(buff, sockfd, "4_accepted.html", keywords);
                             free(keywords);
                         }
                     }
-                    // free(keyword);
                 }
             }
         }
@@ -455,8 +457,6 @@ int main(int argc, char * argv[])
             }
         }
     }
-    printf("exit loop\n");
     free_users(users);
-    printf("free users fun loop\n");
     return 0;
 }
diff --git a/user.c b/user.c
index 6fc8e0fb07c711d8c69777dceac4e4561184adab..22b67bc48472e686bb132fc2fdb71251c2da8cbb 100644
--- a/user.c
+++ b/user.c
@@ -69,9 +69,9 @@ void add_user(User* user, User_list* users){
 
 void free_users(User_list* users){
     for (int i=0; i <users->n_users; i++){
-        for(int j=0; j < users->users[i]->n_keywords; j++){
-            free(&users->users[i]->keywords[j]);
-        }
+        // for(int j=0; j < users->users[i]->n_keywords; j++){
+        //     free(&users->users[i]->keywords[j]);
+        // }
         free(users->users[i]->keywords);
         free(users->users[i]);
     }
@@ -132,6 +132,17 @@ int change_player_round(int user_id, User_list* users){
         }
     }return round;
 }
+bool different_round_discard(int user_id,User_list* users){
+    User *user = get_current_user(users, user_id);
+    if (user != NULL && user->status ==READY){
+        for(int i=1; i< users->n_users; i++){
+            if(users->users[i]->round != users->users[i-1]->round){
+                return true;
+            }
+        }
+    }
+    return false;
+}
 
 bool keyword_match(User* user, char* keyword){
     printf("keyword is %s\n\n", keyword);
diff --git a/user.h b/user.h
index 7a1ebd9ae505df6b4e35c82d4ce471a3665c88d8..d39ef993ab1a04e66f571fe1d6d037f62ca09652 100644
--- a/user.h
+++ b/user.h
@@ -48,6 +48,8 @@ void change_all_status(User_list* users, STATUS status);
 
 int change_player_round(int user_id, User_list* users);
 
+bool different_round_discard(int user_id, User_list* users);
+
 bool keyword_match(User* user, char* keyword);
 
 void reset_players(User_list *users);