Index: /trunk/src/org/openstreetmap/josm/data/projection/Lambert.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/projection/Lambert.java	(revision 3342)
+++ /trunk/src/org/openstreetmap/josm/data/projection/Lambert.java	(revision 3343)
@@ -19,4 +19,5 @@
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.tools.GBC;
+import org.openstreetmap.josm.tools.ImageProvider;
 
 /**
@@ -262,4 +263,5 @@
         /* Note: we use component position 2 below to find this again */
         p.add(prefcb, GBC.eop().fill(GBC.HORIZONTAL));
+        p.add(new JLabel(ImageProvider.get("data/projection", "Departements_Lambert4Zones.png")), GBC.eol().fill(GBC.HORIZONTAL));
         p.add(GBC.glue(1, 1), GBC.eol().fill(GBC.BOTH));
     }
Index: /trunk/src/org/openstreetmap/josm/data/projection/UTM_France_DOM.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/projection/UTM_France_DOM.java	(revision 3342)
+++ /trunk/src/org/openstreetmap/josm/data/projection/UTM_France_DOM.java	(revision 3343)
@@ -27,5 +27,6 @@
     private static String MartiniqueName = tr("Martinique Fort Desaix 1952");
     private static String Reunion92Name = tr("Reunion RGR92");
-    public static String[] utmGeodesicsNames = { FortMarigotName, SainteAnneName, MartiniqueName, Reunion92Name};
+    private static String Guyane92Name = tr("Guyane RGFG95");
+    public static String[] utmGeodesicsNames = { FortMarigotName, SainteAnneName, MartiniqueName, Reunion92Name, Guyane92Name};
 
     private Bounds FortMarigotBounds = new Bounds( new LatLon(17.6,-63.25), new LatLon(18.5,-62.5));
@@ -33,5 +34,6 @@
     private Bounds MartiniqueBounds = new Bounds( new LatLon(14.25,-61.25), new LatLon(15.025,-60.725));
     private Bounds ReunionBounds = new Bounds( new LatLon(-25.92,37.58), new LatLon(-10.6, 58.27));
-    private Bounds[] utmBounds = { FortMarigotBounds, SainteAnneBounds, MartiniqueBounds, ReunionBounds};
+    private Bounds GuyaneBounds = new Bounds( new LatLon(2.16 , -54.0), new LatLon(9.06 , -49.62));
+    private Bounds[] utmBounds = { FortMarigotBounds, SainteAnneBounds, MartiniqueBounds, ReunionBounds, GuyaneBounds};
 
     private String FortMarigotEPSG = "EPSG::2969";
@@ -39,5 +41,6 @@
     private String MartiniqueEPSG = "EPSG::2973";
     private String ReunionEPSG = "EPSG::2975";
-    private String[] utmEPSGs = { FortMarigotEPSG, SainteAnneEPSG, MartiniqueEPSG, ReunionEPSG};
+    private String GuyaneEPSG = "EPSG::2972";
+    private String[] utmEPSGs = { FortMarigotEPSG, SainteAnneEPSG, MartiniqueEPSG, ReunionEPSG, GuyaneEPSG};
 
     /**
@@ -103,4 +106,9 @@
                     -32.3241E-6
                     , false, 40);
+        } else if (currentGeodesic == 4) { // UTM_22N_Guyane_RGFG95 (translation only required for re-projections from CSG67)
+            set7ParametersTranslation(new double[]{-193.066 , 236.993, 105.447},
+                    new double[]{0.4814, -0.8074,  0.1276},
+                    1.5649E-6
+                    , true, 22);
         }
     }
@@ -120,10 +128,10 @@
 
     public EastNorth latlon2eastNorth(LatLon p) {
-        if (currentGeodesic != 3) {
+        if (currentGeodesic < 3 ) {
             // translate ellipsoid GRS80 (WGS83) => reference ellipsoid geographic
             LatLon geo = GRS802Hayford(p);
             // reference ellipsoid geographic => UTM projection
             return MTProjection(geo, Ellipsoid.hayford.a, Ellipsoid.hayford.e);
-        } else { // UTM_40S_Reunion_RGR92
+        } else { // UTM_40S_Reunion_RGR92 or UTM_22N_Guyane_RGFG95
             LatLon geo = new LatLon(Math.toRadians(p.lat()), Math.toRadians(p.lon()));
             return MTProjection(geo, Ellipsoid.GRS80.a, Ellipsoid.GRS80.e);
@@ -233,5 +241,5 @@
 
     public LatLon eastNorth2latlon(EastNorth p) {
-        if (currentGeodesic != 3) {
+        if (currentGeodesic < 3) {
             MTProjection(p.east(), p.north(), zone, isNorth);
             LatLon geo = Geographic(p, Ellipsoid.hayford.a, Ellipsoid.hayford.e, 0.0 /* z */);
@@ -248,5 +256,5 @@
             return new LatLon(Math.toDegrees(wgs.lat()), Math.toDegrees(wgs.lon()));
         } else {
-            // UTM_40S_Reunion_RGR92
+            // UTM_40S_Reunion_RGR92 or UTM_22N_Guyane_RGFG95
             LatLon geo = Geographic(p, Ellipsoid.GRS80.a, Ellipsoid.GRS80.e, 0.0 /* z */);
             double N = Ellipsoid.GRS80.a / (Math.sqrt(1.0 - Ellipsoid.GRS80.e2 * Math.sin(geo.lat()) * Math.sin(geo.lat())));
@@ -408,5 +416,5 @@
 
     @Override public String toString() {
-        return (tr("UTM 20N (France)"));
+        return (tr("UTM France (DOM)"));
     }
 
@@ -420,5 +428,5 @@
         prefcb.setSelectedIndex(currentGeodesic);
         p.setLayout(new GridBagLayout());
-        p.add(new JLabel(tr("UTM20 North Geodesic system")), GBC.std().insets(5,5,0,5));
+        p.add(new JLabel(tr("UTM Geodesic system")), GBC.std().insets(5,5,0,5));
         p.add(GBC.glue(1, 0), GBC.std().fill(GBC.HORIZONTAL));
         p.add(prefcb, GBC.eop().fill(GBC.HORIZONTAL));
@@ -449,5 +457,5 @@
                 {
                     currentGeodesic = Integer.parseInt(s)-1;
-                    if(currentGeodesic < 0 || currentGeodesic > 3) {
+                    if(currentGeodesic < 0 || currentGeodesic > 4) {
                         currentGeodesic = DEFAULT_GEODESIC;
                     }
