Index: applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/datasets/ecologie/AssainissementHandler.java
===================================================================
--- applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/datasets/ecologie/AssainissementHandler.java	(revision 29015)
+++ applications/editors/josm/plugins/opendata/modules/fr.datagouvfr/src/org/openstreetmap/josm/plugins/opendata/modules/fr/datagouvfr/datasets/ecologie/AssainissementHandler.java	(revision 29299)
@@ -19,7 +19,14 @@
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.plugins.opendata.core.io.tabular.DefaultSpreadSheetHandler;
+import org.openstreetmap.josm.plugins.opendata.core.io.tabular.SpreadSheetReader.CoordinateColumns;
 import org.openstreetmap.josm.plugins.opendata.modules.fr.datagouvfr.datasets.DataGouvDataSetHandler;
 import org.openstreetmap.josm.tools.Pair;
@@ -30,5 +37,5 @@
 		super("assainissement-collectif-30381843");
 		setName("Assainissement collectif");
-		getSpreadSheetHandler().setSheetNumber(1);
+		setSpreadSheetHandler(new InternalOdsHandler());
 	}
 
@@ -40,5 +47,5 @@
 	@Override
 	public void updateDataSet(DataSet ds) {
-		// TODO Auto-generated method stub
+		// Implemented in InternalOdsHandler.nodesAdded()
 	}
 
@@ -51,6 +58,6 @@
 		try {
 			result.add(new Pair<String, URL>("Données 2009", new URL("http://www.assainissement.developpement-durable.gouv.fr/telecharger2.php")));
-			// FIXME problem with 2010 file (blank cells ?)
-			//result.add(new Pair<String, URL>("Données 2010", new URL("http://www.assainissement.developpement-durable.gouv.fr/telecharger2_2010.php")));
+			result.add(new Pair<String, URL>("Données 2010", new URL("http://www.assainissement.developpement-durable.gouv.fr/telecharger2_2010.php")));
+			result.add(new Pair<String, URL>("Données 2011", new URL("http://www.assainissement.developpement-durable.gouv.fr/telecharger2_2011.php")));
 		} catch (MalformedURLException e) {
 			e.printStackTrace();
@@ -58,3 +65,79 @@
 		return result;
 	}
+	
+	private final class InternalOdsHandler extends DefaultSpreadSheetHandler {
+
+	    private Node nodeWithKeys;
+	    
+	    private final Set<String> interestingKeys = new HashSet<String>();
+	    
+        public InternalOdsHandler() {
+            setSheetNumber(1);
+        }
+        
+        private void updateTag(Node node, String odsKey, String osmKey) {
+            String value = nodeWithKeys.get(odsKey);
+            removeTag(odsKey);
+            if (value != null && !value.isEmpty()) {
+                addTag(node, osmKey, value);
+            }
+        }
+        
+        private void addTag(Node node, String osmKey, String value) {
+            node.put(osmKey, value);
+            interestingKeys.add(osmKey);
+        }
+        
+        private void removeTag(String odsKey) {
+            nodeWithKeys.remove(odsKey);
+        }
+        
+        private void removeUninterestingTags() {
+            for (String key : nodeWithKeys.getKeys().keySet()) {
+                if (!interestingKeys.contains(key)) {
+                    nodeWithKeys.remove(key);
+                }
+            }
+        }
+
+        @Override
+        public void nodesAdded(DataSet ds, Map<CoordinateColumns, Node> nodes, String[] header, int lineNumber) {
+            Node steuNode = null;
+            Node rejetNode = null;
+            for (CoordinateColumns c : nodes.keySet()) {
+                if (header[c.xCol].contains("STEU") && header[c.yCol].contains("STEU")) {
+                    steuNode = nodes.get(c);
+                } else if (header[c.xCol].contains("rejet") && header[c.yCol].contains("rejet")) {
+                    rejetNode = nodes.get(c);
+                } else {
+                    System.err.println("Line "+lineNumber+": Unexpected coordinate columns: "+c);
+                }
+            }
+            if (steuNode == null || rejetNode == null) {
+                System.err.println("Line "+lineNumber+": 'STEU' or 'rejet' information not found");
+                return;
+            }
+            nodeWithKeys = steuNode.hasKeys() ? steuNode : rejetNode;
+            
+            addTag(steuNode, "man_made", "wastewater_plant");
+            updateTag(steuNode, "Code du STEU", "ref");
+            updateTag(steuNode, "Nom du STEU", "name");
+            updateTag(steuNode, "Date de mise en service du STEU", "start_date");
+            updateTag(steuNode, "Date de mise hors service du STEU", "end_date");
+            updateTag(steuNode, "Exploitant", "operator");
+            updateTag(steuNode, "Capacité nominale en EH", "capacity");
+            updateTag(rejetNode, "Nom du milieu de rejet", "name");
+            
+            Way pipeline = new Way();
+            pipeline.addNode(steuNode);
+            pipeline.addNode(rejetNode);
+            if (pipeline.getLength() > 1) {
+                //pipeline.put("man_made", "pipeline");
+                //pipeline.put("type", "water");
+                ds.addPrimitive(pipeline);
+            }
+            
+            removeUninterestingTags();
+        }
+	}
 }
