anchor.diff:      function CanHandleKey(Key: Word; Shift: TShiftState): Boolean;
       function SpeedChangeAllowedInMP: Boolean;
   
  +    procedure HandleShowTeamKeyDown(Key: Word);
       procedure HandleMessageKeys(Key: Word);
   
       procedure HandleReplayPauseKey(Key: Word; Shift: TShiftState);
  
positive.code: 
  procedure TKMGamePlayInterface.HandleMiscKeys(Key: Word; Shift: TShiftState);
  begin
    if Key = gResKeys[kfShowTeams] then
      fShowTeamNames := False;
  
    if Key = gResKeys[kfBeacon] then
      if not fSelectingTroopDirection
        and not fGuiGameResultsSP.Visible
  
negative.code: end;
  
  
  procedure TKMGamePlayInterface.HandleMessageKeys(Key: Word);
  var
    I: Integer;
    lastAlert: TKMAlert;
    msg: TKMLogMessage;
  begin
    // Messages
    if Key = gResKeys[kfCenterAlert] then
    begin
      // Spacebar centers you on the latest alert
      lastAlert := fAlerts.GetLatestAlert;
      if lastAlert <> nil then
        fViewport.Position := lastAlert.Loc
      else
      begin
        //If there are no active alerts, then centers on last unread message in log (house / unit)
        for I := gMySpectator.Hand.MessageLog.CountLog - 1 downto Max(gMySpectator.Hand.MessageLog.CountLog - MAX_LOG_MSGS, 0) do
        begin
          msg := gMySpectator.Hand.MessageLog[I];
  
          if not msg.IsRead and msg.IsGoto then
          begin
            MessageLog_ShowMessage(I);
            Break;
          end;
        end;
      end;
    end;
  
    if Key = gResKeys[kfDeleteMsg] then
      Button_MessageDelete.Click;
  
    // Enter is the shortcut to bring up chat in multiplayer
    if (Key = gResKeys[kfChat]) and CanShowChat then
    begin
      if not fGuiGameChat.Visible then
      begin
        Allies_Close(nil);
        Message_Close(nil);
        MessageLog_Close(nil);
        Label_ChatUnread.Caption := ''; // No unread messages
        fGuiGameChat.Show;
      end else
        fGuiGameChat.Focus;
    end;
  end;
  
  
  procedure TKMGamePlayInterface.HandleShowTeamKeyDown(Key: Word);
  var
    rect: TKMRect;
  begin
    // As we don't have names for teams in SP we only allow showing team names in MP or MP replays
    if (Key = gResKeys[kfShowTeams]) then
      if SHOW_UIDs or (fUIMode in [umMP, umSpectate]) or (gGameParams.Mode = gmReplayMulti) then //Only MP replays
      begin
  