anchor.diff:        fNetwork: TKMNetwork;
         fDelay:word; //How many ticks ahead the commands are scheduled
         fPlayersEnabled:array[1..MAX_PLAYERS]of boolean; //See which players confirmations do we need
  -      fSchedule: array[0..MAX_SCHEDULE-1, 1..MAX_PLAYERS] of packed record //Ring buffer
  -        Commands:TGIPList; //Each player can have any number of commands scheduled for execution in one tick
  -        Confirmed:array[1..MAX_PLAYERS]of boolean; //All players must confirm they have the same commands in schedule
  -      end;
  +      //Each player can have any number of commands scheduled for execution in one tick
  +      fSchedule: array[0..MAX_SCHEDULE-1, 1..MAX_PLAYERS] of TGIPList; //Ring buffer
  +      //All players must confirm they have the have recieved our GIPList
  +      fConfirmed: array[0..MAX_SCHEDULE-1, 1..MAX_PLAYERS] of boolean; //Ring buffer
         procedure SendCommands;
       protected
         procedure TakeCommand(aCommand:TGameInputCommand); override;
       public
         constructor Create(aReplayState:TGIPReplayState);
         destructor Destroy; override;
  -      procedure RecieveCommands(aData:string); //Called by TKMNetwork
  +      procedure RecieveCommands(aData:array of byte); //Called by TKMNetwork
         procedure Tick(aTick:cardinal); override;
     end;
   
   
   implementation
  -uses KM_Game;
  +uses KM_Game, KM_CommonTypes;
   
   
   procedure TGIPList.Clear;
  
positive.code: 
    //Allocate memory for all commands lists
    for i:=0 to MAX_SCHEDULE-1 do for k:=1 to MAX_PLAYERS do
      fSchedule[i,k].Commands := TGIPList.Create;
  end;
  
  
  
negative.code: 
    Conf := true; //See if all players confirm this tick commands list
    for i:=1 to MAX_PLAYERS do
      Conf := Conf and (fConfirmed[id,i] or not fPlayersEnabled[i]);
  
    //Handle the issue
    if not Conf then
  