Index: trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java	(revision 2157)
+++ trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java	(revision 2158)
@@ -6,5 +6,4 @@
 
 import java.awt.BorderLayout;
-import java.awt.Component;
 import java.awt.Dimension;
 import java.awt.FlowLayout;
@@ -15,7 +14,7 @@
 import java.awt.event.ItemEvent;
 import java.awt.event.ItemListener;
+import java.awt.event.KeyEvent;
 import java.awt.event.WindowAdapter;
 import java.awt.event.WindowEvent;
-import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -29,8 +28,9 @@
 import javax.swing.ButtonGroup;
 import javax.swing.DefaultComboBoxModel;
-import javax.swing.ImageIcon;
+import javax.swing.InputMap;
 import javax.swing.JButton;
 import javax.swing.JCheckBox;
 import javax.swing.JComboBox;
+import javax.swing.JComponent;
 import javax.swing.JDialog;
 import javax.swing.JLabel;
@@ -41,6 +41,5 @@
 import javax.swing.JScrollPane;
 import javax.swing.JTabbedPane;
-import javax.swing.ListCellRenderer;
-import javax.swing.UIManager;
+import javax.swing.KeyStroke;
 import javax.swing.event.ChangeEvent;
 import javax.swing.event.ChangeListener;
@@ -106,4 +105,6 @@
     /** the tabbed pane used below of the list of primitives  */
     private JTabbedPane southTabbedPane;
+    /** the upload button */
+    private JButton btnUpload;
 
     private ChangesetSelectionPanel pnlChangesetSelection;
@@ -124,5 +125,9 @@
     }
 
-
+    /**
+     * builds the content panel for the upload dialog
+     * 
+     * @return the content panel
+     */
     protected JPanel buildContentPanel() {
         JPanel pnl = new JPanel();
@@ -160,4 +165,9 @@
     }
 
+    /**
+     * builds the panel with the OK and CANCEL buttons
+     * 
+     * @return
+     */
     protected JPanel buildActionPanel() {
         JPanel pnl = new JPanel();
@@ -166,9 +176,19 @@
 
         // -- upload button
-        pnl.add(new SideButton(new UploadAction()));
+        UploadAction uploadAction = new UploadAction();
+        pnl.add(btnUpload = new SideButton(uploadAction));
+        btnUpload.setFocusable(true);
+        InputMap inputMap = btnUpload.getInputMap();
+        inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0), "doUpload");
+        btnUpload.getActionMap().put("doUpload", uploadAction);
 
         // -- cancel button
-        pnl.add(new SideButton(new CancelAction()));
-
+        CancelAction cancelAction = new CancelAction();
+        pnl.add(new SideButton(cancelAction));
+        getRootPane().registerKeyboardAction(
+                cancelAction,
+                KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE,0),
+                JComponent.WHEN_IN_FOCUSED_WINDOW
+        );
         return pnl;
     }
@@ -178,4 +198,5 @@
      */
     protected void build() {
+        setTitle(tr("Upload"));
         getContentPane().setLayout(new BorderLayout());
         getContentPane().add(buildContentPanel(), BorderLayout.CENTER);
@@ -312,4 +333,11 @@
     }
 
+    /**
+     * Replies true if the changeset is to be closed after the
+     * next upload
+     * 
+     * @return true if the changeset is to be closed after the
+     * next upload; false, otherwise
+     */
     public boolean isDoCloseAfterUpload() {
         return pnlChangesetSelection.isCloseAfterUpload();
@@ -326,19 +354,34 @@
     }
 
+    /**
+     * Replies the current value for the upload comment
+     * 
+     * @return the current value for the upload comment
+     */
     protected String getUploadComment() {
         switch(southTabbedPane.getSelectedIndex()) {
-        case 0:
-            return pnlChangesetSelection.getUploadComment();
-        case 1:
-            TagModel tm = tagEditorPanel.getModel().get("comment");
-            return tm == null? "" : tm.getValue();
+            case 0:
+                return pnlChangesetSelection.getUploadComment();
+            case 1:
+                TagModel tm = tagEditorPanel.getModel().get("comment");
+                return tm == null? "" : tm.getValue();
         }
         return "";
     }
 
+    /**
+     * Replies true, if the dialog was canceled
+     * 
+     * @return true, if the dialog was canceled
+     */
     public boolean isCanceled() {
         return canceled;
     }
 
+    /**
+     * Sets whether the dialog was canceld
+     * 
+     * @param canceled true, if the dialog is canceled
+     */
     protected void setCanceled(boolean canceled) {
         this.canceled = canceled;
@@ -589,4 +632,11 @@
                     }
             );
+            cmt.getEditor().addActionListener(
+                    new ActionListener() {
+                        public void actionPerformed(ActionEvent e) {
+                            btnUpload.requestFocusInWindow();
+                        }
+                    }
+            );
             pnl.add(cmt, GBC.eol().fill(GBC.HORIZONTAL));
             return pnl;
@@ -702,4 +752,20 @@
         }
 
+        public void prepareDialogForNextUpload(Changeset cs) {
+            if (cs == null || cs.getId() == 0) {
+                rbUseNew.setSelected(true);
+                cbCloseAfterUpload.setSelected(true);
+            } if (cs.getId() == 0) {
+                rbUseNew.setSelected(true);
+                cbCloseAfterUpload.setSelected(true);
+            } else if (cs.isOpen()) {
+                rbExisting.setSelected(true);
+                cbCloseAfterUpload.setSelected(false);
+            } else {
+                rbUseNew.setSelected(true);
+                cbCloseAfterUpload.setSelected(true);
+            }
+        }
+
         /**
          * Replies the current upload comment
@@ -762,5 +828,4 @@
                 tagEditorPanel.getModel().add("created_by", getDefaultCreatedBy());
                 tagEditorPanel.getModel().appendNewTag();
-                rbUseNew.setSelected(true);
             } else if (cs.getId() == 0) {
                 if (cs.get("created_by") == null) {
@@ -769,5 +834,4 @@
                 tagEditorPanel.getModel().initFromPrimitive(cs);
                 tagEditorPanel.getModel().appendNewTag();
-                rbUseNew.setSelected(true);
             } else if (cs.getId() > 0 && cs.isOpen()){
                 if (cs.get("created_by") == null) {
@@ -790,4 +854,5 @@
                 }
             }
+            prepareDialogForNextUpload(cs);
         }
 
