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 28052)
+++ /applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/DataGouvFrModule.java	(revision 28053)
@@ -23,4 +23,5 @@
 import org.openstreetmap.josm.plugins.opendata.modules.fr.datagouvfr.datasets.diplomatie.EtabAEFEHandler;
 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.education.Etab1er2ndDegreHandler;
 import org.openstreetmap.josm.plugins.opendata.modules.fr.datagouvfr.datasets.education.EtabSupHandler;
@@ -41,4 +42,5 @@
         handlers.add(new PassageNiveauHandler());
         handlers.add(new ROEHandler());
+        handlers.add(new ForetsPubliquesHandler());
     }
 }
Index: /applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/datasets/agriculture/RegistreParcellaireHandler.java
===================================================================
--- /applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/datasets/agriculture/RegistreParcellaireHandler.java	(revision 28052)
+++ /applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/datasets/agriculture/RegistreParcellaireHandler.java	(revision 28053)
@@ -24,5 +24,5 @@
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.gui.preferences.SourceEditor.ExtendedSourceEntry;
-import org.openstreetmap.josm.plugins.opendata.core.datasets.fr.FrenchDepartment;
+import org.openstreetmap.josm.plugins.opendata.core.datasets.fr.FrenchAdministrativeUnit;
 import org.openstreetmap.josm.plugins.opendata.modules.fr.datagouvfr.datasets.DataGouvDataSetHandler;
 import org.openstreetmap.josm.tools.Pair;
@@ -144,5 +144,5 @@
 		List<Pair<String, URL>> result = new ArrayList<Pair<String,URL>>();
 		try {
-			for (FrenchDepartment dpt : FrenchDepartment.allDepartments) {
+			for (FrenchAdministrativeUnit dpt : FrenchAdministrativeUnit.allDepartments) {
 				result.add(getRpgURL(dpt.getCode(), dpt.getName()));
 			}
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 28053)
@@ -0,0 +1,52 @@
+package org.openstreetmap.josm.plugins.opendata.modules.fr.datagouvfr.datasets.ecologie;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.Relation;
+import org.openstreetmap.josm.plugins.opendata.core.datasets.fr.FrenchAdministrativeUnit;
+import org.openstreetmap.josm.plugins.opendata.modules.fr.datagouvfr.datasets.DataGouvDataSetHandler;
+import org.openstreetmap.josm.tools.Pair;
+
+public class ForetsPubliquesHandler extends DataGouvDataSetHandler {
+
+	public ForetsPubliquesHandler() {
+		setName("Forêts publiques");
+	}
+	
+	@Override
+	public boolean acceptsFilename(String filename) {
+		return acceptsZipFilename(filename, "for_publ_v20.._reg..") || acceptsShpFilename(filename, "for_publ_v20.._reg..");
+	}
+
+	@Override
+	public void updateDataSet(DataSet ds) {
+		for (Relation r : ds.getRelations()) {
+			r.put("landuse", "forest");
+			replace(r, "LLIB_FRT", "name");
+		}
+	}
+
+	/* (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 (FrenchAdministrativeUnit region : FrenchAdministrativeUnit.allRegions) {
+				result.add(getForetURL(region.getCode(), region.getName()));
+			}
+		} catch (MalformedURLException e) {
+			e.printStackTrace();
+		}
+		return result;
+	}
+
+	private Pair<String, URL> getForetURL(String code, String name) throws MalformedURLException {
+		return new Pair<String, URL>(name, new URL(FRENCH_PORTAL+"var/download/"+"for_publ_v2011_reg"+code+".zip"));
+	}
+}
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/DataSetUpdater.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/DataSetUpdater.java	(revision 28052)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/DataSetUpdater.java	(revision 28053)
@@ -30,5 +30,8 @@
 			if (associatedFile != null) {
 				handler.setAssociatedFile(associatedFile);
-				handler.setSourceDate(new SimpleDateFormat("yyyy-MM-dd").format(new Date(associatedFile.lastModified())));
+				long lastmodified = associatedFile.lastModified();
+				if (lastmodified > 0) {
+					handler.setSourceDate(new SimpleDateFormat("yyyy-MM-dd").format(new Date(lastmodified)));
+				}
 			}
 			if (!Main.pref.getBoolean(PREF_RAWDATA)) {
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/fr/FrenchAdministrativeUnit.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/fr/FrenchAdministrativeUnit.java	(revision 28053)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/fr/FrenchAdministrativeUnit.java	(revision 28053)
@@ -0,0 +1,180 @@
+//    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.core.datasets.fr;
+
+public abstract class FrenchAdministrativeUnit {
+	private final String code; 
+	private final String name;
+	
+	private FrenchAdministrativeUnit(String code, String name) {
+		this.code = code;
+		this.name = name;
+	}
+
+	public final String getCode() {
+		return code;
+	}
+
+	public final String getName() {
+		return name;
+	}
+	
+	public static final class FrenchDepartment extends FrenchAdministrativeUnit {
+		private FrenchDepartment(String code, String name) {
+			super(code, name);
+		}
+	}
+	
+	public static final class FrenchRegion extends FrenchAdministrativeUnit {
+		private FrenchRegion(String code, String name) {
+			super(code, name);
+		}
+	}
+
+	public static final FrenchDepartment[] allDepartments = new FrenchDepartment[] {
+		new FrenchDepartment("001", "Ain"),
+		new FrenchDepartment("002", "Aisne"),
+		new FrenchDepartment("003", "Allier"),
+		new FrenchDepartment("004", "Alpes-de-Haute-Provence"),
+		new FrenchDepartment("005", "Hautes-Alpes"),
+		new FrenchDepartment("006", "Alpes-Maritimes"),
+		new FrenchDepartment("007", "Ardèche"),
+		new FrenchDepartment("008", "Ardennes"),
+		new FrenchDepartment("009", "Ariège"),
+		new FrenchDepartment("010", "Aube"),
+		new FrenchDepartment("011", "Aude"),
+		new FrenchDepartment("012", "Aveyron"),
+		new FrenchDepartment("013", "Bouches-du-Rhône"),
+		new FrenchDepartment("014", "Calvados"),
+		new FrenchDepartment("015", "Cantal"),
+		new FrenchDepartment("016", "Charente"),
+		new FrenchDepartment("017", "Charente-Maritime"),
+		new FrenchDepartment("018", "Cher"),
+		new FrenchDepartment("019", "Corrèze"),
+		new FrenchDepartment("02A", "Corse-du-Sud"),
+		new FrenchDepartment("02B", "Haute-Corse"),
+		new FrenchDepartment("021", "Côte-d'Or"),
+		new FrenchDepartment("022", "Côtes-d'Armor"),
+		new FrenchDepartment("023", "Creuse"),
+		new FrenchDepartment("024", "Dordogne"),
+		new FrenchDepartment("025", "Doubs"),
+		new FrenchDepartment("026", "Drôme"),
+		new FrenchDepartment("027", "Eure"),
+		new FrenchDepartment("028", "Eure-et-Loir"),
+		new FrenchDepartment("029", "Finistère"),
+		new FrenchDepartment("030", "Gard"),
+		new FrenchDepartment("031", "Haute-Garonne"),
+		new FrenchDepartment("032", "Gers"),
+		new FrenchDepartment("033", "Gironde"),
+		new FrenchDepartment("034", "Hérault"),
+		new FrenchDepartment("035", "Ille-et-Vilaine"),
+		new FrenchDepartment("036", "Indre"),
+		new FrenchDepartment("037", "Indre-et-Loire"),
+		new FrenchDepartment("038", "Isère"),
+		new FrenchDepartment("039", "Jura"),
+		new FrenchDepartment("040", "Landes"),
+		new FrenchDepartment("041", "Loir-et-Cher"),
+		new FrenchDepartment("042", "Loire"),
+		new FrenchDepartment("043", "Haute-Loire"),
+		new FrenchDepartment("044", "Loire-Atlantique"),
+		new FrenchDepartment("045", "Loiret"),
+		new FrenchDepartment("046", "Lot"),
+		new FrenchDepartment("047", "Lot-et-Garonne"),
+		new FrenchDepartment("048", "Lozère"),
+		new FrenchDepartment("049", "Maine-et-Loire"),
+		new FrenchDepartment("050", "Manche"),
+		new FrenchDepartment("051", "Marne"),
+		new FrenchDepartment("052", "Haute-Marne"),
+		new FrenchDepartment("053", "Mayenne"),
+		new FrenchDepartment("054", "Meurthe-et-Moselle"),
+		new FrenchDepartment("055", "Meuse"),
+		new FrenchDepartment("056", "Morbihan"),
+		new FrenchDepartment("057", "Moselle"),
+		new FrenchDepartment("058", "Nièvre"),
+		new FrenchDepartment("059", "Nord"),
+		new FrenchDepartment("060", "Oise"),
+		new FrenchDepartment("061", "Orne"),
+		new FrenchDepartment("062", "Pas-de-Calais"),
+		new FrenchDepartment("063", "Puy-de-Dôme"),
+		new FrenchDepartment("064", "Pyrénées-Atlantiques"),
+		new FrenchDepartment("065", "Hautes-Pyrénées"),
+		new FrenchDepartment("066", "Pyrénées-Orientales"),
+		new FrenchDepartment("067", "Bas-Rhin"),
+		new FrenchDepartment("068", "Haut-Rhin"),
+		new FrenchDepartment("069", "Rhône"),
+		new FrenchDepartment("070", "Haute-Saône"),
+		new FrenchDepartment("071", "Saône-et-Loire"),
+		new FrenchDepartment("072", "Sarthe"),
+		new FrenchDepartment("073", "Savoie"),
+		new FrenchDepartment("074", "Haute-Savoie"),
+		new FrenchDepartment("075", "Paris"),
+		new FrenchDepartment("076", "Seine-Maritime"),
+		new FrenchDepartment("077", "Seine-et-Marne"),
+		new FrenchDepartment("078", "Yvelines"),
+		new FrenchDepartment("079", "Deux-Sèvres"),
+		new FrenchDepartment("080", "Somme"),
+		new FrenchDepartment("081", "Tarn"),
+		new FrenchDepartment("082", "Tarn-et-Garonne"),
+		new FrenchDepartment("083", "Var"),
+		new FrenchDepartment("084", "Vaucluse"),
+		new FrenchDepartment("085", "Vendée"),
+		new FrenchDepartment("086", "Vienne"),
+		new FrenchDepartment("087", "Haute-Vienne"),
+		new FrenchDepartment("088", "Vosges"),
+		new FrenchDepartment("089", "Yonne"),
+		new FrenchDepartment("090", "Territoire de Belfort"),
+		new FrenchDepartment("091", "Essonne"),
+		new FrenchDepartment("092", "Hauts-de-Seine"),
+		new FrenchDepartment("093", "Seine-Saint-Denis"),
+		new FrenchDepartment("094", "Val-de-Marne"),
+		new FrenchDepartment("095", "Val-d'Oise"),
+		new FrenchDepartment("971", "Guadeloupe"),
+		new FrenchDepartment("972", "Martinique"),
+		new FrenchDepartment("973", "Guyane"),
+		new FrenchDepartment("974", "La Réunion"),
+		new FrenchDepartment("976", "Mayotte"),
+	};
+
+	public static final FrenchRegion[] allRegions = new FrenchRegion[] {
+		new FrenchRegion("42", "Alsace"),
+		new FrenchRegion("72", "Aquitaine"),
+		new FrenchRegion("83", "Auvergne"),
+		new FrenchRegion("25", "Basse-Normandie"),
+		new FrenchRegion("26", "Bourgogne"),
+		new FrenchRegion("53", "Bretagne"),
+		new FrenchRegion("24", "Centre"),
+		new FrenchRegion("21", "Champagne-Ardenne"),
+		new FrenchRegion("94", "Corse"),
+		new FrenchRegion("43", "Franche-Comté"),
+		new FrenchRegion("23", "Haute-Normandie"),
+		new FrenchRegion("11", "Île-de-France"),
+		new FrenchRegion("91", "Languedoc-Roussillon"),
+		new FrenchRegion("74", "Limousin"),
+		new FrenchRegion("41", "Lorraine"),
+		new FrenchRegion("73", "Midi-Pyrénées"),
+		new FrenchRegion("31", "Nord-Pas-de-Calais"),
+		new FrenchRegion("52", "Pays de la Loire"),
+		new FrenchRegion("22", "Picardie"),
+		new FrenchRegion("54", "Poitou-Charentes"),
+		new FrenchRegion("93", "Provence-Alpes-Côte d'Azur"),
+		new FrenchRegion("82", "Rhône-Alpes"),
+		new FrenchRegion("01", "Guadeloupe"),
+		new FrenchRegion("02", "Martinique"),
+		new FrenchRegion("03", "Guyane"),
+		new FrenchRegion("04", "La Réunion"),
+		new FrenchRegion("05", "Mayotte")
+	};
+}
Index: plications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/fr/FrenchDepartment.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/fr/FrenchDepartment.java	(revision 28052)
+++ 	(revision )
@@ -1,138 +1,0 @@
-//    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.core.datasets.fr;
-
-public final class FrenchDepartment {
-	private final String code; 
-	private final String name;
-	
-	private FrenchDepartment(String code, String name) {
-		this.code = code;
-		this.name = name;
-	}
-
-	public final String getCode() {
-		return code;
-	}
-
-	public final String getName() {
-		return name;
-	}
-
-	public static final FrenchDepartment[] allDepartments = new FrenchDepartment[] {
-		new FrenchDepartment("001", "Ain"),
-		new FrenchDepartment("002", "Aisne"),
-		new FrenchDepartment("003", "Allier"),
-		new FrenchDepartment("004", "Alpes-de-Haute-Provence"),
-		new FrenchDepartment("005", "Hautes-Alpes"),
-		new FrenchDepartment("006", "Alpes-Maritimes"),
-		new FrenchDepartment("007", "Ardèche"),
-		new FrenchDepartment("008", "Ardennes"),
-		new FrenchDepartment("009", "Ariège"),
-		new FrenchDepartment("010", "Aube"),
-		new FrenchDepartment("011", "Aude"),
-		new FrenchDepartment("012", "Aveyron"),
-		new FrenchDepartment("013", "Bouches-du-Rhône"),
-		new FrenchDepartment("014", "Calvados"),
-		new FrenchDepartment("015", "Cantal"),
-		new FrenchDepartment("016", "Charente"),
-		new FrenchDepartment("017", "Charente-Maritime"),
-		new FrenchDepartment("018", "Cher"),
-		new FrenchDepartment("019", "Corrèze"),
-		new FrenchDepartment("02A", "Corse-du-Sud"),
-		new FrenchDepartment("02B", "Haute-Corse"),
-		new FrenchDepartment("021", "Côte-d'Or"),
-		new FrenchDepartment("022", "Côtes-d'Armor"),
-		new FrenchDepartment("023", "Creuse"),
-		new FrenchDepartment("024", "Dordogne"),
-		new FrenchDepartment("025", "Doubs"),
-		new FrenchDepartment("026", "Drôme"),
-		new FrenchDepartment("027", "Eure"),
-		new FrenchDepartment("028", "Eure-et-Loir"),
-		new FrenchDepartment("029", "Finistère"),
-		new FrenchDepartment("030", "Gard"),
-		new FrenchDepartment("031", "Haute-Garonne"),
-		new FrenchDepartment("032", "Gers"),
-		new FrenchDepartment("033", "Gironde"),
-		new FrenchDepartment("034", "Hérault"),
-		new FrenchDepartment("035", "Ille-et-Vilaine"),
-		new FrenchDepartment("036", "Indre"),
-		new FrenchDepartment("037", "Indre-et-Loire"),
-		new FrenchDepartment("038", "Isère"),
-		new FrenchDepartment("039", "Jura"),
-		new FrenchDepartment("040", "Landes"),
-		new FrenchDepartment("041", "Loir-et-Cher"),
-		new FrenchDepartment("042", "Loire"),
-		new FrenchDepartment("043", "Haute-Loire"),
-		new FrenchDepartment("044", "Loire-Atlantique"),
-		new FrenchDepartment("045", "Loiret"),
-		new FrenchDepartment("046", "Lot"),
-		new FrenchDepartment("047", "Lot-et-Garonne"),
-		new FrenchDepartment("048", "Lozère"),
-		new FrenchDepartment("049", "Maine-et-Loire"),
-		new FrenchDepartment("050", "Manche"),
-		new FrenchDepartment("051", "Marne"),
-		new FrenchDepartment("052", "Haute-Marne"),
-		new FrenchDepartment("053", "Mayenne"),
-		new FrenchDepartment("054", "Meurthe-et-Moselle"),
-		new FrenchDepartment("055", "Meuse"),
-		new FrenchDepartment("056", "Morbihan"),
-		new FrenchDepartment("057", "Moselle"),
-		new FrenchDepartment("058", "Nièvre"),
-		new FrenchDepartment("059", "Nord"),
-		new FrenchDepartment("060", "Oise"),
-		new FrenchDepartment("061", "Orne"),
-		new FrenchDepartment("062", "Pas-de-Calais"),
-		new FrenchDepartment("063", "Puy-de-Dôme"),
-		new FrenchDepartment("064", "Pyrénées-Atlantiques"),
-		new FrenchDepartment("065", "Hautes-Pyrénées"),
-		new FrenchDepartment("066", "Pyrénées-Orientales"),
-		new FrenchDepartment("067", "Bas-Rhin"),
-		new FrenchDepartment("068", "Haut-Rhin"),
-		new FrenchDepartment("069", "Rhône"),
-		new FrenchDepartment("070", "Haute-Saône"),
-		new FrenchDepartment("071", "Saône-et-Loire"),
-		new FrenchDepartment("072", "Sarthe"),
-		new FrenchDepartment("073", "Savoie"),
-		new FrenchDepartment("074", "Haute-Savoie"),
-		new FrenchDepartment("075", "Paris"),
-		new FrenchDepartment("076", "Seine-Maritime"),
-		new FrenchDepartment("077", "Seine-et-Marne"),
-		new FrenchDepartment("078", "Yvelines"),
-		new FrenchDepartment("079", "Deux-Sèvres"),
-		new FrenchDepartment("080", "Somme"),
-		new FrenchDepartment("081", "Tarn"),
-		new FrenchDepartment("082", "Tarn-et-Garonne"),
-		new FrenchDepartment("083", "Var"),
-		new FrenchDepartment("084", "Vaucluse"),
-		new FrenchDepartment("085", "Vendée"),
-		new FrenchDepartment("086", "Vienne"),
-		new FrenchDepartment("087", "Haute-Vienne"),
-		new FrenchDepartment("088", "Vosges"),
-		new FrenchDepartment("089", "Yonne"),
-		new FrenchDepartment("090", "Territoire de Belfort"),
-		new FrenchDepartment("091", "Essonne"),
-		new FrenchDepartment("092", "Hauts-de-Seine"),
-		new FrenchDepartment("093", "Seine-Saint-Denis"),
-		new FrenchDepartment("094", "Val-de-Marne"),
-		new FrenchDepartment("095", "Val-d'Oise"),
-		new FrenchDepartment("971", "Guadeloupe"),
-		new FrenchDepartment("972", "Martinique"),
-		new FrenchDepartment("973", "Guyane"),
-		new FrenchDepartment("974", "La Réunion"),
-		new FrenchDepartment("976", "Mayotte"),
-	};
-}
