Index: applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/actions/DownloadDataTask.java
===================================================================
--- applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/actions/DownloadDataTask.java	(revision 28053)
+++ applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/actions/DownloadDataTask.java	(revision 28054)
@@ -18,4 +18,5 @@
 import java.io.File;
 import java.util.concurrent.Future;
+import java.util.regex.Pattern;
 
 import org.openstreetmap.josm.Main;
@@ -25,4 +26,5 @@
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.io.AbstractReader;
+import org.openstreetmap.josm.plugins.opendata.core.OdConstants;
 import org.openstreetmap.josm.plugins.opendata.core.datasets.AbstractDataSetHandler;
 import org.openstreetmap.josm.plugins.opendata.core.datasets.DataSetUpdater;
@@ -32,5 +34,5 @@
 import org.openstreetmap.josm.plugins.opendata.core.modules.ModuleHandler;
 
-public class DownloadDataTask extends DownloadOsmTask {
+public class DownloadDataTask extends DownloadOsmTask implements OdConstants {
 
 	private AbstractDataSetHandler handler;
@@ -54,4 +56,5 @@
 	@Override
 	public boolean acceptsUrl(String url) {
+		this.handler = null;
 		for (Module module : ModuleHandler.moduleList) {
 			for (AbstractDataSetHandler handler : module.getHandlers()) {
@@ -60,4 +63,9 @@
 					return true;
 				}
+			}
+		}
+		for (String ext : new String[]{ZIP_EXT, CSV_EXT, KML_EXT, KMZ_EXT, XLS_EXT, ODS_EXT, SHP_EXT, MIF_EXT, TAB_EXT}) {
+			if (Pattern.compile(".*\\."+ext, Pattern.CASE_INSENSITIVE).matcher(url).matches()) {
+				return true;
 			}
 		}
Index: applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/AbstractDataSetHandler.java
===================================================================
--- applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/AbstractDataSetHandler.java	(revision 28053)
+++ applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/AbstractDataSetHandler.java	(revision 28054)
@@ -548,3 +548,13 @@
 		return false;
 	}
+
+	private boolean setSkipXsdValidationInZipReading = false;
+	
+	public final void setSkipXsdValidationInZipReading(boolean skip) {
+		setSkipXsdValidationInZipReading = skip;
+	}
+	
+	public boolean skipXsdValidationInZipReading() {
+		return setSkipXsdValidationInZipReading;
+	}
 }
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 28053)
+++ applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/ZipReader.java	(revision 28054)
@@ -119,5 +119,5 @@
 					}
 					for (String ext : new String[] {
-							CSV_EXT, KML_EXT, KMZ_EXT, XLS_EXT, ODS_EXT, SHP_EXT, MIF_EXT, TAB_EXT, XML_EXT
+							CSV_EXT, KML_EXT, KMZ_EXT, XLS_EXT, ODS_EXT, SHP_EXT, MIF_EXT, TAB_EXT
 					}) {
 						if (entry.getName().toLowerCase().endsWith("."+ext)) {
@@ -126,4 +126,10 @@
 							break;
 						}
+					}
+					// Special treatment for XML files (check supported XSD), unless handler explicitely skip it
+					if (XML_FILE_FILTER.accept(file) && ((handler != null && handler.skipXsdValidationInZipReading()) 
+							|| OdPlugin.getInstance().xmlImporter.acceptFile(file))) {
+						candidates.add(file);
+						System.out.println(entry.getName());
 					}
 				} else if (!file.mkdir()) {
