Index: applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/Common/BindInfo.java
===================================================================
--- applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/Common/BindInfo.java	(revision 30567)
+++ applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/Common/BindInfo.java	(revision 30568)
@@ -5,6 +5,6 @@
 
 public class BindInfo {
-    public RecordVector<CoderStreamsInfo> Coders = new RecordVector<CoderStreamsInfo>();
-    public RecordVector<BindPair> BindPairs = new RecordVector<BindPair>();
+    public RecordVector<CoderStreamsInfo> Coders = new RecordVector<>();
+    public RecordVector<BindPair> BindPairs = new RecordVector<>();
     public IntVector InStreams = new IntVector();
     public IntVector OutStreams = new IntVector();
Index: applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/Common/CoderMixer2ST.java
===================================================================
--- applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/Common/CoderMixer2ST.java	(revision 30567)
+++ applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/Common/CoderMixer2ST.java	(revision 30568)
@@ -20,5 +20,5 @@
     
     BindInfo _bindInfo = new BindInfo();
-    ObjectVector<STCoderInfo> _coders = new ObjectVector<STCoderInfo>();
+    ObjectVector<STCoderInfo> _coders = new ObjectVector<>();
     
     public CoderMixer2ST() {
@@ -202,6 +202,6 @@
         CoderInfo mainCoder = _coders.get(_mainCoderIndex);
         
-        ObjectVector< java.io.InputStream > seqInStreams = new ObjectVector< java.io.InputStream >(); // CObjectVector< CMyComPtr<ISequentialInStream> >
-        ObjectVector< java.io.OutputStream > seqOutStreams = new ObjectVector< java.io.OutputStream >(); // CObjectVector< CMyComPtr<ISequentialOutStream> >
+        ObjectVector< java.io.InputStream > seqInStreams = new ObjectVector< >(); // CObjectVector< CMyComPtr<ISequentialInStream> >
+        ObjectVector< java.io.OutputStream > seqOutStreams = new ObjectVector< >(); // CObjectVector< CMyComPtr<ISequentialOutStream> >
         int startInIndex = _bindInfo.GetCoderInStreamIndex(_mainCoderIndex);
         int startOutIndex = _bindInfo.GetCoderOutStreamIndex(_mainCoderIndex);
@@ -220,6 +220,6 @@
             seqOutStreams.add(seqOutStream);
         }
-        RecordVector< java.io.InputStream > seqInStreamsSpec = new RecordVector< java.io.InputStream >();
-        RecordVector< java.io.OutputStream > seqOutStreamsSpec = new RecordVector< java.io.OutputStream >();
+        RecordVector< java.io.InputStream > seqInStreamsSpec = new RecordVector< >();
+        RecordVector< java.io.OutputStream > seqOutStreamsSpec = new RecordVector< >();
         for (i = 0; i < mainCoder.NumInStreams; i++)
             seqInStreamsSpec.add(seqInStreams.get(i));
Index: applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/Common/FilterCoder.java
===================================================================
--- applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/Common/FilterCoder.java	(revision 30567)
+++ applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/Common/FilterCoder.java	(revision 30568)
@@ -4,5 +4,4 @@
 import java.io.IOException;
 
-import org.j7zip.SevenZip.HRESULT;
 import org.j7zip.SevenZip.ICompressCoder;
 import org.j7zip.SevenZip.ICompressSetOutStream;
Index: applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/SevenZip/ArchiveDatabase.java
===================================================================
--- applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/SevenZip/ArchiveDatabase.java	(revision 30567)
+++ applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/SevenZip/ArchiveDatabase.java	(revision 30568)
@@ -10,7 +10,7 @@
     public BoolVector PackCRCsDefined = new BoolVector();
     public IntVector PackCRCs = new IntVector();
-    public ObjectVector<Folder> Folders = new ObjectVector<Folder>();
+    public ObjectVector<Folder> Folders = new ObjectVector<>();
     public IntVector NumUnPackStreamsVector = new IntVector();
-    public ObjectVector<FileItem> Files = new ObjectVector<FileItem>();
+    public ObjectVector<FileItem> Files = new ObjectVector<>();
     
     void Clear() {
Index: applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/SevenZip/BindInfoEx.java
===================================================================
--- applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/SevenZip/BindInfoEx.java	(revision 30567)
+++ applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/SevenZip/BindInfoEx.java	(revision 30568)
@@ -7,5 +7,5 @@
 class BindInfoEx extends BindInfo {
     
-    RecordVector<MethodID> CoderMethodIDs = new RecordVector<MethodID>();
+    RecordVector<MethodID> CoderMethodIDs = new RecordVector<>();
     
     public void Clear() {
Index: applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/SevenZip/CoderInfo.java
===================================================================
--- applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/SevenZip/CoderInfo.java	(revision 30567)
+++ applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/SevenZip/CoderInfo.java	(revision 30568)
@@ -7,5 +7,5 @@
     int NumInStreams;
     int NumOutStreams;
-    public ObjectVector<AltCoderInfo> AltCoders = new org.j7zip.Common.ObjectVector<AltCoderInfo>();
+    public ObjectVector<AltCoderInfo> AltCoders = new org.j7zip.Common.ObjectVector<>();
     
     boolean IsSimpleCoder() { return (NumInStreams == 1) && (NumOutStreams == 1); }
Index: applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/SevenZip/Decoder.java
===================================================================
--- applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/SevenZip/Decoder.java	(revision 30567)
+++ applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/SevenZip/Decoder.java	(revision 30568)
@@ -45,5 +45,5 @@
         
         _mixerCoder = null;
-        _decoders = new ObjectVector<Object>();
+        _decoders = new ObjectVector<>();
         
         // #ifndef EXCLUDE_COM -- LoadMethodMap();
@@ -117,5 +117,5 @@
         
         
-        ObjectVector<java.io.InputStream> inStreams = new ObjectVector<java.io.InputStream>(); // CObjectVector< CMyComPtr<ISequentialInStream> >
+        ObjectVector<java.io.InputStream> inStreams = new ObjectVector<>(); // CObjectVector< CMyComPtr<ISequentialInStream> >
         
         LockedInStream lockedInStream = new LockedInStream();
@@ -357,10 +357,10 @@
         if (numCoders == 0)
             return 0;
-        RecordVector<java.io.InputStream> inStreamPointers = new RecordVector<java.io.InputStream>(); // CRecordVector<ISequentialInStream *>
+        RecordVector<java.io.InputStream> inStreamPointers = new RecordVector<>(); // CRecordVector<ISequentialInStream *>
         inStreamPointers.Reserve(inStreams.size());
         for (i = 0; i < inStreams.size(); i++)
             inStreamPointers.add(inStreams.get(i));
 
-        RecordVector<java.io.OutputStream> outStreamPointer = new RecordVector<java.io.OutputStream>();
+        RecordVector<java.io.OutputStream> outStreamPointer = new RecordVector<>();
         outStreamPointer.add(outStream);
         return _mixerCoder.Code(
Index: applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/SevenZip/Folder.java
===================================================================
--- applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/SevenZip/Folder.java	(revision 30567)
+++ applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/SevenZip/Folder.java	(revision 30568)
@@ -11,6 +11,6 @@
 
 class Folder {
-    public RecordVector<CoderInfo> Coders = new RecordVector<CoderInfo>();
-    RecordVector<BindPair> BindPairs = new RecordVector<BindPair>();
+    public RecordVector<CoderInfo> Coders = new RecordVector<>();
+    RecordVector<BindPair> BindPairs = new RecordVector<>();
     IntVector PackStreams = new IntVector();
     LongVector UnPackSizes = new LongVector();
Index: applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/SevenZip/Handler.java
===================================================================
--- applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/SevenZip/Handler.java	(revision 30567)
+++ applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/SevenZip/Handler.java	(revision 30568)
@@ -84,5 +84,5 @@
             return HRESULT.S_OK;
         
-        ObjectVector<ExtractFolderInfo> extractFolderInfoVector = new ObjectVector<ExtractFolderInfo>();
+        ObjectVector<ExtractFolderInfo> extractFolderInfoVector = new ObjectVector<>();
         for(int ii = 0; ii < numItems; ii++) {
             int ref2Index = allFilesMode ? ii : indices[ii];
Index: applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/SevenZip/InArchive.java
===================================================================
--- applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/SevenZip/InArchive.java	(revision 30567)
+++ applications/editors/josm/plugins/opendata/includes/org/j7zip/SevenZip/Archive/SevenZip/InArchive.java	(revision 30568)
@@ -32,5 +32,5 @@
     
     public InArchive() {
-        _inByteVector = new ObjectVector<InByte2>();
+        _inByteVector = new ObjectVector<>();
         _inByteBack = new InByte2();
     }
@@ -710,5 +710,5 @@
         IntVector packCRCs = new IntVector(); // CRecordVector<UInt32> packCRCs;
         
-        ObjectVector<Folder> folders = new ObjectVector<Folder>();
+        ObjectVector<Folder> folders = new ObjectVector<>();
         
         IntVector numUnPackStreamsInFolders = new IntVector();
@@ -823,5 +823,5 @@
         streamSwitch.Set(this, buffer2);
         
-        ObjectVector<ByteBuffer> dataVector = new ObjectVector<ByteBuffer>(); // CObjectVector<CByteBuffer> dataVector;
+        ObjectVector<ByteBuffer> dataVector = new ObjectVector<>(); // CObjectVector<CByteBuffer> dataVector;
         
         for (;;) {
@@ -863,5 +863,5 @@
         }
         
-        ObjectVector<ByteBuffer> dataVector = new ObjectVector<ByteBuffer>();
+        ObjectVector<ByteBuffer> dataVector = new ObjectVector<>();
         
         if (type == NID.kAdditionalStreamsInfo) {
Index: applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ChildCreator.java
===================================================================
--- applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ChildCreator.java	(revision 30567)
+++ applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ChildCreator.java	(revision 30568)
@@ -37,5 +37,5 @@
             throw new NullPointerException("null content");
         this.content = content;
-        this.elemsOrder = new ArrayList<Element>(children);
+        this.elemsOrder = new ArrayList<>(children);
     }
 
Index: applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ImmutableDocStyledNode.java
===================================================================
--- applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ImmutableDocStyledNode.java	(revision 30567)
+++ applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ImmutableDocStyledNode.java	(revision 30568)
@@ -25,5 +25,5 @@
 
     private static final Set<Document> getDocuments(final ODPackage pkg) {
-        final Set<Document> res = new HashSet<Document>();
+        final Set<Document> res = new HashSet<>();
         for (final String entry : pkg.getEntries()) {
             final ODPackageEntry e = pkg.getEntry(entry);
Index: applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ODMeta.java
===================================================================
--- applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ODMeta.java	(revision 30567)
+++ applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ODMeta.java	(revision 30568)
@@ -42,5 +42,5 @@
     private static final Map<XMLVersion, List<Element>> ELEMS_ORDER;
     static {
-        ELEMS_ORDER = new HashMap<XMLVersion, List<Element>>(2);
+        ELEMS_ORDER = new HashMap<>(2);
         ELEMS_ORDER.put(XMLVersion.getOOo(), createChildren(XMLVersion.getOOo()));
         ELEMS_ORDER.put(XMLVersion.getOD(), createChildren(XMLVersion.getOD()));
@@ -50,5 +50,5 @@
         final Namespace meta = ins.getMETA();
         final Namespace dc = ins.getNS("dc");
-        final List<Element> res = new ArrayList<Element>(8);
+        final List<Element> res = new ArrayList<>(8);
         res.add(new Element("generator", meta));
         res.add(new Element("title", dc));
Index: applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ODPackage.java
===================================================================
--- applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ODPackage.java	(revision 30567)
+++ applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ODPackage.java	(revision 30568)
@@ -37,5 +37,5 @@
     private static final Set<String> subdocNames;
     static {
-        subdocNames = new HashSet<String>();
+        subdocNames = new HashSet<>();
         // section 2.1 of OpenDocument-v1.1-os.odt
         subdocNames.add("content.xml");
@@ -49,5 +49,5 @@
 
     public ODPackage() {
-        this.files = new HashMap<String, ODPackageEntry>();
+        this.files = new HashMap<>();
         this.file = null;
     }
Index: applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ODSingleXMLDocument.java
===================================================================
--- applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ODSingleXMLDocument.java	(revision 30567)
+++ applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ODSingleXMLDocument.java	(revision 30568)
@@ -28,5 +28,5 @@
     final static Set<String> DONT_PREFIX;
     static {
-        DONT_PREFIX = new HashSet<String>();
+        DONT_PREFIX = new HashSet<>();
         // don't touch to user fields and variables
         // we want them to be the same across the document
@@ -57,6 +57,6 @@
     ODSingleXMLDocument(ODSingleXMLDocument doc, ODPackage p) {
         super(doc);
-        this.stylesNames = new HashSet<String>(doc.stylesNames);
-        this.listStylesNames = new HashSet<String>(doc.listStylesNames);
+        this.stylesNames = new HashSet<>(doc.stylesNames);
+        this.listStylesNames = new HashSet<>(doc.listStylesNames);
         this.pkg = p;
         this.meta = ODMeta.create(this);
Index: applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ODXMLDocument.java
===================================================================
--- applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ODXMLDocument.java	(revision 30567)
+++ applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/ODXMLDocument.java	(revision 30568)
@@ -41,5 +41,5 @@
     private static final Map<XMLVersion, List<Element>> ELEMS_ORDER;
     static {
-        ELEMS_ORDER = new HashMap<XMLVersion, List<Element>>(2);
+        ELEMS_ORDER = new HashMap<>(2);
         ELEMS_ORDER.put(XMLVersion.getOOo(), createChildren(XMLVersion.getOOo()));
         ELEMS_ORDER.put(XMLVersion.getOD(), createChildren(XMLVersion.getOD()));
@@ -48,5 +48,5 @@
     private static final List<Element> createChildren(XMLVersion ins) {
         final Namespace ns = ins.getOFFICE();
-        final List<Element> res = new ArrayList<Element>(8);
+        final List<Element> res = new ArrayList<>(8);
         res.add(new Element("meta", ns));
         res.add(new Element("settings", ns));
@@ -63,5 +63,5 @@
     static private final Map<String, String> namePrefixes;
     static {
-        namePrefixes = new HashMap<String, String>();
+        namePrefixes = new HashMap<>();
         namePrefixes.put("table:table", "table");
         namePrefixes.put("text:a", "office");
Index: applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/StyleDesc.java
===================================================================
--- applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/StyleDesc.java	(revision 30567)
+++ applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/StyleDesc.java	(revision 30568)
@@ -68,7 +68,7 @@
         this.family = family;
         this.baseName = baseName;
-        this.refElements = new CollectionMap<String, String>();
+        this.refElements = new CollectionMap<>();
         // 4 since they are not common
-        this.multiRefElements = new CollectionMap<String, String>(4);
+        this.multiRefElements = new CollectionMap<>(4);
     }
 
Index: applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/StyleStyle.java
===================================================================
--- applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/StyleStyle.java	(revision 30567)
+++ applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/StyleStyle.java	(revision 30568)
@@ -37,6 +37,6 @@
     private static boolean descsLoaded = false;
     static {
-        family2Desc = new HashMap<XMLVersion, Map<String, StyleDesc<?>>>();
-        class2Desc = new HashMap<XMLVersion, Map<Class<? extends StyleStyle>, StyleDesc<?>>>();
+        family2Desc = new HashMap<>();
+        class2Desc = new HashMap<>();
         for (final XMLVersion v : XMLVersion.values()) {
             family2Desc.put(v, new HashMap<String, StyleDesc<?>>());
Index: applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/XMLVersion.java
===================================================================
--- applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/XMLVersion.java	(revision 30567)
+++ applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/XMLVersion.java	(revision 30568)
@@ -81,5 +81,5 @@
 
     private XMLVersion(String name, Namespace manifest) {
-        this.nss = new HashMap<String, Namespace>(16);
+        this.nss = new HashMap<>(16);
     }
 
Index: applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/Cell.java
===================================================================
--- applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/Cell.java	(revision 30567)
+++ applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/Cell.java	(revision 30568)
@@ -136,5 +136,5 @@
      */
     public String getTextValue(final boolean ooMode) {
-        final List<String> ps = new ArrayList<String>();
+        final List<String> ps = new ArrayList<>();
         for (final Object o : this.getElement().getChildren()) {
             final Element child = (Element) o;
Index: applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/Row.java
===================================================================
--- applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/Row.java	(revision 30567)
+++ applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/Row.java	(revision 30568)
@@ -44,5 +44,5 @@
         this.parent = parent;
         this.index = index;
-        this.cells = new ArrayList<Cell<D>>();
+        this.cells = new ArrayList<>();
         for (final Element cellElem : this.getCellElements()) {
             addCellElem(cellElem);
@@ -59,5 +59,5 @@
 
     private void addCellElem(final Element cellElem) {
-        final Cell<D> cell = new Cell<D>(this, cellElem);
+        final Cell<D> cell = new Cell<>(this, cellElem);
         this.cells.add(cell);
 
Index: applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/SpreadSheet.java
===================================================================
--- applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/SpreadSheet.java	(revision 30567)
+++ applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/SpreadSheet.java	(revision 30568)
@@ -49,5 +49,5 @@
 
         // map Sheet by XML elements so has not to depend on ordering or name
-        this.sheets = new HashMap<Element, Sheet>();
+        this.sheets = new HashMap<>();
     }
 
Index: applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/Table.java
===================================================================
--- applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/Table.java	(revision 30567)
+++ applications/editors/josm/plugins/opendata/includes/org/jopendocument/dom/spreadsheet/Table.java	(revision 30568)
@@ -44,6 +44,6 @@
         super(parent, local, TableStyle.class);
 
-        this.rows = new ArrayList<Row<D>>();
-        this.cols = new ArrayList<Column<D>>();
+        this.rows = new ArrayList<>();
+        this.cols = new ArrayList<>();
 
         this.readColumns();
@@ -71,9 +71,9 @@
 
     private final void addCol(Element clone) {
-        this.cols.add(new Column<D>(this, clone));
+        this.cols.add(new Column<>(this, clone));
     }
 
     private Tuple2<List<Element>, Integer> flatten(boolean col) {
-        final List<Element> res = new ArrayList<Element>();
+        final List<Element> res = new ArrayList<>();
         final Element header = this.getElement().getChild("table-header-" + getName(col) + "s", getTABLE());
         if (header != null)
@@ -128,5 +128,5 @@
 
     private synchronized void addRow(Element child) {
-        this.rows.add(new Row<D>(this, child, this.rows.size()));
+        this.rows.add(new Row<>(this, child, this.rows.size()));
     }
 
Index: applications/editors/josm/plugins/opendata/includes/org/jopendocument/io/SaxContentUnmarshaller.java
===================================================================
--- applications/editors/josm/plugins/opendata/includes/org/jopendocument/io/SaxContentUnmarshaller.java	(revision 30567)
+++ applications/editors/josm/plugins/opendata/includes/org/jopendocument/io/SaxContentUnmarshaller.java	(revision 30568)
@@ -40,5 +40,5 @@
 
     public SaxContentUnmarshaller() {
-        this.stack = new Stack<Object>();
+        this.stack = new Stack<>();
     }
 
Index: applications/editors/josm/plugins/opendata/includes/org/jopendocument/model/office/OfficeBody.java
===================================================================
--- applications/editors/josm/plugins/opendata/includes/org/jopendocument/model/office/OfficeBody.java	(revision 30567)
+++ applications/editors/josm/plugins/opendata/includes/org/jopendocument/model/office/OfficeBody.java	(revision 30568)
@@ -24,5 +24,5 @@
 public class OfficeBody {
 
-    private final List<OfficeSpreadsheet> officeSpreadsheets = new Vector<OfficeSpreadsheet>();
+    private final List<OfficeSpreadsheet> officeSpreadsheets = new Vector<>();
 
     public void addOfficeSpreadsheet(final OfficeSpreadsheet spread) {
Index: applications/editors/josm/plugins/opendata/includes/org/jopendocument/model/office/OfficeSpreadsheet.java
===================================================================
--- applications/editors/josm/plugins/opendata/includes/org/jopendocument/model/office/OfficeSpreadsheet.java	(revision 30567)
+++ applications/editors/josm/plugins/opendata/includes/org/jopendocument/model/office/OfficeSpreadsheet.java	(revision 30568)
@@ -22,5 +22,5 @@
 
 public class OfficeSpreadsheet {
-    List<TableTable> tables = new Vector<TableTable>();
+    List<TableTable> tables = new Vector<>();
 
     public void addTable(final TableTable table) {
Index: applications/editors/josm/plugins/opendata/includes/org/jopendocument/model/table/TableTable.java
===================================================================
--- applications/editors/josm/plugins/opendata/includes/org/jopendocument/model/table/TableTable.java	(revision 30567)
+++ applications/editors/josm/plugins/opendata/includes/org/jopendocument/model/table/TableTable.java	(revision 30568)
@@ -25,5 +25,5 @@
 
     // Une colonne ou ligne repeated est dupliquée dans la liste
-    ArrayList<TableTableColumn> columns = new ArrayList<TableTableColumn>();
+    ArrayList<TableTableColumn> columns = new ArrayList<>();
 
     private int printStartCol = 0;
@@ -35,5 +35,5 @@
     private int printStopRow = 0;
 
-    ArrayList<TableTableRow> rows = new ArrayList<TableTableRow>();
+    ArrayList<TableTableRow> rows = new ArrayList<>();
 
     public void addColumn(final TableTableColumn col) {
Index: applications/editors/josm/plugins/opendata/includes/org/jopendocument/model/table/TableTableRow.java
===================================================================
--- applications/editors/josm/plugins/opendata/includes/org/jopendocument/model/table/TableTableRow.java	(revision 30567)
+++ applications/editors/josm/plugins/opendata/includes/org/jopendocument/model/table/TableTableRow.java	(revision 30568)
@@ -27,5 +27,5 @@
     ArrayList<TableTableCell> allCells;
 
-    Vector<TableTableCell> cells = new Vector<TableTableCell>();
+    Vector<TableTableCell> cells = new Vector<>();
 
     int id = 0;
@@ -47,5 +47,5 @@
      */
     void computeAllCells() {
-        this.allCells = new ArrayList<TableTableCell>();
+        this.allCells = new ArrayList<>();
         for (int index = 0; index < this.cells.size(); index++) {
             final TableTableCell c = this.cells.get(index);
Index: applications/editors/josm/plugins/opendata/includes/org/jopendocument/model/text/TextP.java
===================================================================
--- applications/editors/josm/plugins/opendata/includes/org/jopendocument/model/text/TextP.java	(revision 30567)
+++ applications/editors/josm/plugins/opendata/includes/org/jopendocument/model/text/TextP.java	(revision 30568)
@@ -24,5 +24,5 @@
 public class TextP {
 
-    private final List<TextSpan> textSpans = new Vector<TextSpan>();
+    private final List<TextSpan> textSpans = new Vector<>();
 
     public void addTextSpan(final TextSpan p) {
Index: applications/editors/josm/plugins/opendata/includes/org/jopendocument/util/FileUtils.java
===================================================================
--- applications/editors/josm/plugins/opendata/includes/org/jopendocument/util/FileUtils.java	(revision 30567)
+++ applications/editors/josm/plugins/opendata/includes/org/jopendocument/util/FileUtils.java	(revision 30568)
@@ -31,5 +31,5 @@
     private static final Map<String, String> ext2mime;
     static {
-        ext2mime = new HashMap<String, String>();
+        ext2mime = new HashMap<>();
         ext2mime.put(".xml", "text/xml");
         ext2mime.put(".jpg", "image/jpeg");
Index: applications/editors/josm/plugins/opendata/includes/org/jopendocument/util/StringUtils.java
===================================================================
--- applications/editors/josm/plugins/opendata/includes/org/jopendocument/util/StringUtils.java	(revision 30567)
+++ applications/editors/josm/plugins/opendata/includes/org/jopendocument/util/StringUtils.java	(revision 30568)
@@ -47,6 +47,6 @@
             super();
             this.esc = esc;
-            this.substitution = new LinkedHashMap<Character, Character>();
-            this.inv = new HashMap<Character, Character>();
+            this.substitution = new LinkedHashMap<>();
+            this.inv = new HashMap<>();
             this.add(esc, name);
         }
Index: applications/editors/josm/plugins/opendata/includes/org/jopendocument/util/Tuple2.java
===================================================================
--- applications/editors/josm/plugins/opendata/includes/org/jopendocument/util/Tuple2.java	(revision 30567)
+++ applications/editors/josm/plugins/opendata/includes/org/jopendocument/util/Tuple2.java	(revision 30568)
@@ -31,5 +31,5 @@
     // just to make the code shorter
     public static final <A, B> Tuple2<A, B> create(A a, B b) {
-        return new Tuple2<A, B>(a, b);
+        return new Tuple2<>(a, b);
     }
 
Index: applications/editors/josm/plugins/opendata/includes/org/jopendocument/util/cc/Transformer.java
===================================================================
--- applications/editors/josm/plugins/opendata/includes/org/jopendocument/util/cc/Transformer.java	(revision 30567)
+++ applications/editors/josm/plugins/opendata/includes/org/jopendocument/util/cc/Transformer.java	(revision 30568)
@@ -21,5 +21,5 @@
 
     public static final <N> ITransformer<N, N> nopTransformer() {
-        return new ITransformerWrapper<N, N>(TransformerUtils.nopTransformer());
+        return new ITransformerWrapper<>(TransformerUtils.nopTransformer());
     }
 
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 30567)
+++ applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/NeptuneReader.java	(revision 30568)
@@ -39,4 +39,5 @@
 import neptune.TridentObjectType;
 
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.DataSet;
@@ -103,12 +104,12 @@
 				Validator validator = schema.newValidator();
 				validator.validate(xmlFile);
-				System.out.println(xmlFile.getSystemId() + " is valid");
+				Main.info(xmlFile.getSystemId() + " is valid");
 				return true;
 			} catch (SAXException e) {
-				System.out.println(xmlFile.getSystemId() + " is NOT valid");
-				System.out.println("Reason: " + e.getLocalizedMessage());
+				Main.error(xmlFile.getSystemId() + " is NOT valid");
+				Main.error("Reason: " + e.getLocalizedMessage());
 			} catch (IOException e) {
-				System.out.println(xmlFile.getSystemId() + " is NOT valid");
-				System.out.println("Reason: " + e.getLocalizedMessage());
+			    Main.error(xmlFile.getSystemId() + " is NOT valid");
+			    Main.error("Reason: " + e.getLocalizedMessage());
 			} finally {
 				try {
@@ -119,5 +120,5 @@
 			}
 		} catch (FileNotFoundException e) {
-			System.err.println(e.getMessage());
+		    Main.error(e.getMessage());
 		}
 		
@@ -317,15 +318,15 @@
 						} else {
 							// TODO
-							System.out.println("TODO: handle StopPoint "+childId);
+							Main.info("TODO: handle StopPoint "+childId);
 						}
 
 					} else {
-						System.err.println("Unsupported child: "+childId);
+						Main.warn("Unsupported child: "+childId);
 					}
 				}
 			} else if (sa.getStopAreaExtension().getAreaType().equals(ChouetteAreaType.BOARDING_POSITION)) {
-				//System.out.println("skipping StopArea with type "+sa.getStopAreaExtension().getAreaType()+": "+sa.getObjectId());
+				//Main.info("skipping StopArea with type "+sa.getStopAreaExtension().getAreaType()+": "+sa.getObjectId());
 			} else {
-				System.err.println("Unsupported StopArea type: "+sa.getStopAreaExtension().getAreaType());
+			    Main.warn("Unsupported StopArea type: "+sa.getStopAreaExtension().getAreaType());
 			}
 		}
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 30567)
+++ applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/OsmDownloader.java	(revision 30568)
@@ -15,5 +15,5 @@
 			try {
 				String oapiServer = Main.pref.get(OdConstants.PREF_OAPI, OdConstants.DEFAULT_OAPI);
-				System.out.println(oapiReq);
+				Main.info(oapiReq);
 				String oapiReqEnc = URLEncoder.encode(oapiReq, OdConstants.UTF8);
 				Main.main.menu.openLocation.openUrl(false, oapiServer+"data="+oapiReqEnc);
Index: applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/ArchiveReader.java
===================================================================
--- applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/ArchiveReader.java	(revision 30567)
+++ applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/ArchiveReader.java	(revision 30568)
@@ -7,5 +7,9 @@
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import javax.xml.bind.JAXBException;
@@ -56,33 +60,60 @@
     
     protected abstract String getTaskMessage();
-        
-    public DataSet parseDoc(final ProgressMonitor progressMonitor) throws IOException, XMLStreamException, FactoryConfigurationError, JAXBException  {
-        
-        final File temp = OdUtils.createTempDir();
+    
+    protected Collection<File> getDocsToParse(final File temp, final ProgressMonitor progressMonitor) throws FileNotFoundException, IOException {
         final List<File> candidates = new ArrayList<>();
         
+        if (progressMonitor != null) {
+            progressMonitor.beginTask(getTaskMessage());
+        }
+        extractArchive(temp, candidates);
+        
+        if (promptUser && candidates.size() > 1) {
+            DialogPrompter<CandidateChooser> prompt = new DialogPrompter<CandidateChooser>() {
+                @Override
+                protected CandidateChooser buildDialog() {
+                    return new CandidateChooser(progressMonitor.getWindowParent(), candidates);
+                }
+            };
+            if (prompt.promptInEdt().getValue() == 1) {
+                return Collections.singleton(prompt.getDialog().getSelectedFile());
+            }
+        } else if (!candidates.isEmpty()) {
+            return candidates;
+        }
+        return Collections.emptyList();
+    }
+    
+    public Map<File, DataSet> parseDocs(final ProgressMonitor progressMonitor) throws IOException, XMLStreamException, FactoryConfigurationError, JAXBException {
+        Map<File, DataSet> result = new HashMap<>();
+        File temp = OdUtils.createTempDir();
         try {
+            file = null;
+            for (File f : getDocsToParse(temp, progressMonitor)) {
+                DataSet from = getDataForFile(f, progressMonitor);
+                if (from != null) {
+                    result.put(f, from);
+                }
+            }
+        } finally {
+            OdUtils.deleteDir(temp);
             if (progressMonitor != null) {
-                progressMonitor.beginTask(getTaskMessage());
+                progressMonitor.finishTask();
             }
-            extractArchive(temp, candidates);
-            
-            file = null;
-            
-            if (promptUser && candidates.size() > 1) {
-                DialogPrompter<CandidateChooser> prompt = new DialogPrompter<CandidateChooser>() {
-                    @Override
-                    protected CandidateChooser buildDialog() {
-                        return new CandidateChooser(progressMonitor.getWindowParent(), candidates);
-                    }
-                };
-                if (prompt.promptInEdt().getValue() == 1) {
-                    file = prompt.getDialog().getSelectedFile();
-                }
-            } else if (!candidates.isEmpty()) {
-                file = candidates.get(0);
+        }
+        return result;
+    }
+    
+    public DataSet parseDoc(final ProgressMonitor progressMonitor) throws IOException, XMLStreamException, FactoryConfigurationError, JAXBException  {
+        File temp = OdUtils.createTempDir();
+        
+        try {
+            file = null;        
+            Collection<File> files = getDocsToParse(temp, progressMonitor);
+            if (!files.isEmpty()) {
+                file = files.iterator().next();
             }
             
-            DataSet from = getDataForFile(progressMonitor);
+            DataSet from = getDataForFile(file, progressMonitor);
             if (from != null) {
                 ds = from;
@@ -100,45 +131,46 @@
     }
 
-    protected DataSet getDataForFile(final ProgressMonitor progressMonitor)
+    protected DataSet getDataForFile(File f, final ProgressMonitor progressMonitor)
             throws FileNotFoundException, IOException, XMLStreamException, FactoryConfigurationError, JAXBException {
-        if (file == null) {
+        if (f == null) {
             return null;
-        } else if (!file.exists()) {
-            Main.warn("File does not exist: "+file.getPath());
+        } else if (!f.exists()) {
+            Main.warn("File does not exist: "+f.getPath());
             return null;
         } else {
+            Main.info("Parsing file "+f.getName());
             DataSet from = null;
-            FileInputStream in = new FileInputStream(file);
+            FileInputStream in = new FileInputStream(f);
             ProgressMonitor instance = null;
             if (progressMonitor != null) {
                 instance = progressMonitor.createSubTaskMonitor(ProgressMonitor.ALL_TICKS, false);
             }
-            if (file.getName().toLowerCase().endsWith(OdConstants.CSV_EXT)) {
+            if (f.getName().toLowerCase().endsWith(OdConstants.CSV_EXT)) {
                 from = CsvReader.parseDataSet(in, handler, instance);
-            } else if (file.getName().toLowerCase().endsWith(OdConstants.KML_EXT)) {
+            } else if (f.getName().toLowerCase().endsWith(OdConstants.KML_EXT)) {
                 from = KmlReader.parseDataSet(in, instance);
-            } else if (file.getName().toLowerCase().endsWith(OdConstants.KMZ_EXT)) {
+            } else if (f.getName().toLowerCase().endsWith(OdConstants.KMZ_EXT)) {
                 from = KmzReader.parseDataSet(in, instance);
-            } else if (file.getName().toLowerCase().endsWith(OdConstants.XLS_EXT)) {
+            } else if (f.getName().toLowerCase().endsWith(OdConstants.XLS_EXT)) {
                 from = XlsReader.parseDataSet(in, handler, instance);
-            } else if (file.getName().toLowerCase().endsWith(OdConstants.ODS_EXT)) {
+            } else if (f.getName().toLowerCase().endsWith(OdConstants.ODS_EXT)) {
                 from = OdsReader.parseDataSet(in, handler, instance);
-            } else if (file.getName().toLowerCase().endsWith(OdConstants.SHP_EXT)) {
-                from = ShpReader.parseDataSet(in, file, handler, instance);
-            } else if (file.getName().toLowerCase().endsWith(OdConstants.MIF_EXT)) {
-                from = MifReader.parseDataSet(in, file, handler, instance);
-            } else if (file.getName().toLowerCase().endsWith(OdConstants.TAB_EXT)) {
-                from = TabReader.parseDataSet(in, file, handler, instance);
-            } else if (file.getName().toLowerCase().endsWith(OdConstants.GML_EXT)) {
+            } else if (f.getName().toLowerCase().endsWith(OdConstants.SHP_EXT)) {
+                from = ShpReader.parseDataSet(in, f, handler, instance);
+            } else if (f.getName().toLowerCase().endsWith(OdConstants.MIF_EXT)) {
+                from = MifReader.parseDataSet(in, f, handler, instance);
+            } else if (f.getName().toLowerCase().endsWith(OdConstants.TAB_EXT)) {
+                from = TabReader.parseDataSet(in, f, handler, instance);
+            } else if (f.getName().toLowerCase().endsWith(OdConstants.GML_EXT)) {
                 from = GmlReader.parseDataSet(in, handler, instance);
-            } else if (file.getName().toLowerCase().endsWith(OdConstants.XML_EXT)) {
-                if (OdPlugin.getInstance().xmlImporter.acceptFile(file)) {
+            } else if (f.getName().toLowerCase().endsWith(OdConstants.XML_EXT)) {
+                if (OdPlugin.getInstance().xmlImporter.acceptFile(f)) {
                     from = NeptuneReader.parseDataSet(in, handler, instance);
                 } else {
-                    System.err.println("Unsupported XML file: "+file.getName());
+                    System.err.println("Unsupported XML file: "+f.getName());
                 }
                 
             } else {
-                System.err.println("Unsupported file extension: "+file.getName());
+                System.err.println("Unsupported file extension: "+f.getName());
             }
             return from;
@@ -151,5 +183,4 @@
             if (entryName.toLowerCase().endsWith("."+ext)) {
                 candidates.add(file);
-                System.out.println(entryName);
                 break;
             }
@@ -159,5 +190,4 @@
                 || OdPlugin.getInstance().xmlImporter.acceptFile(file))) {
             candidates.add(file);
-            System.out.println(entryName);
         }
     }
Index: applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/SevenZipReader.java
===================================================================
--- applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/SevenZipReader.java	(revision 30567)
+++ applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/SevenZipReader.java	(revision 30568)
@@ -11,4 +11,5 @@
 import java.io.OutputStream;
 import java.util.List;
+import java.util.Map;
 
 import javax.xml.bind.JAXBException;
@@ -57,5 +58,11 @@
     }
 
-    @Override protected String getTaskMessage() {
+    public static Map<File, DataSet> parseDataSets(InputStream in, AbstractDataSetHandler handler, ProgressMonitor instance, boolean promptUser) 
+            throws IOException, XMLStreamException, FactoryConfigurationError, JAXBException {
+        return new SevenZipReader(in, handler, promptUser).parseDocs(instance);
+    }
+
+    @Override
+    protected String getTaskMessage() {
         return tr("Reading 7Zip file...");
     }
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 30567)
+++ applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/archive/ZipReader.java	(revision 30568)
@@ -10,4 +10,5 @@
 import java.io.InputStream;
 import java.util.List;
+import java.util.Map;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
@@ -36,4 +37,9 @@
 		return new ZipReader(in, handler, promptUser).parseDoc(instance);
 	}
+
+    public static Map<File, DataSet> parseDataSets(InputStream in, AbstractDataSetHandler handler, ProgressMonitor instance, boolean promptUser) 
+            throws IOException, XMLStreamException, FactoryConfigurationError, JAXBException {
+        return new ZipReader(in, handler, promptUser).parseDocs(instance);
+    }
 
     protected void extractArchive(final File temp, final List<File> candidates) throws IOException, FileNotFoundException {
@@ -75,5 +81,6 @@
     }
 
-    @Override protected String getTaskMessage() {
+    @Override
+    protected String getTaskMessage() {
         return tr("Reading Zip file...");
     }
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 30567)
+++ applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/DefaultShpHandler.java	(revision 30568)
@@ -51,5 +51,5 @@
 		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)) {
-			System.out.println("Comparing "+a+" and "+b+" -> "+res);
+			Main.debug("Comparing "+a+" and "+b+" -> "+res);
 		}
 		return res; 
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 30567)
+++ applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/GeographicReader.java	(revision 30568)
@@ -5,6 +5,8 @@
 
 import java.awt.Component;
+import java.awt.GraphicsEnvironment;
 import java.awt.Image;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
@@ -200,5 +202,5 @@
     
 	private static final void compareDebug(CoordinateReferenceSystem crs1, CoordinateReferenceSystem crs2) {
-		System.out.println("-- COMPARING "+crs1.getName()+" WITH "+crs2.getName()+" --");
+		Main.debug("-- COMPARING "+crs1.getName()+" WITH "+crs2.getName()+" --");
 		compareDebug("class", crs1.getClass(), crs2.getClass());
 		CoordinateSystem cs1 = crs1.getCoordinateSystem();
@@ -229,5 +231,5 @@
 			}
 		}
-		System.out.println("-- COMPARING FINISHED --");
+		Main.debug("-- COMPARING FINISHED --");
 	}
 	
@@ -245,5 +247,5 @@
 
 	private static final boolean compareDebug(String text, boolean result, Object o1, Object o2) {
-		System.out.println(text + ": " + result + "("+o1+", "+o2+")");
+	    Main.debug(text + ": " + result + "("+o1+", "+o2+")");
 		return result;
 	}
@@ -253,5 +255,5 @@
 			transform = CRS.findMathTransform(crs, wgs84);
 		} catch (OperationNotFoundException e) {
-			System.out.println(crs.getName()+": "+e.getMessage()); // Bursa wolf parameters required.
+			Main.info(crs.getName()+": "+e.getMessage()); // Bursa wolf parameters required.
 			
 			if (findSimiliarCrs) { 
@@ -267,5 +269,5 @@
     								Main.pref.getDouble(OdConstants.PREF_CRS_COMPARISON_TOLERANCE, OdConstants.DEFAULT_CRS_COMPARISON_TOLERANCE));
     						if (((AbstractCRS)candidate).equals((AbstractIdentifiedObject)crs, false)) {
-    							System.out.println("Found a potential CRS: "+candidate.getName());
+    							Main.info("Found a potential CRS: "+candidate.getName());
     							candidates.add(candidate);
     						} else if (Main.pref.getBoolean(OdConstants.PREF_CRS_COMPARISON_DEBUG, false)) {
@@ -281,5 +283,6 @@
 				
 				if (candidates.size() > 1) {
-					System.err.println("Found several potential CRS.");//TODO: ask user which one to use
+					Main.warn("Found several potential CRS: "+Arrays.toString(candidates.toArray()));
+					// TODO: ask user which one to use
 				}
 				
@@ -300,5 +303,5 @@
 						transform = handler.findMathTransform(crs, wgs84, false);
 					} catch (OperationNotFoundException ex) {
-						System.out.println(crs.getName()+": "+ex.getMessage()); // Bursa wolf parameters required.
+					    Main.warn(crs.getName()+": "+ex.getMessage()); // Bursa wolf parameters required.
 					}
 				} else {
@@ -310,15 +313,15 @@
 							}
 						} catch (OperationNotFoundException ex) {
-							System.out.println(crs.getName()+": "+ex.getMessage()); // Bursa wolf parameters required.
+						    Main.warn(crs.getName()+": "+ex.getMessage()); // Bursa wolf parameters required.
 						}
 					}
 				}
 				if (transform == null) {
-					// ask user before trying lenient method
-					if (warnLenientMethod(parent, crs)) {
+					// ask user before trying lenient method, unless in headless mode (unit tests)
+					if (!GraphicsEnvironment.isHeadless() && warnLenientMethod(parent, crs)) {
 						// User canceled
 						throw new UserCancelException();
 					}
-					System.out.println("Searching for a lenient math transform.");
+					Main.info("Searching for a lenient math transform.");
 					transform = CRS.findMathTransform(crs, wgs84, true);
 				}
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 30567)
+++ applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/GmlReader.java	(revision 30568)
@@ -107,5 +107,5 @@
 	
 	private void findCRS(String srs) throws NoSuchAuthorityCodeException, FactoryException {
-		System.out.println("Finding CRS for "+srs);
+		Main.info("Finding CRS for "+srs);
 		if (gmlHandler != null) {
 			crs = gmlHandler.getCrsFor(srs);
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 30567)
+++ applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/ShpReader.java	(revision 30568)
@@ -158,11 +158,11 @@
 			} else {
 				// Debug unknown geometry
-				System.out.println("\ttype: "+geometry.getType());
-				System.out.println("\tbounds: "+geometry.getBounds());
-				System.out.println("\tdescriptor: "+desc);
-				System.out.println("\tname: "+geometry.getName());
-				System.out.println("\tvalue: "+geometry.getValue());
-				System.out.println("\tid: "+geometry.getIdentifier());
-				System.out.println("-------------------------------------------------------------");
+				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("-------------------------------------------------------------");
 			}
 			
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 30567)
+++ applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/CsvReader.java	(revision 30568)
@@ -8,4 +8,5 @@
 import java.nio.charset.Charset;
 
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
@@ -43,5 +44,5 @@
 			if (csvHandler == null || csvHandler.getSeparator() == null || ";".equals(csvHandler.getSeparator())) {
 				// If default sep has been used, try comma
-				System.out.println(e.getMessage());
+				Main.warn(e.getMessage());
 				csvReader.sep = ",";
 				return csvReader.doParse(csvReader.splitLine(), instance);
@@ -54,5 +55,5 @@
 	@Override
 	protected void initResources(InputStream in, ProgressMonitor progressMonitor) throws IOException {
-		System.out.println("Parsing CSV file using charset "+charset+" and separator '"+sep+"'");
+		Main.info("Parsing CSV file using charset "+charset+" and separator '"+sep+"'");
 
 		reader = new BufferedReader(new InputStreamReader(in, charset));
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 30567)
+++ applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/OdsDocument.java	(revision 30568)
@@ -11,4 +11,5 @@
 import org.jopendocument.io.SaxContentUnmarshaller;
 import org.jopendocument.model.OpenDocument;
+import org.openstreetmap.josm.Main;
 import org.xml.sax.InputSource;
 import org.xml.sax.XMLReader;
@@ -44,5 +45,5 @@
             	if (entry.getName().equals("content.xml")) {
                     rdr.setContentHandler(contentHandler);
-                    System.out.println("Parsing content.xml");
+                    Main.info("Parsing content.xml");
                     rdr.parse(getEntryInputSource(zis));
             		contentParsed = true;
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 30567)
+++ applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/OdsReader.java	(revision 30568)
@@ -13,4 +13,5 @@
 import org.jopendocument.model.table.TableTableRow;
 import org.jopendocument.model.text.TextP;
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
@@ -38,5 +39,5 @@
 	protected void initResources(InputStream in, ProgressMonitor progressMonitor) throws IOException {
 		try {
-			System.out.println("Parsing ODS file");
+			Main.info("Parsing ODS file");
 			doc = new OdsDocument(in);
 			List<OfficeSpreadsheet> spreadsheets = doc.getBody().getOfficeSpreadsheets();
@@ -62,5 +63,5 @@
 
 			if (rowIndex % 5000 == 0) {
-				System.out.println("Lines read: "+rowIndex);
+				Main.info("Lines read: "+rowIndex);
 			}
 
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 30567)
+++ applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/SpreadSheetReader.java	(revision 30568)
@@ -100,5 +100,5 @@
 	
 	public DataSet doParse(String[] header, ProgressMonitor progressMonitor) throws IOException {
-		System.out.println("Header: "+Arrays.toString(header));
+		Main.info("Header: "+Arrays.toString(header));
 		
 		Map<ProjectionPatterns, List<CoordinateColumns>> projColumns = new HashMap<>();
@@ -175,5 +175,5 @@
 		}
 		
-		System.out.println("Loading data using projections "+message);
+		Main.info("Loading data using projections "+message);
 		
 		final DataSet ds = new DataSet();
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 30567)
+++ applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/tabular/XlsReader.java	(revision 30568)
@@ -14,4 +14,5 @@
 import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.usermodel.Workbook;
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
@@ -35,5 +36,5 @@
 	@Override
 	protected void initResources(InputStream in, ProgressMonitor progressMonitor) throws IOException {
-		System.out.println("Parsing XLS file");
+	    Main.info("Parsing XLS file");
 		try {
 			wb = new HSSFWorkbook(new POIFSFileSystem(in));
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 30567)
+++ applications/editors/josm/plugins/opendata/test/unit/org/openstreetmap/josm/plugins/opendata/core/io/NonRegFunctionalTests.java	(revision 30568)
@@ -6,6 +6,14 @@
 import static org.junit.Assert.assertTrue;
 
+import java.io.IOException;
+import java.nio.file.DirectoryIteratorException;
+import java.nio.file.DirectoryStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
 import java.util.Collection;
 
+import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
@@ -40,3 +48,30 @@
         assertTrue(found);
     }
+    
+    /**
+     * Lists all datasets files matching given extension.
+     * @param ext file extension to search for
+     * @returns List of all datasets files matching given extension
+     * @throws IOException in case of I/O error
+     */
+    public static Collection<Path> listDataFiles(String ext) throws IOException {
+        Collection<Path> result = new ArrayList<>();
+        addTree(Paths.get(TestUtils.getTestDataRoot()+"datasets"), result, ext.toLowerCase());
+        return result;
+    }
+    
+    static void addTree(Path directory, Collection<Path> all, String ext) throws IOException {
+        try (DirectoryStream<Path> ds = Files.newDirectoryStream(directory)) {
+            for (Path child : ds) {
+                if (Files.isDirectory(child)) {
+                    addTree(child, all, ext);
+                } else if (child.toString().toLowerCase().endsWith(ext)) {
+                    all.add(child);
+                }
+            }
+        } catch (DirectoryIteratorException ex) {
+            // I/O error encounted during the iteration, the cause is an IOException
+            throw ex.getCause();
+        }
+    }
 }
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 30568)
+++ applications/editors/josm/plugins/opendata/test/unit/org/openstreetmap/josm/plugins/opendata/core/io/archive/ZipReaderTest.java	(revision 30568)
@@ -0,0 +1,52 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.plugins.opendata.core.io.archive;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Path;
+import java.util.Map.Entry;
+
+import javax.xml.bind.JAXBException;
+import javax.xml.stream.FactoryConfigurationError;
+import javax.xml.stream.XMLStreamException;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.openstreetmap.josm.JOSMFixture;
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.plugins.opendata.core.io.NonRegFunctionalTests;
+
+/**
+ * Unit tests of {@link ZipReader} class.
+ */
+public class ZipReaderTest {
+
+    /**
+     * Setup test.
+     */
+    @BeforeClass
+    public static void setUp() {
+        JOSMFixture.createUnitTestFixture().init();
+    }
+
+    /**
+     * Test for various zip files reading
+     * @throws IOException if an error occurs during reading
+     */
+    @Test
+    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)) {
+                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());
+                }
+            }
+        }
+    }
+}
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 30567)
+++ applications/editors/josm/plugins/opendata/test/unit/org/openstreetmap/josm/plugins/opendata/core/io/geographic/MifReaderTest.java	(revision 30568)
@@ -1,6 +1,4 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.plugins.opendata.core.io.geographic;
-
-import static org.junit.Assert.assertFalse;
 
 import java.io.File;
@@ -13,5 +11,5 @@
 import org.openstreetmap.josm.JOSMFixture;
 import org.openstreetmap.josm.TestUtils;
-import org.openstreetmap.josm.data.osm.DataSet;
+import org.openstreetmap.josm.plugins.opendata.core.io.NonRegFunctionalTests;
 
 /**
@@ -36,6 +34,5 @@
         File file = new File(TestUtils.getRegressionDataFile(9592, "bg.mif"));
         try (InputStream is = new FileInputStream(file)) {
-            DataSet ds = MifReader.parseDataSet(is, file, null, null);
-            assertFalse(ds.allPrimitives().isEmpty());
+            NonRegFunctionalTests.testGeneric(MifReader.parseDataSet(is, file, null, null));
         }
     }
