Index: applications/editors/josm/plugins/cadastre-fr/src/org/openstreetmap/josm/plugins/fr/cadastre/edigeo/EdigeoFileTHF.java
===================================================================
--- applications/editors/josm/plugins/cadastre-fr/src/org/openstreetmap/josm/plugins/fr/cadastre/edigeo/EdigeoFileTHF.java	(revision 33662)
+++ applications/editors/josm/plugins/cadastre-fr/src/org/openstreetmap/josm/plugins/fr/cadastre/edigeo/EdigeoFileTHF.java	(revision 33663)
@@ -12,4 +12,6 @@
 import java.util.Objects;
 
+import org.openstreetmap.josm.actions.SimplifyWayAction;
+import org.openstreetmap.josm.command.SequenceCommand;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.tools.Logging;
@@ -491,4 +493,10 @@
             lot.fill(ds);
         }
+        ds.getWays().forEach(w -> {
+            SequenceCommand command = SimplifyWayAction.simplifyWay(w, 0.25);
+            if (command != null) {
+                command.executeCommand();
+            }
+        });
         return this;
     }
Index: applications/editors/josm/plugins/cadastre-fr/src/org/openstreetmap/josm/plugins/fr/cadastre/edigeo/EdigeoFileVEC.java
===================================================================
--- applications/editors/josm/plugins/cadastre-fr/src/org/openstreetmap/josm/plugins/fr/cadastre/edigeo/EdigeoFileVEC.java	(revision 33662)
+++ applications/editors/josm/plugins/cadastre-fr/src/org/openstreetmap/josm/plugins/fr/cadastre/edigeo/EdigeoFileVEC.java	(revision 33663)
@@ -22,4 +22,6 @@
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.Relation;
+import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.projection.Projection;
@@ -571,10 +573,11 @@
             if (rel.scdRef instanceof McdConstructionRelationDef) {
                 McdConstructionRelationDef crd = (McdConstructionRelationDef) rel.scdRef;
-                assert crd.kind == kind;
-                assert crd.nAttributes == 0;
-            }
-            for (VecBlock<?> e : rel.elements) {
-                if (klass.isInstance(e)) {
-                    list.add((T) e);
+                if (crd.kind == kind) {
+                    assert crd.nAttributes == 0;
+                    for (VecBlock<?> e : rel.elements) {
+                        if (klass.isInstance(e)) {
+                            list.add((T) e);
+                        }
+                    }
                 }
             }
@@ -642,6 +645,33 @@
             List<RelationBlock> constructionRelations, List<RelationBlock> semanticRelations) {
         assert constructionRelations.size() >= 1 : constructionRelations;
-        // TODO
-        return null;
+        List<FaceBlock> faces = extract(FaceBlock.class, constructionRelations, RelationKind.IS_MADE_OF);
+        assert faces.size() >= 1;
+        if (faces.size() == 1) {
+            return addPrimitiveAndTags(ds, obj, faceToOsmPrimitive(ds, proj, faces.get(0)));
+        } else {
+            Relation r = new Relation();
+            r.put("type", "multipolygon");
+            for (FaceBlock face : faces) {
+                r.addMember(new RelationMember("outer", faceToOsmPrimitive(ds, proj, face)));
+            }
+            return addPrimitiveAndTags(ds, obj, r);
+        }
+    }
+
+    private static OsmPrimitive faceToOsmPrimitive(DataSet ds, Projection proj, FaceBlock face) {
+        List<ArcBlock> leftArcs = extract(ArcBlock.class, face.getConstructionRelations(), RelationKind.HAS_FOR_LEFT_FACE);
+        List<ArcBlock> rightArcs = extract(ArcBlock.class, face.getConstructionRelations(), RelationKind.HAS_FOR_RIGHT_FACE);
+        assert leftArcs.size() >= 1 || rightArcs.size() >= 1;
+        if ((leftArcs.size() == 1 && rightArcs.isEmpty()) || (leftArcs.isEmpty() && rightArcs.size() == 1)) {
+            Way w = new Way();
+            ArcBlock ab = (leftArcs.isEmpty() ? rightArcs : leftArcs).get(0);
+            for (EastNorth en : ab.points) {
+                w.addNode(getNodeAt(ds, proj, en));
+            }
+            return w;
+        } else {
+            // TODO
+            return new Way();
+        }
     }
 
Index: applications/editors/josm/plugins/cadastre-fr/src/org/openstreetmap/josm/plugins/fr/cadastre/edigeo/pci/EdigeoPciReader.java
===================================================================
--- applications/editors/josm/plugins/cadastre-fr/src/org/openstreetmap/josm/plugins/fr/cadastre/edigeo/pci/EdigeoPciReader.java	(revision 33662)
+++ applications/editors/josm/plugins/cadastre-fr/src/org/openstreetmap/josm/plugins/fr/cadastre/edigeo/pci/EdigeoPciReader.java	(revision 33663)
@@ -41,8 +41,11 @@
         EdigeoFileVEC.addObjectPostProcessor("19", "boundary=administrative;admin_level=8"); // Municipality limit trigger
         EdigeoFileVEC.addObjectPostProcessor("21", "highway=road"); // Path
+        EdigeoFileVEC.addObjectPostProcessor("33", "barrier=wall;bridge=yes"); // bridge parapet
+        EdigeoFileVEC.addObjectPostProcessor("34", "landuse=reservoir;natural=water;water=reservoir"); // reservoir, lake
         EdigeoFileVEC.addObjectPostProcessor("39", "barrier=wall"); // Common wall
         EdigeoFileVEC.addObjectPostProcessor("40", "barrier=wall"); // Non-adjacent wall
         EdigeoFileVEC.addObjectPostProcessor("45", "barrier=hedge"); // Common hedge
         EdigeoFileVEC.addObjectPostProcessor("46", "barrier=hedge"); // Non-adjacent hedge
+        EdigeoFileVEC.addObjectPostProcessor("65", "leisure=swimming_pool;access=private"); // Swimming pool
 
         EdigeoFileVEC.addObjectPostProcessor((o, p) -> {
@@ -57,5 +60,5 @@
                 p.remove(t);
             }
-            p.put("name", sb.toString());
+            p.put("name", sb.toString().replaceAll("   ", " ").replaceAll("  ", " "));
         }, "TEX_id");
 
@@ -76,4 +79,25 @@
             }
         }, o -> o.hasScdIdentifier("ZONCOMMUNI_id"));
+
+        EdigeoFileVEC.addObjectPostProcessor((o, p) -> {
+            p.put("boundary", "administrative");
+            p.put("admin_level", "8");
+            p.put("ref:INSEE", "XX"+p.get("IDU_id")); // TODO: find department number
+            p.put("name", p.get("TEX2_id")); // TODO: lowercase
+            p.remove("IDU_id");
+            p.remove("TEX2_id");
+        }, o -> o.hasScdIdentifier("COMMUNE_id"));
+
+        EdigeoFileVEC.addObjectPostProcessor((o, p) -> {
+            p.put("boundary", "cadastral");
+            p.put("ref", p.get("IDU_id"));
+            p.remove("IDU_id");
+        }, o -> o.hasScdIdentifier("SECTION_id") || o.hasScdIdentifier("SUBDSECT_id") || o.hasScdIdentifier("PARCELLE_id"));
+
+        EdigeoFileVEC.addObjectPostProcessor((o, p) -> p.put("wall", "no"), "DUR_id", "02");
+        EdigeoFileVEC.addObjectPostProcessor((o, p) -> {
+            p.put("building", "yes");
+            p.remove("DUR_id");
+        }, o -> o.hasScdIdentifier("BATIMENT_id"));
     }
 
