Index: applications/editors/josm/plugins/opendata/build.xml
===================================================================
--- applications/editors/josm/plugins/opendata/build.xml	(revision 30571)
+++ applications/editors/josm/plugins/opendata/build.xml	(revision 30573)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <project name="opendata" default="dist" basedir=".">
-    <property name="plugin.main.version" value="7291"/>
+    <property name="plugin.main.version" value="7371"/>
     <property name="plugin.author" value="Don-vip"/>
     <property name="plugin.class" value="org.openstreetmap.josm.plugins.opendata.OdPlugin"/>
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 30571)
+++ applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/AbstractImporter.java	(revision 30573)
@@ -2,7 +2,13 @@
 package org.openstreetmap.josm.plugins.opendata.core.io;
 
+import static org.openstreetmap.josm.tools.I18n.tr;
+
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.io.InputStream;
 
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.actions.ExtensionFileFilter;
 import org.openstreetmap.josm.data.osm.DataSet;
@@ -45,5 +51,11 @@
 			this.handler = findDataSetHandler(file);
 		}
-		super.importData(file, progressMonitor);
+		// Do not call super.importData because Compression.getUncompressedFileInputStream skips the first entry
+        try (InputStream in = new FileInputStream(file)) {
+            importData(in, file, progressMonitor);
+        } catch (FileNotFoundException e) {
+            Main.error(e);
+            throw new IOException(tr("File ''{0}'' does not exist.", file.getName()), e);
+        }
 	}
 
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 30571)
+++ applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/ZipReader.java	(revision 30573)
@@ -18,4 +18,5 @@
 import javax.xml.stream.XMLStreamException;
 
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
@@ -45,4 +46,7 @@
     protected void extractArchive(final File temp, final List<File> candidates) throws IOException, FileNotFoundException {
         while ((entry = zis.getNextEntry()) != null) {
+            if (Main.isDebugEnabled()) {
+                Main.debug("Extracting "+entry.getName());
+            }
             File file = new File(temp + File.separator + entry.getName());
             File parent = file.getParentFile();
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 30571)
+++ applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/MifDatum.java	(revision 30573)
@@ -4,133 +4,140 @@
 import static org.openstreetmap.josm.plugins.opendata.core.io.geographic.MifEllipsoid.*;
 
-// TODO: finish
+/**
+ * MapInfo Interchange File (MIF) datums, based on this specification:<ul>
+ * <li><a href="https://github.com/tricycle/electrodrive-market-analysis/blob/master/specifications/Mapinfo_Mif.pdf">Mapinfo_Mif.pdf</a></li>
+ * </ul>
+ * This file has been stored in reference directory to avoid future dead links.
+ */
 public enum MifDatum {
-	Adindan(1, Clarke_1880),
-	Afgooye(2, Krassovsky),
-	Ain_el_Abd_1970(3, International),
-	Anna_1_Astro_1965(4, Australian_National),
-	Arc_1950(5, Clarke_1880),
-	Arc_1960(6, Clarke_1880),
-	Ascension_Island_1958(7, International),
-	Astro_Beacon_E(8, International),
-	Astro_B4_Sorol_Atoll(9, International),
-	Astro_DOS_71_4(10, International),
-	Astronomic_Station_1952(11, International),
-	Australian_Geodetic_1966_AGD_66(12, Australian_National),
-	Australian_Geodetic_1984_AGD_84(13, Australian_National),
-	Belgium(110, International),
-	Bellevue_IGN(14, International),
-	Bermuda_1957(15, Clarke_1866),
-	Bogota_Observatory(16, International),
-//17 Campo_Inchauspe Argentina International),
-//18 Canton_Astro_1966 Phoenix Islands International),
-//19 Cape South Africa Clarke_1880),
-//20 Cape Canaveral Florida and Bahama Islands Clarke_1866),
-//21 Carthage Tunisia Clarke_1880),
-//22 Chatham 1971 Chatham Island (New Zealand) International),
-//23 Chua Astro Paraguay International),
-//24 Corrego Alegre Brazil International),
-//1000 Deutsches 	Hauptdreicksnetz 	(DHDN) 	Germany Bessel),
-//25 Djakarta (Batavia) Sumatra Island (Indonesia) Bessel 1841),
-//26 DOS 1968 Gizo Island (New Georgia Islands) International),
-//27 Easter Island 1967 Easter Island International),
-	European_1950_ED_50(28, International),
-	European_1979_ED_79(29, International),
-	European_1987_ED_87(108, International),
-	Gandajika_Base(30, International),
-	Geodetic_Datum_1949(31, International),
-	Geodetic_Reference_System_1967_GRS_67(32, GRS_67),
-	Geodetic_Reference_System_1980_GRS_80(33, GRS_80),
-//34 Guam 1963 Guam Island Clarke_1866),
-//35 GUX 1 Astro Guadalcanal Island International),
-//36 Hito XVIII 1963 South Chile (near 53°S) International),
-//37 Hjorsey 1955 Iceland International),
-//38 Hong Kong 1963 Hong Kong International),
-//39 Hu–Tzu–Shan Taiwan International),
-//40 Indian Thailand and Vietnam Everest),
-//41 Indian Bangladesh, India, Nepal Everest),
-//42 Ireland 1965 Ireland Modified Airy),
-//43 ISTS 073 Astro 1969 Diego Garcia International),
-//44 Johnston Island 1961 Johnston Island International),
-//45 Kandawala Sri Lanka Everest),
-//46 Kerguelen Island Kerguelen Island International),
-//47 Kertau 1948 West Malaysia and Singapore Modified Everest),
-//48 L.C. 5 Astro Cayman Brac Island Clarke_1866),
-//49 Liberia 1964 Liberia Clarke_1880),
-//113 Lisboa (DLx) Portugal International),
-//50 Luzon Philippines (excluding Mindanao Island) Clarke_1866),
-//51 Luzon Mindanao Island Clarke_1866),
-//52 Mahe 1971 Mahe Island Clarke_1880),
-//53 Marco Astro Salvage Islands International),
-//54 Massawa Eritrea (Ethiopia) Bessel 1841),
-//114 Melrica 1973 (D73) Portugal International),
-//55 Merchich Morocco Clarke_1880),
-//56 Midway Astro 1961 Midway Island International),
-//57 Minna Nigeria Clarke_1880),
-//58 Nahrwan Masirah Island (Oman) Clarke_1880),
-//59 Nahrwan United Arab Emirates Clarke_1880),
-//60 Nahrwan Saudi Arabia Clarke_1880),
-//61 Naparima, BWI Trinidad and Tobago International),
-//109 Netherlands Netherlands Bessel),
-	North_American_1927_NAD_27_CONTINENTAL(62, Clarke_1866),
-	North_American_1927_NAD_27_ALASKA(63, Clarke_1866),
-	North_American_1927_NAD_27_BAHAMAS(64, Clarke_1866),
-	North_American_1927_NAD_27_SAN_SALVADOR(65, Clarke_1866),
-	North_American_1927_NAD_27_CANADA(66, Clarke_1866),
-	North_American_1927_NAD_27_CANAL_ZONE(67, Clarke_1866),
-	North_American_1927_NAD_27_CARIBBEAN(68, Clarke_1866),
-	North_American_1927_NAD_27_CENTRAL_AMERICA(69, Clarke_1866),
-	North_American_1927_NAD_27_CUBA(70, Clarke_1866),
-	North_American_1927_NAD_27_GREENLAND(71, Clarke_1866),
-	North_American_1927_NAD_27_MEXICO(72, Clarke_1866),
-	North_American_1927_NAD_27_MICHIGAN(73, Modified_Clarke_1866),
-	North_American_1983_NAD_83(74, GRS_80),
-	Nouvelle_Triangulation_Francaise_NTF(107, Clarke_1880),
-	Nouvelle_Triangulation_Francaise_NTF_Greenwich_Prime_Meridian(1002, Clarke_1880),
-	NWGL_10(111, WGS_72),
-//75 Observatorio 1966 Corvo and Flores Islands (Azores) International),
-//76 Old Egyptian Egypt Helmert 1906),
-//77 Old Hawaiian Hawaii Clarke_1866),
-//78 Oman Oman Clarke_1880),
-//79 Ordnance Survey of Great Britain 1936 England, Isle of Man, Scotland, Shetland Islands, Wales Airy),
-//80 Pico de las Nieves Canary Islands International),
-//81 Pitcairn Astro 1967 Pitcairn Island International),
-//1000 Potsdam Germany Bessel),
-//36 Provisional South Chilean 1963 South Chile (near 53°S) International),
-//82 Provisional South American 1956 Bolivia, Chile, Colombia, Ecuador, Guyana, Peru, Venezuela International),
-//83 Puerto Rico Puerto Rico and Virgin Islands Clarke_1866),
-//1001 Pulkovo 1942 Germany Krassovsky),
-//84 Qatar National Qatar International),
-//85 Qornoq South Greenland International),
-//1000 Rauenberg Germany Bessel),
-//86 Reunion Mascarene Island International),
-//112 Rikets Triangulering 1990 (RT 90) Sweden Bessel),
-//87 Rome 1940 Sardinia Island International),
-//88 Santo (DOS) Espirito Santo Island International),
-//89 São Braz São Miguel, Santa Maria Islands (Azores) International),
-//90 Sapper Hill 1943 East Falkland Island International),
-//91 Schwarzeck Namibia Modified Bessel 1841),
-//92 South American 1969 Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Guyana, Paraguay, Peru, Venezuela, Trinidad, and Tobago South American 1969),
-//93 South Asia Singapore Modified Fischer 1960),
-//94 Southeast Base Porto Santo and Madeira Islands International),
-//95 Southwest Base Faial, Graciosa, Pico, Sao Jorge, Terceira Islands (Azores) International),
-//1003 Switzerland (CH 1903) Switzerland Bessel),
-//96 Timbalai 1948 Brunei and East Malaysia (Sarawak and Sabah) Everest),
-//97 Tokyo Japan, Korea, Okinawa Bessel 1841),
-//98 Tristan Astro 1968 Tristan da Cunha International),
-//99 Viti Levu 1916 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);
+	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),
+    Cape_Canaveral(20, "Florida and Bahama Islands", Clarke_1866),
+    Carthage(21, "Tunisia", Clarke_1880),
+    Chatham_1971(22, "Chatham Island (New Zealand)", International),
+    Chua_Astro(23, "Paraguay", International),
+    Corrego_Alegre(24, "Brazil", International),
+    Deutsches_Hauptdreicksnetz_DHDN(1000, "Germany", Bessel),
+    Djakarta_Batavia(25, "Sumatra Island (Indonesia)", Bessel_1841),
+    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),
+    Mahe_1971(52, "Mahe Island", Clarke_1880),
+    Marco_Astro(53, "Salvage Islands", International),
+    Massawa(54, "Eritrea (Ethiopia)", Bessel_1841),
+    Melrica_1973_D73(114, "Portugal", International),
+    Merchich(55, "Morocco", Clarke_1880),
+    Midway_Astro_1961(56, "Midway Island", International),
+    Minna(57, "Nigeria", Clarke_1880),
+    Nahrwan_58(58, "Masirah Island (Oman)", Clarke_1880),
+    Nahrwan_59(59, "United Arab Emirates", Clarke_1880),
+    Nahrwan_60(60, "Saudi Arabia", Clarke_1880),
+    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),
+    Observatorio_1966(75, "Corvo and Flores Islands (Azores)", International),
+    Old_Egyptian(76, "Egypt", Helmert_1906),
+    Old_Hawaiian(77, "Hawaii", Clarke_1866),
+    Oman(78, "Oman", Clarke_1880),
+    Ordnance_Survey_of_Great_Britain_1936(79, "England, Isle of Man, Scotland, Shetland Islands, Wales", Airy),
+    Pico_de_las_Nieves(80, "Canary Islands", International),
+    Pitcairn_Astro_1967(81, "Pitcairn Island", International),
+    Potsdam(1000, "Germany", Bessel),
+    Provisional_South_Chilean_1963(36, "South Chile (near 53°S)", International),
+    Provisional_South_American_1956(82, "Bolivia, Chile, Colombia, Ecuador, Guyana, Peru, Venezuela", International),
+    Puerto_Rico(83, "Puerto Rico and Virgin Islands", Clarke_1866),
+    Pulkovo_1942(1001, "Germany", Krassovsky),
+    Qatar_National(84, "Qatar", International),
+    Qornoq(85, "South Greenland", International),
+    Rauenberg(1000, "Germany", Bessel),
+    Reunion(86, "Mascarene Island", International),
+    Rikets_Triangulering_1990_RT_90(112, "Sweden", Bessel),
+    Rome_1940(87, "Sardinia Island", International),
+    Santo_DOS(88, "Espirito Santo Island", International),
+    Sao_Braz(89, "São Miguel, Santa Maria Islands (Azores)", International),
+    Sapper_Hill_1943(90, "East Falkland Island", International),
+    Schwarzeck(91, "Namibia Modified", Bessel_1841),
+    South_American_1969(92, "Argentina, Bolivia, Brazil, Chile, Colombia, Ecuador, Guyana, Paraguay, Peru, Venezuela, Trinidad, and Tobago", MifEllipsoid.South_American_1969),
+    South_Asia(93, "Singapore", Modified_Fischer_1960),
+    Southeast_Base(94, "Porto Santo and Madeira Islands", International),
+    Southwest_Base(95, "Faial, Graciosa, Pico, Sao Jorge, Terceira Islands (Azores)", International),
+    Switzerland_CH_1903(1003, "Switzerland", Bessel),
+    Timbalai_1948(96, "Brunei and East Malaysia (Sarawak and Sabah)", Everest),
+    Tokyo(97, "Japan, Korea, Okinawa", Bessel_1841),
+    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;
+    private final String area;
 	private final MifEllipsoid ellipsoid;
-	private MifDatum(Integer code, MifEllipsoid ellipsoid) {
+	private MifDatum(Integer code, String area, MifEllipsoid ellipsoid) {
 		this.code = code;
+		this.area = area;
 		this.ellipsoid = ellipsoid;
 	}
@@ -138,4 +145,7 @@
 		return code;
 	}
+    public final String getArea() {
+        return area;
+    }
 	public final MifEllipsoid getEllipsoid() {
 		return ellipsoid;
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 30571)
+++ applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/MifEllipsoid.java	(revision 30573)
@@ -2,4 +2,10 @@
 package org.openstreetmap.josm.plugins.opendata.core.io.geographic;
 
+/**
+ * MapInfo Interchange File (MIF) ellipsoids, based on this specification:<ul>
+ * <li><a href="https://github.com/tricycle/electrodrive-market-analysis/blob/master/specifications/Mapinfo_Mif.pdf">Mapinfo_Mif.pdf</a></li>
+ * </ul>
+ * This file has been stored in reference directory to avoid future dead links.
+ */
 public enum MifEllipsoid {
 	Airy,
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 30571)
+++ applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/MifProjection.java	(revision 30573)
@@ -2,40 +2,61 @@
 package org.openstreetmap.josm.plugins.opendata.core.io.geographic;
 
+/**
+ * MapInfo Interchange File (MIF) projections, based on this specification:<ul>
+ * <li><a href="https://github.com/tricycle/electrodrive-market-analysis/blob/master/specifications/Mapinfo_Mif.pdf">Mapinfo_Mif.pdf</a></li>
+ * </ul>
+ * This file has been stored in reference directory to avoid future dead links.
+ */
 public enum MifProjection {
-	Albers_Equal_Area_Conic(9),
-	Azimuthal_Equidistant_polar_aspect_only(5),
-	Cylindrical_Equal_Area(2),
-	Eckert_IV(14),
-	Eckert_VI(15),
-	Equidistant_Conic_also_known_as_Simple_Conic(6),
-	Gall(17),
-	Hotine_Oblique_Mercator(7),
-	Lambert_Azimuthal_Equal_Area_polar_aspect_only(4),
-	Lambert_Conformal_Conic(3),
-	Lambert_Conformal_Conic_modified_for_Belgium_1972(19),
-	Longitude_Latitude(1),
-	Mercator(10),
-	Miller_Cylindrical(11),
-	New_Zealand_Map_Grid(18),
-	Mollweide(13),
-	Polyconic(27),
-	Regional_Mercator(26),
-	Robinson(12),
-	Sinusoidal(16),
-	Stereographic(20),
-	Swiss_Oblique_Mercator(25),
-	Transverse_Mercator_also_known_as_Gauss_Kruger(8),
-	Transverse_Mercator_modified_for_Danish_System_34_Jylland_Fyn(21),
-	Transverse_Mercator_modified_for_Sjaelland(22),
-	Transverse_Mercator_modified_for_Danish_System_45_Bornholm(23),
-	Transverse_Mercator_modified_for_Finnish_KKJ(24);
+	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 MifProjection(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.
+     *
+     * @return The Proj.4 identifier (as reported by cs2cs -lp).
+     * If no id exists, return {@code null}.
+     */
+    public final String getProj4Id() {
+        return proj4id;
+    }
+    
 	public static MifProjection forCode(Integer code) {
 		for (MifProjection p : values()) {
Index: applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/MifReader.java
===================================================================
--- applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/MifReader.java	(revision 30571)
+++ applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/MifReader.java	(revision 30573)
@@ -24,4 +24,6 @@
 import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.data.projection.CustomProjection;
+import org.openstreetmap.josm.data.projection.CustomProjection.Param;
 import org.openstreetmap.josm.data.projection.Projection;
 import org.openstreetmap.josm.data.projection.Projections;
@@ -33,7 +35,8 @@
 /**
  * MapInfo Interchange File (MIF) reader, based on these specifications:<ul>
- * <li><a href="http://www.gissky.com/Download/Download/DataFormat/Mapinfo_Mif.pdf">Mapinfo_Mif.pdf (dead link)</a></li>
+ * <li><a href="https://github.com/tricycle/electrodrive-market-analysis/blob/master/specifications/Mapinfo_Mif.pdf">Mapinfo_Mif.pdf</a></li>
  * <li><a href="http://resource.mapinfo.com/static/files/document/1074660800077/interchange_file.pdf">interchange_file.pdf</a></li>
  * </ul>
+ * These files have been stored in reference directory to avoid future dead links.
  */
 public class MifReader extends AbstractMapInfoReader {
@@ -102,4 +105,8 @@
         Main.warn("TODO Index: "+line);
     }
+    
+    private static String param(Param p, Object value) {
+        return " +"+p.key+"="+value;
+    }
 
     private void parseCoordSysSyntax1(String[] words) {
@@ -115,9 +122,14 @@
         }
         
+        // Initialize proj4-like parameters
+        String params = param(Param.proj, proj.getProj4Id());
+        
         // Units
         units = words[5+offset];
+        params += param(Param.units, units);
         
         // Origin, longitude
         originLon = Double.parseDouble(words[6+offset]);
+        params += param(Param.lon_0, originLon);
         
         // Origin, latitude
@@ -140,4 +152,5 @@
         case Polyconic:
             originLat = Double.parseDouble(words[7+offset]);
+            params += param(Param.lat_0, originLat);
             break;
         }
@@ -148,4 +161,5 @@
         case Regional_Mercator:
             stdP1 = Double.parseDouble(words[7+offset]);
+            params += param(Param.lat_1, stdP1);
             break;
         case Albers_Equal_Area_Conic:
@@ -154,4 +168,5 @@
         case Lambert_Conformal_Conic_modified_for_Belgium_1972:
             stdP1 = Double.parseDouble(words[8+offset]);
+            params += param(Param.lat_1, stdP1);
             break;
         }
@@ -164,4 +179,5 @@
         case Lambert_Conformal_Conic_modified_for_Belgium_1972:
             stdP2 = Double.parseDouble(words[9+offset]);
+            params += param(Param.lat_2, stdP2);
             break;
         }
@@ -170,4 +186,5 @@
         if (proj == Hotine_Oblique_Mercator) {
             azimuth = Double.parseDouble(words[8+offset]);
+            // TODO: what's proj4 parameter ?
         }
 
@@ -176,4 +193,5 @@
         case Hotine_Oblique_Mercator:
             scaleFactor = Double.parseDouble(words[9+offset]);
+            params += param(Param.k_0, scaleFactor);
             break;
         case Stereographic:
@@ -184,4 +202,5 @@
         case Transverse_Mercator_modified_for_Sjaelland:
             scaleFactor = Double.parseDouble(words[8+offset]);
+            params += param(Param.k_0, scaleFactor);
             break;
         }
@@ -196,4 +215,6 @@
             falseEasting = Double.parseDouble(words[10+offset]);
             falseNorthing = Double.parseDouble(words[11+offset]);
+            params += param(Param.x_0, falseEasting);
+            params += param(Param.y_0, falseNorthing);
             break;
         case Stereographic:
@@ -205,4 +226,6 @@
             falseEasting = Double.parseDouble(words[9+offset]);
             falseNorthing = Double.parseDouble(words[10+offset]);
+            params += param(Param.x_0, falseEasting);
+            params += param(Param.y_0, falseNorthing);
             break;
         case New_Zealand_Map_Grid:
@@ -211,4 +234,6 @@
             falseEasting = Double.parseDouble(words[8+offset]);
             falseNorthing = Double.parseDouble(words[9+offset]);
+            params += param(Param.x_0, falseEasting);
+            params += param(Param.y_0, falseNorthing);
             break;
         }
@@ -219,4 +244,5 @@
         case Lambert_Azimuthal_Equal_Area_polar_aspect_only:
             range = Double.parseDouble(words[8+offset]);
+            // TODO: what's proj4 parameter ?
         }
 
@@ -236,7 +262,4 @@
             }
             break;
-        default:
-            // TODO
-            Main.warn("TODO proj: "+line);
         }
         
@@ -246,4 +269,10 @@
         // handle cases with Bounds declaration
         parseBounds(words, index);
+        
+        if (josmProj == null) {
+            Main.info(line);
+            Main.info(params);
+            josmProj = new CustomProjection(params);
+        }
     }
 
@@ -344,9 +373,13 @@
 
     private void parseRegion(String[] words) throws IOException {
-        region = new Relation();
-        region.put("type", "multipolygon");
-        ds.addPrimitive(region);
-        readAttributes(region);
         numpolygons = Integer.parseInt(words[1]);
+        if (numpolygons > 1) {
+            region = new Relation();
+            region.put("type", "multipolygon");
+            ds.addPrimitive(region);
+            readAttributes(region);
+        } else {
+            region = null;
+        }
         state = State.START_POLYGON;
     }
@@ -416,5 +449,9 @@
                 polygon = new Way();
                 ds.addPrimitive(polygon);
-                region.addMember(new RelationMember("outer", polygon));
+                if (region != null) {
+                    region.addMember(new RelationMember("outer", polygon));
+                } else {
+                    readAttributes(polygon);
+                }
                 state = State.READING_POINTS;
                 
@@ -437,4 +474,7 @@
                 if (--numpts == 0) {
                     if (numpolygons > -1) {
+                        if (!polygon.isClosed()) {
+                            polygon.addNode(polygon.firstNode());
+                        }
                         if (--numpolygons > 0) {
                             state = State.START_POLYGON;
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 30571)
+++ applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/MifUnit.java	(revision 30573)
@@ -2,4 +2,10 @@
 package org.openstreetmap.josm.plugins.opendata.core.io.geographic;
 
+/**
+ * MapInfo Interchange File (MIF) units, based on this specification:<ul>
+ * <li><a href="https://github.com/tricycle/electrodrive-market-analysis/blob/master/specifications/Mapinfo_Mif.pdf">Mapinfo_Mif.pdf</a></li>
+ * </ul>
+ * This file has been stored in reference directory to avoid future dead links.
+ */
 public enum MifUnit {
 	Centimeters(6),
Index: applications/editors/josm/plugins/opendata/test/unit/org/openstreetmap/josm/plugins/opendata/core/io/NonRegFunctionalTests.java
===================================================================
--- applications/editors/josm/plugins/opendata/test/unit/org/openstreetmap/josm/plugins/opendata/core/io/NonRegFunctionalTests.java	(revision 30571)
+++ applications/editors/josm/plugins/opendata/test/unit/org/openstreetmap/josm/plugins/opendata/core/io/NonRegFunctionalTests.java	(revision 30573)
@@ -18,5 +18,6 @@
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
-import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.Relation;
+import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 
@@ -26,8 +27,21 @@
      * Non-regression generic test.
      */
-    public static void testGeneric(DataSet ds) {
+    public static void testGeneric(String context, DataSet ds) {
         CheckParameterUtil.ensureParameterNotNull(ds, "ds");
-        Collection<OsmPrimitive> prims = ds.allPrimitives();
-        assertFalse(prims.isEmpty());
+        // Every dataset should at least contain a node
+        Collection<Node> nodes = ds.getNodes();
+        assertFalse("No nodes in dataset for "+context, nodes.isEmpty());
+        // Nodes should all have coordinates
+        for (Node n : nodes) {
+            assertTrue("Node without coordinate found for "+context, n.getCoor() != null);
+        }
+        // and no empty ways
+        for (Way w : ds.getWays()) {
+            assertTrue("Empty way found for "+context, w.getNodesCount() > 0);
+        }
+        // neither empty relations
+        for (Relation r : ds.getRelations()) {
+            assertTrue("Empty relation found for "+context, r.getMembersCount() > 0);
+        }
     }
     
@@ -36,5 +50,5 @@
      */
     public static void testTicket10214(DataSet ds) {
-        testGeneric(ds);
+        testGeneric("#10214", ds);
         boolean found = false;
         for (Node n : ds.getNodes()) {
Index: applications/editors/josm/plugins/opendata/test/unit/org/openstreetmap/josm/plugins/opendata/core/io/archive/ZipReaderTest.java
===================================================================
--- applications/editors/josm/plugins/opendata/test/unit/org/openstreetmap/josm/plugins/opendata/core/io/archive/ZipReaderTest.java	(revision 30571)
+++ applications/editors/josm/plugins/opendata/test/unit/org/openstreetmap/josm/plugins/opendata/core/io/archive/ZipReaderTest.java	(revision 30573)
@@ -40,10 +40,11 @@
     public void testReadZipFiles() throws IOException, XMLStreamException, FactoryConfigurationError, JAXBException {
         for (Path p : NonRegFunctionalTests.listDataFiles("zip")) {
-            File file = p.toFile();
-            Main.info("Testing reading file "+file.getPath());
-            try (InputStream is = new FileInputStream(file)) {
+            File zipfile = p.toFile();
+            Main.info("Testing reading file "+zipfile.getPath());
+            try (InputStream is = new FileInputStream(zipfile)) {
                 for (Entry<File, DataSet> entry : ZipReader.parseDataSets(is, null, null, false).entrySet()) {
-                    Main.info("Checking dataset for entry "+entry.getKey().getName());
-                    NonRegFunctionalTests.testGeneric(entry.getValue());
+                    String name = entry.getKey().getName();
+                    Main.info("Checking dataset for entry "+name);
+                    NonRegFunctionalTests.testGeneric(zipfile.getName()+"/"+name, entry.getValue());
                 }
             }
Index: applications/editors/josm/plugins/opendata/test/unit/org/openstreetmap/josm/plugins/opendata/core/io/geographic/KmlReaderTest.java
===================================================================
--- applications/editors/josm/plugins/opendata/test/unit/org/openstreetmap/josm/plugins/opendata/core/io/geographic/KmlReaderTest.java	(revision 30571)
+++ applications/editors/josm/plugins/opendata/test/unit/org/openstreetmap/josm/plugins/opendata/core/io/geographic/KmlReaderTest.java	(revision 30573)
@@ -49,5 +49,5 @@
         File file = new File(TestUtils.getRegressionDataFile(7714, "doc.kml"));
         try (InputStream is = new FileInputStream(file)) {
-            NonRegFunctionalTests.testGeneric(KmlReader.parseDataSet(is, null));
+            NonRegFunctionalTests.testGeneric("#7714", KmlReader.parseDataSet(is, null));
         }
     }
Index: applications/editors/josm/plugins/opendata/test/unit/org/openstreetmap/josm/plugins/opendata/core/io/geographic/MifReaderTest.java
===================================================================
--- applications/editors/josm/plugins/opendata/test/unit/org/openstreetmap/josm/plugins/opendata/core/io/geographic/MifReaderTest.java	(revision 30571)
+++ applications/editors/josm/plugins/opendata/test/unit/org/openstreetmap/josm/plugins/opendata/core/io/geographic/MifReaderTest.java	(revision 30573)
@@ -34,5 +34,5 @@
         File file = new File(TestUtils.getRegressionDataFile(9592, "bg.mif"));
         try (InputStream is = new FileInputStream(file)) {
-            NonRegFunctionalTests.testGeneric(MifReader.parseDataSet(is, file, null, null));
+            NonRegFunctionalTests.testGeneric("#9592", MifReader.parseDataSet(is, file, null, null));
         }
     }
Index: applications/editors/josm/plugins/opendata/test/unit/org/openstreetmap/josm/plugins/opendata/core/io/geographic/ShpReaderTest.java
===================================================================
--- applications/editors/josm/plugins/opendata/test/unit/org/openstreetmap/josm/plugins/opendata/core/io/geographic/ShpReaderTest.java	(revision 30571)
+++ applications/editors/josm/plugins/opendata/test/unit/org/openstreetmap/josm/plugins/opendata/core/io/geographic/ShpReaderTest.java	(revision 30573)
@@ -49,5 +49,5 @@
         File file = new File(TestUtils.getRegressionDataFile(8309, "new_ti_declarada.shp"));
         try (InputStream is = new FileInputStream(file)) {
-            NonRegFunctionalTests.testGeneric(ShpReader.parseDataSet(is, file, null, null));
+            NonRegFunctionalTests.testGeneric("#8309", ShpReader.parseDataSet(is, file, null, null));
         }
     }
Index: applications/editors/josm/plugins/opendata/test/unit/org/openstreetmap/josm/plugins/opendata/core/io/tabular/CsvReaderTest.java
===================================================================
--- applications/editors/josm/plugins/opendata/test/unit/org/openstreetmap/josm/plugins/opendata/core/io/tabular/CsvReaderTest.java	(revision 30571)
+++ applications/editors/josm/plugins/opendata/test/unit/org/openstreetmap/josm/plugins/opendata/core/io/tabular/CsvReaderTest.java	(revision 30573)
@@ -77,5 +77,5 @@
         File file = new File(TestUtils.getRegressionDataFile(8805, "XXX.csv"));
         try (InputStream is = new FileInputStream(file)) {
-            NonRegFunctionalTests.testGeneric(CsvReader.parseDataSet(is, newHandler("EPSG:4326"), null));
+            NonRegFunctionalTests.testGeneric("#8805", CsvReader.parseDataSet(is, newHandler("EPSG:4326"), null));
         }
     }
