Index: /applications/editors/josm/plugins/imagery-xml-bounds/src/net/boplicity/xmleditor/XmlEditorKit.java
===================================================================
--- /applications/editors/josm/plugins/imagery-xml-bounds/src/net/boplicity/xmleditor/XmlEditorKit.java	(revision 33492)
+++ /applications/editors/josm/plugins/imagery-xml-bounds/src/net/boplicity/xmleditor/XmlEditorKit.java	(revision 33493)
@@ -26,5 +26,5 @@
 
     private static final long serialVersionUID = 2969169649596107757L;
-    private ViewFactory xmlViewFactory;
+    private final ViewFactory xmlViewFactory;
 
     /**
Index: /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/ImageryXmlBoundsPlugin.java
===================================================================
--- /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/ImageryXmlBoundsPlugin.java	(revision 33492)
+++ /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/ImageryXmlBoundsPlugin.java	(revision 33493)
@@ -43,9 +43,4 @@
 
     /**
-     * Action showing bounds of the current selection
-     */
-    private final ShowBoundsSelectionAction selectionAction = new ShowBoundsSelectionAction();
-
-    /**
      * Class modifying the Imagery preferences panel
      */
@@ -54,5 +49,5 @@
     /**
      * Initializes the plugin.
-     * @param info
+     * @param info plugin information
      */
     public ImageryXmlBoundsPlugin(PluginInformation info) {
@@ -63,4 +58,5 @@
         ExtensionFileFilter.addExporterFirst(new XmlBoundsExporter());
         // Initialize the selection action
+        ShowBoundsSelectionAction selectionAction = new ShowBoundsSelectionAction();
         DataSet.addSelectionListener(selectionAction);
         Main.toolbar.register(selectionAction);
Index: /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/XmlBoundsConstants.java
===================================================================
--- /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/XmlBoundsConstants.java	(revision 33492)
+++ /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/XmlBoundsConstants.java	(revision 33493)
@@ -3,6 +3,4 @@
 
 import static org.openstreetmap.josm.tools.I18n.tr;
-
-import javax.swing.ImageIcon;
 
 import org.openstreetmap.josm.actions.ExtensionFileFilter;
Index: /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/XmlBoundsLayer.java
===================================================================
--- /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/XmlBoundsLayer.java	(revision 33492)
+++ /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/XmlBoundsLayer.java	(revision 33493)
@@ -22,8 +22,8 @@
 import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeListener;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
-import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.plugins.imageryxmlbounds.actions.BoundsLayerSaveAction;
 import org.openstreetmap.josm.plugins.imageryxmlbounds.actions.BoundsLayerSaveAsAction;
 import org.openstreetmap.josm.plugins.imageryxmlbounds.actions.ShowBoundsAction;
+import org.openstreetmap.josm.tools.ImageProvider;
 
 /**
@@ -52,5 +52,5 @@
         }
         result.add(new ShowBoundsAction(this));
-        return result.toArray(new Action[0]);
+        return result.toArray(new Action[result.size()]);
     }
 
@@ -71,5 +71,5 @@
     /**
      * Constructs a new {@code XmlBoundsLayer}.
-     * @param data data
+     * @param data data set
      */
     public XmlBoundsLayer(DataSet data) {
@@ -79,5 +79,5 @@
     /**
      * Constructs a new {@code XmlBoundsLayer}.
-     * @param data data
+     * @param data data set
      * @param name Layer name
      * @param associatedFile Associated file (can be null)
Index: /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/actions/BoundsLayerSaveAction.java
===================================================================
--- /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/actions/BoundsLayerSaveAction.java	(revision 33492)
+++ /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/actions/BoundsLayerSaveAction.java	(revision 33493)
@@ -35,5 +35,5 @@
         public File getFile(Layer layer) {
             File f = layer.getAssociatedFile();
-            if (f != null && ! f.exists()) {
+            if (f != null && !f.exists()) {
                 f = null;
             }
Index: /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/actions/BoundsLayerSaveAsAction.java
===================================================================
--- /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/actions/BoundsLayerSaveAsAction.java	(revision 33492)
+++ /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/actions/BoundsLayerSaveAsAction.java	(revision 33493)
@@ -31,5 +31,5 @@
         /**
          * Opens a "File/Save as" dialog if the given layer is an XML bounds layer
-         * @param layer layer
+         * @param layer current layer
          * @return chosen destination file, or {@code null}
          */
Index: /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/actions/ComputeBoundsAction.java
===================================================================
--- /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/actions/ComputeBoundsAction.java	(revision 33492)
+++ /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/actions/ComputeBoundsAction.java	(revision 33493)
@@ -5,6 +5,6 @@
 
 import java.awt.event.ActionEvent;
+import java.io.IOException;
 import java.io.InputStream;
-import java.lang.Exception;
 import java.math.RoundingMode;
 import java.text.DecimalFormat;
@@ -97,5 +97,5 @@
         }
         // Remove closed ways already inside a selected multipolygon
-        for (Iterator<Way> it = closedWays.iterator(); it.hasNext(); ) {
+        for (Iterator<Way> it = closedWays.iterator(); it.hasNext();) {
             processIterator(it);
         }
@@ -124,5 +124,5 @@
         primitives.addAll(multipolygons);
         primitives.addAll(closedWays);
-        return getXml(primitives.toArray(new OsmPrimitive[0]));
+        return getXml(primitives.toArray(new OsmPrimitive[primitives.size()]));
     }
 
@@ -175,5 +175,5 @@
     }
 
-    protected static final String getXml(OsmPrimitive ... primitives) {
+    protected static final String getXml(OsmPrimitive... primitives) {
         List<String> entries = new ArrayList<>();
         for (OsmPrimitive p : primitives) {
@@ -184,21 +184,25 @@
             }
         }
-        return getImagery(entries.toArray(new String[0]));
-    }
-
-    protected static final String getImagery(String ... entries) {
+        return getImagery(entries.toArray(new String[entries.size()]));
+    }
+
+    protected static final String getImagery(String... entries) {
         String version = "UNKNOWN";
         try {
-            Properties p = new Properties();
-            p.load(ComputeBoundsAction.class.getResourceAsStream("/REVISION"));
-            version = p.getProperty("Revision");
-        } catch(Exception e) {
-        }
-        StringBuilder result = new StringBuilder();
-        result.append("<?xml version=\"1.0\" encoding=\"").append(ENCODING).append("\" ?>\n");
-        result.append("<!-- Generated with JOSM Imagery XML Plugin version ").append(version).append(" -->\n");
-        result.append("<imagery xmlns=\"").append(XML_NAMESPACE).append("\">\n");
+            InputStream revision = ComputeBoundsAction.class.getResourceAsStream("/REVISION");
+            if (revision != null) {
+	            Properties p = new Properties();
+	            p.load(revision);
+	            version = p.getProperty("Revision");
+            }
+        } catch(IOException e) {
+        	Main.warn(e);
+        }
+        StringBuilder result = new StringBuilder(256);
+        result.append("<?xml version=\"1.0\" encoding=\"").append(ENCODING).append("\" ?>\n")
+        	  .append("<!-- Generated with JOSM Imagery XML Plugin version ").append(version).append(" -->\n")
+        	  .append("<imagery xmlns=\"").append(XML_NAMESPACE).append("\">\n");
         for (String entry : entries) {
-            result.append(entry).append("\n");
+            result.append(entry).append('\n');
         }
         result.append("</imagery>");
@@ -208,5 +212,5 @@
     protected static final String getEntry(OsmPrimitive p, String bounds) {
         return getEntry(p.get(KEY_NAME), p.get(KEY_TYPE), p.get(KEY_DEFAULT), p.get(KEY_URL), bounds, p.get(KEY_PROJECTIONS),
-                p.get(KEY_LOGO_URL), p.get(KEY_EULA), p.get(KEY_ATTR_TEXT), p.get(KEY_ATTR_URL),  p.get(KEY_TERMS_TEXT),
+                p.get(KEY_LOGO_URL), p.get(KEY_EULA), p.get(KEY_ATTR_TEXT), p.get(KEY_ATTR_URL), p.get(KEY_TERMS_TEXT),
                 p.get(KEY_TERMS_URL), p.get(KEY_COUNTRY_CODE), p.get(KEY_MAX_ZOOM), p.get(KEY_MIN_ZOOM), p.get(KEY_ID),
                 p.get(KEY_DATE));
@@ -220,12 +224,12 @@
             String logoURL, String eula, String attributionText, String attributionUrl, String termsText, String termsUrl,
             String countryCode, String maxZoom, String minZoom, String id, String date) {
-        StringBuilder result = new StringBuilder();
+        StringBuilder result = new StringBuilder(128);
         result.append("    <entry>\n"+
-        EIGHT_SP + simpleTag(XML_NAME, name) + "\n"+
-        EIGHT_SP + simpleTag(XML_TYPE, type, "wms") + "\n"+
-        EIGHT_SP + simpleTag(XML_URL, url != null ? encodeUrl(url) : "", false) + "\n"+
-                 bounds+"\n");
+        EIGHT_SP + simpleTag(XML_NAME, name) + '\n'+
+        EIGHT_SP + simpleTag(XML_TYPE, type, "wms") + '\n'+
+        EIGHT_SP + simpleTag(XML_URL, url != null ? encodeUrl(url) : "", false) + '\n'+
+                 bounds+'\n');
         if (projections != null && !projections.isEmpty()) {
-            result.append(EIGHT_SP+startTag(XML_PROJECTIONS)+"\n");
+            result.append(EIGHT_SP+startTag(XML_PROJECTIONS)+'\n');
             int i = 0;
             String[] codes = projections.split(";");
@@ -235,47 +239,47 @@
                 }
                 result.append(simpleTag("code", code.trim()));
-                if (i%6 == 5 || i == codes.length-1 ) {
-                    result.append("\n");
+                if (i%6 == 5 || i == codes.length-1) {
+                    result.append('\n');
                 }
                 i++;
             }
-            result.append(EIGHT_SP+endTag(XML_PROJECTIONS)+"\n");
+            result.append(EIGHT_SP+endTag(XML_PROJECTIONS)+'\n');
         }
         if (isSet(def) && "true".equals(def)) {
-            result.append(EIGHT_SP + simpleTag(XML_DEFAULT, def) + "\n");
+            result.append(EIGHT_SP + simpleTag(XML_DEFAULT, def) + '\n');
         }
         if (isSet(id)) {
-            result.append(EIGHT_SP + simpleTag(XML_ID, id, false) + "\n");
+            result.append(EIGHT_SP + simpleTag(XML_ID, id, false) + '\n');
         }
         if (isSet(date)) {
-            result.append(EIGHT_SP + simpleTag(XML_DATE, date, false) + "\n");
+            result.append(EIGHT_SP + simpleTag(XML_DATE, date, false) + '\n');
         }
         if (isSet(eula)) {
-            result.append(EIGHT_SP + mandatoryTag(XML_EULA, encodeUrl(eula), false) + "\n");
+            result.append(EIGHT_SP + mandatoryTag(XML_EULA, encodeUrl(eula), false) + '\n');
         }
         if (isSet(attributionText)) {
-            result.append(EIGHT_SP + mandatoryTag(XML_ATTR_TEXT, attributionText) + "\n");
+            result.append(EIGHT_SP + mandatoryTag(XML_ATTR_TEXT, attributionText) + '\n');
         }
         if (isSet(attributionUrl)) {
-            result.append(EIGHT_SP + simpleTag(XML_ATTR_URL, encodeUrl(attributionUrl), false) + "\n");
+            result.append(EIGHT_SP + simpleTag(XML_ATTR_URL, encodeUrl(attributionUrl), false) + '\n');
         }
         if (isSet(termsText)) {
-            result.append(EIGHT_SP + simpleTag(XML_TERMS_TEXT, termsText) + "\n");
+            result.append(EIGHT_SP + simpleTag(XML_TERMS_TEXT, termsText) + '\n');
         }
         if (isSet(termsUrl)) {
-            result.append(EIGHT_SP + simpleTag(XML_TERMS_URL, encodeUrl(termsUrl), false) + "\n");
+            result.append(EIGHT_SP + simpleTag(XML_TERMS_URL, encodeUrl(termsUrl), false) + '\n');
         }
         if (isSet(logoURL)) {
-            result.append(EIGHT_SP + simpleTag(XML_LOGO_URL, encodeUrl(logoURL), false) + "\n");
+            result.append(EIGHT_SP + simpleTag(XML_LOGO_URL, encodeUrl(logoURL), false) + '\n');
         }
         if (isSet(countryCode)) {
-            result.append(EIGHT_SP + simpleTag(XML_COUNTRY_CODE, countryCode) + "\n");
+            result.append(EIGHT_SP + simpleTag(XML_COUNTRY_CODE, countryCode) + '\n');
         }
         if ("tms".equals(type)) {
             if (isSet(maxZoom)) {
-                result.append(EIGHT_SP + simpleTag(XML_MAX_ZOOM, maxZoom) + "\n");
+                result.append(EIGHT_SP + simpleTag(XML_MAX_ZOOM, maxZoom) + '\n');
             }
             if (isSet(minZoom)) {
-                result.append(EIGHT_SP + simpleTag(XML_MIN_ZOOM, minZoom) + "\n");
+                result.append(EIGHT_SP + simpleTag(XML_MIN_ZOOM, minZoom) + '\n');
             }
         }
@@ -333,5 +337,5 @@
                 if (i > 1) {
                     LatLon b = way.getNode(i-1).getCoor();
-                    if (b.lat() != c.lat() && b.lon() !=  c.lon()) {
+                    if (b.lat() != c.lat() && b.lon() != c.lon()) {
                         return false;
                     }
@@ -375,9 +379,9 @@
             if(j == cw.getNodesCount())
                 j = 0;
-            result.append("<point ");
-            result.append("lat='").append(DF.format(cw.getNode(i).getCoor().lat())).append("' ");
-            result.append("lon='").append(DF.format(cw.getNode(i).getCoor().lon())).append("'/>");
-            if (i%3 == 2 || i == cw.getNodesCount()-1 ) {
-                result.append("\n");
+            result.append("<point lat='")
+                  .append(DF.format(cw.getNode(i).getCoor().lat())).append("' lon='")
+                  .append(DF.format(cw.getNode(i).getCoor().lon())).append("'/>");
+            if (i%3 == 2 || i == cw.getNodesCount()-1) {
+                result.append('\n');
             }
         }
Index: /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/actions/EditEntriesAction.java
===================================================================
--- /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/actions/EditEntriesAction.java	(revision 33492)
+++ /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/actions/EditEntriesAction.java	(revision 33493)
@@ -36,5 +36,5 @@
     /**
      * Constructs a new {@code EditEntriesAction}.
-     * @param defaultTable table
+     * @param defaultTable parent table
      * @param defaultModel table model
      */
@@ -54,12 +54,8 @@
         final XmlBoundsLayer layer = new XmlBoundsLayer(
                 XmlBoundsConverter.convertImageryEntries(entries));
-        final Runnable uiStuff = new Runnable() {
-            @Override
-            public void run() {
-                Main.getLayerManager().addLayer(layer);
-                layer.onPostLoadFromFile();
-            }
-        };
-        GuiHelper.runInEDT(uiStuff);
+        GuiHelper.runInEDT(() -> {
+		    Main.getLayerManager().addLayer(layer);
+		    layer.onPostLoadFromFile();
+		});
     }
 
Index: /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/actions/downloadtask/DownloadXmlBoundsTask.java
===================================================================
--- /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/actions/downloadtask/DownloadXmlBoundsTask.java	(revision 33492)
+++ /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/actions/downloadtask/DownloadXmlBoundsTask.java	(revision 33493)
@@ -31,5 +31,5 @@
     public Future<?> loadUrl(boolean newLayer, String url,
             ProgressMonitor progressMonitor) {
-        downloadTask = new DownloadTask(newLayer,
+        downloadTask = new InternalDownloadTask(newLayer,
                 new JosmServerLocationReader(url), progressMonitor);
         // We need submit instead of execute so we can wait for it to finish and get the error
@@ -51,5 +51,5 @@
     }
 
-    protected class DownloadTask extends DownloadOsmTask.DownloadTask {
+    protected class InternalDownloadTask extends DownloadTask {
 
         /**
@@ -59,5 +59,5 @@
          * @param progressMonitor progress monitor
          */
-        public DownloadTask(boolean newLayer, OsmServerReader reader, ProgressMonitor progressMonitor) {
+        public InternalDownloadTask(boolean newLayer, OsmServerReader reader, ProgressMonitor progressMonitor) {
             super(newLayer, reader, progressMonitor);
         }
Index: /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/actions/downloadtask/package-info.java
===================================================================
--- /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/actions/downloadtask/package-info.java	(revision 33493)
+++ /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/actions/downloadtask/package-info.java	(revision 33493)
@@ -0,0 +1,7 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Provides the classes for JOSM plugin {@link org.openstreetmap.josm.actions.downloadtasks.DownloadTask download tasks} .
+ * They are used to download imagery data for a given URL.
+ */
+package org.openstreetmap.josm.plugins.imageryxmlbounds.actions.downloadtask;
Index: /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/actions/package-info.java
===================================================================
--- /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/actions/package-info.java	(revision 33493)
+++ /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/actions/package-info.java	(revision 33493)
@@ -0,0 +1,6 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Provides the classes for JOSM plugin actions.
+ */
+package org.openstreetmap.josm.plugins.imageryxmlbounds.actions;
Index: /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/data/XmlBoundsConverter.java
===================================================================
--- /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/data/XmlBoundsConverter.java	(revision 33492)
+++ /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/data/XmlBoundsConverter.java	(revision 33493)
@@ -24,5 +24,9 @@
  * @author Don-vip
  */
-public class XmlBoundsConverter implements XmlBoundsConstants {
+public final class XmlBoundsConverter implements XmlBoundsConstants {
+
+	private XmlBoundsConverter() {
+		// Hide default constructor for utilities classes
+	}
 
     /**
@@ -48,11 +52,11 @@
         if (value != null) {
             if (value instanceof Collection) {
-                StringBuilder s = new StringBuilder("");
+                StringBuilder s = new StringBuilder();
                 for (Object elt : (Collection<?>)value) {
                     if (elt != null && elt.toString() != null && !elt.toString().isEmpty()) {
                         if (s.length() > 0) {
-                            s.append(";");
+                            s.append(';');
                         }
-                        s.append(elt.toString());
+                        s.append(elt);
                     }
                 }
Index: /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/data/package-info.java
===================================================================
--- /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/data/package-info.java	(revision 33493)
+++ /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/data/package-info.java	(revision 33493)
@@ -0,0 +1,6 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Provides the classes for JOSM plugin data.
+ */
+package org.openstreetmap.josm.plugins.imageryxmlbounds.data;
Index: /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/io/JosmServerLocationReader.java
===================================================================
--- /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/io/JosmServerLocationReader.java	(revision 33492)
+++ /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/io/JosmServerLocationReader.java	(revision 33493)
@@ -4,8 +4,11 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import java.io.IOException;
+
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.io.OsmServerReader;
 import org.openstreetmap.josm.io.OsmTransferException;
+import org.xml.sax.SAXException;
 
 /**
@@ -14,5 +17,5 @@
 public class JosmServerLocationReader extends OsmServerReader {
 
-    private String url;
+    private final String url;
 
     /**
@@ -30,5 +33,5 @@
             progressMonitor.beginTask(tr("Contacting Server...", 10));
             return new XmlBoundsImporter().parseDataSet(url);
-        } catch (Exception e) {
+        } catch (IOException | SAXException e) {
             throw new OsmTransferException(e);
         } finally {
Index: /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/io/ValidatingImageryReader.java
===================================================================
--- /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/io/ValidatingImageryReader.java	(revision 33492)
+++ /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/io/ValidatingImageryReader.java	(revision 33493)
@@ -52,7 +52,9 @@
      */
     public static void validate(String source) throws SAXException, IOException {
-        SchemaFactory factory =  SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
-        Schema schema = factory.newSchema(new StreamSource(new CachedFile(XML_SCHEMA).getInputStream()));
-        schema.newValidator().validate(new StreamSource(source));
+        SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
+        try (CachedFile xmlSchema = new CachedFile(XML_SCHEMA)) {
+            Schema schema = factory.newSchema(new StreamSource(xmlSchema.getInputStream()));
+            schema.newValidator().validate(new StreamSource(source));
+        }
     }
 }
Index: /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/io/XmlBoundsImporter.java
===================================================================
--- /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/io/XmlBoundsImporter.java	(revision 33492)
+++ /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/io/XmlBoundsImporter.java	(revision 33493)
@@ -11,4 +11,5 @@
 
 import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.imagery.ImageryInfo;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
@@ -23,17 +24,34 @@
 
 /**
+ * Imports a JOSM "Maps" file into an OSM data set, to allow editing it.
  * @author Don-vip
- *
  */
 public class XmlBoundsImporter extends FileImporter implements XmlBoundsConstants {
 
+	/**
+	 * Constructs a new {@code XmlBoundsImporter}.
+	 */
     public XmlBoundsImporter() {
         super(FILE_FILTER);
     }
 
+    /**
+     * Loads the given input source URL and returns corresponding data set.
+     * @param source input source URL
+     * @return OSM data set
+     * @throws IOException if any I/O error occurs
+     * @throws SAXException if any SAX error occurs
+     */
     public DataSet parseDataSet(final String source) throws IOException, SAXException {
         return parseDataSet(source, null);
     }
 
+    /**
+     * Loads the given input file and returns corresponding data set.
+     * @param file input file
+     * @return OSM data set
+     * @throws IOException if any I/O error occurs
+     * @throws SAXException if any SAX error occurs
+     */
     public DataSet parseDataSet(final File file) throws IOException, SAXException {
         return parseDataSet(null, file);
@@ -41,9 +59,11 @@
 
     protected DataSet parseDataSet(final String source, final File file) throws IOException, SAXException {
-        ImageryReader reader = null;
-
-        try {
-            reader = new ValidatingImageryReader(source != null ? source : file.getAbsolutePath());
-        } catch (SAXException e)  {
+        List<ImageryInfo> entries;
+		try (ImageryReader reader = new ValidatingImageryReader(source != null ? source : file.getAbsolutePath())) {
+            entries = reader.parse();
+        } catch (SAXException e) {
+        	if (Main.isTraceEnabled()) {
+        		Main.trace(e);
+        	}
             if (JOptionPane.showConfirmDialog(
                     Main.parent,
@@ -55,30 +75,28 @@
             }
 
-            reader = new ImageryReader(source != null ? source : file.getAbsolutePath());
+            try (ImageryReader reader = new ImageryReader(source != null ? source : file.getAbsolutePath())) {
+            	entries = reader.parse();
+            }
         }
 
-        return XmlBoundsConverter.convertImageryEntries(reader.parse());
+        return XmlBoundsConverter.convertImageryEntries(entries);
     }
 
     protected void importData(final String source, final String layerName, final File file, ProgressMonitor progressMonitor)
-            throws IOException, IllegalDataException {
+            throws IOException {
         try {
             final DataSet dataSet = parseDataSet(source, file);
             final XmlBoundsLayer layer = new XmlBoundsLayer(dataSet, source != null ? layerName : file.getName(), file);
-            Runnable uiStuff = new Runnable() {
-                @Override
-                public void run() {
-                    if (dataSet.allPrimitives().isEmpty()) {
-                        JOptionPane.showMessageDialog(
-                                Main.parent, tr("No data found in file {0}.", source != null ? source : file.getPath()),
-                                tr("Open Imagery XML file"), JOptionPane.INFORMATION_MESSAGE);
-                    }
-                    Main.getLayerManager().addLayer(layer);
-                    layer.onPostLoadFromFile();
-                }
-            };
-            GuiHelper.runInEDT(uiStuff);
+            GuiHelper.runInEDT(() -> {
+			    if (dataSet.allPrimitives().isEmpty()) {
+			        JOptionPane.showMessageDialog(
+			                Main.parent, tr("No data found in file {0}.", source != null ? source : file.getPath()),
+			                tr("Open Imagery XML file"), JOptionPane.INFORMATION_MESSAGE);
+			    }
+			    Main.getLayerManager().addLayer(layer);
+			    layer.onPostLoadFromFile();
+			});
         } catch (SAXException e) {
-            e.printStackTrace();
+            Main.error(e);
         }
     }
@@ -88,9 +106,4 @@
             throws IOException, IllegalDataException {
         importData(null, null, file, progressMonitor);
-    }
-
-    public void importData(final String source, final String layerName, ProgressMonitor progressMonitor)
-            throws IOException, IllegalDataException {
-        importData(source, layerName, null, progressMonitor);
     }
 
Index: /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/io/package-info.java
===================================================================
--- /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/io/package-info.java	(revision 33493)
+++ /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/io/package-info.java	(revision 33493)
@@ -0,0 +1,6 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Provides the classes for JOSM plugin input/output support.
+ */
+package org.openstreetmap.josm.plugins.imageryxmlbounds.io;
Index: /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/package-info.java
===================================================================
--- /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/package-info.java	(revision 33493)
+++ /applications/editors/josm/plugins/imagery-xml-bounds/src/org/openstreetmap/josm/plugins/imageryxmlbounds/package-info.java	(revision 33493)
@@ -0,0 +1,6 @@
+// License: GPL. For details, see LICENSE file.
+
+/**
+ * Provides the classes of JOSM imagery XML bounds plugin.
+ */
+package org.openstreetmap.josm.plugins.imageryxmlbounds;
