Index: /applications/editors/josm/plugins/opendata/modules/fr.toulouse/src/org/openstreetmap/josm/plugins/opendata/modules/fr/toulouse/ToulouseModule.java
===================================================================
--- /applications/editors/josm/plugins/opendata/modules/fr.toulouse/src/org/openstreetmap/josm/plugins/opendata/modules/fr/toulouse/ToulouseModule.java	(revision 28698)
+++ /applications/editors/josm/plugins/opendata/modules/fr.toulouse/src/org/openstreetmap/josm/plugins/opendata/modules/fr/toulouse/ToulouseModule.java	(revision 28699)
@@ -120,5 +120,11 @@
             @Override
             public int compare(Relation o1, Relation o2) {
-                return o1.get("ref").compareTo(o2.get("ref"));
+                if (o1.hasKey("name") && o2.hasKey("name")) {
+                    return o1.get("name").compareTo(o2.get("name"));
+                } else if (o1.hasKey("ref") && o2.hasKey("ref")) {
+                    return o1.get("ref").compareTo(o2.get("ref"));
+                } else {
+                    return o1.get("description").compareTo(o2.get("description"));
+                }
             }
         });
@@ -138,5 +144,5 @@
             if (data.allPrimitives().isEmpty()) {
                 for (final ToulouseDataSetHandler handler : new ToulouseDataSetHandler[]{
-                        new SecteursHandler(), new QuartiersHandler()}) {
+                        new CommuneHandler(), new SecteursHandler(), new QuartiersHandler()}) {
                     Main.worker.submit(new Runnable() {
                         @Override
@@ -159,4 +165,8 @@
     }
     
+    public static final Collection<Relation> getMunicipalities() {
+        return getBoundaries(8);
+    }
+    
     public static final Collection<Relation> getSectors() {
         return getBoundaries(10);
Index: /applications/editors/josm/plugins/opendata/modules/fr.toulouse/src/org/openstreetmap/josm/plugins/opendata/modules/fr/toulouse/datasets/ToulouseDataSetHandler.java
===================================================================
--- /applications/editors/josm/plugins/opendata/modules/fr.toulouse/src/org/openstreetmap/josm/plugins/opendata/modules/fr/toulouse/datasets/ToulouseDataSetHandler.java	(revision 28698)
+++ /applications/editors/josm/plugins/opendata/modules/fr.toulouse/src/org/openstreetmap/josm/plugins/opendata/modules/fr/toulouse/datasets/ToulouseDataSetHandler.java	(revision 28699)
@@ -92,4 +92,5 @@
                 setDataURL(url+"/resource/document");
             }
+            addTool(new SplitByMunicipality());
             addTool(new SplitBySector());
             addTool(new SplitByNeighbourhood());
@@ -159,5 +160,14 @@
                     }
                 }
-                Main.main.addLayer(new OdDataLayer(data, baseName+"/"+boundary.get("ref"), null, ToulouseDataSetHandler.this));
+                if (!data.allPrimitives().isEmpty()) {
+                    String name = boundary.get("name");
+                    if (name == null || name.isEmpty()) {
+                        name = boundary.get("ref");
+                    }
+                    if (name == null || name.isEmpty()) {
+                        name = boundary.get("description");
+                    }
+                    Main.main.addLayer(new OdDataLayer(data, baseName+"/"+name, null, ToulouseDataSetHandler.this));
+                }
             }
         }
@@ -189,4 +199,14 @@
     }
     
+    protected class SplitByMunicipality extends SplitAction {
+        public SplitByMunicipality() {
+            super(marktr("Split by municipality"), tr("Split this data by municipality (admin_level=8)."));
+        }
+        @Override
+        protected Collection<Relation> getBoundaries() {
+            return ToulouseModule.getMunicipalities();
+        }
+    }
+
     protected class SplitBySector extends SplitAction {
         public SplitBySector() {
Index: /applications/editors/josm/plugins/opendata/modules/fr.toulouse/src/org/openstreetmap/josm/plugins/opendata/modules/fr/toulouse/datasets/ToulouseMunicipalities.java
===================================================================
--- /applications/editors/josm/plugins/opendata/modules/fr.toulouse/src/org/openstreetmap/josm/plugins/opendata/modules/fr/toulouse/datasets/ToulouseMunicipalities.java	(revision 28699)
+++ /applications/editors/josm/plugins/opendata/modules/fr.toulouse/src/org/openstreetmap/josm/plugins/opendata/modules/fr/toulouse/datasets/ToulouseMunicipalities.java	(revision 28699)
@@ -0,0 +1,53 @@
+package org.openstreetmap.josm.plugins.opendata.modules.fr.toulouse.datasets;
+
+public enum ToulouseMunicipalities {
+
+    AIGREFEUILLE(31003),
+    AUCAMVILLE(31022),
+    AUSSONNE(31032),
+    BALMA(31044),
+    BEAUPUY(31053),
+    BEAUZELLE(31056),
+    BLAGNAC(31069),
+    BRAX(31088),
+    BRUGUIERES(31091),
+    CASTELGINEST(31116),
+    COLOMIERS(31149),
+    CORNEBARRIEU(31150),
+    CUGNAUX(31157),
+    DREMIL_LAFAGE(31163),
+    FENOUILLET(31182),
+    FLOURENS(31184),
+    FONBEAUZARD(31186),
+    GAGNAC_SUR_GARONNE(31205),
+    GRATENTOUR(31230),
+    LAUNAGUET(31282),
+    LESPINASSE(31293),
+    L_UNION(31561),
+    MONDONVILLE(31351),
+    MONDOUZIL(31352),
+    MONS(31355),
+    MONTRABE(31389),
+    PIBRAC(31417),
+    PIN_BALMA(31418),
+    QUINT_FONSEGRIVES(31445),
+    SAINT_ALBAN(31467),
+    SAINT_JEAN(31488),
+    SAINT_JORY(31490),
+    SAINT_ORENS_DE_GAMEVILLE(31506),
+    SEILH(31541),
+    TOULOUSE(31555),
+    TOURNEFEUILLE(31557),
+    VILLENEUVE_TOLOSANE(31588),
+    ALL(-1);
+    
+    private final int inseeCode;
+    
+    private ToulouseMunicipalities(int inseeCode) {
+        this.inseeCode = inseeCode;
+    }
+
+    public final int getInseeCode() {
+        return inseeCode;
+    }
+}
