Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/OdPlugin.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/OdPlugin.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/OdPlugin.java	(revision 30723)
@@ -48,29 +48,29 @@
 public final class OdPlugin extends Plugin {
 
-	private static OdPlugin instance;
-	
-	public final XmlImporter xmlImporter = new XmlImporter();
-	
-	private final JMenu menu;
-	
-	private OdDialog dialog;
-	
-	public OdPlugin(PluginInformation info) {
-		super(info);
-		if (instance == null) {
-			instance = this;
-		} else {
-			throw new IllegalAccessError("Cannot instantiate plugin twice !");
-		}
+    private static OdPlugin instance;
+    
+    public final XmlImporter xmlImporter = new XmlImporter();
+    
+    private final JMenu menu;
+    
+    private OdDialog dialog;
+    
+    public OdPlugin(PluginInformation info) {
+        super(info);
+        if (instance == null) {
+            instance = this;
+        } else {
+            throw new IllegalAccessError("Cannot instantiate plugin twice !");
+        }
         // Allow JOSM to import more files
-		for (AbstractImporter importer : Arrays.asList(new AbstractImporter[]{
-				new CsvImporter(), new OdsImporter(), new XlsImporter(), // Tabular file formats
-				new KmlKmzImporter(), new ShpImporter(), new MifTabImporter(), new GmlImporter(), // Geographic file formats
-				new ZipImporter(), // Zip archive containing any of the others
+        for (AbstractImporter importer : Arrays.asList(new AbstractImporter[]{
+                new CsvImporter(), new OdsImporter(), new XlsImporter(), // Tabular file formats
+                new KmlKmzImporter(), new ShpImporter(), new MifTabImporter(), new GmlImporter(), // Geographic file formats
+                new ZipImporter(), // Zip archive containing any of the others
                 new SevenZipImporter(), // 7Zip archive containing any of the others
-				xmlImporter // Generic importer for XML files (currently used for Neptune files)
-		})) {
-			ExtensionFileFilter.importers.add(0, importer);
-		}
+                xmlImporter // Generic importer for XML files (currently used for Neptune files)
+        })) {
+            ExtensionFileFilter.importers.add(0, importer);
+        }
         // Load modules
         loadModules();
@@ -83,77 +83,77 @@
         // Delete previous temp dirs if any (old plugin versions did not remove them correctly)
         OdUtils.deletePreviousTempDirs();
-	}
-	
-	public static final OdPlugin getInstance() {
-		return instance;
-	}
-	
-	private JMenu getModuleMenu(Module module) {
-		String moduleName = module.getDisplayedName();
-		if (moduleName == null || moduleName.isEmpty()) {
-			moduleName = module.getModuleInformation().getName();
-		}
-		JMenu moduleMenu = new JMenu(moduleName);
-		moduleMenu.setIcon(module.getModuleInformation().getScaledIcon());
-		return moduleMenu;
-	}
-	
-	private void buildMenu() {
+    }
+    
+    public static final OdPlugin getInstance() {
+        return instance;
+    }
+    
+    private JMenu getModuleMenu(Module module) {
+        String moduleName = module.getDisplayedName();
+        if (moduleName == null || moduleName.isEmpty()) {
+            moduleName = module.getModuleInformation().getName();
+        }
+        JMenu moduleMenu = new JMenu(moduleName);
+        moduleMenu.setIcon(module.getModuleInformation().getScaledIcon());
+        return moduleMenu;
+    }
+    
+    private void buildMenu() {
         for (Module module : ModuleHandler.moduleList) {
-        	Map<DataSetCategory, JMenu> catMenus = new HashMap<>();
-        	JMenu moduleMenu = null;
-        	for (AbstractDataSetHandler handler: module.getNewlyInstanciatedHandlers()) {
-        	    URL dataURL = handler.getDataURL();
-        	    List<Pair<String, URL>> dataURLs = handler.getDataURLs();
-        		if (dataURL != null || (dataURLs != null && !dataURLs.isEmpty())) {
-        			if (moduleMenu == null) {
-        				moduleMenu = getModuleMenu(module);
-        			}
-        			DataSetCategory cat = handler.getCategory();
-        			JMenu endMenu = null;
-        			if (cat != null) {
-        				if ((endMenu = catMenus.get(cat)) == null) {
-        					catMenus.put(cat, endMenu = new JMenu(cat.getName()));
-        					setMenuItemIcon(cat.getIcon(), endMenu);
-        					moduleMenu.add(endMenu);
-        				}
-        			}
-        			if (endMenu == null) {
-        				endMenu = moduleMenu;
-        			}
-        			String handlerName = handler.getName();
-        			if (handlerName == null || handlerName.isEmpty()) {
-        				handlerName = handler.getClass().getName();
-        			}
-        			JMenuItem handlerItem = null;
-        			if (dataURL != null) {
-        			    handlerItem = endMenu.add(new DownloadDataAction(module, handlerName, dataURL));
-        			} else if (dataURLs != null) {
-        				JMenu handlerMenu = new JMenu(handlerName);
-        				JMenuItem item = null;
-        				for (Pair<String, URL> pair : dataURLs) {
-        					if (pair != null && pair.a != null && pair.b != null) {
-        						item = handlerMenu.add(new DownloadDataAction(module, pair.a, pair.b));
-        					}
-        				}
-        				if (item != null) {
-        					MenuScroller.setScrollerFor(handlerMenu);
-        					handlerItem = endMenu.add(handlerMenu);
-        				}
-        			}
-        			if (handlerItem != null) {
-        			    setMenuItemIcon(handler.getMenuIcon(), handlerItem);
-        			}
-        		}
-        	}
-        	if (moduleMenu != null) {
-        		menu.add(moduleMenu);
-        	}
+            Map<DataSetCategory, JMenu> catMenus = new HashMap<>();
+            JMenu moduleMenu = null;
+            for (AbstractDataSetHandler handler: module.getNewlyInstanciatedHandlers()) {
+                URL dataURL = handler.getDataURL();
+                List<Pair<String, URL>> dataURLs = handler.getDataURLs();
+                if (dataURL != null || (dataURLs != null && !dataURLs.isEmpty())) {
+                    if (moduleMenu == null) {
+                        moduleMenu = getModuleMenu(module);
+                    }
+                    DataSetCategory cat = handler.getCategory();
+                    JMenu endMenu = null;
+                    if (cat != null) {
+                        if ((endMenu = catMenus.get(cat)) == null) {
+                            catMenus.put(cat, endMenu = new JMenu(cat.getName()));
+                            setMenuItemIcon(cat.getIcon(), endMenu);
+                            moduleMenu.add(endMenu);
+                        }
+                    }
+                    if (endMenu == null) {
+                        endMenu = moduleMenu;
+                    }
+                    String handlerName = handler.getName();
+                    if (handlerName == null || handlerName.isEmpty()) {
+                        handlerName = handler.getClass().getName();
+                    }
+                    JMenuItem handlerItem = null;
+                    if (dataURL != null) {
+                        handlerItem = endMenu.add(new DownloadDataAction(module, handlerName, dataURL));
+                    } else if (dataURLs != null) {
+                        JMenu handlerMenu = new JMenu(handlerName);
+                        JMenuItem item = null;
+                        for (Pair<String, URL> pair : dataURLs) {
+                            if (pair != null && pair.a != null && pair.b != null) {
+                                item = handlerMenu.add(new DownloadDataAction(module, pair.a, pair.b));
+                            }
+                        }
+                        if (item != null) {
+                            MenuScroller.setScrollerFor(handlerMenu);
+                            handlerItem = endMenu.add(handlerMenu);
+                        }
+                    }
+                    if (handlerItem != null) {
+                        setMenuItemIcon(handler.getMenuIcon(), handlerItem);
+                    }
+                }
+            }
+            if (moduleMenu != null) {
+                menu.add(moduleMenu);
+            }
         }
         menu.addSeparator();
         MainMenu.add(menu, new OpenPreferencesActions());
-	}
-	
-	private void setMenuItemIcon(ImageIcon icon, JMenuItem menuItem) {
+    }
+    
+    private void setMenuItemIcon(ImageIcon icon, JMenuItem menuItem) {
         if (icon != null) {
             if (icon.getIconHeight() != 16 || icon.getIconWidth() != 16) { 
@@ -162,15 +162,15 @@
             menuItem.setIcon(icon);
         }
-	}
-
-	@Override
-	public void mapFrameInitialized(MapFrame oldFrame, MapFrame newFrame) {
-		if (newFrame != null) {
-			newFrame.addToggleDialog(dialog = new OdDialog());
-		} else {
-		    dialog = null;
-		}
-	}
-	
+    }
+
+    @Override
+    public void mapFrameInitialized(MapFrame oldFrame, MapFrame newFrame) {
+        if (newFrame != null) {
+            newFrame.addToggleDialog(dialog = new OdDialog());
+        } else {
+            dialog = null;
+        }
+    }
+    
     @Override
     public PreferenceSetting getPreferenceSetting() {
@@ -185,9 +185,9 @@
 
         ModuleHandler.installDownloadedModules(true);
-    	ModuleHandler.loadModules(Main.parent, modulesToLoad, null);
+        ModuleHandler.loadModules(Main.parent, modulesToLoad, null);
     }
     
     private final File getSubDirectory(String name) {
-    	File dir = new File(getPluginDir()+File.separator+name);
+        File dir = new File(getPluginDir()+File.separator+name);
         if (!dir.exists()) {
             dir.mkdirs();
@@ -197,9 +197,9 @@
     
     public final File getModulesDirectory() {
-    	return getSubDirectory("modules");
+        return getSubDirectory("modules");
     }
 
     public final File getResourcesDirectory() {
-    	return getSubDirectory("resources");
+        return getSubDirectory("resources");
     }
 
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/OdConstants.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/OdConstants.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/OdConstants.java	(revision 30723)
@@ -10,37 +10,37 @@
 
 public abstract class OdConstants {
-	
-	/**
-	 * Encodings
-	 */
-	public static final String UTF8 = "UTF-8";
-	public static final String ISO8859_15 = "ISO-8859-15";
-	public static final String CP850 = "Cp850";
+    
+    /**
+     * Encodings
+     */
+    public static final String UTF8 = "UTF-8";
+    public static final String ISO8859_15 = "ISO-8859-15";
+    public static final String CP850 = "Cp850";
     public static final String CP1251 = "Cp1251";
-	public static final String CP1252 = "Cp1252";
-	public static final String MAC_ROMAN = "MacRoman";
-	
-	/**
-	 * Patterns
-	 */
-	public static final String PATTERN_LANG = "{lang}";
-	
-	/**
-	 * Preferences
-	 */
-/*	public static final String PREF_COORDINATES = "opendata.coordinates";
-	public static final String VALUE_CC9ZONES = "cc9zones";
-	public static final String VALUE_WGS84 = "wgs84";*/
+    public static final String CP1252 = "Cp1252";
+    public static final String MAC_ROMAN = "MacRoman";
+    
+    /**
+     * Patterns
+     */
+    public static final String PATTERN_LANG = "{lang}";
+    
+    /**
+     * Preferences
+     */
+/*    public static final String PREF_COORDINATES = "opendata.coordinates";
+    public static final String VALUE_CC9ZONES = "cc9zones";
+    public static final String VALUE_WGS84 = "wgs84";*/
 
-	public static final String PREF_OAPI = "opendata.oapi";
+    public static final String PREF_OAPI = "opendata.oapi";
     public static final String DEFAULT_OAPI = "http://www.overpass-api.de/api/interpreter?";
     
-	public static final String PREF_XAPI = "opendata.xapi";
+    public static final String PREF_XAPI = "opendata.xapi";
     public static final String DEFAULT_XAPI = "http://www.overpass-api.de/api/xapi?";
 
-	public static final String PREF_RAWDATA = "opendata.rawdata";
+    public static final String PREF_RAWDATA = "opendata.rawdata";
     public static final boolean DEFAULT_RAWDATA = false;
 
-	public static final String PREF_MAXDISTANCE = "opendata.maxdistance";
+    public static final String PREF_MAXDISTANCE = "opendata.maxdistance";
     public static final double DEFAULT_MAXDISTANCE = 10;
 
@@ -58,18 +58,18 @@
     public static final String PREF_CRS_COMPARISON_DEBUG = "opendata.crs.comparison_debug";
 
-	/**
-	 * Icons
-	 */
-	public static final String ICON_CORE_16 = "o16.png";
-	public static final String ICON_CORE_24 = "o24.png";
-	public static final String ICON_CORE_48 = "o48.png";
-	
-	public static final String ICON_OSM_16 = "osm16.png";
-	public static final String ICON_OSM_24 = "osm24.png";
+    /**
+     * Icons
+     */
+    public static final String ICON_CORE_16 = "o16.png";
+    public static final String ICON_CORE_24 = "o24.png";
+    public static final String ICON_CORE_48 = "o48.png";
+    
+    public static final String ICON_OSM_16 = "osm16.png";
+    public static final String ICON_OSM_24 = "osm24.png";
 
-	public static final String ICON_AGREEMENT_24 = "agreement24.png";
-	public static final String ICON_EMPTY_24 = "empty24.png";
+    public static final String ICON_AGREEMENT_24 = "agreement24.png";
+    public static final String ICON_EMPTY_24 = "empty24.png";
 
-	public static final String ICON_LOOL_48 = "lool48.png";
+    public static final String ICON_LOOL_48 = "lool48.png";
 
     /**
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/actions/DownloadDataAction.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/actions/DownloadDataAction.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/actions/DownloadDataAction.java	(revision 30723)
@@ -14,18 +14,18 @@
 public class DownloadDataAction extends JosmAction {
 
-	private final URL url;
-	
-	public DownloadDataAction(Module module, String name, URL url) {
-		super(false);
-		CheckParameterUtil.ensureParameterNotNull(name, "name");
-		CheckParameterUtil.ensureParameterNotNull(url, "url");
-		putValue(Action.NAME, name);
-		putValue("toolbar", ("opendata_download_"+module.getDisplayedName()+"_"+name).toLowerCase().replace(" ", "_"));
-		this.url = url;
-	}
-	
-	@Override
-	public void actionPerformed(ActionEvent e) {
-		Main.main.menu.openLocation.openUrl(true, url.toString());
-	}
+    private final URL url;
+    
+    public DownloadDataAction(Module module, String name, URL url) {
+        super(false);
+        CheckParameterUtil.ensureParameterNotNull(name, "name");
+        CheckParameterUtil.ensureParameterNotNull(url, "url");
+        putValue(Action.NAME, name);
+        putValue("toolbar", ("opendata_download_"+module.getDisplayedName()+"_"+name).toLowerCase().replace(" ", "_"));
+        this.url = url;
+    }
+    
+    @Override
+    public void actionPerformed(ActionEvent e) {
+        Main.main.menu.openLocation.openUrl(true, url.toString());
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/actions/DownloadDataTask.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/actions/DownloadDataTask.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/actions/DownloadDataTask.java	(revision 30723)
@@ -27,41 +27,41 @@
 public class DownloadDataTask extends DownloadOsmTask {
 
-	private AbstractDataSetHandler handler;
-	
-	@Override
-	public Future<?> download(boolean newLayer, Bounds downloadArea, ProgressMonitor progressMonitor) {
-		return null;
-	}
+    private AbstractDataSetHandler handler;
+    
+    @Override
+    public Future<?> download(boolean newLayer, Bounds downloadArea, ProgressMonitor progressMonitor) {
+        return null;
+    }
 
-	@Override
-	public Future<?> loadUrl(boolean newLayer, String url, ProgressMonitor progressMonitor) {
+    @Override
+    public Future<?> loadUrl(boolean newLayer, String url, ProgressMonitor progressMonitor) {
         downloadTask = new InternalDownloadTasK(newLayer, new NetworkReader(url, handler, true), progressMonitor);
         currentBounds = null;
         if (handler == null || !handler.hasLicenseToBeAccepted() || askLicenseAgreement(handler.getLicense())) {
-        	return Main.worker.submit(downloadTask);
+            return Main.worker.submit(downloadTask);
         } else {
-        	return null;
+            return null;
         }
-	}
+    }
 
-	@Override
-	public boolean acceptsUrl(String url) {
-		this.handler = null;
-		for (Module module : ModuleHandler.moduleList) {
-			for (AbstractDataSetHandler handler : module.getNewlyInstanciatedHandlers()) {
-				if (handler.acceptsUrl(url)) {
-					this.handler = handler;
-					return true;
-				}
-			}
-		}
-		for (String ext : NetworkReader.FILE_AND_ARCHIVE_READERS.keySet()) {
-			if (Pattern.compile(".*\\."+ext, Pattern.CASE_INSENSITIVE).matcher(url).matches()) {
-				return true;
-			}
-		}
-		return false;
-	}
-	
+    @Override
+    public boolean acceptsUrl(String url) {
+        this.handler = null;
+        for (Module module : ModuleHandler.moduleList) {
+            for (AbstractDataSetHandler handler : module.getNewlyInstanciatedHandlers()) {
+                if (handler.acceptsUrl(url)) {
+                    this.handler = handler;
+                    return true;
+                }
+            }
+        }
+        for (String ext : NetworkReader.FILE_AND_ARCHIVE_READERS.keySet()) {
+            if (Pattern.compile(".*\\."+ext, Pattern.CASE_INSENSITIVE).matcher(url).matches()) {
+                return true;
+            }
+        }
+        return false;
+    }
+    
     @Override
     public String[] getPatterns() {
@@ -83,40 +83,40 @@
     protected class InternalDownloadTasK extends DownloadTask {
 
-		public InternalDownloadTasK(boolean newLayer, NetworkReader reader, ProgressMonitor progressMonitor) {
-			super(newLayer, reader, progressMonitor);
-		}
+        public InternalDownloadTasK(boolean newLayer, NetworkReader reader, ProgressMonitor progressMonitor) {
+            super(newLayer, reader, progressMonitor);
+        }
 
-		@Override
-		protected OsmDataLayer createNewLayer(String layerName) {
+        @Override
+        protected OsmDataLayer createNewLayer(String layerName) {
             File associatedFile = ((NetworkReader)reader).getReadFile();
             String filename = ((NetworkReader)reader).getReadFileName();
             if (layerName == null || layerName.isEmpty()) {
-            	if (associatedFile != null) {
-            		layerName = associatedFile.getName();
-            	} else if (filename != null && !filename.isEmpty()) {
-            		layerName = filename;
-            	} else {
-            		layerName = OsmDataLayer.createNewName();
-            	}
+                if (associatedFile != null) {
+                    layerName = associatedFile.getName();
+                } else if (filename != null && !filename.isEmpty()) {
+                    layerName = filename;
+                } else {
+                    layerName = OsmDataLayer.createNewName();
+                }
             }
-    		DataSetUpdater.updateDataSet(dataSet, handler, associatedFile);
-    		return new OdDataLayer(dataSet, layerName, associatedFile, handler);
-		}
-	}
-	
+            DataSetUpdater.updateDataSet(dataSet, handler, associatedFile);
+            return new OdDataLayer(dataSet, layerName, associatedFile, handler);
+        }
+    }
+    
     /**
      * returns true if the user accepts the license, false if they refuse
      */
     protected final boolean askLicenseAgreement(License license) {
-    	if (license == null || (license.getURL() == null && license.getSummaryURL() == null)) {
-    		return true;
-    	}
-    	try {
-	        return new AskLicenseAgreementDialog(license).showDialog().getValue() == 1;
-	        
-		} catch (IOException e) {
+        if (license == null || (license.getURL() == null && license.getSummaryURL() == null)) {
+            return true;
+        }
+        try {
+            return new AskLicenseAgreementDialog(license).showDialog().getValue() == 1;
+            
+        } catch (IOException e) {
             JOptionPane.showMessageDialog(Main.parent, tr("License URL not available: {0}", license.toString()));
             return false;
-		}
+        }
     }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/actions/OpenLinkAction.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/actions/OpenLinkAction.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/actions/OpenLinkAction.java	(revision 30723)
@@ -29,21 +29,21 @@
     public void actionPerformed(ActionEvent e) {
         try {
-        	System.out.println("Opening "+url);
-			OpenBrowser.displayUrl(url.toURI());
-		} catch (URISyntaxException e1) {
-			try {
-				System.err.println(e1.getLocalizedMessage());
-				int index = e1.getIndex();
-				if (index > -1) {
-					String s = url.toString().substring(index, index+1);
-					s = url.toString().replace(s, URLEncoder.encode(s, OdConstants.UTF8));
-					URI uri = new URI(s);
-		        	System.out.println("Opening "+uri);
-					OpenBrowser.displayUrl(uri);
-				}
-			} catch (Exception e2) {
-				e2.printStackTrace();
-			}
-		}
+            System.out.println("Opening "+url);
+            OpenBrowser.displayUrl(url.toURI());
+        } catch (URISyntaxException e1) {
+            try {
+                System.err.println(e1.getLocalizedMessage());
+                int index = e1.getIndex();
+                if (index > -1) {
+                    String s = url.toString().substring(index, index+1);
+                    s = url.toString().replace(s, URLEncoder.encode(s, OdConstants.UTF8));
+                    URI uri = new URI(s);
+                    System.out.println("Opening "+uri);
+                    OpenBrowser.displayUrl(uri);
+                }
+            } catch (Exception e2) {
+                e2.printStackTrace();
+            }
+        }
     }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/actions/OpenPreferencesActions.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/actions/OpenPreferencesActions.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/actions/OpenPreferencesActions.java	(revision 30723)
@@ -14,17 +14,17 @@
 
 public class OpenPreferencesActions extends JosmAction {
-	
+    
     public OpenPreferencesActions() {
-    	super(false);
+        super(false);
         putValue(NAME, tr("OpenData preferences"));
         putValue(SMALL_ICON, ImageProvider.get("dialogs", OdConstants.ICON_CORE_24));
-		putValue("toolbar", "opendata_open_preferences");
+        putValue("toolbar", "opendata_open_preferences");
     }
     
-	@Override
-	public void actionPerformed(ActionEvent e) {
+    @Override
+    public void actionPerformed(ActionEvent e) {
         final PreferenceDialog p = new PreferenceDialog(Main.parent);
         p.selectPreferencesTabByClass(OdPreferenceSetting.class);
         p.setVisible(true);
-	}
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/actions/ViewLicenseAction.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/actions/ViewLicenseAction.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/actions/ViewLicenseAction.java	(revision 30723)
@@ -16,20 +16,20 @@
 public class ViewLicenseAction extends JosmAction {
 
-	private final License license;
-	
-	public ViewLicenseAction(License license, String title, String description) {
-		super(title, null, description, null, false);
-		CheckParameterUtil.ensureParameterNotNull(license, "license");
-		this.license = license;
+    private final License license;
+    
+    public ViewLicenseAction(License license, String title, String description) {
+        super(title, null, description, null, false);
+        CheckParameterUtil.ensureParameterNotNull(license, "license");
+        this.license = license;
         putValue(Action.SMALL_ICON, OdUtils.getImageIcon(OdConstants.ICON_AGREEMENT_24));
-	}
+    }
 
-	@Override
-	public void actionPerformed(ActionEvent e) {
-		try {
-			new ViewLicenseDialog(license).showDialog();
-		} catch (IOException ex) {
-			ex.printStackTrace();
-		}
-	}
+    @Override
+    public void actionPerformed(ActionEvent e) {
+        try {
+            new ViewLicenseDialog(license).showDialog();
+        } catch (IOException ex) {
+            ex.printStackTrace();
+        }
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/AbstractDataSetHandler.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/AbstractDataSetHandler.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/AbstractDataSetHandler.java	(revision 30723)
@@ -37,112 +37,112 @@
 
 public abstract class AbstractDataSetHandler {
-	
-	public abstract boolean acceptsFilename(String filename);
-	
-	public boolean acceptsFile(File file) {
-		return acceptsFilename(file.getName());
-	}
-	
-	public abstract void updateDataSet(DataSet ds);
-
-	public void checkDataSetSource(DataSet ds) {
-		if (ds != null) {
-			for (OsmPrimitive p : ds.allPrimitives()) {
-				if (p.hasKeys() || p.getReferrers().isEmpty()) {
-					if (getSource() != null && p.get("source") == null) {
-						p.put("source", getSource());
-					}
-					if (sourceDate != null && p.get("source:date") == null) {
-						p.put("source:date", sourceDate);
-					}
-				}
-			}
-		}
-	}
-	
-	public void checkNames(DataSet ds) {
-		if (ds != null) {
-			for (OsmPrimitive p : ds.allPrimitives()) {
-				if (p.get("name") != null) {
-					p.put("name", NamesFrUtils.checkDictionary(p.get("name")));
-				}
-			}
-		}
-	}
-
-	private String name;
-	private DataSetCategory category;
-	private String sourceDate;
-	private File associatedFile;
-	private ImageIcon menuIcon;
-
-	public AbstractDataSetHandler() {
-		setShpHandler(new DefaultShpHandler());
-		setArchiveHandler(new DefaultArchiveHandler());
-		setCsvHandler(new DefaultCsvHandler());
-		setGmlHandler(new DefaultGmlHandler());
-	}
-	
-	private final boolean acceptsFilename(String filename, String[] expected, String ... extensions ) {
-		if (filename != null) {
-			for (String name : expected) {
-				for (String ext : extensions) {
-					if (Pattern.compile(name+"\\."+ext, Pattern.CASE_INSENSITIVE).matcher(filename).matches()) {
-					//if (filename.equalsIgnoreCase(name+"."+ext)) {
-						return true;
-					}
-				}
-			}
-		}
-		return false;
-	}
-	
-	protected final boolean acceptsCsvFilename(String filename, String ... expected) {
-		return acceptsFilename(filename, expected, OdConstants.CSV_EXT);
-	}
-
-	protected final boolean acceptsXlsFilename(String filename, String ... expected) {
-		return acceptsFilename(filename, expected, OdConstants.XLS_EXT);
-	}
-
-	protected final boolean acceptsOdsFilename(String filename, String ... expected) {
-		return acceptsFilename(filename, expected, OdConstants.ODS_EXT);
-	}
-
-	protected final boolean acceptsShpFilename(String filename, String ... expected) {
-		return acceptsFilename(filename, expected, OdConstants.SHP_EXT);
-	}
-
-	protected final boolean acceptsMifFilename(String filename, String ... expected) {
-		return acceptsFilename(filename, expected, OdConstants.MIF_EXT);
-	}
-
-	protected final boolean acceptsMifTabFilename(String filename, String ... expected) {
-		return acceptsFilename(filename, expected, OdConstants.MIF_EXT, OdConstants.TAB_EXT);
-	}
-
-	protected final boolean acceptsShpMifFilename(String filename, String ... expected) {
-		return acceptsFilename(filename, expected, OdConstants.SHP_EXT, OdConstants.MIF_EXT);
-	}
-
-	protected final boolean acceptsKmlFilename(String filename, String ... expected) {
-		return acceptsFilename(filename, expected, OdConstants.KML_EXT);
-	}
-
-	protected final boolean acceptsKmzFilename(String filename, String ... expected) {
-		return acceptsFilename(filename, expected, OdConstants.KMZ_EXT);
-	}
-
-	protected final boolean acceptsKmzShpFilename(String filename, String ... expected) {
-		return acceptsFilename(filename, expected, OdConstants.KMZ_EXT, OdConstants.SHP_EXT);
-	}
-
-	protected final boolean acceptsKmzTabFilename(String filename, String ... expected) {
-		return acceptsFilename(filename, expected, OdConstants.KMZ_EXT, OdConstants.TAB_EXT);
-	}
-
-	protected final boolean acceptsZipFilename(String filename, String ... expected) {
-		return acceptsFilename(filename, expected, OdConstants.ZIP_EXT);
-	}
+    
+    public abstract boolean acceptsFilename(String filename);
+    
+    public boolean acceptsFile(File file) {
+        return acceptsFilename(file.getName());
+    }
+    
+    public abstract void updateDataSet(DataSet ds);
+
+    public void checkDataSetSource(DataSet ds) {
+        if (ds != null) {
+            for (OsmPrimitive p : ds.allPrimitives()) {
+                if (p.hasKeys() || p.getReferrers().isEmpty()) {
+                    if (getSource() != null && p.get("source") == null) {
+                        p.put("source", getSource());
+                    }
+                    if (sourceDate != null && p.get("source:date") == null) {
+                        p.put("source:date", sourceDate);
+                    }
+                }
+            }
+        }
+    }
+    
+    public void checkNames(DataSet ds) {
+        if (ds != null) {
+            for (OsmPrimitive p : ds.allPrimitives()) {
+                if (p.get("name") != null) {
+                    p.put("name", NamesFrUtils.checkDictionary(p.get("name")));
+                }
+            }
+        }
+    }
+
+    private String name;
+    private DataSetCategory category;
+    private String sourceDate;
+    private File associatedFile;
+    private ImageIcon menuIcon;
+
+    public AbstractDataSetHandler() {
+        setShpHandler(new DefaultShpHandler());
+        setArchiveHandler(new DefaultArchiveHandler());
+        setCsvHandler(new DefaultCsvHandler());
+        setGmlHandler(new DefaultGmlHandler());
+    }
+    
+    private final boolean acceptsFilename(String filename, String[] expected, String ... extensions ) {
+        if (filename != null) {
+            for (String name : expected) {
+                for (String ext : extensions) {
+                    if (Pattern.compile(name+"\\."+ext, Pattern.CASE_INSENSITIVE).matcher(filename).matches()) {
+                    //if (filename.equalsIgnoreCase(name+"."+ext)) {
+                        return true;
+                    }
+                }
+            }
+        }
+        return false;
+    }
+    
+    protected final boolean acceptsCsvFilename(String filename, String ... expected) {
+        return acceptsFilename(filename, expected, OdConstants.CSV_EXT);
+    }
+
+    protected final boolean acceptsXlsFilename(String filename, String ... expected) {
+        return acceptsFilename(filename, expected, OdConstants.XLS_EXT);
+    }
+
+    protected final boolean acceptsOdsFilename(String filename, String ... expected) {
+        return acceptsFilename(filename, expected, OdConstants.ODS_EXT);
+    }
+
+    protected final boolean acceptsShpFilename(String filename, String ... expected) {
+        return acceptsFilename(filename, expected, OdConstants.SHP_EXT);
+    }
+
+    protected final boolean acceptsMifFilename(String filename, String ... expected) {
+        return acceptsFilename(filename, expected, OdConstants.MIF_EXT);
+    }
+
+    protected final boolean acceptsMifTabFilename(String filename, String ... expected) {
+        return acceptsFilename(filename, expected, OdConstants.MIF_EXT, OdConstants.TAB_EXT);
+    }
+
+    protected final boolean acceptsShpMifFilename(String filename, String ... expected) {
+        return acceptsFilename(filename, expected, OdConstants.SHP_EXT, OdConstants.MIF_EXT);
+    }
+
+    protected final boolean acceptsKmlFilename(String filename, String ... expected) {
+        return acceptsFilename(filename, expected, OdConstants.KML_EXT);
+    }
+
+    protected final boolean acceptsKmzFilename(String filename, String ... expected) {
+        return acceptsFilename(filename, expected, OdConstants.KMZ_EXT);
+    }
+
+    protected final boolean acceptsKmzShpFilename(String filename, String ... expected) {
+        return acceptsFilename(filename, expected, OdConstants.KMZ_EXT, OdConstants.SHP_EXT);
+    }
+
+    protected final boolean acceptsKmzTabFilename(String filename, String ... expected) {
+        return acceptsFilename(filename, expected, OdConstants.KMZ_EXT, OdConstants.TAB_EXT);
+    }
+
+    protected final boolean acceptsZipFilename(String filename, String ... expected) {
+        return acceptsFilename(filename, expected, OdConstants.ZIP_EXT);
+    }
 
     protected final boolean accepts7ZipFilename(String filename, String ... expected) {
@@ -150,247 +150,247 @@
     }
 
-	protected final boolean acceptsCsvKmzFilename(String filename, String ... expected) {
-		return acceptsFilename(filename, expected, OdConstants.CSV_EXT, OdConstants.KMZ_EXT);
-	}
-
-	protected final boolean acceptsCsvKmzTabFilename(String filename, String ... expected) {
-		return acceptsFilename(filename, expected, OdConstants.CSV_EXT, OdConstants.KMZ_EXT, OdConstants.TAB_EXT);
-	}
-		
-	protected final boolean acceptsCsvXlsFilename(String filename, String ... expected) {
-		return acceptsFilename(filename, expected, OdConstants.CSV_EXT, OdConstants.XLS_EXT);
-	}
-	
-	// -------------------- License --------------------
-	
-	private License license;
-	
-	public License getLicense() {
-		return license;
-	}
-
-	public final void setLicense(License license) {
-		this.license = license;
-	}
-
-	// --------------------- URLs ---------------------
-	
-	private URL dataURL;
-	private URL wikiURL;
-	private URL localPortalURL;
-	private URL nationalPortalURL;
-	
-	public URL getDataURL() {
-		return dataURL;
-	}
-
-	public final void setDataURL(URL dataURL) {
-		this.dataURL = dataURL;
-	}
-
-	public final void setDataURL(String dataURL) throws MalformedURLException {
-		setDataURL(new URL(dataURL));
-	}
-
-	public URL getWikiURL() {
-		return wikiURL;
-	}
-
-	public final void setWikiURL(URL wikiURL) {
-		this.wikiURL = wikiURL;
-	}
-
-	public final void setWikiURL(String wikiURL) throws MalformedURLException {
-		setWikiURL(new URL(wikiURL));
-	}
-
-	public URL getLocalPortalURL() {
-		return localPortalURL;
-	}
-
-	public final void setLocalPortalURL(URL localPortalURL) {
-		this.localPortalURL = localPortalURL;
-	}
-
-	public final void setLocalPortalURL(String localPortalURL) throws MalformedURLException {
-		setLocalPortalURL(new URL(localPortalURL));
-	}
-
-	public URL getNationalPortalURL() {
-		return nationalPortalURL;
-	}
-
-	public final void setNationalPortalURL(URL nationalPortalURL) {
-		this.nationalPortalURL = nationalPortalURL;
-	}
-
-	public final void setNationalPortalURL(String nationalPortalURL) throws MalformedURLException {
-		setNationalPortalURL(new URL(nationalPortalURL));
-	}
-
-	public List<Pair<String,URL>> getDataURLs() {return null;}
-
-	public AbstractReader getReaderForUrl(String url) {return null;}
-	
-	private boolean hasLicenseToBeAccepted = true;
-
-	public final boolean hasLicenseToBeAccepted() {
-		return hasLicenseToBeAccepted;
-	}
-
-	public final void setHasLicenseToBeAccepted(boolean hasLicenseToBeAccepted) {
-		this.hasLicenseToBeAccepted = hasLicenseToBeAccepted;
-	}
-
-	public final DataSetCategory getCategory() {
-		return category;
-	}
-
-	public final void setCategory(DataSetCategory category) {
-		this.category = category;
-	}
-
-	public final Collection<String> getOsmXapiRequests(Bounds bounds) {
-		return getOsmXapiRequests(
-				LatLon.roundToOsmPrecisionStrict(bounds.getMin().lon())+","+
-				LatLon.roundToOsmPrecisionStrict(bounds.getMin().lat())+","+
-				LatLon.roundToOsmPrecisionStrict(bounds.getMax().lon())+","+
-				LatLon.roundToOsmPrecisionStrict(bounds.getMax().lat()));
-	}
-	
-	protected Collection<String> getOsmXapiRequests(String bbox) {return null;}
-	
-	public final String getOverpassApiRequest(Bounds bounds) {
-		return getOverpassApiRequest(
-				"w=\""+LatLon.roundToOsmPrecisionStrict(bounds.getMin().lon())+"\" "+
-				"s=\""+LatLon.roundToOsmPrecisionStrict(bounds.getMin().lat())+"\" "+
-				"e=\""+LatLon.roundToOsmPrecisionStrict(bounds.getMax().lon())+"\" "+
-				"n=\""+LatLon.roundToOsmPrecisionStrict(bounds.getMax().lat())+"\"");
-	}
-
-
-	protected String getOverpassApiRequest(String bbox) {return null;}
-
-	public boolean equals(IPrimitive p1, IPrimitive p2) {return false;}
-	
-	public boolean isRelevant(IPrimitive p) {return false;}
-	
-	public final Collection<IPrimitive> extractRelevantPrimitives(DataSet ds) {
-		ArrayList<IPrimitive> result = new ArrayList<>();
-		for (IPrimitive p : ds.allPrimitives()) {
-			if (isRelevant(p)) {
-				result.add(p);
-			}
-		}
-		return result;
-	}
-	
-	public boolean isForbidden(IPrimitive p) {return false;}
-	
-	public boolean hasForbiddenTags() {return false;}
-	
-	public interface ValueReplacer {
-		public String replace(String value);
-	}
-	
-	protected final void replace(IPrimitive p, String dataKey, String osmKey) {
-		addOrReplace(p, dataKey, osmKey, null, null, null, true);
-	}
-
-	protected final void replace(IPrimitive p, String dataKey, String osmKey, ValueReplacer replacer) {
-		addOrReplace(p, dataKey, osmKey, null, null, replacer, true);
-	}
-
-	protected final void replace(IPrimitive p, String dataKey, String osmKey, String[] dataValues, String[] osmValues) {
-		addOrReplace(p, dataKey, osmKey, dataValues, osmValues, null, true);
-	}
-	
-	protected final void add(IPrimitive p, String dataKey, String osmKey, ValueReplacer replacer) {
-		addOrReplace(p, dataKey, osmKey, null, null, replacer, false);
-	}
-
-	protected final void add(IPrimitive p, String dataKey, String osmKey, String[] dataValues, String[] osmValues) {
-		addOrReplace(p, dataKey, osmKey, dataValues, osmValues, null, false);
-	}
-	
-	private final void addOrReplace(IPrimitive p, String dataKey, String osmKey, String[] dataValues, String[] osmValues, ValueReplacer replacer, boolean replace) {
-		String value = p.get(dataKey);
-		if (value != null) {
-			int index = -1;
-			for (int i = 0; dataValues != null && index == -1 && i < dataValues.length; i++) {
-				if (Pattern.compile(dataValues[i], Pattern.CASE_INSENSITIVE).matcher(value).matches()) {
-					index = i;
-				}
-				/*if (value.equalsIgnoreCase(csvValues[i])) {
-					index = i;
-				}*/
-			}
-			if (index > -1 && osmValues != null) {
-				doAddReplace(p, dataKey, osmKey, osmValues[index], replace);
-			} else if (replacer != null) {
-				doAddReplace(p, dataKey, osmKey, replacer.replace(value), replace);
-			} else if (dataValues == null || osmValues == null) {
-				doAddReplace(p, dataKey, osmKey, value, replace);
-			}
-		}
-	}
-	
-	private final void doAddReplace(IPrimitive p, String dataKey, String osmKey, String osmValue, boolean replace) {
-		if (replace) {
-			p.remove(dataKey);
-		}
-		p.put(osmKey, osmValue);
-	}
-
-	public String getSource() {
-		return null;
-	}
-		
-	public final String getSourceDate() {
-		return sourceDate;
-	}
-	
-	public final void setSourceDate(String sourceDate) {
-		this.sourceDate = sourceDate;
-	}
-
-	public final String getName() {
-		return name;
-	}
-	
-	public final void setName(String name) {
-		this.name = name;
-	}
-
-	public String getLocalPortalIconName() {
-		return OdConstants.ICON_CORE_24;
-	}
-		
-	public String getNationalPortalIconName() {
-		return OdConstants.ICON_CORE_24;
-	}
-		
-	public String getDataLayerIconName() {
-		return OdConstants.ICON_CORE_16;
-	}
-	
-	public ExtendedSourceEntry getMapPaintStyle() {
-		return null;
-	}
-
-	public ExtendedSourceEntry getTaggingPreset() {
-		return null;
-	}
-
-	protected final ExtendedSourceEntry getMapPaintStyle(String displayName) {
-		return getMapPaintStyle(displayName, this.getClass().getSimpleName().replace("Handler", ""));
-	}
-
-	protected final ExtendedSourceEntry getMapPaintStyle(String displayName, String fileNameWithoutExtension) {
-		return new ExtendedSourceEntry(displayName,	OdConstants.PROTO_RSRC+//"/"+
-				this.getClass().getPackage().getName().replace(".", "/")+"/"+
-				fileNameWithoutExtension+"."+OdConstants.MAPCSS_EXT);
-	}
-	
+    protected final boolean acceptsCsvKmzFilename(String filename, String ... expected) {
+        return acceptsFilename(filename, expected, OdConstants.CSV_EXT, OdConstants.KMZ_EXT);
+    }
+
+    protected final boolean acceptsCsvKmzTabFilename(String filename, String ... expected) {
+        return acceptsFilename(filename, expected, OdConstants.CSV_EXT, OdConstants.KMZ_EXT, OdConstants.TAB_EXT);
+    }
+        
+    protected final boolean acceptsCsvXlsFilename(String filename, String ... expected) {
+        return acceptsFilename(filename, expected, OdConstants.CSV_EXT, OdConstants.XLS_EXT);
+    }
+    
+    // -------------------- License --------------------
+    
+    private License license;
+    
+    public License getLicense() {
+        return license;
+    }
+
+    public final void setLicense(License license) {
+        this.license = license;
+    }
+
+    // --------------------- URLs ---------------------
+    
+    private URL dataURL;
+    private URL wikiURL;
+    private URL localPortalURL;
+    private URL nationalPortalURL;
+    
+    public URL getDataURL() {
+        return dataURL;
+    }
+
+    public final void setDataURL(URL dataURL) {
+        this.dataURL = dataURL;
+    }
+
+    public final void setDataURL(String dataURL) throws MalformedURLException {
+        setDataURL(new URL(dataURL));
+    }
+
+    public URL getWikiURL() {
+        return wikiURL;
+    }
+
+    public final void setWikiURL(URL wikiURL) {
+        this.wikiURL = wikiURL;
+    }
+
+    public final void setWikiURL(String wikiURL) throws MalformedURLException {
+        setWikiURL(new URL(wikiURL));
+    }
+
+    public URL getLocalPortalURL() {
+        return localPortalURL;
+    }
+
+    public final void setLocalPortalURL(URL localPortalURL) {
+        this.localPortalURL = localPortalURL;
+    }
+
+    public final void setLocalPortalURL(String localPortalURL) throws MalformedURLException {
+        setLocalPortalURL(new URL(localPortalURL));
+    }
+
+    public URL getNationalPortalURL() {
+        return nationalPortalURL;
+    }
+
+    public final void setNationalPortalURL(URL nationalPortalURL) {
+        this.nationalPortalURL = nationalPortalURL;
+    }
+
+    public final void setNationalPortalURL(String nationalPortalURL) throws MalformedURLException {
+        setNationalPortalURL(new URL(nationalPortalURL));
+    }
+
+    public List<Pair<String,URL>> getDataURLs() {return null;}
+
+    public AbstractReader getReaderForUrl(String url) {return null;}
+    
+    private boolean hasLicenseToBeAccepted = true;
+
+    public final boolean hasLicenseToBeAccepted() {
+        return hasLicenseToBeAccepted;
+    }
+
+    public final void setHasLicenseToBeAccepted(boolean hasLicenseToBeAccepted) {
+        this.hasLicenseToBeAccepted = hasLicenseToBeAccepted;
+    }
+
+    public final DataSetCategory getCategory() {
+        return category;
+    }
+
+    public final void setCategory(DataSetCategory category) {
+        this.category = category;
+    }
+
+    public final Collection<String> getOsmXapiRequests(Bounds bounds) {
+        return getOsmXapiRequests(
+                LatLon.roundToOsmPrecisionStrict(bounds.getMin().lon())+","+
+                LatLon.roundToOsmPrecisionStrict(bounds.getMin().lat())+","+
+                LatLon.roundToOsmPrecisionStrict(bounds.getMax().lon())+","+
+                LatLon.roundToOsmPrecisionStrict(bounds.getMax().lat()));
+    }
+    
+    protected Collection<String> getOsmXapiRequests(String bbox) {return null;}
+    
+    public final String getOverpassApiRequest(Bounds bounds) {
+        return getOverpassApiRequest(
+                "w=\""+LatLon.roundToOsmPrecisionStrict(bounds.getMin().lon())+"\" "+
+                "s=\""+LatLon.roundToOsmPrecisionStrict(bounds.getMin().lat())+"\" "+
+                "e=\""+LatLon.roundToOsmPrecisionStrict(bounds.getMax().lon())+"\" "+
+                "n=\""+LatLon.roundToOsmPrecisionStrict(bounds.getMax().lat())+"\"");
+    }
+
+
+    protected String getOverpassApiRequest(String bbox) {return null;}
+
+    public boolean equals(IPrimitive p1, IPrimitive p2) {return false;}
+    
+    public boolean isRelevant(IPrimitive p) {return false;}
+    
+    public final Collection<IPrimitive> extractRelevantPrimitives(DataSet ds) {
+        ArrayList<IPrimitive> result = new ArrayList<>();
+        for (IPrimitive p : ds.allPrimitives()) {
+            if (isRelevant(p)) {
+                result.add(p);
+            }
+        }
+        return result;
+    }
+    
+    public boolean isForbidden(IPrimitive p) {return false;}
+    
+    public boolean hasForbiddenTags() {return false;}
+    
+    public interface ValueReplacer {
+        public String replace(String value);
+    }
+    
+    protected final void replace(IPrimitive p, String dataKey, String osmKey) {
+        addOrReplace(p, dataKey, osmKey, null, null, null, true);
+    }
+
+    protected final void replace(IPrimitive p, String dataKey, String osmKey, ValueReplacer replacer) {
+        addOrReplace(p, dataKey, osmKey, null, null, replacer, true);
+    }
+
+    protected final void replace(IPrimitive p, String dataKey, String osmKey, String[] dataValues, String[] osmValues) {
+        addOrReplace(p, dataKey, osmKey, dataValues, osmValues, null, true);
+    }
+    
+    protected final void add(IPrimitive p, String dataKey, String osmKey, ValueReplacer replacer) {
+        addOrReplace(p, dataKey, osmKey, null, null, replacer, false);
+    }
+
+    protected final void add(IPrimitive p, String dataKey, String osmKey, String[] dataValues, String[] osmValues) {
+        addOrReplace(p, dataKey, osmKey, dataValues, osmValues, null, false);
+    }
+    
+    private final void addOrReplace(IPrimitive p, String dataKey, String osmKey, String[] dataValues, String[] osmValues, ValueReplacer replacer, boolean replace) {
+        String value = p.get(dataKey);
+        if (value != null) {
+            int index = -1;
+            for (int i = 0; dataValues != null && index == -1 && i < dataValues.length; i++) {
+                if (Pattern.compile(dataValues[i], Pattern.CASE_INSENSITIVE).matcher(value).matches()) {
+                    index = i;
+                }
+                /*if (value.equalsIgnoreCase(csvValues[i])) {
+                    index = i;
+                }*/
+            }
+            if (index > -1 && osmValues != null) {
+                doAddReplace(p, dataKey, osmKey, osmValues[index], replace);
+            } else if (replacer != null) {
+                doAddReplace(p, dataKey, osmKey, replacer.replace(value), replace);
+            } else if (dataValues == null || osmValues == null) {
+                doAddReplace(p, dataKey, osmKey, value, replace);
+            }
+        }
+    }
+    
+    private final void doAddReplace(IPrimitive p, String dataKey, String osmKey, String osmValue, boolean replace) {
+        if (replace) {
+            p.remove(dataKey);
+        }
+        p.put(osmKey, osmValue);
+    }
+
+    public String getSource() {
+        return null;
+    }
+        
+    public final String getSourceDate() {
+        return sourceDate;
+    }
+    
+    public final void setSourceDate(String sourceDate) {
+        this.sourceDate = sourceDate;
+    }
+
+    public final String getName() {
+        return name;
+    }
+    
+    public final void setName(String name) {
+        this.name = name;
+    }
+
+    public String getLocalPortalIconName() {
+        return OdConstants.ICON_CORE_24;
+    }
+        
+    public String getNationalPortalIconName() {
+        return OdConstants.ICON_CORE_24;
+    }
+        
+    public String getDataLayerIconName() {
+        return OdConstants.ICON_CORE_16;
+    }
+    
+    public ExtendedSourceEntry getMapPaintStyle() {
+        return null;
+    }
+
+    public ExtendedSourceEntry getTaggingPreset() {
+        return null;
+    }
+
+    protected final ExtendedSourceEntry getMapPaintStyle(String displayName) {
+        return getMapPaintStyle(displayName, this.getClass().getSimpleName().replace("Handler", ""));
+    }
+
+    protected final ExtendedSourceEntry getMapPaintStyle(String displayName, String fileNameWithoutExtension) {
+        return new ExtendedSourceEntry(displayName,    OdConstants.PROTO_RSRC+//"/"+
+                this.getClass().getPackage().getName().replace(".", "/")+"/"+
+                fileNameWithoutExtension+"."+OdConstants.MAPCSS_EXT);
+    }
+    
     public final ImageIcon getMenuIcon() {
         return menuIcon;
@@ -405,39 +405,39 @@
     }
 
-	public final void setAssociatedFile(File associatedFile) {
-		this.associatedFile = associatedFile;
-	}
-
-	public final File getAssociatedFile() {
-		return this.associatedFile;
-	}
-	
-	public boolean acceptsUrl(String url) {
-	    URL dataURL = getDataURL();
-		if (dataURL != null && url.equals(dataURL.toString())) {
-			return true;
-		}
-		List<Pair<String, URL>> dataURLs = getDataURLs();
-		if (dataURLs != null) {
-			for (Pair<String, URL> pair : dataURLs) {
-				if (pair.b != null && url.equals(pair.b.toString())) {
-					return true;
-				}
-			}
-		}
-		return false;
-	}
-	
-	// --------- Shapefile handling ---------
-	
-	private ShpHandler shpHandler;
-
-	public final void setShpHandler(ShpHandler handler) {
-		shpHandler = handler;
-	}
-	
-	public final ShpHandler getShpHandler() {
-		return shpHandler;
-	}
+    public final void setAssociatedFile(File associatedFile) {
+        this.associatedFile = associatedFile;
+    }
+
+    public final File getAssociatedFile() {
+        return this.associatedFile;
+    }
+    
+    public boolean acceptsUrl(String url) {
+        URL dataURL = getDataURL();
+        if (dataURL != null && url.equals(dataURL.toString())) {
+            return true;
+        }
+        List<Pair<String, URL>> dataURLs = getDataURLs();
+        if (dataURLs != null) {
+            for (Pair<String, URL> pair : dataURLs) {
+                if (pair.b != null && url.equals(pair.b.toString())) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+    
+    // --------- Shapefile handling ---------
+    
+    private ShpHandler shpHandler;
+
+    public final void setShpHandler(ShpHandler handler) {
+        shpHandler = handler;
+    }
+    
+    public final ShpHandler getShpHandler() {
+        return shpHandler;
+    }
 
     // --------- MIF handling ---------
@@ -453,67 +453,67 @@
     }
 
-	// --------- GML handling ---------
-	
-	private GmlHandler gmlHandler;
-
-	public final void setGmlHandler(GmlHandler handler) {
-		gmlHandler = handler;
-	}
-	
-	public final GmlHandler getGmlHandler() {
-		return gmlHandler;
-	}
-
-	// ------------ Archive handling ------------
-	
-	private ArchiveHandler archiveHandler;
-
-	public final void setArchiveHandler(ArchiveHandler handler) {
-		archiveHandler = handler;
-	}
-	
-	public ArchiveHandler getArchiveHandler() {
-		return archiveHandler;
-	}
-	
-	// ------ Spreadsheet handling ----------
-
-	private SpreadSheetHandler ssHandler;
-
-	public final void setSpreadSheetHandler(SpreadSheetHandler handler) {
-		ssHandler = handler;
-	}
-	
-	public final SpreadSheetHandler getSpreadSheetHandler() {
-		return ssHandler;
-	}
-
-	public final void setCsvHandler(CsvHandler handler) {
-		setSpreadSheetHandler(handler);
-	}
-	
-	public final CsvHandler getCsvHandler() {
-		if (ssHandler instanceof CsvHandler) {
-			return (CsvHandler) ssHandler;
-		} else {
-			return null;
-		}
-	}
-	
-	// Tools
-
-	private final Collection<JosmAction> tools = new ArrayList<>();
-	
-	public final Collection<JosmAction> getTools() {
-	    return tools;
-	}
-	
-	public final boolean addTool(JosmAction tool) {
+    // --------- GML handling ---------
+    
+    private GmlHandler gmlHandler;
+
+    public final void setGmlHandler(GmlHandler handler) {
+        gmlHandler = handler;
+    }
+    
+    public final GmlHandler getGmlHandler() {
+        return gmlHandler;
+    }
+
+    // ------------ Archive handling ------------
+    
+    private ArchiveHandler archiveHandler;
+
+    public final void setArchiveHandler(ArchiveHandler handler) {
+        archiveHandler = handler;
+    }
+    
+    public ArchiveHandler getArchiveHandler() {
+        return archiveHandler;
+    }
+    
+    // ------ Spreadsheet handling ----------
+
+    private SpreadSheetHandler ssHandler;
+
+    public final void setSpreadSheetHandler(SpreadSheetHandler handler) {
+        ssHandler = handler;
+    }
+    
+    public final SpreadSheetHandler getSpreadSheetHandler() {
+        return ssHandler;
+    }
+
+    public final void setCsvHandler(CsvHandler handler) {
+        setSpreadSheetHandler(handler);
+    }
+    
+    public final CsvHandler getCsvHandler() {
+        if (ssHandler instanceof CsvHandler) {
+            return (CsvHandler) ssHandler;
+        } else {
+            return null;
+        }
+    }
+    
+    // Tools
+
+    private final Collection<JosmAction> tools = new ArrayList<>();
+    
+    public final Collection<JosmAction> getTools() {
+        return tools;
+    }
+    
+    public final boolean addTool(JosmAction tool) {
         return tool != null ? tools.add(tool) : false;
-	}
-	
-	public final boolean removeTool(JosmAction tool) {
-	    return tool != null ? tools.remove(tool) : false;
-	}
+    }
+    
+    public final boolean removeTool(JosmAction tool) {
+        return tool != null ? tools.remove(tool) : false;
+    }
 
     public void notifyActive() {
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/DataSetCategory.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/DataSetCategory.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/DataSetCategory.java	(revision 30723)
@@ -8,22 +8,22 @@
 public class DataSetCategory {
 
-	private final String name;
-	private final ImageIcon icon;
-	
-	public DataSetCategory(String name, ImageIcon icon) {
-		this.name = name;
-		this.icon = icon;
-	}
-	
-	public DataSetCategory(String name, String iconName) {
-		this(name, iconName != null && !iconName.isEmpty() ? OdUtils.getImageIcon(iconName, true) : null);
-	}
+    private final String name;
+    private final ImageIcon icon;
+    
+    public DataSetCategory(String name, ImageIcon icon) {
+        this.name = name;
+        this.icon = icon;
+    }
+    
+    public DataSetCategory(String name, String iconName) {
+        this(name, iconName != null && !iconName.isEmpty() ? OdUtils.getImageIcon(iconName, true) : null);
+    }
 
-	public final String getName() {
-		return name;
-	}
+    public final String getName() {
+        return name;
+    }
 
-	public final ImageIcon getIcon() {
-		return icon;
-	}
+    public final ImageIcon getIcon() {
+        return icon;
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/DataSetUpdater.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/DataSetUpdater.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/DataSetUpdater.java	(revision 30723)
@@ -16,38 +16,38 @@
 public abstract class DataSetUpdater {
 
-	public static final void updateDataSet(DataSet dataSet, AbstractDataSetHandler handler, File associatedFile) {
-		if (dataSet != null && handler != null) {
-			if (associatedFile != null) {
-				handler.setAssociatedFile(associatedFile);
-				long lastmodified = associatedFile.lastModified();
-				if (lastmodified > 0) {
-					handler.setSourceDate(new SimpleDateFormat("yyyy-MM-dd").format(new Date(lastmodified)));
-				}
-			}
-			if (!Main.pref.getBoolean(OdConstants.PREF_RAWDATA)) {
-				handler.updateDataSet(dataSet);
-			}
-			handler.checkDataSetSource(dataSet);
-			handler.checkNames(dataSet);
-			// Replace multipolygons with single untagged member by their sole member
-			for (Relation r : dataSet.getRelations()) {
-			    if (r.isMultipolygon() && r.getMembersCount() == 1) {
-			        OsmPrimitive outer = r.getMember(0).getMember();
-			        if (!outer.isTagged()) {
-			            r.remove("type");
-			            r.removeMember(0);
+    public static final void updateDataSet(DataSet dataSet, AbstractDataSetHandler handler, File associatedFile) {
+        if (dataSet != null && handler != null) {
+            if (associatedFile != null) {
+                handler.setAssociatedFile(associatedFile);
+                long lastmodified = associatedFile.lastModified();
+                if (lastmodified > 0) {
+                    handler.setSourceDate(new SimpleDateFormat("yyyy-MM-dd").format(new Date(lastmodified)));
+                }
+            }
+            if (!Main.pref.getBoolean(OdConstants.PREF_RAWDATA)) {
+                handler.updateDataSet(dataSet);
+            }
+            handler.checkDataSetSource(dataSet);
+            handler.checkNames(dataSet);
+            // Replace multipolygons with single untagged member by their sole member
+            for (Relation r : dataSet.getRelations()) {
+                if (r.isMultipolygon() && r.getMembersCount() == 1) {
+                    OsmPrimitive outer = r.getMember(0).getMember();
+                    if (!outer.isTagged()) {
+                        r.remove("type");
+                        r.removeMember(0);
                         outer.setKeys(r.getKeys());
-			            dataSet.removePrimitive(r);
-			        }
-			    }
-			}
-			// Simplify ways geometries
-			for (Way w : dataSet.getWays()) {
-			    SequenceCommand command = Main.main.menu.simplifyWay.simplifyWay(w, 0.25);
-			    if (command != null) {
-			        Main.main.undoRedo.addNoRedraw(command);
-			    }
-			}
-		}
-	}
+                        dataSet.removePrimitive(r);
+                    }
+                }
+            }
+            // Simplify ways geometries
+            for (Way w : dataSet.getWays()) {
+                SequenceCommand command = Main.main.menu.simplifyWay.simplifyWay(w, 0.25);
+                if (command != null) {
+                    Main.main.undoRedo.addNoRedraw(command);
+                }
+            }
+        }
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/NationalHandlers.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/NationalHandlers.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/NationalHandlers.java	(revision 30723)
@@ -9,10 +9,10 @@
 public abstract class NationalHandlers {
 
-	public static final GmlHandler[] DEFAULT_GML_HANDLERS = new GmlHandler[]{
-		new AustrianGmlHandler()
-	};
+    public static final GmlHandler[] DEFAULT_GML_HANDLERS = new GmlHandler[]{
+        new AustrianGmlHandler()
+    };
 
-	public static final ShpHandler[] DEFAULT_SHP_HANDLERS = new ShpHandler[]{
-		new FrenchShpHandler()
-	};
+    public static final ShpHandler[] DEFAULT_SHP_HANDLERS = new ShpHandler[]{
+        new FrenchShpHandler()
+    };
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/SimpleDataSetHandler.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/SimpleDataSetHandler.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/SimpleDataSetHandler.java	(revision 30723)
@@ -24,180 +24,180 @@
 public abstract class SimpleDataSetHandler extends AbstractDataSetHandler {
 
-	protected static final Projection wgs84 = OdConstants.PRJ_WGS84.getProjection();
-
-	private final List<Tag> relevantTags = new ArrayList<>();
-	private final List<Tag> forbiddenTags = new ArrayList<>();
-	
-	private final boolean relevantUnion;
-	
-	public SimpleDataSetHandler() {
-		this.relevantUnion = false;
-	}
-			
-	public SimpleDataSetHandler(String relevantTag) {
-		addRelevantTag(relevantTag);
-		this.relevantUnion = false;
+    protected static final Projection wgs84 = OdConstants.PRJ_WGS84.getProjection();
+
+    private final List<Tag> relevantTags = new ArrayList<>();
+    private final List<Tag> forbiddenTags = new ArrayList<>();
+    
+    private final boolean relevantUnion;
+    
+    public SimpleDataSetHandler() {
+        this.relevantUnion = false;
+    }
+            
+    public SimpleDataSetHandler(String relevantTag) {
+        addRelevantTag(relevantTag);
+        this.relevantUnion = false;
         Tag tag;
-		String[] kv = relevantTag.split("=");
-		if (kv != null && kv.length == 2) {
-	        tag = new Tag(kv[0], kv[1]);
-		} else {
-		    tag = new Tag(relevantTag);
-		}
-		setMenuIcon(MapPaintStyles.getNodeIcon(tag));
-	}
-	
-	public SimpleDataSetHandler(boolean relevantUnion, String ... relevantTags) {
-		addRelevantTag(relevantTags);
-		this.relevantUnion = relevantUnion;
-	}
-
-	public SimpleDataSetHandler(String ... relevantTags) {
-		this(false, relevantTags);
-	}
-
-	public SimpleDataSetHandler(Tag relevantTag) {
-		addRelevantTag(relevantTag);
-		this.relevantUnion = false;
-	}
-	
-	public SimpleDataSetHandler(boolean relevantUnion, Tag ... relevantTags) {
-		addRelevantTag(relevantTags);
-		this.relevantUnion = relevantUnion;
-	}
-
-	public SimpleDataSetHandler(Tag ... relevantTags) {
-		this(false, relevantTags);
-	}
-
-	public void addRelevantTag(String ... relevantTags) {
-		addTags(this.relevantTags, relevantTags);
-	}
-
-	public void addRelevantTag(Tag ... relevantTags) {
-		addTags(this.relevantTags, relevantTags);
-	}
-
-	public void addForbiddenTag(String ... forbiddenTags) {
-		addTags(this.forbiddenTags, forbiddenTags);
-	}
-
-	public void addForbiddenTag(Tag ... forbiddenTags) {
-		addTags(this.forbiddenTags, forbiddenTags);
-	}
-	
-	private final void addTags(final List<Tag> list, String ... tags) {
-		if (tags != null) {
-			for (String tag : tags) {
-				if (tag != null) {
-					if (tag.contains("=")) {
-						String[] tab = tag.split("=");
-						list.add(new Tag(tab[0], tab[1]));
-					} else {
-						list.add(new Tag(tag));
-					}
-				}
-			}
-		}
-	}
-
-	private final void addTags(final List<Tag> list, Tag ... tags) {
-		if (tags != null) {
-			for (Tag tag : tags) {
-				if (tag != null) {
-					list.add(tag);
-				}
-			}
-		}
-	}
-	
-	@Override
-	public boolean equals(IPrimitive p1, IPrimitive p2) {
-		for (Tag tag : this.relevantTags) {
-			if (!p1.get(tag.getKey()).equals(p2.get(tag.getKey()))) {
-				return false;
-			}
-		}
-		return true;
-	}
-
-	@Override
-	public boolean isRelevant(IPrimitive p) {
-		for (Tag tag : this.relevantTags) {
-			String value = p.get(tag.getKey());
-			if (value == null || (tag.getValue() != null && !tag.getValue().equals(value))) {
-				return false;
-			}
-		}
-		if (isForbidden(p)) {
-			return false;
-		}
-		return true;
-	}
-	
-	@Override
-	public boolean isForbidden(IPrimitive p) {
-		for (Tag tag : this.forbiddenTags) {
-			String value = p.get(tag.getKey());
-			if (value != null && (tag.getValue() == null || tag.getValue().equals(value))) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	@Override
-	public boolean hasForbiddenTags() {
-		return !this.forbiddenTags.isEmpty();
-	}
-
-	protected final String[] getOverpassApiConditions() {
-		List<String> conditions = new ArrayList<>();
-		for (Tag tag : this.relevantTags) {
-			conditions.add(OverpassApi.hasKey(tag.getKey(), tag.getValue()));
-		}
-		return conditions.toArray(new String[0]);
-	}
-
-	protected String getOverpassApiQueries(String bbox, String ... conditions) {
-		String[] mpconditions = new String[conditions.length+1];
-		mpconditions[0] = OverpassApi.hasKey("type", "multipolygon");
-		for (int i=0; i<conditions.length; i++) {
-			mpconditions[i+1] = conditions[i];
-		}
-		return OverpassApi.query(bbox, NODE, conditions) + "\n" + // Nodes 
-			OverpassApi.recurse(NODE_RELATION, RELATION_WAY, WAY_NODE) + "\n" +
-			OverpassApi.query(bbox, WAY, conditions) + "\n" + // Full ways and their full relations 
-			OverpassApi.recurse(WAY_NODE, "nodes") + "\n" +
-			OverpassApi.recurse(WAY_RELATION, RELATION_WAY, WAY_NODE) + "\n" +
-			OverpassApi.query(bbox, RELATION, mpconditions) + "\n" + // Full multipolygons
-			OverpassApi.recurse(RELATION_WAY, WAY_NODE);
-	}
-	
-	@Override
-	protected String getOverpassApiRequest(String bbox) {
-		String result = "";
-		if (this.relevantUnion) {
-			for (Tag tag : this.relevantTags) {
-				result += getOverpassApiQueries(bbox, OverpassApi.hasKey(tag.getKey(), tag.getValue())); 
-			}
-			result = OverpassApi.union(result);
-		} else {
-			result = OverpassApi.union(getOverpassApiQueries(bbox, getOverpassApiConditions()));
-		}
-		return result + OverpassApi.print();
-	}
-
-	@Override
-	protected Collection<String> getOsmXapiRequests(String bbox) {
-		String relevantTags = "";
-		for (Tag tag : this.relevantTags) {
-			relevantTags += "["+tag.getKey()+"="+(tag.getValue() == null ? "*" : tag.getValue())+"]";
-		}
-		String forbiddenTags = "";
-		for (Tag tag : this.forbiddenTags) {
-			forbiddenTags += "[not("+tag.getKey()+"="+(tag.getValue() == null ? "*" : tag.getValue())+")]";
-		}
-		return Collections.singleton("*[bbox="+bbox+"]"+relevantTags+forbiddenTags+"[@meta]");
-	}
+        String[] kv = relevantTag.split("=");
+        if (kv != null && kv.length == 2) {
+            tag = new Tag(kv[0], kv[1]);
+        } else {
+            tag = new Tag(relevantTag);
+        }
+        setMenuIcon(MapPaintStyles.getNodeIcon(tag));
+    }
+    
+    public SimpleDataSetHandler(boolean relevantUnion, String ... relevantTags) {
+        addRelevantTag(relevantTags);
+        this.relevantUnion = relevantUnion;
+    }
+
+    public SimpleDataSetHandler(String ... relevantTags) {
+        this(false, relevantTags);
+    }
+
+    public SimpleDataSetHandler(Tag relevantTag) {
+        addRelevantTag(relevantTag);
+        this.relevantUnion = false;
+    }
+    
+    public SimpleDataSetHandler(boolean relevantUnion, Tag ... relevantTags) {
+        addRelevantTag(relevantTags);
+        this.relevantUnion = relevantUnion;
+    }
+
+    public SimpleDataSetHandler(Tag ... relevantTags) {
+        this(false, relevantTags);
+    }
+
+    public void addRelevantTag(String ... relevantTags) {
+        addTags(this.relevantTags, relevantTags);
+    }
+
+    public void addRelevantTag(Tag ... relevantTags) {
+        addTags(this.relevantTags, relevantTags);
+    }
+
+    public void addForbiddenTag(String ... forbiddenTags) {
+        addTags(this.forbiddenTags, forbiddenTags);
+    }
+
+    public void addForbiddenTag(Tag ... forbiddenTags) {
+        addTags(this.forbiddenTags, forbiddenTags);
+    }
+    
+    private final void addTags(final List<Tag> list, String ... tags) {
+        if (tags != null) {
+            for (String tag : tags) {
+                if (tag != null) {
+                    if (tag.contains("=")) {
+                        String[] tab = tag.split("=");
+                        list.add(new Tag(tab[0], tab[1]));
+                    } else {
+                        list.add(new Tag(tag));
+                    }
+                }
+            }
+        }
+    }
+
+    private final void addTags(final List<Tag> list, Tag ... tags) {
+        if (tags != null) {
+            for (Tag tag : tags) {
+                if (tag != null) {
+                    list.add(tag);
+                }
+            }
+        }
+    }
+    
+    @Override
+    public boolean equals(IPrimitive p1, IPrimitive p2) {
+        for (Tag tag : this.relevantTags) {
+            if (!p1.get(tag.getKey()).equals(p2.get(tag.getKey()))) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public boolean isRelevant(IPrimitive p) {
+        for (Tag tag : this.relevantTags) {
+            String value = p.get(tag.getKey());
+            if (value == null || (tag.getValue() != null && !tag.getValue().equals(value))) {
+                return false;
+            }
+        }
+        if (isForbidden(p)) {
+            return false;
+        }
+        return true;
+    }
+    
+    @Override
+    public boolean isForbidden(IPrimitive p) {
+        for (Tag tag : this.forbiddenTags) {
+            String value = p.get(tag.getKey());
+            if (value != null && (tag.getValue() == null || tag.getValue().equals(value))) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public boolean hasForbiddenTags() {
+        return !this.forbiddenTags.isEmpty();
+    }
+
+    protected final String[] getOverpassApiConditions() {
+        List<String> conditions = new ArrayList<>();
+        for (Tag tag : this.relevantTags) {
+            conditions.add(OverpassApi.hasKey(tag.getKey(), tag.getValue()));
+        }
+        return conditions.toArray(new String[0]);
+    }
+
+    protected String getOverpassApiQueries(String bbox, String ... conditions) {
+        String[] mpconditions = new String[conditions.length+1];
+        mpconditions[0] = OverpassApi.hasKey("type", "multipolygon");
+        for (int i=0; i<conditions.length; i++) {
+            mpconditions[i+1] = conditions[i];
+        }
+        return OverpassApi.query(bbox, NODE, conditions) + "\n" + // Nodes 
+            OverpassApi.recurse(NODE_RELATION, RELATION_WAY, WAY_NODE) + "\n" +
+            OverpassApi.query(bbox, WAY, conditions) + "\n" + // Full ways and their full relations 
+            OverpassApi.recurse(WAY_NODE, "nodes") + "\n" +
+            OverpassApi.recurse(WAY_RELATION, RELATION_WAY, WAY_NODE) + "\n" +
+            OverpassApi.query(bbox, RELATION, mpconditions) + "\n" + // Full multipolygons
+            OverpassApi.recurse(RELATION_WAY, WAY_NODE);
+    }
+    
+    @Override
+    protected String getOverpassApiRequest(String bbox) {
+        String result = "";
+        if (this.relevantUnion) {
+            for (Tag tag : this.relevantTags) {
+                result += getOverpassApiQueries(bbox, OverpassApi.hasKey(tag.getKey(), tag.getValue())); 
+            }
+            result = OverpassApi.union(result);
+        } else {
+            result = OverpassApi.union(getOverpassApiQueries(bbox, getOverpassApiConditions()));
+        }
+        return result + OverpassApi.print();
+    }
+
+    @Override
+    protected Collection<String> getOsmXapiRequests(String bbox) {
+        String relevantTags = "";
+        for (Tag tag : this.relevantTags) {
+            relevantTags += "["+tag.getKey()+"="+(tag.getValue() == null ? "*" : tag.getValue())+"]";
+        }
+        String forbiddenTags = "";
+        for (Tag tag : this.forbiddenTags) {
+            forbiddenTags += "[not("+tag.getKey()+"="+(tag.getValue() == null ? "*" : tag.getValue())+")]";
+        }
+        return Collections.singleton("*[bbox="+bbox+"]"+relevantTags+forbiddenTags+"[@meta]");
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/WayCombiner.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/WayCombiner.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/WayCombiner.java	(revision 30723)
@@ -27,5 +27,5 @@
 // FIXME: Try to refactor CombineWayAction instead of using this class
 public class WayCombiner {
-	
+    
     protected static Way getTargetWay(Collection<Way> combinedWays) {
         // init with an arbitrary way
@@ -155,5 +155,5 @@
         targetWay.cloneFrom(modifiedTargetWay);
         /*for (Command c : dialog.buildResolutionCommands()) {
-        	c.executeCommand();//FIXME
+            c.executeCommand();//FIXME
         }*/
         //new DeleteCommand(deletedWays).executeCommand();
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/at/AustrianConstants.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/at/AustrianConstants.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/at/AustrianConstants.java	(revision 30723)
@@ -5,7 +5,7 @@
 public interface AustrianConstants {
 
-	/**
-	 * Icon
-	 */
-	public static final String ICON_AT_24 = "at24.png";
+    /**
+     * Icon
+     */
+    public static final String ICON_AT_24 = "at24.png";
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/at/AustrianGmlHandler.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/at/AustrianGmlHandler.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/at/AustrianGmlHandler.java	(revision 30723)
@@ -10,47 +10,47 @@
 public class AustrianGmlHandler extends DefaultGmlHandler {
 
-	@Override
-	public CoordinateReferenceSystem getCrsFor(String crsName)
-			throws NoSuchAuthorityCodeException, FactoryException {
-		
-		// See http://www.esri-austria.at/downloads/coords_at.html
-		
-		if (crsName != null && crsName.startsWith("AUT")) {
-			if (crsName.equalsIgnoreCase("AUT-GK28")) {             // Gauß-Krüger, Meridianstreifen M28
-				return CRS.decode("EPSG:31281");
-			
-			} else if (crsName.equalsIgnoreCase("AUT-GK31")) {      // Gauß-Krüger, Meridianstreifen M31
-				return CRS.decode("EPSG:31282");
-				
-			} else if (crsName.equalsIgnoreCase("AUT-GK34")) {      // Gauß-Krüger, Meridianstreifen M34
-				return CRS.decode("EPSG:31283");
-				
-			} else if (crsName.equalsIgnoreCase("AUT-GK28-5")) {    // Gauß-Krüger, Meridianstreifen M28, ohne 5 Mio. im Hochwert
-				return CRS.decode("EPSG:31251");
-				
-			} else if (crsName.equalsIgnoreCase("AUT-GK31-5")) {    // Gauß-Krüger, Meridianstreifen M31, ohne 5 Mio. im Hochwert
-				return CRS.decode("EPSG:31252");
-				
-			} else if (crsName.equalsIgnoreCase("AUT-GK34-5")) {    // Gauß-Krüger, Meridianstreifen M34, ohne 5 Mio. im Hochwert
-				return CRS.decode("EPSG:31253");
-				
-			} else if (crsName.equalsIgnoreCase("AUT-BM28")) {      // Bundesmeldenetz, Meridianstreifen M28
-				return CRS.decode("EPSG:31288");
-				
-			} else if (crsName.equalsIgnoreCase("AUT-BM31")) {      // Bundesmeldenetz, Meridianstreifen M31
-				return CRS.decode("EPSG:31289");
-				
-			} else if (crsName.equalsIgnoreCase("AUT-BM34")) {      // Bundesmeldenetz, Meridianstreifen M34
-				return CRS.decode("EPSG:31290");
-				
-			} else if (crsName.equalsIgnoreCase("AUT-LM")) {        // Lambertsche Kegelprojektion (geogr. Breite des Koo.Ursprungs = 47°30')
-				return CRS.decode("EPSG:31287");
-				
-			} else if (crsName.equalsIgnoreCase("AUT-LL-BESSEL")) { // Geographische Koordinaten auf dem Bessel-Ellipsoid, Längenzählung nach Greenwich
-				// See http://josebatiz.com/granvision/Almap/Install/Data1/_B5694C166D6A4B5390B1E547C6A1FAF6
-				// FIXME
-			}
-		}
-		return super.getCrsFor(crsName);
-	}
+    @Override
+    public CoordinateReferenceSystem getCrsFor(String crsName)
+            throws NoSuchAuthorityCodeException, FactoryException {
+        
+        // See http://www.esri-austria.at/downloads/coords_at.html
+        
+        if (crsName != null && crsName.startsWith("AUT")) {
+            if (crsName.equalsIgnoreCase("AUT-GK28")) {             // Gauß-Krüger, Meridianstreifen M28
+                return CRS.decode("EPSG:31281");
+            
+            } else if (crsName.equalsIgnoreCase("AUT-GK31")) {      // Gauß-Krüger, Meridianstreifen M31
+                return CRS.decode("EPSG:31282");
+                
+            } else if (crsName.equalsIgnoreCase("AUT-GK34")) {      // Gauß-Krüger, Meridianstreifen M34
+                return CRS.decode("EPSG:31283");
+                
+            } else if (crsName.equalsIgnoreCase("AUT-GK28-5")) {    // Gauß-Krüger, Meridianstreifen M28, ohne 5 Mio. im Hochwert
+                return CRS.decode("EPSG:31251");
+                
+            } else if (crsName.equalsIgnoreCase("AUT-GK31-5")) {    // Gauß-Krüger, Meridianstreifen M31, ohne 5 Mio. im Hochwert
+                return CRS.decode("EPSG:31252");
+                
+            } else if (crsName.equalsIgnoreCase("AUT-GK34-5")) {    // Gauß-Krüger, Meridianstreifen M34, ohne 5 Mio. im Hochwert
+                return CRS.decode("EPSG:31253");
+                
+            } else if (crsName.equalsIgnoreCase("AUT-BM28")) {      // Bundesmeldenetz, Meridianstreifen M28
+                return CRS.decode("EPSG:31288");
+                
+            } else if (crsName.equalsIgnoreCase("AUT-BM31")) {      // Bundesmeldenetz, Meridianstreifen M31
+                return CRS.decode("EPSG:31289");
+                
+            } else if (crsName.equalsIgnoreCase("AUT-BM34")) {      // Bundesmeldenetz, Meridianstreifen M34
+                return CRS.decode("EPSG:31290");
+                
+            } else if (crsName.equalsIgnoreCase("AUT-LM")) {        // Lambertsche Kegelprojektion (geogr. Breite des Koo.Ursprungs = 47°30')
+                return CRS.decode("EPSG:31287");
+                
+            } else if (crsName.equalsIgnoreCase("AUT-LL-BESSEL")) { // Geographische Koordinaten auf dem Bessel-Ellipsoid, Längenzählung nach Greenwich
+                // See http://josebatiz.com/granvision/Almap/Install/Data1/_B5694C166D6A4B5390B1E547C6A1FAF6
+                // FIXME
+            }
+        }
+        return super.getCrsFor(crsName);
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/au/AustralianConstants.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/au/AustralianConstants.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/au/AustralianConstants.java	(revision 30723)
@@ -5,12 +5,12 @@
 public interface AustralianConstants {
 
-	/**
-	 * Portal
-	 */
-	public static final String AUSTRALIAN_PORTAL = "http://data.gov.au/dataset/";
-	
-	/**
-	 * Icon
-	 */
-	public static final String ICON_AU_24 = "au24.png";
+    /**
+     * Portal
+     */
+    public static final String AUSTRALIAN_PORTAL = "http://data.gov.au/dataset/";
+    
+    /**
+     * Icon
+     */
+    public static final String ICON_AU_24 = "au24.png";
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/be/BelgianConstants.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/be/BelgianConstants.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/be/BelgianConstants.java	(revision 30723)
@@ -6,12 +6,12 @@
 public interface BelgianConstants {
 
-	/**
-	 * Portal
-	 */
-	public static final String BELGIAN_PORTAL = "http://data.gov.be/"+OdConstants.PATTERN_LANG+"/dataset/";
-	
-	/**
-	 * Icon
-	 */
-	public static final String ICON_BE_24 = "be24.png";
+    /**
+     * Portal
+     */
+    public static final String BELGIAN_PORTAL = "http://data.gov.be/"+OdConstants.PATTERN_LANG+"/dataset/";
+    
+    /**
+     * Icon
+     */
+    public static final String ICON_BE_24 = "be24.png";
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/be/BelgianDataSetHandler.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/be/BelgianDataSetHandler.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/be/BelgianDataSetHandler.java	(revision 30723)
@@ -17,107 +17,107 @@
 public abstract class BelgianDataSetHandler extends SimpleDataSetHandler implements BelgianConstants {
 
-	private Projection singleProjection;
+    private Projection singleProjection;
 
-	private String nationalPortalPathDe;
-	private String nationalPortalPathEn;
-	private String nationalPortalPathFr;
-	private String nationalPortalPathNl;
+    private String nationalPortalPathDe;
+    private String nationalPortalPathEn;
+    private String nationalPortalPathFr;
+    private String nationalPortalPathNl;
 
-	protected static final Projection lambert1972 = OdConstants.PRJ_LAMBERT_1972.getProjection();
-	protected static final Projection lambert2008 = OdConstants.PRJ_LAMBERT_2008.getProjection();
-	
-	protected static final Projection[] projections = new Projection[]{
-		lambert1972,
-		lambert2008
-	};
-	
-	protected class InternalCsvHandler extends DefaultCsvHandler {
-		/*@Override
-		public List<Projection> getSpreadSheetProjections() {
-			if (singleProjection != null) {
-				return Arrays.asList(new Projection[]{singleProjection});
-			} else {
-				return Arrays.asList(projections);
-			}
-		}*/
-		
-		@Override
-		public LatLon getCoor(EastNorth en, String[] fields) {
-			if (singleProjection != null) {
-				return singleProjection.eastNorth2latlon(en);
-			} else {
-				return super.getCoor(en, fields);
-			}
-		}
-	}
+    protected static final Projection lambert1972 = OdConstants.PRJ_LAMBERT_1972.getProjection();
+    protected static final Projection lambert2008 = OdConstants.PRJ_LAMBERT_2008.getProjection();
+    
+    protected static final Projection[] projections = new Projection[]{
+        lambert1972,
+        lambert2008
+    };
+    
+    protected class InternalCsvHandler extends DefaultCsvHandler {
+        /*@Override
+        public List<Projection> getSpreadSheetProjections() {
+            if (singleProjection != null) {
+                return Arrays.asList(new Projection[]{singleProjection});
+            } else {
+                return Arrays.asList(projections);
+            }
+        }*/
+        
+        @Override
+        public LatLon getCoor(EastNorth en, String[] fields) {
+            if (singleProjection != null) {
+                return singleProjection.eastNorth2latlon(en);
+            } else {
+                return super.getCoor(en, fields);
+            }
+        }
+    }
 
-	public BelgianDataSetHandler() {
-		init();
-	}
+    public BelgianDataSetHandler() {
+        init();
+    }
 
-	public BelgianDataSetHandler(String relevantTag) {
-		super(relevantTag);
-		init();
-	}
+    public BelgianDataSetHandler(String relevantTag) {
+        super(relevantTag);
+        init();
+    }
 
-	public BelgianDataSetHandler(boolean relevantUnion, String[] relevantTags) {
-		super(relevantUnion, relevantTags);
-		init();
-	}
+    public BelgianDataSetHandler(boolean relevantUnion, String[] relevantTags) {
+        super(relevantUnion, relevantTags);
+        init();
+    }
 
-	public BelgianDataSetHandler(boolean relevantUnion, Tag[] relevantTags) {
-		super(relevantUnion, relevantTags);
-		init();
-	}
-	
-	private void init() {
-		setCsvHandler(new InternalCsvHandler());
-	}
+    public BelgianDataSetHandler(boolean relevantUnion, Tag[] relevantTags) {
+        super(relevantUnion, relevantTags);
+        init();
+    }
+    
+    private void init() {
+        setCsvHandler(new InternalCsvHandler());
+    }
 
-	protected final void setNationalPortalPath(String nationalPortalPathDe, String nationalPortalPathEn, String nationalPortalPathFr, String nationalPortalPathNl) {
-		this.nationalPortalPathDe = nationalPortalPathDe;
-		this.nationalPortalPathEn = nationalPortalPathEn;
-		this.nationalPortalPathFr = nationalPortalPathFr;
-		this.nationalPortalPathNl = nationalPortalPathNl;
-	}
+    protected final void setNationalPortalPath(String nationalPortalPathDe, String nationalPortalPathEn, String nationalPortalPathFr, String nationalPortalPathNl) {
+        this.nationalPortalPathDe = nationalPortalPathDe;
+        this.nationalPortalPathEn = nationalPortalPathEn;
+        this.nationalPortalPathFr = nationalPortalPathFr;
+        this.nationalPortalPathNl = nationalPortalPathNl;
+    }
 
-	protected final void setSingleProjection(Projection singleProjection) {
-		this.singleProjection = singleProjection;
-		getCsvHandler().setHandlesProjection(singleProjection != null);
-	}
+    protected final void setSingleProjection(Projection singleProjection) {
+        this.singleProjection = singleProjection;
+        getCsvHandler().setHandlesProjection(singleProjection != null);
+    }
 
-	@Override
-	public URL getNationalPortalURL() {
-		try {
-			String nationalPortalPath = "";
-			String lang = Main.pref.get("language");
-			if (lang == null || lang.isEmpty()) {
-				lang = Locale.getDefault().toString();
-			}
-				
-			if (lang.startsWith("de") && nationalPortalPathDe != null) {
-				nationalPortalPath = nationalPortalPathDe;
-			} else if (lang.startsWith("fr") && nationalPortalPathFr != null) {
-				nationalPortalPath = nationalPortalPathFr;
-			} else if (lang.startsWith("nl") && nationalPortalPathNl != null) {
-				nationalPortalPath = nationalPortalPathNl;
-			} else {
-				nationalPortalPath = nationalPortalPathEn;
-			}
-			return new URL(BELGIAN_PORTAL.replace(OdConstants.PATTERN_LANG, lang.substring(0, 2))+nationalPortalPath);//FIXME
-		} catch (MalformedURLException e) {
-			e.printStackTrace();
-		}
-		return null;
-	}
+    @Override
+    public URL getNationalPortalURL() {
+        try {
+            String nationalPortalPath = "";
+            String lang = Main.pref.get("language");
+            if (lang == null || lang.isEmpty()) {
+                lang = Locale.getDefault().toString();
+            }
+                
+            if (lang.startsWith("de") && nationalPortalPathDe != null) {
+                nationalPortalPath = nationalPortalPathDe;
+            } else if (lang.startsWith("fr") && nationalPortalPathFr != null) {
+                nationalPortalPath = nationalPortalPathFr;
+            } else if (lang.startsWith("nl") && nationalPortalPathNl != null) {
+                nationalPortalPath = nationalPortalPathNl;
+            } else {
+                nationalPortalPath = nationalPortalPathEn;
+            }
+            return new URL(BELGIAN_PORTAL.replace(OdConstants.PATTERN_LANG, lang.substring(0, 2))+nationalPortalPath);//FIXME
+        } catch (MalformedURLException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
 
-	@Override
-	public String getLocalPortalIconName() {
-		return ICON_BE_24;
-	}
+    @Override
+    public String getLocalPortalIconName() {
+        return ICON_BE_24;
+    }
 
-	@Override
-	public String getNationalPortalIconName() {
-		return ICON_BE_24;
-	}
+    @Override
+    public String getNationalPortalIconName() {
+        return ICON_BE_24;
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/ca/CanadianConstants.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/ca/CanadianConstants.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/ca/CanadianConstants.java	(revision 30723)
@@ -5,12 +5,12 @@
 public interface CanadianConstants {
 
-	/**
-	 * Portal
-	 */
-	public static final String CANADIAN_PORTAL = "http://www.data.gc.ca/geo/";
-	
-	/**
-	 * Icon
-	 */
-	public static final String ICON_CA_24 = "ca24.png";
+    /**
+     * Portal
+     */
+    public static final String CANADIAN_PORTAL = "http://www.data.gc.ca/geo/";
+    
+    /**
+     * Icon
+     */
+    public static final String ICON_CA_24 = "ca24.png";
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/cl/ChileanConstants.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/cl/ChileanConstants.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/cl/ChileanConstants.java	(revision 30723)
@@ -5,12 +5,12 @@
 public interface ChileanConstants {
 
-	/**
-	 * Portal
-	 */
-	public static final String CHILEAN_PORTAL = "http://datos.gob.cl/datasets/";
-	
-	/**
-	 * Icon
-	 */
-	public static final String ICON_CL_24 = "cl24.png";
+    /**
+     * Portal
+     */
+    public static final String CHILEAN_PORTAL = "http://datos.gob.cl/datasets/";
+    
+    /**
+     * Icon
+     */
+    public static final String ICON_CL_24 = "cl24.png";
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/es/SpanishConstants.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/es/SpanishConstants.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/es/SpanishConstants.java	(revision 30723)
@@ -5,12 +5,12 @@
 public interface SpanishConstants {
 
-	/**
-	 * Portal
-	 */
-	public static final String SPANISH_PORTAL = "http://datos.gob.es/datos/";
-	
-	/**
-	 * Icon
-	 */
-	public static final String ICON_ES_24 = "es24.png";
+    /**
+     * Portal
+     */
+    public static final String SPANISH_PORTAL = "http://datos.gob.es/datos/";
+    
+    /**
+     * Icon
+     */
+    public static final String ICON_ES_24 = "es24.png";
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/fr/FrenchAdministrativeUnit.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/fr/FrenchAdministrativeUnit.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/fr/FrenchAdministrativeUnit.java	(revision 30723)
@@ -3,164 +3,164 @@
 
 public abstract class FrenchAdministrativeUnit {
-	private final String code; 
-	private final String name;
-	
-	private FrenchAdministrativeUnit(String code, String name) {
-		this.code = code;
-		this.name = name;
-	}
+    private final String code; 
+    private final String name;
+    
+    private FrenchAdministrativeUnit(String code, String name) {
+        this.code = code;
+        this.name = name;
+    }
 
-	public final String getCode() {
-		return code;
-	}
+    public final String getCode() {
+        return code;
+    }
 
-	public final String getName() {
-		return name;
-	}
-	
-	public static final class FrenchDepartment extends FrenchAdministrativeUnit {
-		private FrenchDepartment(String code, String name) {
-			super(code, name);
-		}
-	}
-	
-	public static final class FrenchRegion extends FrenchAdministrativeUnit {
-		private FrenchRegion(String code, String name) {
-			super(code, name);
-		}
-	}
+    public final String getName() {
+        return name;
+    }
+    
+    public static final class FrenchDepartment extends FrenchAdministrativeUnit {
+        private FrenchDepartment(String code, String name) {
+            super(code, name);
+        }
+    }
+    
+    public static final class FrenchRegion extends FrenchAdministrativeUnit {
+        private FrenchRegion(String code, String name) {
+            super(code, name);
+        }
+    }
 
-	public static final FrenchDepartment[] allDepartments = new FrenchDepartment[] {
-		new FrenchDepartment("001", "Ain"),
-		new FrenchDepartment("002", "Aisne"),
-		new FrenchDepartment("003", "Allier"),
-		new FrenchDepartment("004", "Alpes-de-Haute-Provence"),
-		new FrenchDepartment("005", "Hautes-Alpes"),
-		new FrenchDepartment("006", "Alpes-Maritimes"),
-		new FrenchDepartment("007", "Ardèche"),
-		new FrenchDepartment("008", "Ardennes"),
-		new FrenchDepartment("009", "Ariège"),
-		new FrenchDepartment("010", "Aube"),
-		new FrenchDepartment("011", "Aude"),
-		new FrenchDepartment("012", "Aveyron"),
-		new FrenchDepartment("013", "Bouches-du-Rhône"),
-		new FrenchDepartment("014", "Calvados"),
-		new FrenchDepartment("015", "Cantal"),
-		new FrenchDepartment("016", "Charente"),
-		new FrenchDepartment("017", "Charente-Maritime"),
-		new FrenchDepartment("018", "Cher"),
-		new FrenchDepartment("019", "Corrèze"),
-		new FrenchDepartment("02A", "Corse-du-Sud"),
-		new FrenchDepartment("02B", "Haute-Corse"),
-		new FrenchDepartment("021", "Côte-d'Or"),
-		new FrenchDepartment("022", "Côtes-d'Armor"),
-		new FrenchDepartment("023", "Creuse"),
-		new FrenchDepartment("024", "Dordogne"),
-		new FrenchDepartment("025", "Doubs"),
-		new FrenchDepartment("026", "Drôme"),
-		new FrenchDepartment("027", "Eure"),
-		new FrenchDepartment("028", "Eure-et-Loir"),
-		new FrenchDepartment("029", "Finistère"),
-		new FrenchDepartment("030", "Gard"),
-		new FrenchDepartment("031", "Haute-Garonne"),
-		new FrenchDepartment("032", "Gers"),
-		new FrenchDepartment("033", "Gironde"),
-		new FrenchDepartment("034", "Hérault"),
-		new FrenchDepartment("035", "Ille-et-Vilaine"),
-		new FrenchDepartment("036", "Indre"),
-		new FrenchDepartment("037", "Indre-et-Loire"),
-		new FrenchDepartment("038", "Isère"),
-		new FrenchDepartment("039", "Jura"),
-		new FrenchDepartment("040", "Landes"),
-		new FrenchDepartment("041", "Loir-et-Cher"),
-		new FrenchDepartment("042", "Loire"),
-		new FrenchDepartment("043", "Haute-Loire"),
-		new FrenchDepartment("044", "Loire-Atlantique"),
-		new FrenchDepartment("045", "Loiret"),
-		new FrenchDepartment("046", "Lot"),
-		new FrenchDepartment("047", "Lot-et-Garonne"),
-		new FrenchDepartment("048", "Lozère"),
-		new FrenchDepartment("049", "Maine-et-Loire"),
-		new FrenchDepartment("050", "Manche"),
-		new FrenchDepartment("051", "Marne"),
-		new FrenchDepartment("052", "Haute-Marne"),
-		new FrenchDepartment("053", "Mayenne"),
-		new FrenchDepartment("054", "Meurthe-et-Moselle"),
-		new FrenchDepartment("055", "Meuse"),
-		new FrenchDepartment("056", "Morbihan"),
-		new FrenchDepartment("057", "Moselle"),
-		new FrenchDepartment("058", "Nièvre"),
-		new FrenchDepartment("059", "Nord"),
-		new FrenchDepartment("060", "Oise"),
-		new FrenchDepartment("061", "Orne"),
-		new FrenchDepartment("062", "Pas-de-Calais"),
-		new FrenchDepartment("063", "Puy-de-Dôme"),
-		new FrenchDepartment("064", "Pyrénées-Atlantiques"),
-		new FrenchDepartment("065", "Hautes-Pyrénées"),
-		new FrenchDepartment("066", "Pyrénées-Orientales"),
-		new FrenchDepartment("067", "Bas-Rhin"),
-		new FrenchDepartment("068", "Haut-Rhin"),
-		new FrenchDepartment("069", "Rhône"),
-		new FrenchDepartment("070", "Haute-Saône"),
-		new FrenchDepartment("071", "Saône-et-Loire"),
-		new FrenchDepartment("072", "Sarthe"),
-		new FrenchDepartment("073", "Savoie"),
-		new FrenchDepartment("074", "Haute-Savoie"),
-		new FrenchDepartment("075", "Paris"),
-		new FrenchDepartment("076", "Seine-Maritime"),
-		new FrenchDepartment("077", "Seine-et-Marne"),
-		new FrenchDepartment("078", "Yvelines"),
-		new FrenchDepartment("079", "Deux-Sèvres"),
-		new FrenchDepartment("080", "Somme"),
-		new FrenchDepartment("081", "Tarn"),
-		new FrenchDepartment("082", "Tarn-et-Garonne"),
-		new FrenchDepartment("083", "Var"),
-		new FrenchDepartment("084", "Vaucluse"),
-		new FrenchDepartment("085", "Vendée"),
-		new FrenchDepartment("086", "Vienne"),
-		new FrenchDepartment("087", "Haute-Vienne"),
-		new FrenchDepartment("088", "Vosges"),
-		new FrenchDepartment("089", "Yonne"),
-		new FrenchDepartment("090", "Territoire de Belfort"),
-		new FrenchDepartment("091", "Essonne"),
-		new FrenchDepartment("092", "Hauts-de-Seine"),
-		new FrenchDepartment("093", "Seine-Saint-Denis"),
-		new FrenchDepartment("094", "Val-de-Marne"),
-		new FrenchDepartment("095", "Val-d'Oise"),
-		new FrenchDepartment("971", "Guadeloupe"),
-		new FrenchDepartment("972", "Martinique"),
-		new FrenchDepartment("973", "Guyane"),
-		new FrenchDepartment("974", "La Réunion"),
-		new FrenchDepartment("976", "Mayotte"),
-	};
+    public static final FrenchDepartment[] allDepartments = new FrenchDepartment[] {
+        new FrenchDepartment("001", "Ain"),
+        new FrenchDepartment("002", "Aisne"),
+        new FrenchDepartment("003", "Allier"),
+        new FrenchDepartment("004", "Alpes-de-Haute-Provence"),
+        new FrenchDepartment("005", "Hautes-Alpes"),
+        new FrenchDepartment("006", "Alpes-Maritimes"),
+        new FrenchDepartment("007", "Ardèche"),
+        new FrenchDepartment("008", "Ardennes"),
+        new FrenchDepartment("009", "Ariège"),
+        new FrenchDepartment("010", "Aube"),
+        new FrenchDepartment("011", "Aude"),
+        new FrenchDepartment("012", "Aveyron"),
+        new FrenchDepartment("013", "Bouches-du-Rhône"),
+        new FrenchDepartment("014", "Calvados"),
+        new FrenchDepartment("015", "Cantal"),
+        new FrenchDepartment("016", "Charente"),
+        new FrenchDepartment("017", "Charente-Maritime"),
+        new FrenchDepartment("018", "Cher"),
+        new FrenchDepartment("019", "Corrèze"),
+        new FrenchDepartment("02A", "Corse-du-Sud"),
+        new FrenchDepartment("02B", "Haute-Corse"),
+        new FrenchDepartment("021", "Côte-d'Or"),
+        new FrenchDepartment("022", "Côtes-d'Armor"),
+        new FrenchDepartment("023", "Creuse"),
+        new FrenchDepartment("024", "Dordogne"),
+        new FrenchDepartment("025", "Doubs"),
+        new FrenchDepartment("026", "Drôme"),
+        new FrenchDepartment("027", "Eure"),
+        new FrenchDepartment("028", "Eure-et-Loir"),
+        new FrenchDepartment("029", "Finistère"),
+        new FrenchDepartment("030", "Gard"),
+        new FrenchDepartment("031", "Haute-Garonne"),
+        new FrenchDepartment("032", "Gers"),
+        new FrenchDepartment("033", "Gironde"),
+        new FrenchDepartment("034", "Hérault"),
+        new FrenchDepartment("035", "Ille-et-Vilaine"),
+        new FrenchDepartment("036", "Indre"),
+        new FrenchDepartment("037", "Indre-et-Loire"),
+        new FrenchDepartment("038", "Isère"),
+        new FrenchDepartment("039", "Jura"),
+        new FrenchDepartment("040", "Landes"),
+        new FrenchDepartment("041", "Loir-et-Cher"),
+        new FrenchDepartment("042", "Loire"),
+        new FrenchDepartment("043", "Haute-Loire"),
+        new FrenchDepartment("044", "Loire-Atlantique"),
+        new FrenchDepartment("045", "Loiret"),
+        new FrenchDepartment("046", "Lot"),
+        new FrenchDepartment("047", "Lot-et-Garonne"),
+        new FrenchDepartment("048", "Lozère"),
+        new FrenchDepartment("049", "Maine-et-Loire"),
+        new FrenchDepartment("050", "Manche"),
+        new FrenchDepartment("051", "Marne"),
+        new FrenchDepartment("052", "Haute-Marne"),
+        new FrenchDepartment("053", "Mayenne"),
+        new FrenchDepartment("054", "Meurthe-et-Moselle"),
+        new FrenchDepartment("055", "Meuse"),
+        new FrenchDepartment("056", "Morbihan"),
+        new FrenchDepartment("057", "Moselle"),
+        new FrenchDepartment("058", "Nièvre"),
+        new FrenchDepartment("059", "Nord"),
+        new FrenchDepartment("060", "Oise"),
+        new FrenchDepartment("061", "Orne"),
+        new FrenchDepartment("062", "Pas-de-Calais"),
+        new FrenchDepartment("063", "Puy-de-Dôme"),
+        new FrenchDepartment("064", "Pyrénées-Atlantiques"),
+        new FrenchDepartment("065", "Hautes-Pyrénées"),
+        new FrenchDepartment("066", "Pyrénées-Orientales"),
+        new FrenchDepartment("067", "Bas-Rhin"),
+        new FrenchDepartment("068", "Haut-Rhin"),
+        new FrenchDepartment("069", "Rhône"),
+        new FrenchDepartment("070", "Haute-Saône"),
+        new FrenchDepartment("071", "Saône-et-Loire"),
+        new FrenchDepartment("072", "Sarthe"),
+        new FrenchDepartment("073", "Savoie"),
+        new FrenchDepartment("074", "Haute-Savoie"),
+        new FrenchDepartment("075", "Paris"),
+        new FrenchDepartment("076", "Seine-Maritime"),
+        new FrenchDepartment("077", "Seine-et-Marne"),
+        new FrenchDepartment("078", "Yvelines"),
+        new FrenchDepartment("079", "Deux-Sèvres"),
+        new FrenchDepartment("080", "Somme"),
+        new FrenchDepartment("081", "Tarn"),
+        new FrenchDepartment("082", "Tarn-et-Garonne"),
+        new FrenchDepartment("083", "Var"),
+        new FrenchDepartment("084", "Vaucluse"),
+        new FrenchDepartment("085", "Vendée"),
+        new FrenchDepartment("086", "Vienne"),
+        new FrenchDepartment("087", "Haute-Vienne"),
+        new FrenchDepartment("088", "Vosges"),
+        new FrenchDepartment("089", "Yonne"),
+        new FrenchDepartment("090", "Territoire de Belfort"),
+        new FrenchDepartment("091", "Essonne"),
+        new FrenchDepartment("092", "Hauts-de-Seine"),
+        new FrenchDepartment("093", "Seine-Saint-Denis"),
+        new FrenchDepartment("094", "Val-de-Marne"),
+        new FrenchDepartment("095", "Val-d'Oise"),
+        new FrenchDepartment("971", "Guadeloupe"),
+        new FrenchDepartment("972", "Martinique"),
+        new FrenchDepartment("973", "Guyane"),
+        new FrenchDepartment("974", "La Réunion"),
+        new FrenchDepartment("976", "Mayotte"),
+    };
 
-	public static final FrenchRegion[] allRegions = new FrenchRegion[] {
-		new FrenchRegion("42", "Alsace"),
-		new FrenchRegion("72", "Aquitaine"),
-		new FrenchRegion("83", "Auvergne"),
-		new FrenchRegion("25", "Basse-Normandie"),
-		new FrenchRegion("26", "Bourgogne"),
-		new FrenchRegion("53", "Bretagne"),
-		new FrenchRegion("24", "Centre"),
-		new FrenchRegion("21", "Champagne-Ardenne"),
-		new FrenchRegion("94", "Corse"),
-		new FrenchRegion("43", "Franche-Comté"),
-		new FrenchRegion("23", "Haute-Normandie"),
-		new FrenchRegion("11", "Île-de-France"),
-		new FrenchRegion("91", "Languedoc-Roussillon"),
-		new FrenchRegion("74", "Limousin"),
-		new FrenchRegion("41", "Lorraine"),
-		new FrenchRegion("73", "Midi-Pyrénées"),
-		new FrenchRegion("31", "Nord-Pas-de-Calais"),
-		new FrenchRegion("52", "Pays de la Loire"),
-		new FrenchRegion("22", "Picardie"),
-		new FrenchRegion("54", "Poitou-Charentes"),
-		new FrenchRegion("93", "Provence-Alpes-Côte d'Azur"),
-		new FrenchRegion("82", "Rhône-Alpes"),
-		new FrenchRegion("01", "Guadeloupe"),
-		new FrenchRegion("02", "Martinique"),
-		new FrenchRegion("03", "Guyane"),
-		new FrenchRegion("04", "La Réunion"),
-		new FrenchRegion("05", "Mayotte")
-	};
+    public static final FrenchRegion[] allRegions = new FrenchRegion[] {
+        new FrenchRegion("42", "Alsace"),
+        new FrenchRegion("72", "Aquitaine"),
+        new FrenchRegion("83", "Auvergne"),
+        new FrenchRegion("25", "Basse-Normandie"),
+        new FrenchRegion("26", "Bourgogne"),
+        new FrenchRegion("53", "Bretagne"),
+        new FrenchRegion("24", "Centre"),
+        new FrenchRegion("21", "Champagne-Ardenne"),
+        new FrenchRegion("94", "Corse"),
+        new FrenchRegion("43", "Franche-Comté"),
+        new FrenchRegion("23", "Haute-Normandie"),
+        new FrenchRegion("11", "Île-de-France"),
+        new FrenchRegion("91", "Languedoc-Roussillon"),
+        new FrenchRegion("74", "Limousin"),
+        new FrenchRegion("41", "Lorraine"),
+        new FrenchRegion("73", "Midi-Pyrénées"),
+        new FrenchRegion("31", "Nord-Pas-de-Calais"),
+        new FrenchRegion("52", "Pays de la Loire"),
+        new FrenchRegion("22", "Picardie"),
+        new FrenchRegion("54", "Poitou-Charentes"),
+        new FrenchRegion("93", "Provence-Alpes-Côte d'Azur"),
+        new FrenchRegion("82", "Rhône-Alpes"),
+        new FrenchRegion("01", "Guadeloupe"),
+        new FrenchRegion("02", "Martinique"),
+        new FrenchRegion("03", "Guyane"),
+        new FrenchRegion("04", "La Réunion"),
+        new FrenchRegion("05", "Mayotte")
+    };
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/fr/FrenchConstants.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/fr/FrenchConstants.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/fr/FrenchConstants.java	(revision 30723)
@@ -5,17 +5,17 @@
 public interface FrenchConstants {
 
-	/**
-	 * Portal
-	 */
-	public static final String FRENCH_PORTAL = "http://www.data.gouv.fr/";
-	
-	/**
-	 * Icon
-	 */
-	public static final String ICON_FR_24 = "fr24.png";
-	
-	/**
-	 * NEPTUNE XML Schema
-	 */
-	public static final String NEPTUNE_XSD = "/resources/neptune/neptune.xsd";
+    /**
+     * Portal
+     */
+    public static final String FRENCH_PORTAL = "http://www.data.gouv.fr/";
+    
+    /**
+     * Icon
+     */
+    public static final String ICON_FR_24 = "fr24.png";
+    
+    /**
+     * NEPTUNE XML Schema
+     */
+    public static final String NEPTUNE_XSD = "/resources/neptune/neptune.xsd";
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/fr/FrenchDataSetHandler.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/fr/FrenchDataSetHandler.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/fr/FrenchDataSetHandler.java	(revision 30723)
@@ -21,211 +21,211 @@
 public abstract class FrenchDataSetHandler extends SimpleDataSetHandler implements FrenchConstants {
 
-	private Projection singleProjection;
-
-	private String nationalPortalPath;
-
-	protected static final Projection lambert93 = OdConstants.PRJ_LAMBERT_93.getProjection(); // France metropolitaine
-	protected static final Projection utm20 = Projections.getProjectionByCode("EPSG:32620"); // UTM 20 N - Guadeloupe, Martinique
-	protected static final Projection utm22 = Projections.getProjectionByCode("EPSG:32622"); // UTM 22 N - Guyane
-	protected static final Projection utm38 = Projections.getProjectionByCode("EPSG:32738"); // UTM 38 S - Mayotte
-	protected static final Projection utm40 = Projections.getProjectionByCode("EPSG:32740"); // UTM 40 S - Reunion
-	
-	protected static final Projection[] lambert4Zones = new Projection[4];
-	static {
-		for (int i=0; i<lambert4Zones.length; i++) {
-			lambert4Zones[i] = Projections.getProjectionByCode("EPSG:"+Integer.toString(27561+i));
-		}
-	}
-
-	protected static final Projection[] projections = new Projection[]{
-		lambert93, // France metropolitaine
-		utm20, // Guadeloupe, Martinique
-		utm22, // Guyane
-		utm38, // Mayotte
-		utm40, // Reunion
-	};
-	
-	protected class InternalCsvHandler extends DefaultCsvHandler {
-		/*@Override
-		public List<Projection> getSpreadSheetProjections() {
-			if (singleProjection != null) {
-				return Arrays.asList(new Projection[]{singleProjection});
-			} else {
-				return Arrays.asList(projections);
-			}
-		}*/
-		
-		@Override
-		public LatLon getCoor(EastNorth en, String[] fields) {
-			if (singleProjection != null) {
-				return singleProjection.eastNorth2latlon(en);
-			} else {
-				return super.getCoor(en, fields);
-			}
-		}
-
-		@Override
-		public boolean handlesProjection() {
-			return singleProjection != null;
-		}
-	}
-
-	public FrenchDataSetHandler() {
-		init();
-	}
-
-	public FrenchDataSetHandler(String relevantTag) {
-		super(relevantTag);
-		init();
-	}
-
-	public FrenchDataSetHandler(boolean relevantUnion, String[] relevantTags) {
-		super(relevantUnion, relevantTags);
-		init();
-	}
-
-	public FrenchDataSetHandler(boolean relevantUnion, Tag[] relevantTags) {
-		super(relevantUnion, relevantTags);
-		init();
-	}
-	
-	private void init() {
-		setShpHandler(new FrenchShpHandler());
-		setCsvHandler(new InternalCsvHandler());
-	}
-
-	protected final void setNationalPortalPath(String nationalPortalPath) {
-		this.nationalPortalPath = nationalPortalPath;
-	}
-
-	protected final void setSingleProjection(Projection singleProjection) {
-		this.singleProjection = singleProjection;
-	}
-
-	@Override
-	public URL getNationalPortalURL() {
-		try {
-			if (nationalPortalPath != null && !nationalPortalPath.isEmpty()) {
-				return new URL(FRENCH_PORTAL + "donnees/view/" + nationalPortalPath);
-			}
-		} catch (MalformedURLException e) {
-			e.printStackTrace();
-		}
-		return null;
-	}
-
-	@Override
-	public String getLocalPortalIconName() {
-		return ICON_FR_24;
-	}
-
-	@Override
-	public String getNationalPortalIconName() {
-		return ICON_FR_24;
-	}
-	
-	protected static final LatLon getLatLonByDptCode(EastNorth en, String dpt, boolean useCC9) {
-		if (dpt.equals("971") || dpt.equals("972") || dpt.equals("977") || dpt.equals("978")) {	// Antilles
-			return utm20.eastNorth2latlon(en);
-		} else if (dpt.equals("973")) {	// Guyane
-			return utm22.eastNorth2latlon(en);
-		} else if (dpt.equals("974")) {	// La Réunion
-			return utm40.eastNorth2latlon(en);
-		} else if (dpt.equals("976") || dpt.equals("985")) { // 985 = ancien code de Mayotte ? (présent dans geofla)
-			return utm38.eastNorth2latlon(en);
-		} else if (!useCC9) {
-			return lambert93.eastNorth2latlon(en);
-		} else if (dpt.endsWith("2A") || dpt.endsWith("2B") || dpt.endsWith("20")) {
-			return lambertCC9Zones[0].eastNorth2latlon(en);
-		} else if (dpt.endsWith("64") || dpt.endsWith("65") || dpt.endsWith("31") || dpt.endsWith("09") || dpt.endsWith("11") || dpt.endsWith("66") || dpt.endsWith("34") || dpt.endsWith("83")) {
-			return lambertCC9Zones[1].eastNorth2latlon(en);
-		} else if (dpt.endsWith("40") || dpt.endsWith("32") || dpt.endsWith("47") || dpt.endsWith("82") || dpt.endsWith("81") || dpt.endsWith("12") || dpt.endsWith("48") || dpt.endsWith("30") || dpt.endsWith("13") || dpt.endsWith("84") || dpt.endsWith("04") || dpt.endsWith("06")) {
-			return lambertCC9Zones[2].eastNorth2latlon(en);
-		} else if (dpt.endsWith("33") || dpt.endsWith("24") || dpt.endsWith("46") || dpt.endsWith("19") || dpt.endsWith("15") || dpt.endsWith("43") || dpt.endsWith("07") || dpt.endsWith("26") || dpt.endsWith("05") || dpt.endsWith("38") || dpt.endsWith("73")) {
-			return lambertCC9Zones[3].eastNorth2latlon(en);
-		} else if (dpt.endsWith("17") || dpt.endsWith("16") || dpt.endsWith("87") || dpt.endsWith("23") || dpt.endsWith("63") || dpt.endsWith("03") || dpt.endsWith("42") || dpt.endsWith("69") || dpt.endsWith("01") || dpt.endsWith("74")) {
-			return lambertCC9Zones[4].eastNorth2latlon(en);
-		} else if (dpt.endsWith("44") || dpt.endsWith("85") || dpt.endsWith("49") || dpt.endsWith("79") || dpt.endsWith("37") || dpt.endsWith("86") || dpt.endsWith("36") || dpt.endsWith("18") || dpt.endsWith("58") || dpt.endsWith("71") || dpt.endsWith("21") || dpt.endsWith("39") || dpt.endsWith("25")) {
-			return lambertCC9Zones[5].eastNorth2latlon(en);
-		} else if (dpt.endsWith("29") || dpt.endsWith("56") || dpt.endsWith("22") || dpt.endsWith("35") || dpt.endsWith("53") || dpt.endsWith("72") || dpt.endsWith("41") || dpt.endsWith("28") || dpt.endsWith("45") || dpt.endsWith("89") || dpt.endsWith("10") || dpt.endsWith("52") || dpt.endsWith("70") || dpt.endsWith("88") || dpt.endsWith("68") || dpt.endsWith("90")) {
-			return lambertCC9Zones[6].eastNorth2latlon(en);
-		} else if (dpt.endsWith("50") || dpt.endsWith("14") || dpt.endsWith("61") || dpt.endsWith("27") || dpt.endsWith("60") || dpt.endsWith("95") || dpt.endsWith("78") || dpt.endsWith("91") || dpt.endsWith("92") || dpt.endsWith("93") || dpt.endsWith("94") || dpt.endsWith("75") || dpt.endsWith("77") || dpt.endsWith("60") || dpt.endsWith("02") || dpt.endsWith("51") || dpt.endsWith("55") || dpt.endsWith("54") || dpt.endsWith("57") || dpt.endsWith("67")) {
-			return lambertCC9Zones[7].eastNorth2latlon(en);
-		} else if (dpt.endsWith("76") || dpt.endsWith("80") || dpt.endsWith("62") || dpt.endsWith("59") || dpt.endsWith("08")) {
-			return lambertCC9Zones[8].eastNorth2latlon(en);
-		} else {
-			throw new IllegalArgumentException("Unsupported department code: "+dpt);
-		}
-	}
-
-	private void replaceFaxPhone(OsmPrimitive p, String dataKey, String osmKey) {
-		String phone = p.get(dataKey);
-		if (phone != null) {
-			p.put(osmKey, phone.replace(" ", "").replace(".", "").replaceFirst("0", "+33"));
-			p.remove(dataKey);
-		}
-	}
-
-	protected void replaceFax(OsmPrimitive p, String dataKey) {
-		replaceFaxPhone(p, dataKey, "contact:fax");
-	}
-	
-	protected void replacePhone(OsmPrimitive p, String dataKey) {
-		replaceFaxPhone(p, dataKey, "contact:phone");
-	}
-	
-	private static final String dayFr = "L|Lu|M|Ma|Me|J|Je|V|Ve|S|Sa|D|Di";
-	private static final String dayEn = "Mo|Mo|Tu|Tu|We|Th|Th|Fr|Fr|Sa|Sa|Su|Su";
-	
-	private static final String[] dayFrSplit = dayFr.split("\\|");
-	private static final String[] dayEnSplit = dayEn.split("\\|");
-	
-	protected void replaceOpeningHours(OsmPrimitive p, String dataKey) {
-		String hours = p.get(dataKey);
-		if (hours != null) {
-			hours = hours.replace("h", ":").replace(": ", ":00 ");
-			hours = hours.replace(" - ", "-").replace(" au ", "-").replace(" à ", "-");
-			hours = hours.replace(" et ", ",").replace("/", ",");
-			hours = hours.replace(" (sf vacances)", "; PH off");
-			if (hours.endsWith(":")) {
-				hours += "00";
-			}
-			String dayGroup = "("+dayFr+")";
-			String dayNcGroup = "(?:"+dayFr+")";
-			// FIXME: this doesn't work yet
-			for (String sep : new String[]{"-",","}) {
-				boolean finished = false;
-				while (!finished) {
-					Matcher m = Pattern.compile(".*("+dayNcGroup+"(?:"+sep+dayNcGroup+")+).*").matcher(hours);
-					if (m.matches()) {
-						String range = m.group(1);
-						Matcher m2 = Pattern.compile(dayGroup+"(?:"+sep+dayGroup+")+").matcher(range);
-						if (m2.matches()) {
-							String replacement = "";
-							for (int i=0; i<m2.groupCount(); i++) {
-								if (i > 0) {
-									replacement += sep;
-								}
-								replacement += getEnDay(m2.group(i+1));
-							}
-							hours = hours.replace(range, replacement);
-						}
-					} else {
-						finished = true;
-					}
-				}
-			}
-			p.put("opening_hours", hours);
-			p.remove(dataKey);
-		}
-	}
-	
-	private String getEnDay(String frDay) {
-		for (int i=0; i<dayFrSplit.length; i++) {
-			if (dayFrSplit[i].equals(frDay)) {
-				return dayEnSplit[i];
-			}
-		}
-		return "";
-	}
+    private Projection singleProjection;
+
+    private String nationalPortalPath;
+
+    protected static final Projection lambert93 = OdConstants.PRJ_LAMBERT_93.getProjection(); // France metropolitaine
+    protected static final Projection utm20 = Projections.getProjectionByCode("EPSG:32620"); // UTM 20 N - Guadeloupe, Martinique
+    protected static final Projection utm22 = Projections.getProjectionByCode("EPSG:32622"); // UTM 22 N - Guyane
+    protected static final Projection utm38 = Projections.getProjectionByCode("EPSG:32738"); // UTM 38 S - Mayotte
+    protected static final Projection utm40 = Projections.getProjectionByCode("EPSG:32740"); // UTM 40 S - Reunion
+    
+    protected static final Projection[] lambert4Zones = new Projection[4];
+    static {
+        for (int i=0; i<lambert4Zones.length; i++) {
+            lambert4Zones[i] = Projections.getProjectionByCode("EPSG:"+Integer.toString(27561+i));
+        }
+    }
+
+    protected static final Projection[] projections = new Projection[]{
+        lambert93, // France metropolitaine
+        utm20, // Guadeloupe, Martinique
+        utm22, // Guyane
+        utm38, // Mayotte
+        utm40, // Reunion
+    };
+    
+    protected class InternalCsvHandler extends DefaultCsvHandler {
+        /*@Override
+        public List<Projection> getSpreadSheetProjections() {
+            if (singleProjection != null) {
+                return Arrays.asList(new Projection[]{singleProjection});
+            } else {
+                return Arrays.asList(projections);
+            }
+        }*/
+        
+        @Override
+        public LatLon getCoor(EastNorth en, String[] fields) {
+            if (singleProjection != null) {
+                return singleProjection.eastNorth2latlon(en);
+            } else {
+                return super.getCoor(en, fields);
+            }
+        }
+
+        @Override
+        public boolean handlesProjection() {
+            return singleProjection != null;
+        }
+    }
+
+    public FrenchDataSetHandler() {
+        init();
+    }
+
+    public FrenchDataSetHandler(String relevantTag) {
+        super(relevantTag);
+        init();
+    }
+
+    public FrenchDataSetHandler(boolean relevantUnion, String[] relevantTags) {
+        super(relevantUnion, relevantTags);
+        init();
+    }
+
+    public FrenchDataSetHandler(boolean relevantUnion, Tag[] relevantTags) {
+        super(relevantUnion, relevantTags);
+        init();
+    }
+    
+    private void init() {
+        setShpHandler(new FrenchShpHandler());
+        setCsvHandler(new InternalCsvHandler());
+    }
+
+    protected final void setNationalPortalPath(String nationalPortalPath) {
+        this.nationalPortalPath = nationalPortalPath;
+    }
+
+    protected final void setSingleProjection(Projection singleProjection) {
+        this.singleProjection = singleProjection;
+    }
+
+    @Override
+    public URL getNationalPortalURL() {
+        try {
+            if (nationalPortalPath != null && !nationalPortalPath.isEmpty()) {
+                return new URL(FRENCH_PORTAL + "donnees/view/" + nationalPortalPath);
+            }
+        } catch (MalformedURLException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    @Override
+    public String getLocalPortalIconName() {
+        return ICON_FR_24;
+    }
+
+    @Override
+    public String getNationalPortalIconName() {
+        return ICON_FR_24;
+    }
+    
+    protected static final LatLon getLatLonByDptCode(EastNorth en, String dpt, boolean useCC9) {
+        if (dpt.equals("971") || dpt.equals("972") || dpt.equals("977") || dpt.equals("978")) {    // Antilles
+            return utm20.eastNorth2latlon(en);
+        } else if (dpt.equals("973")) {    // Guyane
+            return utm22.eastNorth2latlon(en);
+        } else if (dpt.equals("974")) {    // La Réunion
+            return utm40.eastNorth2latlon(en);
+        } else if (dpt.equals("976") || dpt.equals("985")) { // 985 = ancien code de Mayotte ? (présent dans geofla)
+            return utm38.eastNorth2latlon(en);
+        } else if (!useCC9) {
+            return lambert93.eastNorth2latlon(en);
+        } else if (dpt.endsWith("2A") || dpt.endsWith("2B") || dpt.endsWith("20")) {
+            return lambertCC9Zones[0].eastNorth2latlon(en);
+        } else if (dpt.endsWith("64") || dpt.endsWith("65") || dpt.endsWith("31") || dpt.endsWith("09") || dpt.endsWith("11") || dpt.endsWith("66") || dpt.endsWith("34") || dpt.endsWith("83")) {
+            return lambertCC9Zones[1].eastNorth2latlon(en);
+        } else if (dpt.endsWith("40") || dpt.endsWith("32") || dpt.endsWith("47") || dpt.endsWith("82") || dpt.endsWith("81") || dpt.endsWith("12") || dpt.endsWith("48") || dpt.endsWith("30") || dpt.endsWith("13") || dpt.endsWith("84") || dpt.endsWith("04") || dpt.endsWith("06")) {
+            return lambertCC9Zones[2].eastNorth2latlon(en);
+        } else if (dpt.endsWith("33") || dpt.endsWith("24") || dpt.endsWith("46") || dpt.endsWith("19") || dpt.endsWith("15") || dpt.endsWith("43") || dpt.endsWith("07") || dpt.endsWith("26") || dpt.endsWith("05") || dpt.endsWith("38") || dpt.endsWith("73")) {
+            return lambertCC9Zones[3].eastNorth2latlon(en);
+        } else if (dpt.endsWith("17") || dpt.endsWith("16") || dpt.endsWith("87") || dpt.endsWith("23") || dpt.endsWith("63") || dpt.endsWith("03") || dpt.endsWith("42") || dpt.endsWith("69") || dpt.endsWith("01") || dpt.endsWith("74")) {
+            return lambertCC9Zones[4].eastNorth2latlon(en);
+        } else if (dpt.endsWith("44") || dpt.endsWith("85") || dpt.endsWith("49") || dpt.endsWith("79") || dpt.endsWith("37") || dpt.endsWith("86") || dpt.endsWith("36") || dpt.endsWith("18") || dpt.endsWith("58") || dpt.endsWith("71") || dpt.endsWith("21") || dpt.endsWith("39") || dpt.endsWith("25")) {
+            return lambertCC9Zones[5].eastNorth2latlon(en);
+        } else if (dpt.endsWith("29") || dpt.endsWith("56") || dpt.endsWith("22") || dpt.endsWith("35") || dpt.endsWith("53") || dpt.endsWith("72") || dpt.endsWith("41") || dpt.endsWith("28") || dpt.endsWith("45") || dpt.endsWith("89") || dpt.endsWith("10") || dpt.endsWith("52") || dpt.endsWith("70") || dpt.endsWith("88") || dpt.endsWith("68") || dpt.endsWith("90")) {
+            return lambertCC9Zones[6].eastNorth2latlon(en);
+        } else if (dpt.endsWith("50") || dpt.endsWith("14") || dpt.endsWith("61") || dpt.endsWith("27") || dpt.endsWith("60") || dpt.endsWith("95") || dpt.endsWith("78") || dpt.endsWith("91") || dpt.endsWith("92") || dpt.endsWith("93") || dpt.endsWith("94") || dpt.endsWith("75") || dpt.endsWith("77") || dpt.endsWith("60") || dpt.endsWith("02") || dpt.endsWith("51") || dpt.endsWith("55") || dpt.endsWith("54") || dpt.endsWith("57") || dpt.endsWith("67")) {
+            return lambertCC9Zones[7].eastNorth2latlon(en);
+        } else if (dpt.endsWith("76") || dpt.endsWith("80") || dpt.endsWith("62") || dpt.endsWith("59") || dpt.endsWith("08")) {
+            return lambertCC9Zones[8].eastNorth2latlon(en);
+        } else {
+            throw new IllegalArgumentException("Unsupported department code: "+dpt);
+        }
+    }
+
+    private void replaceFaxPhone(OsmPrimitive p, String dataKey, String osmKey) {
+        String phone = p.get(dataKey);
+        if (phone != null) {
+            p.put(osmKey, phone.replace(" ", "").replace(".", "").replaceFirst("0", "+33"));
+            p.remove(dataKey);
+        }
+    }
+
+    protected void replaceFax(OsmPrimitive p, String dataKey) {
+        replaceFaxPhone(p, dataKey, "contact:fax");
+    }
+    
+    protected void replacePhone(OsmPrimitive p, String dataKey) {
+        replaceFaxPhone(p, dataKey, "contact:phone");
+    }
+    
+    private static final String dayFr = "L|Lu|M|Ma|Me|J|Je|V|Ve|S|Sa|D|Di";
+    private static final String dayEn = "Mo|Mo|Tu|Tu|We|Th|Th|Fr|Fr|Sa|Sa|Su|Su";
+    
+    private static final String[] dayFrSplit = dayFr.split("\\|");
+    private static final String[] dayEnSplit = dayEn.split("\\|");
+    
+    protected void replaceOpeningHours(OsmPrimitive p, String dataKey) {
+        String hours = p.get(dataKey);
+        if (hours != null) {
+            hours = hours.replace("h", ":").replace(": ", ":00 ");
+            hours = hours.replace(" - ", "-").replace(" au ", "-").replace(" à ", "-");
+            hours = hours.replace(" et ", ",").replace("/", ",");
+            hours = hours.replace(" (sf vacances)", "; PH off");
+            if (hours.endsWith(":")) {
+                hours += "00";
+            }
+            String dayGroup = "("+dayFr+")";
+            String dayNcGroup = "(?:"+dayFr+")";
+            // FIXME: this doesn't work yet
+            for (String sep : new String[]{"-",","}) {
+                boolean finished = false;
+                while (!finished) {
+                    Matcher m = Pattern.compile(".*("+dayNcGroup+"(?:"+sep+dayNcGroup+")+).*").matcher(hours);
+                    if (m.matches()) {
+                        String range = m.group(1);
+                        Matcher m2 = Pattern.compile(dayGroup+"(?:"+sep+dayGroup+")+").matcher(range);
+                        if (m2.matches()) {
+                            String replacement = "";
+                            for (int i=0; i<m2.groupCount(); i++) {
+                                if (i > 0) {
+                                    replacement += sep;
+                                }
+                                replacement += getEnDay(m2.group(i+1));
+                            }
+                            hours = hours.replace(range, replacement);
+                        }
+                    } else {
+                        finished = true;
+                    }
+                }
+            }
+            p.put("opening_hours", hours);
+            p.remove(dataKey);
+        }
+    }
+    
+    private String getEnDay(String frDay) {
+        for (int i=0; i<dayFrSplit.length; i++) {
+            if (dayFrSplit[i].equals(frDay)) {
+                return dayEnSplit[i];
+            }
+        }
+        return "";
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/fr/FrenchShpHandler.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/fr/FrenchShpHandler.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/fr/FrenchShpHandler.java	(revision 30723)
@@ -15,36 +15,36 @@
 public class FrenchShpHandler extends DefaultShpHandler {
 
-	@Override
-	public CoordinateReferenceSystem getCrsFor(String crsName) throws NoSuchAuthorityCodeException, FactoryException {
-		if (crsName.equalsIgnoreCase("RGM04")) {
-			return CRS.decode("EPSG:4471");
-		} else if (crsName.equalsIgnoreCase("RGFG95_UTM_Zone_22N")) {
-			return CRS.decode("EPSG:2972");
-		} else {
-			return super.getCrsFor(crsName);
-		}
-	}
+    @Override
+    public CoordinateReferenceSystem getCrsFor(String crsName) throws NoSuchAuthorityCodeException, FactoryException {
+        if (crsName.equalsIgnoreCase("RGM04")) {
+            return CRS.decode("EPSG:4471");
+        } else if (crsName.equalsIgnoreCase("RGFG95_UTM_Zone_22N")) {
+            return CRS.decode("EPSG:2972");
+        } else {
+            return super.getCrsFor(crsName);
+        }
+    }
 
-	@Override
-	public MathTransform findMathTransform(CoordinateReferenceSystem sourceCRS, CoordinateReferenceSystem targetCRS, boolean lenient)
-			throws FactoryException {
-		if (sourceCRS.getName().getCode().equalsIgnoreCase("Lambert I Nord")) {
-			if (sourceCRS instanceof ProjectedCRS) {
-				GeodeticDatum datum = ((ProjectedCRS) sourceCRS).getDatum();
-				if (datum.getPrimeMeridian().getGreenwichLongitude() > 0.0 && ((ProjectedCRS) sourceCRS).getConversionFromBase().getMathTransform() instanceof LambertConformal2SP) {
-					LambertConformal2SP lambert = (LambertConformal2SP) ((ProjectedCRS) sourceCRS).getConversionFromBase().getMathTransform();
-					Double falseNorthing = get(lambert.getParameterValues(), AbstractProvider.FALSE_NORTHING);
-					Double centralmeridian = get(lambert.getParameterValues(), AbstractProvider.CENTRAL_MERIDIAN);
-					if (centralmeridian.equals(0.0)) {
-						if (falseNorthing.equals(200000.0)) {
-							return CRS.findMathTransform(CRS.decode("EPSG:27561"), targetCRS, lenient);
-						} else if (falseNorthing.equals(1200000.0)) {
-							return CRS.findMathTransform(CRS.decode("EPSG:27571"), targetCRS, lenient);
-						}
-					}
-				}
-			}
-		}
-		return super.findMathTransform(sourceCRS, targetCRS, lenient);
-	}
+    @Override
+    public MathTransform findMathTransform(CoordinateReferenceSystem sourceCRS, CoordinateReferenceSystem targetCRS, boolean lenient)
+            throws FactoryException {
+        if (sourceCRS.getName().getCode().equalsIgnoreCase("Lambert I Nord")) {
+            if (sourceCRS instanceof ProjectedCRS) {
+                GeodeticDatum datum = ((ProjectedCRS) sourceCRS).getDatum();
+                if (datum.getPrimeMeridian().getGreenwichLongitude() > 0.0 && ((ProjectedCRS) sourceCRS).getConversionFromBase().getMathTransform() instanceof LambertConformal2SP) {
+                    LambertConformal2SP lambert = (LambertConformal2SP) ((ProjectedCRS) sourceCRS).getConversionFromBase().getMathTransform();
+                    Double falseNorthing = get(lambert.getParameterValues(), AbstractProvider.FALSE_NORTHING);
+                    Double centralmeridian = get(lambert.getParameterValues(), AbstractProvider.CENTRAL_MERIDIAN);
+                    if (centralmeridian.equals(0.0)) {
+                        if (falseNorthing.equals(200000.0)) {
+                            return CRS.findMathTransform(CRS.decode("EPSG:27561"), targetCRS, lenient);
+                        } else if (falseNorthing.equals(1200000.0)) {
+                            return CRS.findMathTransform(CRS.decode("EPSG:27571"), targetCRS, lenient);
+                        }
+                    }
+                }
+            }
+        }
+        return super.findMathTransform(sourceCRS, targetCRS, lenient);
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/it/ItalianConstants.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/it/ItalianConstants.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/it/ItalianConstants.java	(revision 30723)
@@ -5,12 +5,12 @@
 public interface ItalianConstants {
 
-	/**
-	 * Portal
-	 */
-	public static final String ITALIAN_PORTAL = "http://www.dati.gov.it/content/";
-	
-	/**
-	 * Icon
-	 */
-	public static final String ICON_IT_24 = "it24.png";
+    /**
+     * Portal
+     */
+    public static final String ITALIAN_PORTAL = "http://www.dati.gov.it/content/";
+    
+    /**
+     * Icon
+     */
+    public static final String ICON_IT_24 = "it24.png";
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/ke/KenyanConstants.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/ke/KenyanConstants.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/ke/KenyanConstants.java	(revision 30723)
@@ -5,12 +5,12 @@
 public interface KenyanConstants {
 
-	/**
-	 * Portal
-	 */
-	public static final String KENYAN_PORTAL = "https://opendata.go.ke/";
-	
-	/**
-	 * Icon
-	 */
-	public static final String ICON_KE_24 = "ke24.png";
+    /**
+     * Portal
+     */
+    public static final String KENYAN_PORTAL = "https://opendata.go.ke/";
+    
+    /**
+     * Icon
+     */
+    public static final String ICON_KE_24 = "ke24.png";
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/nl/DutchConstants.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/nl/DutchConstants.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/nl/DutchConstants.java	(revision 30723)
@@ -5,12 +5,12 @@
 public interface DutchConstants {
 
-	/**
-	 * Portal
-	 */
-	public static final String NORWEGIAN_PORTAL = "http://data.overheid.nl/package/";
-	
-	/**
-	 * Icon
-	 */
-	public static final String ICON_NL_24 = "nl24.png";
+    /**
+     * Portal
+     */
+    public static final String NORWEGIAN_PORTAL = "http://data.overheid.nl/package/";
+    
+    /**
+     * Icon
+     */
+    public static final String ICON_NL_24 = "nl24.png";
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/no/NorwegianConstants.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/no/NorwegianConstants.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/no/NorwegianConstants.java	(revision 30723)
@@ -5,12 +5,12 @@
 public interface NorwegianConstants {
 
-	/**
-	 * Portal
-	 */
-	public static final String NORWEGIAN_PORTAL = "http://data.norge.no/data/";
-	
-	/**
-	 * Icon
-	 */
-	public static final String ICON_NO_24 = "no24.png";
+    /**
+     * Portal
+     */
+    public static final String NORWEGIAN_PORTAL = "http://data.norge.no/data/";
+    
+    /**
+     * Icon
+     */
+    public static final String ICON_NO_24 = "no24.png";
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/nz/NewZealanderConstants.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/nz/NewZealanderConstants.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/nz/NewZealanderConstants.java	(revision 30723)
@@ -5,12 +5,12 @@
 public interface NewZealanderConstants {
 
-	/**
-	 * Portal
-	 */
-	public static final String NEW_ZEALANDER_PORTAL = "http://data.govt.nz/dataset/";
-	
-	/**
-	 * Icon
-	 */
-	public static final String ICON_NZ_24 = "nz24.png";
+    /**
+     * Portal
+     */
+    public static final String NEW_ZEALANDER_PORTAL = "http://data.govt.nz/dataset/";
+    
+    /**
+     * Icon
+     */
+    public static final String ICON_NZ_24 = "nz24.png";
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/pt/PortugueseConstants.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/pt/PortugueseConstants.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/pt/PortugueseConstants.java	(revision 30723)
@@ -5,12 +5,12 @@
 public interface PortugueseConstants {
 
-	/**
-	 * Portal
-	 */
-	public static final String PORTUGUESE_PORTAL = "http://www.dados.gov.pt/PT/CatalogoDados/Dados.aspx?name=";
-	
-	/**
-	 * Icon
-	 */
-	public static final String ICON_PT_24 = "pt24.png";
+    /**
+     * Portal
+     */
+    public static final String PORTUGUESE_PORTAL = "http://www.dados.gov.pt/PT/CatalogoDados/Dados.aspx?name=";
+    
+    /**
+     * Icon
+     */
+    public static final String ICON_PT_24 = "pt24.png";
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/uk/BritishConstants.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/uk/BritishConstants.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/uk/BritishConstants.java	(revision 30723)
@@ -5,12 +5,12 @@
 public interface BritishConstants {
 
-	/**
-	 * Portal
-	 */
-	public static final String BRITISH_PORTAL = "http://data.gov.uk/dataset/";
-	
-	/**
-	 * Icon
-	 */
-	public static final String ICON_UK_24 = "uk24.png";
+    /**
+     * Portal
+     */
+    public static final String BRITISH_PORTAL = "http://data.gov.uk/dataset/";
+    
+    /**
+     * Icon
+     */
+    public static final String ICON_UK_24 = "uk24.png";
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/us/AmericanConstants.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/us/AmericanConstants.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/datasets/us/AmericanConstants.java	(revision 30723)
@@ -5,12 +5,12 @@
 public interface AmericanConstants {
 
-	/**
-	 * Portal
-	 */
-	public static final String AMERICAN_PORTAL = "http://explore.data.gov/";
-	
-	/**
-	 * Icon
-	 */
-	public static final String ICON_US_24 = "us24.png";
+    /**
+     * Portal
+     */
+    public static final String AMERICAN_PORTAL = "http://explore.data.gov/";
+    
+    /**
+     * Icon
+     */
+    public static final String ICON_US_24 = "us24.png";
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/AskLicenseAgreementDialog.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/AskLicenseAgreementDialog.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/AskLicenseAgreementDialog.java	(revision 30723)
@@ -10,12 +10,12 @@
 
 public class AskLicenseAgreementDialog extends ViewLicenseDialog {
-	
-	public AskLicenseAgreementDialog(License license) throws IOException {
-		super(license, Main.parent, tr("License Agreement"), new String[] {tr("Accept"), "", tr("Refuse")});
-		
+    
+    public AskLicenseAgreementDialog(License license) throws IOException {
+        super(license, Main.parent, tr("License Agreement"), new String[] {tr("Accept"), "", tr("Refuse")});
+        
         setToolTipTexts(new String[] {
                 tr("I understand and accept these terms and conditions"),
                 tr("View the full text of this license"),
                 tr("I refuse these terms and conditions. Cancel download.")});
-	}
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/DialogPrompter.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/DialogPrompter.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/DialogPrompter.java	(revision 30723)
@@ -9,49 +9,49 @@
 
 public class DialogPrompter <T extends ExtendedDialog> implements Runnable {
-	
-	private T dialog;
-	private int value = -1;
+    
+    private T dialog;
+    private int value = -1;
 
-	protected T buildDialog() {return null;} // To be overriden if needed
-	
-	public DialogPrompter() {
-		this(null);
-	}
-	
-	public DialogPrompter(T dialog) {
-		this.dialog = dialog;
-	}
-	
-	public final T getDialog() {
-		return dialog;
-	}
-	
-	@Override
-	public final void run() {
-		if (dialog == null) {
-			dialog = buildDialog();
-		}
-		if (dialog != null) {
-			value = dialog.showDialog().getValue();
-		}
-	}
-	
-	public final DialogPrompter<T> promptInEdt() {
-		if (SwingUtilities.isEventDispatchThread()) {
-			run();
-		} else {
-			try {
-				SwingUtilities.invokeAndWait(this);
-			} catch (InterruptedException e) {
-				e.printStackTrace();
-			} catch (InvocationTargetException e) {
-				e.printStackTrace();
-			}
-		}
-		return this;
-	}
+    protected T buildDialog() {return null;} // To be overriden if needed
+    
+    public DialogPrompter() {
+        this(null);
+    }
+    
+    public DialogPrompter(T dialog) {
+        this.dialog = dialog;
+    }
+    
+    public final T getDialog() {
+        return dialog;
+    }
+    
+    @Override
+    public final void run() {
+        if (dialog == null) {
+            dialog = buildDialog();
+        }
+        if (dialog != null) {
+            value = dialog.showDialog().getValue();
+        }
+    }
+    
+    public final DialogPrompter<T> promptInEdt() {
+        if (SwingUtilities.isEventDispatchThread()) {
+            run();
+        } else {
+            try {
+                SwingUtilities.invokeAndWait(this);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            } catch (InvocationTargetException e) {
+                e.printStackTrace();
+            }
+        }
+        return this;
+    }
 
-	public final int getValue() {
-		return value;
-	}
+    public final int getValue() {
+        return value;
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/ModulePreference.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/ModulePreference.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/ModulePreference.java	(revision 30723)
@@ -527,12 +527,12 @@
     }
 
-	@Override
-	public boolean isExpert() {
-		return false;
-	}
-
-	@Override
-	public TabPreferenceSetting getTabPreferenceSetting(PreferenceTabbedPane gui) {
-		return gui.getSetting(OdPreferenceSetting.class);
-	}
+    @Override
+    public boolean isExpert() {
+        return false;
+    }
+
+    @Override
+    public TabPreferenceSetting getTabPreferenceSetting(PreferenceTabbedPane gui) {
+        return gui.getSetting(OdPreferenceSetting.class);
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/ModulePreferencesModel.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/ModulePreferencesModel.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/ModulePreferencesModel.java	(revision 30723)
@@ -29,10 +29,10 @@
 
     protected Collection<String> getModules(Collection<String> def) {
-    	return Main.pref.getCollection(OdConstants.PREF_MODULES, def);
+        return Main.pref.getCollection(OdConstants.PREF_MODULES, def);
     }
     
     public ModulePreferencesModel() {
-    	currentActiveModules = new HashSet<>();
-    	currentActiveModules.addAll(getModules(currentActiveModules));
+        currentActiveModules = new HashSet<>();
+        currentActiveModules.addAll(getModules(currentActiveModules));
     }
 
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/OdDialog.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/OdDialog.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/OdDialog.java	(revision 30723)
@@ -46,36 +46,36 @@
     
     private class DownloadAction extends JosmAction {
-		public DownloadAction() {
-			super(marktr("Download"), "download", tr("Download OSM data corresponding to the current data set."), null, false);
-		}
-		@Override
-		public void actionPerformed(ActionEvent e) {
-			if (Main.main.getEditLayer() instanceof OdLayer) {
-				dataLayer.downloadOsmData();
-				diffButton.setEnabled(dataLayer.osmLayer != null);
-			}
-		}
+        public DownloadAction() {
+            super(marktr("Download"), "download", tr("Download OSM data corresponding to the current data set."), null, false);
+        }
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            if (Main.main.getEditLayer() instanceof OdLayer) {
+                dataLayer.downloadOsmData();
+                diffButton.setEnabled(dataLayer.osmLayer != null);
+            }
+        }
     }
 
     private class SelectAction extends JosmAction {
-		public SelectAction() {
-			super(marktr("Select"), "dialogs/select", tr("Set the selected elements on the map to the selected items in the list above."), null, false);
-		}
-		@Override
-		public void actionPerformed(ActionEvent e) {
-			// TODO
-		}
+        public SelectAction() {
+            super(marktr("Select"), "dialogs/select", tr("Set the selected elements on the map to the selected items in the list above."), null, false);
+        }
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            // TODO
+        }
     }
 
     private class DiffAction extends JosmAction {
-		public DiffAction() {
-			super(marktr("Diff"), "dialogs/diff", tr("Perform diff between current data set and existing OSM data."), null, false);
-		}
-		@Override
-		public void actionPerformed(ActionEvent e) {
-			if (Main.main.getEditLayer() instanceof OdLayer) {
-				dataLayer.makeDiff();
-			}
-		}
+        public DiffAction() {
+            super(marktr("Diff"), "dialogs/diff", tr("Perform diff between current data set and existing OSM data."), null, false);
+        }
+        @Override
+        public void actionPerformed(ActionEvent e) {
+            if (Main.main.getEditLayer() instanceof OdLayer) {
+                dataLayer.makeDiff();
+            }
+        }
     }
     
@@ -90,77 +90,77 @@
     }
 
-	public OdDialog() {
-		super("OpenData", OdConstants.ICON_CORE_24, tr("Open the OpenData window."), 
-				Shortcut.registerShortcut("subwindow:opendata", tr("Toggle: {0}", "OpenData"),
-						KeyEvent.VK_A, Shortcut.ALT_CTRL_SHIFT), 150, false, OdPreferenceSetting.class);
-		
-		this.buttons = Arrays.asList(new SideButton[] {
-				/*selectButton =*/ new SideButton(new SelectAction()), 
-				downloadButton = new SideButton(new DownloadAction()), 
-				diffButton = new SideButton(new DiffAction()),
-				toolsButton = new SideButton(new ToolsAction())
+    public OdDialog() {
+        super("OpenData", OdConstants.ICON_CORE_24, tr("Open the OpenData window."), 
+                Shortcut.registerShortcut("subwindow:opendata", tr("Toggle: {0}", "OpenData"),
+                        KeyEvent.VK_A, Shortcut.ALT_CTRL_SHIFT), 150, false, OdPreferenceSetting.class);
+        
+        this.buttons = Arrays.asList(new SideButton[] {
+                /*selectButton =*/ new SideButton(new SelectAction()), 
+                downloadButton = new SideButton(new DownloadAction()), 
+                diffButton = new SideButton(new DiffAction()),
+                toolsButton = new SideButton(new ToolsAction())
         });
-		
-		this.toolsButton.addMouseListener(new MouseAdapter() {
-		    @Override
-		    public void mousePressed(MouseEvent e) {
-	            if (Main.main.getEditLayer() instanceof OdLayer) {
+        
+        this.toolsButton.addMouseListener(new MouseAdapter() {
+            @Override
+            public void mousePressed(MouseEvent e) {
+                if (Main.main.getEditLayer() instanceof OdLayer) {
                     JPopupMenu popup = new JPopupMenu();
-	                for (JosmAction tool : dataLayer.handler.getTools()) {
-	                    popup.add(tool);
-	                }
+                    for (JosmAction tool : dataLayer.handler.getTools()) {
+                        popup.add(tool);
+                    }
                     popup.show(e.getComponent(), e.getX(), e.getY());
-	            }
-		    }
+                }
+            }
         });
-		
-		disableAllButtons();
-		
-		this.treeModel = new DefaultTreeModel(null); // TODO: treeNode
-		this.dataLayer = null;
-		
-		createLayout(new JTree(treeModel), true, buttons);
-		
-		MapView.addEditLayerChangeListener(this);
-	}
-	
-	private void disableAllButtons() {
-		for (SideButton button : buttons) {
-			button.setEnabled(false);
-		}
-	}
+        
+        disableAllButtons();
+        
+        this.treeModel = new DefaultTreeModel(null); // TODO: treeNode
+        this.dataLayer = null;
+        
+        createLayout(new JTree(treeModel), true, buttons);
+        
+        MapView.addEditLayerChangeListener(this);
+    }
+    
+    private void disableAllButtons() {
+        for (SideButton button : buttons) {
+            button.setEnabled(false);
+        }
+    }
 
-	@Override
-	public void editLayerChanged(OsmDataLayer oldLayer, OsmDataLayer newLayer) {
-		activeLayerChange(oldLayer, newLayer);
-	}
+    @Override
+    public void editLayerChanged(OsmDataLayer oldLayer, OsmDataLayer newLayer) {
+        activeLayerChange(oldLayer, newLayer);
+    }
 
-	@Override
-	public void activeLayerChange(Layer oldLayer, Layer newLayer) {
-		if (newLayer instanceof OdLayer) {
-			dataLayer = ((OdLayer) newLayer).getDataLayer();
-		} else {
-			dataLayer = null;
-		}
-		
-		if (dataLayer != null) {
-			if (dataLayer.osmLayer == null) {
-				downloadButton.setEnabled(true);
-			} else if (dataLayer.diffLayer == null) {
-				diffButton.setEnabled(true);
-			}
-			toolsButton.setEnabled(dataLayer.handler != null && !dataLayer.handler.getTools().isEmpty());
-		} else {
-			disableAllButtons();
-		}
-	}
+    @Override
+    public void activeLayerChange(Layer oldLayer, Layer newLayer) {
+        if (newLayer instanceof OdLayer) {
+            dataLayer = ((OdLayer) newLayer).getDataLayer();
+        } else {
+            dataLayer = null;
+        }
+        
+        if (dataLayer != null) {
+            if (dataLayer.osmLayer == null) {
+                downloadButton.setEnabled(true);
+            } else if (dataLayer.diffLayer == null) {
+                diffButton.setEnabled(true);
+            }
+            toolsButton.setEnabled(dataLayer.handler != null && !dataLayer.handler.getTools().isEmpty());
+        } else {
+            disableAllButtons();
+        }
+    }
 
-	@Override
-	public void layerAdded(Layer newLayer) {
-	}
+    @Override
+    public void layerAdded(Layer newLayer) {
+    }
 
-	@Override
-	public void layerRemoved(Layer oldLayer) {
-	}
+    @Override
+    public void layerRemoved(Layer oldLayer) {
+    }
 
     @Override
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/OdPreferenceSetting.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/OdPreferenceSetting.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/OdPreferenceSetting.java	(revision 30723)
@@ -46,5 +46,5 @@
 
     public OdPreferenceSetting() {
-    	super(OdConstants.ICON_CORE_48, tr("OpenData Preferences"),
+        super(OdConstants.ICON_CORE_48, tr("OpenData Preferences"),
                 tr("A special handler for various Open Data portals<br/><br/>"+
                         "Please read the Terms and Conditions of Use of each portal<br/>"+
@@ -66,6 +66,6 @@
      * @param sites the site URLs
      */
-	public static void setModuleSites(List<String> sites) {
-		Main.pref.putCollection(OdConstants.PREF_MODULES_SITES, sites);
+    public static void setModuleSites(List<String> sites) {
+        Main.pref.putCollection(OdConstants.PREF_MODULES_SITES, sites);
     }
     
@@ -81,5 +81,5 @@
     }
 
-	protected JPanel createGeneralSettings() {
+    protected JPanel createGeneralSettings() {
         JPanel general = new JPanel(new GridBagLayout());
         general.setBorder(BorderFactory.createEmptyBorder(0,0,0,0));
@@ -104,7 +104,7 @@
         String currentCoordinates = Main.pref.get(PREF_COORDINATES, VALUE_CC9ZONES);
         if (currentCoordinates.equals(VALUE_WGS84))
-        	rbWGS84.setSelected(true);
+            rbWGS84.setSelected(true);
         else
-        	rbCC43.setSelected(true);
+            rbCC43.setSelected(true);
         p.add(rbCC43, GBC.std().insets(5, 0, 5, 0));
         p.add(rbWGS84, GBC.eol().fill(GBC.HORIZONTAL).insets(5, 5, 0, 5));*/
@@ -132,9 +132,9 @@
     @Override
     public boolean ok() {
-    	boolean result = modulePref.ok();
-   		//Main.pref.put(PREF_COORDINATES, rbWGS84.isSelected() ? VALUE_WGS84 : VALUE_CC9ZONES);
-   		Main.pref.put(OdConstants.PREF_OAPI, oapi.getText());
-   		Main.pref.put(OdConstants.PREF_XAPI, xapi.getText());
-   		Main.pref.put(OdConstants.PREF_RAWDATA, rawData.isSelected());
+        boolean result = modulePref.ok();
+           //Main.pref.put(PREF_COORDINATES, rbWGS84.isSelected() ? VALUE_WGS84 : VALUE_CC9ZONES);
+           Main.pref.put(OdConstants.PREF_OAPI, oapi.getText());
+           Main.pref.put(OdConstants.PREF_XAPI, xapi.getText());
+           Main.pref.put(OdConstants.PREF_RAWDATA, rawData.isSelected());
         
         // create a task for downloading modules if the user has activated, yet not downloaded,
@@ -146,5 +146,5 @@
             task = new ModuleDownloadTask(masterPanel, toDownload, tr("Download modules"));
         } else {
-        	task = null;
+            task = null;
         }
         
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/ProjectionChooser.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/ProjectionChooser.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/ProjectionChooser.java	(revision 30723)
@@ -65,15 +65,15 @@
     private static final GBC projSubPrefPanelGBC = GBC.std().fill(GBC.BOTH).weight(1.0, 1.0);
 
-	public ProjectionChooser(Component parent) {
-		this(parent, tr("Projection method"), new String[] {tr("OK"), tr("Cancel")});
-	}
-	
-	protected ProjectionChooser(Component parent, String title, String[] buttonTexts) {
-		super(parent, title, buttonTexts);
-		setMinimumSize(new Dimension(600, 200));
-		addGui();
-	}
-	
-	public void addGui() {
+    public ProjectionChooser(Component parent) {
+        this(parent, tr("Projection method"), new String[] {tr("OK"), tr("Cancel")});
+    }
+    
+    protected ProjectionChooser(Component parent, String title, String[] buttonTexts) {
+        super(parent, title, buttonTexts);
+        setMinimumSize(new Dimension(600, 200));
+        addGui();
+    }
+    
+    public void addGui() {
         projPanel.setBorder(BorderFactory.createEmptyBorder( 0, 0, 0, 0 ));
         projPanel.setLayout(new GridBagLayout());
@@ -101,7 +101,7 @@
         });
         setContent(projPanel);
-	}
-	
-	private void selectedProjectionChanged(final ProjectionChoice pc) {
+    }
+    
+    private void selectedProjectionChanged(final ProjectionChoice pc) {
         // Don't try to update if we're still starting up
         int size = projPanel.getComponentCount();
@@ -124,5 +124,5 @@
         updateMeta(pc);
     }
-	
+    
     private void updateMeta(ProjectionChoice pc) {
         pc.setPreferences(pc.getPreferences(projSubPrefPanel));
@@ -148,11 +148,11 @@
 
     public Projection getProjection() {
-		ProjectionChoice pc = (ProjectionChoice) projectionCombo.getSelectedItem();
-		if (pc != null) {
-		    Main.info("Chosen projection: "+pc+" ("+pc.getProjection()+")");
-		    return pc.getProjection();
-		} else {
-		    return null;
-		}
-	}
+        ProjectionChoice pc = (ProjectionChoice) projectionCombo.getSelectedItem();
+        if (pc != null) {
+            Main.info("Chosen projection: "+pc+" ("+pc.getProjection()+")");
+            return pc.getProjection();
+        } else {
+            return null;
+        }
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/ViewLicenseDialog.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/ViewLicenseDialog.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/gui/ViewLicenseDialog.java	(revision 30723)
@@ -21,27 +21,27 @@
 public class ViewLicenseDialog extends ExtendedDialog {
 
-	private final License license;
-	private final JEditorPane htmlPane;
-	private boolean summary;
-	
-	public ViewLicenseDialog(License license) throws IOException {
-		this(license, Main.parent, tr("License"), new String[] {tr("OK"), "", tr("Cancel")});
-	}
+    private final License license;
+    private final JEditorPane htmlPane;
+    private boolean summary;
+    
+    public ViewLicenseDialog(License license) throws IOException {
+        this(license, Main.parent, tr("License"), new String[] {tr("OK"), "", tr("Cancel")});
+    }
 
-	public ViewLicenseDialog(License license, Component parent, String title, String[] buttonTexts) throws IOException {
-		super(parent, title, buttonTexts);
-		
-		this.license = license;
-		this.htmlPane = new JEditorPane();
-		htmlPane.setEditable(false);
-		if (license.getSummaryURL() != null) {
-			htmlPane.setPage(license.getSummaryURL());
-			summary = true;
-		} else {
-			htmlPane.setPage(license.getURL());
-			summary = false;
-		}
-		JScrollPane scrollPane = new JScrollPane(htmlPane);
-		scrollPane.setPreferredSize(new Dimension(800, 600));
+    public ViewLicenseDialog(License license, Component parent, String title, String[] buttonTexts) throws IOException {
+        super(parent, title, buttonTexts);
+        
+        this.license = license;
+        this.htmlPane = new JEditorPane();
+        htmlPane.setEditable(false);
+        if (license.getSummaryURL() != null) {
+            htmlPane.setPage(license.getSummaryURL());
+            summary = true;
+        } else {
+            htmlPane.setPage(license.getURL());
+            summary = false;
+        }
+        JScrollPane scrollPane = new JScrollPane(htmlPane);
+        scrollPane.setPreferredSize(new Dimension(800, 600));
         
         setButtonIcons(new Icon[] {
@@ -55,42 +55,42 @@
                 null});
         if (license.getIcon() != null) {
-        	setIcon(license.getIcon());
+            setIcon(license.getIcon());
         } else {
-        	setIcon(JOptionPane.INFORMATION_MESSAGE);
+            setIcon(JOptionPane.INFORMATION_MESSAGE);
         }
         setCancelButton(3);
         setMinimumSize(new Dimension(300, 200));
         setContent(scrollPane, false);
-	}
+    }
 
-	@Override
-	protected void buttonAction(int buttonIndex, ActionEvent evt) {
-		if (buttonIndex == 1) {
-			try {
-				if (summary) {
-					buttons.get(1).setText(tr("View summary"));
-					htmlPane.setPage(license.getURL());
-				} else {
-					buttons.get(1).setText(tr("View full text"));
-					htmlPane.setPage(license.getSummaryURL());
-				}
-			} catch (IOException e) {
-				e.printStackTrace();
-			}
-			summary = !summary;
-		} else {
-			super.buttonAction(buttonIndex, evt);
-		}
-	}
+    @Override
+    protected void buttonAction(int buttonIndex, ActionEvent evt) {
+        if (buttonIndex == 1) {
+            try {
+                if (summary) {
+                    buttons.get(1).setText(tr("View summary"));
+                    htmlPane.setPage(license.getURL());
+                } else {
+                    buttons.get(1).setText(tr("View full text"));
+                    htmlPane.setPage(license.getSummaryURL());
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+            summary = !summary;
+        } else {
+            super.buttonAction(buttonIndex, evt);
+        }
+    }
 
-	@Override
-	public void setupDialog() {
-		super.setupDialog();
-		buttons.get(1).setEnabled(license.getSummaryURL() != null && license.getURL() != null);
-		if (summary) {
-			buttons.get(1).setText(tr("View full text"));
-		} else {
-			buttons.get(1).setText(tr("View summary"));
-		}
-	}
+    @Override
+    public void setupDialog() {
+        super.setupDialog();
+        buttons.get(1).setEnabled(license.getSummaryURL() != null && license.getURL() != null);
+        if (summary) {
+            buttons.get(1).setText(tr("View full text"));
+        } else {
+            buttons.get(1).setText(tr("View summary"));
+        }
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/AbstractImporter.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/AbstractImporter.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/AbstractImporter.java	(revision 30723)
@@ -24,9 +24,9 @@
 
 public abstract class AbstractImporter extends OsmImporter {
-	
-	protected AbstractDataSetHandler handler;
-	
-	protected File file;
-	
+    
+    protected AbstractDataSetHandler handler;
+    
+    protected File file;
+    
     public AbstractImporter(ExtensionFileFilter filter) {
         super(filter);
@@ -34,22 +34,22 @@
     
     protected final AbstractDataSetHandler findDataSetHandler(File file) {
-    	for (Module module : ModuleHandler.moduleList) {
-			for (AbstractDataSetHandler dsh : module.getNewlyInstanciatedHandlers()) {
-				if (dsh.acceptsFile(file)) {
-					return dsh;
-				}
-			}
-		}
-    	return null;
+        for (Module module : ModuleHandler.moduleList) {
+            for (AbstractDataSetHandler dsh : module.getNewlyInstanciatedHandlers()) {
+                if (dsh.acceptsFile(file)) {
+                    return dsh;
+                }
+            }
+        }
+        return null;
     }
 
-	@Override
-	public void importData(File file, ProgressMonitor progressMonitor)
-			throws IOException, IllegalDataException {
-		if (file != null) {
-			this.file = file;
-			this.handler = findDataSetHandler(file);
-		}
-		// Do not call super.importData because Compression.getUncompressedFileInputStream skips the first entry
+    @Override
+    public void importData(File file, ProgressMonitor progressMonitor)
+            throws IOException, IllegalDataException {
+        if (file != null) {
+            this.file = file;
+            this.handler = findDataSetHandler(file);
+        }
+        // Do not call super.importData because Compression.getUncompressedFileInputStream skips the first entry
         try (InputStream in = new FileInputStream(file)) {
             importData(in, file, progressMonitor);
@@ -58,10 +58,10 @@
             throw new IOException(tr("File ''{0}'' does not exist.", file.getName()), e);
         }
-	}
+    }
 
-	@Override
-	protected OsmDataLayer createLayer(DataSet dataSet, File associatedFile, String layerName) {
-		DataSetUpdater.updateDataSet(dataSet, handler, associatedFile);
-		return new OdDataLayer(dataSet, layerName, associatedFile, handler);
-	}
+    @Override
+    protected OsmDataLayer createLayer(DataSet dataSet, File associatedFile, String layerName) {
+        DataSetUpdater.updateDataSet(dataSet, handler, associatedFile);
+        return new OdDataLayer(dataSet, layerName, associatedFile, handler);
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/LambertCC9ZonesProjectionPatterns.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/LambertCC9ZonesProjectionPatterns.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/LambertCC9ZonesProjectionPatterns.java	(revision 30723)
@@ -10,29 +10,29 @@
 
 public class LambertCC9ZonesProjectionPatterns extends ProjectionPatterns {
-	
-	public static final Projection[] lambertCC9Zones = new Projection[9];
-	static {
-		for (int i=0; i<lambertCC9Zones.length; i++) {
-			lambertCC9Zones[i] = Projections.getProjectionByCode("EPSG:"+Integer.toString(3942+i));
-		}
-	}
+    
+    public static final Projection[] lambertCC9Zones = new Projection[9];
+    static {
+        for (int i=0; i<lambertCC9Zones.length; i++) {
+            lambertCC9Zones[i] = Projections.getProjectionByCode("EPSG:"+Integer.toString(3942+i));
+        }
+    }
 
-	public LambertCC9ZonesProjectionPatterns(String proj) {
-		super(proj);
-	}
+    public LambertCC9ZonesProjectionPatterns(String proj) {
+        super(proj);
+    }
 
-	@Override
-	public Projection getProjection(String xFieldName, String yFieldName) {
+    @Override
+    public Projection getProjection(String xFieldName, String yFieldName) {
 
-		Matcher mx = getXPattern().matcher(xFieldName);
-		Matcher my = getYPattern().matcher(yFieldName);
-		mx.find();
-		my.find();
-		String ccx = mx.group(1);
-		String ccy = mx.group(1);
-		if (!ccx.equals(ccy)) {
-			throw new IllegalArgumentException(tr("''Lambert CC 9 zones'' coordinates found with different zone codes for X and Y: "+xFieldName+", "+yFieldName));
-		}
-		return lambertCC9Zones[Integer.parseInt(ccx)-42];
-	}
+        Matcher mx = getXPattern().matcher(xFieldName);
+        Matcher my = getYPattern().matcher(yFieldName);
+        mx.find();
+        my.find();
+        String ccx = mx.group(1);
+        String ccy = mx.group(1);
+        if (!ccx.equals(ccy)) {
+            throw new IllegalArgumentException(tr("''Lambert CC 9 zones'' coordinates found with different zone codes for X and Y: "+xFieldName+", "+yFieldName));
+        }
+        return lambertCC9Zones[Integer.parseInt(ccx)-42];
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/NeptuneReader.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/NeptuneReader.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/NeptuneReader.java	(revision 30723)
@@ -58,328 +58,328 @@
 public class NeptuneReader extends AbstractReader implements FrenchConstants {
 
-	public static final String OSM_PUBLIC_TRANSPORT = "public_transport";
-	public static final String OSM_STOP = "stop";
-	public static final String OSM_STOP_AREA = "stop_area";
-	public static final String OSM_STOP_POSITION = "stop_position";
-	public static final String OSM_PLATFORM = "platform";
-	public static final String OSM_STATION = "station";
-	public static final String OSM_NETWORK = "network";
-	public static final String OSM_ROUTE = "route";
-	public static final String OSM_ROUTE_MASTER = "route_master";
-
-	public static final String OSM_TRAIN = "train";
-	public static final String OSM_SUBWAY = "subway";
-	public static final String OSM_MONORAIL = "monorail";
-	public static final String OSM_TRAM = "tram";
-	public static final String OSM_BUS = "bus";
-	public static final String OSM_TROLLEYBUS = "trolleybus";
-	public static final String OSM_AERIALWAY = "aerialway";
-	public static final String OSM_FERRY = "ferry";
-
-	private static final List<URL> schemas = new ArrayList<>();
-	static {
-		schemas.add(NeptuneReader.class.getResource(NEPTUNE_XSD));
-	}
-	
-	private ChouettePTNetworkType root;
-	
-	private final Map<String, OsmPrimitive> tridentObjects = new HashMap<>();
-	
-	public static final boolean acceptsXmlNeptuneFile(File file) {
-		return acceptsXmlNeptuneFile(file, null);
-	}
-
-	public static final boolean acceptsXmlNeptuneFile(File file, URL schemaURL) {
-		
-		if (schemaURL == null) {
-			schemaURL = schemas.get(0);
-		}
-		
-		try {
-			FileInputStream in = new FileInputStream(file);
-			Source xmlFile = new StreamSource(in);
-			try {
-				SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
-				Schema schema = schemaFactory.newSchema(schemaURL);
-				Validator validator = schema.newValidator();
-				validator.validate(xmlFile);
-				Main.info(xmlFile.getSystemId() + " is valid");
-				return true;
-			} catch (SAXException e) {
-				Main.error(xmlFile.getSystemId() + " is NOT valid");
-				Main.error("Reason: " + e.getLocalizedMessage());
-			} catch (IOException e) {
-			    Main.error(xmlFile.getSystemId() + " is NOT valid");
-			    Main.error("Reason: " + e.getLocalizedMessage());
-			} finally {
-				try {
-					in.close();
-				} catch (IOException e) {
-					// Ignore exception 
-				}
-			}
-		} catch (FileNotFoundException e) {
-		    Main.error(e.getMessage());
-		}
-		
-		return false;
-	}
-	
-	public static DataSet parseDataSet(InputStream in, AbstractDataSetHandler handler, ProgressMonitor instance) throws JAXBException {
-		return new NeptuneReader().parse(in, instance);
-	}
-
-	protected static final <T> T unmarshal(Class<T> docClass, InputStream inputStream) throws JAXBException {
-		String packageName = docClass.getPackage().getName();
-		JAXBContext jc = JAXBContext.newInstance(packageName, NeptuneReader.class.getClassLoader());
-		Unmarshaller u = jc.createUnmarshaller();
-		@SuppressWarnings("unchecked")
+    public static final String OSM_PUBLIC_TRANSPORT = "public_transport";
+    public static final String OSM_STOP = "stop";
+    public static final String OSM_STOP_AREA = "stop_area";
+    public static final String OSM_STOP_POSITION = "stop_position";
+    public static final String OSM_PLATFORM = "platform";
+    public static final String OSM_STATION = "station";
+    public static final String OSM_NETWORK = "network";
+    public static final String OSM_ROUTE = "route";
+    public static final String OSM_ROUTE_MASTER = "route_master";
+
+    public static final String OSM_TRAIN = "train";
+    public static final String OSM_SUBWAY = "subway";
+    public static final String OSM_MONORAIL = "monorail";
+    public static final String OSM_TRAM = "tram";
+    public static final String OSM_BUS = "bus";
+    public static final String OSM_TROLLEYBUS = "trolleybus";
+    public static final String OSM_AERIALWAY = "aerialway";
+    public static final String OSM_FERRY = "ferry";
+
+    private static final List<URL> schemas = new ArrayList<>();
+    static {
+        schemas.add(NeptuneReader.class.getResource(NEPTUNE_XSD));
+    }
+    
+    private ChouettePTNetworkType root;
+    
+    private final Map<String, OsmPrimitive> tridentObjects = new HashMap<>();
+    
+    public static final boolean acceptsXmlNeptuneFile(File file) {
+        return acceptsXmlNeptuneFile(file, null);
+    }
+
+    public static final boolean acceptsXmlNeptuneFile(File file, URL schemaURL) {
+        
+        if (schemaURL == null) {
+            schemaURL = schemas.get(0);
+        }
+        
+        try {
+            FileInputStream in = new FileInputStream(file);
+            Source xmlFile = new StreamSource(in);
+            try {
+                SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
+                Schema schema = schemaFactory.newSchema(schemaURL);
+                Validator validator = schema.newValidator();
+                validator.validate(xmlFile);
+                Main.info(xmlFile.getSystemId() + " is valid");
+                return true;
+            } catch (SAXException e) {
+                Main.error(xmlFile.getSystemId() + " is NOT valid");
+                Main.error("Reason: " + e.getLocalizedMessage());
+            } catch (IOException e) {
+                Main.error(xmlFile.getSystemId() + " is NOT valid");
+                Main.error("Reason: " + e.getLocalizedMessage());
+            } finally {
+                try {
+                    in.close();
+                } catch (IOException e) {
+                    // Ignore exception 
+                }
+            }
+        } catch (FileNotFoundException e) {
+            Main.error(e.getMessage());
+        }
+        
+        return false;
+    }
+    
+    public static DataSet parseDataSet(InputStream in, AbstractDataSetHandler handler, ProgressMonitor instance) throws JAXBException {
+        return new NeptuneReader().parse(in, instance);
+    }
+
+    protected static final <T> T unmarshal(Class<T> docClass, InputStream inputStream) throws JAXBException {
+        String packageName = docClass.getPackage().getName();
+        JAXBContext jc = JAXBContext.newInstance(packageName, NeptuneReader.class.getClassLoader());
+        Unmarshaller u = jc.createUnmarshaller();
+        @SuppressWarnings("unchecked")
         JAXBElement<T> doc = (JAXBElement<T>)u.unmarshal(inputStream);
-		return doc.getValue();
-	}
-	
-	private final void linkTridentObjectToOsmPrimitive(TridentObjectType object, OsmPrimitive p) {
-		p.put("ref:neptune", object.getObjectId());
-		if (tridentObjects.put(object.getObjectId(), p) != null) {
-			System.err.println("Trident object duplicated !!! : "+object.getObjectId());
-		}
-	}
-
-	protected Node createNode(LatLon latlon){
-		Node n = new Node(latlon);
-		ds.addPrimitive(n);
-		return n;
-	}
-	
-	private Node createPlatform(StopPointType stop) {
-		Node n = createNode(createLatLon(stop));
-		n.put(OSM_PUBLIC_TRANSPORT, OSM_PLATFORM);
-		linkTridentObjectToOsmPrimitive(stop, n);
-		n.put("name", stop.getName());
-		return n;
-	}
-	/*
-	private Node createStopPosition(StopPointType stop) {
-		Node n = createNode(createLatLon(stop));
-		n.put(OSM_PUBLIC_TRANSPORT, OSM_STOP_POSITION);
-		linkTridentObjectToOsmPrimitive(stop, n);
-		n.put("name", stop.getName());
-		return n;
-	}
+        return doc.getValue();
+    }
+    
+    private final void linkTridentObjectToOsmPrimitive(TridentObjectType object, OsmPrimitive p) {
+        p.put("ref:neptune", object.getObjectId());
+        if (tridentObjects.put(object.getObjectId(), p) != null) {
+            System.err.println("Trident object duplicated !!! : "+object.getObjectId());
+        }
+    }
+
+    protected Node createNode(LatLon latlon){
+        Node n = new Node(latlon);
+        ds.addPrimitive(n);
+        return n;
+    }
+    
+    private Node createPlatform(StopPointType stop) {
+        Node n = createNode(createLatLon(stop));
+        n.put(OSM_PUBLIC_TRANSPORT, OSM_PLATFORM);
+        linkTridentObjectToOsmPrimitive(stop, n);
+        n.put("name", stop.getName());
+        return n;
+    }
+    /*
+    private Node createStopPosition(StopPointType stop) {
+        Node n = createNode(createLatLon(stop));
+        n.put(OSM_PUBLIC_TRANSPORT, OSM_STOP_POSITION);
+        linkTridentObjectToOsmPrimitive(stop, n);
+        n.put("name", stop.getName());
+        return n;
+    }
 */
-	protected Relation createRelation(String type){
-		Relation r = new Relation();
-		r.put("type", type);
-		ds.addPrimitive(r);
-		return r;
-	}
-
-	protected Relation createPtRelation(String pt, TridentObjectType object){
-		Relation r = createRelation(OSM_PUBLIC_TRANSPORT);
-		r.put(OSM_PUBLIC_TRANSPORT, pt);
-		linkTridentObjectToOsmPrimitive(object, r);
-		return r;
-	}
-	
-	protected Relation createNetwork(PTNetworkType network) {
-		Relation r = createRelation(OSM_NETWORK);
-		linkTridentObjectToOsmPrimitive(network, r);
-		r.put("name", network.getName());
-		return r;
-	}
-	
-	protected Relation createRouteMaster(LineType line) {
-		Relation r = createPtRelation(OSM_ROUTE_MASTER, line);
-		switch (line.getTransportModeName()) {
-		case BUS:
-			r.put(OSM_ROUTE_MASTER, OSM_BUS); break;
-		case AIR:
-			r.put(OSM_ROUTE_MASTER, OSM_AERIALWAY); break;
-		case FERRY:
-			r.put(OSM_ROUTE_MASTER, OSM_FERRY); break;
-		case METRO:
-			r.put(OSM_ROUTE_MASTER, OSM_SUBWAY); break;
-		case TRAIN:
-			r.put(OSM_ROUTE_MASTER, OSM_TRAIN); break;
-		case TRAMWAY:
-			r.put(OSM_ROUTE_MASTER, OSM_TRAM); break;
-		case TROLLEYBUS:
-			r.put(OSM_ROUTE_MASTER, OSM_TROLLEYBUS); break;
-		default:
-			System.err.println("Unsupported transport mode: "+line.getTransportModeName());
-		}
-		r.put("ref", line.getNumber());
-		r.put("name", line.getTransportModeName().value()+" "+line.getNumber()+": "+line.getName());
-		return r;
-	}
-
-	private Relation createRoute(ChouetteRoute route) {
-		Relation r = createPtRelation(OSM_ROUTE, route);
-		r.put("name", route.getName());
-		return r;
-	}
-	
-	protected Relation createStopArea(StopAreaType sa) {
-		Relation r = createPtRelation(OSM_STOP_AREA, sa);
-		r.put("name", sa.getName());
-		return r;
-	}
-	
-	protected LatLon createLatLon(PointType point) {
-		return new LatLon(point.getLatitude().doubleValue(), point.getLongitude().doubleValue());
-	}
-	
-	protected final <T extends TridentObjectType> T findTridentObject(List<T> list, String id) {
-		for (T object : list) {
-			if (object.getObjectId().equals(id)) {
-				return object;
-			}
-		}
-		return null;
-	}
-	
-	protected StopPoint findStopPoint(String id) {
-		return findTridentObject(root.getChouetteLineDescription().getStopPoint(), id);
-	}
-
-	protected StopArea findStopArea(String id) {
-		return findTridentObject(root.getChouetteArea().getStopArea(), id);
-	}
-
-	protected AreaCentroid findAreaCentroid(String id) {
-		return findTridentObject(root.getChouetteArea().getAreaCentroid(), id);
-	}
-
-	protected PTLinkType findPtLink(String id) {
-		return findTridentObject(root.getChouetteLineDescription().getPtLink(), id);
-	}
-
-	protected static final boolean isNullLatLon(LatLon ll) {
-		return ll.lat() == 0.0 && ll.lon() == 0.0;
-	}
-
-	private DataSet parse(InputStream in, ProgressMonitor instance) throws JAXBException {
-		root = unmarshal(ChouettePTNetworkType.class, in);
-
-		Relation network = createNetwork(root.getPTNetwork());
-
-		// Parsing Stop areas
-		for (StopArea sa : root.getChouetteArea().getStopArea()) {
-			if (sa.getStopAreaExtension().getAreaType().equals(ChouetteAreaType.COMMERCIAL_STOP_POINT)) {
-				Relation stopArea = createStopArea(sa);
-				stopArea.put("name", sa.getName());
-				for (String childId : sa.getContains()) {
-					if (childId.contains("StopArea")) {
-						StopArea child = findStopArea(childId);
-						if (child == null) {
-							System.err.println("Cannot find StopArea: "+childId);
-						} else {
-							if (child.getStopAreaExtension().getAreaType().equals(ChouetteAreaType.BOARDING_POSITION)) {
-								for (String grandchildId : child.getContains()) {
-									if (grandchildId.contains("StopPoint")) {
-										StopPoint grandchild = findStopPoint(grandchildId);
-										if (grandchild == null) {
-											System.err.println("Cannot find StopPoint: "+grandchildId);
-										} else {
-											if (grandchild.getLongLatType().equals(LongLatTypeType.WGS_84)) {
-												Node platform = createPlatform(grandchild);
-												stopArea.addMember(new RelationMember(OSM_PLATFORM, platform));
-											} else {
-												System.err.println("Unsupported long/lat type: "+grandchild.getLongLatType());
-											}
-										}
-									} else {
-										System.err.println("Unsupported grandchild: "+grandchildId);
-									}
-								}
-								String centroidId = child.getCentroidOfArea();
-								AreaCentroid areaCentroid = findAreaCentroid(centroidId);
-								if (areaCentroid == null) {
-									System.err.println("Cannot find AreaCentroid: "+centroidId);
-								} else if (!areaCentroid.getLongLatType().equals(LongLatTypeType.WGS_84)) {
-									System.err.println("Unsupported long/lat type: "+areaCentroid.getLongLatType());
-								} else {
-									for (RelationMember member : stopArea.getMembers()) {
-										// Fix stop coordinates if needed
-										if (member.getRole().equals(OSM_PLATFORM) && isNullLatLon(member.getNode().getCoor())) {
-											member.getNode().setCoor(createLatLon(areaCentroid));
-										}
-									}
-								}
-							} else {
-								System.err.println("Unsupported child type: "+child.getStopAreaExtension().getAreaType());
-							}
-						}
-						
-					} else if (childId.contains("StopPoint")) {
-						StopPoint child = findStopPoint(childId);
-						if (child == null) {
-							System.err.println("Cannot find StopPoint: "+childId);
-						} else {
-							// TODO
-							Main.info("TODO: handle StopPoint "+childId);
-						}
-
-					} else {
-						Main.warn("Unsupported child: "+childId);
-					}
-				}
-			} else if (sa.getStopAreaExtension().getAreaType().equals(ChouetteAreaType.BOARDING_POSITION)) {
-				//Main.info("skipping StopArea with type "+sa.getStopAreaExtension().getAreaType()+": "+sa.getObjectId());
-			} else {
-			    Main.warn("Unsupported StopArea type: "+sa.getStopAreaExtension().getAreaType());
-			}
-		}
-
-		Relation routeMaster = createRouteMaster(root.getChouetteLineDescription().getLine());
-		network.addMember(new RelationMember(null, routeMaster));
-
-		for (ChouetteRoute cr : root.getChouetteLineDescription().getChouetteRoute()) {
-			Relation route = createRoute(cr);
-			routeMaster.addMember(new RelationMember(null, route));
-			for (String id : cr.getPtLinkId()) {
-				PTLinkType ptlink = findPtLink(id);
-				if (ptlink == null) {
-					System.err.println("Cannot find PTLinkType: "+id);
-				} else {
-					/*StopPoint start = findStopPoint(ptlink.getStartOfLink());
-					StopPoint end = findStopPoint(ptlink.getEndOfLink());*/
-					OsmPrimitive start = tridentObjects.get(ptlink.getStartOfLink());
-					OsmPrimitive end = tridentObjects.get(ptlink.getEndOfLink());
-					if (start == null) {
-						System.err.println("Cannot find start StopPoint: "+ptlink.getStartOfLink());
-					} else if (start.get(OSM_PUBLIC_TRANSPORT).equals(OSM_STOP) || start.get(OSM_PUBLIC_TRANSPORT).equals(OSM_PLATFORM)) {
-						addStopToRoute(route, start);
-					}
-					
-					if (end == null) {
-						System.err.println("Cannot find end StopPoint: "+ptlink.getEndOfLink());
-					} else if (end.get(OSM_PUBLIC_TRANSPORT).equals(OSM_STOP) || end.get(OSM_PUBLIC_TRANSPORT).equals(OSM_PLATFORM)) {
-						addStopToRoute(route, end);
-					}
-				}
-			}
-		}
-		
-		return ds;
-	}
-		
-	private static final boolean addStopToRoute(Relation route, OsmPrimitive stop) {
-		if (route.getMembersCount() == 0 || !route.getMember(route.getMembersCount()-1).getMember().equals(stop) ) {
-			route.addMember(new RelationMember(stop.get(OSM_PUBLIC_TRANSPORT), stop));
-			return true;
-		} else {
-			return false;
-		}
-	}
-
-	public static List<URL> getSchemas() {
-		return schemas;
-	}
-
-	public static void registerSchema(URL resource) {
-		if (resource != null && !schemas.contains(resource)) {
-			schemas.add(resource);
-		}
-	}
+    protected Relation createRelation(String type){
+        Relation r = new Relation();
+        r.put("type", type);
+        ds.addPrimitive(r);
+        return r;
+    }
+
+    protected Relation createPtRelation(String pt, TridentObjectType object){
+        Relation r = createRelation(OSM_PUBLIC_TRANSPORT);
+        r.put(OSM_PUBLIC_TRANSPORT, pt);
+        linkTridentObjectToOsmPrimitive(object, r);
+        return r;
+    }
+    
+    protected Relation createNetwork(PTNetworkType network) {
+        Relation r = createRelation(OSM_NETWORK);
+        linkTridentObjectToOsmPrimitive(network, r);
+        r.put("name", network.getName());
+        return r;
+    }
+    
+    protected Relation createRouteMaster(LineType line) {
+        Relation r = createPtRelation(OSM_ROUTE_MASTER, line);
+        switch (line.getTransportModeName()) {
+        case BUS:
+            r.put(OSM_ROUTE_MASTER, OSM_BUS); break;
+        case AIR:
+            r.put(OSM_ROUTE_MASTER, OSM_AERIALWAY); break;
+        case FERRY:
+            r.put(OSM_ROUTE_MASTER, OSM_FERRY); break;
+        case METRO:
+            r.put(OSM_ROUTE_MASTER, OSM_SUBWAY); break;
+        case TRAIN:
+            r.put(OSM_ROUTE_MASTER, OSM_TRAIN); break;
+        case TRAMWAY:
+            r.put(OSM_ROUTE_MASTER, OSM_TRAM); break;
+        case TROLLEYBUS:
+            r.put(OSM_ROUTE_MASTER, OSM_TROLLEYBUS); break;
+        default:
+            System.err.println("Unsupported transport mode: "+line.getTransportModeName());
+        }
+        r.put("ref", line.getNumber());
+        r.put("name", line.getTransportModeName().value()+" "+line.getNumber()+": "+line.getName());
+        return r;
+    }
+
+    private Relation createRoute(ChouetteRoute route) {
+        Relation r = createPtRelation(OSM_ROUTE, route);
+        r.put("name", route.getName());
+        return r;
+    }
+    
+    protected Relation createStopArea(StopAreaType sa) {
+        Relation r = createPtRelation(OSM_STOP_AREA, sa);
+        r.put("name", sa.getName());
+        return r;
+    }
+    
+    protected LatLon createLatLon(PointType point) {
+        return new LatLon(point.getLatitude().doubleValue(), point.getLongitude().doubleValue());
+    }
+    
+    protected final <T extends TridentObjectType> T findTridentObject(List<T> list, String id) {
+        for (T object : list) {
+            if (object.getObjectId().equals(id)) {
+                return object;
+            }
+        }
+        return null;
+    }
+    
+    protected StopPoint findStopPoint(String id) {
+        return findTridentObject(root.getChouetteLineDescription().getStopPoint(), id);
+    }
+
+    protected StopArea findStopArea(String id) {
+        return findTridentObject(root.getChouetteArea().getStopArea(), id);
+    }
+
+    protected AreaCentroid findAreaCentroid(String id) {
+        return findTridentObject(root.getChouetteArea().getAreaCentroid(), id);
+    }
+
+    protected PTLinkType findPtLink(String id) {
+        return findTridentObject(root.getChouetteLineDescription().getPtLink(), id);
+    }
+
+    protected static final boolean isNullLatLon(LatLon ll) {
+        return ll.lat() == 0.0 && ll.lon() == 0.0;
+    }
+
+    private DataSet parse(InputStream in, ProgressMonitor instance) throws JAXBException {
+        root = unmarshal(ChouettePTNetworkType.class, in);
+
+        Relation network = createNetwork(root.getPTNetwork());
+
+        // Parsing Stop areas
+        for (StopArea sa : root.getChouetteArea().getStopArea()) {
+            if (sa.getStopAreaExtension().getAreaType().equals(ChouetteAreaType.COMMERCIAL_STOP_POINT)) {
+                Relation stopArea = createStopArea(sa);
+                stopArea.put("name", sa.getName());
+                for (String childId : sa.getContains()) {
+                    if (childId.contains("StopArea")) {
+                        StopArea child = findStopArea(childId);
+                        if (child == null) {
+                            System.err.println("Cannot find StopArea: "+childId);
+                        } else {
+                            if (child.getStopAreaExtension().getAreaType().equals(ChouetteAreaType.BOARDING_POSITION)) {
+                                for (String grandchildId : child.getContains()) {
+                                    if (grandchildId.contains("StopPoint")) {
+                                        StopPoint grandchild = findStopPoint(grandchildId);
+                                        if (grandchild == null) {
+                                            System.err.println("Cannot find StopPoint: "+grandchildId);
+                                        } else {
+                                            if (grandchild.getLongLatType().equals(LongLatTypeType.WGS_84)) {
+                                                Node platform = createPlatform(grandchild);
+                                                stopArea.addMember(new RelationMember(OSM_PLATFORM, platform));
+                                            } else {
+                                                System.err.println("Unsupported long/lat type: "+grandchild.getLongLatType());
+                                            }
+                                        }
+                                    } else {
+                                        System.err.println("Unsupported grandchild: "+grandchildId);
+                                    }
+                                }
+                                String centroidId = child.getCentroidOfArea();
+                                AreaCentroid areaCentroid = findAreaCentroid(centroidId);
+                                if (areaCentroid == null) {
+                                    System.err.println("Cannot find AreaCentroid: "+centroidId);
+                                } else if (!areaCentroid.getLongLatType().equals(LongLatTypeType.WGS_84)) {
+                                    System.err.println("Unsupported long/lat type: "+areaCentroid.getLongLatType());
+                                } else {
+                                    for (RelationMember member : stopArea.getMembers()) {
+                                        // Fix stop coordinates if needed
+                                        if (member.getRole().equals(OSM_PLATFORM) && isNullLatLon(member.getNode().getCoor())) {
+                                            member.getNode().setCoor(createLatLon(areaCentroid));
+                                        }
+                                    }
+                                }
+                            } else {
+                                System.err.println("Unsupported child type: "+child.getStopAreaExtension().getAreaType());
+                            }
+                        }
+                        
+                    } else if (childId.contains("StopPoint")) {
+                        StopPoint child = findStopPoint(childId);
+                        if (child == null) {
+                            System.err.println("Cannot find StopPoint: "+childId);
+                        } else {
+                            // TODO
+                            Main.info("TODO: handle StopPoint "+childId);
+                        }
+
+                    } else {
+                        Main.warn("Unsupported child: "+childId);
+                    }
+                }
+            } else if (sa.getStopAreaExtension().getAreaType().equals(ChouetteAreaType.BOARDING_POSITION)) {
+                //Main.info("skipping StopArea with type "+sa.getStopAreaExtension().getAreaType()+": "+sa.getObjectId());
+            } else {
+                Main.warn("Unsupported StopArea type: "+sa.getStopAreaExtension().getAreaType());
+            }
+        }
+
+        Relation routeMaster = createRouteMaster(root.getChouetteLineDescription().getLine());
+        network.addMember(new RelationMember(null, routeMaster));
+
+        for (ChouetteRoute cr : root.getChouetteLineDescription().getChouetteRoute()) {
+            Relation route = createRoute(cr);
+            routeMaster.addMember(new RelationMember(null, route));
+            for (String id : cr.getPtLinkId()) {
+                PTLinkType ptlink = findPtLink(id);
+                if (ptlink == null) {
+                    System.err.println("Cannot find PTLinkType: "+id);
+                } else {
+                    /*StopPoint start = findStopPoint(ptlink.getStartOfLink());
+                    StopPoint end = findStopPoint(ptlink.getEndOfLink());*/
+                    OsmPrimitive start = tridentObjects.get(ptlink.getStartOfLink());
+                    OsmPrimitive end = tridentObjects.get(ptlink.getEndOfLink());
+                    if (start == null) {
+                        System.err.println("Cannot find start StopPoint: "+ptlink.getStartOfLink());
+                    } else if (start.get(OSM_PUBLIC_TRANSPORT).equals(OSM_STOP) || start.get(OSM_PUBLIC_TRANSPORT).equals(OSM_PLATFORM)) {
+                        addStopToRoute(route, start);
+                    }
+                    
+                    if (end == null) {
+                        System.err.println("Cannot find end StopPoint: "+ptlink.getEndOfLink());
+                    } else if (end.get(OSM_PUBLIC_TRANSPORT).equals(OSM_STOP) || end.get(OSM_PUBLIC_TRANSPORT).equals(OSM_PLATFORM)) {
+                        addStopToRoute(route, end);
+                    }
+                }
+            }
+        }
+        
+        return ds;
+    }
+        
+    private static final boolean addStopToRoute(Relation route, OsmPrimitive stop) {
+        if (route.getMembersCount() == 0 || !route.getMember(route.getMembersCount()-1).getMember().equals(stop) ) {
+            route.addMember(new RelationMember(stop.get(OSM_PUBLIC_TRANSPORT), stop));
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    public static List<URL> getSchemas() {
+        return schemas;
+    }
+
+    public static void registerSchema(URL resource) {
+        if (resource != null && !schemas.contains(resource)) {
+            schemas.add(resource);
+        }
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/NetworkReader.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/NetworkReader.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/NetworkReader.java	(revision 30723)
@@ -34,11 +34,11 @@
 public class NetworkReader extends OsmServerReader {
 
-	private final String url;
-	private final AbstractDataSetHandler handler;
-	private Class<? extends AbstractReader> readerClass;
-	private final boolean promptUser;
+    private final String url;
+    private final AbstractDataSetHandler handler;
+    private Class<? extends AbstractReader> readerClass;
+    private final boolean promptUser;
 
-	private File file;
-	private String filename;
+    private File file;
+    private String filename;
     
     /**
@@ -66,5 +66,5 @@
     public NetworkReader(String url, AbstractDataSetHandler handler, boolean promptUser) {
         CheckParameterUtil.ensureParameterNotNull(url, "url");
-    	this.url = url;
+        this.url = url;
         this.handler = handler;
         this.readerClass = null;
@@ -72,67 +72,67 @@
     }
     
-	public final File getReadFile() {
-		return file;
-	}
+    public final File getReadFile() {
+        return file;
+    }
 
-	public final String getReadFileName() {
-		return filename;
-	}
+    public final String getReadFileName() {
+        return filename;
+    }
 
-	private Class<? extends AbstractReader> findReaderByAttachment() {
-		String cdisp = this.activeConnection.getHeaderField("Content-disposition");
-		if (cdisp != null) {
-			Matcher m = Pattern.compile("attachment;.?filename=(.*)").matcher(cdisp);
-			if (m.matches()) {
-				filename = m.group(1);
-				return findReaderByExtension(filename);
-			}
-		}
-		return null;
-	}
+    private Class<? extends AbstractReader> findReaderByAttachment() {
+        String cdisp = this.activeConnection.getHeaderField("Content-disposition");
+        if (cdisp != null) {
+            Matcher m = Pattern.compile("attachment;.?filename=(.*)").matcher(cdisp);
+            if (m.matches()) {
+                filename = m.group(1);
+                return findReaderByExtension(filename);
+            }
+        }
+        return null;
+    }
 
-	private Class<? extends AbstractReader> findReaderByContentType() {
-    	String contentType = this.activeConnection.getContentType();
-    	if (contentType.startsWith("application/zip")) {
-    		return ZipReader.class;
+    private Class<? extends AbstractReader> findReaderByContentType() {
+        String contentType = this.activeConnection.getContentType();
+        if (contentType.startsWith("application/zip")) {
+            return ZipReader.class;
         } else if (contentType.startsWith("application/x-7z-compressed")) {
             return SevenZipReader.class;
-    	} else if (contentType.startsWith("application/vnd.ms-excel")) {
-    		return XlsReader.class;
-    	} else if (contentType.startsWith("application/octet-stream")) {
-        	//return OdsReader.class;//FIXME, can be anything
-    	} else if (contentType.startsWith("text/csv")) {
-    		return CsvReader.class;
-    	} else if (contentType.startsWith("text/plain")) {//TODO: extract charset
-    		return CsvReader.class;
-    	} else if (contentType.startsWith("tdyn/html")) {
-        	//return CsvReader.class;//FIXME, can also be .tar.gz
-    	} else {
-    		System.err.println("Unsupported content type: "+contentType);
-    	}
-    	return null;
-	}
+        } else if (contentType.startsWith("application/vnd.ms-excel")) {
+            return XlsReader.class;
+        } else if (contentType.startsWith("application/octet-stream")) {
+            //return OdsReader.class;//FIXME, can be anything
+        } else if (contentType.startsWith("text/csv")) {
+            return CsvReader.class;
+        } else if (contentType.startsWith("text/plain")) {//TODO: extract charset
+            return CsvReader.class;
+        } else if (contentType.startsWith("tdyn/html")) {
+            //return CsvReader.class;//FIXME, can also be .tar.gz
+        } else {
+            System.err.println("Unsupported content type: "+contentType);
+        }
+        return null;
+    }
 
-	private Class<? extends AbstractReader> findReaderByExtension(String filename) {
-		filename = filename.replace("\"", "").toLowerCase();
-		for (String ext : FILE_AND_ARCHIVE_READERS.keySet()) {
-		    if (filename.endsWith("."+ext)) {
-		        return FILE_AND_ARCHIVE_READERS.get(ext);
-		    }
-		}
-		return null;
-	}
+    private Class<? extends AbstractReader> findReaderByExtension(String filename) {
+        filename = filename.replace("\"", "").toLowerCase();
+        for (String ext : FILE_AND_ARCHIVE_READERS.keySet()) {
+            if (filename.endsWith("."+ext)) {
+                return FILE_AND_ARCHIVE_READERS.get(ext);
+            }
+        }
+        return null;
+    }
 
-	@Override
-	public DataSet parseOsm(ProgressMonitor progressMonitor) throws OsmTransferException {
+    @Override
+    public DataSet parseOsm(ProgressMonitor progressMonitor) throws OsmTransferException {
         InputStream in = null;
         ProgressMonitor instance = null;
         try {
-        	in = getInputStreamRaw(url, progressMonitor);
+            in = getInputStreamRaw(url, progressMonitor);
             if (in == null)
                 return null;
             progressMonitor.subTask(tr("Downloading data..."));
             if (readerClass == null) {
-            	readerClass = findReaderByAttachment();
+                readerClass = findReaderByAttachment();
             }
             if (readerClass == null) {
@@ -140,38 +140,38 @@
             }
             if (readerClass == null) {
-            	readerClass = findReaderByContentType();
+                readerClass = findReaderByContentType();
             }
             if (readerClass == null) {
-           		throw new OsmTransferException("Cannot find appropriate reader !");//TODO handler job ?
+                   throw new OsmTransferException("Cannot find appropriate reader !");//TODO handler job ?
             } else if (findReaderByExtension(url) != null) {
-            	filename = url.substring(url.lastIndexOf('/')+1);
+                filename = url.substring(url.lastIndexOf('/')+1);
             }
             instance = progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false);
             if (readerClass.equals(ZipReader.class) || readerClass.equals(SevenZipReader.class)) {
-            	ArchiveReader zipReader = readerClass.equals(ZipReader.class) 
-            	        ? new ZipReader(in, handler, promptUser) : new SevenZipReader(in, handler, promptUser);
-            	DataSet ds = zipReader.parseDoc(instance);
-            	file = zipReader.getReadFile();
-            	return ds;
+                ArchiveReader zipReader = readerClass.equals(ZipReader.class) 
+                        ? new ZipReader(in, handler, promptUser) : new SevenZipReader(in, handler, promptUser);
+                DataSet ds = zipReader.parseDoc(instance);
+                file = zipReader.getReadFile();
+                return ds;
             } else if (readerClass.equals(KmlReader.class)) {
-            	return KmlReader.parseDataSet(in, instance);
+                return KmlReader.parseDataSet(in, instance);
             } else if (readerClass.equals(KmzReader.class)) {
-            	return KmzReader.parseDataSet(in, instance);
+                return KmzReader.parseDataSet(in, instance);
             } else if (readerClass.equals(MifReader.class)) {
-            	return MifReader.parseDataSet(in, null, handler, instance);
+                return MifReader.parseDataSet(in, null, handler, instance);
             } else if (readerClass.equals(ShpReader.class)) {
-            	return ShpReader.parseDataSet(in, null, handler, instance);
+                return ShpReader.parseDataSet(in, null, handler, instance);
             } else if (readerClass.equals(TabReader.class)) {
-            	return TabReader.parseDataSet(in, null, handler, instance);
+                return TabReader.parseDataSet(in, null, handler, instance);
             } else if (readerClass.equals(CsvReader.class)) {
-            	return CsvReader.parseDataSet(in, handler, instance);
+                return CsvReader.parseDataSet(in, handler, instance);
             } else if (readerClass.equals(OdsReader.class)) {
-            	return OdsReader.parseDataSet(in, handler, instance);
+                return OdsReader.parseDataSet(in, handler, instance);
             } else if (readerClass.equals(XlsReader.class)) {
-            	return XlsReader.parseDataSet(in, handler, instance);
+                return XlsReader.parseDataSet(in, handler, instance);
             } else if (readerClass.equals(GmlReader.class)) {
-            	return GmlReader.parseDataSet(in, handler, instance);
+                return GmlReader.parseDataSet(in, handler, instance);
             } else {
-            	throw new IllegalArgumentException("Unsupported reader class: "+readerClass.getName());
+                throw new IllegalArgumentException("Unsupported reader class: "+readerClass.getName());
             }
         } catch (OsmTransferException e) {
@@ -190,4 +190,4 @@
             } catch (Exception e) {/* ignore it */}
         }
-	}
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/OsmDownloader.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/OsmDownloader.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/OsmDownloader.java	(revision 30723)
@@ -10,25 +10,25 @@
 
 public class OsmDownloader {
-	
-	public static final void downloadOapi(String oapiReq) {
-		if (oapiReq != null) {
-			try {
-				String oapiServer = Main.pref.get(OdConstants.PREF_OAPI, OdConstants.DEFAULT_OAPI);
-				Main.info(oapiReq);
-				String oapiReqEnc = URLEncoder.encode(oapiReq, OdConstants.UTF8);
-				Main.main.menu.openLocation.openUrl(false, oapiServer+"data="+oapiReqEnc);
-			} catch (UnsupportedEncodingException e) {
-				e.printStackTrace();
-			}
-		}
-	}
-	
-	public static final void downloadXapi(Collection<String> xapiReqs) {
-		if (xapiReqs != null) {
-			String xapiServer = Main.pref.get(OdConstants.PREF_XAPI, OdConstants.DEFAULT_XAPI);
-			for (String xapiReq : xapiReqs) {
-				Main.main.menu.openLocation.openUrl(false, xapiServer+xapiReq);
-			}
-		}
-	}
+    
+    public static final void downloadOapi(String oapiReq) {
+        if (oapiReq != null) {
+            try {
+                String oapiServer = Main.pref.get(OdConstants.PREF_OAPI, OdConstants.DEFAULT_OAPI);
+                Main.info(oapiReq);
+                String oapiReqEnc = URLEncoder.encode(oapiReq, OdConstants.UTF8);
+                Main.main.menu.openLocation.openUrl(false, oapiServer+"data="+oapiReqEnc);
+            } catch (UnsupportedEncodingException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+    
+    public static final void downloadXapi(Collection<String> xapiReqs) {
+        if (xapiReqs != null) {
+            String xapiServer = Main.pref.get(OdConstants.PREF_XAPI, OdConstants.DEFAULT_XAPI);
+            for (String xapiReq : xapiReqs) {
+                Main.main.menu.openLocation.openUrl(false, xapiServer+xapiReq);
+            }
+        }
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/OverpassApi.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/OverpassApi.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/OverpassApi.java	(revision 30723)
@@ -4,76 +4,76 @@
 public abstract class OverpassApi {
 
-	public enum OaQueryType {
-		NODE ("node"),
-		WAY ("way"),
-		RELATION ("relation");
-		@Override
-		public String toString() { return this.value; }
-		private OaQueryType(final String value) { this.value = value; }
-		private final String value;
-	}
+    public enum OaQueryType {
+        NODE ("node"),
+        WAY ("way"),
+        RELATION ("relation");
+        @Override
+        public String toString() { return this.value; }
+        private OaQueryType(final String value) { this.value = value; }
+        private final String value;
+    }
 
-	public enum OaRecurseType {
-		RELATION_RELATION ("relation-relation"),
-		RELATION_BACKWARDS ("relation-backwards"),
-		RELATION_WAY ("relation-way"),
-		RELATION_NODE ("relation-node"),
-		WAY_NODE ("way-node"),
-		WAY_RELATION ("way-relation"),
-		NODE_RELATION ("node-relation"),
-		NODE_WAY ("node-way");
-		@Override
-		public String toString() { return this.value; }
-		private OaRecurseType(final String value) { this.value = value; }
-		private final String value;
-	}
-	
-	public static final String union(String ... queries) {
-		String result = "<union>\n";
-		for (String query : queries) {
-			if (query != null) {
-				result += query + "\n";
-			}
-		}
-		result += "</union>";
-		return result;
-	}
-	
-	public static final String query(String bbox, OaQueryType type, String ... conditions) {
-		String result = "<query type=\""+type+"\" >\n";
-		if (bbox != null) {
-			result += "<bbox-query "+bbox+"/>\n";
-		}
-		for (String condition : conditions) {
-			if (condition != null) {
-				result += condition + "\n";
-			}
-		}
-		result += "</query>";
-		return result;
-	}
+    public enum OaRecurseType {
+        RELATION_RELATION ("relation-relation"),
+        RELATION_BACKWARDS ("relation-backwards"),
+        RELATION_WAY ("relation-way"),
+        RELATION_NODE ("relation-node"),
+        WAY_NODE ("way-node"),
+        WAY_RELATION ("way-relation"),
+        NODE_RELATION ("node-relation"),
+        NODE_WAY ("node-way");
+        @Override
+        public String toString() { return this.value; }
+        private OaRecurseType(final String value) { this.value = value; }
+        private final String value;
+    }
+    
+    public static final String union(String ... queries) {
+        String result = "<union>\n";
+        for (String query : queries) {
+            if (query != null) {
+                result += query + "\n";
+            }
+        }
+        result += "</union>";
+        return result;
+    }
+    
+    public static final String query(String bbox, OaQueryType type, String ... conditions) {
+        String result = "<query type=\""+type+"\" >\n";
+        if (bbox != null) {
+            result += "<bbox-query "+bbox+"/>\n";
+        }
+        for (String condition : conditions) {
+            if (condition != null) {
+                result += condition + "\n";
+            }
+        }
+        result += "</query>";
+        return result;
+    }
 
-	public static final String recurse(OaRecurseType type, String into) {
-		return "<recurse type=\""+type+"\" into=\""+into+"\"/>\n";
-	}
+    public static final String recurse(OaRecurseType type, String into) {
+        return "<recurse type=\""+type+"\" into=\""+into+"\"/>\n";
+    }
 
-	public static final String recurse(OaRecurseType ... types) {
-		String result = "";
-		for (OaRecurseType type : types) {
-			result += "<recurse type=\""+type+"\"/>\n";
-		}
-		return result;
-	}
-	
-	public static final String print() {
-		return "<print mode=\"meta\"/>";
-	}
-	
-	public static final String hasKey(String key) {
-		return hasKey(key, null);
-	}
+    public static final String recurse(OaRecurseType ... types) {
+        String result = "";
+        for (OaRecurseType type : types) {
+            result += "<recurse type=\""+type+"\"/>\n";
+        }
+        return result;
+    }
+    
+    public static final String print() {
+        return "<print mode=\"meta\"/>";
+    }
+    
+    public static final String hasKey(String key) {
+        return hasKey(key, null);
+    }
 
-	public static final String hasKey(String key, String value) {
-		return "<has-kv k=\""+key+"\" "+(value != null && !value.isEmpty() ? "v=\""+value+"\"" : "")+" />";
-	}
+    public static final String hasKey(String key, String value) {
+        return "<has-kv k=\""+key+"\" "+(value != null && !value.isEmpty() ? "v=\""+value+"\"" : "")+" />";
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/ProjectionPatterns.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/ProjectionPatterns.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/ProjectionPatterns.java	(revision 30723)
@@ -9,49 +9,49 @@
 public class ProjectionPatterns {
 
-	private final Pattern xPattern;
-	private final Pattern yPattern;
-	private final Projection projection;
-	
-	public ProjectionPatterns(Pattern xPattern, Pattern yPattern, Projection projection) {
-		this.xPattern = xPattern;
-		this.yPattern = yPattern;
-		this.projection = projection;
-		OdConstants.PROJECTIONS.add(this);
-	}
+    private final Pattern xPattern;
+    private final Pattern yPattern;
+    private final Projection projection;
+    
+    public ProjectionPatterns(Pattern xPattern, Pattern yPattern, Projection projection) {
+        this.xPattern = xPattern;
+        this.yPattern = yPattern;
+        this.projection = projection;
+        OdConstants.PROJECTIONS.add(this);
+    }
 
-	public ProjectionPatterns(Pattern xPattern, Pattern yPattern) {
-		this(xPattern, yPattern, null);
-	}
+    public ProjectionPatterns(Pattern xPattern, Pattern yPattern) {
+        this(xPattern, yPattern, null);
+    }
 
-	public ProjectionPatterns(String proj, Projection projection) {
-		this(getCoordinatePattern(OdConstants.X_STRING, proj), getCoordinatePattern(OdConstants.Y_STRING, proj), projection);
-	}
+    public ProjectionPatterns(String proj, Projection projection) {
+        this(getCoordinatePattern(OdConstants.X_STRING, proj), getCoordinatePattern(OdConstants.Y_STRING, proj), projection);
+    }
 
-	public ProjectionPatterns(String proj) {
-		this(getCoordinatePattern(OdConstants.X_STRING, proj), getCoordinatePattern(OdConstants.Y_STRING, proj), null);
-	}
-	
-	public final Pattern getXPattern() {
-		return xPattern;
-	}
-	
-	public final Pattern getYPattern() {
-		return yPattern;
-	}
+    public ProjectionPatterns(String proj) {
+        this(getCoordinatePattern(OdConstants.X_STRING, proj), getCoordinatePattern(OdConstants.Y_STRING, proj), null);
+    }
+    
+    public final Pattern getXPattern() {
+        return xPattern;
+    }
+    
+    public final Pattern getYPattern() {
+        return yPattern;
+    }
 
-	public Projection getProjection(String xFieldName, String yFieldName) {
-		return getProjection();
-	}
+    public Projection getProjection(String xFieldName, String yFieldName) {
+        return getProjection();
+    }
 
-	public final Projection getProjection() {
-		return projection;
-	}
+    public final Projection getProjection() {
+        return projection;
+    }
 
-	public static final Pattern getCoordinatePattern(String coor, String proj) {
-		if (proj != null && !proj.isEmpty()) {
-			return Pattern.compile("(?:.*(?:"+coor+").*(?:"+proj+").*)|(?:.*("+proj+").*(?:"+coor+").*)", Pattern.CASE_INSENSITIVE);
-		} else {
-			return Pattern.compile(coor, Pattern.CASE_INSENSITIVE);
-		}
+    public static final Pattern getCoordinatePattern(String coor, String proj) {
+        if (proj != null && !proj.isEmpty()) {
+            return Pattern.compile("(?:.*(?:"+coor+").*(?:"+proj+").*)|(?:.*("+proj+").*(?:"+coor+").*)", Pattern.CASE_INSENSITIVE);
+        } else {
+            return Pattern.compile(coor, Pattern.CASE_INSENSITIVE);
+        }
     }
 
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/XmlImporter.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/XmlImporter.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/XmlImporter.java	(revision 30723)
@@ -21,28 +21,28 @@
             OdConstants.XML_EXT, OdConstants.XML_EXT, tr("OpenData XML files") + " (*."+OdConstants.XML_EXT+")");
 
-	public XmlImporter() {
-		super(XML_FILE_FILTER);
-	}
-	
-	@Override
-	public boolean acceptFile(File pathname) {
-		if (super.acceptFile(pathname)) {
-			for (URL schemaURL : NeptuneReader.getSchemas()) {
-				if (NeptuneReader.acceptsXmlNeptuneFile(pathname, schemaURL)) {
-					return true;
-				}
-			}
-		}
-		return false;
-	}
+    public XmlImporter() {
+        super(XML_FILE_FILTER);
+    }
+    
+    @Override
+    public boolean acceptFile(File pathname) {
+        if (super.acceptFile(pathname)) {
+            for (URL schemaURL : NeptuneReader.getSchemas()) {
+                if (NeptuneReader.acceptsXmlNeptuneFile(pathname, schemaURL)) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
 
-	@Override
-	protected DataSet parseDataSet(InputStream in, ProgressMonitor instance)
-			throws IllegalDataException {
-		try {
-			return NeptuneReader.parseDataSet(in, handler, instance);
-		} catch (JAXBException e) {
-			throw new IllegalDataException(e);
-		}
-	}
+    @Override
+    protected DataSet parseDataSet(InputStream in, ProgressMonitor instance)
+            throws IllegalDataException {
+        try {
+            return NeptuneReader.parseDataSet(in, handler, instance);
+        } catch (JAXBException e) {
+            throw new IllegalDataException(e);
+        }
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/ArchiveHandler.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/ArchiveHandler.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/ArchiveHandler.java	(revision 30723)
@@ -6,8 +6,8 @@
 public interface ArchiveHandler {
 
-	public void notifyTempFileWritten(File file);
+    public void notifyTempFileWritten(File file);
 
-	public boolean skipXsdValidation();
+    public boolean skipXsdValidation();
 
-	public void setSkipXsdValidation(boolean skip);
+    public void setSkipXsdValidation(boolean skip);
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/CandidateChooser.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/CandidateChooser.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/CandidateChooser.java	(revision 30723)
@@ -29,29 +29,29 @@
     private final JComboBox<File> fileCombo;
 
-	public CandidateChooser(Component parent, List<File> candidates) {
-		this(parent, tr("File to load"), new String[] {tr("OK"), tr("Cancel")}, candidates);
-	}
-	
-	private class Renderer extends DefaultListCellRenderer {
+    public CandidateChooser(Component parent, List<File> candidates) {
+        this(parent, tr("File to load"), new String[] {tr("OK"), tr("Cancel")}, candidates);
+    }
+    
+    private class Renderer extends DefaultListCellRenderer {
 
-		@Override
-		public Component getListCellRendererComponent(JList<?> list, Object value,
-				int index, boolean isSelected, boolean cellHasFocus) {
-			super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
-			if (value instanceof File) {
-				setText(((File)value).getName());
-			}
-			return this;
-		}
-	}
-	
-	protected CandidateChooser(Component parent, String title, String[] buttonTexts, List<File> candidates) {
-		super(parent, title, buttonTexts);
-		this.fileCombo = new JComboBox<>(candidates.toArray(new File[0]));
-		this.fileCombo.setRenderer(new Renderer());
-		addGui(candidates);
-	}
-	
-	public void addGui(List<File> candidates) {
+        @Override
+        public Component getListCellRendererComponent(JList<?> list, Object value,
+                int index, boolean isSelected, boolean cellHasFocus) {
+            super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
+            if (value instanceof File) {
+                setText(((File)value).getName());
+            }
+            return this;
+        }
+    }
+    
+    protected CandidateChooser(Component parent, String title, String[] buttonTexts, List<File> candidates) {
+        super(parent, title, buttonTexts);
+        this.fileCombo = new JComboBox<>(candidates.toArray(new File[0]));
+        this.fileCombo.setRenderer(new Renderer());
+        addGui(candidates);
+    }
+    
+    public void addGui(List<File> candidates) {
         projPanel.setBorder(BorderFactory.createEmptyBorder( 0, 0, 0, 0 ));
         projPanel.setLayout(new GridBagLayout());
@@ -59,24 +59,24 @@
         projPanel.add(GBC.glue(5,0), GBC.std().fill(GBC.HORIZONTAL));
         /*for (File file : candidates) {
-        	JCheckBox cbox = new JCheckBox(file.getName());
-        	checkBoxes.put(cbox, file);
-        	projPanel.add(cbox, GBC.eop().fill(GBC.HORIZONTAL).insets(0,5,5,5));
+            JCheckBox cbox = new JCheckBox(file.getName());
+            checkBoxes.put(cbox, file);
+            projPanel.add(cbox, GBC.eop().fill(GBC.HORIZONTAL).insets(0,5,5,5));
         }*/
         projPanel.add(fileCombo, GBC.eop().fill(GBC.HORIZONTAL).insets(0,5,5,5));
         setContent(projPanel);
-	}
-	
-	/*public List<File> getSelectedFiles() {
-		List<File> result = new ArrayList<File>();
-		for (JCheckBox cbox : checkBoxes.keySet()) {
-			if (cbox.isSelected()) {
-				result.add(checkBoxes.get(cbox));
-			}
-		}
-		return result;
-	}*/
-	
-	public File getSelectedFile() {
-		return (File) fileCombo.getSelectedItem();
-	}
+    }
+    
+    /*public List<File> getSelectedFiles() {
+        List<File> result = new ArrayList<File>();
+        for (JCheckBox cbox : checkBoxes.keySet()) {
+            if (cbox.isSelected()) {
+                result.add(checkBoxes.get(cbox));
+            }
+        }
+        return result;
+    }*/
+    
+    public File getSelectedFile() {
+        return (File) fileCombo.getSelectedItem();
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/DefaultArchiveHandler.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/DefaultArchiveHandler.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/DefaultArchiveHandler.java	(revision 30723)
@@ -6,19 +6,19 @@
 public class DefaultArchiveHandler implements ArchiveHandler {
 
-	private boolean skipXsdValidation = false;
-	
-	@Override
-	public final void setSkipXsdValidation(boolean skip) {
-		skipXsdValidation = skip;
-	}
-	
-	@Override
-	public boolean skipXsdValidation() {
-		return skipXsdValidation;
-	}
-	
-	@Override
-	public void notifyTempFileWritten(File file) {
-		// Do nothing, let subclass override this method if they need it
-	}
+    private boolean skipXsdValidation = false;
+    
+    @Override
+    public final void setSkipXsdValidation(boolean skip) {
+        skipXsdValidation = skip;
+    }
+    
+    @Override
+    public boolean skipXsdValidation() {
+        return skipXsdValidation;
+    }
+    
+    @Override
+    public void notifyTempFileWritten(File file) {
+        // Do nothing, let subclass override this method if they need it
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/SevenZipImporter.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/SevenZipImporter.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/SevenZipImporter.java	(revision 30723)
@@ -18,16 +18,16 @@
             OdConstants.SEVENZIP_EXT, OdConstants.SEVENZIP_EXT, tr("7Zip Files") + " (*."+OdConstants.SEVENZIP_EXT+")");
 
-	public SevenZipImporter() {
-		super(SEVENZIP_FILE_FILTER);
-	}
+    public SevenZipImporter() {
+        super(SEVENZIP_FILE_FILTER);
+    }
 
-	@Override
-	protected DataSet parseDataSet(InputStream in, ProgressMonitor instance)
-			throws IllegalDataException {
-		try {
-			return SevenZipReader.parseDataSet(in, handler, instance, true);
-		} catch (Exception e) {
-			throw new IllegalDataException(e);
-		}
-	}
+    @Override
+    protected DataSet parseDataSet(InputStream in, ProgressMonitor instance)
+            throws IllegalDataException {
+        try {
+            return SevenZipReader.parseDataSet(in, handler, instance, true);
+        } catch (Exception e) {
+            throw new IllegalDataException(e);
+        }
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/ZipImporter.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/ZipImporter.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/ZipImporter.java	(revision 30723)
@@ -19,17 +19,17 @@
             OdConstants.ZIP_EXT, OdConstants.ZIP_EXT, tr("Zip Files") + " (*."+OdConstants.ZIP_EXT+")");
 
-	public ZipImporter() {
-		super(ZIP_FILE_FILTER);
-	}
+    public ZipImporter() {
+        super(ZIP_FILE_FILTER);
+    }
 
-	@Override
-	protected DataSet parseDataSet(InputStream in, ProgressMonitor instance)
-			throws IllegalDataException {
-		try {
-			return ZipReader.parseDataSet(in, handler, instance, true);
-		} catch (Exception e) {
-			throw new IllegalDataException(e);
-		}
-	}
+    @Override
+    protected DataSet parseDataSet(InputStream in, ProgressMonitor instance)
+            throws IllegalDataException {
+        try {
+            return ZipReader.parseDataSet(in, handler, instance, true);
+        } catch (Exception e) {
+            throw new IllegalDataException(e);
+        }
+    }
 
     @Override
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/ZipReader.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/ZipReader.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/ZipReader.java	(revision 30723)
@@ -25,8 +25,8 @@
 public class ZipReader extends ArchiveReader {
 
-	private final ZipInputStream zis;
-	
-	private ZipEntry entry;
-	
+    private final ZipInputStream zis;
+    
+    private ZipEntry entry;
+    
     public ZipReader(InputStream in, AbstractDataSetHandler handler, boolean promptUser) {
         super(handler, handler != null ? handler.getArchiveHandler() : null, promptUser);
@@ -34,8 +34,8 @@
     }
 
-	public static DataSet parseDataSet(InputStream in, AbstractDataSetHandler handler, ProgressMonitor instance, boolean promptUser) 
-	        throws IOException, XMLStreamException, FactoryConfigurationError, JAXBException {
-		return new ZipReader(in, handler, promptUser).parseDoc(instance);
-	}
+    public static DataSet parseDataSet(InputStream in, AbstractDataSetHandler handler, ProgressMonitor instance, boolean promptUser) 
+            throws IOException, XMLStreamException, FactoryConfigurationError, JAXBException {
+        return new ZipReader(in, handler, promptUser).parseDoc(instance);
+    }
 
     public static Map<File, DataSet> parseDataSets(InputStream in, AbstractDataSetHandler handler, ProgressMonitor instance, boolean promptUser) 
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/AbstractMapInfoReader.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/AbstractMapInfoReader.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/AbstractMapInfoReader.java	(revision 30723)
@@ -17,81 +17,81 @@
 public abstract class AbstractMapInfoReader extends AbstractReader {
 
-	protected static final String VERSION_1 = "1";
-	protected static final String VERSION_2 = "2";
-	protected static final String VERSION_300 = "300";
-	protected static final String VERSION_450 = "450";
+    protected static final String VERSION_1 = "1";
+    protected static final String VERSION_2 = "2";
+    protected static final String VERSION_300 = "300";
+    protected static final String VERSION_450 = "450";
 
-	protected static final String CHARSET_WINDOWS_LATIN    = "WindowsLatin1";
+    protected static final String CHARSET_WINDOWS_LATIN    = "WindowsLatin1";
     protected static final String CHARSET_WINDOWS_CYRILLIC = "WindowsCyrillic";
-	protected static final String CHARSET_NEUTRAL = "Neutral";
-	protected static final String CHARSET_MAC     = "MacRoman";
-	
-	protected BufferedReader headerReader;
+    protected static final String CHARSET_NEUTRAL = "Neutral";
+    protected static final String CHARSET_MAC     = "MacRoman";
+    
+    protected BufferedReader headerReader;
 
-	protected String line;
-	protected int lineNum = 0;
+    protected String line;
+    protected int lineNum = 0;
 
-	protected String version;
+    protected String version;
 
-	// Columns
-	protected int numcolumns = -1;
-	protected List<String> columns;
+    // Columns
+    protected int numcolumns = -1;
+    protected List<String> columns;
 
-	protected final File getDataFile(File headerFile, String extension) {
-		String filename = headerFile.getName().substring(0, headerFile.getName().lastIndexOf('.'));
-		File dataFile = new File(headerFile.getParent() + File.separator + filename + extension.toUpperCase());
-		if (!dataFile.exists()) {
-			dataFile = new File(headerFile.getParent() + File.separator + filename + extension.toLowerCase());
-		}
-		return dataFile;
-	}
-	
-	protected final BufferedReader getDataReader(File headerFile, String extension, Charset charset) throws IOException {
-		File dataFile = getDataFile(headerFile, extension);
-		return dataFile.exists() ? Files.newBufferedReader(dataFile.toPath(), charset) : null;
-	}
+    protected final File getDataFile(File headerFile, String extension) {
+        String filename = headerFile.getName().substring(0, headerFile.getName().lastIndexOf('.'));
+        File dataFile = new File(headerFile.getParent() + File.separator + filename + extension.toUpperCase());
+        if (!dataFile.exists()) {
+            dataFile = new File(headerFile.getParent() + File.separator + filename + extension.toLowerCase());
+        }
+        return dataFile;
+    }
+    
+    protected final BufferedReader getDataReader(File headerFile, String extension, Charset charset) throws IOException {
+        File dataFile = getDataFile(headerFile, extension);
+        return dataFile.exists() ? Files.newBufferedReader(dataFile.toPath(), charset) : null;
+    }
 
-	protected Charset parseCharset(String[] words) throws IllegalCharsetNameException, UnsupportedCharsetException {
-		return parseCharset(words, 1);
-	}
+    protected Charset parseCharset(String[] words) throws IllegalCharsetNameException, UnsupportedCharsetException {
+        return parseCharset(words, 1);
+    }
 
-	protected Charset parseCharset(String[] words, int index) throws IllegalCharsetNameException, UnsupportedCharsetException {
-		words[index] = words[index].replace("\"", "");
-		if (words[index].equalsIgnoreCase(CHARSET_WINDOWS_LATIN)) {
-			return Charset.forName(OdConstants.CP1252);
+    protected Charset parseCharset(String[] words, int index) throws IllegalCharsetNameException, UnsupportedCharsetException {
+        words[index] = words[index].replace("\"", "");
+        if (words[index].equalsIgnoreCase(CHARSET_WINDOWS_LATIN)) {
+            return Charset.forName(OdConstants.CP1252);
         } else if (words[index].equalsIgnoreCase(CHARSET_WINDOWS_CYRILLIC)) {
             return Charset.forName(OdConstants.CP1251);
-		} else if (words[index].equalsIgnoreCase(CHARSET_NEUTRAL)) {
-			return Charset.forName(OdConstants.ISO8859_15);
-		} else if (words[index].equalsIgnoreCase(CHARSET_MAC)) {
-			return Charset.forName(OdConstants.MAC_ROMAN);
-		} else {
-			System.err.println("Line "+lineNum+". Unknown charset detected: "+line);
-			return Charset.forName(words[index]);
-		}
-	}
+        } else if (words[index].equalsIgnoreCase(CHARSET_NEUTRAL)) {
+            return Charset.forName(OdConstants.ISO8859_15);
+        } else if (words[index].equalsIgnoreCase(CHARSET_MAC)) {
+            return Charset.forName(OdConstants.MAC_ROMAN);
+        } else {
+            System.err.println("Line "+lineNum+". Unknown charset detected: "+line);
+            return Charset.forName(words[index]);
+        }
+    }
 
-	protected void parseVersion(String[] words) {
-		version = words[1];
-	}
-	
-	protected void parseColumns(String[] words) {
-		columns = new ArrayList<>();
-		numcolumns = Integer.parseInt(words[1]);
-	}
+    protected void parseVersion(String[] words) {
+        version = words[1];
+    }
+    
+    protected void parseColumns(String[] words) {
+        columns = new ArrayList<>();
+        numcolumns = Integer.parseInt(words[1]);
+    }
 
-	protected final void parseHeader() throws IOException {
-		while ((line = headerReader.readLine()) != null) {
-			lineNum++;
-			while (line.contains("  ")) {
-				line = line.replace("  ", " ");
-			}
-			String [] words = line.isEmpty() ? null : line.trim().split(" ");
-			if (words != null && words.length > 0) {
-				parseHeaderLine(words);
-			}
-		}
-	}
-	
-	protected abstract void parseHeaderLine(String[] words) throws IOException;
+    protected final void parseHeader() throws IOException {
+        while ((line = headerReader.readLine()) != null) {
+            lineNum++;
+            while (line.contains("  ")) {
+                line = line.replace("  ", " ");
+            }
+            String [] words = line.isEmpty() ? null : line.trim().split(" ");
+            if (words != null && words.length > 0) {
+                parseHeaderLine(words);
+            }
+        }
+    }
+    
+    protected abstract void parseHeaderLine(String[] words) throws IOException;
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/DefaultGeographicHandler.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/DefaultGeographicHandler.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/DefaultGeographicHandler.java	(revision 30723)
@@ -9,44 +9,44 @@
 public abstract class DefaultGeographicHandler implements GeographicHandler {
 
-	private boolean useNodeMap = true;
-	private boolean checkNodeProximity = false;
-	private boolean preferMultipolygonToSimpleWay = false;
+    private boolean useNodeMap = true;
+    private boolean checkNodeProximity = false;
+    private boolean preferMultipolygonToSimpleWay = false;
 
-	@Override
-	public boolean preferMultipolygonToSimpleWay() {
-		return preferMultipolygonToSimpleWay;
-	}
+    @Override
+    public boolean preferMultipolygonToSimpleWay() {
+        return preferMultipolygonToSimpleWay;
+    }
 
-	@Override
-	public void setPreferMultipolygonToSimpleWay(boolean prefer) {
-		preferMultipolygonToSimpleWay = prefer;
-	}
+    @Override
+    public void setPreferMultipolygonToSimpleWay(boolean prefer) {
+        preferMultipolygonToSimpleWay = prefer;
+    }
 
-	@Override
-	public boolean checkNodeProximity() {
-		return checkNodeProximity;
-	}
+    @Override
+    public boolean checkNodeProximity() {
+        return checkNodeProximity;
+    }
 
-	@Override
-	public void setCheckNodeProximity(boolean check) {
-		checkNodeProximity = check;
-	}
+    @Override
+    public void setCheckNodeProximity(boolean check) {
+        checkNodeProximity = check;
+    }
 
-	@Override
-	public void setUseNodeMap(boolean use) {
-		useNodeMap = use;
-	}
+    @Override
+    public void setUseNodeMap(boolean use) {
+        useNodeMap = use;
+    }
 
-	@Override
-	public boolean useNodeMap() {
-		return useNodeMap;
-	}
+    @Override
+    public boolean useNodeMap() {
+        return useNodeMap;
+    }
 
-	@Override
-	public CoordinateReferenceSystem getCrsFor(String crsName) throws NoSuchAuthorityCodeException, FactoryException {
-		if (crsName.equalsIgnoreCase("GCS_ETRS_1989")) {
-			return CRS.decode("EPSG:4258");
-		}
-		return null;
-	}
+    @Override
+    public CoordinateReferenceSystem getCrsFor(String crsName) throws NoSuchAuthorityCodeException, FactoryException {
+        if (crsName.equalsIgnoreCase("GCS_ETRS_1989")) {
+            return CRS.decode("EPSG:4258");
+        }
+        return null;
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/DefaultGmlHandler.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/DefaultGmlHandler.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/DefaultGmlHandler.java	(revision 30723)
@@ -9,8 +9,8 @@
 public class DefaultGmlHandler extends DefaultGeographicHandler implements GmlHandler {
 
-	@Override
-	public MathTransform findMathTransform(CoordinateReferenceSystem sourceCRS, CoordinateReferenceSystem targetCRS, boolean lenient)
-			throws FactoryException {
-		return CRS.findMathTransform(sourceCRS, targetCRS, lenient);
-	}
+    @Override
+    public MathTransform findMathTransform(CoordinateReferenceSystem sourceCRS, CoordinateReferenceSystem targetCRS, boolean lenient)
+            throws FactoryException {
+        return CRS.findMathTransform(sourceCRS, targetCRS, lenient);
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/DefaultShpHandler.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/DefaultShpHandler.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/DefaultShpHandler.java	(revision 30723)
@@ -37,101 +37,101 @@
 public class DefaultShpHandler extends DefaultGeographicHandler implements ShpHandler {
 
-	private static final List<Pair<org.opengis.referencing.datum.Ellipsoid, Ellipsoid>> 
-		ellipsoids = new ArrayList<>();
-	static {
-		ellipsoids.add(new Pair<org.opengis.referencing.datum.Ellipsoid, Ellipsoid>(DefaultEllipsoid.GRS80, Ellipsoid.GRS80));
-		ellipsoids.add(new Pair<org.opengis.referencing.datum.Ellipsoid, Ellipsoid>(DefaultEllipsoid.WGS84, Ellipsoid.WGS84));
-	}
-	
-	protected static final Double get(ParameterValueGroup values, ParameterDescriptor<?> desc) {
-		return (Double) values.parameter(desc.getName().getCode()).getValue();
-	}
-	
-	private static final boolean equals(Double a, Double b) {
-		boolean res = Math.abs(a - b) <= Main.pref.getDouble(OdConstants.PREF_CRS_COMPARISON_TOLERANCE, OdConstants.DEFAULT_CRS_COMPARISON_TOLERANCE);
-		if (Main.pref.getBoolean(OdConstants.PREF_CRS_COMPARISON_DEBUG, false)) {
-			Main.debug("Comparing "+a+" and "+b+" -> "+res);
-		}
-		return res; 
-	}
-	
-	private Charset dbfCharset = null;
+    private static final List<Pair<org.opengis.referencing.datum.Ellipsoid, Ellipsoid>> 
+        ellipsoids = new ArrayList<>();
+    static {
+        ellipsoids.add(new Pair<org.opengis.referencing.datum.Ellipsoid, Ellipsoid>(DefaultEllipsoid.GRS80, Ellipsoid.GRS80));
+        ellipsoids.add(new Pair<org.opengis.referencing.datum.Ellipsoid, Ellipsoid>(DefaultEllipsoid.WGS84, Ellipsoid.WGS84));
+    }
+    
+    protected static final Double get(ParameterValueGroup values, ParameterDescriptor<?> desc) {
+        return (Double) values.parameter(desc.getName().getCode()).getValue();
+    }
+    
+    private static final boolean equals(Double a, Double b) {
+        boolean res = Math.abs(a - b) <= Main.pref.getDouble(OdConstants.PREF_CRS_COMPARISON_TOLERANCE, OdConstants.DEFAULT_CRS_COMPARISON_TOLERANCE);
+        if (Main.pref.getBoolean(OdConstants.PREF_CRS_COMPARISON_DEBUG, false)) {
+            Main.debug("Comparing "+a+" and "+b+" -> "+res);
+        }
+        return res; 
+    }
+    
+    private Charset dbfCharset = null;
 
-	@Override
-	public MathTransform findMathTransform(CoordinateReferenceSystem sourceCRS, CoordinateReferenceSystem targetCRS, boolean lenient)
-			throws FactoryException {
-		if (getCrsFor(sourceCRS.getName().getCode()) != null) {
-			return CRS.findMathTransform(getCrsFor(sourceCRS.getName().getCode()), targetCRS, lenient);
-		} else if (sourceCRS instanceof AbstractDerivedCRS && sourceCRS.getName().getCode().equalsIgnoreCase("Lambert_Conformal_Conic")) {
-			List<MathTransform> result = new ArrayList<>();
-			AbstractDerivedCRS crs = (AbstractDerivedCRS) sourceCRS;
-			MathTransform transform = crs.getConversionFromBase().getMathTransform();
-			if (transform instanceof LambertConformal && crs.getDatum() instanceof GeodeticDatum) {
-				LambertConformal lambert = (LambertConformal) transform;
-				GeodeticDatum geo = (GeodeticDatum) crs.getDatum();
-				for (ProjectionChoice choice : ProjectionPreference.getProjectionChoices()) {
-					Projection p = choice.getProjection();
-					if (p instanceof AbstractProjection) {
-						AbstractProjection ap = (AbstractProjection) p;
-						if (ap.getProj() instanceof LambertConformalConic) {
-							for (Pair<org.opengis.referencing.datum.Ellipsoid, Ellipsoid> pair : ellipsoids) {
-								if (pair.a.equals(geo.getEllipsoid()) && pair.b.equals(ap.getEllipsoid())) {
-									boolean ok = true;
-									ParameterValueGroup values = lambert.getParameterValues();
-									Parameters params = ((LambertConformalConic) ap.getProj()).getParameters();
-									
-									ok = ok ? equals(get(values, AbstractProvider.LATITUDE_OF_ORIGIN), params.latitudeOrigin) : ok;
-									ok = ok ? equals(get(values, AbstractProvider.CENTRAL_MERIDIAN), ap.getCentralMeridian()) : ok;
-									ok = ok ? equals(get(values, AbstractProvider.SCALE_FACTOR), ap.getScaleFactor()) : ok;
-									ok = ok ? equals(get(values, AbstractProvider.FALSE_EASTING), ap.getFalseEasting()) : ok;
-									ok = ok ? equals(get(values, AbstractProvider.FALSE_NORTHING), ap.getFalseNorthing()) : ok;
-									
-									if (lambert instanceof LambertConformal2SP && params instanceof Parameters2SP) {
-										Parameters2SP param = (Parameters2SP) params;
-										ok = ok ? equals(Math.min(get(values, AbstractProvider.STANDARD_PARALLEL_1),get(values, AbstractProvider.STANDARD_PARALLEL_2)), 
-														 Math.min(param.standardParallel1, param.standardParallel2)) : ok;
-										ok = ok ? equals(Math.max(get(values, AbstractProvider.STANDARD_PARALLEL_1), get(values, AbstractProvider.STANDARD_PARALLEL_2)),
-												         Math.max(param.standardParallel1, param.standardParallel2)) : ok;
-										
-									} else if (!(lambert instanceof LambertConformal1SP && params instanceof Parameters1SP)) {
-										ok = false;
-									}
+    @Override
+    public MathTransform findMathTransform(CoordinateReferenceSystem sourceCRS, CoordinateReferenceSystem targetCRS, boolean lenient)
+            throws FactoryException {
+        if (getCrsFor(sourceCRS.getName().getCode()) != null) {
+            return CRS.findMathTransform(getCrsFor(sourceCRS.getName().getCode()), targetCRS, lenient);
+        } else if (sourceCRS instanceof AbstractDerivedCRS && sourceCRS.getName().getCode().equalsIgnoreCase("Lambert_Conformal_Conic")) {
+            List<MathTransform> result = new ArrayList<>();
+            AbstractDerivedCRS crs = (AbstractDerivedCRS) sourceCRS;
+            MathTransform transform = crs.getConversionFromBase().getMathTransform();
+            if (transform instanceof LambertConformal && crs.getDatum() instanceof GeodeticDatum) {
+                LambertConformal lambert = (LambertConformal) transform;
+                GeodeticDatum geo = (GeodeticDatum) crs.getDatum();
+                for (ProjectionChoice choice : ProjectionPreference.getProjectionChoices()) {
+                    Projection p = choice.getProjection();
+                    if (p instanceof AbstractProjection) {
+                        AbstractProjection ap = (AbstractProjection) p;
+                        if (ap.getProj() instanceof LambertConformalConic) {
+                            for (Pair<org.opengis.referencing.datum.Ellipsoid, Ellipsoid> pair : ellipsoids) {
+                                if (pair.a.equals(geo.getEllipsoid()) && pair.b.equals(ap.getEllipsoid())) {
+                                    boolean ok = true;
+                                    ParameterValueGroup values = lambert.getParameterValues();
+                                    Parameters params = ((LambertConformalConic) ap.getProj()).getParameters();
+                                    
+                                    ok = ok ? equals(get(values, AbstractProvider.LATITUDE_OF_ORIGIN), params.latitudeOrigin) : ok;
+                                    ok = ok ? equals(get(values, AbstractProvider.CENTRAL_MERIDIAN), ap.getCentralMeridian()) : ok;
+                                    ok = ok ? equals(get(values, AbstractProvider.SCALE_FACTOR), ap.getScaleFactor()) : ok;
+                                    ok = ok ? equals(get(values, AbstractProvider.FALSE_EASTING), ap.getFalseEasting()) : ok;
+                                    ok = ok ? equals(get(values, AbstractProvider.FALSE_NORTHING), ap.getFalseNorthing()) : ok;
+                                    
+                                    if (lambert instanceof LambertConformal2SP && params instanceof Parameters2SP) {
+                                        Parameters2SP param = (Parameters2SP) params;
+                                        ok = ok ? equals(Math.min(get(values, AbstractProvider.STANDARD_PARALLEL_1),get(values, AbstractProvider.STANDARD_PARALLEL_2)), 
+                                                         Math.min(param.standardParallel1, param.standardParallel2)) : ok;
+                                        ok = ok ? equals(Math.max(get(values, AbstractProvider.STANDARD_PARALLEL_1), get(values, AbstractProvider.STANDARD_PARALLEL_2)),
+                                                         Math.max(param.standardParallel1, param.standardParallel2)) : ok;
+                                        
+                                    } else if (!(lambert instanceof LambertConformal1SP && params instanceof Parameters1SP)) {
+                                        ok = false;
+                                    }
 
-									if (ok) {
-										try {
-											result.add(CRS.findMathTransform(CRS.decode(p.toCode()), targetCRS, lenient));
-										} catch (FactoryException e) {
-											System.err.println(e.getMessage());
-										}
-									}
-								}
-							}
-						}
-					}
-				}
-			}
-			if (!result.isEmpty()) {
-				if (result.size() > 1) {
-					System.err.println("Found multiple projections !"); // TODO: something
-				}
-				return result.get(0);
-			}
-		}
-		return null;
-	}
+                                    if (ok) {
+                                        try {
+                                            result.add(CRS.findMathTransform(CRS.decode(p.toCode()), targetCRS, lenient));
+                                        } catch (FactoryException e) {
+                                            System.err.println(e.getMessage());
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            if (!result.isEmpty()) {
+                if (result.size() > 1) {
+                    System.err.println("Found multiple projections !"); // TODO: something
+                }
+                return result.get(0);
+            }
+        }
+        return null;
+    }
 
-	@Override
-	public void notifyFeatureParsed(Object feature, DataSet result, Set<OsmPrimitive> featurePrimitives) {
-		// To be overriden by modules handlers
-	}
+    @Override
+    public void notifyFeatureParsed(Object feature, DataSet result, Set<OsmPrimitive> featurePrimitives) {
+        // To be overriden by modules handlers
+    }
 
-	@Override
-	public void setDbfCharset(Charset charset) {
-		dbfCharset = charset;
-	}
-	
-	@Override
-	public Charset getDbfCharset() {
-		return dbfCharset;
-	}
+    @Override
+    public void setDbfCharset(Charset charset) {
+        dbfCharset = charset;
+    }
+    
+    @Override
+    public Charset getDbfCharset() {
+        return dbfCharset;
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/GeoCrsException.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/GeoCrsException.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/GeoCrsException.java	(revision 30723)
@@ -4,18 +4,18 @@
 public class GeoCrsException extends Exception {
 
-	public GeoCrsException() {
-		super();
-	}
+    public GeoCrsException() {
+        super();
+    }
 
-	public GeoCrsException(String message, Throwable cause) {
-		super(message, cause);
-	}
+    public GeoCrsException(String message, Throwable cause) {
+        super(message, cause);
+    }
 
-	public GeoCrsException(String message) {
-		super(message);
-	}
+    public GeoCrsException(String message) {
+        super(message);
+    }
 
-	public GeoCrsException(Throwable cause) {
-		super(cause);
-	}
+    public GeoCrsException(Throwable cause) {
+        super(cause);
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/GeoMathTransformException.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/GeoMathTransformException.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/GeoMathTransformException.java	(revision 30723)
@@ -4,18 +4,18 @@
 public class GeoMathTransformException extends Exception {
 
-	public GeoMathTransformException() {
-		super();
-	}
+    public GeoMathTransformException() {
+        super();
+    }
 
-	public GeoMathTransformException(String message, Throwable cause) {
-		super(message, cause);
-	}
+    public GeoMathTransformException(String message, Throwable cause) {
+        super(message, cause);
+    }
 
-	public GeoMathTransformException(String message) {
-		super(message);
-	}
+    public GeoMathTransformException(String message) {
+        super(message);
+    }
 
-	public GeoMathTransformException(Throwable cause) {
-		super(cause);
-	}
+    public GeoMathTransformException(Throwable cause) {
+        super(cause);
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/GeographicHandler.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/GeographicHandler.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/GeographicHandler.java	(revision 30723)
@@ -8,19 +8,19 @@
 
 public interface GeographicHandler {
-	
-	public void setPreferMultipolygonToSimpleWay(boolean prefer);
+    
+    public void setPreferMultipolygonToSimpleWay(boolean prefer);
 
-	public boolean preferMultipolygonToSimpleWay();
+    public boolean preferMultipolygonToSimpleWay();
 
-	public void setCheckNodeProximity(boolean check);
-	
-	public boolean checkNodeProximity();
-	
-	public void setUseNodeMap(boolean use);
-	
-	public boolean useNodeMap();
-	
-	public CoordinateReferenceSystem getCrsFor(String crsName) throws NoSuchAuthorityCodeException, FactoryException;
+    public void setCheckNodeProximity(boolean check);
+    
+    public boolean checkNodeProximity();
+    
+    public void setUseNodeMap(boolean use);
+    
+    public boolean useNodeMap();
+    
+    public CoordinateReferenceSystem getCrsFor(String crsName) throws NoSuchAuthorityCodeException, FactoryException;
 
-	public MathTransform findMathTransform(CoordinateReferenceSystem sourceCRS, CoordinateReferenceSystem targetCRS, boolean lenient) throws FactoryException;
+    public MathTransform findMathTransform(CoordinateReferenceSystem sourceCRS, CoordinateReferenceSystem targetCRS, boolean lenient) throws FactoryException;
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/GeographicReader.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/GeographicReader.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/GeographicReader.java	(revision 30723)
@@ -54,66 +54,66 @@
 public abstract class GeographicReader extends AbstractReader {
 
-	protected static CoordinateReferenceSystem wgs84;
-	static {
-		try {
-			wgs84 = CRS.decode("EPSG:4326");
-		} catch (NoSuchAuthorityCodeException e) {
-			e.printStackTrace();
-		} catch (FactoryException e) {
-			e.printStackTrace();
-		}
-	}
-	
-	private final GeographicHandler handler;
-	private final GeographicHandler[] defaultHandlers;
-	
-	protected final Map<LatLon, Node> nodes;
-
-	protected CoordinateReferenceSystem crs;
-	protected MathTransform transform;
-
-	public GeographicReader(GeographicHandler handler, GeographicHandler[] defaultHandlers) {
-		this.nodes = new HashMap<>();
-		this.handler = handler;
-		this.defaultHandlers = defaultHandlers;
-	}
-	
-	protected Node getNode(Point p, LatLon key) {
-		Node n = nodes.get(key);
-		if (n == null && handler != null && handler.checkNodeProximity()) {
-			LatLon ll = new LatLon(p.getY(), p.getX());
-			for (Node node : nodes.values()) {
-				if (node.getCoor().equalsEpsilon(ll)) {
-					return node;
-				}
-			}
-		}
-		return n;
-	}
-
-	protected Node createOrGetNode(Point p) throws MismatchedDimensionException, TransformException {
-		return createOrGetNode(p, null);
-	}
-
-	protected Node createOrGetNode(Point p, String ele) throws MismatchedDimensionException, TransformException {
-		Point p2 = (Point) JTS.transform(p, transform);
-		LatLon key = new LatLon(p2.getY(), p2.getX());
-		Node n = getNode(p2, key);
-		if (n == null) {
-			n = new Node(key);
-			if (ele != null) {
-				n.put("ele", ele);
-			}
-			if (handler == null || handler.useNodeMap()) {
-				nodes.put(key, n);
-			}
-			ds.addPrimitive(n);
-		} else if (n.getDataSet() == null) {
-		    // handler may have removed the node from DataSet (see Paris public light handler for example)
-		    ds.addPrimitive(n);
-		}
-		return n;
-	}
-	
+    protected static CoordinateReferenceSystem wgs84;
+    static {
+        try {
+            wgs84 = CRS.decode("EPSG:4326");
+        } catch (NoSuchAuthorityCodeException e) {
+            e.printStackTrace();
+        } catch (FactoryException e) {
+            e.printStackTrace();
+        }
+    }
+    
+    private final GeographicHandler handler;
+    private final GeographicHandler[] defaultHandlers;
+    
+    protected final Map<LatLon, Node> nodes;
+
+    protected CoordinateReferenceSystem crs;
+    protected MathTransform transform;
+
+    public GeographicReader(GeographicHandler handler, GeographicHandler[] defaultHandlers) {
+        this.nodes = new HashMap<>();
+        this.handler = handler;
+        this.defaultHandlers = defaultHandlers;
+    }
+    
+    protected Node getNode(Point p, LatLon key) {
+        Node n = nodes.get(key);
+        if (n == null && handler != null && handler.checkNodeProximity()) {
+            LatLon ll = new LatLon(p.getY(), p.getX());
+            for (Node node : nodes.values()) {
+                if (node.getCoor().equalsEpsilon(ll)) {
+                    return node;
+                }
+            }
+        }
+        return n;
+    }
+
+    protected Node createOrGetNode(Point p) throws MismatchedDimensionException, TransformException {
+        return createOrGetNode(p, null);
+    }
+
+    protected Node createOrGetNode(Point p, String ele) throws MismatchedDimensionException, TransformException {
+        Point p2 = (Point) JTS.transform(p, transform);
+        LatLon key = new LatLon(p2.getY(), p2.getX());
+        Node n = getNode(p2, key);
+        if (n == null) {
+            n = new Node(key);
+            if (ele != null) {
+                n.put("ele", ele);
+            }
+            if (handler == null || handler.useNodeMap()) {
+                nodes.put(key, n);
+            }
+            ds.addPrimitive(n);
+        } else if (n.getDataSet() == null) {
+            // handler may have removed the node from DataSet (see Paris public light handler for example)
+            ds.addPrimitive(n);
+        }
+        return n;
+    }
+    
         protected Node createOrGetEmptyNode(Point p) throws MismatchedDimensionException, TransformException {
                 Point p2 = (Point) JTS.transform(p, transform);
@@ -136,37 +136,37 @@
         }
         
-	protected <T extends OsmPrimitive> T addOsmPrimitive(T p) {
-		ds.addPrimitive(p);
-		return p;
-	}
-
-	protected final Way createWay() {
-		return addOsmPrimitive(new Way());
-	}
-
-	protected final Way createWay(LineString ls) {
-		Way w = createWay();
-		if (ls != null) {
-			for (int i=0; i<ls.getNumPoints(); i++) {
-				try {
-					w.addNode(createOrGetNode(ls.getPointN(i)));
-				} catch (Exception e) {
-					System.err.println(e.getMessage());
-				}
-			}
-		}
-		return w;
-	}
-
-	protected final Relation createMultipolygon() {
-		Relation r = new Relation();
-		r.put("type", "multipolygon");
-		return addOsmPrimitive(r);
-	}
-
-	protected final void addWayToMp(Relation r, String role, Way w) {
-		r.addMember(new RelationMember(role, w));
-	}
-	
+    protected <T extends OsmPrimitive> T addOsmPrimitive(T p) {
+        ds.addPrimitive(p);
+        return p;
+    }
+
+    protected final Way createWay() {
+        return addOsmPrimitive(new Way());
+    }
+
+    protected final Way createWay(LineString ls) {
+        Way w = createWay();
+        if (ls != null) {
+            for (int i=0; i<ls.getNumPoints(); i++) {
+                try {
+                    w.addNode(createOrGetNode(ls.getPointN(i)));
+                } catch (Exception e) {
+                    System.err.println(e.getMessage());
+                }
+            }
+        }
+        return w;
+    }
+
+    protected final Relation createMultipolygon() {
+        Relation r = new Relation();
+        r.put("type", "multipolygon");
+        return addOsmPrimitive(r);
+    }
+
+    protected final void addWayToMp(Relation r, String role, Way w) {
+        r.addMember(new RelationMember(role, w));
+    }
+    
     /**
      * returns true if the user wants to cancel, false if they
@@ -174,161 +174,161 @@
      */
     protected static final boolean warnLenientMethod(final Component parent, final CoordinateReferenceSystem crs) {
-    	return new DialogPrompter<ExtendedDialog>() {
-			@Override
-			protected ExtendedDialog buildDialog() {
-		        final ExtendedDialog dlg = new ExtendedDialog(parent,
-		                tr("Cannot transform to WGS84"),
-		                new String[] {tr("Cancel"), tr("Continue")});
-		        dlg.setContent("<html>" +
-		                tr("JOSM was unable to find a strict mathematical transformation between ''{0}'' and WGS84.<br /><br />"+
-		                        "Do you want to try a <i>lenient</i> method, which will perform a non-precise transformation (<b>with location errors up to 1 km</b>) ?<br/><br/>"+
-		                        "If so, <b>do NOT upload</b> such data to OSM !", crs.getName())+
-		                "</html>");
-		        dlg.setButtonIcons(new Icon[] {
-		                ImageProvider.get("cancel"),
-		                ImageProvider.overlay(
-		                        ImageProvider.get("ok"),
-		                        new ImageIcon(ImageProvider.get("warning-small").getImage().getScaledInstance(10 , 10, Image.SCALE_SMOOTH)),
-		                        ImageProvider.OverlayPosition.SOUTHEAST)});
-		        dlg.setToolTipTexts(new String[] {
-		                tr("Cancel"),
-		                tr("Try lenient method")});
-		        dlg.setIcon(JOptionPane.WARNING_MESSAGE);
-		        dlg.setCancelButton(1);
-		        return dlg;
-			}
-		}.promptInEdt().getValue() != 2;
-    }
-    
-	private static final void compareDebug(CoordinateReferenceSystem crs1, CoordinateReferenceSystem crs2) {
-		Main.debug("-- COMPARING "+crs1.getName()+" WITH "+crs2.getName()+" --");
-		compareDebug("class", crs1.getClass(), crs2.getClass());
-		CoordinateSystem cs1 = crs1.getCoordinateSystem();
-		CoordinateSystem cs2 = crs2.getCoordinateSystem();
-		if (!compareDebug("cs", cs1, cs2)) {
-			Integer dim1 = cs1.getDimension();
-			Integer dim2 = cs2.getDimension();
-			if (compareDebug("cs.dim", dim1, dim2)) {
-				for (int i = 0; i<dim1; i++) {
-					compareDebug("cs.axis"+i, cs1.getAxis(i), cs1.getAxis(i));
-				}
-			}
-		}
-		if (crs1 instanceof AbstractSingleCRS) {
-			Datum datum1 = ((AbstractSingleCRS) crs1).getDatum();
-			Datum datum2 = ((AbstractSingleCRS) crs2).getDatum();
-			if (!compareDebug("datum", datum1, datum2)) {
-				AbstractIdentifiedObject adatum1 = (AbstractIdentifiedObject) datum1;
-				AbstractIdentifiedObject adatum2 = (AbstractIdentifiedObject) datum2;
-				compareDebug("datum.name1", adatum1.nameMatches(adatum2.getName().getCode()), adatum1.getName(), adatum2.getName());
-				compareDebug("datum.name2", adatum2.nameMatches(adatum1.getName().getCode()), adatum2.getName(), adatum1.getName());
-			}
-			if (crs1 instanceof AbstractDerivedCRS) {
-				AbstractDerivedCRS adcrs1 = (AbstractDerivedCRS) crs1;
-				AbstractDerivedCRS adcrs2 = (AbstractDerivedCRS) crs2;
-				compareDebug("baseCRS", adcrs1.getBaseCRS(), adcrs2.getBaseCRS());
-				compareDebug("conversionFromBase", adcrs1.getConversionFromBase(), adcrs2.getConversionFromBase());
-			}
-		}
-		Main.debug("-- COMPARING FINISHED --");
-	}
-	
-	private static final boolean compareDebug(String text, Object o1, Object o2) {
-		return compareDebug(text, o1.equals(o2), o1, o2);
-	}
-	
-	private static final boolean compareDebug(String text, IdentifiedObject o1, IdentifiedObject o2) {
-		return compareDebug(text, (AbstractIdentifiedObject)o1, (AbstractIdentifiedObject)o2);
-	}
-	
-	private static final boolean compareDebug(String text, AbstractIdentifiedObject o1, AbstractIdentifiedObject o2) {
-		return compareDebug(text, o1.equals(o2, false), o1, o2);
-	}
-
-	private static final boolean compareDebug(String text, boolean result, Object o1, Object o2) {
-	    Main.debug(text + ": " + result + "("+o1+", "+o2+")");
-		return result;
-	}
-	
-	protected void findMathTransform(Component parent, boolean findSimiliarCrs) throws FactoryException, UserCancelException, GeoMathTransformException {
-		try {
-			transform = CRS.findMathTransform(crs, wgs84);
-		} catch (OperationNotFoundException e) {
-			Main.info(crs.getName()+": "+e.getMessage()); // Bursa wolf parameters required.
-			
-			if (findSimiliarCrs) { 
-				List<CoordinateReferenceSystem> candidates = new ArrayList<>();
-				
-				// Find matching CRS with Bursa Wolf parameters in EPSG database
-				for (String code : CRS.getAuthorityFactory(false).getAuthorityCodes(ProjectedCRS.class)) {
-				    try {
-    					CoordinateReferenceSystem candidate = CRS.decode(code);
-    					if (candidate instanceof AbstractCRS && crs instanceof AbstractIdentifiedObject) {
-    						
-    						Hints.putSystemDefault(Hints.COMPARISON_TOLERANCE, 
-    								Main.pref.getDouble(OdConstants.PREF_CRS_COMPARISON_TOLERANCE, OdConstants.DEFAULT_CRS_COMPARISON_TOLERANCE));
-    						if (((AbstractCRS)candidate).equals((AbstractIdentifiedObject)crs, false)) {
-    							Main.info("Found a potential CRS: "+candidate.getName());
-    							candidates.add(candidate);
-    						} else if (Main.pref.getBoolean(OdConstants.PREF_CRS_COMPARISON_DEBUG, false)) {
-    							compareDebug(crs, candidate);
-    						}
-    						Hints.removeSystemDefault(Hints.COMPARISON_TOLERANCE);
-    					}
-				    } catch (FactoryException ex) {
-				        // Silently ignore exceptions
-				        //System.err.println("Warning: cannot decode "+code+". "+ex.getMessage());
-				    }
-				}
-				
-				if (candidates.size() > 1) {
-					Main.warn("Found several potential CRS: "+Arrays.toString(candidates.toArray()));
-					// TODO: ask user which one to use
-				}
-				
-				if (candidates.size() > 0) {
-					CoordinateReferenceSystem newCRS = candidates.get(0);
-					try {
-						transform = CRS.findMathTransform(newCRS, wgs84, false);
-					} catch (OperationNotFoundException ex) {
-						System.err.println(newCRS.getName()+": "+e.getMessage());
-					}
-				}
-			}
-			
-			if (transform == null) {
-				if (handler != null) {
-					// ask handler if it can provide a math transform
-					try {
-						transform = handler.findMathTransform(crs, wgs84, false);
-					} catch (OperationNotFoundException ex) {
-					    Main.warn(crs.getName()+": "+ex.getMessage()); // Bursa wolf parameters required.
-					}
-				} else {
-					// ask default known handlers
-					for (GeographicHandler geoHandler : defaultHandlers) {
-						try {
-							if ((transform = geoHandler.findMathTransform(crs, wgs84, false)) != null) {
-								break;
-							}
-						} catch (OperationNotFoundException ex) {
-						    Main.warn(crs.getName()+": "+ex.getMessage()); // Bursa wolf parameters required.
-						}
-					}
-				}
-				if (transform == null) {
-					// ask user before trying lenient method, unless in headless mode (unit tests)
-					if (!GraphicsEnvironment.isHeadless() && warnLenientMethod(parent, crs)) {
-						// User canceled
-						throw new UserCancelException();
-					}
-					Main.info("Searching for a lenient math transform.");
-					transform = CRS.findMathTransform(crs, wgs84, true);
-				}
-			}
-		}
-		if (transform == null) {
-			throw new GeoMathTransformException("Unable to find math transform !");
-		}
-	}
+        return new DialogPrompter<ExtendedDialog>() {
+            @Override
+            protected ExtendedDialog buildDialog() {
+                final ExtendedDialog dlg = new ExtendedDialog(parent,
+                        tr("Cannot transform to WGS84"),
+                        new String[] {tr("Cancel"), tr("Continue")});
+                dlg.setContent("<html>" +
+                        tr("JOSM was unable to find a strict mathematical transformation between ''{0}'' and WGS84.<br /><br />"+
+                                "Do you want to try a <i>lenient</i> method, which will perform a non-precise transformation (<b>with location errors up to 1 km</b>) ?<br/><br/>"+
+                                "If so, <b>do NOT upload</b> such data to OSM !", crs.getName())+
+                        "</html>");
+                dlg.setButtonIcons(new Icon[] {
+                        ImageProvider.get("cancel"),
+                        ImageProvider.overlay(
+                                ImageProvider.get("ok"),
+                                new ImageIcon(ImageProvider.get("warning-small").getImage().getScaledInstance(10 , 10, Image.SCALE_SMOOTH)),
+                                ImageProvider.OverlayPosition.SOUTHEAST)});
+                dlg.setToolTipTexts(new String[] {
+                        tr("Cancel"),
+                        tr("Try lenient method")});
+                dlg.setIcon(JOptionPane.WARNING_MESSAGE);
+                dlg.setCancelButton(1);
+                return dlg;
+            }
+        }.promptInEdt().getValue() != 2;
+    }
+    
+    private static final void compareDebug(CoordinateReferenceSystem crs1, CoordinateReferenceSystem crs2) {
+        Main.debug("-- COMPARING "+crs1.getName()+" WITH "+crs2.getName()+" --");
+        compareDebug("class", crs1.getClass(), crs2.getClass());
+        CoordinateSystem cs1 = crs1.getCoordinateSystem();
+        CoordinateSystem cs2 = crs2.getCoordinateSystem();
+        if (!compareDebug("cs", cs1, cs2)) {
+            Integer dim1 = cs1.getDimension();
+            Integer dim2 = cs2.getDimension();
+            if (compareDebug("cs.dim", dim1, dim2)) {
+                for (int i = 0; i<dim1; i++) {
+                    compareDebug("cs.axis"+i, cs1.getAxis(i), cs1.getAxis(i));
+                }
+            }
+        }
+        if (crs1 instanceof AbstractSingleCRS) {
+            Datum datum1 = ((AbstractSingleCRS) crs1).getDatum();
+            Datum datum2 = ((AbstractSingleCRS) crs2).getDatum();
+            if (!compareDebug("datum", datum1, datum2)) {
+                AbstractIdentifiedObject adatum1 = (AbstractIdentifiedObject) datum1;
+                AbstractIdentifiedObject adatum2 = (AbstractIdentifiedObject) datum2;
+                compareDebug("datum.name1", adatum1.nameMatches(adatum2.getName().getCode()), adatum1.getName(), adatum2.getName());
+                compareDebug("datum.name2", adatum2.nameMatches(adatum1.getName().getCode()), adatum2.getName(), adatum1.getName());
+            }
+            if (crs1 instanceof AbstractDerivedCRS) {
+                AbstractDerivedCRS adcrs1 = (AbstractDerivedCRS) crs1;
+                AbstractDerivedCRS adcrs2 = (AbstractDerivedCRS) crs2;
+                compareDebug("baseCRS", adcrs1.getBaseCRS(), adcrs2.getBaseCRS());
+                compareDebug("conversionFromBase", adcrs1.getConversionFromBase(), adcrs2.getConversionFromBase());
+            }
+        }
+        Main.debug("-- COMPARING FINISHED --");
+    }
+    
+    private static final boolean compareDebug(String text, Object o1, Object o2) {
+        return compareDebug(text, o1.equals(o2), o1, o2);
+    }
+    
+    private static final boolean compareDebug(String text, IdentifiedObject o1, IdentifiedObject o2) {
+        return compareDebug(text, (AbstractIdentifiedObject)o1, (AbstractIdentifiedObject)o2);
+    }
+    
+    private static final boolean compareDebug(String text, AbstractIdentifiedObject o1, AbstractIdentifiedObject o2) {
+        return compareDebug(text, o1.equals(o2, false), o1, o2);
+    }
+
+    private static final boolean compareDebug(String text, boolean result, Object o1, Object o2) {
+        Main.debug(text + ": " + result + "("+o1+", "+o2+")");
+        return result;
+    }
+    
+    protected void findMathTransform(Component parent, boolean findSimiliarCrs) throws FactoryException, UserCancelException, GeoMathTransformException {
+        try {
+            transform = CRS.findMathTransform(crs, wgs84);
+        } catch (OperationNotFoundException e) {
+            Main.info(crs.getName()+": "+e.getMessage()); // Bursa wolf parameters required.
+            
+            if (findSimiliarCrs) { 
+                List<CoordinateReferenceSystem> candidates = new ArrayList<>();
+                
+                // Find matching CRS with Bursa Wolf parameters in EPSG database
+                for (String code : CRS.getAuthorityFactory(false).getAuthorityCodes(ProjectedCRS.class)) {
+                    try {
+                        CoordinateReferenceSystem candidate = CRS.decode(code);
+                        if (candidate instanceof AbstractCRS && crs instanceof AbstractIdentifiedObject) {
+                            
+                            Hints.putSystemDefault(Hints.COMPARISON_TOLERANCE, 
+                                    Main.pref.getDouble(OdConstants.PREF_CRS_COMPARISON_TOLERANCE, OdConstants.DEFAULT_CRS_COMPARISON_TOLERANCE));
+                            if (((AbstractCRS)candidate).equals((AbstractIdentifiedObject)crs, false)) {
+                                Main.info("Found a potential CRS: "+candidate.getName());
+                                candidates.add(candidate);
+                            } else if (Main.pref.getBoolean(OdConstants.PREF_CRS_COMPARISON_DEBUG, false)) {
+                                compareDebug(crs, candidate);
+                            }
+                            Hints.removeSystemDefault(Hints.COMPARISON_TOLERANCE);
+                        }
+                    } catch (FactoryException ex) {
+                        // Silently ignore exceptions
+                        //System.err.println("Warning: cannot decode "+code+". "+ex.getMessage());
+                    }
+                }
+                
+                if (candidates.size() > 1) {
+                    Main.warn("Found several potential CRS: "+Arrays.toString(candidates.toArray()));
+                    // TODO: ask user which one to use
+                }
+                
+                if (candidates.size() > 0) {
+                    CoordinateReferenceSystem newCRS = candidates.get(0);
+                    try {
+                        transform = CRS.findMathTransform(newCRS, wgs84, false);
+                    } catch (OperationNotFoundException ex) {
+                        System.err.println(newCRS.getName()+": "+e.getMessage());
+                    }
+                }
+            }
+            
+            if (transform == null) {
+                if (handler != null) {
+                    // ask handler if it can provide a math transform
+                    try {
+                        transform = handler.findMathTransform(crs, wgs84, false);
+                    } catch (OperationNotFoundException ex) {
+                        Main.warn(crs.getName()+": "+ex.getMessage()); // Bursa wolf parameters required.
+                    }
+                } else {
+                    // ask default known handlers
+                    for (GeographicHandler geoHandler : defaultHandlers) {
+                        try {
+                            if ((transform = geoHandler.findMathTransform(crs, wgs84, false)) != null) {
+                                break;
+                            }
+                        } catch (OperationNotFoundException ex) {
+                            Main.warn(crs.getName()+": "+ex.getMessage()); // Bursa wolf parameters required.
+                        }
+                    }
+                }
+                if (transform == null) {
+                    // ask user before trying lenient method, unless in headless mode (unit tests)
+                    if (!GraphicsEnvironment.isHeadless() && warnLenientMethod(parent, crs)) {
+                        // User canceled
+                        throw new UserCancelException();
+                    }
+                    Main.info("Searching for a lenient math transform.");
+                    transform = CRS.findMathTransform(crs, wgs84, true);
+                }
+            }
+        }
+        if (transform == null) {
+            throw new GeoMathTransformException("Unable to find math transform !");
+        }
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/GmlImporter.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/GmlImporter.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/GmlImporter.java	(revision 30723)
@@ -14,5 +14,5 @@
 
 public class GmlImporter extends AbstractImporter {
-	
+    
     public static final ExtensionFileFilter GML_FILE_FILTER = new ExtensionFileFilter(
             OdConstants.GML_EXT, OdConstants.GML_EXT, tr("GML files") + " (*."+OdConstants.GML_EXT+")");
@@ -22,12 +22,12 @@
     }
 
-	@Override
-	protected DataSet parseDataSet(InputStream in, ProgressMonitor instance)
-			throws IllegalDataException {
-		try {
-			return GmlReader.parseDataSet(in, handler, instance);
-		} catch (Exception e) {
-			throw new IllegalDataException(e);
-		}
-	}
+    @Override
+    protected DataSet parseDataSet(InputStream in, ProgressMonitor instance)
+            throws IllegalDataException {
+        try {
+            return GmlReader.parseDataSet(in, handler, instance);
+        } catch (Exception e) {
+            throw new IllegalDataException(e);
+        }
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/GmlReader.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/GmlReader.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/GmlReader.java	(revision 30723)
@@ -48,8 +48,8 @@
     public static final String GML_POS_LIST = "posList";
 
-	private final GeometryFactory geometryFactory = new GeometryFactory();
+    private final GeometryFactory geometryFactory = new GeometryFactory();
     
     private final GmlHandler gmlHandler;
-	
+    
     private XMLStreamReader parser;
     
@@ -57,12 +57,12 @@
     
     private final class CrsData {
-    	public CoordinateReferenceSystem crs;
-    	public MathTransform transform;
-    	public int dim;
-		public CrsData(CoordinateReferenceSystem crs, MathTransform transform, int dim) {
-			this.crs = crs;
-			this.transform = transform;
-			this.dim = dim;
-		}
+        public CoordinateReferenceSystem crs;
+        public MathTransform transform;
+        public int dim;
+        public CrsData(CoordinateReferenceSystem crs, MathTransform transform, int dim) {
+            this.crs = crs;
+            this.transform = transform;
+            this.dim = dim;
+        }
     }
 
@@ -70,114 +70,114 @@
     
     public GmlReader(XMLStreamReader parser, GmlHandler handler) {
-		super(handler, NationalHandlers.DEFAULT_GML_HANDLERS);
+        super(handler, NationalHandlers.DEFAULT_GML_HANDLERS);
         this.parser = parser;
         this.gmlHandler = handler;
     }
 
-	public static DataSet parseDataSet(InputStream in, AbstractDataSetHandler handler, ProgressMonitor instance) throws IOException, XMLStreamException {
+    public static DataSet parseDataSet(InputStream in, AbstractDataSetHandler handler, ProgressMonitor instance) throws IOException, XMLStreamException {
         InputStreamReader ir = UTFInputStreamReader.create(in, OdConstants.UTF8);
         XMLStreamReader parser = XMLInputFactory.newInstance().createXMLStreamReader(ir);
         try {
-        	return new GmlReader(parser, handler != null ? handler.getGmlHandler() : null).parseDoc(instance);
+            return new GmlReader(parser, handler != null ? handler.getGmlHandler() : null).parseDoc(instance);
         } catch (Exception e) {
-        	throw new IOException(e);
+            throw new IOException(e);
         }
-	}
-	
-	private final boolean isElement(String element) {
-		return parser.getLocalName().matches("(gml:)?"+element);
-	}
+    }
+    
+    private final boolean isElement(String element) {
+        return parser.getLocalName().matches("(gml:)?"+element);
+    }
 
-	private DataSet parseDoc(ProgressMonitor instance) throws XMLStreamException, GeoCrsException, FactoryException, GeoMathTransformException, MismatchedDimensionException, TransformException {
-		Component parent = instance != null ? instance.getWindowParent() : Main.parent;
-		while (parser.hasNext()) {
+    private DataSet parseDoc(ProgressMonitor instance) throws XMLStreamException, GeoCrsException, FactoryException, GeoMathTransformException, MismatchedDimensionException, TransformException {
+        Component parent = instance != null ? instance.getWindowParent() : Main.parent;
+        while (parser.hasNext()) {
             int event = parser.next();
             if (event == XMLStreamConstants.START_ELEMENT) {
                 if (isElement(GML_FEATURE_MEMBER)) {
-                	try {
-						parseFeatureMember(parent);
-					} catch (UserCancelException e) {
-						return ds;
-					}
+                    try {
+                        parseFeatureMember(parent);
+                    } catch (UserCancelException e) {
+                        return ds;
+                    }
                 }
             }
-		}
-		return ds;
-	}
-	
-	private void findCRS(String srs) throws NoSuchAuthorityCodeException, FactoryException {
-		Main.info("Finding CRS for "+srs);
-		if (gmlHandler != null) {
-			crs = gmlHandler.getCrsFor(srs);
-		} else {
-			for (GmlHandler h : NationalHandlers.DEFAULT_GML_HANDLERS) {
-				if ((crs = h.getCrsFor(srs)) != null) {
-					return;
-				}
-			}
-		}
-	}
-	
-	private void parseSrs(Component parent) throws GeoCrsException, FactoryException, UserCancelException, GeoMathTransformException {
-		String srs = parser.getAttributeValue(null, GML_SRS_NAME);
-		dim = Integer.parseInt(parser.getAttributeValue(null, GML_SRS_DIMENSION));
-		CrsData crsData = crsDataMap.get(srs);
-		if (crsData == null) {
-			try {
-        		findCRS(srs);
-			} catch (NoSuchAuthorityCodeException e) {
-				e.printStackTrace();
-			} catch (FactoryException e) {
-				e.printStackTrace();
-			}
-			if (crs == null) {
-				throw new GeoCrsException("Unable to detect CRS for srs '"+srs+"' !");
-			} else {
-				findMathTransform(parent, false);
-			}
-			crsDataMap.put(srs, new CrsData(crs, transform, dim));
-		} else {
-			crs = crsData.crs;
-			transform = crsData.transform;
-			dim = crsData.dim;
-		}
-	}
-	
-	private void parseFeatureMember(Component parent) throws XMLStreamException, GeoCrsException, FactoryException, UserCancelException, GeoMathTransformException, MismatchedDimensionException, TransformException {
-		List<OsmPrimitive> list = new ArrayList<>();
-		Way way = null;
-		Node node = null;
-		Map<String, String> tags = new HashMap<>();
-		while (parser.hasNext()) {
+        }
+        return ds;
+    }
+    
+    private void findCRS(String srs) throws NoSuchAuthorityCodeException, FactoryException {
+        Main.info("Finding CRS for "+srs);
+        if (gmlHandler != null) {
+            crs = gmlHandler.getCrsFor(srs);
+        } else {
+            for (GmlHandler h : NationalHandlers.DEFAULT_GML_HANDLERS) {
+                if ((crs = h.getCrsFor(srs)) != null) {
+                    return;
+                }
+            }
+        }
+    }
+    
+    private void parseSrs(Component parent) throws GeoCrsException, FactoryException, UserCancelException, GeoMathTransformException {
+        String srs = parser.getAttributeValue(null, GML_SRS_NAME);
+        dim = Integer.parseInt(parser.getAttributeValue(null, GML_SRS_DIMENSION));
+        CrsData crsData = crsDataMap.get(srs);
+        if (crsData == null) {
+            try {
+                findCRS(srs);
+            } catch (NoSuchAuthorityCodeException e) {
+                e.printStackTrace();
+            } catch (FactoryException e) {
+                e.printStackTrace();
+            }
+            if (crs == null) {
+                throw new GeoCrsException("Unable to detect CRS for srs '"+srs+"' !");
+            } else {
+                findMathTransform(parent, false);
+            }
+            crsDataMap.put(srs, new CrsData(crs, transform, dim));
+        } else {
+            crs = crsData.crs;
+            transform = crsData.transform;
+            dim = crsData.dim;
+        }
+    }
+    
+    private void parseFeatureMember(Component parent) throws XMLStreamException, GeoCrsException, FactoryException, UserCancelException, GeoMathTransformException, MismatchedDimensionException, TransformException {
+        List<OsmPrimitive> list = new ArrayList<>();
+        Way way = null;
+        Node node = null;
+        Map<String, String> tags = new HashMap<>();
+        while (parser.hasNext()) {
             int event = parser.next();
             if (event == XMLStreamConstants.START_ELEMENT) {
-            	if (isElement(GML_LINE_STRING)) {
-            		list.add(way = createWay());
-            		parseSrs(parent);
-            	} else if (isElement(GML_LINEAR_RING)) {
-            		list.add(way = createWay());
-            	} else if (isElement(GML_SURFACE)) {
-            		parseSrs(parent);
-            	} else if (isElement(GML_POS_LIST)) {
-            		String[] tab = parser.getElementText().split(" ");
-            		for (int i = 0; i < tab.length; i += dim) {
-            			Point p = geometryFactory.createPoint(new Coordinate(Double.valueOf(tab[i]), Double.valueOf(tab[i+1])));
-            			node = createOrGetNode(p, dim > 2 && !tab[i+2].equals("0") ? tab[i+2] : null);
-            			if (way != null) {
-            				way.addNode(node);
-            			}
-            		}
-            	}
+                if (isElement(GML_LINE_STRING)) {
+                    list.add(way = createWay());
+                    parseSrs(parent);
+                } else if (isElement(GML_LINEAR_RING)) {
+                    list.add(way = createWay());
+                } else if (isElement(GML_SURFACE)) {
+                    parseSrs(parent);
+                } else if (isElement(GML_POS_LIST)) {
+                    String[] tab = parser.getElementText().split(" ");
+                    for (int i = 0; i < tab.length; i += dim) {
+                        Point p = geometryFactory.createPoint(new Coordinate(Double.valueOf(tab[i]), Double.valueOf(tab[i+1])));
+                        node = createOrGetNode(p, dim > 2 && !tab[i+2].equals("0") ? tab[i+2] : null);
+                        if (way != null) {
+                            way.addNode(node);
+                        }
+                    }
+                }
             } else if (event == XMLStreamConstants.END_ELEMENT) {
                 if (isElement(GML_FEATURE_MEMBER)) {
-                	break;
+                    break;
                 }
             }
-		}
-		for (OsmPrimitive p : list) {
-			for (String key : tags.keySet()) {
-				p.put(key, tags.get(key));
-			}
-		}
-	}
+        }
+        for (OsmPrimitive p : list) {
+            for (String key : tags.keySet()) {
+                p.put(key, tags.get(key));
+            }
+        }
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/KmlKmzImporter.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/KmlKmzImporter.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/KmlKmzImporter.java	(revision 30723)
@@ -14,5 +14,5 @@
 
 public class KmlKmzImporter extends AbstractImporter {
-	
+    
     public static final ExtensionFileFilter KML_KMZ_FILE_FILTER = new ExtensionFileFilter(
             OdConstants.KML_EXT+","+OdConstants.KMZ_EXT, OdConstants.KMZ_EXT, tr("KML/KMZ files") + " (*."+OdConstants.KML_EXT+",*."+OdConstants.KMZ_EXT+")");
@@ -22,16 +22,16 @@
     }
 
-	@Override
-	protected DataSet parseDataSet(InputStream in, ProgressMonitor instance)
-			throws IllegalDataException {
-		try {
-			if (file.getName().toLowerCase().endsWith(OdConstants.KML_EXT)) {
-				return KmlReader.parseDataSet(in, instance);
-			} else {
-				return KmzReader.parseDataSet(in, instance);
-			}
-		} catch (Exception e) {
-			throw new IllegalDataException(e);
-		}
-	}
+    @Override
+    protected DataSet parseDataSet(InputStream in, ProgressMonitor instance)
+            throws IllegalDataException {
+        try {
+            if (file.getName().toLowerCase().endsWith(OdConstants.KML_EXT)) {
+                return KmlReader.parseDataSet(in, instance);
+            } else {
+                return KmzReader.parseDataSet(in, instance);
+            }
+        } catch (Exception e) {
+            throw new IllegalDataException(e);
+        }
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/KmlReader.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/KmlReader.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/KmlReader.java	(revision 30723)
@@ -32,5 +32,5 @@
 
     public static final String KML_PLACEMARK   = "Placemark";
-    public static final String KML_NAME	       = "name";
+    public static final String KML_NAME           = "name";
     public static final String KML_COLOR       = "color";
     public static final String KML_SIMPLE_DATA = "SimpleData";
@@ -51,104 +51,104 @@
     }
 
-	public static DataSet parseDataSet(InputStream in, ProgressMonitor instance) throws IOException, XMLStreamException, FactoryConfigurationError {
+    public static DataSet parseDataSet(InputStream in, ProgressMonitor instance) throws IOException, XMLStreamException, FactoryConfigurationError {
         InputStreamReader ir = UTFInputStreamReader.create(in);
         XMLStreamReader parser = XMLInputFactory.newInstance().createXMLStreamReader(ir);
-	    //XMLStreamReader parser = XMLInputFactory.newInstance().createXMLStreamReader(in, UTF8);
+        //XMLStreamReader parser = XMLInputFactory.newInstance().createXMLStreamReader(in, UTF8);
         return new KmlReader(parser).parseDoc();
-	}
+    }
 
-	private DataSet parseDoc() throws XMLStreamException {
-		DataSet ds = new DataSet();
-		while (parser.hasNext()) {
+    private DataSet parseDoc() throws XMLStreamException {
+        DataSet ds = new DataSet();
+        while (parser.hasNext()) {
             int event = parser.next();
             if (event == XMLStreamConstants.START_ELEMENT) {
                 if (parser.getLocalName().equals(KML_PLACEMARK)) {
-                	parsePlaceMark(ds);
+                    parsePlaceMark(ds);
                 }
             }
-		}
-		return ds;
-	}
-	
-	private static boolean keyIsIgnored(String key) {
-		for (ProjectionPatterns pp : OdConstants.PROJECTIONS) {
-			if (pp.getXPattern().matcher(key).matches() || pp.getYPattern().matcher(key).matches()) {
-				return true;
-			}
-		}
-		return false;
-	}
-	
-	private void parsePlaceMark(DataSet ds) throws XMLStreamException {
-		List<OsmPrimitive> list = new ArrayList<>();
-		Way way = null;
-		Node node = null;
-		Relation relation = null;
-		String role = "";
-		Map<String, String> tags = new HashMap<>();
-		while (parser.hasNext()) {
+        }
+        return ds;
+    }
+    
+    private static boolean keyIsIgnored(String key) {
+        for (ProjectionPatterns pp : OdConstants.PROJECTIONS) {
+            if (pp.getXPattern().matcher(key).matches() || pp.getYPattern().matcher(key).matches()) {
+                return true;
+            }
+        }
+        return false;
+    }
+    
+    private void parsePlaceMark(DataSet ds) throws XMLStreamException {
+        List<OsmPrimitive> list = new ArrayList<>();
+        Way way = null;
+        Node node = null;
+        Relation relation = null;
+        String role = "";
+        Map<String, String> tags = new HashMap<>();
+        while (parser.hasNext()) {
             int event = parser.next();
             if (event == XMLStreamConstants.START_ELEMENT) {
-            	if (parser.getLocalName().equals(KML_COLOR)) {
-            		String s = parser.getElementText();
-            		// KML color format is aabbggrr, convert it to OSM (web) format: #rrggbb
-            		String rgbColor = '#'+s.substring(6,8)+s.substring(4,6)+s.substring(2,4);
-            		tags.put(KML_COLOR, rgbColor);
-            	} else if (parser.getLocalName().equals(KML_NAME)) {
-                	tags.put(KML_NAME, parser.getElementText());
-            	} else if (parser.getLocalName().equals(KML_SIMPLE_DATA)) {
-            		String key = parser.getAttributeValue(null, "name");
-            		if (!keyIsIgnored(key)) {
-            			tags.put(key, parser.getElementText());
-            		}
-            	} else if (parser.getLocalName().equals(KML_POLYGON)) {
-            		ds.addPrimitive(relation = new Relation());
-            		relation.put("type", "multipolygon");
-            		list.add(relation);
-            	} else if (parser.getLocalName().equals(KML_OUTER_BOUND)) {
-            		role = "outer";
-            	} else if (parser.getLocalName().equals(KML_INNER_BOUND)) {
-            		role = "inner";
-            	} else if (parser.getLocalName().equals(KML_LINEAR_RING)) {
-            		if (relation != null) {
-            			ds.addPrimitive(way = new Way());
-            			relation.addMember(new RelationMember(role, way));
-            		}
-            	} else if (parser.getLocalName().equals(KML_LINE_STRING)) {
-            		ds.addPrimitive(way = new Way());
-            		list.add(way);
-            	} else if (parser.getLocalName().equals(KML_COORDINATES)) {
-            		String[] tab = parser.getElementText().trim().split("\\s");
-            		for (int i = 0; i < tab.length; i ++) {
-            			String[] values = tab[i].split(",");
-            			if (values.length >= 2) {
-	            			LatLon ll = new LatLon(Double.valueOf(values[1]), Double.valueOf(values[0])).getRoundedToOsmPrecisionStrict();
-	            			node = nodes.get(ll);
-	            			if (node == null) {
-	            				ds.addPrimitive(node = new Node(ll));
-	            				nodes.put(ll, node);
-	            				if (values.length > 2 && !values[2].equals("0")) {
-	            					node.put("ele", values[2]);
-	            				}
-	            			}
-	            			if (way != null) {
-	            				way.addNode(node);
-	            			}
-            			}
-            		}
-            	}
+                if (parser.getLocalName().equals(KML_COLOR)) {
+                    String s = parser.getElementText();
+                    // KML color format is aabbggrr, convert it to OSM (web) format: #rrggbb
+                    String rgbColor = '#'+s.substring(6,8)+s.substring(4,6)+s.substring(2,4);
+                    tags.put(KML_COLOR, rgbColor);
+                } else if (parser.getLocalName().equals(KML_NAME)) {
+                    tags.put(KML_NAME, parser.getElementText());
+                } else if (parser.getLocalName().equals(KML_SIMPLE_DATA)) {
+                    String key = parser.getAttributeValue(null, "name");
+                    if (!keyIsIgnored(key)) {
+                        tags.put(key, parser.getElementText());
+                    }
+                } else if (parser.getLocalName().equals(KML_POLYGON)) {
+                    ds.addPrimitive(relation = new Relation());
+                    relation.put("type", "multipolygon");
+                    list.add(relation);
+                } else if (parser.getLocalName().equals(KML_OUTER_BOUND)) {
+                    role = "outer";
+                } else if (parser.getLocalName().equals(KML_INNER_BOUND)) {
+                    role = "inner";
+                } else if (parser.getLocalName().equals(KML_LINEAR_RING)) {
+                    if (relation != null) {
+                        ds.addPrimitive(way = new Way());
+                        relation.addMember(new RelationMember(role, way));
+                    }
+                } else if (parser.getLocalName().equals(KML_LINE_STRING)) {
+                    ds.addPrimitive(way = new Way());
+                    list.add(way);
+                } else if (parser.getLocalName().equals(KML_COORDINATES)) {
+                    String[] tab = parser.getElementText().trim().split("\\s");
+                    for (int i = 0; i < tab.length; i ++) {
+                        String[] values = tab[i].split(",");
+                        if (values.length >= 2) {
+                            LatLon ll = new LatLon(Double.valueOf(values[1]), Double.valueOf(values[0])).getRoundedToOsmPrecisionStrict();
+                            node = nodes.get(ll);
+                            if (node == null) {
+                                ds.addPrimitive(node = new Node(ll));
+                                nodes.put(ll, node);
+                                if (values.length > 2 && !values[2].equals("0")) {
+                                    node.put("ele", values[2]);
+                                }
+                            }
+                            if (way != null) {
+                                way.addNode(node);
+                            }
+                        }
+                    }
+                }
             } else if (event == XMLStreamConstants.END_ELEMENT) {
                 if (parser.getLocalName().equals(KML_PLACEMARK)) {
-                	break;
+                    break;
                 } else if (parser.getLocalName().equals(KML_POINT)) {
-                	list.add(node);
+                    list.add(node);
                 }
             }
-		}
-		for (OsmPrimitive p : list) {
-			for (String key : tags.keySet()) {
-				p.put(key, tags.get(key));
-			}
-		}
-	}
+        }
+        for (OsmPrimitive p : list) {
+            for (String key : tags.keySet()) {
+                p.put(key, tags.get(key));
+            }
+        }
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/KmzReader.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/KmzReader.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/KmzReader.java	(revision 30723)
@@ -19,5 +19,5 @@
 public class KmzReader extends AbstractReader {
 
-	private ZipInputStream zis;
+    private ZipInputStream zis;
     
     public KmzReader(ZipInputStream zis) {
@@ -25,20 +25,20 @@
     }
 
-	public static DataSet parseDataSet(InputStream in, ProgressMonitor instance) throws IOException, XMLStreamException, FactoryConfigurationError {
-		return new KmzReader(new ZipInputStream(in)).parseDoc(instance);
-	}
+    public static DataSet parseDataSet(InputStream in, ProgressMonitor instance) throws IOException, XMLStreamException, FactoryConfigurationError {
+        return new KmzReader(new ZipInputStream(in)).parseDoc(instance);
+    }
 
-	private DataSet parseDoc(ProgressMonitor instance) throws IOException, XMLStreamException, FactoryConfigurationError  {
-	    ZipEntry entry;
-	    do {
-	        entry = zis.getNextEntry();
-	        if (entry == null) {
-	            Main.warn("No KML file found");
-	            return null;
-	        }
-	    } while (!entry.getName().toLowerCase().endsWith(".kml"));
-		long size = entry.getSize();
-		byte[] buffer;
-		if (size > 0) {
+    private DataSet parseDoc(ProgressMonitor instance) throws IOException, XMLStreamException, FactoryConfigurationError  {
+        ZipEntry entry;
+        do {
+            entry = zis.getNextEntry();
+            if (entry == null) {
+                Main.warn("No KML file found");
+                return null;
+            }
+        } while (!entry.getName().toLowerCase().endsWith(".kml"));
+        long size = entry.getSize();
+        byte[] buffer;
+        if (size > 0) {
             buffer = new byte[(int) size];
             int off = 0;
@@ -59,6 +59,6 @@
             buffer = out.toByteArray();
         }
-	    
-		return KmlReader.parseDataSet(new ByteArrayInputStream(buffer), instance);
-	}
+        
+        return KmlReader.parseDataSet(new ByteArrayInputStream(buffer), instance);
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/MifDatum.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/MifDatum.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/MifDatum.java	(revision 30723)
@@ -11,22 +11,22 @@
  */
 public enum MifDatum {
-	Adindan(1, "Ethiopia, Mali, Senegal, Sudan", Clarke_1880),
-	Afgooye(2, "Somalia", Krassovsky),
-	Ain_el_Abd_1970(3, "Bahrain Island", International),
-	Anna_1_Astro_1965(4, "Cocos Islands", Australian_National),
-	Arc_1950(5, "Botswana, Lesotho, Malawi, Swaziland, Zaire, Zambia, Zimbabwe", Clarke_1880),
-	Arc_1960(6, "Kenya, Tanzania", Clarke_1880),
-	Ascension_Island_1958(7, "Ascension Island", International),
-	Astro_Beacon_E(8, "Iwo Jima Island", International),
-	Astro_B4_Sorol_Atoll(9, "Tern Island", International),
-	Astro_DOS_71_4(10, "St. Helena Island", International),
-	Astronomic_Station_1952(11, "Marcus Island", International),
-	Australian_Geodetic_1966_AGD_66(12, "Australia and Tasmania Island", Australian_National),
-	Australian_Geodetic_1984_AGD_84(13, "Australia and Tasmania Island", Australian_National),
-	Belgium(110, "Belgium", International),
-	Bellevue_IGN(14, "Efate and Erromango Islands", International),
-	Bermuda_1957(15, "Bermuda Islands", Clarke_1866),
-	Bogota_Observatory(16, "Colombia", International),
-	Campo_Inchauspe(17, "Argentina", International),
+    Adindan(1, "Ethiopia, Mali, Senegal, Sudan", Clarke_1880),
+    Afgooye(2, "Somalia", Krassovsky),
+    Ain_el_Abd_1970(3, "Bahrain Island", International),
+    Anna_1_Astro_1965(4, "Cocos Islands", Australian_National),
+    Arc_1950(5, "Botswana, Lesotho, Malawi, Swaziland, Zaire, Zambia, Zimbabwe", Clarke_1880),
+    Arc_1960(6, "Kenya, Tanzania", Clarke_1880),
+    Ascension_Island_1958(7, "Ascension Island", International),
+    Astro_Beacon_E(8, "Iwo Jima Island", International),
+    Astro_B4_Sorol_Atoll(9, "Tern Island", International),
+    Astro_DOS_71_4(10, "St. Helena Island", International),
+    Astronomic_Station_1952(11, "Marcus Island", International),
+    Australian_Geodetic_1966_AGD_66(12, "Australia and Tasmania Island", Australian_National),
+    Australian_Geodetic_1984_AGD_84(13, "Australia and Tasmania Island", Australian_National),
+    Belgium(110, "Belgium", International),
+    Bellevue_IGN(14, "Efate and Erromango Islands", International),
+    Bermuda_1957(15, "Bermuda Islands", Clarke_1866),
+    Bogota_Observatory(16, "Colombia", International),
+    Campo_Inchauspe(17, "Argentina", International),
     Canton_Astro_1966(18, "Phoenix Islands", International),
     Cape(19, "South Africa", Clarke_1880),
@@ -40,30 +40,30 @@
     DOS_1968(26, "Gizo Island (New Georgia Islands)", International),
     Easter_Island_1967(27, "Easter Island", International),
-	European_1950_ED_50(28, "Austria, Belgium, Denmark, Finland, France, Germany, Gibraltar, Greece, Italy, Luxembourg, Netherlands, Norway, Portugal, Spain, Sweden, Switzerland", International),
-	European_1979_ED_79(29, "Austria, Finland, Netherlands, Norway, Spain, Sweden, Switzerland", International),
-	European_1987_ED_87(108, "Europe", International),
-	Gandajika_Base(30, "Republic of Maldives", International),
-	Geodetic_Datum_1949(31, "New Zealand", International),
-	Geodetic_Reference_System_1967_GRS_67(32, "Worldwide", GRS_67),
-	Geodetic_Reference_System_1980_GRS_80(33, "Worldwide", GRS_80),
-	Guam_1963(34, "Guam Island", Clarke_1866),
-	GUX_1_Astro(35, "Guadalcanal Island", International),
-	Hito_XVIII_1963(36, "South Chile (near 53°S)", International),
-	Hjorsey_1955(37, "Iceland", International),
-	Hong_Kong_1963(38, "Hong Kong", International),
-	Hu_Tzu_Shan(39, "Taiwan", International),
-	Indian_40(40, "Thailand and Vietnam", Everest),
-	Indian_41(41, "Bangladesh, India, Nepal", Everest),
-	Ireland_1965(42, "Ireland", Modified_Airy),
-	ISTS_073_Astro_1969(43, "Diego Garcia", International),
-	Johnston_Island_1961(44, "Johnston Island", International),
-	Kandawala(45, "Sri Lanka", Everest),
-	Kerguelen_Island(46, "Kerguelen Island", International),
-	Kertau_1948(47, "West Malaysia and Singapore", Modified_Everest),
-	LC_5_Astro(48, "Cayman Brac Island", Clarke_1866),
-	Liberia_1964(49, "Liberia", Clarke_1880),
-	Lisboa_DLx(113, "Portugal", International),
-	Luzon_50(50, "Philippines (excluding Mindanao Island)", Clarke_1866),
-	Luzon_51(51, "Mindanao Island", Clarke_1866),
+    European_1950_ED_50(28, "Austria, Belgium, Denmark, Finland, France, Germany, Gibraltar, Greece, Italy, Luxembourg, Netherlands, Norway, Portugal, Spain, Sweden, Switzerland", International),
+    European_1979_ED_79(29, "Austria, Finland, Netherlands, Norway, Spain, Sweden, Switzerland", International),
+    European_1987_ED_87(108, "Europe", International),
+    Gandajika_Base(30, "Republic of Maldives", International),
+    Geodetic_Datum_1949(31, "New Zealand", International),
+    Geodetic_Reference_System_1967_GRS_67(32, "Worldwide", GRS_67),
+    Geodetic_Reference_System_1980_GRS_80(33, "Worldwide", GRS_80),
+    Guam_1963(34, "Guam Island", Clarke_1866),
+    GUX_1_Astro(35, "Guadalcanal Island", International),
+    Hito_XVIII_1963(36, "South Chile (near 53°S)", International),
+    Hjorsey_1955(37, "Iceland", International),
+    Hong_Kong_1963(38, "Hong Kong", International),
+    Hu_Tzu_Shan(39, "Taiwan", International),
+    Indian_40(40, "Thailand and Vietnam", Everest),
+    Indian_41(41, "Bangladesh, India, Nepal", Everest),
+    Ireland_1965(42, "Ireland", Modified_Airy),
+    ISTS_073_Astro_1969(43, "Diego Garcia", International),
+    Johnston_Island_1961(44, "Johnston Island", International),
+    Kandawala(45, "Sri Lanka", Everest),
+    Kerguelen_Island(46, "Kerguelen Island", International),
+    Kertau_1948(47, "West Malaysia and Singapore", Modified_Everest),
+    LC_5_Astro(48, "Cayman Brac Island", Clarke_1866),
+    Liberia_1964(49, "Liberia", Clarke_1880),
+    Lisboa_DLx(113, "Portugal", International),
+    Luzon_50(50, "Philippines (excluding Mindanao Island)", Clarke_1866),
+    Luzon_51(51, "Mindanao Island", Clarke_1866),
     Mahe_1971(52, "Mahe Island", Clarke_1880),
     Marco_Astro(53, "Salvage Islands", International),
@@ -78,20 +78,20 @@
     Naparima_BWI(61, "Trinidad and Tobago", International),
     Netherlands(109, "Netherlands", Bessel),
-	North_American_1927_NAD_27_CONTINENTAL(62, "Continental US", Clarke_1866),
-	North_American_1927_NAD_27_ALASKA(63, "Alaska", Clarke_1866),
-	North_American_1927_NAD_27_BAHAMAS(64, "Bahamas (excluding San Salvador Island)", Clarke_1866),
-	North_American_1927_NAD_27_SAN_SALVADOR(65, "San Salvador Island", Clarke_1866),
-	North_American_1927_NAD_27_CANADA(66, "Canada (including Newfoundland Island)", Clarke_1866),
-	North_American_1927_NAD_27_CANAL_ZONE(67, "Canal Zone", Clarke_1866),
-	North_American_1927_NAD_27_CARIBBEAN(68, "Caribbean (Turks and Caicos Islands)", Clarke_1866),
-	North_American_1927_NAD_27_CENTRAL_AMERICA(69, "Central America (Belize, Costa Rica, El Salvador, Guatemala, Honduras, Nicaragua)", Clarke_1866),
-	North_American_1927_NAD_27_CUBA(70, "Cuba", Clarke_1866),
-	North_American_1927_NAD_27_GREENLAND(71, "Greenland (Hayes Peninsula)", Clarke_1866),
-	North_American_1927_NAD_27_MEXICO(72, "Mexico", Clarke_1866),
-	North_American_1927_NAD_27_MICHIGAN(73, "Michigan (used only for State Plane Coordinate System 1927)", Modified_Clarke_1866),
-	North_American_1983_NAD_83(74, "Alaska, Canada, Central America, Continental US, Mexico", GRS_80),
-	Nouvelle_Triangulation_Francaise_NTF(107, "France", Clarke_1880),
-	Nouvelle_Triangulation_Francaise_NTF_Greenwich_Prime_Meridian(1002, "France", Clarke_1880),
-	NWGL_10(111, "Worldwide", WGS_72),
+    North_American_1927_NAD_27_CONTINENTAL(62, "Continental US", Clarke_1866),
+    North_American_1927_NAD_27_ALASKA(63, "Alaska", Clarke_1866),
+    North_American_1927_NAD_27_BAHAMAS(64, "Bahamas (excluding San Salvador Island)", Clarke_1866),
+    North_American_1927_NAD_27_SAN_SALVADOR(65, "San Salvador Island", Clarke_1866),
+    North_American_1927_NAD_27_CANADA(66, "Canada (including Newfoundland Island)", Clarke_1866),
+    North_American_1927_NAD_27_CANAL_ZONE(67, "Canal Zone", Clarke_1866),
+    North_American_1927_NAD_27_CARIBBEAN(68, "Caribbean (Turks and Caicos Islands)", Clarke_1866),
+    North_American_1927_NAD_27_CENTRAL_AMERICA(69, "Central America (Belize, Costa Rica, El Salvador, Guatemala, Honduras, Nicaragua)", Clarke_1866),
+    North_American_1927_NAD_27_CUBA(70, "Cuba", Clarke_1866),
+    North_American_1927_NAD_27_GREENLAND(71, "Greenland (Hayes Peninsula)", Clarke_1866),
+    North_American_1927_NAD_27_MEXICO(72, "Mexico", Clarke_1866),
+    North_American_1927_NAD_27_MICHIGAN(73, "Michigan (used only for State Plane Coordinate System 1927)", Modified_Clarke_1866),
+    North_American_1983_NAD_83(74, "Alaska, Canada, Central America, Continental US, Mexico", GRS_80),
+    Nouvelle_Triangulation_Francaise_NTF(107, "France", Clarke_1880),
+    Nouvelle_Triangulation_Francaise_NTF_Greenwich_Prime_Meridian(1002, "France", Clarke_1880),
+    NWGL_10(111, "Worldwide", WGS_72),
     Observatorio_1966(75, "Corvo and Flores Islands (Azores)", International),
     Old_Egyptian(76, "Egypt", Helmert_1906),
@@ -125,37 +125,37 @@
     Tristan_Astro_1968(98, "Tristan da Cunha", International),
     Viti_Levu_1916(99, "Viti Levu Island (Fiji Islands)", Clarke_1880),
-	Wake_Eniwetok_1960(100, "", Hough),
-	World_Geodetic_System_1960_WGS_60(101, "", WGS_60),
-	World_Geodetic_System_1966_WGS_66(102, "", WGS_66),
-	World_Geodetic_System_1972_WGS_72(103, "", WGS_72),
-	World_Geodetic_System_1984_WGS_84(104, "", WGS_84),
-	Yacare(105, "", International),
-	Zanderij(106, "", International),
-	Custom(999, null, null);
-	
-	private final Integer code;
+    Wake_Eniwetok_1960(100, "", Hough),
+    World_Geodetic_System_1960_WGS_60(101, "", WGS_60),
+    World_Geodetic_System_1966_WGS_66(102, "", WGS_66),
+    World_Geodetic_System_1972_WGS_72(103, "", WGS_72),
+    World_Geodetic_System_1984_WGS_84(104, "", WGS_84),
+    Yacare(105, "", International),
+    Zanderij(106, "", International),
+    Custom(999, null, null);
+    
+    private final Integer code;
     private final String area;
-	private final MifEllipsoid ellipsoid;
-	private MifDatum(Integer code, String area, MifEllipsoid ellipsoid) {
-		this.code = code;
-		this.area = area;
-		this.ellipsoid = ellipsoid;
-	}
-	public final Integer getCode() {
-		return code;
-	}
+    private final MifEllipsoid ellipsoid;
+    private MifDatum(Integer code, String area, MifEllipsoid ellipsoid) {
+        this.code = code;
+        this.area = area;
+        this.ellipsoid = ellipsoid;
+    }
+    public final Integer getCode() {
+        return code;
+    }
     public final String getArea() {
         return area;
     }
-	public final MifEllipsoid getEllipsoid() {
-		return ellipsoid;
-	}
-	public static MifDatum forCode(Integer code) {
-		for (MifDatum p : values()) {
-			if (p.getCode().equals(code)) {
-				return p;
-			}
-		}
-		return null;
-	}
+    public final MifEllipsoid getEllipsoid() {
+        return ellipsoid;
+    }
+    public static MifDatum forCode(Integer code) {
+        for (MifDatum p : values()) {
+            if (p.getCode().equals(code)) {
+                return p;
+            }
+        }
+        return null;
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/MifEllipsoid.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/MifEllipsoid.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/MifEllipsoid.java	(revision 30723)
@@ -9,26 +9,26 @@
  */
 public enum MifEllipsoid {
-	Airy,
-	Modified_Airy,
-	Australian_National,
-	Bessel,
-	Bessel_1841,
-	Clarke_1866,
-	Modified_Clarke_1866,
-	Clarke_1880,
-	Modified_Clarke_1880,
-	Everest,
-	Modified_Fischer_1960,
-	Helmert_1906,
-	Hough,
-	Modified_Everest,
-	GRS_67,
-	GRS_80,
-	International,
-	Krassovsky,
-	South_American_1969,
-	WGS_60,
-	WGS_66,
-	WGS_72,
-	WGS_84
+    Airy,
+    Modified_Airy,
+    Australian_National,
+    Bessel,
+    Bessel_1841,
+    Clarke_1866,
+    Modified_Clarke_1866,
+    Clarke_1880,
+    Modified_Clarke_1880,
+    Everest,
+    Modified_Fischer_1960,
+    Helmert_1906,
+    Hough,
+    Modified_Everest,
+    GRS_67,
+    GRS_80,
+    International,
+    Krassovsky,
+    South_American_1969,
+    WGS_60,
+    WGS_66,
+    WGS_72,
+    WGS_84
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/MifProjection.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/MifProjection.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/MifProjection.java	(revision 30723)
@@ -9,45 +9,45 @@
  */
 public enum MifProjection {
-	Albers_Equal_Area_Conic(9, "aea"),
-	Azimuthal_Equidistant_polar_aspect_only(5, "aeqd"),
-	Cylindrical_Equal_Area(2, "cea"),
-	Eckert_IV(14, "eck4"),
-	Eckert_VI(15, "eck6"),
-	Equidistant_Conic_also_known_as_Simple_Conic(6, "eqdc"),
-	Gall(17, "gall"),
-	Hotine_Oblique_Mercator(7, "omerc"),
-	Lambert_Azimuthal_Equal_Area_polar_aspect_only(4, "laea"),
-	Lambert_Conformal_Conic(3, "lcc"),
-	Lambert_Conformal_Conic_modified_for_Belgium_1972(19, "lcca"),
-	Longitude_Latitude(1, "lonlat"),
-	Mercator(10, "merc"),
-	Miller_Cylindrical(11, "mill"),
-	New_Zealand_Map_Grid(18, "nzmg"),
-	Mollweide(13, "moll"),
-	Polyconic(27, "poly"),
-	Regional_Mercator(26, "merc"),
-	Robinson(12, "robin"),
-	Sinusoidal(16, "sinu"),
-	Stereographic(20, "stere"),
-	Swiss_Oblique_Mercator(25, "somerc"),
-	Transverse_Mercator_also_known_as_Gauss_Kruger(8, "tmerc"),
-	Transverse_Mercator_modified_for_Danish_System_34_Jylland_Fyn(21, "tmerc"),
-	Transverse_Mercator_modified_for_Sjaelland(22, "tmerc"),
-	Transverse_Mercator_modified_for_Danish_System_45_Bornholm(23, "tmerc"),
-	Transverse_Mercator_modified_for_Finnish_KKJ(24, "tmerc");
-	
-	private final Integer code;
-	private final String proj4id;
-	
-	private MifProjection(Integer code, String proj4id) {
-		this.code = code;
-		this.proj4id = proj4id;
-	}
-	
-	public final Integer getCode() {
-		return code;
-	}
+    Albers_Equal_Area_Conic(9, "aea"),
+    Azimuthal_Equidistant_polar_aspect_only(5, "aeqd"),
+    Cylindrical_Equal_Area(2, "cea"),
+    Eckert_IV(14, "eck4"),
+    Eckert_VI(15, "eck6"),
+    Equidistant_Conic_also_known_as_Simple_Conic(6, "eqdc"),
+    Gall(17, "gall"),
+    Hotine_Oblique_Mercator(7, "omerc"),
+    Lambert_Azimuthal_Equal_Area_polar_aspect_only(4, "laea"),
+    Lambert_Conformal_Conic(3, "lcc"),
+    Lambert_Conformal_Conic_modified_for_Belgium_1972(19, "lcca"),
+    Longitude_Latitude(1, "lonlat"),
+    Mercator(10, "merc"),
+    Miller_Cylindrical(11, "mill"),
+    New_Zealand_Map_Grid(18, "nzmg"),
+    Mollweide(13, "moll"),
+    Polyconic(27, "poly"),
+    Regional_Mercator(26, "merc"),
+    Robinson(12, "robin"),
+    Sinusoidal(16, "sinu"),
+    Stereographic(20, "stere"),
+    Swiss_Oblique_Mercator(25, "somerc"),
+    Transverse_Mercator_also_known_as_Gauss_Kruger(8, "tmerc"),
+    Transverse_Mercator_modified_for_Danish_System_34_Jylland_Fyn(21, "tmerc"),
+    Transverse_Mercator_modified_for_Sjaelland(22, "tmerc"),
+    Transverse_Mercator_modified_for_Danish_System_45_Bornholm(23, "tmerc"),
+    Transverse_Mercator_modified_for_Finnish_KKJ(24, "tmerc");
     
-	/**
+    private final Integer code;
+    private final String proj4id;
+    
+    private MifProjection(Integer code, String proj4id) {
+        this.code = code;
+        this.proj4id = proj4id;
+    }
+    
+    public final Integer getCode() {
+        return code;
+    }
+    
+    /**
      * Replies the Proj.4 identifier.
      *
@@ -59,11 +59,11 @@
     }
     
-	public static MifProjection forCode(Integer code) {
-		for (MifProjection p : values()) {
-			if (p.getCode().equals(code)) {
-				return p;
-			}
-		}
-		return null;
-	}
+    public static MifProjection forCode(Integer code) {
+        for (MifProjection p : values()) {
+            if (p.getCode().equals(code)) {
+                return p;
+            }
+        }
+        return null;
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/MifTabImporter.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/MifTabImporter.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/MifTabImporter.java	(revision 30723)
@@ -15,5 +15,5 @@
 
 public class MifTabImporter extends AbstractImporter {
-	
+    
     public static final ExtensionFileFilter MIF_TAB_FILE_FILTER = new ExtensionFileFilter(
             OdConstants.MIF_EXT+","+OdConstants.TAB_EXT, OdConstants.MIF_EXT, tr("MapInfo files") + " (*."+OdConstants.MIF_EXT+",*."+OdConstants.TAB_EXT+")");
@@ -23,16 +23,16 @@
     }
 
-	@Override
-	protected DataSet parseDataSet(InputStream in, ProgressMonitor instance)
-			throws IllegalDataException {
-		try {
-			if (file.getName().toLowerCase().endsWith(OdConstants.MIF_EXT)) {
-				return MifReader.parseDataSet(in, file, handler, instance);
-			} else {
-				return TabReader.parseDataSet(in, file, handler, instance);
-			}
-		} catch (IOException e) {
-			throw new IllegalDataException(e);
-		}
-	}
+    @Override
+    protected DataSet parseDataSet(InputStream in, ProgressMonitor instance)
+            throws IllegalDataException {
+        try {
+            if (file.getName().toLowerCase().endsWith(OdConstants.MIF_EXT)) {
+                return MifReader.parseDataSet(in, file, handler, instance);
+            } else {
+                return TabReader.parseDataSet(in, file, handler, instance);
+            }
+        } catch (IOException e) {
+            throw new IllegalDataException(e);
+        }
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/MifUnit.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/MifUnit.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/MifUnit.java	(revision 30723)
@@ -9,32 +9,32 @@
  */
 public enum MifUnit {
-	Centimeters(6),
-	Chains(31),
-	Feet(3),
-	Inches(2),
-	Kilometers(1),
-	Links(30),
-	Meters(7),
-	Miles(0),
-	Millimeters(5),
-	Nautical_Miles(9),
-	Rods(32),
-	US_Survey_Feet(8),
-	Yards(4);
-		
-	private final Integer code;
-	private MifUnit(Integer code) {
-		this.code = code;
-	}
-	public final Integer getCode() {
-		return code;
-	}
-	public static MifUnit forCode(Integer code) {
-		for (MifUnit p : values()) {
-			if (p.getCode().equals(code)) {
-				return p;
-			}
-		}
-		return null;
-	}
+    Centimeters(6),
+    Chains(31),
+    Feet(3),
+    Inches(2),
+    Kilometers(1),
+    Links(30),
+    Meters(7),
+    Miles(0),
+    Millimeters(5),
+    Nautical_Miles(9),
+    Rods(32),
+    US_Survey_Feet(8),
+    Yards(4);
+        
+    private final Integer code;
+    private MifUnit(Integer code) {
+        this.code = code;
+    }
+    public final Integer getCode() {
+        return code;
+    }
+    public static MifUnit forCode(Integer code) {
+        for (MifUnit p : values()) {
+            if (p.getCode().equals(code)) {
+                return p;
+            }
+        }
+        return null;
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/ShpHandler.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/ShpHandler.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/ShpHandler.java	(revision 30723)
@@ -10,8 +10,8 @@
 public interface ShpHandler extends GeographicHandler {
 
-	public void notifyFeatureParsed(Object feature, DataSet result, Set<OsmPrimitive> featurePrimitives);
+    public void notifyFeatureParsed(Object feature, DataSet result, Set<OsmPrimitive> featurePrimitives);
 
-	public void setDbfCharset(Charset charset);
-	
-	public Charset getDbfCharset();
+    public void setDbfCharset(Charset charset);
+    
+    public Charset getDbfCharset();
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/ShpImporter.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/ShpImporter.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/ShpImporter.java	(revision 30723)
@@ -15,5 +15,5 @@
 
 public class ShpImporter extends AbstractImporter {
-	
+    
     public static final ExtensionFileFilter SHP_FILE_FILTER = new ExtensionFileFilter(
             OdConstants.SHP_EXT, OdConstants.SHP_EXT, tr("Shapefiles") + " (*."+OdConstants.SHP_EXT+")");
@@ -23,12 +23,12 @@
     }
 
-	@Override
-	protected DataSet parseDataSet(InputStream in, ProgressMonitor instance)
-			throws IllegalDataException {
-		try {
-			return ShpReader.parseDataSet(in, file, handler, instance);
-		} catch (IOException e) {
-			throw new IllegalDataException(e);
-		}
-	}
+    @Override
+    protected DataSet parseDataSet(InputStream in, ProgressMonitor instance)
+            throws IllegalDataException {
+        try {
+            return ShpReader.parseDataSet(in, file, handler, instance);
+        } catch (IOException e) {
+            throw new IllegalDataException(e);
+        }
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/ShpReader.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/ShpReader.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/ShpReader.java	(revision 30723)
@@ -57,39 +57,39 @@
 public class ShpReader extends GeographicReader {
 
-	private final ShpHandler handler;
-	private final Set<OsmPrimitive> featurePrimitives = new HashSet<>();
-	
-	public ShpReader(ShpHandler handler) {
-		super(handler, NationalHandlers.DEFAULT_SHP_HANDLERS);
-		this.handler = handler;
-	}
-
-	public static DataSet parseDataSet(InputStream in, File file,
-			AbstractDataSetHandler handler, ProgressMonitor instance) throws IOException {
-		if (in != null) {
-			in.close();
-		}
-		try {
-			return new ShpReader(handler != null ? handler.getShpHandler() : null).parse(file, instance);
-		} catch (IOException e) {
-			throw e;
-		} catch (Throwable t) {
-			throw new IOException(t);
-		}
-	}
-	
-	private void parseFeature(Feature feature, final Component parent) 
-			throws UserCancelException, GeoMathTransformException, FactoryException, GeoCrsException, MismatchedDimensionException, TransformException {
-		featurePrimitives.clear();
-		GeometryAttribute geometry = feature.getDefaultGeometryProperty();
-		if (geometry != null) {
-
-			GeometryDescriptor desc = geometry.getDescriptor();
-			
-			if (crs == null) {
-    			if (desc != null && desc.getCoordinateReferenceSystem() != null) {
-    				crs = desc.getCoordinateReferenceSystem();
-    			} else if (!GraphicsEnvironment.isHeadless()) {
-    			    GuiHelper.runInEDTAndWait(new Runnable() {
+    private final ShpHandler handler;
+    private final Set<OsmPrimitive> featurePrimitives = new HashSet<>();
+    
+    public ShpReader(ShpHandler handler) {
+        super(handler, NationalHandlers.DEFAULT_SHP_HANDLERS);
+        this.handler = handler;
+    }
+
+    public static DataSet parseDataSet(InputStream in, File file,
+            AbstractDataSetHandler handler, ProgressMonitor instance) throws IOException {
+        if (in != null) {
+            in.close();
+        }
+        try {
+            return new ShpReader(handler != null ? handler.getShpHandler() : null).parse(file, instance);
+        } catch (IOException e) {
+            throw e;
+        } catch (Throwable t) {
+            throw new IOException(t);
+        }
+    }
+    
+    private void parseFeature(Feature feature, final Component parent) 
+            throws UserCancelException, GeoMathTransformException, FactoryException, GeoCrsException, MismatchedDimensionException, TransformException {
+        featurePrimitives.clear();
+        GeometryAttribute geometry = feature.getDefaultGeometryProperty();
+        if (geometry != null) {
+
+            GeometryDescriptor desc = geometry.getDescriptor();
+            
+            if (crs == null) {
+                if (desc != null && desc.getCoordinateReferenceSystem() != null) {
+                    crs = desc.getCoordinateReferenceSystem();
+                } else if (!GraphicsEnvironment.isHeadless()) {
+                    GuiHelper.runInEDTAndWait(new Runnable() {
                         @Override
                         public void run() {
@@ -104,8 +104,8 @@
                         }
                     });
-    			} else {
-    			    // Always use WGS84 in headless mode (used for unit tests only)
-    			    crs = wgs84;
-    			}
+                } else {
+                    // Always use WGS84 in headless mode (used for unit tests only)
+                    crs = wgs84;
+                }
                 if (crs != null) {
                     findMathTransform(parent, true);
@@ -113,181 +113,181 @@
                     throw new GeoCrsException(tr("Unable to detect CRS !"));
                 }
-			}
-			
-			OsmPrimitive primitive = null;
-			
-			if (geometry.getValue() instanceof Point) {
-				primitive = createOrGetEmptyNode((Point) geometry.getValue());
-				
-			} else if (geometry.getValue() instanceof GeometryCollection) { // Deals with both MultiLineString and MultiPolygon
-				GeometryCollection mp = (GeometryCollection) geometry.getValue();
-				int nGeometries = mp.getNumGeometries(); 
-				if (nGeometries < 1) {
-					System.err.println("Error: empty geometry collection found");
-				} else {
-					Relation r = null;
-					Way w = null;
-					
-					for (int i=0; i<nGeometries; i++) {
-						Geometry g = mp.getGeometryN(i);
-						if (g instanceof Polygon) {
-							Polygon p = (Polygon) g;
-							// Do not create relation if there's only one polygon without interior ring
-							// except if handler prefers it
-							if (r == null && (nGeometries > 1 || p.getNumInteriorRing() > 0 || (handler != null && handler.preferMultipolygonToSimpleWay()))) {
-								r = createMultipolygon();
-							}
-							w = createWay(p.getExteriorRing());
-							if (r != null) {
-								addWayToMp(r, "outer", w);
-								for (int j=0; j<p.getNumInteriorRing(); j++) {
-									addWayToMp(r, "inner", createWay(p.getInteriorRingN(j)));
-								}
-							}
-						} else if (g instanceof LineString) {
-							w = createWay((LineString) g);
-						} else if (g instanceof Point) {
-							// Some belgian data sets hold points into collections ?!
-							readNonGeometricAttributes(feature, createOrGetNode((Point) g));
-						} else {
-							System.err.println("Error: unsupported geometry : "+g);
-						}
-					}
-					primitive = r != null ? r : w;
-				}
-			} else {
-				// Debug unknown geometry
-				Main.debug("\ttype: "+geometry.getType());
-				Main.debug("\tbounds: "+geometry.getBounds());
-				Main.debug("\tdescriptor: "+desc);
-				Main.debug("\tname: "+geometry.getName());
-				Main.debug("\tvalue: "+geometry.getValue());
-				Main.debug("\tid: "+geometry.getIdentifier());
-				Main.debug("-------------------------------------------------------------");
-			}
-			
-			if (primitive != null) {
-				// Read primitive non geometric attributes
-				readNonGeometricAttributes(feature, primitive);
-			}
-		}
-	}
-
-	public DataSet parse(File file, ProgressMonitor instance) throws IOException {
-		crs = null;
-		transform = null;
-		try {
-			if (file != null) { 
-		        Map<String, Serializable> params = new HashMap<>();
-		        Charset charset = null;
-		        params.put(ShapefileDataStoreFactory.URLP.key, file.toURI().toURL());
-		        if (handler != null && handler.getDbfCharset() != null) {
-		            charset = handler.getDbfCharset();
-		        } else {
-		            String path = file.getAbsolutePath();
-		            // See http://gis.stackexchange.com/a/3663/17245
-		            path = path.substring(0, path.lastIndexOf('.')) + ".cpg";
+            }
+            
+            OsmPrimitive primitive = null;
+            
+            if (geometry.getValue() instanceof Point) {
+                primitive = createOrGetEmptyNode((Point) geometry.getValue());
+                
+            } else if (geometry.getValue() instanceof GeometryCollection) { // Deals with both MultiLineString and MultiPolygon
+                GeometryCollection mp = (GeometryCollection) geometry.getValue();
+                int nGeometries = mp.getNumGeometries(); 
+                if (nGeometries < 1) {
+                    System.err.println("Error: empty geometry collection found");
+                } else {
+                    Relation r = null;
+                    Way w = null;
+                    
+                    for (int i=0; i<nGeometries; i++) {
+                        Geometry g = mp.getGeometryN(i);
+                        if (g instanceof Polygon) {
+                            Polygon p = (Polygon) g;
+                            // Do not create relation if there's only one polygon without interior ring
+                            // except if handler prefers it
+                            if (r == null && (nGeometries > 1 || p.getNumInteriorRing() > 0 || (handler != null && handler.preferMultipolygonToSimpleWay()))) {
+                                r = createMultipolygon();
+                            }
+                            w = createWay(p.getExteriorRing());
+                            if (r != null) {
+                                addWayToMp(r, "outer", w);
+                                for (int j=0; j<p.getNumInteriorRing(); j++) {
+                                    addWayToMp(r, "inner", createWay(p.getInteriorRingN(j)));
+                                }
+                            }
+                        } else if (g instanceof LineString) {
+                            w = createWay((LineString) g);
+                        } else if (g instanceof Point) {
+                            // Some belgian data sets hold points into collections ?!
+                            readNonGeometricAttributes(feature, createOrGetNode((Point) g));
+                        } else {
+                            System.err.println("Error: unsupported geometry : "+g);
+                        }
+                    }
+                    primitive = r != null ? r : w;
+                }
+            } else {
+                // Debug unknown geometry
+                Main.debug("\ttype: "+geometry.getType());
+                Main.debug("\tbounds: "+geometry.getBounds());
+                Main.debug("\tdescriptor: "+desc);
+                Main.debug("\tname: "+geometry.getName());
+                Main.debug("\tvalue: "+geometry.getValue());
+                Main.debug("\tid: "+geometry.getIdentifier());
+                Main.debug("-------------------------------------------------------------");
+            }
+            
+            if (primitive != null) {
+                // Read primitive non geometric attributes
+                readNonGeometricAttributes(feature, primitive);
+            }
+        }
+    }
+
+    public DataSet parse(File file, ProgressMonitor instance) throws IOException {
+        crs = null;
+        transform = null;
+        try {
+            if (file != null) { 
+                Map<String, Serializable> params = new HashMap<>();
+                Charset charset = null;
+                params.put(ShapefileDataStoreFactory.URLP.key, file.toURI().toURL());
+                if (handler != null && handler.getDbfCharset() != null) {
+                    charset = handler.getDbfCharset();
+                } else {
+                    String path = file.getAbsolutePath();
+                    // See http://gis.stackexchange.com/a/3663/17245
+                    path = path.substring(0, path.lastIndexOf('.')) + ".cpg";
                     Path cpg = new File(path).toPath();
-		            if (Files.exists(cpg)) {
-		                try (BufferedReader reader = Files.newBufferedReader(cpg, StandardCharsets.UTF_8)) {
-		                    charset = Charset.forName(reader.readLine());
+                    if (Files.exists(cpg)) {
+                        try (BufferedReader reader = Files.newBufferedReader(cpg, StandardCharsets.UTF_8)) {
+                            charset = Charset.forName(reader.readLine());
                         } catch (IOException | UnsupportedCharsetException | IllegalCharsetNameException e) {
                             Main.warn(e);
                         }
-		            }
-		        }
-		        if (charset != null) {
-		            Main.info("Using charset "+charset);
-		            params.put(ShapefileDataStoreFactory.DBFCHARSET.key, charset.name());
-		        }
-				DataStore dataStore = new ShapefileDataStoreFactory().createDataStore(params);
-				if (dataStore == null) {
-					throw new IOException(tr("Unable to find a data store for file {0}", file.getName()));
-				}
-				
-				String[] typeNames = dataStore.getTypeNames();
-				String typeName = typeNames[0];
-	
-				FeatureSource<?,?> featureSource = dataStore.getFeatureSource(typeName);
-				FeatureCollection<?,?> collection = featureSource.getFeatures();
-				FeatureIterator<?> iterator = collection.features();
-				
-				if (instance != null) {
-					instance.beginTask(tr("Loading shapefile ({0} features)", collection.size()), collection.size());
-				}
-				
-				int n = 0;
-				
-				Component parent = instance != null ? instance.getWindowParent() : Main.parent;
-				
-				try {
-					while (iterator.hasNext()) {
-						n++;
-						try {
-							Feature feature = iterator.next();
-							parseFeature(feature, parent);
-							if (handler != null) {
-								handler.notifyFeatureParsed(feature, ds, featurePrimitives);
-							}
-						} catch (UserCancelException e) {
+                    }
+                }
+                if (charset != null) {
+                    Main.info("Using charset "+charset);
+                    params.put(ShapefileDataStoreFactory.DBFCHARSET.key, charset.name());
+                }
+                DataStore dataStore = new ShapefileDataStoreFactory().createDataStore(params);
+                if (dataStore == null) {
+                    throw new IOException(tr("Unable to find a data store for file {0}", file.getName()));
+                }
+                
+                String[] typeNames = dataStore.getTypeNames();
+                String typeName = typeNames[0];
+    
+                FeatureSource<?,?> featureSource = dataStore.getFeatureSource(typeName);
+                FeatureCollection<?,?> collection = featureSource.getFeatures();
+                FeatureIterator<?> iterator = collection.features();
+                
+                if (instance != null) {
+                    instance.beginTask(tr("Loading shapefile ({0} features)", collection.size()), collection.size());
+                }
+                
+                int n = 0;
+                
+                Component parent = instance != null ? instance.getWindowParent() : Main.parent;
+                
+                try {
+                    while (iterator.hasNext()) {
+                        n++;
+                        try {
+                            Feature feature = iterator.next();
+                            parseFeature(feature, parent);
+                            if (handler != null) {
+                                handler.notifyFeatureParsed(feature, ds, featurePrimitives);
+                            }
+                        } catch (UserCancelException e) {
                             e.printStackTrace();
-							return ds;
-						}
-						if (instance != null) {
-							instance.worked(1);
-							instance.setCustomText(n+"/"+collection.size());
-						}
-					}
-				} catch (Throwable e) {
+                            return ds;
+                        }
+                        if (instance != null) {
+                            instance.worked(1);
+                            instance.setCustomText(n+"/"+collection.size());
+                        }
+                    }
+                } catch (Throwable e) {
                     e.printStackTrace();
-				} finally {
-					iterator.close();
-					nodes.clear();
-					if (instance != null) {
-						instance.setCustomText(null);
-					}
-				}
-			}
-		} catch (IOException e) {
+                } finally {
+                    iterator.close();
+                    nodes.clear();
+                    if (instance != null) {
+                        instance.setCustomText(null);
+                    }
+                }
+            }
+        } catch (IOException e) {
             e.printStackTrace();
-			throw e;
-		} catch (Throwable t) {
+            throw e;
+        } catch (Throwable t) {
             t.printStackTrace();
-			throw new IOException(t);
-		}
-		return ds;
-	}
-	
-	private static final void readNonGeometricAttributes(Feature feature, OsmPrimitive primitive) {
+            throw new IOException(t);
+        }
+        return ds;
+    }
+    
+    private static final void readNonGeometricAttributes(Feature feature, OsmPrimitive primitive) {
             try {
-		for (Property prop : feature.getProperties()) {
-			if (!(prop instanceof GeometryAttribute)) {
-				Name name = prop.getName();
-				Object value = prop.getValue();
-				if (name != null && value != null) {
-					String sName = name.toString();
-					String sValue = value.toString();
-					if (!sName.isEmpty() && !sValue.isEmpty()) {
+        for (Property prop : feature.getProperties()) {
+            if (!(prop instanceof GeometryAttribute)) {
+                Name name = prop.getName();
+                Object value = prop.getValue();
+                if (name != null && value != null) {
+                    String sName = name.toString();
+                    String sValue = value.toString();
+                    if (!sName.isEmpty() && !sValue.isEmpty()) {
                                                primitive.put(sName, sValue);
-					}
-				}
-			}
-		}
+                    }
+                }
+            }
+        }
             } catch (Exception e) {
                 e.printStackTrace();
             }
-	}
-
-	@Override
-	protected Node createOrGetNode(Point p) throws MismatchedDimensionException, TransformException {
-		Node n = super.createOrGetNode(p);
-		featurePrimitives.add(n);
-		return n;
-	}
-	
-	@Override
-	protected <T extends OsmPrimitive> T addOsmPrimitive(T p) {
-		featurePrimitives.add(p);
-		return super.addOsmPrimitive(p);
-	}
+    }
+
+    @Override
+    protected Node createOrGetNode(Point p) throws MismatchedDimensionException, TransformException {
+        Node n = super.createOrGetNode(p);
+        featurePrimitives.add(n);
+        return n;
+    }
+    
+    @Override
+    protected <T extends OsmPrimitive> T addOsmPrimitive(T p) {
+        featurePrimitives.add(p);
+        return super.addOsmPrimitive(p);
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/TabReader.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/TabReader.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/TabReader.java	(revision 30723)
@@ -29,94 +29,94 @@
 public class TabReader extends AbstractMapInfoReader {
 
-	private Charset datCharset;
-	private final AbstractDataSetHandler handler;
-	
-	public TabReader(AbstractDataSetHandler handler) {
-		this.handler = handler;
-	}
+    private Charset datCharset;
+    private final AbstractDataSetHandler handler;
+    
+    public TabReader(AbstractDataSetHandler handler) {
+        this.handler = handler;
+    }
 
-	public static DataSet parseDataSet(InputStream in, File file,
-			AbstractDataSetHandler handler, ProgressMonitor instance) throws IOException {
-		return new TabReader(handler).parse(in, file, instance, Charset.forName(OdConstants.ISO8859_15));
-	}
-		
-	private class TabOsmReader extends SpreadSheetReader {
+    public static DataSet parseDataSet(InputStream in, File file,
+            AbstractDataSetHandler handler, ProgressMonitor instance) throws IOException {
+        return new TabReader(handler).parse(in, file, instance, Charset.forName(OdConstants.ISO8859_15));
+    }
+        
+    private class TabOsmReader extends SpreadSheetReader {
 
-		private final DbaseFileReader dbfReader;
-		public TabOsmReader(SpreadSheetHandler handler, TabFiles tabFiles) throws IOException {
-			super(handler);
-			this.dbfReader = new DbaseFileReader(tabFiles, false, datCharset, null);
-		}
+        private final DbaseFileReader dbfReader;
+        public TabOsmReader(SpreadSheetHandler handler, TabFiles tabFiles) throws IOException {
+            super(handler);
+            this.dbfReader = new DbaseFileReader(tabFiles, false, datCharset, null);
+        }
 
-		@Override
-		protected void initResources(InputStream in,
-				ProgressMonitor progressMonitor) throws IOException {
-		}
+        @Override
+        protected void initResources(InputStream in,
+                ProgressMonitor progressMonitor) throws IOException {
+        }
 
-		@Override
-		protected String[] readLine(ProgressMonitor progressMonitor)
-				throws IOException {
-			if (!dbfReader.hasNext()) {
-				return null;
-			}
-        	List<String> result = new ArrayList<>();
-			Row row = dbfReader.readRow();
-        	for (int i=0; i<columns.size(); i++) {
-        		Object o = row.read(i);
-        		if (o != null) {
-        			result.add(o.toString());
-        		} else {
-        			result.add("");
-        		}
-        	}
-        	return result.toArray(new String[0]);
-		}
-	}
+        @Override
+        protected String[] readLine(ProgressMonitor progressMonitor)
+                throws IOException {
+            if (!dbfReader.hasNext()) {
+                return null;
+            }
+            List<String> result = new ArrayList<>();
+            Row row = dbfReader.readRow();
+            for (int i=0; i<columns.size(); i++) {
+                Object o = row.read(i);
+                if (o != null) {
+                    result.add(o.toString());
+                } else {
+                    result.add("");
+                }
+            }
+            return result.toArray(new String[0]);
+        }
+    }
 
-	private DataSet parse(InputStream in, File file, ProgressMonitor instance, Charset charset) throws IOException {
-		headerReader = new BufferedReader(new InputStreamReader(in, charset));
-		parseHeader();
+    private DataSet parse(InputStream in, File file, ProgressMonitor instance, Charset charset) throws IOException {
+        headerReader = new BufferedReader(new InputStreamReader(in, charset));
+        parseHeader();
         try {
-        	File dataFile = getDataFile(file, ".dat");
-        	ds = new TabOsmReader(handler != null ? handler.getSpreadSheetHandler() : null, new TabFiles(file, dataFile)).
-        			doParse(columns.toArray(new String[0]), instance);
+            File dataFile = getDataFile(file, ".dat");
+            ds = new TabOsmReader(handler != null ? handler.getSpreadSheetHandler() : null, new TabFiles(file, dataFile)).
+                    doParse(columns.toArray(new String[0]), instance);
         } catch (IOException e) {
-        	System.err.println(e.getMessage());
+            System.err.println(e.getMessage());
         }
-		return ds;
-	}
+        return ds;
+    }
 
-	@Override
-	protected void parseHeaderLine(String[] words) throws IOException {
-		if (words[0].equalsIgnoreCase("!table")) {
-			// Do nothing
-		} else if (words[0].equalsIgnoreCase("!version")) {
-			parseVersion(words);
-		} else if (words[0].equalsIgnoreCase("!charset")) {
-			parseCharset(words);
-		} else if (numcolumns > 0) {
-			parseField(words);
-		} else if (words[0].equalsIgnoreCase("Definition")) {
-			// Do nothing
-		} else if (words[0].equalsIgnoreCase("Type")) {
-			parseType(words);
-		} else if (words[0].equalsIgnoreCase("Fields")) {
-			parseColumns(words);
-		} else if (!line.isEmpty()) {
-			System.err.println("Line "+lineNum+". Unknown clause in header: "+line);
-		}
-	}
+    @Override
+    protected void parseHeaderLine(String[] words) throws IOException {
+        if (words[0].equalsIgnoreCase("!table")) {
+            // Do nothing
+        } else if (words[0].equalsIgnoreCase("!version")) {
+            parseVersion(words);
+        } else if (words[0].equalsIgnoreCase("!charset")) {
+            parseCharset(words);
+        } else if (numcolumns > 0) {
+            parseField(words);
+        } else if (words[0].equalsIgnoreCase("Definition")) {
+            // Do nothing
+        } else if (words[0].equalsIgnoreCase("Type")) {
+            parseType(words);
+        } else if (words[0].equalsIgnoreCase("Fields")) {
+            parseColumns(words);
+        } else if (!line.isEmpty()) {
+            System.err.println("Line "+lineNum+". Unknown clause in header: "+line);
+        }
+    }
 
-	private void parseField(String[] words) {
-		columns.add(words[0]);
-		--numcolumns;
-	}
+    private void parseField(String[] words) {
+        columns.add(words[0]);
+        --numcolumns;
+    }
 
-	private void parseType(String[] words) throws IllegalCharsetNameException, UnsupportedCharsetException {
-		if (words[1].equalsIgnoreCase("NATIVE") && words[2].equalsIgnoreCase("Charset")) {
-			datCharset = parseCharset(words, 3);
-		} else {
-			System.err.println("Line "+lineNum+". Unknown Type clause in header: "+line);
-		}
-	}
+    private void parseType(String[] words) throws IllegalCharsetNameException, UnsupportedCharsetException {
+        if (words[1].equalsIgnoreCase("NATIVE") && words[2].equalsIgnoreCase("Charset")) {
+            datCharset = parseCharset(words, 3);
+        } else {
+            System.err.println("Line "+lineNum+". Unknown Type clause in header: "+line);
+        }
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/CsvHandler.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/CsvHandler.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/CsvHandler.java	(revision 30723)
@@ -6,12 +6,12 @@
 public interface CsvHandler extends SpreadSheetHandler {
 
-	public void setCharset(Charset charset);
+    public void setCharset(Charset charset);
 
-	public void setCharset(String charset);
+    public void setCharset(String charset);
 
-	public Charset getCharset();
+    public Charset getCharset();
 
-	public void setSeparator(String sep);
-	
-	public String getSeparator();
+    public void setSeparator(String sep);
+    
+    public String getSeparator();
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/CsvImporter.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/CsvImporter.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/CsvImporter.java	(revision 30723)
@@ -23,18 +23,18 @@
     
     public static final String COLOMBUS_HEADER = "INDEX,TAG,DATE,TIME,LATITUDE N/S,LONGITUDE E/W,HEIGHT,SPEED,HEADING,FIX MODE,VALID,PDOP,HDOP,VDOP,VOX";
-	
+    
     public CsvImporter() {
         super(CSV_FILE_FILTER);
     }
 
-	@Override
-	protected DataSet parseDataSet(InputStream in, ProgressMonitor instance)
-			throws IllegalDataException {
-		try {
-			return CsvReader.parseDataSet(in, handler, instance);
-		} catch (IOException e) {
-			throw new IllegalDataException(e);
-		}
-	}
+    @Override
+    protected DataSet parseDataSet(InputStream in, ProgressMonitor instance)
+            throws IllegalDataException {
+        try {
+            return CsvReader.parseDataSet(in, handler, instance);
+        } catch (IOException e) {
+            throw new IllegalDataException(e);
+        }
+    }
 
     @Override
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/CsvReader.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/CsvReader.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/CsvReader.java	(revision 30723)
@@ -17,59 +17,59 @@
 public class CsvReader extends SpreadSheetReader {
 
-	private final Charset charset;
-	private String sep;
-	
-	private BufferedReader reader;
-	private String line;
+    private final Charset charset;
+    private String sep;
+    
+    private BufferedReader reader;
+    private String line;
 
-	public CsvReader(CsvHandler handler) {
-		this(handler, ";");
-	}
+    public CsvReader(CsvHandler handler) {
+        this(handler, ";");
+    }
 
-	public CsvReader(CsvHandler handler, String defaultSep) {
-		super(handler);
-		this.charset = handler != null && handler.getCharset() != null ? handler.getCharset() : Charset.forName(OdConstants.UTF8);
-		this.sep = handler != null && handler.getSeparator() != null ? handler.getSeparator() : defaultSep;
-	}
-	
-	public static DataSet parseDataSet(InputStream in, AbstractDataSetHandler handler, ProgressMonitor instance) throws IOException {
-		CsvHandler csvHandler = null;
-		if (handler != null && handler.getSpreadSheetHandler() instanceof CsvHandler) {
-			csvHandler = (CsvHandler) handler.getSpreadSheetHandler();
-		}
-		CsvReader csvReader = new CsvReader(csvHandler);
-		try {
-			return csvReader.parse(in, instance);
-		} catch (IllegalArgumentException e) {
-			if (csvHandler == null || csvHandler.getSeparator() == null || ";".equals(csvHandler.getSeparator())) {
-				// If default sep has been used, try comma
-				Main.warn(e.getMessage());
-				csvReader.sep = ",";
-				return csvReader.doParse(csvReader.splitLine(), instance);
-			} else {
-				throw e;
-			}
-		}
-	}
+    public CsvReader(CsvHandler handler, String defaultSep) {
+        super(handler);
+        this.charset = handler != null && handler.getCharset() != null ? handler.getCharset() : Charset.forName(OdConstants.UTF8);
+        this.sep = handler != null && handler.getSeparator() != null ? handler.getSeparator() : defaultSep;
+    }
+    
+    public static DataSet parseDataSet(InputStream in, AbstractDataSetHandler handler, ProgressMonitor instance) throws IOException {
+        CsvHandler csvHandler = null;
+        if (handler != null && handler.getSpreadSheetHandler() instanceof CsvHandler) {
+            csvHandler = (CsvHandler) handler.getSpreadSheetHandler();
+        }
+        CsvReader csvReader = new CsvReader(csvHandler);
+        try {
+            return csvReader.parse(in, instance);
+        } catch (IllegalArgumentException e) {
+            if (csvHandler == null || csvHandler.getSeparator() == null || ";".equals(csvHandler.getSeparator())) {
+                // If default sep has been used, try comma
+                Main.warn(e.getMessage());
+                csvReader.sep = ",";
+                return csvReader.doParse(csvReader.splitLine(), instance);
+            } else {
+                throw e;
+            }
+        }
+    }
 
-	@Override
-	protected void initResources(InputStream in, ProgressMonitor progressMonitor) throws IOException {
-		Main.info("Parsing CSV file using charset "+charset+" and separator '"+sep+"'");
+    @Override
+    protected void initResources(InputStream in, ProgressMonitor progressMonitor) throws IOException {
+        Main.info("Parsing CSV file using charset "+charset+" and separator '"+sep+"'");
 
-		reader = new BufferedReader(new InputStreamReader(in, charset));
-	}
+        reader = new BufferedReader(new InputStreamReader(in, charset));
+    }
 
-	@Override
-	protected String[] readLine(ProgressMonitor progressMonitor) throws IOException {
-		line = reader.readLine();
-		return splitLine();
-	}
-	
-	private final String[] splitLine() {
-		if (line != null) {
-			return OdUtils.stripQuotesAndExtraChars(line.split(sep), sep);
-		} else {
-			return null;
-		}
-	}
+    @Override
+    protected String[] readLine(ProgressMonitor progressMonitor) throws IOException {
+        line = reader.readLine();
+        return splitLine();
+    }
+    
+    private final String[] splitLine() {
+        if (line != null) {
+            return OdUtils.stripQuotesAndExtraChars(line.split(sep), sep);
+        } else {
+            return null;
+        }
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/DefaultCsvHandler.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/DefaultCsvHandler.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/DefaultCsvHandler.java	(revision 30723)
@@ -6,30 +6,30 @@
 public class DefaultCsvHandler extends DefaultSpreadSheetHandler implements CsvHandler {
 
-	private Charset charset = null;
-	private String separator = null;
-	
-	@Override
-	public void setCharset(Charset cs) {
-		charset = cs;
-	}
+    private Charset charset = null;
+    private String separator = null;
+    
+    @Override
+    public void setCharset(Charset cs) {
+        charset = cs;
+    }
 
-	@Override
-	public void setCharset(String charset) {
-		setCharset(Charset.forName(charset));
-	}
+    @Override
+    public void setCharset(String charset) {
+        setCharset(Charset.forName(charset));
+    }
 
-	@Override
-	public Charset getCharset() {
-		return charset;
-	}
+    @Override
+    public Charset getCharset() {
+        return charset;
+    }
 
-	@Override
-	public void setSeparator(String sep) {
-		separator = sep;
-	}
+    @Override
+    public void setSeparator(String sep) {
+        separator = sep;
+    }
 
-	@Override
-	public String getSeparator() {
-		return separator;
-	}
+    @Override
+    public String getSeparator() {
+        return separator;
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/DefaultSpreadSheetHandler.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/DefaultSpreadSheetHandler.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/DefaultSpreadSheetHandler.java	(revision 30723)
@@ -12,65 +12,65 @@
 public class DefaultSpreadSheetHandler implements SpreadSheetHandler {
 
-	private int sheetNumber = -1;
-	private int lineNumber = -1;
-	private boolean handlesProjection = false;
-	
-	private int xCol = -1;
-	private int yCol = -1;
-	
-	@Override
-	public int getSheetNumber() {
-		return sheetNumber;
-	}
+    private int sheetNumber = -1;
+    private int lineNumber = -1;
+    private boolean handlesProjection = false;
+    
+    private int xCol = -1;
+    private int yCol = -1;
+    
+    @Override
+    public int getSheetNumber() {
+        return sheetNumber;
+    }
 
-	@Override
-	public void setSheetNumber(int n) {
-		sheetNumber = n;
-	}
-	
-	@Override
-	public boolean handlesProjection() {
-		return handlesProjection;
-	}
+    @Override
+    public void setSheetNumber(int n) {
+        sheetNumber = n;
+    }
+    
+    @Override
+    public boolean handlesProjection() {
+        return handlesProjection;
+    }
 
-	@Override
-	public void setHandlesProjection(boolean handle) {
-		handlesProjection = handle;
-	}
+    @Override
+    public void setHandlesProjection(boolean handle) {
+        handlesProjection = handle;
+    }
 
-	@Override
-	public LatLon getCoor(EastNorth en, String[] fields) {
-		return null;
-	}
+    @Override
+    public LatLon getCoor(EastNorth en, String[] fields) {
+        return null;
+    }
 
-	@Override
-	public void setLineNumber(int n) {
-		lineNumber = n;
-	}
+    @Override
+    public void setLineNumber(int n) {
+        lineNumber = n;
+    }
 
-	@Override
-	public int getLineNumber() {
-		return lineNumber;
-	}
+    @Override
+    public int getLineNumber() {
+        return lineNumber;
+    }
 
-	@Override
-	public void setXCol(int i) {
-		xCol = i;
-	}
+    @Override
+    public void setXCol(int i) {
+        xCol = i;
+    }
 
-	@Override
-	public void setYCol(int i) {
-		yCol = i;
-	}
+    @Override
+    public void setYCol(int i) {
+        yCol = i;
+    }
 
-	@Override
-	public int getXCol() {
-		return xCol;
-	}
+    @Override
+    public int getXCol() {
+        return xCol;
+    }
 
-	@Override
-	public int getYCol() {
-		return yCol;
-	}
+    @Override
+    public int getYCol() {
+        return yCol;
+    }
 
     @Override
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/OdsDocument.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/OdsDocument.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/OdsDocument.java	(revision 30723)
@@ -18,17 +18,17 @@
 public class OdsDocument extends OpenDocument {
 
-	public OdsDocument(InputStream in) {
-		loadFrom(in);
-	}
-	
-	private InputSource getEntryInputSource(ZipInputStream zis) throws IOException {
+    public OdsDocument(InputStream in) {
+        loadFrom(in);
+    }
+    
+    private InputSource getEntryInputSource(ZipInputStream zis) throws IOException {
         int n = -1;
-		final byte[] buffer = new byte[4096];
+        final byte[] buffer = new byte[4096];
         final ByteArrayOutputStream baos = new ByteArrayOutputStream();
         while ((n = zis.read(buffer, 0, buffer.length)) != -1) {
-        	baos.write(buffer, 0, n);
+            baos.write(buffer, 0, n);
         }
-		return new InputSource(new ByteArrayInputStream(baos.toByteArray()));
-	}
+        return new InputSource(new ByteArrayInputStream(baos.toByteArray()));
+    }
 
     public void loadFrom(final InputStream in) {
@@ -43,10 +43,10 @@
             
             while (!contentParsed && (entry = zis.getNextEntry()) != null) {
-            	if (entry.getName().equals("content.xml")) {
+                if (entry.getName().equals("content.xml")) {
                     rdr.setContentHandler(contentHandler);
                     Main.info("Parsing content.xml");
                     rdr.parse(getEntryInputSource(zis));
-            		contentParsed = true;
-            	}
+                    contentParsed = true;
+                }
             }
             
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/OdsImporter.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/OdsImporter.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/OdsImporter.java	(revision 30723)
@@ -15,5 +15,5 @@
 
 public class OdsImporter extends AbstractImporter {
-	
+    
     public static final ExtensionFileFilter ODS_FILE_FILTER = new ExtensionFileFilter(
             OdConstants.ODS_EXT, OdConstants.ODS_EXT, tr("ODS files") + " (*."+OdConstants.ODS_EXT+")");
@@ -23,12 +23,12 @@
     }
 
-	@Override
-	protected DataSet parseDataSet(InputStream in, ProgressMonitor instance)
-			throws IllegalDataException {
-		try {
-			return OdsReader.parseDataSet(in, handler, instance);
-		} catch (IOException e) {
-			throw new IllegalDataException(e);
-		}
-	}
+    @Override
+    protected DataSet parseDataSet(InputStream in, ProgressMonitor instance)
+            throws IllegalDataException {
+        try {
+            return OdsReader.parseDataSet(in, handler, instance);
+        } catch (IOException e) {
+            throw new IllegalDataException(e);
+        }
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/OdsReader.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/OdsReader.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/OdsReader.java	(revision 30723)
@@ -20,64 +20,64 @@
 public class OdsReader extends SpreadSheetReader {
 
-	private OpenDocument doc;
-	private TableTable sheet;
-	private List<TableTableRow> rows;
-	private int rowIndex;
-	
-	private static final String SEP = "TextP:[";
-	
-	public OdsReader(SpreadSheetHandler handler) {
-		super(handler);
-	}
+    private OpenDocument doc;
+    private TableTable sheet;
+    private List<TableTableRow> rows;
+    private int rowIndex;
+    
+    private static final String SEP = "TextP:[";
+    
+    public OdsReader(SpreadSheetHandler handler) {
+        super(handler);
+    }
 
-	public static DataSet parseDataSet(InputStream in,
-			AbstractDataSetHandler handler, ProgressMonitor instance) throws IOException {
-		return new OdsReader(handler != null ? handler.getSpreadSheetHandler() : null).parse(in, instance);
-	}
+    public static DataSet parseDataSet(InputStream in,
+            AbstractDataSetHandler handler, ProgressMonitor instance) throws IOException {
+        return new OdsReader(handler != null ? handler.getSpreadSheetHandler() : null).parse(in, instance);
+    }
 
-	@Override
-	protected void initResources(InputStream in, ProgressMonitor progressMonitor) throws IOException {
-		try {
-			Main.info("Parsing ODS file");
-			doc = new OdsDocument(in);
-			List<OfficeSpreadsheet> spreadsheets = doc.getBody().getOfficeSpreadsheets();
-			if (spreadsheets != null && spreadsheets.size() > 0) {
-				List<TableTable> tables = spreadsheets.get(0).getTables();
-				if (tables != null && tables.size() > 0) {
-					sheet = tables.get(getSheetNumber());
-					if (sheet != null) {
-						rows = sheet.getRows();
-					}
-				}
-			}
-			rowIndex = 0;
-		} catch (Exception e) {
-			throw new IOException(e);
-		}
-	}
+    @Override
+    protected void initResources(InputStream in, ProgressMonitor progressMonitor) throws IOException {
+        try {
+            Main.info("Parsing ODS file");
+            doc = new OdsDocument(in);
+            List<OfficeSpreadsheet> spreadsheets = doc.getBody().getOfficeSpreadsheets();
+            if (spreadsheets != null && spreadsheets.size() > 0) {
+                List<TableTable> tables = spreadsheets.get(0).getTables();
+                if (tables != null && tables.size() > 0) {
+                    sheet = tables.get(getSheetNumber());
+                    if (sheet != null) {
+                        rows = sheet.getRows();
+                    }
+                }
+            }
+            rowIndex = 0;
+        } catch (Exception e) {
+            throw new IOException(e);
+        }
+    }
 
-	@Override
-	protected String[] readLine(ProgressMonitor progressMonitor) throws IOException {
-		if (rows != null && rowIndex < rows.size()) {
-			TableTableRow row = rows.get(rowIndex++);
+    @Override
+    protected String[] readLine(ProgressMonitor progressMonitor) throws IOException {
+        if (rows != null && rowIndex < rows.size()) {
+            TableTableRow row = rows.get(rowIndex++);
 
-			if (rowIndex % 5000 == 0) {
-				Main.info("Lines read: "+rowIndex);
-			}
+            if (rowIndex % 5000 == 0) {
+                Main.info("Lines read: "+rowIndex);
+            }
 
-			List<String> result = new ArrayList<>();
-			boolean allFieldsBlank = true;
-			for (TableTableCell cell : row.getAllCells()) {
-			    TextP textP = cell.getTextP();
-			    String text = textP == null ? "" : textP.toString().replace(SEP, "").replace("]", "").replace("null", "").trim();
+            List<String> result = new ArrayList<>();
+            boolean allFieldsBlank = true;
+            for (TableTableCell cell : row.getAllCells()) {
+                TextP textP = cell.getTextP();
+                String text = textP == null ? "" : textP.toString().replace(SEP, "").replace("]", "").replace("null", "").trim();
                 result.add(text);
                 if (allFieldsBlank && !text.isEmpty()) {
                     allFieldsBlank = false;
                 }
-			}
-			
-			return rowIndex == 1 || !allFieldsBlank ? result.toArray(new String[0]) : null;
-		}
-		return null;
-	}
+            }
+            
+            return rowIndex == 1 || !allFieldsBlank ? result.toArray(new String[0]) : null;
+        }
+        return null;
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/SpreadSheetHandler.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/SpreadSheetHandler.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/SpreadSheetHandler.java	(revision 30723)
@@ -12,25 +12,25 @@
 public interface SpreadSheetHandler {
 
-	public void setSheetNumber(int n);
-	
-	public int getSheetNumber();
+    public void setSheetNumber(int n);
+    
+    public int getSheetNumber();
 
-	public void setHandlesProjection(boolean handle);
-	
-	public boolean handlesProjection();
+    public void setHandlesProjection(boolean handle);
+    
+    public boolean handlesProjection();
 
-	public LatLon getCoor(EastNorth en, String[] fields);
+    public LatLon getCoor(EastNorth en, String[] fields);
 
-	public void setLineNumber(int n);
-	
-	public int getLineNumber();
+    public void setLineNumber(int n);
+    
+    public int getLineNumber();
 
-	public void setXCol(int i);
+    public void setXCol(int i);
 
-	public void setYCol(int i);
-	
-	public int getXCol();
+    public void setYCol(int i);
+    
+    public int getXCol();
 
-	public int getYCol();
+    public int getYCol();
 
     public void nodesAdded(DataSet ds, Map<CoordinateColumns, Node> nodes, String[] fields, int lineNumber);
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/SpreadSheetReader.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/SpreadSheetReader.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/SpreadSheetReader.java	(revision 30723)
@@ -28,159 +28,159 @@
 
 public abstract class SpreadSheetReader extends AbstractReader {
-	
-	private static final NumberFormat formatFrance = NumberFormat.getInstance(Locale.FRANCE);
-	private static final NumberFormat formatUK = NumberFormat.getInstance(Locale.UK);
-	
-	protected final SpreadSheetHandler handler;
-
-	public SpreadSheetReader(SpreadSheetHandler handler) {
-		this.handler = handler;
-	}
-
-	protected static double parseDouble(String value) throws ParseException {
-		if (value.contains(",")) { 
-			return formatFrance.parse(value.replace(" ", "")).doubleValue();
-		} else {
-			return formatUK.parse(value.replace(" ", "")).doubleValue();
-		}
-	}
-	
-	protected abstract void initResources(InputStream in, ProgressMonitor progressMonitor) throws IOException;
-	
-	protected abstract String[] readLine(ProgressMonitor progressMonitor) throws IOException;
-	
-	protected final int getSheetNumber() {
-		return handler != null && handler.getSheetNumber() > -1 ? handler.getSheetNumber() : 0;
-	}
-	
-	protected final int getLineNumber() {
-		return handler != null ? handler.getLineNumber() : -1;
-	}
-	
-	public static class CoordinateColumns {
+    
+    private static final NumberFormat formatFrance = NumberFormat.getInstance(Locale.FRANCE);
+    private static final NumberFormat formatUK = NumberFormat.getInstance(Locale.UK);
+    
+    protected final SpreadSheetHandler handler;
+
+    public SpreadSheetReader(SpreadSheetHandler handler) {
+        this.handler = handler;
+    }
+
+    protected static double parseDouble(String value) throws ParseException {
+        if (value.contains(",")) { 
+            return formatFrance.parse(value.replace(" ", "")).doubleValue();
+        } else {
+            return formatUK.parse(value.replace(" ", "")).doubleValue();
+        }
+    }
+    
+    protected abstract void initResources(InputStream in, ProgressMonitor progressMonitor) throws IOException;
+    
+    protected abstract String[] readLine(ProgressMonitor progressMonitor) throws IOException;
+    
+    protected final int getSheetNumber() {
+        return handler != null && handler.getSheetNumber() > -1 ? handler.getSheetNumber() : 0;
+    }
+    
+    protected final int getLineNumber() {
+        return handler != null ? handler.getLineNumber() : -1;
+    }
+    
+    public static class CoordinateColumns {
         public Projection proj = null;
-		public int xCol = -1;
-		public int yCol = -1;
-		public final boolean isOk() {
-			return xCol > -1 && yCol > -1;
-		}
+        public int xCol = -1;
+        public int yCol = -1;
+        public final boolean isOk() {
+            return xCol > -1 && yCol > -1;
+        }
         @Override
         public String toString() {
             return "CoordinateColumns [proj=" + proj + ", xCol=" + xCol + ", yCol=" + yCol + "]";
         }
-	}
-	
-	private final CoordinateColumns addCoorColIfNeeded(List<CoordinateColumns> columns, CoordinateColumns col) {
+    }
+    
+    private final CoordinateColumns addCoorColIfNeeded(List<CoordinateColumns> columns, CoordinateColumns col) {
         if (col == null || col.isOk()) {
             columns.add(col = new CoordinateColumns());
         }
         return col;
-	}
-	
-	public DataSet doParse(String[] header, ProgressMonitor progressMonitor) throws IOException {
-		Main.info("Header: "+Arrays.toString(header));
-		
-		Map<ProjectionPatterns, List<CoordinateColumns>> projColumns = new HashMap<>();
-		
-		for (int i = 0; i<header.length; i++) {
-			for (ProjectionPatterns pp : OdConstants.PROJECTIONS) {
-			    List<CoordinateColumns> columns = projColumns.get(pp);
-			    if (columns == null) {
-			        projColumns.put(pp, columns = new ArrayList<>());
-			    }
-				CoordinateColumns col = columns.isEmpty() ? null : columns.get(columns.size()-1);
-				if (pp.getXPattern().matcher(header[i]).matches()) {
-				    addCoorColIfNeeded(columns, col).xCol = i;
-					break;
-				} else if (pp.getYPattern().matcher(header[i]).matches()) {
-				    addCoorColIfNeeded(columns, col).yCol = i;
-					break;
-				}
-			}
-		}
-
-		final List<CoordinateColumns> columns = new ArrayList<>();
-		
-		for (ProjectionPatterns pp : projColumns.keySet()) {
-		    for (CoordinateColumns col : projColumns.get(pp)) {
-	            if (col.isOk()) {
+    }
+    
+    public DataSet doParse(String[] header, ProgressMonitor progressMonitor) throws IOException {
+        Main.info("Header: "+Arrays.toString(header));
+        
+        Map<ProjectionPatterns, List<CoordinateColumns>> projColumns = new HashMap<>();
+        
+        for (int i = 0; i<header.length; i++) {
+            for (ProjectionPatterns pp : OdConstants.PROJECTIONS) {
+                List<CoordinateColumns> columns = projColumns.get(pp);
+                if (columns == null) {
+                    projColumns.put(pp, columns = new ArrayList<>());
+                }
+                CoordinateColumns col = columns.isEmpty() ? null : columns.get(columns.size()-1);
+                if (pp.getXPattern().matcher(header[i]).matches()) {
+                    addCoorColIfNeeded(columns, col).xCol = i;
+                    break;
+                } else if (pp.getYPattern().matcher(header[i]).matches()) {
+                    addCoorColIfNeeded(columns, col).yCol = i;
+                    break;
+                }
+            }
+        }
+
+        final List<CoordinateColumns> columns = new ArrayList<>();
+        
+        for (ProjectionPatterns pp : projColumns.keySet()) {
+            for (CoordinateColumns col : projColumns.get(pp)) {
+                if (col.isOk()) {
                     columns.add(col);
-	                if (col.proj == null) {
-	                    col.proj = pp.getProjection(header[col.xCol], header[col.yCol]);
-	                }
-	            }
-		    }
-		}
-
-		final boolean handlerOK = handler != null && handler.handlesProjection();
-
-		boolean projFound = false;
-		
-		for (CoordinateColumns c : columns) {
-		    if (c.proj != null) {
-		        projFound = true;
-		        break;
-		    }
-		}
-		
-		if (projFound) {
-			// projection identified, do nothing
-		} else if (!columns.isEmpty()) {
-			if (!handlerOK) {
+                    if (col.proj == null) {
+                        col.proj = pp.getProjection(header[col.xCol], header[col.yCol]);
+                    }
+                }
+            }
+        }
+
+        final boolean handlerOK = handler != null && handler.handlesProjection();
+
+        boolean projFound = false;
+        
+        for (CoordinateColumns c : columns) {
+            if (c.proj != null) {
+                projFound = true;
+                break;
+            }
+        }
+        
+        if (projFound) {
+            // projection identified, do nothing
+        } else if (!columns.isEmpty()) {
+            if (!handlerOK) {
                 if (GraphicsEnvironment.isHeadless()) {
                     throw new IllegalArgumentException("No valid coordinates have been found and cannot prompt user in headless mode.");
-			    }
-				// TODO: filter proposed projections with min/max values ?
+                }
+                // TODO: filter proposed projections with min/max values ?
                 Projection p = ChooserLauncher.askForProjection(progressMonitor);
-				if (p == null) {
-					return null; // User clicked Cancel
-				}
-		        for (CoordinateColumns c : columns) {
-		            c.proj = p;
-		        }
-			}
-			
-		} else {
-			throw new IllegalArgumentException(tr("No valid coordinates have been found."));
-		}
-
-		String message = "";
-		for (CoordinateColumns c : columns) {
-		    if (!message.isEmpty()) {
-		        message += "; ";
-		    }
-		    message += c.proj + "("+header[c.xCol]+", "+header[c.yCol]+")";
-		}
-		
-		Main.info("Loading data using projections "+message);
-		
-		final DataSet ds = new DataSet();
-		int lineNumber = 1;
-		
-		String[] fields;
-		while ((fields = readLine(progressMonitor)) != null) {
-			lineNumber++;
-			if (handler != null) {
-				handler.setXCol(-1);
-				handler.setYCol(-1);
-			}
-			
+                if (p == null) {
+                    return null; // User clicked Cancel
+                }
+                for (CoordinateColumns c : columns) {
+                    c.proj = p;
+                }
+            }
+            
+        } else {
+            throw new IllegalArgumentException(tr("No valid coordinates have been found."));
+        }
+
+        String message = "";
+        for (CoordinateColumns c : columns) {
+            if (!message.isEmpty()) {
+                message += "; ";
+            }
+            message += c.proj + "("+header[c.xCol]+", "+header[c.yCol]+")";
+        }
+        
+        Main.info("Loading data using projections "+message);
+        
+        final DataSet ds = new DataSet();
+        int lineNumber = 1;
+        
+        String[] fields;
+        while ((fields = readLine(progressMonitor)) != null) {
+            lineNumber++;
+            if (handler != null) {
+                handler.setXCol(-1);
+                handler.setYCol(-1);
+            }
+            
             final Map<CoordinateColumns, EastNorth> ens = new HashMap<>();
-			final Map<CoordinateColumns, Node> nodes = new HashMap<>();
-			for (CoordinateColumns c : columns) {
-			    nodes.put(c, new Node());
-			    ens.put(c, new EastNorth(Double.NaN, Double.NaN));
-			}
-			
-			if (fields.length > header.length) {
-			    Main.warn(tr("Invalid file. Bad length on line {0}. Expected {1} columns, got {2}.", lineNumber, header.length, fields.length));
-			    Main.warn(Arrays.toString(fields));
-			}
-			
-			for (int i = 0; i<Math.min(fields.length, header.length); i++) {
-				try {
-				    boolean coordinate = false;
-				    for (CoordinateColumns c : columns) {
-				        EastNorth en = ens.get(c);
+            final Map<CoordinateColumns, Node> nodes = new HashMap<>();
+            for (CoordinateColumns c : columns) {
+                nodes.put(c, new Node());
+                ens.put(c, new EastNorth(Double.NaN, Double.NaN));
+            }
+            
+            if (fields.length > header.length) {
+                Main.warn(tr("Invalid file. Bad length on line {0}. Expected {1} columns, got {2}.", lineNumber, header.length, fields.length));
+                Main.warn(Arrays.toString(fields));
+            }
+            
+            for (int i = 0; i<Math.min(fields.length, header.length); i++) {
+                try {
+                    boolean coordinate = false;
+                    for (CoordinateColumns c : columns) {
+                        EastNorth en = ens.get(c);
                         if (i == c.xCol) {
                             coordinate = true;
@@ -195,6 +195,6 @@
                                 handler.setYCol(i);
                             }
-                        }					        
-				    }
+                        }                            
+                    }
                     if (!coordinate) {
                         if (!fields[i].isEmpty()) {
@@ -202,58 +202,58 @@
                         }
                     }
-				} catch (ParseException e) {
-					System.err.println("Warning: Parsing error on line "+lineNumber+": "+e.getMessage());
-				}
-			}
-			Node firstNode = null;
-			for (CoordinateColumns c : columns) {
-			    Node n = nodes.get(c);
-			    EastNorth en = ens.get(c);
-    			if (en.isValid()) {
-    				n.setCoor(c.proj != null && !handlerOK ? c.proj.eastNorth2latlon(en) : handler.getCoor(en, fields));
-    			} else {
-    				System.err.println("Warning: Skipping line "+lineNumber+" because no valid coordinates have been found at columns "+c);
-    			}
-    			if (n.getCoor() != null) {
-    			    if (firstNode == null) {
-    			        firstNode = n;
-    			    }
-    			    if (n == firstNode || n.getCoor().greatCircleDistance(firstNode.getCoor()) > Main.pref.getDouble(OdConstants.PREF_TOLERANCE, OdConstants.DEFAULT_TOLERANCE)) {
-    			        ds.addPrimitive(n);
-    			    } else {
-    			        nodes.remove(c);
-    			    }
-    			}
-			}
-			if (handler != null && !Main.pref.getBoolean(OdConstants.PREF_RAWDATA)) {
-			    handler.nodesAdded(ds, nodes, header, lineNumber);
-			}
-		}
-		
-		return ds;
-	}
-	
-	public final DataSet parse(InputStream in, ProgressMonitor progressMonitor) throws IOException {
-		
-		initResources(in, progressMonitor);
-		
-		String[] header = null;
-		int length = 0;
-		int n = 0;
-		
-		while (header == null || length == 0) {
-			n++;
-			header = readLine(progressMonitor);
-			length = 0;
-			if (header == null && n > getLineNumber()) {
-				return null;
-			} else if (header != null && (getLineNumber() == -1 || getLineNumber() == n)) {
-				for (String field : header) {
-					length += field.length();
-				}
-			}
-		}
-		
-		return doParse(header, progressMonitor);
-	}
+                } catch (ParseException e) {
+                    System.err.println("Warning: Parsing error on line "+lineNumber+": "+e.getMessage());
+                }
+            }
+            Node firstNode = null;
+            for (CoordinateColumns c : columns) {
+                Node n = nodes.get(c);
+                EastNorth en = ens.get(c);
+                if (en.isValid()) {
+                    n.setCoor(c.proj != null && !handlerOK ? c.proj.eastNorth2latlon(en) : handler.getCoor(en, fields));
+                } else {
+                    System.err.println("Warning: Skipping line "+lineNumber+" because no valid coordinates have been found at columns "+c);
+                }
+                if (n.getCoor() != null) {
+                    if (firstNode == null) {
+                        firstNode = n;
+                    }
+                    if (n == firstNode || n.getCoor().greatCircleDistance(firstNode.getCoor()) > Main.pref.getDouble(OdConstants.PREF_TOLERANCE, OdConstants.DEFAULT_TOLERANCE)) {
+                        ds.addPrimitive(n);
+                    } else {
+                        nodes.remove(c);
+                    }
+                }
+            }
+            if (handler != null && !Main.pref.getBoolean(OdConstants.PREF_RAWDATA)) {
+                handler.nodesAdded(ds, nodes, header, lineNumber);
+            }
+        }
+        
+        return ds;
+    }
+    
+    public final DataSet parse(InputStream in, ProgressMonitor progressMonitor) throws IOException {
+        
+        initResources(in, progressMonitor);
+        
+        String[] header = null;
+        int length = 0;
+        int n = 0;
+        
+        while (header == null || length == 0) {
+            n++;
+            header = readLine(progressMonitor);
+            length = 0;
+            if (header == null && n > getLineNumber()) {
+                return null;
+            } else if (header != null && (getLineNumber() == -1 || getLineNumber() == n)) {
+                for (String field : header) {
+                    length += field.length();
+                }
+            }
+        }
+        
+        return doParse(header, progressMonitor);
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/XlsImporter.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/XlsImporter.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/XlsImporter.java	(revision 30723)
@@ -15,5 +15,5 @@
 
 public class XlsImporter extends AbstractImporter {
-	
+    
     public static final ExtensionFileFilter XLS_FILE_FILTER = new ExtensionFileFilter(
             OdConstants.XLS_EXT, OdConstants.XLS_EXT, tr("XLS files") + " (*."+OdConstants.XLS_EXT+")");
@@ -23,12 +23,12 @@
     }
 
-	@Override
-	protected DataSet parseDataSet(InputStream in, ProgressMonitor instance)
-			throws IllegalDataException {
-		try {
-			return XlsReader.parseDataSet(in, handler, instance);
-		} catch (IOException e) {
-			throw new IllegalDataException(e);
-		}
-	}
+    @Override
+    protected DataSet parseDataSet(InputStream in, ProgressMonitor instance)
+            throws IllegalDataException {
+        try {
+            return XlsReader.parseDataSet(in, handler, instance);
+        } catch (IOException e) {
+            throw new IllegalDataException(e);
+        }
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/XlsReader.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/XlsReader.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/XlsReader.java	(revision 30723)
@@ -21,67 +21,67 @@
 public class XlsReader extends SpreadSheetReader {
 
-	private Workbook wb;
-	private Sheet sheet;
-	private int rowIndex;
-	
-	public XlsReader(SpreadSheetHandler handler) {
-		super(handler);
-	}
+    private Workbook wb;
+    private Sheet sheet;
+    private int rowIndex;
+    
+    public XlsReader(SpreadSheetHandler handler) {
+        super(handler);
+    }
 
-	public static DataSet parseDataSet(InputStream in,
-			AbstractDataSetHandler handler, ProgressMonitor instance) throws IOException {
-		return new XlsReader(handler != null ? handler.getSpreadSheetHandler() : null).parse(in, instance);
-	}
+    public static DataSet parseDataSet(InputStream in,
+            AbstractDataSetHandler handler, ProgressMonitor instance) throws IOException {
+        return new XlsReader(handler != null ? handler.getSpreadSheetHandler() : null).parse(in, instance);
+    }
 
-	@Override
-	protected void initResources(InputStream in, ProgressMonitor progressMonitor) throws IOException {
-	    Main.info("Parsing XLS file");
-		try {
-			wb = new HSSFWorkbook(new POIFSFileSystem(in));
-			sheet = wb.getSheetAt(getSheetNumber());
-			rowIndex = 0;
-		} catch (ExceptionInInitializerError e) {
-			Throwable ex = e.getException();
-			if (ex != null && ex.getMessage() != null) {
-				System.err.println(ex.getClass()+": "+ex.getMessage());
-			}
-			throw new IOException(e);
-	    } catch (Throwable t) {
-			throw new IOException(t);
-		}
-	}
+    @Override
+    protected void initResources(InputStream in, ProgressMonitor progressMonitor) throws IOException {
+        Main.info("Parsing XLS file");
+        try {
+            wb = new HSSFWorkbook(new POIFSFileSystem(in));
+            sheet = wb.getSheetAt(getSheetNumber());
+            rowIndex = 0;
+        } catch (ExceptionInInitializerError e) {
+            Throwable ex = e.getException();
+            if (ex != null && ex.getMessage() != null) {
+                System.err.println(ex.getClass()+": "+ex.getMessage());
+            }
+            throw new IOException(e);
+        } catch (Throwable t) {
+            throw new IOException(t);
+        }
+    }
 
-	@Override
-	protected String[] readLine(ProgressMonitor progressMonitor) throws IOException {
-		if (sheet != null) {
-			Row row = sheet.getRow(rowIndex++);
-			if (row != null) {
-				List<String> result = new ArrayList<>();
-				for (Cell cell : row) {
-		            switch (cell.getCellType()) {
-		                case Cell.CELL_TYPE_STRING:
-		                    result.add(cell.getRichStringCellValue().getString());
-		                    break;
-		                case Cell.CELL_TYPE_NUMERIC:
-		                    if (DateUtil.isCellDateFormatted(cell)) {
-		                    	result.add(cell.getDateCellValue().toString());
-		                    } else {
-		                    	result.add(Double.toString(cell.getNumericCellValue()));
-		                    }
-		                    break;
-		                case Cell.CELL_TYPE_BOOLEAN:
-		                	result.add(Boolean.toString(cell.getBooleanCellValue()));
-		                    break;
-		                case Cell.CELL_TYPE_FORMULA:
-		                	result.add(cell.getCellFormula());
-		                    break;
-		                default:
-		                    result.add("");
-	                }
-				}
-				return result.toArray(new String[0]);
-			}
-		}
-		return null;
-	}
+    @Override
+    protected String[] readLine(ProgressMonitor progressMonitor) throws IOException {
+        if (sheet != null) {
+            Row row = sheet.getRow(rowIndex++);
+            if (row != null) {
+                List<String> result = new ArrayList<>();
+                for (Cell cell : row) {
+                    switch (cell.getCellType()) {
+                        case Cell.CELL_TYPE_STRING:
+                            result.add(cell.getRichStringCellValue().getString());
+                            break;
+                        case Cell.CELL_TYPE_NUMERIC:
+                            if (DateUtil.isCellDateFormatted(cell)) {
+                                result.add(cell.getDateCellValue().toString());
+                            } else {
+                                result.add(Double.toString(cell.getNumericCellValue()));
+                            }
+                            break;
+                        case Cell.CELL_TYPE_BOOLEAN:
+                            result.add(Boolean.toString(cell.getBooleanCellValue()));
+                            break;
+                        case Cell.CELL_TYPE_FORMULA:
+                            result.add(cell.getCellFormula());
+                            break;
+                        default:
+                            result.add("");
+                    }
+                }
+                return result.toArray(new String[0]);
+            }
+        }
+        return null;
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/layers/OdDataLayer.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/layers/OdDataLayer.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/layers/OdDataLayer.java	(revision 30723)
@@ -30,145 +30,145 @@
 public class OdDataLayer extends OsmDataLayer implements OdLayer, LayerChangeListener {
 
-	public OdDiffLayer diffLayer;
-	public OdOsmDataLayer osmLayer;
-	
-	public final AbstractDataSetHandler handler;
-	
-	private Bounds bounds;
-	
-	public OdDataLayer(DataSet data, String name, File associatedFile, AbstractDataSetHandler handler) {
-		super(data, name, associatedFile);
-		setUploadDiscouraged(true);
-		this.handler = handler;
-		for (Node node : data.getNodes()) {
-			if (this.bounds == null) {
-				this.bounds = new Bounds(node.getCoor());
-			} else {
-				this.bounds.extend(node.getCoor());
-			}
-		}
-		MapView.addLayerChangeListener(this);
-	}
-	
+    public OdDiffLayer diffLayer;
+    public OdOsmDataLayer osmLayer;
+    
+    public final AbstractDataSetHandler handler;
+    
+    private Bounds bounds;
+    
+    public OdDataLayer(DataSet data, String name, File associatedFile, AbstractDataSetHandler handler) {
+        super(data, name, associatedFile);
+        setUploadDiscouraged(true);
+        this.handler = handler;
+        for (Node node : data.getNodes()) {
+            if (this.bounds == null) {
+                this.bounds = new Bounds(node.getCoor());
+            } else {
+                this.bounds.extend(node.getCoor());
+            }
+        }
+        MapView.addLayerChangeListener(this);
+    }
+    
     @Override public Icon getBaseIcon() {
-    	return OdUtils.getImageIcon(handler != null ? handler.getDataLayerIconName() : OdConstants.ICON_CORE_16);
+        return OdUtils.getImageIcon(handler != null ? handler.getDataLayerIconName() : OdConstants.ICON_CORE_16);
     }
 
     public void addOsmLayer(OdOsmDataLayer layer) {
-    	removeOsmLayer();
-    	osmLayer = layer;
-    	Main.main.addLayer(osmLayer);
+        removeOsmLayer();
+        osmLayer = layer;
+        Main.main.addLayer(osmLayer);
     }
 
     public void removeOsmLayer() {
-    	if (osmLayer != null) {
-	    	Main.main.removeLayer(osmLayer);
-	    	osmLayer = null;
-    	}
+        if (osmLayer != null) {
+            Main.main.removeLayer(osmLayer);
+            osmLayer = null;
+        }
     }
     
     public void addDiffLayer(OdDiffLayer layer) {
-    	removeDiffLayer();
-    	diffLayer = layer;
-    	Main.main.addLayer(diffLayer);
+        removeDiffLayer();
+        diffLayer = layer;
+        Main.main.addLayer(diffLayer);
     }
     
     public void removeDiffLayer() {
-    	if (diffLayer != null) {
-	    	Main.main.removeLayer(diffLayer);
-	    	diffLayer = null;
-    	}
+        if (diffLayer != null) {
+            Main.main.removeLayer(diffLayer);
+            diffLayer = null;
+        }
     }
     
-	public final void downloadOsmData() {
-		String oapiReq = handler.getOverpassApiRequest(bounds);
-		Collection<String> xapiReqs = handler.getOsmXapiRequests(bounds);
-		if (oapiReq != null || xapiReqs != null) {
-			DataSet dataSet = new DataSet();
-			final OdOsmDataLayer layer = new OdOsmDataLayer(this, dataSet, getName()+"/OSM");
-			addOsmLayer(layer);
-			Main.map.mapView.setActiveLayer(osmLayer);
-			if (oapiReq != null) {
-				OsmDownloader.downloadOapi(oapiReq);
-				// Overpass API does not allow to exclude tags :(
-				layer.removeForbiddenTags();
-			} else {
-				OsmDownloader.downloadXapi(xapiReqs);
-			}
-		}
-	}
+    public final void downloadOsmData() {
+        String oapiReq = handler.getOverpassApiRequest(bounds);
+        Collection<String> xapiReqs = handler.getOsmXapiRequests(bounds);
+        if (oapiReq != null || xapiReqs != null) {
+            DataSet dataSet = new DataSet();
+            final OdOsmDataLayer layer = new OdOsmDataLayer(this, dataSet, getName()+"/OSM");
+            addOsmLayer(layer);
+            Main.map.mapView.setActiveLayer(osmLayer);
+            if (oapiReq != null) {
+                OsmDownloader.downloadOapi(oapiReq);
+                // Overpass API does not allow to exclude tags :(
+                layer.removeForbiddenTags();
+            } else {
+                OsmDownloader.downloadXapi(xapiReqs);
+            }
+        }
+    }
 
-	@Override
-	public void activeLayerChange(Layer oldLayer, Layer newLayer) {
-	    if (newLayer == this && this.handler != null) {
-	        this.handler.notifyActive();
-	    }
-	}
+    @Override
+    public void activeLayerChange(Layer oldLayer, Layer newLayer) {
+        if (newLayer == this && this.handler != null) {
+            this.handler.notifyActive();
+        }
+    }
 
-	@Override
-	public void layerAdded(Layer newLayer) {
-	}
+    @Override
+    public void layerAdded(Layer newLayer) {
+    }
 
-	@Override
-	public void layerRemoved(Layer oldLayer) {
-		if (oldLayer == this) {
-			removeOsmLayer();
-			removeDiffLayer();
-		} else if (oldLayer == osmLayer) {
-			osmLayer = null;
-		} else if (oldLayer == diffLayer) {
-			diffLayer = null;
-		}
-	}
+    @Override
+    public void layerRemoved(Layer oldLayer) {
+        if (oldLayer == this) {
+            removeOsmLayer();
+            removeDiffLayer();
+        } else if (oldLayer == osmLayer) {
+            osmLayer = null;
+        } else if (oldLayer == diffLayer) {
+            diffLayer = null;
+        }
+    }
 
-	@Override
-	public Action[] getMenuEntries() {
-		List<Action> result = new ArrayList<>();
-		for (Action entry : super.getMenuEntries()) {
-			result.add(entry);
-		}
-		if (this.handler != null) {
-			if (this.handler.getWikiURL() != null || this.handler.getLocalPortalURL() != null || this.handler.getNationalPortalURL() != null) { 
-				result.add(SeparatorLayerAction.INSTANCE);
-			}
-			if (this.handler.getWikiURL() != null) { 
-				result.add(new OpenLinkAction(this.handler.getWikiURL(), OdConstants.ICON_OSM_24, 
-						tr("View OSM Wiki page"), tr("Launch browser to the OSM Wiki page of the selected data set")));
-			}
-			if (this.handler.getLocalPortalURL() != null) { 
-				result.add(new OpenLinkAction(this.handler.getLocalPortalURL(), this.handler.getLocalPortalIconName(), 
-						tr("View Local Portal page"), tr("Launch browser to the local portal page of the selected data set")));
-			}
-			if (this.handler.getNationalPortalURL() != null) { 
-				result.add(new OpenLinkAction(this.handler.getNationalPortalURL(), this.handler.getNationalPortalIconName(), 
-						tr("View National Portal page"), tr("Launch browser to the national portal page of the selected data set")));
-			}
-			if (this.handler.getLicense() != null) {
-				License lic = this.handler.getLicense();
-				if (lic.getURL() != null && lic.getURL().getProtocol().startsWith("http")) {
-					result.add(new OpenLinkAction(lic.getURL(), OdConstants.ICON_AGREEMENT_24, 
-							tr("View License"), tr("Launch browser to the license page of the selected data set")));
-				}
-				if (lic.getSummaryURL() != null && lic.getSummaryURL().getProtocol().startsWith("http")) {
-					result.add(new OpenLinkAction(lic.getSummaryURL(), OdConstants.ICON_AGREEMENT_24, 
-							tr("View License (summary)"), tr("Launch browser to the summary license page of the selected data set")));
-				}
-				if ((lic.getURL() != null && !lic.getURL().getProtocol().startsWith("http")) || (lic.getSummaryURL() != null && !lic.getSummaryURL().getProtocol().startsWith("http"))) {
-					result.add(new ViewLicenseAction(lic, tr("View License"), tr("View the license of the selected data set")));
-				}
-			}
-		}
-		return result.toArray(new Action[0]);
-	}
+    @Override
+    public Action[] getMenuEntries() {
+        List<Action> result = new ArrayList<>();
+        for (Action entry : super.getMenuEntries()) {
+            result.add(entry);
+        }
+        if (this.handler != null) {
+            if (this.handler.getWikiURL() != null || this.handler.getLocalPortalURL() != null || this.handler.getNationalPortalURL() != null) { 
+                result.add(SeparatorLayerAction.INSTANCE);
+            }
+            if (this.handler.getWikiURL() != null) { 
+                result.add(new OpenLinkAction(this.handler.getWikiURL(), OdConstants.ICON_OSM_24, 
+                        tr("View OSM Wiki page"), tr("Launch browser to the OSM Wiki page of the selected data set")));
+            }
+            if (this.handler.getLocalPortalURL() != null) { 
+                result.add(new OpenLinkAction(this.handler.getLocalPortalURL(), this.handler.getLocalPortalIconName(), 
+                        tr("View Local Portal page"), tr("Launch browser to the local portal page of the selected data set")));
+            }
+            if (this.handler.getNationalPortalURL() != null) { 
+                result.add(new OpenLinkAction(this.handler.getNationalPortalURL(), this.handler.getNationalPortalIconName(), 
+                        tr("View National Portal page"), tr("Launch browser to the national portal page of the selected data set")));
+            }
+            if (this.handler.getLicense() != null) {
+                License lic = this.handler.getLicense();
+                if (lic.getURL() != null && lic.getURL().getProtocol().startsWith("http")) {
+                    result.add(new OpenLinkAction(lic.getURL(), OdConstants.ICON_AGREEMENT_24, 
+                            tr("View License"), tr("Launch browser to the license page of the selected data set")));
+                }
+                if (lic.getSummaryURL() != null && lic.getSummaryURL().getProtocol().startsWith("http")) {
+                    result.add(new OpenLinkAction(lic.getSummaryURL(), OdConstants.ICON_AGREEMENT_24, 
+                            tr("View License (summary)"), tr("Launch browser to the summary license page of the selected data set")));
+                }
+                if ((lic.getURL() != null && !lic.getURL().getProtocol().startsWith("http")) || (lic.getSummaryURL() != null && !lic.getSummaryURL().getProtocol().startsWith("http"))) {
+                    result.add(new ViewLicenseAction(lic, tr("View License"), tr("View the license of the selected data set")));
+                }
+            }
+        }
+        return result.toArray(new Action[0]);
+    }
 
-	@Override
-	public OdDataLayer getDataLayer() {
-		return this;
-	}
+    @Override
+    public OdDataLayer getDataLayer() {
+        return this;
+    }
 
-	public void makeDiff() {
-		final OdDiffLayer layer = new OdDiffLayer(this, getName()+"/Diff");
-		addDiffLayer(layer);
-		Main.map.mapView.setActiveLayer(diffLayer);
-	}
+    public void makeDiff() {
+        final OdDiffLayer layer = new OdDiffLayer(this, getName()+"/Diff");
+        addDiffLayer(layer);
+        Main.map.mapView.setActiveLayer(diffLayer);
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/layers/OdDiffLayer.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/layers/OdDiffLayer.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/layers/OdDiffLayer.java	(revision 30723)
@@ -22,114 +22,114 @@
 public class OdDiffLayer extends Layer implements OdLayer {
 
-	private final OdDataLayer dataLayer;
-	
-	public final List<Pair<OsmPrimitive,OsmPrimitive>> differentPrimitives;
-	public final List<OsmPrimitive> onlyInTlsPrimitives;
-	public final List<OsmPrimitive> onlyInOsmPrimitives;
-	
-	public OdDiffLayer(OdDataLayer dataLayer, String name) {
-		super(name);
-		this.dataLayer = dataLayer;
-		this.differentPrimitives = new ArrayList<>();
-		this.onlyInTlsPrimitives = new ArrayList<>();
-		this.onlyInOsmPrimitives = new ArrayList<>();
-		initDiff(dataLayer.data, dataLayer.osmLayer.data);
-	}
-	
-	private void initDiff(DataSet tlsData, DataSet osmData) {
-		for (OsmPrimitive p1 : tlsData.allPrimitives()) {
-			if (dataLayer.handler.isRelevant(p1)) {
-				OsmPrimitive p2 = findPrimitiveAt(osmData, p1);
-				if (p2 == null) {
-					onlyInTlsPrimitives.add(p1);
-				} else if (!dataLayer.handler.equals(p1, p2)) {
-					differentPrimitives.add(new Pair<>(p1, p2));
-				}
-			}
-		}
-		for (OsmPrimitive p1 : osmData.allPrimitives()) {
-			if (dataLayer.handler.isRelevant(p1)) {
-				if (findPrimitiveAt(tlsData, p1) == null) {
-					onlyInOsmPrimitives.add(p1);
-				}
-			}
-		}
-	}
-	
-	private double distance(OsmPrimitive p1, OsmPrimitive p2) {
-		return p1.getBBox().getCenter().greatCircleDistance(p2.getBBox().getCenter());
-	}
-	
-	private OsmPrimitive findPrimitiveAt(DataSet dataSet, OsmPrimitive source) {
-		double maxDistance = Main.pref.getDouble(OdConstants.PREF_MAXDISTANCE, OdConstants.DEFAULT_MAXDISTANCE);
-		//List<OsmPrimitive> samePrimitives = new ArrayList<OsmPrimitive>();
-		OsmPrimitive nearestSamePrimitive = null;
-		//List<OsmPrimitive> potentialPrimitives = new ArrayList<OsmPrimitive>();
-		OsmPrimitive nearestPotentialPrimitive = null;
-		for (OsmPrimitive p : dataSet.allPrimitives()) {
-			if (dataLayer.handler.isRelevant(p)) {
-				double dist = distance(source, p); 
-				if (dist <= maxDistance) {
-					if (dataLayer.handler.equals(p, source)) {
-						//samePrimitives.add(p);
-						if (nearestSamePrimitive == null || distance(p, nearestSamePrimitive) > dist) {
-							nearestSamePrimitive = p;
-						}
-					} else {
-						//potentialPrimitives.add(p);
-						if (nearestPotentialPrimitive == null || distance(p, nearestPotentialPrimitive) > dist) {
-							nearestPotentialPrimitive = p;
-						}
-					}
-				}
-			}
-		}
-		return nearestSamePrimitive != null ? nearestSamePrimitive : nearestPotentialPrimitive;
-	}
+    private final OdDataLayer dataLayer;
+    
+    public final List<Pair<OsmPrimitive,OsmPrimitive>> differentPrimitives;
+    public final List<OsmPrimitive> onlyInTlsPrimitives;
+    public final List<OsmPrimitive> onlyInOsmPrimitives;
+    
+    public OdDiffLayer(OdDataLayer dataLayer, String name) {
+        super(name);
+        this.dataLayer = dataLayer;
+        this.differentPrimitives = new ArrayList<>();
+        this.onlyInTlsPrimitives = new ArrayList<>();
+        this.onlyInOsmPrimitives = new ArrayList<>();
+        initDiff(dataLayer.data, dataLayer.osmLayer.data);
+    }
+    
+    private void initDiff(DataSet tlsData, DataSet osmData) {
+        for (OsmPrimitive p1 : tlsData.allPrimitives()) {
+            if (dataLayer.handler.isRelevant(p1)) {
+                OsmPrimitive p2 = findPrimitiveAt(osmData, p1);
+                if (p2 == null) {
+                    onlyInTlsPrimitives.add(p1);
+                } else if (!dataLayer.handler.equals(p1, p2)) {
+                    differentPrimitives.add(new Pair<>(p1, p2));
+                }
+            }
+        }
+        for (OsmPrimitive p1 : osmData.allPrimitives()) {
+            if (dataLayer.handler.isRelevant(p1)) {
+                if (findPrimitiveAt(tlsData, p1) == null) {
+                    onlyInOsmPrimitives.add(p1);
+                }
+            }
+        }
+    }
+    
+    private double distance(OsmPrimitive p1, OsmPrimitive p2) {
+        return p1.getBBox().getCenter().greatCircleDistance(p2.getBBox().getCenter());
+    }
+    
+    private OsmPrimitive findPrimitiveAt(DataSet dataSet, OsmPrimitive source) {
+        double maxDistance = Main.pref.getDouble(OdConstants.PREF_MAXDISTANCE, OdConstants.DEFAULT_MAXDISTANCE);
+        //List<OsmPrimitive> samePrimitives = new ArrayList<OsmPrimitive>();
+        OsmPrimitive nearestSamePrimitive = null;
+        //List<OsmPrimitive> potentialPrimitives = new ArrayList<OsmPrimitive>();
+        OsmPrimitive nearestPotentialPrimitive = null;
+        for (OsmPrimitive p : dataSet.allPrimitives()) {
+            if (dataLayer.handler.isRelevant(p)) {
+                double dist = distance(source, p); 
+                if (dist <= maxDistance) {
+                    if (dataLayer.handler.equals(p, source)) {
+                        //samePrimitives.add(p);
+                        if (nearestSamePrimitive == null || distance(p, nearestSamePrimitive) > dist) {
+                            nearestSamePrimitive = p;
+                        }
+                    } else {
+                        //potentialPrimitives.add(p);
+                        if (nearestPotentialPrimitive == null || distance(p, nearestPotentialPrimitive) > dist) {
+                            nearestPotentialPrimitive = p;
+                        }
+                    }
+                }
+            }
+        }
+        return nearestSamePrimitive != null ? nearestSamePrimitive : nearestPotentialPrimitive;
+    }
 
-	@Override
-	public void paint(Graphics2D g, MapView mv, Bounds box) {
-		// TODO Auto-generated method stub
-	}
+    @Override
+    public void paint(Graphics2D g, MapView mv, Bounds box) {
+        // TODO Auto-generated method stub
+    }
 
-	@Override
-	public Icon getIcon() {
-		return ImageProvider.get("layer", "diff");
-	}
+    @Override
+    public Icon getIcon() {
+        return ImageProvider.get("layer", "diff");
+    }
 
-	@Override
-	public String getToolTipText() {
-		// TODO Auto-generated method stub
-		return null;
-	}
+    @Override
+    public String getToolTipText() {
+        // TODO Auto-generated method stub
+        return null;
+    }
 
-	@Override
-	public void mergeFrom(Layer from) {
-	}
+    @Override
+    public void mergeFrom(Layer from) {
+    }
 
-	@Override
-	public boolean isMergable(Layer other) {
-		return false;
-	}
+    @Override
+    public boolean isMergable(Layer other) {
+        return false;
+    }
 
-	@Override
-	public void visitBoundingBox(BoundingXYVisitor v) {
-		// TODO Auto-generated method stub
-	}
+    @Override
+    public void visitBoundingBox(BoundingXYVisitor v) {
+        // TODO Auto-generated method stub
+    }
 
-	@Override
-	public Object getInfoComponent() {
-		// TODO Auto-generated method stub
-		return null;
-	}
+    @Override
+    public Object getInfoComponent() {
+        // TODO Auto-generated method stub
+        return null;
+    }
 
-	@Override
-	public Action[] getMenuEntries() {
-		return null;
-	}
+    @Override
+    public Action[] getMenuEntries() {
+        return null;
+    }
 
-	@Override
-	public OdDataLayer getDataLayer() {
-		return dataLayer;
-	}
+    @Override
+    public OdDataLayer getDataLayer() {
+        return dataLayer;
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/layers/OdLayer.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/layers/OdLayer.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/layers/OdLayer.java	(revision 30723)
@@ -3,4 +3,4 @@
 
 public interface OdLayer {
-	public OdDataLayer getDataLayer();
+    public OdDataLayer getDataLayer();
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/layers/OdOsmDataLayer.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/layers/OdOsmDataLayer.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/layers/OdOsmDataLayer.java	(revision 30723)
@@ -16,59 +16,59 @@
 public class OdOsmDataLayer extends OsmDataLayer implements OdLayer {
 
-	private final OdDataLayer dataLayer;
+    private final OdDataLayer dataLayer;
 
-	public OdOsmDataLayer(OdDataLayer dataLayer, DataSet data, String name) {
-		super(data, name, null);
-		this.dataLayer = dataLayer;
-	}
-	
+    public OdOsmDataLayer(OdDataLayer dataLayer, DataSet data, String name) {
+        super(data, name, null);
+        this.dataLayer = dataLayer;
+    }
+    
     public final void removeForbiddenTags() {
-		if (dataLayer != null && dataLayer.handler != null && dataLayer.handler.hasForbiddenTags()) {
-			Main.worker.submit(new Runnable() {
-				@Override
-				public void run() {
-					data.clearSelection();
-					for (Iterator<OsmPrimitive> it = data.allPrimitives().iterator(); it.hasNext();) {
-						OsmPrimitive p = it.next();
-						if (dataLayer.handler.isForbidden(p)) {
-							data.addSelected(p);
-							
-							List<Node> nodes = null;
-							if (p instanceof Way) {
-								nodes = ((Way) p).getNodes();
-							}
-							//data.removePrimitive(p);
-							if (nodes != null) {
-								for (Node n : nodes) {
-									List<OsmPrimitive> refferingAllowedWays = new ArrayList<>();
-									for (OsmPrimitive referrer : n.getReferrers()) {
-										if (referrer instanceof Way && !dataLayer.handler.isForbidden(referrer)) {
-											refferingAllowedWays.add(referrer);
-										}
-									}
-									
-									if (refferingAllowedWays.isEmpty()) {
-										//data.removePrimitive(n);
-										data.addSelected(n);
-									}
-								}
-							}
-							/*for (OsmPrimitive referrer : p.getReferrers()) {
-								System.out.println(referrer);
-							}*/
-						}
-					}
-					Collection<OsmPrimitive> sel = data.getSelected();
-					if (!sel.isEmpty()) {
-						Main.main.menu.purge.actionPerformed(null);
-					}
-				}
-			});
-		}
+        if (dataLayer != null && dataLayer.handler != null && dataLayer.handler.hasForbiddenTags()) {
+            Main.worker.submit(new Runnable() {
+                @Override
+                public void run() {
+                    data.clearSelection();
+                    for (Iterator<OsmPrimitive> it = data.allPrimitives().iterator(); it.hasNext();) {
+                        OsmPrimitive p = it.next();
+                        if (dataLayer.handler.isForbidden(p)) {
+                            data.addSelected(p);
+                            
+                            List<Node> nodes = null;
+                            if (p instanceof Way) {
+                                nodes = ((Way) p).getNodes();
+                            }
+                            //data.removePrimitive(p);
+                            if (nodes != null) {
+                                for (Node n : nodes) {
+                                    List<OsmPrimitive> refferingAllowedWays = new ArrayList<>();
+                                    for (OsmPrimitive referrer : n.getReferrers()) {
+                                        if (referrer instanceof Way && !dataLayer.handler.isForbidden(referrer)) {
+                                            refferingAllowedWays.add(referrer);
+                                        }
+                                    }
+                                    
+                                    if (refferingAllowedWays.isEmpty()) {
+                                        //data.removePrimitive(n);
+                                        data.addSelected(n);
+                                    }
+                                }
+                            }
+                            /*for (OsmPrimitive referrer : p.getReferrers()) {
+                                System.out.println(referrer);
+                            }*/
+                        }
+                    }
+                    Collection<OsmPrimitive> sel = data.getSelected();
+                    if (!sel.isEmpty()) {
+                        Main.main.menu.purge.actionPerformed(null);
+                    }
+                }
+            });
+        }
     }
 
-	@Override
-	public OdDataLayer getDataLayer() {
-		return dataLayer;
-	}
+    @Override
+    public OdDataLayer getDataLayer() {
+        return dataLayer;
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/licenses/LOOL.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/licenses/LOOL.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/licenses/LOOL.java	(revision 30723)
@@ -6,11 +6,11 @@
 
 public class LOOL extends License {
-	
+    
     //public static final String URL_FR = "http://www.data.gouv.fr/Licence-Ouverte-Open-Licence";
     
-	public LOOL() {
-		setIcon(OdUtils.getImageIcon(OdConstants.ICON_LOOL_48, true));
-		setURL(LOOL.class.getResource(OdConstants.RESOURCE_PATH+"Licence-Ouverte-Open-Licence-ENG.rtf"), "en");
-		setURL(LOOL.class.getResource(OdConstants.RESOURCE_PATH+"Licence-Ouverte-Open-Licence.rtf"), "fr");
-	}
+    public LOOL() {
+        setIcon(OdUtils.getImageIcon(OdConstants.ICON_LOOL_48, true));
+        setURL(LOOL.class.getResource(OdConstants.RESOURCE_PATH+"Licence-Ouverte-Open-Licence-ENG.rtf"), "en");
+        setURL(LOOL.class.getResource(OdConstants.RESOURCE_PATH+"Licence-Ouverte-Open-Licence.rtf"), "fr");
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/licenses/License.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/licenses/License.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/licenses/License.java	(revision 30723)
@@ -13,96 +13,96 @@
 
 public abstract class License {
-	
-	public static final ODbL ODbL = new ODbL();
-	public static final LOOL LOOL = new LOOL();
-	
-	private final Map<String, URL> urls = new HashMap<>();
-	private final Map<String, URL> summaryURLs = new HashMap<>();
-	
-	private Icon icon;
-	
-	private static final URL getURL(Map<String, URL> map) {
-		// Find URL for current language
-		String lang = OdUtils.getJosmLanguage();
-		for (String l : map.keySet()) {
-			if (lang.startsWith(l)) {
-				return map.get(l);
-			}
-		}
-		// If not found, return english URL
-		URL url = map.get("en");
-		if (url != null) {
-			return url;
-		}
-		// If not found, return first non-null url
-		if (map.keySet().size() > 0) {
-			for (Iterator<String> it=map.keySet().iterator(); it.hasNext(); ) {
-				url = map.get(it.next());
-				if (url != null) {
-					return url;
-				}
-			}
-		}
-		// If empty, return null
-		return null;
-	}
+    
+    public static final ODbL ODbL = new ODbL();
+    public static final LOOL LOOL = new LOOL();
+    
+    private final Map<String, URL> urls = new HashMap<>();
+    private final Map<String, URL> summaryURLs = new HashMap<>();
+    
+    private Icon icon;
+    
+    private static final URL getURL(Map<String, URL> map) {
+        // Find URL for current language
+        String lang = OdUtils.getJosmLanguage();
+        for (String l : map.keySet()) {
+            if (lang.startsWith(l)) {
+                return map.get(l);
+            }
+        }
+        // If not found, return english URL
+        URL url = map.get("en");
+        if (url != null) {
+            return url;
+        }
+        // If not found, return first non-null url
+        if (map.keySet().size() > 0) {
+            for (Iterator<String> it=map.keySet().iterator(); it.hasNext(); ) {
+                url = map.get(it.next());
+                if (url != null) {
+                    return url;
+                }
+            }
+        }
+        // If empty, return null
+        return null;
+    }
 
-	public URL getURL() {
-		return getURL(urls);
-	}
+    public URL getURL() {
+        return getURL(urls);
+    }
 
-	public URL getSummaryURL() {
-		return getURL(summaryURLs);
-	}
-	
-	public final void setURL(URL url) {
-		setURL(url, "en");
-	}
+    public URL getSummaryURL() {
+        return getURL(summaryURLs);
+    }
+    
+    public final void setURL(URL url) {
+        setURL(url, "en");
+    }
 
-	public final void setURL(String url, String lang) throws MalformedURLException {
-		setURL(new URL(url), lang);
-	}
+    public final void setURL(String url, String lang) throws MalformedURLException {
+        setURL(new URL(url), lang);
+    }
 
-	public final void setURL(String url) throws MalformedURLException {
-		setURL(new URL(url), "en");
-	}
+    public final void setURL(String url) throws MalformedURLException {
+        setURL(new URL(url), "en");
+    }
 
-	public final void setURL(URL url, String lang) {
-		if (url != null) {
-			urls.put(lang, url);
-		}
-	}
+    public final void setURL(URL url, String lang) {
+        if (url != null) {
+            urls.put(lang, url);
+        }
+    }
 
-	public final void setSummaryURL(URL url) {
-		setSummaryURL(url, "en");
-	}
+    public final void setSummaryURL(URL url) {
+        setSummaryURL(url, "en");
+    }
 
-	public final void setSummaryURL(String url, String lang) throws MalformedURLException {
-		setSummaryURL(new URL(url), lang);
-	}
+    public final void setSummaryURL(String url, String lang) throws MalformedURLException {
+        setSummaryURL(new URL(url), lang);
+    }
 
-	public final void setSummaryURL(String url) throws MalformedURLException {
-		setSummaryURL(new URL(url), "en");
-	}
+    public final void setSummaryURL(String url) throws MalformedURLException {
+        setSummaryURL(new URL(url), "en");
+    }
 
-	public final void setSummaryURL(URL url, String lang) {
-		if (url != null) {
-			summaryURLs.put(lang, url);
-		}
-	}
+    public final void setSummaryURL(URL url, String lang) {
+        if (url != null) {
+            summaryURLs.put(lang, url);
+        }
+    }
 
-	public final Icon getIcon() {
-		return icon;
-	}
+    public final Icon getIcon() {
+        return icon;
+    }
 
-	public final void setIcon(Icon icon) {
-		this.icon = icon;
-	}
+    public final void setIcon(Icon icon) {
+        this.icon = icon;
+    }
 
-	@Override
-	public String toString() {
-		return "License [" + (urls != null ? "urls=" + urls + ", " : "")
-				+ (summaryURLs != null ? "summaryURLs=" + summaryURLs : "")
-				+ "]";
-	}
+    @Override
+    public String toString() {
+        return "License [" + (urls != null ? "urls=" + urls + ", " : "")
+                + (summaryURLs != null ? "summaryURLs=" + summaryURLs : "")
+                + "]";
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/licenses/ODbL.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/licenses/ODbL.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/licenses/ODbL.java	(revision 30723)
@@ -5,5 +5,5 @@
 
 public class ODbL extends License {
-	
+    
     //public static final String URL            = "http://opendatacommons.org/licenses/odbl/1-0";
     //public static final String SUMMARY_URL    = "http://opendatacommons.org/licenses/odbl/summary";
@@ -11,14 +11,14 @@
     //public static final String SUMMARY_URL_FR = "http://vvlibri.org/fr/licence/odbl/10/fr";
     
-	public ODbL() {
-		for (String lang : new String[]{"", "fr"}) {
-			if (lang.isEmpty()) {
-				setURL(ODbL.class.getResource(OdConstants.RESOURCE_PATH+"odbl-1.0.htm"));
-				setSummaryURL(ODbL.class.getResource(OdConstants.RESOURCE_PATH+"odbl-summary-1.0.htm"));
-			} else {
-				setURL(ODbL.class.getResource(OdConstants.RESOURCE_PATH+"odbl-1.0-"+lang+".htm"), lang);
-				setSummaryURL(ODbL.class.getResource(OdConstants.RESOURCE_PATH+"odbl-summary-1.0-"+lang+".htm"), lang);
-			}
-		}
-	}
+    public ODbL() {
+        for (String lang : new String[]{"", "fr"}) {
+            if (lang.isEmpty()) {
+                setURL(ODbL.class.getResource(OdConstants.RESOURCE_PATH+"odbl-1.0.htm"));
+                setSummaryURL(ODbL.class.getResource(OdConstants.RESOURCE_PATH+"odbl-summary-1.0.htm"));
+            } else {
+                setURL(ODbL.class.getResource(OdConstants.RESOURCE_PATH+"odbl-1.0-"+lang+".htm"), lang);
+                setSummaryURL(ODbL.class.getResource(OdConstants.RESOURCE_PATH+"odbl-summary-1.0-"+lang+".htm"), lang);
+            }
+        }
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/modules/AbstractModule.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/modules/AbstractModule.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/modules/AbstractModule.java	(revision 30723)
@@ -19,102 +19,102 @@
 public abstract class AbstractModule implements Module {
 
-	protected final List<Class<? extends AbstractDataSetHandler>> handlers = new ArrayList<>();
+    protected final List<Class<? extends AbstractDataSetHandler>> handlers = new ArrayList<>();
 
-	private final List<AbstractDataSetHandler> instanciatedHandlers = new ArrayList<>();
+    private final List<AbstractDataSetHandler> instanciatedHandlers = new ArrayList<>();
 
-	protected final ModuleInformation info;
-	
-	public AbstractModule(ModuleInformation info) {
-		this.info = info;
-	}
+    protected final ModuleInformation info;
+    
+    public AbstractModule(ModuleInformation info) {
+        this.info = info;
+    }
 
-	@Override
-	public ModuleInformation getModuleInformation() {
-		return info;
-	}
+    @Override
+    public ModuleInformation getModuleInformation() {
+        return info;
+    }
 
-	@Override
-	public List<Class<? extends AbstractDataSetHandler>> getHandlers() {
-		return handlers;
-	}
+    @Override
+    public List<Class<? extends AbstractDataSetHandler>> getHandlers() {
+        return handlers;
+    }
 
-	@Override
-	public String getDisplayedName() {
-		return info.name;
-	}
+    @Override
+    public String getDisplayedName() {
+        return info.name;
+    }
 
-	@Override
-	public SourceProvider getMapPaintStyleSourceProvider() {
-		final List<SourceEntry> sources = new ArrayList<>();
-		for (AbstractDataSetHandler handler : getInstanciatedHandlers()) {
-			ExtendedSourceEntry src;
-			if (handler != null && (src = handler.getMapPaintStyle()) != null) {
-				try {
-					// Copy style sheet to disk to allow JOSM to load it at startup (even making the plugin "early" does not allow it)
-					String path = OdPlugin.getInstance().getResourcesDirectory()+File.separator+src.url.replace(OdConstants.PROTO_RSRC, "").replace('/', File.separatorChar);
-					
-					int n = 0;
-					byte[] buffer = new byte[4096];
-					InputStream in = getClass().getResourceAsStream(src.url.substring(OdConstants.PROTO_RSRC.length()-1));
-					new File(path.substring(0, path.lastIndexOf(File.separatorChar))).mkdirs();
-					FileOutputStream out = new FileOutputStream(path);
-					while ((n = in.read(buffer)) > 0) {
-						out.write(buffer, 0, n);
-					}
-					out.close();
-					in.close();
+    @Override
+    public SourceProvider getMapPaintStyleSourceProvider() {
+        final List<SourceEntry> sources = new ArrayList<>();
+        for (AbstractDataSetHandler handler : getInstanciatedHandlers()) {
+            ExtendedSourceEntry src;
+            if (handler != null && (src = handler.getMapPaintStyle()) != null) {
+                try {
+                    // Copy style sheet to disk to allow JOSM to load it at startup (even making the plugin "early" does not allow it)
+                    String path = OdPlugin.getInstance().getResourcesDirectory()+File.separator+src.url.replace(OdConstants.PROTO_RSRC, "").replace('/', File.separatorChar);
+                    
+                    int n = 0;
+                    byte[] buffer = new byte[4096];
+                    InputStream in = getClass().getResourceAsStream(src.url.substring(OdConstants.PROTO_RSRC.length()-1));
+                    new File(path.substring(0, path.lastIndexOf(File.separatorChar))).mkdirs();
+                    FileOutputStream out = new FileOutputStream(path);
+                    while ((n = in.read(buffer)) > 0) {
+                        out.write(buffer, 0, n);
+                    }
+                    out.close();
+                    in.close();
 
-					// Add source pointing to the local file
-					src.url = OdConstants.PROTO_FILE+path;
-					sources.add(src);
-				} catch (IOException e) {
-					System.err.println(e.getMessage());
-				}
-			}
-		}
-		return sources.isEmpty() ? null : new SourceProvider() {
-			@Override
-			public Collection<SourceEntry> getSources() {
-				return sources;
-			}
-		};
-	}
+                    // Add source pointing to the local file
+                    src.url = OdConstants.PROTO_FILE+path;
+                    sources.add(src);
+                } catch (IOException e) {
+                    System.err.println(e.getMessage());
+                }
+            }
+        }
+        return sources.isEmpty() ? null : new SourceProvider() {
+            @Override
+            public Collection<SourceEntry> getSources() {
+                return sources;
+            }
+        };
+    }
 
-	@Override
-	public SourceProvider getPresetSourceProvider() {
-		final List<SourceEntry> sources = new ArrayList<>();
-		for (AbstractDataSetHandler handler : getInstanciatedHandlers()) {
-			if (handler != null && handler.getTaggingPreset() != null) {
-				sources.add(handler.getTaggingPreset());
-			}
-		}
-		return sources.isEmpty() ? null : new SourceProvider() {
-			@Override
-			public Collection<SourceEntry> getSources() {
-				return sources;
-			}
-		};
-	}
-	
-	@Override
-	public final List<AbstractDataSetHandler> getNewlyInstanciatedHandlers() {
-		List<AbstractDataSetHandler> result = new ArrayList<>();
-		for (Class<? extends AbstractDataSetHandler> handlerClass : handlers) {
-			if (handlerClass != null) {
-				try {
-					result.add(handlerClass.newInstance());
-				} catch (Throwable t) {
-					System.err.println("Cannot instantiate "+handlerClass+" because of "+t.getClass().getName()+": "+t.getMessage());
-				}
-			}
-		}
-		return result;
-	}
+    @Override
+    public SourceProvider getPresetSourceProvider() {
+        final List<SourceEntry> sources = new ArrayList<>();
+        for (AbstractDataSetHandler handler : getInstanciatedHandlers()) {
+            if (handler != null && handler.getTaggingPreset() != null) {
+                sources.add(handler.getTaggingPreset());
+            }
+        }
+        return sources.isEmpty() ? null : new SourceProvider() {
+            @Override
+            public Collection<SourceEntry> getSources() {
+                return sources;
+            }
+        };
+    }
+    
+    @Override
+    public final List<AbstractDataSetHandler> getNewlyInstanciatedHandlers() {
+        List<AbstractDataSetHandler> result = new ArrayList<>();
+        for (Class<? extends AbstractDataSetHandler> handlerClass : handlers) {
+            if (handlerClass != null) {
+                try {
+                    result.add(handlerClass.newInstance());
+                } catch (Throwable t) {
+                    System.err.println("Cannot instantiate "+handlerClass+" because of "+t.getClass().getName()+": "+t.getMessage());
+                }
+            }
+        }
+        return result;
+    }
 
-	private final List<AbstractDataSetHandler> getInstanciatedHandlers() {
-		if (instanciatedHandlers.isEmpty()) {
-			instanciatedHandlers.addAll(getNewlyInstanciatedHandlers());
-		}
-		return instanciatedHandlers;
-	}
+    private final List<AbstractDataSetHandler> getInstanciatedHandlers() {
+        if (instanciatedHandlers.isEmpty()) {
+            instanciatedHandlers.addAll(getNewlyInstanciatedHandlers());
+        }
+        return instanciatedHandlers;
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/modules/Module.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/modules/Module.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/modules/Module.java	(revision 30723)
@@ -9,14 +9,14 @@
 public interface Module {
 
-	public String getDisplayedName();
+    public String getDisplayedName();
 
-	public List<Class<? extends AbstractDataSetHandler>> getHandlers();
+    public List<Class<? extends AbstractDataSetHandler>> getHandlers();
 
-	public List<AbstractDataSetHandler> getNewlyInstanciatedHandlers();
+    public List<AbstractDataSetHandler> getNewlyInstanciatedHandlers();
 
-	public SourceProvider getMapPaintStyleSourceProvider();
-	
-	public SourceProvider getPresetSourceProvider();
-	
-	public ModuleInformation getModuleInformation();
+    public SourceProvider getMapPaintStyleSourceProvider();
+    
+    public SourceProvider getPresetSourceProvider();
+    
+    public ModuleInformation getModuleInformation();
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/modules/ModuleHandler.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/modules/ModuleHandler.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/modules/ModuleHandler.java	(revision 30723)
@@ -230,12 +230,12 @@
                 Module mod = module.load(klass);
                 if (moduleList.add(mod)) {
-                	SourceProvider styleProvider = mod.getMapPaintStyleSourceProvider();
-                	if (styleProvider != null) {
-                		MapPaintPreference.registerSourceProvider(styleProvider);
-                	}
-                	SourceProvider presetProvider = mod.getPresetSourceProvider();
-                	if (presetProvider != null) {
-                		TaggingPresetPreference.registerSourceProvider(presetProvider);
-                	}
+                    SourceProvider styleProvider = mod.getMapPaintStyleSourceProvider();
+                    if (styleProvider != null) {
+                        MapPaintPreference.registerSourceProvider(styleProvider);
+                    }
+                    SourceProvider presetProvider = mod.getPresetSourceProvider();
+                    if (presetProvider != null) {
+                        TaggingPresetPreference.registerSourceProvider(presetProvider);
+                    }
                 }
             }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/modules/ModuleInformation.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/modules/ModuleInformation.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/modules/ModuleInformation.java	(revision 30723)
@@ -145,5 +145,5 @@
     
     private static final ImageIcon extractIcon(String iconPath, File jarFile, boolean suppressWarnings) {
-    	return new ImageProvider(iconPath).setArchive(jarFile).setMaxWidth(24).setMaxHeight(24).setOptional(true).setSuppressWarnings(suppressWarnings).get();
+        return new ImageProvider(iconPath).setArchive(jarFile).setMaxWidth(24).setMaxHeight(24).setOptional(true).setSuppressWarnings(suppressWarnings).get();
     }
 
@@ -159,5 +159,5 @@
             try {
                 @SuppressWarnings("unused")
-				URL url = new URL(s);
+                URL url = new URL(s);
             } catch (MalformedURLException e) {
                 System.out.println(tr("Invalid URL ''{0}'' in module {1}", s, name));
@@ -183,5 +183,5 @@
             // if not found, extract icon from the plugin jar file
             if (icon == null) {
-            	icon = extractIcon(iconPath, OdPlugin.getInstance().getPluginInformation().file, true);
+                icon = extractIcon(iconPath, OdPlugin.getInstance().getPluginInformation().file, true);
             }
         }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/util/NamesFrUtils.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/util/NamesFrUtils.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/util/NamesFrUtils.java	(revision 30723)
@@ -16,251 +16,251 @@
 
 public abstract class NamesFrUtils {
-	
-	private static Map<String, String> dictionary = initDictionary();
-
-	public static final String checkDictionary(String value) {
-		String result = "";
-		for (String word : value.split(" ")) {
-			if (!result.isEmpty()) {
-				result += " ";
-			}
-			result += dictionary.containsKey(word) ?  dictionary.get(word) : word;
-		}
-		return result;
-	}
-	
-	private static Map<String, String> initDictionary() {
-		Map<String, String> result = new HashMap<>();
-		try {
-			BufferedReader reader = new BufferedReader(new InputStreamReader(
-					SimpleDataSetHandler.class.getResourceAsStream(OdConstants.DICTIONARY_FR), OdConstants.UTF8));
-			String line = reader.readLine(); // Skip first line
-			while ((line = reader.readLine()) != null) {
-				String[] tab = line.split(";");
-				result.put(tab[0].replace("\"", ""), tab[1].replace("\"", ""));
-			}
-			reader.close();
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-		return result;
-	}
-
-	public static final String getStreetLabel(String label) {
-		if (label == null) {
-			return label;
-		} else if (label.equals("All")) {
-			return "Allée";
-		} else if (label.equals("Autoroute")) {
-			return label;
-		} else if (label.startsWith("Anc")) { // Anc, Ancien
-			return "Ancien";
-		} else if (label.equals("Av")) {
-			return "Avenue";
-		} else if (label.equals("Bd")) {
-			return "Boulevard";
-		} else if (label.equals("Bre")) {
-			return "Bré";
-		} else if (label.equals("Caminot")) {
-			return label;
-		} else if (label.equals("Carrefour")) {
-			return label;
-		} else if (label.startsWith("Che")) { // Che, Chem
-			return "Chemin";
-		} else if (label.equals("Cite")) {
-			return "Cité";
-		} else if (label.equals("Clos")) {
-			return label;
-		} else if (label.equals("Cote")) {
-			return "Côte";
-		} else if (label.equals("Cours")) {
-			return label;
-		} else if (label.equals("Dom")) {
-			return "Domaine";
-		} else if (label.equals("Dsc")) {
-			return "Descente";
-		} else if (label.equals("Esp")) {
-			return "Esplanade";
-		} else if (label.equals("Espa")) {
-			return "Espace";
-		} else if (label.equals("Giratoire")) {
-			return label;
-		} else if (label.equals("Grande-rue")) {
-			return label;
-		} else if (label.equals("Hameau")) {
-			return label;
-		} else if (label.equals("Imp")) {
-			return "Impasse";
-		} else if (label.equals("Itineraire")) {
-			return "Itinéraire";
-		} else if (label.equals("Jardin")) {
-			return label;
-		} else if (label.startsWith("L'") || label.equals("La") || label.equals("Le") || label.equals("Les") || label.equals("Saint")) { // Lieux-dits
-			return label;
-		} else if (label.equals("Lot")) {
-			return "Lotissement";
-		} else if (label.equals("Mail")) {
-			return label;
-		} else if (label.equals("Mas")) {
-			return label;
-		} else if (label.equals("Parc")) {
-			return label;
-		} else if (label.equals("Pas")) {
-			return "Passage";
-		} else if (label.equals("Passerelle")) {
-			return label;
-		} else if (label.equals("Pch")) {
-			return "Petit Chemin";
-		} else if (label.equals("Petit")) {
-			return label;
-		} else if (label.equals("Petite-allée")) {
-			return label;
-		} else if (label.equals("Petite-rue")) {
-			return label;
-		} else if (label.equals("Pl")) {
-			return "Place";
-		} else if (label.equals("Plan")) {
-			return label;
-		} else if (label.equals("Pont")) {
-			return label;
-		} else if (label.equals("Port")) {
-			return label;
-		} else if (label.equals("Porte")) {
-			return label;
-		} else if (label.equals("Prom")) {
-			return "Promenade";
-		} else if (label.equals("Prv")) {
-			return "Parvis";
-		} else if (label.equals("Qu")) {
-			return "Quai";
-		} else if (label.equals("Rampe")) {
-			return label;
-		} else if (label.equals("Residence")) {
-			return "Résidence";
-		} else if (label.equals("Rocade")) {
-			return label;
-		} else if (label.equals("Rpt")) {
-			return "Rond-Point";
-		} else if (label.equals("Rte")) {
-			return "Route";
-		} else if (label.equals("Rue")) {
-			return label;
-		} else if (label.equals("Sentier")) {
-			return label;
-		} else if (label.equals("Sq")) {
-			return "Square";
-		} else if (label.equals("Tra")) {
-			return "Traverse";
-		} else if (label.equals("Vieux")) {
-			return label;
-		} else if (label.equals("Voie")) {
-			return label;
-		} else if (label.equals("Zone")) {
-			return label;
-		} else {
-			System.err.println("Warning: unknown street label: "+label);
-			return label;
-		}
-	}
-
-	public static final String checkStreetName(OsmPrimitive p, String key) {
-		String value = null;
-		if (p != null) {
-			value = p.get(key);
-			if (value != null) {
-				value = WordUtils.capitalizeFully(value);
-				// Cas particuliers 
-				if (value.equals("Boulingrin")) { // square Boulingrin, mal formé
-					value = "Sq Boulingrin";
-				} else if (value.matches("A[0-9]+")) { // Autoroutes sans le mot "Autoroute"
-					value = "Autoroute "+value;
-				} else if (value.equals("All A61")) { // A61 qualifiée d'Allée ?
-					value = "Autoroute A61";
-				} else if (value.startsWith("Che Vieux Che")) { // "Che" redondant
-					value = value.replaceFirst("Che ", "");
-				} else if (value.startsWith("Petite Allee ")) { // Tiret, comme grand-rue, petite-rue
-					value = value.replaceFirst("Petite Allee ", "Petite-allée ");
-				} else if (value.startsWith("Ld De ")) { // Lieux-dit
-					value = value.replaceFirst("Ld De ", "");
-				}
-				while (value.startsWith("Ld ")) { // Lieux-dit, inutile. Plus le cas avec "Ld Ld"
-					value = value.replaceFirst("Ld ", "");
-				}
-				if (value.startsWith("L ")) {
-					value = value.replaceFirst("L ", "L'");
-				}
-				String[] words = value.split(" ");
-				if (words.length > 0) {
-					value = "";
-					List<String> list = Arrays.asList(words);
-					words[0] = getStreetLabel(words[0]);
-					if (words[0].equals("Ancien") && words.length > 1 && words[1].equals("Che")) {
-						words[1] = "Chemin";
-					}
-					for (int i = 0; i < words.length; i++) {
-						if (i > 0) {
-							value += " ";
-							// Prénoms/Noms propres abrégés
-							if (words[i].equals("A") && list.contains("Bernard")) {
-								words[i] = "Arnaud";
-							} else if (words[i].equals("A") && list.contains("Passerieu")) {
-								words[i] = "Ariste";
-							} else if (words[i].equals("A") && list.contains("Bougainville")) {
-								words[i] = "Antoine";
-							} else if (words[i].equals("Ch") && list.contains("Leconte")) {
-								words[i] = "Charles";
-							} else if (words[i].equals("Frs") && list.contains("Dugua")) {
-								words[i] = "François";
-							} else if (words[i].equals("G") && list.contains("Latecoere")) {
-								words[i] = "Georges";
-							} else if (words[i].equals("H") && list.contains("Lautrec")) {
-								words[i] = "Henri";
-							} else if (words[i].equals("J") && list.contains("Dieulafoy")) {
-								words[i] = "Jane";
-							} else if (words[i].equals("J") && (list.contains("Champollion") || list.contains("Stanislas"))) {
-								words[i] = "Jean";
-							} else if (words[i].equals("L") && list.contains("Zamenhof")) {
-								words[i] = "Ludwik";
-							} else if (words[i].equals("L") && list.contains("Sacha")) {
-								words[i] = "Lucien";
-								if (!list.contains("Et")) {
-									words[i] += " et";
-								}
-							} else if (words[i].equals("L") && (list.contains("Vauquelin") || list.contains("Bougainville"))) {
-								words[i] = "Louis";
-							} else if (words[i].equals("M") && list.contains("Dieulafoy")) {
-								words[i] = "Marcel";
-							} else if (words[i].equals("M") && list.contains("Arifat")) {
-								words[i] = "Marie";
-							} else if (words[i].equals("N") && list.contains("Djamena")) {
-								words[i] = "N'";
-							} else if (words[i].equals("Oo")) {
-								words[i] = "Oô";
-							} else if (words[i].equals("Ph") && list.contains("Ravary")) {
-								words[i] = "Philippe";
-							} else if (words[i].equals("R") && list.contains("Folliot")) {
-								words[i] = "Raphaël";
-							} else if (words[i].equals("W") && list.contains("Booth")) {
-								words[i] = "William";
-							// Mots de liaison non couverts par le dictionnaire
-							} else if (words[i].equals("A")) {
-								words[i] = "à";
-							} else if (words[i].equals("D") || words[i].equals("L")) {
-								words[i] = words[i].toLowerCase()+"'";
-							} else if (words[i].equals("La") || words[i].equals("Le")) {
-								words[i] = words[i].toLowerCase();
-							}
-						}
-						value += words[i];
-					}
-				}
-				// Ponctuation
-				value = value.replace("' ", "'");
-				// Dictionnaire
-				value = checkDictionary(value);
-				p.put(key, value);
-			}
-		}
-		return value;
-	}
+    
+    private static Map<String, String> dictionary = initDictionary();
+
+    public static final String checkDictionary(String value) {
+        String result = "";
+        for (String word : value.split(" ")) {
+            if (!result.isEmpty()) {
+                result += " ";
+            }
+            result += dictionary.containsKey(word) ?  dictionary.get(word) : word;
+        }
+        return result;
+    }
+    
+    private static Map<String, String> initDictionary() {
+        Map<String, String> result = new HashMap<>();
+        try {
+            BufferedReader reader = new BufferedReader(new InputStreamReader(
+                    SimpleDataSetHandler.class.getResourceAsStream(OdConstants.DICTIONARY_FR), OdConstants.UTF8));
+            String line = reader.readLine(); // Skip first line
+            while ((line = reader.readLine()) != null) {
+                String[] tab = line.split(";");
+                result.put(tab[0].replace("\"", ""), tab[1].replace("\"", ""));
+            }
+            reader.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+    public static final String getStreetLabel(String label) {
+        if (label == null) {
+            return label;
+        } else if (label.equals("All")) {
+            return "Allée";
+        } else if (label.equals("Autoroute")) {
+            return label;
+        } else if (label.startsWith("Anc")) { // Anc, Ancien
+            return "Ancien";
+        } else if (label.equals("Av")) {
+            return "Avenue";
+        } else if (label.equals("Bd")) {
+            return "Boulevard";
+        } else if (label.equals("Bre")) {
+            return "Bré";
+        } else if (label.equals("Caminot")) {
+            return label;
+        } else if (label.equals("Carrefour")) {
+            return label;
+        } else if (label.startsWith("Che")) { // Che, Chem
+            return "Chemin";
+        } else if (label.equals("Cite")) {
+            return "Cité";
+        } else if (label.equals("Clos")) {
+            return label;
+        } else if (label.equals("Cote")) {
+            return "Côte";
+        } else if (label.equals("Cours")) {
+            return label;
+        } else if (label.equals("Dom")) {
+            return "Domaine";
+        } else if (label.equals("Dsc")) {
+            return "Descente";
+        } else if (label.equals("Esp")) {
+            return "Esplanade";
+        } else if (label.equals("Espa")) {
+            return "Espace";
+        } else if (label.equals("Giratoire")) {
+            return label;
+        } else if (label.equals("Grande-rue")) {
+            return label;
+        } else if (label.equals("Hameau")) {
+            return label;
+        } else if (label.equals("Imp")) {
+            return "Impasse";
+        } else if (label.equals("Itineraire")) {
+            return "Itinéraire";
+        } else if (label.equals("Jardin")) {
+            return label;
+        } else if (label.startsWith("L'") || label.equals("La") || label.equals("Le") || label.equals("Les") || label.equals("Saint")) { // Lieux-dits
+            return label;
+        } else if (label.equals("Lot")) {
+            return "Lotissement";
+        } else if (label.equals("Mail")) {
+            return label;
+        } else if (label.equals("Mas")) {
+            return label;
+        } else if (label.equals("Parc")) {
+            return label;
+        } else if (label.equals("Pas")) {
+            return "Passage";
+        } else if (label.equals("Passerelle")) {
+            return label;
+        } else if (label.equals("Pch")) {
+            return "Petit Chemin";
+        } else if (label.equals("Petit")) {
+            return label;
+        } else if (label.equals("Petite-allée")) {
+            return label;
+        } else if (label.equals("Petite-rue")) {
+            return label;
+        } else if (label.equals("Pl")) {
+            return "Place";
+        } else if (label.equals("Plan")) {
+            return label;
+        } else if (label.equals("Pont")) {
+            return label;
+        } else if (label.equals("Port")) {
+            return label;
+        } else if (label.equals("Porte")) {
+            return label;
+        } else if (label.equals("Prom")) {
+            return "Promenade";
+        } else if (label.equals("Prv")) {
+            return "Parvis";
+        } else if (label.equals("Qu")) {
+            return "Quai";
+        } else if (label.equals("Rampe")) {
+            return label;
+        } else if (label.equals("Residence")) {
+            return "Résidence";
+        } else if (label.equals("Rocade")) {
+            return label;
+        } else if (label.equals("Rpt")) {
+            return "Rond-Point";
+        } else if (label.equals("Rte")) {
+            return "Route";
+        } else if (label.equals("Rue")) {
+            return label;
+        } else if (label.equals("Sentier")) {
+            return label;
+        } else if (label.equals("Sq")) {
+            return "Square";
+        } else if (label.equals("Tra")) {
+            return "Traverse";
+        } else if (label.equals("Vieux")) {
+            return label;
+        } else if (label.equals("Voie")) {
+            return label;
+        } else if (label.equals("Zone")) {
+            return label;
+        } else {
+            System.err.println("Warning: unknown street label: "+label);
+            return label;
+        }
+    }
+
+    public static final String checkStreetName(OsmPrimitive p, String key) {
+        String value = null;
+        if (p != null) {
+            value = p.get(key);
+            if (value != null) {
+                value = WordUtils.capitalizeFully(value);
+                // Cas particuliers 
+                if (value.equals("Boulingrin")) { // square Boulingrin, mal formé
+                    value = "Sq Boulingrin";
+                } else if (value.matches("A[0-9]+")) { // Autoroutes sans le mot "Autoroute"
+                    value = "Autoroute "+value;
+                } else if (value.equals("All A61")) { // A61 qualifiée d'Allée ?
+                    value = "Autoroute A61";
+                } else if (value.startsWith("Che Vieux Che")) { // "Che" redondant
+                    value = value.replaceFirst("Che ", "");
+                } else if (value.startsWith("Petite Allee ")) { // Tiret, comme grand-rue, petite-rue
+                    value = value.replaceFirst("Petite Allee ", "Petite-allée ");
+                } else if (value.startsWith("Ld De ")) { // Lieux-dit
+                    value = value.replaceFirst("Ld De ", "");
+                }
+                while (value.startsWith("Ld ")) { // Lieux-dit, inutile. Plus le cas avec "Ld Ld"
+                    value = value.replaceFirst("Ld ", "");
+                }
+                if (value.startsWith("L ")) {
+                    value = value.replaceFirst("L ", "L'");
+                }
+                String[] words = value.split(" ");
+                if (words.length > 0) {
+                    value = "";
+                    List<String> list = Arrays.asList(words);
+                    words[0] = getStreetLabel(words[0]);
+                    if (words[0].equals("Ancien") && words.length > 1 && words[1].equals("Che")) {
+                        words[1] = "Chemin";
+                    }
+                    for (int i = 0; i < words.length; i++) {
+                        if (i > 0) {
+                            value += " ";
+                            // Prénoms/Noms propres abrégés
+                            if (words[i].equals("A") && list.contains("Bernard")) {
+                                words[i] = "Arnaud";
+                            } else if (words[i].equals("A") && list.contains("Passerieu")) {
+                                words[i] = "Ariste";
+                            } else if (words[i].equals("A") && list.contains("Bougainville")) {
+                                words[i] = "Antoine";
+                            } else if (words[i].equals("Ch") && list.contains("Leconte")) {
+                                words[i] = "Charles";
+                            } else if (words[i].equals("Frs") && list.contains("Dugua")) {
+                                words[i] = "François";
+                            } else if (words[i].equals("G") && list.contains("Latecoere")) {
+                                words[i] = "Georges";
+                            } else if (words[i].equals("H") && list.contains("Lautrec")) {
+                                words[i] = "Henri";
+                            } else if (words[i].equals("J") && list.contains("Dieulafoy")) {
+                                words[i] = "Jane";
+                            } else if (words[i].equals("J") && (list.contains("Champollion") || list.contains("Stanislas"))) {
+                                words[i] = "Jean";
+                            } else if (words[i].equals("L") && list.contains("Zamenhof")) {
+                                words[i] = "Ludwik";
+                            } else if (words[i].equals("L") && list.contains("Sacha")) {
+                                words[i] = "Lucien";
+                                if (!list.contains("Et")) {
+                                    words[i] += " et";
+                                }
+                            } else if (words[i].equals("L") && (list.contains("Vauquelin") || list.contains("Bougainville"))) {
+                                words[i] = "Louis";
+                            } else if (words[i].equals("M") && list.contains("Dieulafoy")) {
+                                words[i] = "Marcel";
+                            } else if (words[i].equals("M") && list.contains("Arifat")) {
+                                words[i] = "Marie";
+                            } else if (words[i].equals("N") && list.contains("Djamena")) {
+                                words[i] = "N'";
+                            } else if (words[i].equals("Oo")) {
+                                words[i] = "Oô";
+                            } else if (words[i].equals("Ph") && list.contains("Ravary")) {
+                                words[i] = "Philippe";
+                            } else if (words[i].equals("R") && list.contains("Folliot")) {
+                                words[i] = "Raphaël";
+                            } else if (words[i].equals("W") && list.contains("Booth")) {
+                                words[i] = "William";
+                            // Mots de liaison non couverts par le dictionnaire
+                            } else if (words[i].equals("A")) {
+                                words[i] = "à";
+                            } else if (words[i].equals("D") || words[i].equals("L")) {
+                                words[i] = words[i].toLowerCase()+"'";
+                            } else if (words[i].equals("La") || words[i].equals("Le")) {
+                                words[i] = words[i].toLowerCase();
+                            }
+                        }
+                        value += words[i];
+                    }
+                }
+                // Ponctuation
+                value = value.replace("' ", "'");
+                // Dictionnaire
+                value = checkDictionary(value);
+                p.put(key, value);
+            }
+        }
+        return value;
+    }
 }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/util/OdUtils.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/util/OdUtils.java	(revision 30722)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/util/OdUtils.java	(revision 30723)
@@ -21,5 +21,5 @@
 
 public abstract class OdUtils {
-	
+    
     private static final String TEMP_DIR_PREFIX = "josm_opendata_temp_";
     
@@ -28,46 +28,46 @@
     }
     
-	public static final String[] stripQuotesAndExtraChars(String[] split, String sep) {
-		List<String> result = new ArrayList<>();
-		boolean append = false;
-		for (int i = 0; i<split.length; i++) {
-			if (append) {
-				int index = result.size()-1;
-				if (split[i].endsWith("\"") && StringUtils.countMatches(split[i], "\"") % 2 == 1) {
-					append = false;
-				}
-				result.set(index, result.get(index)+sep+split[i].replaceAll("\"", ""));
-			} else if (split[i].startsWith("\"")) {
-				if (!(split[i].endsWith("\"") && StringUtils.countMatches(split[i], "\"") % 2 == 0)) {
-					append = true;
-				}
-				result.add(split[i].replaceAll("\"", ""));
-			} else {
-				result.add(split[i]);
-			}
-		}
-		// Remove exotic characters such as U+FEFF found in some CSV files
-		for (ListIterator<String> it = result.listIterator(); it.hasNext();) {
-		    it.set(Utils.strip(it.next()));
-		}
-		return result.toArray(new String[0]);
-	}
-	
-	public static final ImageIcon getImageIcon(String iconName) {
-		return getImageIcon(iconName, false);
-	}
-	
-	public static final ImageIcon getImageIcon(String iconName, boolean optional) {
-		return new ImageProvider(iconName).setOptional(optional).setAdditionalClassLoaders(ModuleHandler.getResourceClassLoaders()).get();
-	}
-	
-	public static final String getJosmLanguage() {
-		String lang = Main.pref.get("language");
-		if (lang == null || lang.isEmpty()) {
-			lang = Locale.getDefault().toString();
-		}
-		return lang;
-	}
-	
+    public static final String[] stripQuotesAndExtraChars(String[] split, String sep) {
+        List<String> result = new ArrayList<>();
+        boolean append = false;
+        for (int i = 0; i<split.length; i++) {
+            if (append) {
+                int index = result.size()-1;
+                if (split[i].endsWith("\"") && StringUtils.countMatches(split[i], "\"") % 2 == 1) {
+                    append = false;
+                }
+                result.set(index, result.get(index)+sep+split[i].replaceAll("\"", ""));
+            } else if (split[i].startsWith("\"")) {
+                if (!(split[i].endsWith("\"") && StringUtils.countMatches(split[i], "\"") % 2 == 0)) {
+                    append = true;
+                }
+                result.add(split[i].replaceAll("\"", ""));
+            } else {
+                result.add(split[i]);
+            }
+        }
+        // Remove exotic characters such as U+FEFF found in some CSV files
+        for (ListIterator<String> it = result.listIterator(); it.hasNext();) {
+            it.set(Utils.strip(it.next()));
+        }
+        return result.toArray(new String[0]);
+    }
+    
+    public static final ImageIcon getImageIcon(String iconName) {
+        return getImageIcon(iconName, false);
+    }
+    
+    public static final ImageIcon getImageIcon(String iconName, boolean optional) {
+        return new ImageProvider(iconName).setOptional(optional).setAdditionalClassLoaders(ModuleHandler.getResourceClassLoaders()).get();
+    }
+    
+    public static final String getJosmLanguage() {
+        String lang = Main.pref.get("language");
+        if (lang == null || lang.isEmpty()) {
+            lang = Locale.getDefault().toString();
+        }
+        return lang;
+    }
+    
     public static final double convertMinuteSecond(double minute, double second) {
         return (minute/60.0) + (second/3600.0);
