anchor.diff:      else
         Selection_Select(selectId);
     end;
  -
  -  // Menu shortcuts
  +end;
  +
  +
  +procedure TKMGamePlayInterface.HandleMenuKeys(Key: Word; Shift: TShiftState);
  +begin
     if Key = gResKeys[kfMenuBuild] then
       if Button_Main[tbBuild].Enabled then
         SwitchPage(Button_Main[tbBuild]);
  
positive.code:   // thus the easy way to make that is to exit now
    if fUIMode = umReplay then Exit;
  
    // Field plans hotkeys
    if Button_Main[tbBuild].Enabled then
    begin
      if Key = gResKeys[kfPlanRoad] then
      begin
        if not fGuiGameBuild.Visible then
          SwitchPage(Button_Main[tbBuild]);
        fGuiGameBuild.PlanRoad;
      end;
  
      if Key = gResKeys[kfPlanField] then
      begin
        if not fGuiGameBuild.Visible then
          SwitchPage(Button_Main[tbBuild]);
        fGuiGameBuild.PlanField;
      end;
  
      if Key = gResKeys[kfPlanWine] then
      begin
        if not fGuiGameBuild.Visible then
          SwitchPage(Button_Main[tbBuild]);
        fGuiGameBuild.PlanWine;
      end;
  
      if Key = gResKeys[kfErasePlan] then
      begin
        if not fGuiGameBuild.Visible then
          SwitchPage(Button_Main[tbBuild]);
        fGuiGameBuild.ErasePlan;
        gSystem.Cursor := kmcDefault; //Reset cursor, as it could be kmcInfo, f.e.
      end;
    end;
  
    // General function keys
    if (Key = gResKeys[kfPause]) then
    begin
      doSetPause := False;
      case fUIMode of
        umSP:       doSetPause := True;
        umReplay:   ;
        umMP,
        umSpectate: doSetPause := SpeedChangeAllowedInMP;
      end;
  
      if doSetPause then
        SetPause(True); // Display pause overlay
    end;
  
    { Temporary cheat codes }
    if DEBUG_CHEATS and (MULTIPLAYER_CHEATS or (fUIMode = umSP)) then
    begin
      if Key = gResKeys[kfDebugRevealmap] then gGame.GameInputProcess.CmdTemp(gicTempRevealMap);
      if Key = gResKeys[kfDebugVictory]   then gGame.GameInputProcess.CmdTemp(gicTempVictory);
      if Key = gResKeys[kfDebugDefeat]    then gGame.GameInputProcess.CmdTemp(gicTempDefeat);
      if Key = gResKeys[kfDebugAddscout]  then gGame.GameInputProcess.CmdTemp(gicTempAddScout, gCursor.Cell);
    end;
  end;
  
  
  
negative.code:     if Button_Back.Visible then
        SwitchPage(Button_Back);
    end;
  end;
  
  
  procedure TKMGamePlayInterface.HandleSelectKeys(Key: Word; Shift: TShiftState);
  var
    selectId: Integer;
  begin
    // Dynamic key-binding means we cannot use "case of"
    if Key = gResKeys[kfSelect1]  then selectId := 0 else
    if Key = gResKeys[kfSelect2]  then selectId := 1 else
  