anchor.diff:  
       function GetValue: String;
       procedure SetValue(AValue: String);
  +    function GetVisible: Boolean;
  +    procedure SetVisible(AValue: Boolean);
     public
       constructor Create(aParent: TKMPanel; ATag: Integer; AImage: Word; AHint: String; AColor: TColor4);
       procedure SetPosition(ALeft, ATop: Integer);
       property Tag: Integer read FTag;
       property Value: String read GetValue write SetValue;
  -  end;
  -
  -  TKMGUIGameSpectatorCustomPage = class
  -  private
  -    FPanel: TKMPanel;
  +    property Visible: Boolean read GetVisible write SetVisible;
  +  end;
  +
  +  TKMGUIGameSpectatorPanel = class(TKMPanel)
     public
       constructor Create(aParent: TKMPanel); virtual;
       procedure Activation; virtual;
   
  -    property Panel: TKMPanel read FPanel;
  -  end;
  -
  -  TKMGUIGameSpectatorArmy = class(TKMGUIGameSpectatorCustomPage)
  +  end;
  +
  +  TKMGUIGameSpectatorPanelArmy = class(TKMGUIGameSpectatorPanel)
     private
       fItems: array of array[WARRIOR_MIN..WARRIOR_MAX] of TKMGUIGameSpectatorItem;
     public
       constructor Create(aParent: TKMPanel); override;
       procedure Activation; override;
   
  +  end;
  +
  +  TKMGUIGameSpectatorPanelResources = class(TKMGUIGameSpectatorPanel)
  +  private
  +    fItems: array of array[WARE_MIN..WARE_MAX] of TKMGUIGameSpectatorItem;
  +  public
  +    constructor Create(aParent: TKMPanel); override;
  +    procedure Activation; override;
  +    procedure UpdateState(aTickCount: Cardinal); override;
     end;
   
     TKMGUIGameSpectator = class
     private
       FPanel: TKMPanel;
       FDropBox: TKMDropList;
  -    FSelectedPage: TKMGUIGameSpectatorCustomPage;
  -    FPageList: TList;
  +    FSelectedPanel: TKMGUIGameSpectatorPanel;
  +    FPanelList: TList;
   
       //TKMGUIGameSpectatorArmy;
   
       procedure ChangePage(Sender: TObject);
  -    procedure AddPage(AName: String; APage: TKMGUIGameSpectatorCustomPage);
  +    procedure AddPage(AName: String; APanel: TKMGUIGameSpectatorPanel);
     public
       constructor Create(aParent: TKMPanel);
       destructor Destroy; override;
  
positive.code:   FPanel.Anchors := [anTop, anRight];
    FPanel.Focusable := false;
    FPanel.Show;
    FPageList := TList.Create;
    FSelectedPage := nil;
  
    FDropBox := TKMDropList.Create(FPanel, 5, 5, 150, 20, fnt_Metal, '', bsMenu);
    FDropBox.OnChange := ChangePage;
  
    AddPage('', nil);
    AddPage('', nil);
    AddPage('', nil);
    AddPage('', nil);
    AddPage('', TKMGUIGameSpectatorArmy.Create(FPanel));
    AddPage('', nil);
    AddPage('', nil);
  end;
  
  destructor TKMGUIGameSpectator.Destroy;
  begin
    FPageList.Free;
  
    inherited;
  end;
  
  procedure TKMGUIGameSpectator.AddPage(AName: String; APage: TKMGUIGameSpectatorCustomPage);
  begin
    FDropBox.Add(AName);
    FPageList.Add(APage);
  end;
  
  procedure TKMGUIGameSpectator.ChangePage(Sender: TObject);
  begin
    if Assigned(FSelectedPage) then
      FSelectedPage.Panel.Hide;
  
    FSelectedPage := TKMGUIGameSpectatorCustomPage(FPageList[FDropBox.ItemIndex]);
  
    if Assigned(FSelectedPage) then
    begin
      FSelectedPage.Activation;
      FSelectedPage.Panel.Show;
    end;
  end;
  
  
negative.code:     Exit;
  
    SetLength(fItems, HandCount);
    Height := 32 * HandCount;
    Width := 448;
    Left := Parent.Width - 448;
    for i := 0 to HandCount - 1 do
    begin
      p := 0;
  