         for p in _.values(@players) when p.id isnt player_id
             p.chatReceived(player_id, text)
         a.emit('chatReceived', {id: player_id, text: text}) for a in _.values(@anons)
+        util.log(@region + ': ' + @players[player_id].name + ': ' + text)
 
     removePlayer: (id) =>
-        was_player = id of @players
-        delete @players[id]
-        delete @anons[id]
-        if was_player
+        if id of @players
+            player = @players[id]
+            delete @players[id]
             p.playerLeft(id) for p in _.values(@players)
             a.emit('playerLeft', id) for a in _.values(@anons)
+            util.log(@region + ': ' + player.name + ' left')
+        else
+            delete @anons[id]
 
     numPlayers: =>
         return _.keys(@players).length

        a.emit('playerJoined', player) for a in _.values(@anons)
        @players[player.id] = player
        player.globalLobbyJoined(@players)
    
    addAnon: (socket) =>
        @anons[socket.id] = socket

        return @pending_players_order.length

class GlobalLobbyManager
    constructor: (region) ->
        @players = {}
        @anons = {}
        @region = region

    addPlayer: (player) =>
        delete @anons[player.id]
