diff --git a/models/game.model.js b/models/game.model.js
index 363c3330e74ff83e7e0e702f17650b354f827f65..d3e483c7012fc23b2375ad1e1eac7c601c8d2c88 100644
--- a/models/game.model.js
+++ b/models/game.model.js
@@ -10,6 +10,7 @@ class Game {
         this.category = {};
         this.usersAnswers = new Map();
         this.pot = pot;
+        this.usersStatus = new Map();
     }
 
     async setGameData() {
@@ -25,7 +26,7 @@ class Game {
                 10,
             );
         }
-        console.log(questions);
+        //console.log(questions);
         for (let i = 0; i < questions.length; i++) {
             const answers = await answerController.getAnswerForQuestion(questions[i]._id);
             this.gameData[i] = {
@@ -37,16 +38,17 @@ class Game {
             this.usersAnswers.set(user, []);
         }
 
-        console.log(this.gameData);
+        //console.log(this.gameData);
         return this.gameData;
     }
 
-    addNewAnswer(user, answer) {
-        this.usersAnswers.get(user).push(answer);
-        return this.verifyAnswer(this.usersAnswers.get(user).length - 1, answer);
+    addNewAnswer(user, answer, index) {
+        this.usersAnswers.get(user)[index] = answer;
+        return this.verifyAnswer(index, answer);
     }
 
     verifyAnswer(questionNumber, answer) {
+        console.log(this.gameData[questionNumber]);
         return this.gameData[questionNumber].answers[answer].is_correct;
     }
 
diff --git a/sockets/socketLogic.js b/sockets/socketLogic.js
index ce9a4ddb3e43a892322e15f94fba28dd9c2efa48..3fb6f55d0996778a83600027bc9a436a31c4013c 100644
--- a/sockets/socketLogic.js
+++ b/sockets/socketLogic.js
@@ -11,6 +11,7 @@ const lobbies = [];
 const games = [];
 const map = new Map();
 const lobbyTimers = new Map();
+const gameTimers = new Map();
 /**
  * The number of connected users.
  * @type {number}
@@ -64,9 +65,14 @@ async function convertLobbyToGame(lobbyId, socket) {
         lobby.price * lobby.users.length,
     );
     await game.setGameData();
-    console.log(game);
-    socket.to(lobbyId).emit("startGame", game);
-    socket.emit("startGame", game);
+    const reducedGame = {
+        id: game.id,
+        users: game.users,
+        category: game.category,
+        pot: game.pot,
+    };
+    socket.to(lobbyId).emit("startGame", reducedGame);
+    socket.emit("startGame", reducedGame);
     const interval = setInterval(async () => {
         time--;
         socket.to(lobbyId).emit("timer", time);
@@ -80,29 +86,50 @@ async function convertLobbyToGame(lobbyId, socket) {
 
 async function showQuestions(game, socket, questionNumber) {
     if (questionNumber === 10) return;
-    let time = 15;
-    const interval = setInterval(async () => {
-        time--;
-        socket.to(game.getGameId()).emit("timer", time);
-        socket.emit("timer", time);
-        if (time === 0) {
-            clearInterval(interval);
-            socket.to(game.getGameId()).emit("question", game.gameData[questionNumber]);
-            socket.emit("question", game.gameData[questionNumber]);
-            let waitTime = 10;
-            const wait = setInterval(async () => {
-                waitTime--;
-                socket.to(game.getGameId()).emit("timer", waitTime);
-                socket.emit("timer", waitTime);
-                if (waitTime === 0) {
-                    clearInterval(wait);
-                    showQuestions(game, socket, questionNumber + 1);
-                }
-            }, 1000);
+
+    const showQuestion = async () => {
+        const question = game.gameData[questionNumber];
+        const reducedAnswers = question.answers.map((answer) => ({
+            text: answer.text,
+        }));
+
+        const reducedQuestion = {
+            text: question.question.text,
+            fact: question.question.fact,
+            difficulty: question.question.difficulty,
+            answers: reducedAnswers,
+            number: questionNumber,
+        };
+
+        socket.to(game.getGameId()).emit("question", reducedQuestion);
+        socket.emit("question", reducedQuestion);
+    };
+
+    const wait = async (seconds, socket, roomId, setTimer) => {
+        for (let time = seconds; time > 0; time--) {
+            if (setTimer) {
+                gameTimers.set(roomId, time);
+            }
+            socket.to(roomId).emit("timer", time);
+            socket.emit("timer", time);
+            await new Promise((resolve) => setTimeout(resolve, 1000));
         }
-    }, 1000);
+        gameTimers.delete(roomId);
+    };
+
+    while (questionNumber < 10) {
+        await showQuestion(); // Show the question
+        await wait(15, socket, game.id, true); // Wait for 15 seconds
+        //TODO: Send a new event to close the question
+        socket.to(game.getGameId()).emit("closeQuestion");
+        socket.emit("closeQuestion");
+        await wait(15, socket, game.id, false); // Wait for 15 more seconds
+        questionNumber++; // Move to the next question
+    }
 }
 
+function showQuestionResult(game, socket) {}
+
 function timer(lobbyId, socket) {
     let time = 30;
     const interval = setInterval(async () => {
@@ -251,5 +278,44 @@ module.exports = (io) => {
             socket.to(data.id).emit("emoji", { emoji: data.emoji, username: data.username });
             socket.emit("emoji", { emoji: data.emoji, username: data.username });
         });
+
+        socket.on("answer", (data) => {
+            console.log(data);
+            if (!data.gameId) {
+                socket.emit("error", "Not gameId provided");
+                return;
+            }
+            if (!data.username) {
+                socket.emit("error", "Not username provided");
+                return;
+            }
+            if (data.questionNumber === undefined) {
+                socket.emit("error", "Not questionNumber provided");
+                return;
+            }
+            if (data.answer === undefined) {
+                socket.emit("error", "Not answer provided");
+                return;
+            }
+            const game = games.find((game) => game.id === data.gameId);
+            if (!game) {
+                socket.emit("error", "gameNotFound");
+                return;
+            }
+            if (!gameTimers.get(game.id)) {
+                socket.emit("error", "notTimer");
+                return;
+            }
+            if (gameTimers.get(game.id) === 0) {
+                socket.emit("error", "notTimer");
+                return;
+            }
+
+            const isCorrect = game.addNewAnswer(data.username, data.answer, data.questionNumber);
+            socket.emit("answerResponse", isCorrect);
+            if (!isCorrect) {
+                //TODO: ADD A FUNCTION TO BLOCK THE USER FROM A GAME
+            }
+        });
     });
 };