I was looking over the socket code, to see why t-mode can change, but the client doesn't beep or change the "T" flag until several seconds later, and I noticed this: void updateStatus(int force) /* if force is false, packet only sent when status->tourn changes */ { /* Update status every 10 seconds? */ if (repCount % efticks(50) == 0) if ( clientStatus.tourn != status->tourn || (force && (ntohl(clientStatus.timeprod) != timeprod_int()))) { #ifdef LTD_STATS /* Hey, Tmode changed. Do I have an enemy? */ setEnemy(me->p_team, me); #endif /* LTD_STATS */ /* send the packet.... deleted */ } } Ok, now from the comment it looks like setEnemy should be called when t-mode changes. But this code should get called every 10 seconds during t-mode. Maybe someone who knows how LTD stats work will know, if calling setEnemy every 10 seconds is ok. Secondly, the code in the if statments will only be run every 10 seconds at most. If t-mode changes, it could be 10 seconds before the code is run. This is why the client sometimes takes a while to figure out t-mode has changed. Suppose you have a fed-rom game in t-mode. The roms quit, t-mode is lost, and then some klis join, t-mode is regained, over a period of less than 10 seconds. setEnemy will not get called, even though you had a fed-rom game and now a fed-kli game. Anyway, I'm going to fix this so t-mode changes are sent when they happen, not upto 10 seconds later. I also wonder if stats code inside the network functions is really a good idea, it seems like a bad place to me.