Index: /applications/editors/josm/plugins/cadastre-fr/src/org/openstreetmap/josm/plugins/fr/cadastre/edigeo/EdigeoFileGEN.java
===================================================================
--- /applications/editors/josm/plugins/cadastre-fr/src/org/openstreetmap/josm/plugins/fr/cadastre/edigeo/EdigeoFileGEN.java	(revision 33643)
+++ /applications/editors/josm/plugins/cadastre-fr/src/org/openstreetmap/josm/plugins/fr/cadastre/edigeo/EdigeoFileGEN.java	(revision 33644)
@@ -1,4 +1,6 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.plugins.fr.cadastre.edigeo;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.io.IOException;
@@ -9,4 +11,119 @@
  */
 public class EdigeoFileGEN extends EdigeoFile {
+
+    /**
+     * Geographic bounds.
+     */
+    public static class GeoBounds extends Block {
+        String cm1;
+        String cm2;
+
+        GeoBounds(String type) {
+            super(type);
+        }
+
+        @Override
+        void processRecord(EdigeoRecord r) {
+            switch (r.name) {
+            case "CM1": cm1 = safeGet(r); break;
+            case "CM2": cm2 = safeGet(r); break;
+            default:
+                super.processRecord(r);
+            }
+        }
+
+        /**
+         * Returns the minimal coordinates.
+         * @return the minimal coordinates
+         */
+        public final String getCm1() {
+            return cm1;
+        }
+
+        /**
+         * Returns the maximal coordinates.
+         * @return the maximal coordinates
+         */
+        public final String getCm2() {
+            return cm2;
+        }
+    }
+
+    /**
+     * Geographic data.
+     */
+    public static class GeoData extends Block {
+
+        /**
+         * Data structure.
+         */
+        enum Structure {
+            TOPO_VECTOR(1),
+            NETWORK(2),
+            SPAGHETTI(3),
+            REAL_MATRIX(4),
+            CODED_MATRIX(5);
+
+            final int code;
+            Structure(int code) {
+                this.code = code;
+            }
+
+            public static Structure of(int code) {
+                for (Structure s : values()) {
+                    if (s.code == code) {
+                        return s;
+                    }
+                }
+                throw new IllegalArgumentException(Integer.toString(code));
+            }
+        }
+
+        String information;
+        Structure structure;
+        String offsetId;
+
+        GeoData(String type) {
+            super(type);
+        }
+
+        @Override
+        void processRecord(EdigeoRecord r) {
+            switch (r.name) {
+            case "INF": information = safeGetAndLog(r, tr("Information")); break;
+            case "STR": structure = Structure.of(safeGetInt(r)); break;
+            case "REG": offsetId = safeGet(r); break;
+            default:
+                super.processRecord(r);
+            }
+        }
+
+        /**
+         * Returns general information.
+         * @return general information
+         */
+        public final String getInformation() {
+            return information;
+        }
+
+        /**
+         * Returns data structure.
+         * @return data structure
+         */
+        public final Structure getStructure() {
+            return structure;
+        }
+
+        /**
+         * Returns offset identifier.
+         * @return offset identifier
+         */
+        public final String getOffsetId() {
+            return offsetId;
+        }
+    }
+
+    GeoBounds bounds;
+    GeoData geodata;
 
     /**
@@ -21,7 +138,14 @@
     @Override
     protected Block createBlock(String type) {
-        // TODO Auto-generated method stub
-        return null;
+        switch (type) {
+        case "DEG":
+            bounds = new GeoBounds(type);
+            return bounds;
+        case "GSE":
+            geodata = new GeoData(type);
+            return geodata;
+        default:
+            throw new IllegalArgumentException(type);
+        }
     }
-
 }
Index: /applications/editors/josm/plugins/cadastre-fr/src/org/openstreetmap/josm/plugins/fr/cadastre/edigeo/EdigeoFileGEO.java
===================================================================
--- /applications/editors/josm/plugins/cadastre-fr/src/org/openstreetmap/josm/plugins/fr/cadastre/edigeo/EdigeoFileGEO.java	(revision 33643)
+++ /applications/editors/josm/plugins/cadastre-fr/src/org/openstreetmap/josm/plugins/fr/cadastre/edigeo/EdigeoFileGEO.java	(revision 33644)
@@ -1,4 +1,6 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.plugins.fr.cadastre.edigeo;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.io.IOException;
@@ -9,4 +11,122 @@
  */
 public class EdigeoFileGEO extends EdigeoFile {
+
+    /**
+     * Coordinates reference.
+     */
+    public static class CoorReference extends Block {
+
+        enum ReferenceType {
+            CARTESIAN("CAR"),
+            GEOGRAPHIC("GEO"),
+            PROJECTED("MAP");
+
+            String code;
+            ReferenceType(String code) {
+                this.code = code;
+            }
+
+            public static ReferenceType of(String code) {
+                for (ReferenceType r : values()) {
+                    if (r.code.equals(code)) {
+                        return r;
+                    }
+                }
+                throw new IllegalArgumentException(code);
+            }
+        }
+
+        enum AltitudeSystem {
+            TWO_DIM_PLUS_ALTITUDE(1),
+            THREE_DIM_OR_NO_ALTITUDE(2);
+
+            int code;
+            AltitudeSystem(int code) {
+                this.code = code;
+            }
+
+            public static AltitudeSystem of(int code) {
+                for (AltitudeSystem s : values()) {
+                    if (s.code == code) {
+                        return s;
+                    }
+                }
+                throw new IllegalArgumentException(Integer.toString(code));
+            }
+        }
+
+        ReferenceType type;
+        String name;
+        String code;
+        int nDim;
+        AltitudeSystem altitudeSystem;
+        String unit;
+
+        CoorReference(String type) {
+            super(type);
+        }
+
+        @Override
+        void processRecord(EdigeoRecord r) {
+            switch (r.name) {
+            case "RET": type = ReferenceType.of(safeGet(r)); break;
+            case "REN": name = safeGetAndLog(r, tr("Projection")); break;
+            case "REL": code = safeGetAndLog(r, tr("Projection")); break;
+            case "DIM": nDim = safeGetInt(r); break;
+            case "ALS": altitudeSystem = AltitudeSystem.of(safeGetInt(r)); break;
+            case "UNH": unit = safeGet(r); break;
+            default:
+                super.processRecord(r);
+            }
+        }
+
+        /**
+         * Returns reference type.
+         * @return reference type
+         */
+        public final ReferenceType getReferenceType() {
+            return type;
+        }
+
+        /**
+         * Returns reference name.
+         * @return reference name
+         */
+        public final String getReferenceName() {
+            return name;
+        }
+
+        /**
+         * Returns reference code.
+         * @return reference code
+         */
+        public final String getReferenceCode() {
+            return code;
+        }
+
+        /**
+         * Returns number of dimensions.
+         * @return number of dimensions
+         */
+        public final int getNumberOfDimensions() {
+            return nDim;
+        }
+
+        /**
+         * Returns altitude system.
+         * @return altitude system
+         */
+        public final AltitudeSystem getAltitudeSystem() {
+            return altitudeSystem;
+        }
+
+        /**
+         * Returns unit.
+         * @return unit
+         */
+        public final String getUnit() {
+            return unit;
+        }
+    }
 
     /**
@@ -21,7 +141,8 @@
     @Override
     protected Block createBlock(String type) {
-        // TODO Auto-generated method stub
-        return null;
+        if ("GEO".equals(type)) {
+            return new CoorReference(type);
+        }
+        throw new IllegalArgumentException(type);
     }
-
 }
