Index: /applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/DataGouvFrModule.java
===================================================================
--- /applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/DataGouvFrModule.java	(revision 28053)
+++ /applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/DataGouvFrModule.java	(revision 28054)
@@ -24,6 +24,8 @@
 import org.openstreetmap.josm.plugins.opendata.modules.fr.datagouvfr.datasets.ecologie.AssainissementHandler;
 import org.openstreetmap.josm.plugins.opendata.modules.fr.datagouvfr.datasets.ecologie.ForetsPubliquesHandler;
+import org.openstreetmap.josm.plugins.opendata.modules.fr.datagouvfr.datasets.ecologie.ReservesBiologiquesHandler;
 import org.openstreetmap.josm.plugins.opendata.modules.fr.datagouvfr.datasets.education.Etab1er2ndDegreHandler;
 import org.openstreetmap.josm.plugins.opendata.modules.fr.datagouvfr.datasets.education.EtabSupHandler;
+import org.openstreetmap.josm.plugins.opendata.modules.fr.datagouvfr.datasets.hydrologie.EauxDeSurfaceHandler;
 import org.openstreetmap.josm.plugins.opendata.modules.fr.datagouvfr.datasets.hydrologie.ROEHandler;
 import org.openstreetmap.josm.plugins.opendata.modules.fr.datagouvfr.datasets.transport.PassageNiveauHandler;
@@ -43,4 +45,6 @@
         handlers.add(new ROEHandler());
         handlers.add(new ForetsPubliquesHandler());
+        handlers.add(new ReservesBiologiquesHandler());
+        handlers.add(new EauxDeSurfaceHandler());
     }
 }
Index: /applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/datasets/DataGouvDataSetHandler.java
===================================================================
--- /applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/datasets/DataGouvDataSetHandler.java	(revision 28053)
+++ /applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/datasets/DataGouvDataSetHandler.java	(revision 28054)
@@ -81,7 +81,7 @@
 	}
 	
-	protected final void setDataGouvFrUrl(String suffix) {
+	protected final void setDownloadFileName(String filename) {
 		try {
-			setDataURL(FRENCH_PORTAL+"var/download/"+suffix);
+			setDataURL(FRENCH_PORTAL+"var/download/"+filename);
 		} catch (MalformedURLException e) {
 			e.printStackTrace();
Index: /applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/datasets/culture/BibliothequesHandler.java
===================================================================
--- /applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/datasets/culture/BibliothequesHandler.java	(revision 28053)
+++ /applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/datasets/culture/BibliothequesHandler.java	(revision 28054)
@@ -27,5 +27,5 @@
 		super("Adresses-des-bibliothèques-municipales-30382179", lambert93);
 		setName("Bibliothèques municipales");
-		setDataGouvFrUrl("lieux de lecture_geoloc.txt");
+		setDownloadFileName("lieux de lecture_geoloc.txt");
 	}
 
Index: /applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/datasets/diplomatie/EtabAEFEHandler.java
===================================================================
--- /applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/datasets/diplomatie/EtabAEFEHandler.java	(revision 28053)
+++ /applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/datasets/diplomatie/EtabAEFEHandler.java	(revision 28054)
@@ -25,5 +25,5 @@
 		super("Géolocalisation-des-établissements-du-réseau-d'enseignement-de-l'AEFE-30382449", wgs84);
 		setName("Établissements du réseau d'enseignement de l'AEFE");
-		setDataGouvFrUrl("ETALAB_MAEE_Extraction_LDAP_geoloc_AEFE_2011-10-13.csv");
+		setDownloadFileName("ETALAB_MAEE_Extraction_LDAP_geoloc_AEFE_2011-10-13.csv");
 	}
 
Index: /applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/datasets/ecologie/ForetsPubliquesHandler.java
===================================================================
--- /applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/datasets/ecologie/ForetsPubliquesHandler.java	(revision 28053)
+++ /applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/datasets/ecologie/ForetsPubliquesHandler.java	(revision 28054)
@@ -1,2 +1,17 @@
+//    JOSM opendata plugin.
+//    Copyright (C) 2011-2012 Don-vip
+//
+//    This program is free software: you can redistribute it and/or modify
+//    it under the terms of the GNU General Public License as published by
+//    the Free Software Foundation, either version 3 of the License, or
+//    (at your option) any later version.
+//
+//    This program is distributed in the hope that it will be useful,
+//    but WITHOUT ANY WARRANTY; without even the implied warranty of
+//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//    GNU General Public License for more details.
+//
+//    You should have received a copy of the GNU General Public License
+//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 package org.openstreetmap.josm.plugins.opendata.modules.fr.datagouvfr.datasets.ecologie;
 
@@ -5,7 +20,9 @@
 import java.util.ArrayList;
 import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import org.openstreetmap.josm.data.osm.DataSet;
-import org.openstreetmap.josm.data.osm.Relation;
+import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.plugins.opendata.core.datasets.fr.FrenchAdministrativeUnit;
 import org.openstreetmap.josm.plugins.opendata.modules.fr.datagouvfr.datasets.DataGouvDataSetHandler;
@@ -13,4 +30,6 @@
 
 public class ForetsPubliquesHandler extends DataGouvDataSetHandler {
+
+	private static final String PATTERN = "for_publ_v20.._reg(..)";
 
 	public ForetsPubliquesHandler() {
@@ -20,12 +39,83 @@
 	@Override
 	public boolean acceptsFilename(String filename) {
-		return acceptsZipFilename(filename, "for_publ_v20.._reg..") || acceptsShpFilename(filename, "for_publ_v20.._reg..");
+		boolean result = acceptsZipFilename(filename, PATTERN) || acceptsShpFilename(filename, PATTERN);
+		if (result) {
+			setNationalPortalPath(findPortalSuffix(filename));
+		}
+		return result;
+	}
+	
+	@Override
+	public boolean acceptsUrl(String url) {
+		boolean result = super.acceptsUrl(url);
+		if (result) {
+			setNationalPortalPath(findPortalSuffix(url));
+		}
+		return result;
+	}
+
+	private final String findPortalSuffix(CharSequence filename) {
+		Matcher m = Pattern.compile(".*"+PATTERN+"\\....").matcher(filename);
+		if (m.matches()) {
+			String regionCode = m.group(1);
+			if (regionCode.equals("42")) {
+				return "Forêts-publiques-d’Alsace-30378695";
+			} else if (regionCode.equals("72")) {
+				return "Forêts-publiques-d'Aquitaine-30378994";
+			} else if (regionCode.equals("83")) {
+				return "Forêts-publiques-d'Auvergne-30379302";
+			} else if (regionCode.equals("26")) {
+				return "Forêts-publiques-de-Bourgogne-30379206";
+			} else if (regionCode.equals("53")) {
+				return "Forêts-publiques-de-Bretagne-30378874";
+			} else if (regionCode.equals("24")) {
+				return "Forêts-publiques-du-Centre-30379134";
+			} else if (regionCode.equals("21")) {
+				return "Forêts-publiques-de-Champagne-Ardenne-30378853";
+			} else if (regionCode.equals("94")) {
+				return "Forêts-publiques-de-Corse-30379118";
+			} else if (regionCode.equals("43")) {
+				return "Forêts-publiques-de-Franche-Comté-30378652";
+			} else if (regionCode.equals("11")) {
+				return "Forêts-publiques-d’Île-de-France-30378829";
+			} else if (regionCode.equals("91")) {
+				return "Forêts-publiques-de-Languedoc-Roussillon-30379312";
+			} else if (regionCode.equals("74")) {
+				return "Forêts-publiques-du-Limousin-30378844";
+			} else if (regionCode.equals("41")) {
+				return "Forêts-publiques-de-Lorraine-30378675";
+			} else if (regionCode.equals("73")) {
+				return "Forêts-publiques-de-Midi-Pyrénées-30378665";
+			} else if (regionCode.equals("31")) {
+				return "Forêts-publiques-du-Nord-Pas-de-Calais-30379095";
+			} else if (regionCode.equals("25")) {
+				return "Forêts-publiques-de-Basse-Normandie-30378962";
+			} else if (regionCode.equals("23")) {
+				return "Forêts-publiques-de-Haute-Normandie-30379164";
+			} else if (regionCode.equals("52")) {
+				return "Forêts-publiques-des-Pays-de-la-Loire-30378999";
+			} else if (regionCode.equals("22")) {
+				return "Forêts-publiques-de-Picardie-30379389";
+			} else if (regionCode.equals("54")) {
+				return "Forêts-publiques-de-Poitou-Charente-30378900";
+			} else if (regionCode.equals("93")) {
+				return "Forêts-publiques-de-PACA-30379322";
+			} else if (regionCode.equals("82")) {
+				return "Forêts-publiques-de-Rhône-Alpes-30378732";
+			} else {
+				System.err.println("Unknown French region code: "+regionCode);
+			}
+		}
+		return null;
 	}
 
 	@Override
 	public void updateDataSet(DataSet ds) {
-		for (Relation r : ds.getRelations()) {
-			r.put("landuse", "forest");
-			replace(r, "LLIB_FRT", "name");
+		for (OsmPrimitive p : ds.allPrimitives()) {
+			// For all identified objects (both closed ways and multipolygons)
+			if (p.hasKey("IIDTN_FRT")) {
+				p.put("landuse", "forest");
+				replace(p, "LLIB_FRT", "name");
+			}
 		}
 	}
@@ -39,5 +129,7 @@
 		try {
 			for (FrenchAdministrativeUnit region : FrenchAdministrativeUnit.allRegions) {
-				result.add(getForetURL(region.getCode(), region.getName()));
+				if (!region.getCode().startsWith("0")) { // Skip DOM/TOM
+					result.add(getForetURL(region.getCode(), region.getName()));
+				}
 			}
 		} catch (MalformedURLException e) {
Index: /applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/datasets/ecologie/ReservesBiologiquesHandler.java
===================================================================
--- /applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/datasets/ecologie/ReservesBiologiquesHandler.java	(revision 28054)
+++ /applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/datasets/ecologie/ReservesBiologiquesHandler.java	(revision 28054)
@@ -0,0 +1,38 @@
+//    JOSM opendata plugin.
+//    Copyright (C) 2011-2012 Don-vip
+//
+//    This program is free software: you can redistribute it and/or modify
+//    it under the terms of the GNU General Public License as published by
+//    the Free Software Foundation, either version 3 of the License, or
+//    (at your option) any later version.
+//
+//    This program is distributed in the hope that it will be useful,
+//    but WITHOUT ANY WARRANTY; without even the implied warranty of
+//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//    GNU General Public License for more details.
+//
+//    You should have received a copy of the GNU General Public License
+//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+package org.openstreetmap.josm.plugins.opendata.modules.fr.datagouvfr.datasets.ecologie;
+
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.plugins.opendata.modules.fr.datagouvfr.datasets.DataGouvDataSetHandler;
+
+public class ReservesBiologiquesHandler extends DataGouvDataSetHandler {
+
+	public ReservesBiologiquesHandler() {
+		super("Réserves-biologiques-de-métropole-30378855");
+		setName("Réserves biologiques de métropole");
+		setDownloadFileName("ONF_RB_2011_Officielles_L93.zip");
+	}
+	
+	@Override
+	public boolean acceptsFilename(String filename) {
+		return acceptsZipFilename(filename, "ONF_RB_20.._Officielles_L93") || acceptsShpFilename(filename, "ONF_RB_20.._Officielles_L93");
+	}
+
+	@Override
+	public void updateDataSet(DataSet ds) {
+		// TODO
+	}
+}
Index: /applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/datasets/education/Etab1er2ndDegreHandler.java
===================================================================
--- /applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/datasets/education/Etab1er2ndDegreHandler.java	(revision 28053)
+++ /applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/datasets/education/Etab1er2ndDegreHandler.java	(revision 28054)
@@ -29,5 +29,5 @@
 		super("Géolocalisation-des-établissements-d'enseignement-du-premier-degré-et-du-second-degré-du-ministère-d-30378093");
 		setName("Établissements d'enseignement du premier degré et du second degré");
-		setDataGouvFrUrl("MENJVA_etab_geoloc.csv");
+		setDownloadFileName("MENJVA_etab_geoloc.csv");
 	}
 	
Index: /applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/datasets/education/EtabSupHandler.java
===================================================================
--- /applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/datasets/education/EtabSupHandler.java	(revision 28053)
+++ /applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/datasets/education/EtabSupHandler.java	(revision 28054)
@@ -27,5 +27,5 @@
 		super("Etablissements-d'enseignement-supérieur-30382046", wgs84);
 		setName("Établissements d'enseignement supérieur");
-		setDataGouvFrUrl("livraison ETALAB 28 11 2011.xls");
+		setDownloadFileName("livraison ETALAB 28 11 2011.xls");
 	}
 
Index: /applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/datasets/hydrologie/EauxDeSurfaceHandler.java
===================================================================
--- /applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/datasets/hydrologie/EauxDeSurfaceHandler.java	(revision 28054)
+++ /applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/datasets/hydrologie/EauxDeSurfaceHandler.java	(revision 28054)
@@ -0,0 +1,103 @@
+//    JOSM opendata plugin.
+//    Copyright (C) 2011-2012 Don-vip
+//
+//    This program is free software: you can redistribute it and/or modify
+//    it under the terms of the GNU General Public License as published by
+//    the Free Software Foundation, either version 3 of the License, or
+//    (at your option) any later version.
+//
+//    This program is distributed in the hope that it will be useful,
+//    but WITHOUT ANY WARRANTY; without even the implied warranty of
+//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//    GNU General Public License for more details.
+//
+//    You should have received a copy of the GNU General Public License
+//    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+package org.openstreetmap.josm.plugins.opendata.modules.fr.datagouvfr.datasets.hydrologie;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.plugins.opendata.modules.fr.datagouvfr.datasets.DataGouvDataSetHandler;
+import org.openstreetmap.josm.tools.Pair;
+
+public class EauxDeSurfaceHandler extends DataGouvDataSetHandler {
+
+	private static final String ZIP_PATTERN = "FR(I|J|K|L)_SW";
+	private static final String SHP_PATTERN = "FR_(I|J|K|L)_SWB_.W_20......";
+	
+	private static final String[] letters = new String[]{"I","J","K","L"}; 
+	private static final String[] names   = new String[]{"Guadeloupe","Martinique","Guyane","La Réunion"}; 
+	private static final String[] urls    = new String[]{
+		"Couche-SIG-des-caractéristiques-des-bassins-2010-%3A-eaux-de-surface---Guadeloupe-30381899",
+		"Couche-SIG-des-caractéristiques-des-bassins-2010-%3A-eaux-de-surface---Martinique-30381935",
+		"Couche-SIG-des-caractéristiques-des-bassins-2010-%3A-eaux-de-surface---Guyane-30381988",
+		"Couche-SIG-des-caractéristiques-des-bassins-2010-%3A-eaux-de-surface---Réunion-30381991"
+	}; 
+	
+	public EauxDeSurfaceHandler() {
+		setName("Eaux de surface");
+	}
+	
+	@Override
+	public boolean acceptsFilename(String filename) {
+		boolean result = acceptsZipFilename(filename, ZIP_PATTERN) || acceptsShpFilename(filename, SHP_PATTERN);
+		if (result) {
+			setNationalPortalPath(findPortalSuffix(filename));
+		}
+		return result;
+	}
+	
+	@Override
+	public boolean acceptsUrl(String url) {
+		boolean result = super.acceptsUrl(url);
+		if (result) {
+			setNationalPortalPath(findPortalSuffix(url));
+		}
+		return result;
+	}
+
+	private String findPortalSuffix(String filename) {
+		for (String pattern : new String[]{ZIP_PATTERN, SHP_PATTERN}) {
+			Matcher m = Pattern.compile(".*"+pattern+"\\....").matcher(filename);
+			if (m.matches()) {
+				for (int i =0; i<letters.length; i++) {
+					if (letters[i].equals(m.group(1))) {
+						return urls[i];
+					}
+				}
+			}
+		}
+		return null;
+	}
+
+	@Override
+	public void updateDataSet(DataSet ds) {
+		// TODO Auto-generated method stub
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.openstreetmap.josm.plugins.opendata.core.datasets.AbstractDataSetHandler#getDataURLs()
+	 */
+	@Override
+	public List<Pair<String, URL>> getDataURLs() {
+		List<Pair<String, URL>> result = new ArrayList<Pair<String,URL>>();
+		try {
+			for (int i =0; i<letters.length; i++) {
+				result.add(getDownloadURL(i));
+			}
+		} catch (MalformedURLException e) {
+			e.printStackTrace();
+		}
+		return result;
+	}
+
+	private Pair<String, URL> getDownloadURL(int i) throws MalformedURLException {
+		return new Pair<String, URL>(names[i], new URL("http://www.rapportage.eaufrance.fr/sites/default/files/SIG/FR"+letters[i]+"_SW.zip"));
+	}
+}
Index: /applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/datasets/transport/PassageNiveauHandler.java
===================================================================
--- /applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/datasets/transport/PassageNiveauHandler.java	(revision 28053)
+++ /applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/datasets/transport/PassageNiveauHandler.java	(revision 28054)
@@ -27,5 +27,5 @@
 		super("Passages-à-niveau-30383135");
 		setName("Passages à niveau");
-		setDataGouvFrUrl("passage_a_niveau.csv");
+		setDownloadFileName("passage_a_niveau.csv");
 	}
 
Index: /applications/editors/josm/plugins/opendata/modules/fr.toulouse/src/org/openstreetmap/josm/plugins/opendata/modules/fr/toulouse/datasets/transport/ReseauTisseoHandler.java
===================================================================
--- /applications/editors/josm/plugins/opendata/modules/fr.toulouse/src/org/openstreetmap/josm/plugins/opendata/modules/fr/toulouse/datasets/transport/ReseauTisseoHandler.java	(revision 28053)
+++ /applications/editors/josm/plugins/opendata/modules/fr.toulouse/src/org/openstreetmap/josm/plugins/opendata/modules/fr/toulouse/datasets/transport/ReseauTisseoHandler.java	(revision 28054)
@@ -34,4 +34,5 @@
 		setName("Réseau Tisséo (Métro, Bus, Tram)");
 		setCategory(CAT_TRANSPORT);
+		setSkipXsdValidationInZipReading(true);
 	}
 
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()) {
