Index: trunk/src/org/openstreetmap/josm/actions/DownloadReferrersAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/DownloadReferrersAction.java	(revision 2252)
+++ trunk/src/org/openstreetmap/josm/actions/DownloadReferrersAction.java	(revision 2253)
@@ -35,6 +35,6 @@
 
     public DownloadReferrersAction() {
-        super(tr("Download referrers from OSM..."), "downloadreferrers", tr("Download primitives referring to one of the selected primitives"),
-                Shortcut.registerShortcut("file:downloadreferrers", tr("File: {0}", tr("Download referrers...")), KeyEvent.VK_D, Shortcut.GROUPS_ALT2+Shortcut.GROUP_HOTKEY), true);
+        super(tr("Download parent ways/relations..."), "downloadreferrers", tr("Download primitives referring to one of the selected primitives"),
+                Shortcut.registerShortcut("file:downloadreferrers", tr("File: {0}", tr("Download parent ways/relations ...")), KeyEvent.VK_D, Shortcut.GROUPS_ALT2+Shortcut.GROUP_HOTKEY), true);
     }
 
Index: trunk/src/org/openstreetmap/josm/actions/UpdateDataAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/UpdateDataAction.java	(revision 2252)
+++ trunk/src/org/openstreetmap/josm/actions/UpdateDataAction.java	(revision 2253)
@@ -17,7 +17,7 @@
 public class UpdateDataAction extends JosmAction{
     public UpdateDataAction() {
-        super(tr("Update Data"),
+        super(tr("Update data"),
                 "updatedata",
-                tr("Updates the current data layer from the server (re-downloads data)"),
+                tr("Updates the objects in the current data layer from the server "),
                 Shortcut.registerShortcut("file:updatedata",
                         tr("Update Data"),
Index: trunk/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java	(revision 2252)
+++ trunk/src/org/openstreetmap/josm/actions/UpdateSelectionAction.java	(revision 2253)
@@ -87,7 +87,7 @@
      */
     public UpdateSelectionAction() {
-        super(tr("Update Selection"),
+        super(tr("Update selections"),
                 "updateselection",
-                tr("Updates the currently selected primitives from the server"),
+                tr("Updates the currently selected objects from the server (re-downloads data)"),
                 Shortcut.registerShortcut("file:updateselection",
                         tr("Update Selection"),
Index: trunk/src/org/openstreetmap/josm/actions/UploadAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/UploadAction.java	(revision 2252)
+++ trunk/src/org/openstreetmap/josm/actions/UploadAction.java	(revision 2253)
@@ -5,4 +5,5 @@
 
 import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
 import java.awt.event.KeyEvent;
 import java.io.IOException;
@@ -17,4 +18,6 @@
 import java.util.regex.Pattern;
 
+import javax.swing.JButton;
+import javax.swing.JDialog;
 import javax.swing.JOptionPane;
 
@@ -33,4 +36,6 @@
 import org.openstreetmap.josm.gui.ExceptionDialogUtil;
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
+import org.openstreetmap.josm.gui.help.HelpBrowser;
+import org.openstreetmap.josm.gui.help.HelpBuilder;
 import org.openstreetmap.josm.gui.io.UploadDialog;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
@@ -44,5 +49,7 @@
 import org.openstreetmap.josm.io.OsmTransferException;
 import org.openstreetmap.josm.tools.DateUtils;
+import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Shortcut;
+import org.openstreetmap.josm.tools.WindowGeometry;
 import org.xml.sax.SAXException;
 
@@ -114,6 +121,6 @@
 
     public UploadAction() {
-        super(tr("Upload to OSM..."), "upload", tr("Upload all changes to the OSM server."),
-                Shortcut.registerShortcut("file:upload", tr("File: {0}", tr("Upload to OSM...")), KeyEvent.VK_U, Shortcut.GROUPS_ALT1+Shortcut.GROUP_HOTKEY), true);
+        super(tr("Upload data"), "upload", tr("Upload all changes in the current data layer to the OSM server"),
+                Shortcut.registerShortcut("file:upload", tr("File: {0}", tr("Upload data")), KeyEvent.VK_U, Shortcut.GROUPS_ALT1+Shortcut.GROUP_HOTKEY), true);
     }
 
@@ -222,11 +229,15 @@
      * @param myVersion  the version of the primitive in the local dataset
      */
-    protected void handleUploadConflictForKnownConflict(OsmPrimitiveType primitiveType, long id, String serverVersion, String myVersion) {
-        Object[] options = new Object[] {
-                tr("Synchronize {0} {1} only", tr(primitiveType.getAPIName()), id),
-                tr("Synchronize entire dataset"),
-                tr("Cancel")
+    protected void handleUploadConflictForKnownConflict(final OsmPrimitiveType primitiveType, final long id, String serverVersion, String myVersion) {
+        JButton[] options = new JButton[] {
+                new JButton(tr("Synchronize {0} {1} only", tr(primitiveType.getAPIName()), id)),
+                new JButton(tr("Synchronize entire dataset")),
+                new JButton(tr("Cancel")),
+                new JButton(tr("Help"))
         };
-        Object defaultOption = options[0];
+        options[0].setIcon(ImageProvider.get("updatedata"));
+        options[1].setIcon(ImageProvider.get("updatedata"));
+        options[2].setIcon(ImageProvider.get("cancel"));
+        options[3].setIcon(ImageProvider.get("help"));
         String msg =  tr("<html>Uploading <strong>failed</strong> because the server has a newer version of one<br>"
                 + "of your nodes, ways, or relations.<br>"
@@ -238,26 +249,55 @@
                 + "Click <strong>{6}</strong> to abort and continue editing.<br></html>",
                 tr(primitiveType.getAPIName()), id, serverVersion, myVersion,
-                options[0], options[1], options[2]
-        );
-        int optionsType = JOptionPane.YES_NO_CANCEL_OPTION;
-        int ret = JOptionPane.showOptionDialog(
-                null,
+                options[0].getText(), options[1].getText(), options[2].getText()
+        );
+        final JOptionPane pane = new JOptionPane(
                 msg,
-                tr("Conflict detected"),
-                optionsType,
                 JOptionPane.ERROR_MESSAGE,
+                JOptionPane.DEFAULT_OPTION,
                 null,
                 options,
-                defaultOption
-        );
-        switch(ret) {
-            case JOptionPane.CLOSED_OPTION: return;
-            case JOptionPane.CANCEL_OPTION: return;
-            case 0: synchronizePrimitive(primitiveType, id); break;
-            case 1: synchronizeDataSet(); break;
-            default:
-                // should not happen
-                throw new IllegalStateException(tr("Unexpected return value. Got {0}.", ret));
-        }
+                options[0]
+        );
+        final JDialog dialog = new JDialog(
+                JOptionPane.getFrameForComponent(Main.parent),
+                tr("Conflicts detected"),
+                true);
+        options[0].addActionListener(
+                new ActionListener() {
+                    public void actionPerformed(ActionEvent e) {
+                        dialog.setVisible(false);
+                        synchronizePrimitive(primitiveType, id);
+                    }
+                }
+        );
+        options[1].addActionListener(
+                new ActionListener() {
+                    public void actionPerformed(ActionEvent e) {
+                        dialog.setVisible(false);
+                        synchronizeDataSet();
+                    }
+                }
+        );
+        options[2].addActionListener(
+                new ActionListener() {
+                    public void actionPerformed(ActionEvent e) {
+                        dialog.setVisible(false);
+                    }
+                }
+        );
+        options[3].addActionListener(
+                new ActionListener() {
+                    public void actionPerformed(ActionEvent e) {
+                        HelpBrowser b = new HelpBrowser();
+                        b.setUrlForHelpTopic("Help/Concepts/Conflict");
+                        b.setVisible(true);
+                    }
+                }
+        );
+        dialog.setContentPane(pane);
+        dialog.pack();
+        HelpBuilder.setHelpContext(dialog.getRootPane(), "Concepts/Conflict");
+        WindowGeometry.centerOnScreen(dialog.getSize()).applySafe(dialog);
+        dialog.setVisible(true);
     }
 
@@ -268,7 +308,8 @@
      */
     protected void handleUploadConflictForUnknownConflict() {
-        Object[] options = new Object[] {
-                tr("Synchronize entire dataset"),
-                tr("Cancel")
+        JButton[] options = new JButton[] {
+                new JButton(tr("Synchronize entire dataset")),
+                new JButton(tr("Cancel")),
+                new JButton(tr("Help"))
         };
         Object defaultOption = options[0];
@@ -278,25 +319,48 @@
                 + "Click <strong>{0}</strong> to synchronize the entire local dataset with the server.<br>"
                 + "Click <strong>{1}</strong> to abort and continue editing.<br></html>",
-                options[0], options[1]
-        );
-        int optionsType = JOptionPane.YES_NO_OPTION;
-        int ret = JOptionPane.showOptionDialog(
-                null,
+                options[0].getText(), options[1].getText()
+        );
+        final JOptionPane pane = new JOptionPane(
                 msg,
-                tr("Conflict detected"),
-                optionsType,
                 JOptionPane.ERROR_MESSAGE,
+                JOptionPane.DEFAULT_OPTION,
                 null,
                 options,
-                defaultOption
-        );
-        switch(ret) {
-            case JOptionPane.CLOSED_OPTION: return;
-            case 1: return;
-            case 0: synchronizeDataSet(); break;
-            default:
-                // should not happen
-                throw new IllegalStateException(tr("Unexpected return value. Got {0}.", ret));
-        }
+                options[0]
+        );
+        final JDialog dialog = new JDialog(
+                JOptionPane.getFrameForComponent(Main.parent),
+                tr("Conflicts detected"),
+                true);
+
+        options[0].addActionListener(
+                new ActionListener() {
+                    public void actionPerformed(ActionEvent e) {
+                        dialog.setVisible(false);
+                        synchronizeDataSet();
+                    }
+                }
+        );
+        options[1].addActionListener(
+                new ActionListener() {
+                    public void actionPerformed(ActionEvent e) {
+                        dialog.setVisible(false);
+                    }
+                }
+        );
+        options[2].addActionListener(
+                new ActionListener() {
+                    public void actionPerformed(ActionEvent e) {
+                        HelpBrowser b = new HelpBrowser();
+                        b.setUrlForHelpTopic("Help/Concepts/Conflict");
+                        b.setVisible(true);
+                    }
+                }
+        );
+        dialog.setContentPane(pane);
+        dialog.pack();
+        HelpBuilder.setHelpContext(dialog.getRootPane(), "Concepts/Conflict");
+        WindowGeometry.centerOnScreen(dialog.getSize()).applySafe(dialog);
+        dialog.setVisible(true);
     }
 
Index: trunk/src/org/openstreetmap/josm/actions/UploadSelectionAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/UploadSelectionAction.java	(revision 2252)
+++ trunk/src/org/openstreetmap/josm/actions/UploadSelectionAction.java	(revision 2253)
@@ -44,7 +44,7 @@
     public UploadSelectionAction() {
         super(
-                tr("Upload selection..."),
+                tr("Upload selection"),
                 "uploadselection",
-                tr("Upload the current selection to the OSM server."),
+                tr("Upload all changes in the current current selection to the OSM server."),
                 null, /* no shortcut */
                 true);
Index: trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java	(revision 2252)
+++ trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTask.java	(revision 2253)
@@ -21,5 +21,4 @@
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
-import org.openstreetmap.josm.gui.progress.NullProgressMonitor;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.io.BoundingBoxDownloader;
@@ -29,5 +28,4 @@
 import org.openstreetmap.josm.tools.ExceptionUtil;
 import org.xml.sax.SAXException;
-
 
 /**
Index: trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTaskList.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTaskList.java	(revision 2252)
+++ trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTaskList.java	(revision 2253)
@@ -166,5 +166,5 @@
         for (OsmPrimitive primitive : ds.relations) {
             if (! primitive.incomplete && primitive.getId() == 0) {
-                ret.add(primitive);;
+                ret.add(primitive);
             }
         }
@@ -232,7 +232,7 @@
         );
         switch(ret) {
-        case JOptionPane.CLOSED_OPTION: return;
-        case JOptionPane.NO_OPTION: return;
-        case JOptionPane.YES_OPTION: updatePotentiallyDeletedPrimitives(potentiallyDeleted); break;
+            case JOptionPane.CLOSED_OPTION: return;
+            case JOptionPane.NO_OPTION: return;
+            case JOptionPane.YES_OPTION: updatePotentiallyDeletedPrimitives(potentiallyDeleted); break;
         }
     }
Index: trunk/src/org/openstreetmap/josm/gui/MainMenu.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MainMenu.java	(revision 2252)
+++ trunk/src/org/openstreetmap/josm/gui/MainMenu.java	(revision 2253)
@@ -207,8 +207,10 @@
         add(fileMenu, download);
         add(fileMenu, downloadReferrers);
+        add(fileMenu, update);
+        add(fileMenu, updateSelection);
+        fileMenu.addSeparator();
         add(fileMenu, upload);
         add(fileMenu, uploadSelection);
-        add(fileMenu, update);
-        add(fileMenu, updateSelection);
+        fileMenu.addSeparator();
         add(fileMenu, closeChangesetAction);
         fileMenu.addSeparator();
Index: trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 2252)
+++ trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 2253)
@@ -18,6 +18,9 @@
 import java.awt.TexturePaint;
 import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
 import java.awt.geom.Area;
 import java.awt.image.BufferedImage;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
 import java.io.File;
 import java.util.ArrayList;
@@ -30,4 +33,6 @@
 import javax.swing.AbstractAction;
 import javax.swing.Icon;
+import javax.swing.JButton;
+import javax.swing.JDialog;
 import javax.swing.JLabel;
 import javax.swing.JMenuItem;
@@ -62,7 +67,10 @@
 import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
 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.tools.DateUtils;
 import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.ImageProvider;
+import org.openstreetmap.josm.tools.WindowGeometry;
 
 /**
@@ -338,12 +346,46 @@
             sb.append("<br>").append(msg2);
         }
+        sb.append("<br>").append(tr("Please consult the Conflict List Dialog<br>and manually resolve them."));
         sb.append("</html>");
         if (numNewConflicts > 0) {
-            JOptionPane.showMessageDialog(
-                    Main.parent,
+            JButton[] options = new JButton[] {
+                    new JButton(tr("OK")),
+                    new JButton(tr("Help"))
+            };
+            options[0].setIcon(ImageProvider.get("ok"));
+            options[1].setIcon(ImageProvider.get("help"));
+            final JOptionPane pane = new JOptionPane(
                     sb.toString(),
+                    JOptionPane.WARNING_MESSAGE,
+                    JOptionPane.DEFAULT_OPTION,
+                    null,
+                    options,
+                    options[0]
+            );
+            final JDialog dialog = new JDialog(
+                    JOptionPane.getFrameForComponent(Main.parent),
                     tr("Conflicts detected"),
-                    JOptionPane.WARNING_MESSAGE
+                    true);
+            options[0].addActionListener(
+                    new ActionListener() {
+                        public void actionPerformed(ActionEvent e) {
+                            dialog.setVisible(false);
+                        }
+                    }
             );
+            options[1].addActionListener(
+                    new ActionListener() {
+                        public void actionPerformed(ActionEvent e) {
+                            HelpBrowser b = new HelpBrowser();
+                            b.setUrlForHelpTopic("Help/Concepts/Conflict");
+                            b.setVisible(true);
+                        }
+                    }
+            );
+            dialog.setContentPane(pane);
+            dialog.pack();
+            HelpBuilder.setHelpContext(dialog.getRootPane(), "Concepts/Conflict");
+            WindowGeometry.centerOnScreen(dialog.getSize()).applySafe(dialog);
+            dialog.setVisible(true);
         }
     }
