anchor.diff:      procedure UpdateDebugInfo;
       procedure HidePages;
       procedure HideOverlay(Sender: TObject);
  -    procedure Replay_UpdateSpectatingPlayerView(aDoUpdateScreenPosition: Boolean; aUpdateScreenPosOnly: Boolean = False);
  -    procedure Replay_ListClick(Sender: TObject);
       procedure Replay_ListDoubleClick(Sender: TObject);
     protected
       Sidebar_Top: TKMImage;
  
positive.code:     Dropbox_ReplayFOW := TKMDropList.Create(Panel_ReplayFOW, 0, 19, 160, 20, fnt_Metal, '', bsGame, False, 0.5);
      Dropbox_ReplayFOW.Hint := gResTexts[TX_REPLAY_PLAYER_PERSPECTIVE];
      Dropbox_ReplayFOW.OnChange := ReplayClick;
      Dropbox_ReplayFOW.List.OnClick := Replay_ListClick;
      Dropbox_ReplayFOW.List.OnDoubleClick := Replay_ListDoubleClick;
   end;
  
  
negative.code: end;
  
  
  procedure TKMGamePlayInterface.Replay_ListDoubleClick(Sender: TObject);
  var LastSelectedObj: TObject;
  begin
    //Double clicking on an item in the list jumps to the previously selected object of that player
    gMySpectator.HandIndex := Dropbox_ReplayFOW.GetTag(Dropbox_ReplayFOW.ItemIndex);
  
    LastSelectedObj := gMySpectator.LastSpecSelectedObj;
    if LastSelectedObj <> nil then
    begin
      // Center screen on last selected object for chosen hand
      if LastSelectedObj is TKMUnit then begin
        fViewport.Position := TKMUnit(LastSelectedObj).PositionF;
      end else if LastSelectedObj is TKMHouse then
        fViewport.Position := KMPointF(TKMHouse(LastSelectedObj).Entrance)
      else if LastSelectedObj is TKMUnitGroup then
        fViewport.Position := TKMUnitGroup(LastSelectedObj).FlagBearer.PositionF
      else
        raise Exception.Create('Could not determine last selected object type');
    end
    else
      if not KMSamePoint(gHands[gMySpectator.HandIndex].CenterScreen, KMPoint(0,0)) then
        fViewport.Position := KMPointF(gHands[gMySpectator.HandIndex].CenterScreen); //By default set viewport position to hand CenterScreen
  
    gMySpectator.Selected := LastSelectedObj;  // Change selected object to last one for this hand or Reset it to nil
  end;
  
  
  procedure TKMGamePlayInterface.ReplayClick(Sender: TObject);
  var
    oldCenter: TKMPointF;
    oldZoom: Single;
  begin
    if (Sender = Button_ReplayRestart) then
    begin
      // Restart the replay but keep the viewport position/zoom
      oldCenter := fViewport.Position;
      oldZoom := fViewport.Zoom;
  
      gGame.RestartReplay; //reload it once again
  
      // Self is now destroyed, so we must access the NEW fGame object
      gGame.GamePlayInterface.SyncUIView(oldCenter, oldZoom);
  
      Exit; // Restarting the replay will destroy Self, so exit immediately
    end;
  
    if (Sender = Button_ReplayPause) then
    begin
      gGame.IsPaused := True;
      SetButtons(False);
    end;
  
    if (Sender = Button_ReplayStep) then
    begin
      gGame.StepOneFrame;
      gGame.IsPaused := False;
      SetButtons(False);
    end;
  
    if (Sender = Button_ReplayResume) then
    begin
      gGame.IsPaused := False;
      SetButtons(True);
    end;
  
    if (Sender = Button_ReplayExit) then
    begin
      gGame.GameHold(True, gr_ReplayEnd);
      SetButtons(True);
    end;
  
    if (Sender = Dropbox_ReplayFOW) then
    begin
      gMySpectator.HandIndex := Dropbox_ReplayFOW.GetTag(Dropbox_ReplayFOW.ItemIndex);
  
      if Checkbox_ReplayFOW.Checked then
        gMySpectator.FOWIndex := gMySpectator.HandIndex
      else
  