anchor.diff:      NextUnit := gHands.GetNextUnitWSameType(TKMUnit(gMySpectator.Selected));
       if NextUnit <> nil then
       begin
  -      gMySpectator.Selected := NextUnit;
  -      if (fUIMode in [umSP, umMP]) and not HasLostMPGame then
  -        gSoundPlayer.PlayCitizen(NextUnit.UnitType, sp_Select); // play unit selection sound
  +      SelectUnit(NextUnit);
         fViewport.Position := NextUnit.PositionF; //center viewport on that unit
       end;
   
  
positive.code:   ItemId, MessageId: Integer;
    Msg: TKMLogMessage;
    H: TKMHouse;
  begin
    ItemId := ColumnBox_MessageLog.ItemIndex;
    if ItemId = -1 then Exit;
  
negative.code:   // NOTE: It will highlight next house built on the 'ruins' which is unoccupied to be precise
    //       even the NEW message has not been issued yet
    if (H <> nil) then
    begin
      if (gRes.IsMsgHouseUnnocupied(Msg.fTextID) and not H.GetHasOwner
          and (gRes.Houses[H.HouseType].OwnerType <> ut_None) and (H.HouseType <> ht_Barracks))
        or H.ResourceDepletedMsgIssued then
      begin
        gMySpectator.Highlight := H;
        gMySpectator.Selected := H;
        UpdateSelectedObject;
      end;
    end else begin
      G := gHands.GroupsHitTest(Msg.Loc.X, Msg.Loc.Y);
      if (G <> nil) and not G.IsDead then
      begin
        SelectUnitGroup(G);
        UpdateSelectedObject;
      end;
    end;
  
    MessageLog_Update(True);
  end;
  