Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/DialogPrompter.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/DialogPrompter.java	(revision 28373)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/DialogPrompter.java	(revision 28374)
@@ -22,15 +22,30 @@
 import org.openstreetmap.josm.gui.ExtendedDialog;
 
-public abstract class DialogPrompter implements Runnable {
+public class DialogPrompter <T extends ExtendedDialog> implements Runnable {
 	
+	private T dialog;
 	private int value = -1;
 
-	protected abstract ExtendedDialog buildDialog();
+	protected T buildDialog() {return null;} // To be overriden if needed
+	
+	public DialogPrompter() {
+		this(null);
+	}
+	
+	public DialogPrompter(T dialog) {
+		this.dialog = dialog;
+	}
+	
+	public final T getDialog() {
+		return dialog;
+	}
 	
 	@Override
 	public final void run() {
-		ExtendedDialog dlg = buildDialog();
-		if (dlg != null) {
-			value = dlg.showDialog().getValue();
+		if (dialog == null) {
+			dialog = buildDialog();
+		}
+		if (dialog != null) {
+			value = dialog.showDialog().getValue();
 		}
 	}
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/ZipReader.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/ZipReader.java	(revision 28373)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/ZipReader.java	(revision 28374)
@@ -38,4 +38,5 @@
 import org.openstreetmap.josm.plugins.opendata.core.OdConstants;
 import org.openstreetmap.josm.plugins.opendata.core.datasets.AbstractDataSetHandler;
+import org.openstreetmap.josm.plugins.opendata.core.gui.DialogPrompter;
 import org.openstreetmap.josm.plugins.opendata.core.io.NeptuneReader;
 import org.openstreetmap.josm.plugins.opendata.core.io.geographic.GmlReader;
@@ -92,5 +93,5 @@
 	}
 
-	public DataSet parseDoc(ProgressMonitor progressMonitor) throws IOException, XMLStreamException, FactoryConfigurationError, JAXBException  {
+	public DataSet parseDoc(final ProgressMonitor progressMonitor) throws IOException, XMLStreamException, FactoryConfigurationError, JAXBException  {
 		
 	    final File temp = createTempDir();
@@ -156,14 +157,20 @@
 			
 			if (candidates.size() > 1) {
-				CandidateChooser dialog = (CandidateChooser) new CandidateChooser(progressMonitor.getWindowParent(), candidates).showDialog();
-				if (dialog.getValue() != 1) {
-					return null; // User clicked Cancel
-				}
-				file = dialog.getSelectedFile();
+				DialogPrompter<CandidateChooser> prompt = new DialogPrompter() {
+					@Override
+					protected CandidateChooser buildDialog() {
+						return new CandidateChooser(progressMonitor.getWindowParent(), candidates);
+					}
+				};
+				if (prompt.promptInEdt().getValue() == 1) {
+					file = prompt.getDialog().getSelectedFile();
+				}
 			} else if (candidates.size() == 1) {
 				file = candidates.get(0);
 			}
 			
-			if (file != null) {
+			if (file == null) {
+				return null;
+			} else {
 				DataSet from = null;
 				FileInputStream in = new FileInputStream(file);
