Index: /trunk/src/org/openstreetmap/josm/gui/io/BasicUploadSettingsPanel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/io/BasicUploadSettingsPanel.java	(revision 17708)
+++ /trunk/src/org/openstreetmap/josm/gui/io/BasicUploadSettingsPanel.java	(revision 17709)
@@ -19,5 +19,4 @@
 
 import javax.swing.BorderFactory;
-import javax.swing.BoxLayout;
 import javax.swing.JCheckBox;
 import javax.swing.JEditorPane;
@@ -208,18 +207,16 @@
 
     protected void build() {
-        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
+        setLayout(new GridBagLayout());
         setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
-        add(buildUploadCommentPanel());
-        add(buildUploadSourcePanel());
-        add(pnlUploadParameterSummary);
+        GBC gbc = GBC.eol().insets(0, 0, 0, 20).fill(GBC.HORIZONTAL);
+        add(buildUploadCommentPanel(), gbc);
+        add(buildUploadSourcePanel(), gbc);
+        add(pnlUploadParameterSummary, gbc);
         if (Config.getPref().getBoolean("upload.show.review.request", true)) {
-            JPanel pnl = new JPanel(new GridBagLayout());
-            pnl.add(cbRequestReview, GBC.eol().fill(GBC.HORIZONTAL));
-            add(pnl);
+            add(cbRequestReview, gbc);
             cbRequestReview.addItemListener(e -> changesetReviewModel.setReviewRequested(e.getStateChange() == ItemEvent.SELECTED));
         }
-        JPanel pnl = new JPanel(new GridBagLayout());
-        pnl.add(areaValidatorFeedback, GBC.eol().fill(GBC.HORIZONTAL));
-        add(pnl);
+        add(areaValidatorFeedback, gbc);
+        add(new JPanel(), GBC.std().fill(GBC.BOTH));
     }
 
Index: /trunk/src/org/openstreetmap/josm/gui/io/ChangesetManagementPanel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/io/ChangesetManagementPanel.java	(revision 17708)
+++ /trunk/src/org/openstreetmap/josm/gui/io/ChangesetManagementPanel.java	(revision 17709)
@@ -157,12 +157,4 @@
         cbCloseAfterUpload.addItemListener(new CloseAfterUploadItemStateListener());
 
-        gc.gridx = 0;
-        gc.gridy = 5;
-        gc.gridwidth = 4;
-        gc.weightx = 1.0;
-        gc.weighty = 1.0;
-        gc.fill = GridBagConstraints.BOTH;
-        add(new JPanel(), gc);
-
         rbUseNew.getModel().addItemListener(new RadioButtonHandler());
         rbExisting.getModel().addItemListener(new RadioButtonHandler());
Index: unk/src/org/openstreetmap/josm/gui/io/ConfigurationParameterRequestHandler.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/io/ConfigurationParameterRequestHandler.java	(revision 17708)
+++ 	(revision )
@@ -1,19 +1,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.io;
-
-/**
- * Handler, that will take action when the user clicks one of two hyperlinks
- * in the upload dialog.
- */
-public interface ConfigurationParameterRequestHandler {
-    /**
-     * Handle the event when user clicks the "configure changeset" hyperlink.
-     */
-    void handleChangesetConfigurationRequest();
-
-    /**
-     * Handle the event when user clicks the "advanced configuration" hyperlink.
-     * The advanced configuration tab contains upload strategy parameters.
-     */
-    void handleUploadStrategyConfigurationRequest();
-}
Index: /trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java	(revision 17708)
+++ /trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java	(revision 17709)
@@ -6,4 +6,5 @@
 import static org.openstreetmap.josm.tools.I18n.trn;
 
+import java.awt.BorderLayout;
 import java.awt.Component;
 import java.awt.Dimension;
@@ -34,5 +35,7 @@
 import javax.swing.JOptionPane;
 import javax.swing.JPanel;
+import javax.swing.JSplitPane;
 import javax.swing.JTabbedPane;
+import javax.swing.border.TitledBorder;
 
 import org.openstreetmap.josm.data.APIDataSet;
@@ -81,4 +84,5 @@
     private UploadStrategySelectionPanel pnlUploadStrategySelectionPanel;
 
+    private TitledBorder tagSettingsBorder;
     /** checkbox for selecting whether an atomic upload is to be used  */
     private TagSettingsPanel pnlTagSettings;
@@ -122,37 +126,36 @@
      */
     protected JPanel buildContentPanel() {
-        JPanel pnl = new JPanel(new GridBagLayout());
-        pnl.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+        final JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
+        splitPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
 
         // the panel with the list of uploaded objects
         pnlUploadedObjects = new UploadedObjectsSummaryPanel();
-        pnl.add(pnlUploadedObjects, GBC.eol().fill(GBC.BOTH));
+        pnlUploadedObjects.setMinimumSize(new Dimension(200, 50));
+        splitPane.setLeftComponent(pnlUploadedObjects);
 
         // a tabbed pane with configuration panels in the lower half
         tpConfigPanels = new CompactTabbedPane();
+        splitPane.setRightComponent(tpConfigPanels);
 
         pnlBasicUploadSettings = new BasicUploadSettingsPanel(changesetCommentModel, changesetSourceModel, changesetReviewModel);
         tpConfigPanels.add(pnlBasicUploadSettings);
-        tpConfigPanels.setTitleAt(0, tr("Settings"));
+        tpConfigPanels.setTitleAt(0, tr("Description"));
         tpConfigPanels.setToolTipTextAt(0, tr("Decide how to upload the data and which changeset to use"));
 
+        tagSettingsBorder = BorderFactory.createTitledBorder(tr("Tags of new changeset"));
         pnlTagSettings = new TagSettingsPanel(changesetCommentModel, changesetSourceModel, changesetReviewModel);
-        tpConfigPanels.add(pnlTagSettings);
-        tpConfigPanels.setTitleAt(1, tr("Tags of new changeset"));
-        tpConfigPanels.setToolTipTextAt(1, tr("Apply tags to the changeset data is uploaded to"));
-
+        pnlTagSettings.setBorder(tagSettingsBorder);
         pnlChangesetManagement = new ChangesetManagementPanel(changesetCommentModel);
-        tpConfigPanels.add(pnlChangesetManagement);
-        tpConfigPanels.setTitleAt(2, tr("Changesets"));
-        tpConfigPanels.setToolTipTextAt(2, tr("Manage open changesets and select a changeset to upload to"));
-
         pnlUploadStrategySelectionPanel = new UploadStrategySelectionPanel();
-        tpConfigPanels.add(pnlUploadStrategySelectionPanel);
-        tpConfigPanels.setTitleAt(3, tr("Advanced"));
-        tpConfigPanels.setToolTipTextAt(3, tr("Configure advanced settings"));
-
-        pnl.add(tpConfigPanels, GBC.eol().fill(GBC.HORIZONTAL));
-
-        pnl.add(buildActionPanel(), GBC.eol().fill(GBC.HORIZONTAL));
+        JPanel pnlChangeset = new JPanel(new GridBagLayout());
+        pnlChangeset.add(pnlChangesetManagement, GBC.eop().fill(GBC.HORIZONTAL));
+        pnlChangeset.add(pnlUploadStrategySelectionPanel, GBC.eop().fill(GBC.HORIZONTAL));
+        pnlChangeset.add(pnlTagSettings, GBC.eol().fill(GBC.BOTH));
+        tpConfigPanels.add(pnlChangeset);
+        tpConfigPanels.setTitleAt(1, tr("Settings"));
+
+        JPanel pnl = new JPanel(new BorderLayout());
+        pnl.add(splitPane, BorderLayout.CENTER);
+        pnl.add(buildActionPanel(), BorderLayout.SOUTH);
         return pnl;
     }
@@ -212,15 +215,5 @@
         //
         pnlBasicUploadSettings.getUploadParameterSummaryPanel().setConfigurationParameterRequestListener(
-                new ConfigurationParameterRequestHandler() {
-                    @Override
-                    public void handleUploadStrategyConfigurationRequest() {
-                        tpConfigPanels.setSelectedIndex(3);
-                    }
-
-                    @Override
-                    public void handleChangesetConfigurationRequest() {
-                        tpConfigPanels.setSelectedIndex(2);
-                    }
-                }
+                () -> tpConfigPanels.setSelectedIndex(2)
         );
 
@@ -419,5 +412,5 @@
                     WindowGeometry.centerInWindow(
                             MainApplication.getMainFrame(),
-                            new Dimension(400, 600)
+                            new Dimension(800, 600)
                     )
             ).applySafe(this);
@@ -465,14 +458,13 @@
         static boolean isUploadCommentTooShort(String comment) {
             String s = Utils.strip(comment);
-            boolean result = true;
-            if (!s.isEmpty()) {
-                UnicodeBlock block = Character.UnicodeBlock.of(s.charAt(0));
-                if (block != null && block.toString().contains("CJK")) {
-                    result = s.length() < 4;
-                } else {
-                    result = s.length() < 10;
-                }
-            }
-            return result;
+            if (s.isEmpty()) {
+                return true;
+            }
+            UnicodeBlock block = Character.UnicodeBlock.of(s.charAt(0));
+            if (block != null && block.toString().contains("CJK")) {
+                return s.length() < 4;
+            } else {
+                return s.length() < 10;
+            }
         }
 
@@ -599,7 +591,7 @@
             setChangesetTags(dataSet, cs == null); // keep comment/source of first tab for new changesets
             if (cs == null) {
-                tpConfigPanels.setTitleAt(1, tr("Tags of new changeset"));
+                tagSettingsBorder.setTitle(tr("Tags of new changeset"));
             } else {
-                tpConfigPanels.setTitleAt(1, tr("Tags of changeset {0}", cs.getId()));
+                tagSettingsBorder.setTitle(tr("Tags of changeset {0}", cs.getId()));
             }
         }
Index: /trunk/src/org/openstreetmap/josm/gui/io/UploadParameterSummaryPanel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/io/UploadParameterSummaryPanel.java	(revision 17708)
+++ /trunk/src/org/openstreetmap/josm/gui/io/UploadParameterSummaryPanel.java	(revision 17709)
@@ -9,4 +9,5 @@
 import java.beans.PropertyChangeListener;
 import java.util.Optional;
+import java.util.stream.Stream;
 
 import javax.swing.BorderFactory;
@@ -23,4 +24,5 @@
 import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.StreamUtils;
 
 /**
@@ -37,5 +39,5 @@
     private transient Changeset selectedChangeset;
     private boolean closeChangesetAfterNextUpload;
-    private transient ConfigurationParameterRequestHandler configHandler;
+    private transient Runnable configHandler;
 
     /**
@@ -48,21 +50,20 @@
 
     protected String buildChangesetSummary() {
-        StringBuilder msg = new StringBuilder(96);
         if (selectedChangeset == null || selectedChangeset.isNew()) {
-            msg.append(tr("Objects are uploaded to a <strong>new changeset</strong>."));
+            return tr("Objects are uploaded to a <strong>new changeset</strong>.");
         } else {
-            msg.append(tr("Objects are uploaded to the <strong>open changeset</strong> {0} with upload comment ''{1}''.",
+            return tr("Objects are uploaded to the <strong>open changeset</strong> {0} with upload comment ''{1}''.",
                     selectedChangeset.getId(),
                     selectedChangeset.getComment()
-            ));
-        }
-        msg.append(' ');
+            );
+        }
+    }
+
+    protected String buildChangesetSummary2() {
         if (closeChangesetAfterNextUpload) {
-            msg.append(tr("The changeset is going to be <strong>closed</strong> after this upload"));
+            return tr("The changeset is going to be <strong>closed</strong> after this upload");
         } else {
-            msg.append(tr("The changeset is <strong>left open</strong> after this upload"));
-        }
-        msg.append(" (<a href=\"urn:changeset-configuration\">").append(tr("configure changeset")).append("</a>)");
-        return msg.toString();
+            return tr("The changeset is <strong>left open</strong> after this upload");
+        }
     }
 
@@ -80,9 +81,8 @@
 
         int numRequests = spec.getNumRequests(numObjects);
-        String msg = null;
         if (useOneChangeset) {
             lblWarning.setVisible(false);
             if (numRequests == 0) {
-                msg = trn(
+                return trn(
                         "Uploading <strong>{0} object</strong> to <strong>1 changeset</strong>",
                         "Uploading <strong>{0} objects</strong> to <strong>1 changeset</strong>",
@@ -90,5 +90,5 @@
                 );
             } else if (numRequests == 1) {
-                msg = trn(
+                return trn(
                         "Uploading <strong>{0} object</strong> to <strong>1 changeset</strong> using <strong>1 request</strong>",
                         "Uploading <strong>{0} objects</strong> to <strong>1 changeset</strong> using <strong>1 request</strong>",
@@ -96,21 +96,19 @@
                 );
             } else if (numRequests > 1) {
-                msg = tr("Uploading <strong>{0} objects</strong> to <strong>1 changeset</strong> using <strong>{1} requests</strong>",
+                return tr("Uploading <strong>{0} objects</strong> to <strong>1 changeset</strong> using <strong>{1} requests</strong>",
                         numObjects, numRequests);
             }
-            msg = msg + " (<a href=\"urn:advanced-configuration\">" + tr("advanced configuration") + "</a>)";
         } else {
             lblWarning.setVisible(true);
             if (numRequests == 0) {
-                msg = tr("{0} objects exceed the max. allowed {1} objects in a changeset on the server ''{2}''. " +
-                        "Please <a href=\"urn:advanced-configuration\">configure</a> how to proceed with <strong>multiple changesets</strong>",
+                return tr("{0} objects exceed the max. allowed {1} objects in a changeset on the server ''{2}''. " +
+                        "Please <a href=\"urn:changeset-configuration\">configure</a> how to proceed with <strong>multiple changesets</strong>",
                         numObjects, maxChunkSize, OsmApi.getOsmApi().getBaseUrl());
             } else if (numRequests > 1) {
-                msg = tr("Uploading <strong>{0} objects</strong> to <strong>multiple changesets</strong> using <strong>{1} requests</strong>",
+                return tr("Uploading <strong>{0} objects</strong> to <strong>multiple changesets</strong> using <strong>{1} requests</strong>",
                         numObjects, numRequests);
-                msg = msg + " (<a href=\"urn:advanced-configuration\">" + tr("advanced configuration") + "</a>)";
             }
         }
-        return msg;
+        return "";
     }
 
@@ -120,4 +118,5 @@
 
         setLayout(new BorderLayout());
+        setBorder(BorderFactory.createTitledBorder(tr("Settings:")));
         add(jepMessage, BorderLayout.CENTER);
         lblWarning = new JLabel("");
@@ -131,5 +130,5 @@
     }
 
-    public void setConfigurationParameterRequestListener(ConfigurationParameterRequestHandler handler) {
+    public void setConfigurationParameterRequestListener(Runnable handler) {
         this.configHandler = handler;
     }
@@ -167,12 +166,8 @@
                 .map(url -> tr("… to server: <strong>{0}</strong>", url))
                 .orElse("");
-        jepMessage.setText("<html>"
-                + "<br>"
-                + buildChangesetSummary()
-                + "<br><br>"
-                + buildStrategySummary()
-                + "<br>"
-                + server
-                + "</html>");
+        final String html = Stream.of(buildChangesetSummary(), buildChangesetSummary2(), buildStrategySummary(), server)
+                .filter(s -> s != null && !s.isEmpty())
+                .collect(StreamUtils.toHtmlList());
+        jepMessage.setText(html);
         validate();
     }
@@ -188,7 +183,5 @@
                 return;
             if ("urn:changeset-configuration".equals(desc)) {
-                configHandler.handleChangesetConfigurationRequest();
-            } else if ("urn:advanced-configuration".equals(desc)) {
-                configHandler.handleUploadStrategyConfigurationRequest();
+                configHandler.run();
             }
         }
Index: /trunk/src/org/openstreetmap/josm/gui/io/UploadStrategySelectionPanel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/io/UploadStrategySelectionPanel.java	(revision 17708)
+++ /trunk/src/org/openstreetmap/josm/gui/io/UploadStrategySelectionPanel.java	(revision 17709)
@@ -21,4 +21,5 @@
 import java.util.Map.Entry;
 
+import javax.swing.BorderFactory;
 import javax.swing.ButtonGroup;
 import javax.swing.JLabel;
@@ -54,5 +55,4 @@
     private transient Map<UploadStrategy, JRadioButton> rbStrategy;
     private transient Map<UploadStrategy, JLabel> lblNumRequests;
-    private transient Map<UploadStrategy, JMultilineLabel> lblStrategies;
     private final JosmTextField tfChunkSize = new JosmTextField(4);
     private final JPanel pnlMultiChangesetPolicyPanel = new JPanel(new GridBagLayout());
@@ -74,46 +74,30 @@
     protected JPanel buildUploadStrategyPanel() {
         JPanel pnl = new JPanel(new GridBagLayout());
+        pnl.setBorder(BorderFactory.createTitledBorder(tr("Please select the upload strategy:")));
         ButtonGroup bgStrategies = new ButtonGroup();
         rbStrategy = new EnumMap<>(UploadStrategy.class);
-        lblStrategies = new EnumMap<>(UploadStrategy.class);
         lblNumRequests = new EnumMap<>(UploadStrategy.class);
         for (UploadStrategy strategy: UploadStrategy.values()) {
             rbStrategy.put(strategy, new JRadioButton());
             lblNumRequests.put(strategy, new JLabel());
-            lblStrategies.put(strategy, new JMultilineLabel(""));
             bgStrategies.add(rbStrategy.get(strategy));
         }
 
-        // -- headline
+        // -- single request strategy
         GridBagConstraints gc = new GridBagConstraints();
         gc.gridx = 0;
-        gc.gridy = 0;
-        gc.weightx = 1.0;
-        gc.weighty = 0.0;
-        gc.gridwidth = 4;
+        gc.gridy = 1;
+        gc.weightx = 0.0;
+        gc.weighty = 0.0;
+        gc.gridwidth = 1;
         gc.fill = GridBagConstraints.HORIZONTAL;
         gc.insets = new Insets(0, 0, 3, 0);
         gc.anchor = GridBagConstraints.FIRST_LINE_START;
-        pnl.add(new JMultilineLabel(tr("Please select the upload strategy:")), gc);
-
-        // -- single request strategy
-        gc.gridx = 0;
-        gc.gridy = 1;
-        gc.weightx = 0.0;
-        gc.weighty = 0.0;
-        gc.gridwidth = 1;
-        gc.anchor = GridBagConstraints.FIRST_LINE_START;
-        pnl.add(rbStrategy.get(UploadStrategy.SINGLE_REQUEST_STRATEGY), gc);
-        gc.gridx = 1;
+        JRadioButton radioButton = rbStrategy.get(UploadStrategy.SINGLE_REQUEST_STRATEGY);
+        radioButton.setText(tr("Upload data in one request"));
+        pnl.add(radioButton, gc);
+        gc.gridx = 3;
         gc.gridy = 1;
         gc.weightx = 1.0;
-        gc.weighty = 0.0;
-        gc.gridwidth = 2;
-        JMultilineLabel lbl = lblStrategies.get(UploadStrategy.SINGLE_REQUEST_STRATEGY);
-        lbl.setText(tr("Upload data in one request"));
-        pnl.add(lbl, gc);
-        gc.gridx = 3;
-        gc.gridy = 1;
-        gc.weightx = 0.0;
         gc.weighty = 0.0;
         gc.gridwidth = 1;
@@ -125,13 +109,7 @@
         gc.weightx = 0.0;
         gc.weighty = 0.0;
-        pnl.add(rbStrategy.get(UploadStrategy.CHUNKED_DATASET_STRATEGY), gc);
-        gc.gridx = 1;
-        gc.gridy = 2;
-        gc.weightx = 1.0;
-        gc.weighty = 0.0;
-        gc.gridwidth = 1;
-        lbl = lblStrategies.get(UploadStrategy.CHUNKED_DATASET_STRATEGY);
-        lbl.setText(tr("Upload data in chunks of objects. Chunk size: "));
-        pnl.add(lbl, gc);
+        radioButton = rbStrategy.get(UploadStrategy.CHUNKED_DATASET_STRATEGY);
+        radioButton.setText(tr("Upload data in chunks of objects. Chunk size: "));
+        pnl.add(radioButton, gc);
         gc.gridx = 2;
         gc.gridy = 2;
@@ -152,13 +130,7 @@
         gc.weightx = 0.0;
         gc.weighty = 0.0;
-        pnl.add(rbStrategy.get(UploadStrategy.INDIVIDUAL_OBJECTS_STRATEGY), gc);
-        gc.gridx = 1;
-        gc.gridy = 3;
-        gc.weightx = 1.0;
-        gc.weighty = 0.0;
-        gc.gridwidth = 2;
-        lbl = lblStrategies.get(UploadStrategy.INDIVIDUAL_OBJECTS_STRATEGY);
-        lbl.setText(tr("Upload each object individually"));
-        pnl.add(lbl, gc);
+        radioButton = rbStrategy.get(UploadStrategy.INDIVIDUAL_OBJECTS_STRATEGY);
+        radioButton.setText(tr("Upload each object individually"));
+        pnl.add(radioButton, gc);
         gc.gridx = 3;
         gc.gridy = 3;
@@ -340,5 +312,5 @@
         if (maxChunkSize > 0 && numUploadedObjects > maxChunkSize) {
             rbStrategy.get(UploadStrategy.SINGLE_REQUEST_STRATEGY).setEnabled(false);
-            JMultilineLabel lbl = lblStrategies.get(UploadStrategy.SINGLE_REQUEST_STRATEGY);
+            JRadioButton lbl = rbStrategy.get(UploadStrategy.SINGLE_REQUEST_STRATEGY);
             lbl.setText(tr("Upload in one request not possible (too many objects to upload)"));
             lbl.setToolTipText(tr("<html>Cannot upload {0} objects in one request because the<br>"
@@ -361,5 +333,5 @@
         } else {
             rbStrategy.get(UploadStrategy.SINGLE_REQUEST_STRATEGY).setEnabled(true);
-            JMultilineLabel lbl = lblStrategies.get(UploadStrategy.SINGLE_REQUEST_STRATEGY);
+            JRadioButton lbl = rbStrategy.get(UploadStrategy.SINGLE_REQUEST_STRATEGY);
             lbl.setText(tr("Upload data in one request"));
             lbl.setToolTipText(null);
Index: /trunk/src/org/openstreetmap/josm/gui/tagging/TagTable.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/TagTable.java	(revision 17708)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/TagTable.java	(revision 17709)
@@ -231,5 +231,5 @@
         AddAction() {
             new ImageProvider("dialogs", "add").getResource().attachImageIcon(this);
-            putValue(SHORT_DESCRIPTION, tr("Add a new tag"));
+            putValue(SHORT_DESCRIPTION, tr("Add Tag"));
             TagTable.this.addPropertyChangeListener(this);
             updateEnabledState();
@@ -265,5 +265,5 @@
         PasteAction() {
             new ImageProvider("pastetags").getResource().attachImageIcon(this);
-            putValue(SHORT_DESCRIPTION, tr("Paste tags from buffer"));
+            putValue(SHORT_DESCRIPTION, tr("Paste Tags"));
             TagTable.this.addPropertyChangeListener(this);
             updateEnabledState();
