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 33653)
+++ /applications/editors/josm/plugins/cadastre-fr/src/org/openstreetmap/josm/plugins/fr/cadastre/edigeo/EdigeoFileGEO.java	(revision 33654)
@@ -29,5 +29,5 @@
 
     /**
-     * Coordinates reference.
+     * Coordinates reference. 7.4.2.1
      */
     public static class CoorReference extends GeoBlock {
@@ -38,5 +38,5 @@
             PROJECTED("MAP");
 
-            String code;
+            final String code;
             ReferenceType(String code) {
                 this.code = code;
@@ -57,5 +57,5 @@
             THREE_DIM_OR_NO_ALTITUDE(2);
 
-            int code;
+            final int code;
             AltitudeSystem(int code) {
                 this.code = code;
@@ -76,5 +76,5 @@
             BATHYMETRIC(2);
 
-            int code;
+            final int code;
             AltitudeSystemType(int code) {
                 this.code = code;
@@ -186,9 +186,9 @@
         /** DIM */ int nDim;
         /** ALS */ AltitudeSystem altitudeSystem;
-        /**     */ AltitudeSystemType altitudeSystemType; // TODO
-        /**     */ String altitudeSystemName = ""; // TODO
-        /**     */ String altitudeSystemCode = ""; // TODO
+        /** ALT */ AltitudeSystemType altitudeSystemType;
+        /** ALN */ String altitudeSystemName = "";
+        /** ALL */ String altitudeSystemCode = "";
         /** UNH */ String unitHorizontal = "";
-        /**     */ String unitVertical = ""; // TODO
+        /** UNV */ String unitVertical = "";
 
         CoorReference(Lot lot, String type) {
@@ -204,5 +204,9 @@
             case "DIM": nDim = safeGetInt(r); break;
             case "ALS": altitudeSystem = AltitudeSystem.of(safeGetInt(r)); break;
+            case "ALT": altitudeSystemType = AltitudeSystemType.of(safeGetInt(r)); break;
+            case "ALN": safeGet(r, s -> altitudeSystemName += s); break;
+            case "ALL": safeGet(r, s -> altitudeSystemCode += s); break;
             case "UNH": safeGet(r, s -> unitHorizontal += s); break;
+            case "UNV": safeGet(r, s -> unitVertical += s); break;
             default:
                 super.processRecord(r);
@@ -291,19 +295,34 @@
 
     /**
-     * Offset.
+     * Offset. 7.4.2.2
      */
     public static class Offset extends GeoBlock {
 
-        /**     */ int nOffsetPoints; // TODO
-        /**     */ int nControlPoints; // TODO
-        /**     */ final List<String> offsetPointIds = new ArrayList<>(); // TODO
-        /**     */ final List<EastNorth> offsetInputCoor = new ArrayList<>(); // TODO
-        /**     */ final List<EastNorth> offsetReferCoor = new ArrayList<>(); // TODO
-        /**     */ final List<String> controlPointIds = new ArrayList<>(); // TODO
-        /**     */ final List<EastNorth> controlInputCoor = new ArrayList<>(); // TODO
-        /**     */ final List<EastNorth> controlReferCoor = new ArrayList<>(); // TODO
+        /** RPC */ int nOffsetPoints;
+        /** RPI */ final List<String> offsetPointIds = new ArrayList<>();
+        /** RP1 */ final List<EastNorth> offsetInputCoor = new ArrayList<>();
+        /** RP2 */ final List<EastNorth> offsetReferCoor = new ArrayList<>();
+        /** CPC */ int nControlPoints;
+        /** CPI */ final List<String> controlPointIds = new ArrayList<>();
+        /** CP1 */ final List<EastNorth> controlInputCoor = new ArrayList<>();
+        /** CP2 */ final List<EastNorth> controlReferCoor = new ArrayList<>();
 
         Offset(Lot lot, String type) {
             super(lot, type);
+        }
+
+        @Override
+        void processRecord(EdigeoRecord r) {
+            switch (r.name) {
+            case "RPC": nOffsetPoints = safeGetInt(r); break;
+            case "RPI": safeGet(r, offsetPointIds); break;
+            case "RP1": offsetInputCoor.add(safeGetEastNorth(r)); break;
+            case "RP2": offsetReferCoor.add(safeGetEastNorth(r)); break;
+            case "CPC": nControlPoints = safeGetInt(r); break;
+            case "CPI": safeGet(r, controlPointIds); break;
+            case "CP1": controlInputCoor.add(safeGetEastNorth(r)); break;
+            case "CP2": controlReferCoor.add(safeGetEastNorth(r)); break;
+            default: super.processRecord(r);
+            }
         }
 
@@ -343,3 +362,11 @@
         return blocks.getInstances(CoorReference.class).get(0);
     }
+
+    /**
+     * Returns the offset descriptor.
+     * @return the offset descriptor
+     */
+    public Offset getOffset() {
+        return blocks.getInstances(Offset.class).get(0);
+    }
 }
