private void Handle_Browse_Lobby_Add_Remove_Message( CBrowseLobbyAddRemoveMessage message )
        {
            if ( message.RemovedLobby != ELobbyID.Invalid )
            {
                Remove_Summary( message.RemovedLobby );
            }

            foreach ( var lobby_summary in message.Lobbies )
            {
                Add_Summary( lobby_summary );
            }
        }
		private void Find_Next_Lobby_For( CServerLobbyBrowser browser, ELobbyID removed_lobby, int previous_starting_index )
		{
			EPersistenceID player_id = browser.PlayerID;
			CBrowseLobbyAddRemoveMessage add_remove_message = new CBrowseLobbyAddRemoveMessage( null, removed_lobby );

			if ( browser.WatchedLobbyCount > 0 )
			{
				int new_lobby_index = Get_Sorted_Lobby_Index( browser.LastLobby ) + 1;
				ELobbyID next_match = Find_New_Lobby( browser, new_lobby_index );

				if ( next_match != ELobbyID.Invalid )
				{
					CServerLobby new_lobby = CServerLobbyManager.Instance.Get_Lobby( next_match );
					add_remove_message.Add_Summary( new_lobby.Create_Summary() );
					Add_As_Watcher( next_match, player_id );
				}
			}
			else if ( previous_starting_index > 0 )
			{
				// we just lost the last lobby in our visible set; try browsing backwards from the lost lobby in order to pick up some more
				List< ELobbyID > lobby_list = new List< ELobbyID >();
				Build_Backwards_Set_Aux( browser, previous_starting_index, lobby_list );

				if ( lobby_list.Count > 0 )
				{
					Browse_Lobby_List( browser, lobby_list );
				}

				lobby_list.Apply( id => add_remove_message.Add_Summary( CServerLobbyManager.Instance.Get_Lobby( id ).Create_Summary() ) );
			}

			CServerMessageRouter.Send_Message_To_Player( add_remove_message, player_id );
		}