Index: trunk/src/org/openstreetmap/josm/actions/OpenFileAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/OpenFileAction.java	(revision 3500)
+++ trunk/src/org/openstreetmap/josm/actions/OpenFileAction.java	(revision 3501)
@@ -112,15 +112,11 @@
             msg.append("</ul>");
 
-            SwingUtilities.invokeLater(new Runnable() {
-                public void run() {
-                    HelpAwareOptionPane.showOptionDialog(
-                            Main.parent,
-                            msg.toString(),
-                            tr("Warning"),
-                            JOptionPane.WARNING_MESSAGE,
-                            HelpUtil.ht("/Action/OpenFile#ImporterCantImportFiles")
-                    );
-                }
-            });
+            HelpAwareOptionPane.showMessageDialogInEDT(
+                    Main.parent,
+                    msg.toString(),
+                    tr("Warning"),
+                    JOptionPane.WARNING_MESSAGE,
+                    HelpUtil.ht("/Action/OpenFile#ImporterCantImportFiles")
+            );
         }
 
@@ -142,15 +138,11 @@
             msg.append("</ul>");
             
-            SwingUtilities.invokeLater(new Runnable() {
-                public void run() {
-                    HelpAwareOptionPane.showOptionDialog(
-                            Main.parent,
-                            msg.toString(),
-                            tr("Warning"),
-                            JOptionPane.WARNING_MESSAGE,
-                            HelpUtil.ht("/Action/OpenFile#MissingImporterForFiles")
-                    );
-                }
-            });
+            HelpAwareOptionPane.showMessageDialogInEDT(
+                    Main.parent,
+                    msg.toString(),
+                    tr("Warning"),
+                    JOptionPane.WARNING_MESSAGE,
+                    HelpUtil.ht("/Action/OpenFile#MissingImporterForFiles")
+            );
         }
 
@@ -205,8 +197,4 @@
                 if (!filesNotMatchingWithImporter.isEmpty()) {
                     alertFilesNotMatchingWithImporter(filesNotMatchingWithImporter, chosenImporter);
-                    // TODO when changing to Java 6: Don't cancel the 
-                    // task here but use different modality. (Currently 2 dialogs
-                    // would block each other.)
-                    return;
                 }
                 if (!filesMatchingWithImporter.isEmpty()) {
@@ -230,8 +218,4 @@
                 if (!filesWithUnknownImporter.isEmpty()) {
                     alertFilesWithUnknownImporter(filesWithUnknownImporter);
-                    // TODO when changing to Java 6: Don't cancel the 
-                    // task here but use different modality. (Currently 2 dialogs
-                    // would block each other.)
-                    return;
                 }
                 List<FileImporter> ims = new ArrayList<FileImporter>(map.keySet());
Index: trunk/src/org/openstreetmap/josm/actions/RenameLayerAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/RenameLayerAction.java	(revision 3500)
+++ trunk/src/org/openstreetmap/josm/actions/RenameLayerAction.java	(revision 3501)
@@ -5,4 +5,5 @@
 import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
 
+import java.awt.Dialog.ModalityType;
 import java.awt.event.ActionEvent;
 import java.io.File;
@@ -64,5 +65,5 @@
         };
         final JDialog dlg = optionPane.createDialog(Main.parent, tr("Rename layer"));
-        dlg.setModal(true);
+        dlg.setModalityType(ModalityType.DOCUMENT_MODAL);
         dlg.setVisible(true);
 
Index: trunk/src/org/openstreetmap/josm/gui/ExtendedDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/ExtendedDialog.java	(revision 3500)
+++ trunk/src/org/openstreetmap/josm/gui/ExtendedDialog.java	(revision 3501)
@@ -125,5 +125,5 @@
     public ExtendedDialog(Component parent, String title, String[] buttonTexts,
             boolean modal, boolean disposeOnClose) {
-        super(JOptionPane.getFrameForComponent(parent), title, modal);
+        super(JOptionPane.getFrameForComponent(parent), title, modal ? ModalityType.DOCUMENT_MODAL : ModalityType.MODELESS);
         this.parent = parent;
         this.modal = modal;
Index: trunk/src/org/openstreetmap/josm/gui/HelpAwareOptionPane.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/HelpAwareOptionPane.java	(revision 3500)
+++ trunk/src/org/openstreetmap/josm/gui/HelpAwareOptionPane.java	(revision 3501)
@@ -5,4 +5,5 @@
 
 import java.awt.Component;
+import java.awt.Dialog.ModalityType;
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
@@ -21,4 +22,5 @@
 import javax.swing.JOptionPane;
 import javax.swing.KeyStroke;
+import javax.swing.SwingUtilities;
 
 import org.openstreetmap.josm.gui.help.HelpBrowser;
@@ -181,35 +183,32 @@
                 JOptionPane.getFrameForComponent(parentComponent),
                 title,
-                true
+                ModalityType.DOCUMENT_MODAL
         );
         dialog.setContentPane(pane);
-        dialog.addWindowListener(
-                new WindowAdapter() {
-
-                    @Override
-                    public void windowClosing(WindowEvent e) {
-                        pane.setValue(JOptionPane.CLOSED_OPTION);
-                        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) {
-                                buttons.get(0).requestFocusInWindow();
-                            }
-                            buttons.get(i).requestFocusInWindow();
-                        } else {
-                            buttons.get(0).requestFocusInWindow();
+        dialog.addWindowListener(new WindowAdapter() {
+            @Override
+            public void windowClosing(WindowEvent e) {
+                pane.setValue(JOptionPane.CLOSED_OPTION);
+                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) {
+                        buttons.get(0).requestFocusInWindow();
+                    }
+                    buttons.get(i).requestFocusInWindow();
+                } else {
+                    buttons.get(0).requestFocusInWindow();
                 }
-        );
+            }
+        });
         dialog.getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE,0), "close");
         dialog.getRootPane().getActionMap().put("close", new AbstractAction() {
@@ -256,3 +255,18 @@
         return showOptionDialog(parentComponent, msg, title, messageType, null,null,null, helpTopic);
     }
+
+    /**
+     * Run it in Event Dispatch Thread.
+     * This version does not return anything, so it is more like showMessageDialog.
+     *
+     * It can be used, when you need to show a message dialog from a worker thread,
+     * e.g. from PleaseWaitRunnable
+     */
+    static public void showMessageDialogInEDT(final Component parentComponent, final Object msg, final String title, final int messageType, final String helpTopic)  {
+        SwingUtilities.invokeLater(new Runnable() {
+            public void run() {
+                showOptionDialog(parentComponent, msg, title, messageType, null, null, null, helpTopic);
+            }
+        });
+    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/PleaseWaitDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/PleaseWaitDialog.java	(revision 3500)
+++ trunk/src/org/openstreetmap/josm/gui/PleaseWaitDialog.java	(revision 3501)
@@ -72,5 +72,5 @@
 
     public PleaseWaitDialog(Component parent) {
-        super(JOptionPane.getFrameForComponent(parent), true);
+        super(JOptionPane.getFrameForComponent(parent), ModalityType.DOCUMENT_MODAL);
         initDialog();
     }
Index: trunk/src/org/openstreetmap/josm/gui/actionsupport/DeleteFromRelationConfirmationDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/actionsupport/DeleteFromRelationConfirmationDialog.java	(revision 3500)
+++ trunk/src/org/openstreetmap/josm/gui/actionsupport/DeleteFromRelationConfirmationDialog.java	(revision 3501)
@@ -170,5 +170,5 @@
 
     public DeleteFromRelationConfirmationDialog() {
-        super(JOptionPane.getFrameForComponent(Main.parent), "", true /* modal */);
+        super(JOptionPane.getFrameForComponent(Main.parent), "", ModalityType.DOCUMENT_MODAL);
         build();
     }
Index: trunk/src/org/openstreetmap/josm/gui/conflict/tags/CombinePrimitiveResolverDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/tags/CombinePrimitiveResolverDialog.java	(revision 3500)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/tags/CombinePrimitiveResolverDialog.java	(revision 3501)
@@ -190,5 +190,5 @@
 
     public CombinePrimitiveResolverDialog(Component owner) {
-        super(JOptionPane.getFrameForComponent(owner), true /* modal */);
+        super(JOptionPane.getFrameForComponent(owner), ModalityType.DOCUMENT_MODAL);
         build();
     }
Index: trunk/src/org/openstreetmap/josm/gui/conflict/tags/PasteTagsConflictResolverDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/conflict/tags/PasteTagsConflictResolverDialog.java	(revision 3500)
+++ trunk/src/org/openstreetmap/josm/gui/conflict/tags/PasteTagsConflictResolverDialog.java	(revision 3501)
@@ -69,5 +69,5 @@
 
     public PasteTagsConflictResolverDialog(Component owner) {
-        super(JOptionPane.getFrameForComponent(owner),true);
+        super(JOptionPane.getFrameForComponent(owner), ModalityType.DOCUMENT_MODAL);
         build();
         iconResolved = ImageProvider.get("dialogs/conflict", "tagconflictresolved");
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictResolutionDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictResolutionDialog.java	(revision 3500)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictResolutionDialog.java	(revision 3501)
@@ -176,5 +176,5 @@
 
     public ConflictResolutionDialog(Component parent) {
-        super(JOptionPane.getFrameForComponent(parent), true /* modal */);
+        super(JOptionPane.getFrameForComponent(parent), ModalityType.DOCUMENT_MODAL);
         build();
     }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/LatLonDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/LatLonDialog.java	(revision 3500)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/LatLonDialog.java	(revision 3501)
@@ -118,5 +118,5 @@
 
     public LatLonDialog(Component parent, String title, String help) {
-        super(JOptionPane.getFrameForComponent(parent), true /* modal */);
+        super(JOptionPane.getFrameForComponent(parent), ModalityType.DOCUMENT_MODAL);
         this.help = help;
         setTitle(title);
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/query/ChangesetQueryDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/query/ChangesetQueryDialog.java	(revision 3500)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/query/ChangesetQueryDialog.java	(revision 3501)
@@ -98,10 +98,10 @@
 
     public ChangesetQueryDialog(Dialog parent) {
-        super(parent, true /* modal */);
+        super(parent, ModalityType.DOCUMENT_MODAL);
         build();
     }
 
     public ChangesetQueryDialog(Frame parent) {
-        super(parent, true /* modal */);
+        super(parent, ModalityType.DOCUMENT_MODAL);
         build();
     }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 3500)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 3501)
@@ -8,4 +8,5 @@
 import java.awt.Component;
 import java.awt.Cursor;
+import java.awt.Dialog.ModalityType;
 import java.awt.Dimension;
 import java.awt.Font;
@@ -260,4 +261,5 @@
         };
         final JDialog dlg = optionPane.createDialog(Main.parent, tr("Change values?"));
+        dlg.setModalityType(ModalityType.DOCUMENT_MODAL);
 
         values.getEditor().addActionListener(new ActionListener() {
@@ -401,4 +403,5 @@
         };
         JDialog dialog = pane.createDialog(Main.parent, tr("Change values?"));
+        dialog.setModalityType(ModalityType.DOCUMENT_MODAL);
         dialog.setVisible(true);
 
Index: trunk/src/org/openstreetmap/josm/gui/download/DownloadDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/download/DownloadDialog.java	(revision 3500)
+++ trunk/src/org/openstreetmap/josm/gui/download/DownloadDialog.java	(revision 3501)
@@ -177,5 +177,5 @@
 
     public DownloadDialog(Component parent) {
-        super(JOptionPane.getFrameForComponent(parent),tr("Download"), true /* modal */);
+        super(JOptionPane.getFrameForComponent(parent),tr("Download"), ModalityType.DOCUMENT_MODAL);
         getContentPane().setLayout(new BorderLayout());
         getContentPane().add(buildMainPanel(), BorderLayout.CENTER);
Index: trunk/src/org/openstreetmap/josm/gui/help/HelpBrowser.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/help/HelpBrowser.java	(revision 3500)
+++ trunk/src/org/openstreetmap/josm/gui/help/HelpBrowser.java	(revision 3501)
@@ -24,6 +24,6 @@
 import javax.swing.JButton;
 import javax.swing.JComponent;
+import javax.swing.JDialog;
 import javax.swing.JEditorPane;
-import javax.swing.JFrame;
 import javax.swing.JOptionPane;
 import javax.swing.JPanel;
@@ -51,5 +51,5 @@
 import org.openstreetmap.josm.tools.WindowGeometry;
 
-public class HelpBrowser extends JFrame {
+public class HelpBrowser extends JDialog {
     static private final Logger logger = Logger.getLogger(HelpBrowser.class.getName());
 
Index: trunk/src/org/openstreetmap/josm/gui/io/CloseChangesetDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/CloseChangesetDialog.java	(revision 3500)
+++ trunk/src/org/openstreetmap/josm/gui/io/CloseChangesetDialog.java	(revision 3501)
@@ -111,5 +111,5 @@
 
     public CloseChangesetDialog() {
-        super(JOptionPane.getFrameForComponent(Main.parent), true /* modal */);
+        super(JOptionPane.getFrameForComponent(Main.parent), ModalityType.DOCUMENT_MODAL);
         build();
     }
Index: trunk/src/org/openstreetmap/josm/gui/io/CredentialDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/CredentialDialog.java	(revision 3500)
+++ trunk/src/org/openstreetmap/josm/gui/io/CredentialDialog.java	(revision 3501)
@@ -93,5 +93,5 @@
 
     public CredentialDialog() {
-        setModal(true);
+        setModalityType(ModalityType.DOCUMENT_MODAL);
         try {
             setAlwaysOnTop(true);
Index: trunk/src/org/openstreetmap/josm/gui/io/SaveLayersDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/SaveLayersDialog.java	(revision 3500)
+++ trunk/src/org/openstreetmap/josm/gui/io/SaveLayersDialog.java	(revision 3501)
@@ -126,5 +126,5 @@
 
     public SaveLayersDialog(Component parent) {
-        super(JOptionPane.getFrameForComponent(parent), true /* modal */);
+        super(JOptionPane.getFrameForComponent(parent), ModalityType.DOCUMENT_MODAL);
         build();
     }
Index: trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java	(revision 3500)
+++ trunk/src/org/openstreetmap/josm/gui/io/UploadDialog.java	(revision 3501)
@@ -231,5 +231,5 @@
      */
     public UploadDialog() {
-        super(JOptionPane.getFrameForComponent(Main.parent), true /* modal */);
+        super(JOptionPane.getFrameForComponent(Main.parent), ModalityType.DOCUMENT_MODAL);
         build();
     }
Index: trunk/src/org/openstreetmap/josm/gui/io/UploadSelectionDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/io/UploadSelectionDialog.java	(revision 3500)
+++ trunk/src/org/openstreetmap/josm/gui/io/UploadSelectionDialog.java	(revision 3501)
@@ -115,5 +115,5 @@
 
     public UploadSelectionDialog() {
-        super(JOptionPane.getFrameForComponent(Main.parent), true /* modal */);
+        super(JOptionPane.getFrameForComponent(Main.parent), ModalityType.DOCUMENT_MODAL);
         build();
     }
Index: trunk/src/org/openstreetmap/josm/gui/oauth/OAuthAuthorizationWizard.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/oauth/OAuthAuthorizationWizard.java	(revision 3500)
+++ trunk/src/org/openstreetmap/josm/gui/oauth/OAuthAuthorizationWizard.java	(revision 3501)
@@ -212,5 +212,5 @@
      */
     public OAuthAuthorizationWizard(String apiUrl) throws IllegalArgumentException {
-        super(JOptionPane.getFrameForComponent(Main.parent),true /* modal */);
+        super(JOptionPane.getFrameForComponent(Main.parent), ModalityType.DOCUMENT_MODAL);
         CheckParameterUtil.ensureParameterNotNull(apiUrl, "apiUrl");
         build();
@@ -226,5 +226,5 @@
      */
     public OAuthAuthorizationWizard(Component parent, String apiUrl) {
-        super(JOptionPane.getFrameForComponent(parent),true /* modal */);
+        super(JOptionPane.getFrameForComponent(parent), ModalityType.DOCUMENT_MODAL);
         CheckParameterUtil.ensureParameterNotNull(apiUrl, "apiUrl");
         build();
Index: trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceDialog.java	(revision 3500)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/PreferenceDialog.java	(revision 3501)
@@ -59,5 +59,5 @@
 
     public PreferenceDialog(Component parent) {
-        super(JOptionPane.getFrameForComponent(parent), tr("Preferences"), true /* modal */);
+        super(JOptionPane.getFrameForComponent(parent), tr("Preferences"), ModalityType.DOCUMENT_MODAL);
         build();
     }
Index: trunk/src/org/openstreetmap/josm/io/FileImporter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/FileImporter.java	(revision 3500)
+++ trunk/src/org/openstreetmap/josm/io/FileImporter.java	(revision 3501)
@@ -12,4 +12,5 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.ExtensionFileFilter;
+import org.openstreetmap.josm.gui.HelpAwareOptionPane;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 
@@ -58,9 +59,9 @@
         } catch (Exception e) {
             e.printStackTrace();
-            JOptionPane.showMessageDialog(
+            HelpAwareOptionPane.showMessageDialogInEDT(
                     Main.parent,
                     tr("<html>Could not read file ''{0}''.<br>Error is:<br>{1}</html>", f.getName(), e.getMessage()),
                     tr("Error"),
-                    JOptionPane.ERROR_MESSAGE
+                    JOptionPane.ERROR_MESSAGE, null
             );
         }
@@ -72,9 +73,9 @@
         } catch (Exception e) {
             e.printStackTrace();
-            JOptionPane.showMessageDialog(
+            HelpAwareOptionPane.showMessageDialogInEDT(
                     Main.parent,
                     tr("<html>Could not read files.<br>Error is:<br>{0}</html>", e.getMessage()),
                     tr("Error"),
-                    JOptionPane.ERROR_MESSAGE
+                    JOptionPane.ERROR_MESSAGE, null
             );
         }
Index: trunk/src/org/openstreetmap/josm/io/NMEAImporter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/NMEAImporter.java	(revision 3500)
+++ trunk/src/org/openstreetmap/josm/io/NMEAImporter.java	(revision 3501)
@@ -12,4 +12,5 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.ExtensionFileFilter;
+import org.openstreetmap.josm.gui.HelpAwareOptionPane;
 import org.openstreetmap.josm.gui.layer.GpxLayer;
 import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
@@ -42,20 +43,26 @@
 
     private void showNmeaInfobox(boolean success, NmeaReader r) {
-        String msg = tr("Coordinates imported: ") + r.getNumberOfCoordinates() + "\n" + tr("Malformed sentences: ")
-        + r.getParserMalformed() + "\n" + tr("Checksum errors: ") + r.getParserChecksumErrors() + "\n";
+        final StringBuilder msg = new StringBuilder().append("<html>");
+        msg.append(tr("Coordinates imported: {0}", r.getNumberOfCoordinates()) + "<br>");
+        msg.append(tr("Malformed sentences: {0}", r.getParserMalformed()) + "<br>");
+        msg.append(tr("Checksum errors: {0}", r.getParserChecksumErrors()) + "<br>");
         if (!success) {
-            msg += tr("Unknown sentences: ") + r.getParserUnknown() + "\n";
+            msg.append(tr("Unknown sentences: {0}", r.getParserUnknown()) + "<br>");
         }
-        msg += tr("Zero coordinates: ") + r.getParserZeroCoordinates();
+        msg.append(tr("Zero coordinates: {0}", r.getParserZeroCoordinates()));
+        msg.append("</html>");
         if (success) {
-            JOptionPane.showMessageDialog(
+            HelpAwareOptionPane.showMessageDialogInEDT(
                     Main.parent,
-                    msg,
+                    msg.toString(),
                     tr("NMEA import success"),
-                    JOptionPane.INFORMATION_MESSAGE);
+                    JOptionPane.INFORMATION_MESSAGE, null);
         } else {
-            JOptionPane.showMessageDialog(Main.parent, msg, tr("NMEA import failure!"), JOptionPane.ERROR_MESSAGE);
+            HelpAwareOptionPane.showMessageDialogInEDT(
+                    Main.parent,
+                    msg.toString(),
+                    tr("NMEA import failure!"),
+                    JOptionPane.ERROR_MESSAGE, null);
         }
     }
-
 }
