Index: applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/CacheControl.java
===================================================================
--- applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/CacheControl.java	(revision 18713)
+++ applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/CacheControl.java	(revision 18720)
@@ -22,8 +22,11 @@
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.projection.LambertCC9Zones;
+import org.openstreetmap.josm.data.projection.UTM_20N_France_DOM;
 
 public class CacheControl implements Runnable {
     
     public static final String cLambertCC9Z = "CC";
+
+    public static final String cUTM20N = "UTM";
 
     public class ObjectOutputStreamAppend extends ObjectOutputStream {
@@ -87,4 +90,6 @@
             if (Main.proj instanceof LambertCC9Zones)
                 extension = cLambertCC9Z + extension;
+            else if (Main.proj instanceof UTM_20N_France_DOM)
+                extension = cUTM20N + extension;
             File file = new File(CadastrePlugin.cacheDir + wmsLayer.getName() + "." + extension);
             if (file.exists()) {
@@ -167,4 +172,6 @@
                 if (Main.proj instanceof LambertCC9Zones)
                     extension = cLambertCC9Z + extension;
+                else if (Main.proj instanceof UTM_20N_France_DOM)
+                    extension = cUTM20N + extension;
                 File file = new File(CadastrePlugin.cacheDir + wmsLayer.getName() + "." + extension);
                 try {
Index: applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/CacheFileLambert4ZoneFilter.java
===================================================================
--- applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/CacheFileLambert4ZoneFilter.java	(revision 18720)
+++ applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/CacheFileLambert4ZoneFilter.java	(revision 18720)
@@ -0,0 +1,52 @@
+// License: GPL. v2 and later. Copyright 2008-2009 by Pieren <pieren3@gmail.com> and others
+package cadastre_fr;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+import java.io.File;
+import javax.swing.filechooser.FileFilter;
+
+public class CacheFileLambert4ZoneFilter extends FileFilter {
+
+    /**
+     * Derived from ExtensionFileFilter writen by imi
+     */
+    private final String extension;
+    private final String description;
+
+    public static CacheFileLambert4ZoneFilter[] filters = {
+        new CacheFileLambert4ZoneFilter("1", tr("Lambert Zone 1 cache file (.1)")),
+        new CacheFileLambert4ZoneFilter("2", tr("Lambert Zone 2 cache file (.2)")),
+        new CacheFileLambert4ZoneFilter("3", tr("Lambert Zone 3 cache file (.3)")),
+        new CacheFileLambert4ZoneFilter("4", tr("Lambert Zone 4 cache file (.4)"))
+        };
+
+    /**
+     * Construct an extension file filter by giving the extension to check after.
+     *
+     */
+    private CacheFileLambert4ZoneFilter(String extension, String description) {
+        this.extension = extension;
+        this.description = description;
+    }
+
+    public boolean acceptName(String filename) {
+        String name = filename.toLowerCase();
+        for (String ext : extension.split(","))
+            if (name.endsWith("." + ext))
+                return true;
+        return false;
+    }
+
+    @Override
+    public boolean accept(File pathname) {
+        if (pathname.isDirectory())
+            return true;
+        return acceptName(pathname.getName());
+    }
+
+    @Override
+    public String getDescription() {
+        return description;
+    }
+
+}
Index: applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/CacheFileLambert9ZoneFilter.java
===================================================================
--- applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/CacheFileLambert9ZoneFilter.java	(revision 18720)
+++ applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/CacheFileLambert9ZoneFilter.java	(revision 18720)
@@ -0,0 +1,59 @@
+// License: GPL. v2 and later. Copyright 2008-2009 by Pieren <pieren3@gmail.com> and others
+package cadastre_fr;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.io.File;
+
+import javax.swing.filechooser.FileFilter;
+
+public class CacheFileLambert9ZoneFilter extends FileFilter {
+
+    /**
+     * Derived from ExtensionFileFilter writen by imi
+     */
+    private final String extension;
+    private final String description;
+
+    public static CacheFileLambert9ZoneFilter[] filters = {
+        new CacheFileLambert9ZoneFilter("cc1", tr("Lambert CC9 Zone 1 cache file (.CC1)")),
+        new CacheFileLambert9ZoneFilter("cc2", tr("Lambert CC9 Zone 2 cache file (.CC2)")),
+        new CacheFileLambert9ZoneFilter("cc3", tr("Lambert CC9 Zone 3 cache file (.CC3)")),
+        new CacheFileLambert9ZoneFilter("cc4", tr("Lambert CC9 Zone 4 cache file (.CC4)")),
+        new CacheFileLambert9ZoneFilter("cc5", tr("Lambert CC9 Zone 5 cache file (.CC5)")),
+        new CacheFileLambert9ZoneFilter("cc6", tr("Lambert CC9 Zone 6 cache file (.CC6)")),
+        new CacheFileLambert9ZoneFilter("cc7", tr("Lambert CC9 Zone 7 cache file (.CC7)")),
+        new CacheFileLambert9ZoneFilter("cc8", tr("Lambert CC9 Zone 8 cache file (.CC8)")),
+        new CacheFileLambert9ZoneFilter("cc9", tr("Lambert CC9 Zone 9 cache file (.CC9)"))
+        };
+
+    /**
+     * Construct an extension file filter by giving the extension to check after.
+     *
+     */
+    private CacheFileLambert9ZoneFilter(String extension, String description) {
+        this.extension = extension;
+        this.description = description;
+    }
+
+    public boolean acceptName(String filename) {
+        String name = filename.toLowerCase();
+        for (String ext : extension.split(","))
+            if (name.endsWith("." + ext))
+                return true;
+        return false;
+    }
+
+    @Override
+    public boolean accept(File pathname) {
+        if (pathname.isDirectory())
+            return true;
+        return acceptName(pathname.getName());
+    }
+
+    @Override
+    public String getDescription() {
+        return description;
+    }
+
+}
Index: applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/CacheFileUTM20NFilter.java
===================================================================
--- applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/CacheFileUTM20NFilter.java	(revision 18720)
+++ applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/CacheFileUTM20NFilter.java	(revision 18720)
@@ -0,0 +1,53 @@
+// License: GPL. v2 and later. Copyright 2008-2009 by Pieren <pieren3@gmail.com> and others
+package cadastre_fr;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.io.File;
+
+import javax.swing.filechooser.FileFilter;
+
+public class CacheFileUTM20NFilter extends FileFilter {
+
+    /**
+     * Derived from ExtensionFileFilter writen by imi
+     */
+    private final String extension;
+    private final String description;
+
+    public static CacheFileUTM20NFilter[] filters = {
+        new CacheFileUTM20NFilter("utm1", tr("Guadeloupe Fort-Marigot cache file (.UTM1)")),
+        new CacheFileUTM20NFilter("utm2", tr("Guadeloupe Ste-Anne cache file (.UTM2)")),
+        new CacheFileUTM20NFilter("utm3", tr("Martinique Fort Desaix cache file (.UTM3)"))
+        };
+
+    /**
+     * Construct an extension file filter by giving the extension to check after.
+     *
+     */
+    private CacheFileUTM20NFilter(String extension, String description) {
+        this.extension = extension;
+        this.description = description;
+    }
+
+    public boolean acceptName(String filename) {
+        String name = filename.toLowerCase();
+        for (String ext : extension.split(","))
+            if (name.endsWith("." + ext))
+                return true;
+        return false;
+    }
+
+    @Override
+    public boolean accept(File pathname) {
+        if (pathname.isDirectory())
+            return true;
+        return acceptName(pathname.getName());
+    }
+
+    @Override
+    public String getDescription() {
+        return description;
+    }
+
+}
Index: applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/CadastrePlugin.java
===================================================================
--- applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/CadastrePlugin.java	(revision 18713)
+++ applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/CadastrePlugin.java	(revision 18720)
@@ -25,4 +25,6 @@
 import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
 import org.openstreetmap.josm.plugins.Plugin;
+import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.projection.*;
 
@@ -129,4 +131,9 @@
 
         UploadAction.registerUploadHook(new CheckSourceUploadHook());
+        
+        Lambert proj = new Lambert();
+        LatLon ll = new LatLon(48.559902360278954, 7.75309953770033);
+        EastNorth ea = proj.latlon2eastNorth(ll);
+        System.out.println(ea);
     }
 
@@ -154,6 +161,7 @@
 
             JMenuItem menuResetCookie = new JMenuItem(new MenuActionResetCookie());
-            JMenuItem menuLambertZone = new JMenuItem(new MenuActionLambertZone());
+            //JMenuItem menuLambertZone = new JMenuItem(new MenuActionLambertZone());
             JMenuItem menuLoadFromCache = new JMenuItem(new MenuActionLoadFromCache());
+            // temporary disabled:
             //JMenuItem menuActionBoundaries = new JMenuItem(new MenuActionBoundaries());
             //JMenuItem menuActionBuildings = new JMenuItem(new MenuActionBuildings());
@@ -164,5 +172,5 @@
             cadastreJMenu.add(menuSource);
             cadastreJMenu.add(menuResetCookie);
-            cadastreJMenu.add(menuLambertZone);
+            //cadastreJMenu.add(menuLambertZone);
             cadastreJMenu.add(menuLoadFromCache);
             // all SVG features disabled until official WMS is released
@@ -229,6 +237,4 @@
                     item.getText().equals(MenuActionBuildings.name)*/) {
                     item.setEnabled(isEnabled);
-                } else if (item.getText().equals(MenuActionLambertZone.name)) {
-                    item.setEnabled(!isEnabled);
                 }
         }
@@ -244,6 +250,6 @@
             } else if (oldFrame != null && newFrame == null) {
                 setEnabledAll(false);
-                Lambert.layoutZone = -1;
-                LambertCC9Zones.layoutZone = -1;
+                //Lambert.layoutZone = -1;
+                //LambertCC9Zones.layoutZone = -1;
             }
         }
@@ -251,8 +257,6 @@
     
     public static boolean isCadastreProjection() {
-            return Main.proj.toString().equals(new Lambert().toString())
-            || Main.proj.toString().equals(new UTM_20N_Guadeloupe_Fort_Marigot().toString())
-            || Main.proj.toString().equals(new UTM_20N_Guadeloupe_Ste_Anne().toString())
-            || Main.proj.toString().equals(new UTM_20N_Martinique_Fort_Desaix().toString())
+        return Main.proj.toString().equals(new Lambert().toString())
+            || Main.proj.toString().equals(new UTM_20N_France_DOM().toString())
             || Main.proj.toString().equals(new GaussLaborde_Reunion().toString())
             || Main.proj.toString().equals(new LambertCC9Zones().toString());
Index: applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/MenuActionLoadFromCache.java
===================================================================
--- applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/MenuActionLoadFromCache.java	(revision 18713)
+++ applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/MenuActionLoadFromCache.java	(revision 18720)
@@ -13,4 +13,5 @@
 import org.openstreetmap.josm.data.projection.Lambert;
 import org.openstreetmap.josm.data.projection.LambertCC9Zones;
+import org.openstreetmap.josm.data.projection.UTM_20N_France_DOM;
 import org.openstreetmap.josm.gui.layer.Layer;
 
@@ -30,4 +31,5 @@
 
         File[] files = fc.getSelectedFiles();
+        int layoutZone = getCurrentProjZone();
         nextFile:
         for (File file : files) {
@@ -35,6 +37,8 @@
                 String filename = file.getName();
                 String ext = (filename.lastIndexOf(".")==-1)?"":filename.substring(filename.lastIndexOf(".")+1,filename.length());
-                if ((ext.length() > 2 && ext.substring(0, CacheControl.cLambertCC9Z.length()).equals(CacheControl.cLambertCC9Z) &&
+                if ((ext.length() == 3 && ext.substring(0, CacheControl.cLambertCC9Z.length()).equals(CacheControl.cLambertCC9Z) &&
                     !(Main.proj instanceof LambertCC9Zones))
+                    || (ext.length() == 4 && ext.substring(0, CacheControl.cUTM20N.length()).equals(CacheControl.cUTM20N) &&
+                            !(Main.proj instanceof UTM_20N_France_DOM))
                     || (ext.length() == 1) && !(Main.proj instanceof Lambert)) {
                         JOptionPane.showMessageDialog(Main.parent, tr("{0} not allowed with the current projection", filename), tr("Error"), JOptionPane.ERROR_MESSAGE);
@@ -42,16 +46,14 @@
                 } else {
                     String location = filename.substring(0, filename.lastIndexOf("."));
-                    if (ext.length() > 2 && ext.substring(0, CacheControl.cLambertCC9Z.length()).equals(CacheControl.cLambertCC9Z))
+                    if (ext.length() == 3 && ext.substring(0, CacheControl.cLambertCC9Z.length()).equals(CacheControl.cLambertCC9Z))
                         ext = ext.substring(2);
-                    // check the extension and its Lambert zone consistency
+                    else if (ext.length() == 4 && ext.substring(0, CacheControl.cUTM20N.length()).equals(CacheControl.cUTM20N))
+                        ext = ext.substring(3);
+                    // check the extension and its compatibility with current projection
                     try {
                         int cacheZone = Integer.parseInt(ext) - 1;
-                        if (cacheZone >=0 && cacheZone <= 3) {
-                            if (Lambert.layoutZone == -1) {
-                                Lambert.layoutZone = cacheZone;
-                                System.out.println("Load cache \"" + filename + "\" in Lambert Zone " + (Lambert.layoutZone+1));
-                            } else if (cacheZone != Lambert.layoutZone) {
-                                System.out.println("Cannot load cache \"" + filename + "\" which is not in current Lambert Zone "
-                                        + Lambert.layoutZone);
+                        if (cacheZone >=0 && cacheZone <= 9) {
+                            if (cacheZone != layoutZone) {
+                                JOptionPane.showMessageDialog(Main.parent, tr("Cannot load cache {0} which is not compatible with current projection zone", filename), tr("Error"), JOptionPane.ERROR_MESSAGE);
                                 continue nextFile;
                             } else
@@ -59,6 +61,6 @@
                         }
                     } catch (NumberFormatException ex) {
-                        System.out.println("Selected file \"" + filename + "\" is not a WMS cache file (invalid extension)");
-                        continue;
+                        JOptionPane.showMessageDialog(Main.parent, tr("Selected file {0} is not a cache file from this plugin (invalid extension)", filename), tr("Error"), JOptionPane.ERROR_MESSAGE);
+                        continue nextFile;
                     }
                     // check if the selected cache is not already displayed
@@ -66,5 +68,5 @@
                         for (Layer l : Main.map.mapView.getAllLayers()) {
                             if (l instanceof WMSLayer && l.getName().equals(location)) {
-                                System.out.println("The location " + filename + " is already on screen. Cache not loaded.");
+                                JOptionPane.showMessageDialog(Main.parent, tr("The location {0} is already on screen. Cache not loaded.", filename), tr("Error"), JOptionPane.ERROR_MESSAGE);
                                 continue nextFile;
                             }
@@ -73,5 +75,5 @@
                     // create layer and load cache
                     WMSLayer wmsLayer = new WMSLayer("", "", Integer.parseInt(ext)-1);
-                    if (wmsLayer.getCacheControl().loadCache(file, Lambert.layoutZone))
+                    if (wmsLayer.getCacheControl().loadCache(file, layoutZone))
                         Main.main.addLayer(wmsLayer);
                     
@@ -85,6 +87,13 @@
         JFileChooser fc = new JFileChooser(new File(CadastrePlugin.cacheDir));
         fc.setMultiSelectionEnabled(true);
-        if (Lambert.layoutZone != -1)
-            fc.addChoosableFileFilter(CacheFileFilter.filters[Lambert.layoutZone]);
+        int layoutZone = new MenuActionLoadFromCache().getCurrentProjZone();
+        if (layoutZone != -1) {
+            if (Main.proj instanceof Lambert)
+                fc.addChoosableFileFilter(CacheFileLambert4ZoneFilter.filters[layoutZone]);
+            else if (Main.proj instanceof LambertCC9Zones)
+                fc.addChoosableFileFilter(CacheFileLambert9ZoneFilter.filters[layoutZone]);
+            else if (Main.proj instanceof UTM_20N_France_DOM)
+                fc.addChoosableFileFilter(CacheFileUTM20NFilter.filters[layoutZone]);
+        }
         fc.setAcceptAllFileFilterUsed(false);
 
@@ -96,3 +105,13 @@
     }
 
+    private int getCurrentProjZone() {
+        int zone = -1;
+        if (Main.proj instanceof LambertCC9Zones)
+            zone = ((LambertCC9Zones)Main.proj).getLayoutZone();
+        else if (Main.proj instanceof Lambert)
+            zone = ((Lambert)Main.proj).getLayoutZone();
+        else if (Main.proj instanceof UTM_20N_France_DOM)
+            zone = ((UTM_20N_France_DOM)Main.proj).getCurrentGeodesic();
+        return zone;
+    }
 }
Index: applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/MenuActionNewLocation.java
===================================================================
--- applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/MenuActionNewLocation.java	(revision 18713)
+++ applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/MenuActionNewLocation.java	(revision 18720)
@@ -17,4 +17,5 @@
 import org.openstreetmap.josm.data.projection.Lambert;
 import org.openstreetmap.josm.data.projection.LambertCC9Zones;
+import org.openstreetmap.josm.data.projection.UTM_20N_France_DOM;
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.tools.GBC;
@@ -81,8 +82,12 @@
                 }
                 // add the layer if it doesn't exist
+                int zone = -1;
                 if (Main.proj instanceof LambertCC9Zones)
-                    wmsLayer = new WMSLayer(location, codeCommune, LambertCC9Zones.layoutZone);
-                else
-                    wmsLayer = new WMSLayer(location, codeCommune, Lambert.layoutZone);
+                    zone = ((LambertCC9Zones)Main.proj).getLayoutZone();
+                else if (Main.proj instanceof Lambert)
+                    zone = ((Lambert)Main.proj).getLayoutZone();
+                else if (Main.proj instanceof UTM_20N_France_DOM)
+                    zone = ((UTM_20N_France_DOM)Main.proj).getCurrentGeodesic();
+                wmsLayer = new WMSLayer(location, codeCommune, zone);
                 Main.main.addLayer(wmsLayer);
                 System.out.println("Add new layer with Location:" + inputTown.getText());
Index: applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/WMSLayer.java
===================================================================
--- applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/WMSLayer.java	(revision 18713)
+++ applications/editors/josm/plugins/cadastre-fr/src/cadastre_fr/WMSLayer.java	(revision 18720)
@@ -29,5 +29,4 @@
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
-import org.openstreetmap.josm.data.projection.LambertCC9Zones;
 import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
@@ -517,6 +516,6 @@
     public void setCommuneBBox(EastNorthBound entireCommune) {
         this.communeBBox = entireCommune;
-        if (Main.proj instanceof LambertCC9Zones)
-            setLambertCC9Zone(communeBBox.min.north());
+//        if (Main.proj instanceof LambertCC9Zones)
+//            setLambertCC9Zone(communeBBox.min.north());
     }
 
@@ -532,29 +531,29 @@
     }
 
-    public void setLambertCC9Zone(double north) {
-        int lambertZone = LambertCC9Zones.north2ZoneNumber(north);
-        this.lambertZone = lambertZone;
-        if (LambertCC9Zones.layoutZone != lambertZone) {
-            String currentZone = MenuActionLambertZone.lambert9zones[LambertCC9Zones.layoutZone+1];
-            String destZone = MenuActionLambertZone.lambert9zones[lambertZone+1];
-            if (Main.map.mapView.getAllLayers().size() == 1) {
-                /* Enable this code below when JOSM will have a proper support of dynamic projection change
-                 *
-                System.out.println("close all layers and change current Lambert zone from "+LambertCC9Zones.layoutZone+" to "+lambertZone);
-                Bounds b = null;
-                if (Main.map != null && Main.map.mapView != null)
-                    b = Main.map.mapView.getRealBounds();
-                LambertCC9Zones.layoutZone = lambertZone;
-                Main.map.mapView.zoomTo(b);
-                */
-            } else {
-                JOptionPane.showMessageDialog(Main.parent, tr("Current layer is in Lambert CC9 Zone \"{0}\"\n"+
-                        "where the commune is in Lambert CC9 Zone \"{1}\".\n"+
-                        "Upload your changes, close all layers and change\n"+
-                        "manually the Lambert zone from the Cadastre menu"
-                        , currentZone, destZone));
-            }
-        }
-    }
+//    public void setLambertCC9Zone(double north) {
+//        int lambertZone = LambertCC9Zones.north2ZoneNumber(north);
+//        this.lambertZone = lambertZone;
+//        if (((LambertCC9Zones)Main.proj).getLayoutZone() != lambertZone) {
+//            String currentZone = MenuActionLambertZone.lambert9zones[((LambertCC9Zones)Main.proj).getLayoutZone()+1];
+//            String destZone = MenuActionLambertZone.lambert9zones[lambertZone+1];
+//            if (Main.map.mapView.getAllLayers().size() == 1) {
+//                /* Enable this code below when JOSM will have a proper support of dynamic projection change
+//                 *
+//                System.out.println("close all layers and change current Lambert zone from "+LambertCC9Zones.layoutZone+" to "+lambertZone);
+//                Bounds b = null;
+//                if (Main.map != null && Main.map.mapView != null)
+//                    b = Main.map.mapView.getRealBounds();
+//                LambertCC9Zones.layoutZone = lambertZone;
+//                Main.map.mapView.zoomTo(b);
+//                */
+//            } else {
+//                JOptionPane.showMessageDialog(Main.parent, tr("Current layer is in Lambert CC9 Zone \"{0}\"\n"+
+//                        "where the commune is in Lambert CC9 Zone \"{1}\".\n"+
+//                        "Upload your changes, close all layers and change\n"+
+//                        "manually the Lambert zone from the Cadastre menu"
+//                        , currentZone, destZone));
+//            }
+//        }
+//    }
 
     public EastNorth getRasterCenter() {
