Index: server/server.cpp
===================================================================
--- server/server.cpp	(revision f3fb98084402f4c79dd6b4e9524e173b13faecc1)
+++ server/server.cpp	(revision df74597a9577a0cbce65843241b758fba7197099)
@@ -216,6 +216,6 @@
          for (itGames = mapGames.begin(); itGames != mapGames.end();) { 
             if (handleGameEvents(itGames->second, mapPlayers, msgProcessor)) {
+               delete itGames->second;
                mapGames.erase(itGames++);
-               delete itGames->second;
             }else
                itGames++;
@@ -831,18 +831,27 @@
    NETWORK_MSG serverMsg;
    map<unsigned int, Player*>::iterator it;
+   bool gameFinished = false;
 
    for (it = game->getPlayers().begin(); it != game->getPlayers().end(); it++)
    {
-      if (handlePlayerEvents(it->second, game, msgProcessor)) {
-                // send a GAME_INFO message with 0 players to force clients to delete the game
-         int numPlayers = 0;
-         serverMsg.type = MSG_TYPE_GAME_INFO;
-         memcpy(serverMsg.buffer, &numPlayers, 4);
-         broadcastMessage(msgProcessor, serverMsg, mapPlayers);
-
-         return true;
-      }else
-         return false;
-   }
+      gameFinished = gameFinished ||
+         handlePlayerEvents(it->second, game, msgProcessor);
+   }
+
+   // set each player's current game to null
+   if (gameFinished) {
+      // send a GAME_INFO message with 0 players to force clients to delete the game
+      int numPlayers = 0;
+      serverMsg.type = MSG_TYPE_GAME_INFO;
+      memcpy(serverMsg.buffer, &numPlayers, 4);
+      broadcastMessage(msgProcessor, serverMsg, mapPlayers);
+
+      for (it = game->getPlayers().begin(); it != game->getPlayers().end(); it++)
+      {
+         it->second->currentGame = NULL;
+      }
+   }
+
+   return gameFinished;
 }
 
@@ -1097,4 +1106,6 @@
       broadcastMessage(msgProcessor, serverMsg, playersInGame);
    }
+
+   return gameFinished;
 }
 
