Index: /trunk/src/org/openstreetmap/josm/gui/oauth/AuthorizationProcedure.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/oauth/AuthorizationProcedure.java	(revision 17599)
+++ /trunk/src/org/openstreetmap/josm/gui/oauth/AuthorizationProcedure.java	(revision 17600)
@@ -1,4 +1,6 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.oauth;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
 
 /**
@@ -27,4 +29,48 @@
      * have been generated in a former session and filed away in a secure place.
      */
-    MANUALLY
+    MANUALLY;
+
+    /**
+     * Returns the translated name of this procedure
+     * @return the translated name of this procedure
+     */
+    public String getText() {
+        switch(this) {
+        case FULLY_AUTOMATIC:
+            return tr("Fully automatic");
+        case SEMI_AUTOMATIC:
+            return tr("Semi-automatic");
+        case MANUALLY:
+            return tr("Manual");
+        }
+        throw new IllegalStateException();
+    }
+
+    /**
+     * Returns a translated description of this procedure
+     * @return a translated description of this procedure
+     */
+    public String getDescription() {
+        switch(this) {
+        case FULLY_AUTOMATIC:
+            return tr(
+                    "<html>Run a fully automatic procedure to get an access token from the OSM website.<br>"
+                    + "JOSM accesses the OSM website on behalf of the JOSM user and fully<br>"
+                    + "automatically authorizes the user and retrieves an Access Token.</html>"
+            );
+        case SEMI_AUTOMATIC:
+            return tr(
+                    "<html>Run a semi-automatic procedure to get an access token from the OSM website.<br>"
+                    + "JOSM submits the standards OAuth requests to get a Request Token and an<br>"
+                    + "Access Token. It dispatches the user to the OSM website in an external browser<br>"
+                    + "to authenticate itself and to accept the request token submitted by JOSM.</html>"
+            );
+        case MANUALLY:
+            return tr(
+                    "<html>Enter an Access Token manually if it was generated and retrieved outside<br>"
+                    + "of JOSM.</html>"
+            );
+        }
+        throw new IllegalStateException();
+    }
 }
Index: unk/src/org/openstreetmap/josm/gui/oauth/AuthorizationProcedureComboBox.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/oauth/AuthorizationProcedureComboBox.java	(revision 17599)
+++ 	(revision )
@@ -1,93 +1,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.oauth;
-
-import static org.openstreetmap.josm.tools.I18n.tr;
-
-import java.awt.Component;
-
-import javax.swing.JLabel;
-import javax.swing.JList;
-import javax.swing.ListCellRenderer;
-import javax.swing.UIManager;
-
-import org.openstreetmap.josm.gui.widgets.JosmComboBox;
-
-/**
- * Combo box that lets the user choose one of the available {@link AuthorizationProcedure}s.
- */
-public class AuthorizationProcedureComboBox extends JosmComboBox<AuthorizationProcedure> {
-
-    /**
-     * Constructs a new {@code AuthorizationProcedureComboBox}.
-     */
-    public AuthorizationProcedureComboBox() {
-        super(AuthorizationProcedure.values());
-        setRenderer(new AuthorisationProcedureCellRenderer());
-        setSelectedItem(AuthorizationProcedure.FULLY_AUTOMATIC);
-    }
-
-    private static class AuthorisationProcedureCellRenderer extends JLabel implements ListCellRenderer<AuthorizationProcedure> {
-        AuthorisationProcedureCellRenderer() {
-            setOpaque(true);
-        }
-
-        protected void renderColors(boolean isSelected) {
-            if (isSelected) {
-                setForeground(UIManager.getColor("List.selectionForeground"));
-                setBackground(UIManager.getColor("List.selectionBackground"));
-            } else {
-                setForeground(UIManager.getColor("List.foreground"));
-                setBackground(UIManager.getColor("List.background"));
-            }
-        }
-
-        protected void renderText(AuthorizationProcedure value) {
-            switch(value) {
-            case FULLY_AUTOMATIC:
-                setText(tr("Fully automatic"));
-                break;
-            case SEMI_AUTOMATIC:
-                setText(tr("Semi-automatic"));
-                break;
-            case MANUALLY:
-                setText(tr("Manual"));
-                break;
-            }
-        }
-
-        protected void renderToolTipText(AuthorizationProcedure value) {
-            switch(value) {
-            case FULLY_AUTOMATIC:
-                setToolTipText(tr(
-                        "<html>Run a fully automatic procedure to get an access token from the OSM website.<br>"
-                        + "JOSM accesses the OSM website on behalf of the JOSM user and fully<br>"
-                        + "automatically authorizes the user and retrieves an Access Token.</html>"
-                ));
-                break;
-            case SEMI_AUTOMATIC:
-                setToolTipText(tr(
-                        "<html>Run a semi-automatic procedure to get an access token from the OSM website.<br>"
-                        + "JOSM submits the standards OAuth requests to get a Request Token and an<br>"
-                        + "Access Token. It dispatches the user to the OSM website in an external browser<br>"
-                        + "to authenticate itself and to accept the request token submitted by JOSM.</html>"
-                ));
-                break;
-            case MANUALLY:
-                setToolTipText(tr(
-                        "<html>Enter an Access Token manually if it was generated and retrieved outside<br>"
-                        + "of JOSM.</html>"
-                ));
-                break;
-            }
-        }
-
-        @Override
-        public Component getListCellRendererComponent(JList<? extends AuthorizationProcedure> list, AuthorizationProcedure procedure,
-                int idx, boolean isSelected, boolean hasFocus) {
-            renderColors(isSelected);
-            renderText(procedure);
-            renderToolTipText(procedure);
-            return this;
-        }
-    }
-}
Index: /trunk/src/org/openstreetmap/josm/gui/oauth/OAuthAuthorizationWizard.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/oauth/OAuthAuthorizationWizard.java	(revision 17599)
+++ /trunk/src/org/openstreetmap/josm/gui/oauth/OAuthAuthorizationWizard.java	(revision 17600)
@@ -13,6 +13,4 @@
 import java.awt.event.ComponentAdapter;
 import java.awt.event.ComponentEvent;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
 import java.awt.event.WindowAdapter;
 import java.awt.event.WindowEvent;
@@ -21,4 +19,5 @@
 import java.lang.reflect.InvocationTargetException;
 import java.net.URL;
+import java.util.Objects;
 import java.util.concurrent.Executor;
 import java.util.concurrent.FutureTask;
@@ -28,5 +27,4 @@
 import javax.swing.JButton;
 import javax.swing.JDialog;
-import javax.swing.JLabel;
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
@@ -44,6 +42,6 @@
 import org.openstreetmap.josm.gui.util.WindowGeometry;
 import org.openstreetmap.josm.gui.widgets.HtmlPanel;
+import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
 import org.openstreetmap.josm.spi.preferences.Config;
-import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -59,7 +57,7 @@
 public class OAuthAuthorizationWizard extends JDialog {
     private boolean canceled;
+    private final AuthorizationProcedure procedure;
     private final String apiUrl;
 
-    private final AuthorizationProcedureComboBox cbAuthorisationProcedure = new AuthorizationProcedureComboBox();
     private FullyAutomaticAuthorizationUI pnlFullyAutomaticAuthorisationUI;
     private SemiAutomaticAuthorizationUI pnlSemiAutomaticAuthorisationUI;
@@ -123,11 +121,7 @@
 
         // the authorisation procedure
-        JLabel lbl = new JLabel(tr("Please select an authorization procedure: "));
+        JMultilineLabel lbl = new JMultilineLabel(AuthorizationProcedure.FULLY_AUTOMATIC.getDescription());
         lbl.setFont(lbl.getFont().deriveFont(Font.PLAIN));
         pnl.add(lbl, GBC.std());
-
-        pnl.add(cbAuthorisationProcedure, GBC.eol().fill(GBC.HORIZONTAL));
-        cbAuthorisationProcedure.addItemListener(new AuthorisationProcedureChangeListener());
-        lbl.setLabelFor(cbAuthorisationProcedure);
 
         if (!Config.getUrls().getDefaultOsmApiUrl().equals(apiUrl)) {
@@ -155,5 +149,4 @@
      */
     protected void refreshAuthorisationProcedurePanel() {
-        AuthorizationProcedure procedure = (AuthorizationProcedure) cbAuthorisationProcedure.getSelectedItem();
         switch(procedure) {
         case FULLY_AUTOMATIC:
@@ -217,12 +210,13 @@
      *
      * @param parent the component relative to which the dialog is displayed
+     * @param procedure the authorization procedure to use
      * @param apiUrl the API URL. Must not be null.
      * @param executor the executor used for running the HTTP requests for the authorization
      * @throws IllegalArgumentException if apiUrl is null
      */
-    public OAuthAuthorizationWizard(Component parent, String apiUrl, Executor executor) {
+    public OAuthAuthorizationWizard(Component parent, AuthorizationProcedure procedure, String apiUrl, Executor executor) {
         super(GuiHelper.getFrameForComponent(parent), ModalityType.DOCUMENT_MODAL);
-        CheckParameterUtil.ensureParameterNotNull(apiUrl, "apiUrl");
-        this.apiUrl = apiUrl;
+        this.procedure = Objects.requireNonNull(procedure, "procedure");
+        this.apiUrl = Objects.requireNonNull(apiUrl, "apiUrl");
         this.executor = executor;
         build();
@@ -239,5 +233,5 @@
 
     protected AbstractAuthorizationUI getCurrentAuthorisationUI() {
-        switch((AuthorizationProcedure) cbAuthorisationProcedure.getSelectedItem()) {
+        switch(procedure) {
         case FULLY_AUTOMATIC: return pnlFullyAutomaticAuthorisationUI;
         case MANUALLY: return pnlManualAuthorisationUI;
@@ -320,5 +314,7 @@
             // executed via main worker. The OAuth connections would block otherwise.
             final OAuthAuthorizationWizard wizard = new OAuthAuthorizationWizard(
-                    MainApplication.getMainFrame(), serverUrl.toExternalForm(), Utils.newDirectExecutor());
+                    MainApplication.getMainFrame(),
+                    AuthorizationProcedure.FULLY_AUTOMATIC,
+                    serverUrl.toExternalForm(), Utils.newDirectExecutor());
             wizard.showDialog();
             return wizard;
@@ -332,11 +328,4 @@
     }
 
-    class AuthorisationProcedureChangeListener implements ItemListener {
-        @Override
-        public void itemStateChanged(ItemEvent arg0) {
-            refreshAuthorisationProcedurePanel();
-        }
-    }
-
     class CancelAction extends AbstractAction {
 
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/server/OAuthAuthenticationPreferencesPanel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/server/OAuthAuthenticationPreferencesPanel.java	(revision 17599)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/server/OAuthAuthenticationPreferencesPanel.java	(revision 17600)
@@ -23,4 +23,5 @@
 import javax.swing.JPanel;
 
+import org.openstreetmap.josm.actions.ExpertToggleAction;
 import org.openstreetmap.josm.data.oauth.OAuthAccessTokenHolder;
 import org.openstreetmap.josm.data.oauth.OAuthParameters;
@@ -28,4 +29,5 @@
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.oauth.AdvancedOAuthPropertiesPanel;
+import org.openstreetmap.josm.gui.oauth.AuthorizationProcedure;
 import org.openstreetmap.josm.gui.oauth.OAuthAuthorizationWizard;
 import org.openstreetmap.josm.gui.oauth.TestAccessTokenTask;
@@ -174,25 +176,18 @@
 
             // A message explaining that the user isn't authorised yet
-            gc.anchor = GridBagConstraints.NORTHWEST;
-            gc.insets = new Insets(0, 0, 3, 0);
-            gc.fill = GridBagConstraints.HORIZONTAL;
-            gc.weightx = 1.0;
             JMultilineLabel lbl = new JMultilineLabel(
                     tr("You do not have an Access Token yet to access the OSM server using OAuth. Please authorize first."));
-            add(lbl, gc);
+            add(lbl, GBC.eol().anchor(GBC.NORTHWEST).fill(GBC.HORIZONTAL));
             lbl.setFont(lbl.getFont().deriveFont(Font.PLAIN));
 
             // Action for authorising now
-            gc.gridy = 1;
-            gc.fill = GridBagConstraints.NONE;
-            gc.weightx = 0.0;
-            add(new JButton(new AuthoriseNowAction()), gc);
+            add(new JButton(new AuthoriseNowAction(AuthorizationProcedure.FULLY_AUTOMATIC)), GBC.eol());
+            add(new JButton(new AuthoriseNowAction(AuthorizationProcedure.SEMI_AUTOMATIC)), GBC.eol());
+            JButton authManually = new JButton(new AuthoriseNowAction(AuthorizationProcedure.MANUALLY));
+            add(authManually, GBC.eol());
+            ExpertToggleAction.addVisibilitySwitcher(authManually);
 
             // filler - grab remaining space
-            gc.gridy = 2;
-            gc.fill = GridBagConstraints.BOTH;
-            gc.weightx = 1.0;
-            gc.weighty = 1.0;
-            add(new JPanel(), gc);
+            add(new JPanel(), GBC.std().fill(GBC.BOTH));
         }
     }
@@ -260,5 +255,5 @@
             // -- action buttons
             JPanel btns = new JPanel(new FlowLayout(FlowLayout.LEFT));
-            btns.add(new JButton(new RenewAuthorisationAction()));
+            btns.add(new JButton(new RenewAuthorisationAction(AuthorizationProcedure.FULLY_AUTOMATIC)));
             btns.add(new JButton(new TestAuthorisationAction()));
             gc.gridy = 4;
@@ -296,8 +291,13 @@
      */
     private class AuthoriseNowAction extends AbstractAction {
-        AuthoriseNowAction() {
-            putValue(NAME, tr("Authorize now"));
-            putValue(SHORT_DESCRIPTION, tr("Click to step through the OAuth authorization process"));
-            new ImageProvider("oauth", "oauth-small").getResource().attachImageIcon(this);
+        private final AuthorizationProcedure procedure;
+
+        AuthoriseNowAction(AuthorizationProcedure procedure) {
+            this.procedure = procedure;
+            putValue(NAME, tr("{0} ({1})", tr("Authorize now"), procedure.getText()));
+            putValue(SHORT_DESCRIPTION, procedure.getDescription());
+            if (procedure == AuthorizationProcedure.FULLY_AUTOMATIC) {
+                new ImageProvider("oauth", "oauth-small").getResource().attachImageIcon(this);
+            }
         }
 
@@ -306,4 +306,5 @@
             OAuthAuthorizationWizard wizard = new OAuthAuthorizationWizard(
                     OAuthAuthenticationPreferencesPanel.this,
+                    procedure,
                     apiUrl,
                     MainApplication.worker);
@@ -326,5 +327,6 @@
          * Constructs a new {@code RenewAuthorisationAction}.
          */
-        RenewAuthorisationAction() {
+        RenewAuthorisationAction(AuthorizationProcedure procedure) {
+            super(procedure);
             putValue(NAME, tr("New Access Token"));
             putValue(SHORT_DESCRIPTION, tr("Click to step through the OAuth authorization process and generate a new Access Token"));
Index: unk/test/unit/org/openstreetmap/josm/gui/oauth/AuthorizationProcedureComboBoxTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/gui/oauth/AuthorizationProcedureComboBoxTest.java	(revision 17599)
+++ 	(revision )
@@ -1,37 +1,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.oauth;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-import javax.swing.ListCellRenderer;
-
-import org.junit.jupiter.api.extension.RegisterExtension;
-import org.junit.jupiter.api.Test;
-import org.openstreetmap.josm.testutils.JOSMTestRules;
-
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-
-/**
- * Unit tests of {@link AuthorizationProcedureComboBox} class.
- */
-class AuthorizationProcedureComboBoxTest {
-
-    /**
-     * Setup tests
-     */
-    @RegisterExtension
-    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
-    public JOSMTestRules test = new JOSMTestRules();
-
-    /**
-     * Unit test of {@link AuthorizationProcedureComboBox}.
-     */
-    @Test
-    void testAuthorizationProcedureComboBox() {
-        ListCellRenderer<? super AuthorizationProcedure> r = new AuthorizationProcedureComboBox().getRenderer();
-        for (AuthorizationProcedure procedure : AuthorizationProcedure.values()) {
-            assertEquals(r, r.getListCellRendererComponent(null, procedure, 0, true, false));
-            assertEquals(r, r.getListCellRendererComponent(null, procedure, 0, false, false));
-        }
-    }
-}
