Index: trunk/src/org/openstreetmap/josm/command/VersionConflictResolveCommand.java
===================================================================
--- trunk/src/org/openstreetmap/josm/command/VersionConflictResolveCommand.java	(revision 2300)
+++ trunk/src/org/openstreetmap/josm/command/VersionConflictResolveCommand.java	(revision 2301)
@@ -55,8 +55,10 @@
     public boolean executeCommand() {
         super.executeCommand();
-        conflict.getMy().setOsmId(
-                conflict.getMy().getId(),
-                (int)Math.max(conflict.getMy().getVersion(), conflict.getTheir().getVersion())
-        );
+        if (!conflict.getMy().isNew()) {
+            conflict.getMy().setOsmId(
+                    conflict.getMy().getId(),
+                    (int)Math.max(conflict.getMy().getVersion(), conflict.getTheir().getVersion())
+            );
+        }
         getLayer().getConflicts().remove(conflict);
         rememberConflict(conflict);
Index: trunk/src/org/openstreetmap/josm/gui/ExtendedDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/ExtendedDialog.java	(revision 2300)
+++ trunk/src/org/openstreetmap/josm/gui/ExtendedDialog.java	(revision 2301)
@@ -24,5 +24,5 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.gui.help.HelpBrowserProxy;
-import org.openstreetmap.josm.gui.help.HelpBuilder;
+import org.openstreetmap.josm.gui.help.HelpUtil;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -218,5 +218,5 @@
         if (showHelpButton) {
             buttonsPanel.add(new JButton(new HelpAction()), GBC.std().insets(2,2,2,2));
-            HelpBuilder.setHelpContext(getRootPane(),helpTopic);
+            HelpUtil.setHelpContext(getRootPane(),helpTopic);
         }
 
Index: trunk/src/org/openstreetmap/josm/gui/HelpAwareOptionPane.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/HelpAwareOptionPane.java	(revision 2300)
+++ trunk/src/org/openstreetmap/josm/gui/HelpAwareOptionPane.java	(revision 2301)
@@ -18,5 +18,6 @@
 
 import org.openstreetmap.josm.gui.help.HelpBrowser;
-import org.openstreetmap.josm.gui.help.HelpBuilder;
+import org.openstreetmap.josm.gui.help.HelpBrowserProxy;
+import org.openstreetmap.josm.gui.help.HelpUtil;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.WindowGeometry;
@@ -61,4 +62,47 @@
     }
 
+    static private List<JButton> createOptionButtons(ButtonSpec[] options, String helpTopic) {
+        List<JButton> buttons = new ArrayList<JButton>();
+        if (options == null) {
+            buttons.add(new JButton(tr("OK")));
+        } else {
+            for (ButtonSpec spec: options) {
+                JButton b = new JButton(spec.text);
+                b.setIcon(spec.icon);
+                b.setToolTipText(spec.tooltipText == null? "" : spec.tooltipText);
+                if (helpTopic != null) {
+                    HelpUtil.setHelpContext(b, helpTopic);
+                }
+                b.setFocusable(true);
+                buttons.add(b);
+
+            }
+        }
+        return buttons;
+    }
+
+    static private JButton createHelpButton(final String helpTopic) {
+        JButton b = new JButton(tr("Help"));
+        b.setIcon(ImageProvider.get("help"));
+        b.setToolTipText(tr("Show help information"));
+        HelpUtil.setHelpContext(b, helpTopic);
+        b.addActionListener(
+                new ActionListener() {
+                    public void actionPerformed(ActionEvent e) {
+                        HelpBrowserProxy.getInstance().setUrlForHelpTopic(completeHelpTopic(helpTopic));
+                    }
+                }
+        );
+        return b;
+    }
+
+    static private String completeHelpTopic(String helpTopic) {
+        if (helpTopic == null) return null;
+        if (! helpTopic.startsWith("/")) {
+            helpTopic = "/" + helpTopic;
+        }
+        return "Help" + helpTopic;
+    }
+
     /**
      * Displays an option dialog which is aware of a help context. If <code>helpTopic</code> isn't null,
@@ -67,4 +111,14 @@
      * browser.
      * 
+     * <code>helpTopic</code> is the trailing part of a JOSM online help URL, i.e. the part after the leading
+     * <code>http://josm.openstreetmap.de/wiki/Help</code>. It should start with a leading '/' and it
+     * may include and anchor after a '#'.
+     * 
+     * <strong>Examples</strong>
+     * <ul>
+     *    <li>/Dialogs/RelationEditor</li>
+     *    <li>/Dialogs/RelationEditor#ConflictInData</li>
+     * </ul>
+     *
      * In addition, the option buttons display JOSM icons, similar to ExtendedDialog.
      * 
@@ -79,36 +133,8 @@
      * @return the index of the selected option or {@link JOptionPane#CLOSED_OPTION}
      */
-    static public int showOptionDialog(Component parentComponent, Object msg, String title, int messageType, Icon icon, ButtonSpec[] options, Object defaultOption, final String helpTopic)  {
-        List<JButton> buttons = new ArrayList<JButton>();
-
-        if (options == null) {
-            buttons.add(new JButton(tr("OK")));
-        } else {
-            for (ButtonSpec spec: options) {
-                JButton b = new JButton(spec.text);
-                b.setIcon(spec.icon);
-                b.setToolTipText(spec.tooltipText == null? "" : spec.tooltipText);
-                if (helpTopic != null) {
-                    HelpBuilder.setHelpContext(b, helpTopic);
-                }
-                buttons.add(b);
-
-            }
-        }
+    static public int showOptionDialog(Component parentComponent, Object msg, String title, int messageType, Icon icon, final ButtonSpec[] options, final ButtonSpec defaultOption, final String helpTopic)  {
+        final List<JButton> buttons = createOptionButtons(options, helpTopic);
         if (helpTopic != null) {
-            JButton b = new JButton(tr("Help"));
-            b.setIcon(ImageProvider.get("help"));
-            b.setToolTipText(tr("Show help information"));
-            HelpBuilder.setHelpContext(b, helpTopic);
-            b.addActionListener(
-                    new ActionListener() {
-                        public void actionPerformed(ActionEvent e) {
-                            HelpBrowser browser = new HelpBrowser();
-                            browser.setUrlForHelpTopic("Help/" + helpTopic);
-                            browser.setVisible(true);
-                        }
-                    }
-            );
-            buttons.add(b);
+            buttons.add(createHelpButton(helpTopic));
         }
 
@@ -145,4 +171,19 @@
                         super.windowClosed(e);
                     }
+
+                    @Override
+                    public void windowOpened(WindowEvent e) {
+                        if (defaultOption != null && options != null && options.length > 0) {
+                            int i;
+                            for (i=0; i<options.length;i++) {
+                                if (options[i] == defaultOption) {
+                                    break;
+                                }
+                            }
+                            if (i >= options.length) return; // default option not an option?
+
+                            buttons.get(i).requestFocusInWindow();
+                        }
+                    }
                 }
         );
@@ -155,5 +196,5 @@
         WindowGeometry.centerOnScreen(dialog.getSize()).applySafe(dialog);
         if (helpTopic != null) {
-            HelpBuilder.setHelpContext(dialog.getRootPane(), helpTopic);
+            HelpUtil.setHelpContext(dialog.getRootPane(), helpTopic);
         }
         dialog.setVisible(true);
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java	(revision 2300)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java	(revision 2301)
@@ -46,5 +46,5 @@
 import org.openstreetmap.josm.gui.OsmPrimitivRenderer;
 import org.openstreetmap.josm.gui.SideButton;
-import org.openstreetmap.josm.gui.help.HelpBuilder;
+import org.openstreetmap.josm.gui.help.HelpUtil;
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictResolutionDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictResolutionDialog.java	(revision 2300)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictResolutionDialog.java	(revision 2301)
@@ -30,5 +30,5 @@
 import org.openstreetmap.josm.gui.help.HelpBrowser;
 import org.openstreetmap.josm.gui.help.HelpBrowserProxy;
-import org.openstreetmap.josm.gui.help.HelpBuilder;
+import org.openstreetmap.josm.gui.help.HelpUtil;
 import org.openstreetmap.josm.tools.ImageProvider;
 
@@ -150,5 +150,5 @@
 
         resolver.addPropertyChangeListener(this);
-        HelpBuilder.setHelpContext(this.getRootPane(), "Dialog/ConflictDialog");
+        HelpUtil.setHelpContext(this.getRootPane(), "Dialog/ConflictDialog");
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 2300)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 2301)
@@ -21,4 +21,5 @@
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
+import javax.swing.KeyStroke;
 import javax.swing.ListSelectionModel;
 import javax.swing.SwingUtilities;
@@ -115,6 +116,7 @@
         buttonPanel.add(new SideButton(selectAction), GBC.eol());
 
-
         add(buttonPanel, BorderLayout.SOUTH);
+        displaylist.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE,0), "deleteRelation");
+        displaylist.getActionMap().put("deleteRelation", deleteAction);
 
         // register as layer listener
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java	(revision 2300)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java	(revision 2301)
@@ -30,5 +30,5 @@
 import org.openstreetmap.josm.actions.JosmAction;
 import org.openstreetmap.josm.gui.dialogs.DialogsPanel.Action;
-import org.openstreetmap.josm.gui.help.HelpBuilder;
+import org.openstreetmap.josm.gui.help.HelpUtil;
 import org.openstreetmap.josm.gui.help.Helpful;
 import org.openstreetmap.josm.tools.GBC;
@@ -381,5 +381,5 @@
             }
             setTitle(titleBar.getTitle());
-            HelpBuilder.setHelpContext(getRootPane(), helpTopic());
+            HelpUtil.setHelpContext(getRootPane(), helpTopic());
         }
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 2300)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 2301)
@@ -64,6 +64,8 @@
 import org.openstreetmap.josm.gui.DefaultNameFormatter;
 import org.openstreetmap.josm.gui.ExceptionDialogUtil;
+import org.openstreetmap.josm.gui.HelpAwareOptionPane;
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
 import org.openstreetmap.josm.gui.SideButton;
+import org.openstreetmap.josm.gui.HelpAwareOptionPane.ButtonSpec;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.progress.PleaseWaitProgressMonitor;
@@ -87,5 +89,4 @@
 
     static private final Logger logger = Logger.getLogger(GenericRelationEditor.class.getName());
-    static private final Dimension DEFAULT_EDITOR_DIMENSION = new Dimension(700, 500);
 
     /** the tag table and its model */
@@ -592,10 +593,10 @@
             );
             switch(ret) {
-            case ConditionalOptionPaneUtil.DIALOG_DISABLED_OPTION: return;
-            case JOptionPane.CLOSED_OPTION: return;
-            case JOptionPane.NO_OPTION: return;
-            case JOptionPane.YES_OPTION:
-                memberTableModel.removeMembersReferringTo(toCheck);
-                break;
+                case ConditionalOptionPaneUtil.DIALOG_DISABLED_OPTION: return;
+                case JOptionPane.CLOSED_OPTION: return;
+                case JOptionPane.NO_OPTION: return;
+                case JOptionPane.YES_OPTION:
+                    memberTableModel.removeMembersReferringTo(toCheck);
+                    break;
             }
         }
@@ -628,9 +629,9 @@
             );
             switch(ret) {
-            case ConditionalOptionPaneUtil.DIALOG_DISABLED_OPTION : return true;
-            case JOptionPane.YES_OPTION: return true;
-            case JOptionPane.NO_OPTION: return false;
-            case JOptionPane.CLOSED_OPTION: return false;
-            case JOptionPane.CANCEL_OPTION: throw new AddAbortException();
+                case ConditionalOptionPaneUtil.DIALOG_DISABLED_OPTION : return true;
+                case JOptionPane.YES_OPTION: return true;
+                case JOptionPane.NO_OPTION: return false;
+                case JOptionPane.CLOSED_OPTION: return false;
+                case JOptionPane.CANCEL_OPTION: throw new AddAbortException();
             }
             // should not happen
@@ -1046,9 +1047,20 @@
 
         protected boolean confirmClosingBecauseOfDirtyState() {
-            String [] options = new String[] {
-                    tr("Yes, create a conflict and close"),
-                    tr("No, continue editing")
+            ButtonSpec [] options = new ButtonSpec[] {
+                    new ButtonSpec(
+                            tr("Yes, create a conflict and close"),
+                            ImageProvider.get("ok"),
+                            tr("Click to create a conflict and close this relation editor") ,
+                            null /* no specific help topic */
+                    ),
+                    new ButtonSpec(
+                            tr("No, continue editing"),
+                            ImageProvider.get("cancel"),
+                            tr("Click to to return to the relation editor and to resume relation editing") ,
+                            null /* no specific help topic */
+                    )
             };
-            int ret = JOptionPane.showOptionDialog(
+
+            int ret = HelpAwareOptionPane.showOptionDialog(
                     Main.parent,
                     tr("<html>This relation has been changed outside of the editor.<br>"
@@ -1057,16 +1069,11 @@
                             + "Do you want to create a conflict and close the editor?</html>"),
                             tr("Conflict in data"),
-                            JOptionPane.YES_NO_OPTION,
                             JOptionPane.WARNING_MESSAGE,
                             null,
                             options,
-                            options[0]
+                            options[0], // OK is default
+                            "/Dialog/RelationEditor#RelationChangedOutsideOfEditor"
             );
-            switch(ret) {
-            case JOptionPane.CANCEL_OPTION: return false;
-            case JOptionPane.YES_OPTION: return true;
-            case JOptionPane.NO_OPTION: return false;
-            }
-            return false;
+            return ret == 0;
         }
 
@@ -1240,8 +1247,8 @@
             );
             switch(ret) {
-            case JOptionPane.YES_OPTION: return true;
-            case ConditionalOptionPaneUtil.DIALOG_DISABLED_OPTION: return true;
-            default:
-                return false;
+                case JOptionPane.YES_OPTION: return true;
+                case ConditionalOptionPaneUtil.DIALOG_DISABLED_OPTION: return true;
+                default:
+                    return false;
             }
         }
Index: trunk/src/org/openstreetmap/josm/gui/help/HelpBuilder.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/help/HelpBuilder.java	(revision 2300)
+++ 	(revision )
@@ -1,24 +1,0 @@
-// License: GPL. For details, see LICENSE file.
-package org.openstreetmap.josm.gui.help;
-
-import java.awt.event.KeyEvent;
-
-import javax.swing.JComponent;
-import javax.swing.KeyStroke;
-
-import org.openstreetmap.josm.Main;
-
-public class HelpBuilder {
-
-    /**
-     * Makes a component aware of context sensitive help
-     * 
-     * @param component the component
-     * @param topic the help topic
-     */
-    static public void setHelpContext(JComponent component, String topic) {
-        component.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_F1,0), "help");
-        component.getActionMap().put("help", Main.main.menu.help);
-        component.putClientProperty("help", topic);
-    }
-}
Index: trunk/src/org/openstreetmap/josm/gui/help/HelpUtil.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/help/HelpUtil.java	(revision 2301)
+++ trunk/src/org/openstreetmap/josm/gui/help/HelpUtil.java	(revision 2301)
@@ -0,0 +1,25 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.help;
+
+import java.awt.event.KeyEvent;
+
+import javax.swing.JComponent;
+import javax.swing.KeyStroke;
+
+import org.openstreetmap.josm.Main;
+
+public class HelpUtil {
+
+    /**
+     * Makes a component aware of context sensitive help.
+     * 
+     * @param component the component
+     * @param topic the help topic
+     */
+    static public void setHelpContext(JComponent component, String topic) {
+        component.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_F1,0), "help");
+        component.getActionMap().put("help", Main.main.menu.help);
+        component.putClientProperty("help", topic);
+    }
+
+}
Index: trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java	(revision 2300)
+++ trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java	(revision 2301)
@@ -53,5 +53,5 @@
 import org.openstreetmap.josm.gui.SideButton;
 import org.openstreetmap.josm.gui.help.ContextSensitiveHelpAction;
-import org.openstreetmap.josm.gui.help.HelpBuilder;
+import org.openstreetmap.josm.gui.help.HelpUtil;
 import org.openstreetmap.josm.gui.tagging.TagEditorModel;
 import org.openstreetmap.josm.gui.tagging.TagEditorPanel;
@@ -194,5 +194,5 @@
 
         pnl.add(new SideButton(new ContextSensitiveHelpAction("/Help/Dialogs/UploadDialog")));
-        HelpBuilder.setHelpContext(getRootPane(),"/Help/Dialogs/UploadDialog");
+        HelpUtil.setHelpContext(getRootPane(),"/Help/Dialogs/UploadDialog");
         return pnl;
     }
Index: trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 2300)
+++ trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 2301)
@@ -66,5 +66,5 @@
 import org.openstreetmap.josm.gui.dialogs.LayerListPopup;
 import org.openstreetmap.josm.gui.help.HelpBrowser;
-import org.openstreetmap.josm.gui.help.HelpBuilder;
+import org.openstreetmap.josm.gui.help.HelpUtil;
 import org.openstreetmap.josm.tools.DateUtils;
 import org.openstreetmap.josm.tools.GBC;
@@ -383,5 +383,5 @@
             dialog.setContentPane(pane);
             dialog.pack();
-            HelpBuilder.setHelpContext(dialog.getRootPane(), "Concepts/Conflict");
+            HelpUtil.setHelpContext(dialog.getRootPane(), "Concepts/Conflict");
             WindowGeometry.centerOnScreen(dialog.getSize()).applySafe(dialog);
             dialog.setVisible(true);
