diff --git a/src/game/morpion.cpp b/src/game/morpion.cpp
index 0934698f84c92fb6b83edc3ea651182b83a44d7f..13c09b72f2a83e73499e3bd3f27952ad7ffdc3e4 100644
--- a/src/game/morpion.cpp
+++ b/src/game/morpion.cpp
@@ -112,12 +112,20 @@ namespace game
 		return false;
 	}
 
-	/*
+	
 	void morpion::update_moves(uint16_t move)
 	{
-		//TODO: Implement
+		uint16_t free_bitboard = ~(state.cross_bitboard | state.circle_bitboard);
+		for(int i = 0; i <=8; i++)
+		{
+			if(free_bitboard & 1)
+			{
+					state.possible_moves += i;
+					state.possible_moves << 4;
+			}
+			free_bitboard = free_bitboard >> 1;
+		}
 	}
-	*/
 
 	void morpion::play(uint16_t m)
 	{   
diff --git a/src/game/morpion.hpp b/src/game/morpion.hpp
index f8c7cc7d3222a95512d0522e2a40a79881bb412c..17552e46595765c61dd6736a30c5d4d4aac60352 100644
--- a/src/game/morpion.hpp
+++ b/src/game/morpion.hpp
@@ -50,6 +50,7 @@ namespace game
 			inline void update_win(); //Check if someone won and update the state
 			inline bool has_won(uint16_t bitboard); //Check if the player whose bitboard was passed as a param has won
 			inline bool get(uint16_t bitboard, uint8_t i, uint8_t j) const; //Get a case of the board
+			inline void update_moves(uint16_t move); //Update the list of all possible moves
 			
 			const uint8_t CROSS = 0;
 			const uint8_t CIRCLE = 1;