Index: trunk/src/org/openstreetmap/josm/io/session/AbstractSessionExporter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/session/AbstractSessionExporter.java	(revision 9455)
+++ trunk/src/org/openstreetmap/josm/io/session/AbstractSessionExporter.java	(revision 9455)
@@ -0,0 +1,43 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.io.session;
+
+import java.util.Collection;
+import java.util.Collections;
+
+import javax.swing.JCheckBox;
+
+import org.openstreetmap.josm.gui.layer.Layer;
+
+/**
+ * Generic superclass of all session layer exporters.
+ * @param <T> Type of exported layer
+ * @since 9455
+ */
+public abstract class AbstractSessionExporter<T extends Layer> implements SessionLayerExporter {
+
+    protected final T layer;
+    protected final JCheckBox export = new JCheckBox();
+
+    /**
+     * Constructs a new {@code AbstractSessionExporter}.
+     * @param layer layer to export
+     */
+    protected AbstractSessionExporter(T layer) {
+        this.layer = layer;
+    }
+
+    @Override
+    public Collection<Layer> getDependencies() {
+        return Collections.emptySet();
+    }
+
+    @Override
+    public boolean shallExport() {
+        return export.isSelected();
+    }
+
+    @Override
+    public boolean requiresZip() {
+        return false;
+    }
+}
Index: trunk/src/org/openstreetmap/josm/io/session/GeoImageSessionExporter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/session/GeoImageSessionExporter.java	(revision 9454)
+++ trunk/src/org/openstreetmap/josm/io/session/GeoImageSessionExporter.java	(revision 9455)
@@ -8,5 +8,4 @@
 import java.util.Collections;
 
-import javax.swing.JCheckBox;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
@@ -20,13 +19,17 @@
 import org.w3c.dom.Element;
 
-public class GeoImageSessionExporter implements SessionLayerExporter {
+/**
+ * Session exporter for {@link GeoImageLayer}.
+ * @since 5505
+ */
+public class GeoImageSessionExporter extends AbstractSessionExporter<GeoImageLayer> {
 
-    private final GeoImageLayer layer;
-
+    /**
+     * Constructs a new {@code GeoImageSessionExporter}.
+     * @param layer GeoImage layer to export
+     */
     public GeoImageSessionExporter(GeoImageLayer layer) {
-        this.layer = layer;
+        super(layer);
     }
-
-    private JCheckBox export;
 
     @Override
@@ -41,5 +44,4 @@
     public Component getExportPanel() {
         final JPanel p = new JPanel(new GridBagLayout());
-        export = new JCheckBox();
         export.setSelected(true);
         final JLabel lbl = new JLabel(layer.getName(), layer.getIcon(), SwingConstants.LEFT);
@@ -50,14 +52,4 @@
         p.add(GBC.glue(1, 0), GBC.std().fill(GBC.HORIZONTAL));
         return p;
-    }
-
-    @Override
-    public boolean shallExport() {
-        return export.isSelected();
-    }
-
-    @Override
-    public boolean requiresZip() {
-        return false;
     }
 
Index: trunk/src/org/openstreetmap/josm/io/session/GeoImageSessionImporter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/session/GeoImageSessionImporter.java	(revision 9454)
+++ trunk/src/org/openstreetmap/josm/io/session/GeoImageSessionImporter.java	(revision 9455)
@@ -22,4 +22,8 @@
 import org.w3c.dom.NodeList;
 
+/**
+ * Session importer for {@link GeoImageLayer}.
+ * @since 5505
+ */
 public class GeoImageSessionImporter implements SessionLayerImporter {
 
@@ -114,4 +118,3 @@
         return new GeoImageLayer(entries, gpxLayer, useThumbs);
     }
-
 }
Index: trunk/src/org/openstreetmap/josm/io/session/GpxTracksSessionExporter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/session/GpxTracksSessionExporter.java	(revision 9454)
+++ trunk/src/org/openstreetmap/josm/io/session/GpxTracksSessionExporter.java	(revision 9455)
@@ -22,9 +22,6 @@
 import java.net.URL;
 import java.nio.charset.StandardCharsets;
-import java.util.Collection;
-import java.util.Collections;
 
 import javax.swing.ButtonGroup;
-import javax.swing.JCheckBox;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
@@ -33,5 +30,4 @@
 
 import org.openstreetmap.josm.gui.layer.GpxLayer;
-import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
@@ -41,10 +37,12 @@
 import org.w3c.dom.Element;
 
-public class GpxTracksSessionExporter implements SessionLayerExporter {
+/**
+ * Session exporter for {@link GpxLayer}.
+ * @since 5501
+ */
+public class GpxTracksSessionExporter extends AbstractSessionExporter<GpxLayer> {
 
-    private final GpxLayer layer;
     private JRadioButton link;
     private JRadioButton include;
-    private JCheckBox export;
 
     /**
@@ -53,10 +51,5 @@
      */
     public GpxTracksSessionExporter(GpxLayer layer) {
-        this.layer = layer;
-    }
-
-    @Override
-    public Collection<Layer> getDependencies() {
-        return Collections.emptySet();
+        super(layer);
     }
 
@@ -65,5 +58,4 @@
         final JPanel p = new JPanel(new GridBagLayout());
         JPanel topRow = new JPanel(new GridBagLayout());
-        export = new JCheckBox();
         export.setSelected(true);
         final JLabel lbl = new JLabel(layer.getName(), layer.getIcon(), SwingConstants.LEFT);
@@ -149,9 +141,4 @@
 
     @Override
-    public boolean shallExport() {
-        return export.isSelected();
-    }
-
-    @Override
     public boolean requiresZip() {
         return include.isSelected();
Index: trunk/src/org/openstreetmap/josm/io/session/GpxTracksSessionImporter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/session/GpxTracksSessionImporter.java	(revision 9454)
+++ trunk/src/org/openstreetmap/josm/io/session/GpxTracksSessionImporter.java	(revision 9455)
@@ -13,4 +13,5 @@
 import javax.xml.xpath.XPathFactory;
 
+import org.openstreetmap.josm.gui.layer.GpxLayer;
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
@@ -20,4 +21,8 @@
 import org.w3c.dom.Element;
 
+/**
+ * Session exporter for {@link GpxLayer}.
+ * @since 5501
+ */
 public class GpxTracksSessionImporter implements SessionLayerImporter {
 
@@ -39,5 +44,5 @@
 
             try (InputStream in = support.getInputStream(fileStr)) {
-                GpxImporter.GpxImporterData importData = null;
+                GpxImporter.GpxImporterData importData;
 
                 if (NMEAImporter.FILE_FILTER.acceptName(fileStr)) {
Index: trunk/src/org/openstreetmap/josm/io/session/ImagerySessionExporter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/session/ImagerySessionExporter.java	(revision 9454)
+++ trunk/src/org/openstreetmap/josm/io/session/ImagerySessionExporter.java	(revision 9455)
@@ -5,10 +5,7 @@
 import java.awt.GridBagLayout;
 import java.io.IOException;
-import java.util.Collection;
-import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.Map;
 
-import javax.swing.JCheckBox;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
@@ -19,5 +16,4 @@
 import org.openstreetmap.josm.gui.layer.AbstractTileSourceLayer;
 import org.openstreetmap.josm.gui.layer.ImageryLayer;
-import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.TMSLayer;
 import org.openstreetmap.josm.gui.layer.WMSLayer;
@@ -28,30 +24,39 @@
 
 /**
- * Session exporter for TMSLayer and WMSLayer.
+ * Session exporter for {@link TMSLayer}, {@link WMSLayer} and {@link WMTSLayer}.
+ * @since 5391
  */
-public class ImagerySessionExporter implements SessionLayerExporter {
+public class ImagerySessionExporter extends AbstractSessionExporter<ImageryLayer> {
 
-    private ImageryLayer layer;
-    private JCheckBox export;
-
+    /**
+     * Constructs a new {@code ImagerySessionExporter}.
+     * @param layer imagery layer to export
+     */
     public ImagerySessionExporter(ImageryLayer layer) {
-        this.layer = layer;
+        super(layer);
     }
 
+    /**
+     * Constructs a new {@code ImagerySessionExporter}.
+     * @param layer TMS layer to export
+     */
     public ImagerySessionExporter(TMSLayer layer) {
-        this((ImageryLayer) layer);
+        super(layer);
     }
 
+    /**
+     * Constructs a new {@code ImagerySessionExporter}.
+     * @param layer WMS layer to export
+     */
     public ImagerySessionExporter(WMSLayer layer) {
-        this((ImageryLayer) layer);
+        super(layer);
     }
 
+    /**
+     * Constructs a new {@code ImagerySessionExporter}.
+     * @param layer WMTS layer to export
+     */
     public ImagerySessionExporter(WMTSLayer layer) {
-        this((ImageryLayer) layer);
-    }
-
-    @Override
-    public Collection<Layer> getDependencies() {
-        return Collections.emptySet();
+        super(layer);
     }
 
@@ -59,5 +64,4 @@
     public Component getExportPanel() {
         final JPanel p = new JPanel(new GridBagLayout());
-        export = new JCheckBox();
         export.setSelected(true);
         final JLabel lbl = new JLabel(layer.getName(), layer.getIcon(), SwingConstants.LEFT);
@@ -68,14 +72,4 @@
         p.add(GBC.glue(1, 0), GBC.std().fill(GBC.HORIZONTAL));
         return p;
-    }
-
-    @Override
-    public boolean shallExport() {
-        return export.isSelected();
-    }
-
-    @Override
-    public boolean requiresZip() {
-        return false;
     }
 
@@ -102,4 +96,3 @@
         return layerElem;
     }
-
 }
Index: trunk/src/org/openstreetmap/josm/io/session/ImagerySessionImporter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/session/ImagerySessionImporter.java	(revision 9454)
+++ trunk/src/org/openstreetmap/josm/io/session/ImagerySessionImporter.java	(revision 9455)
@@ -14,4 +14,7 @@
 import org.openstreetmap.josm.gui.layer.ImageryLayer;
 import org.openstreetmap.josm.gui.layer.Layer;
+import org.openstreetmap.josm.gui.layer.TMSLayer;
+import org.openstreetmap.josm.gui.layer.WMSLayer;
+import org.openstreetmap.josm.gui.layer.WMTSLayer;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.io.IllegalDataException;
@@ -22,5 +25,6 @@
 
 /**
- * Session importer for both TMSLayer and WMSLayer.
+ * Session importer for {@link TMSLayer}, {@link WMSLayer} and {@link WMTSLayer}.
+ * @since 5391
  */
 public class ImagerySessionImporter implements SessionLayerImporter {
Index: trunk/src/org/openstreetmap/josm/io/session/MarkerSessionExporter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/session/MarkerSessionExporter.java	(revision 9454)
+++ trunk/src/org/openstreetmap/josm/io/session/MarkerSessionExporter.java	(revision 9455)
@@ -13,5 +13,4 @@
 import java.util.Collections;
 
-import javax.swing.JCheckBox;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
@@ -28,11 +27,16 @@
 import org.w3c.dom.Element;
 
-public class MarkerSessionExporter implements SessionLayerExporter {
+/**
+ * Session exporter for {@link MarkerLayer}.
+ * @since 5684
+ */
+public class MarkerSessionExporter extends AbstractSessionExporter<MarkerLayer> {
 
-    private final MarkerLayer layer;
-    private JCheckBox export;
-
+    /**
+     * Constructs a new {@code MarkerSessionExporter}.
+     * @param layer marker layer to export
+     */
     public MarkerSessionExporter(MarkerLayer layer) {
-        this.layer = layer;
+        super(layer);
     }
 
@@ -48,5 +52,4 @@
     public Component getExportPanel() {
         final JPanel p = new JPanel(new GridBagLayout());
-        export = new JCheckBox();
         export.setSelected(true);
         final JLabel lbl = new JLabel(layer.getName(), layer.getIcon(), SwingConstants.LEFT);
@@ -57,9 +60,4 @@
         p.add(GBC.glue(1, 0), GBC.std().fill(GBC.HORIZONTAL));
         return p;
-    }
-
-    @Override
-    public boolean shallExport() {
-        return export.isSelected();
     }
 
@@ -93,10 +91,21 @@
     }
 
+    /**
+     * Writes GPX file from marker data.
+     */
     public static class MarkerWriter extends GpxWriter {
 
+        /**
+         * Constructs a new {@code MarkerWriter}.
+         * @param out The output writer
+         */
         public MarkerWriter(PrintWriter out) {
             super(out);
         }
 
+        /**
+         * Writes the given markers data.
+         * @param layer The layer data to write
+         */
         public void write(MarkerLayer layer) {
             GpxData data = new GpxData();
Index: trunk/src/org/openstreetmap/josm/io/session/MarkerSessionImporter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/session/MarkerSessionImporter.java	(revision 9454)
+++ trunk/src/org/openstreetmap/josm/io/session/MarkerSessionImporter.java	(revision 9455)
@@ -23,4 +23,8 @@
 import org.w3c.dom.Element;
 
+/**
+ * Session importer for {@link MarkerLayer}.
+ * @since 5684
+ */
 public class MarkerSessionImporter implements SessionLayerImporter {
 
Index: trunk/src/org/openstreetmap/josm/io/session/OsmDataSessionExporter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/session/OsmDataSessionExporter.java	(revision 9454)
+++ trunk/src/org/openstreetmap/josm/io/session/OsmDataSessionExporter.java	(revision 9455)
@@ -22,11 +22,8 @@
 import java.net.URL;
 import java.nio.charset.StandardCharsets;
-import java.util.Collection;
-import java.util.Collections;
 
 import javax.swing.AbstractAction;
 import javax.swing.ButtonGroup;
 import javax.swing.JButton;
-import javax.swing.JCheckBox;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
@@ -35,5 +32,4 @@
 
 import org.openstreetmap.josm.actions.SaveAction;
-import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.util.GuiHelper;
@@ -46,10 +42,12 @@
 import org.w3c.dom.Element;
 
-public class OsmDataSessionExporter implements SessionLayerExporter {
-
-    private final OsmDataLayer layer;
+/**
+ * Session exporter for {@link OsmDataLayer}.
+ * @since 4685
+ */
+public class OsmDataSessionExporter extends AbstractSessionExporter<OsmDataLayer> {
+
     private JRadioButton link;
     private JRadioButton include;
-    private JCheckBox export;
 
     /**
@@ -58,10 +56,5 @@
      */
     public OsmDataSessionExporter(OsmDataLayer layer) {
-        this.layer = layer;
-    }
-
-    @Override
-    public Collection<Layer> getDependencies() {
-        return Collections.emptySet();
+        super(layer);
     }
 
@@ -93,5 +86,4 @@
         final JPanel p = new JPanel(new GridBagLayout());
         JPanel topRow = new JPanel(new GridBagLayout());
-        export = new JCheckBox();
         export.setSelected(true);
         final JLabel lbl = new JLabel(layer.getName(), layer.getIcon(), SwingConstants.LEFT);
@@ -182,9 +174,4 @@
 
     @Override
-    public boolean shallExport() {
-        return export.isSelected();
-    }
-
-    @Override
     public boolean requiresZip() {
         return include.isSelected();
Index: trunk/src/org/openstreetmap/josm/io/session/OsmDataSessionImporter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/session/OsmDataSessionImporter.java	(revision 9454)
+++ trunk/src/org/openstreetmap/josm/io/session/OsmDataSessionImporter.java	(revision 9455)
@@ -14,4 +14,5 @@
 
 import org.openstreetmap.josm.gui.layer.Layer;
+import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.io.IllegalDataException;
@@ -20,4 +21,8 @@
 import org.w3c.dom.Element;
 
+/**
+ * Session importer for {@link OsmDataLayer}.
+ * @since 4685
+ */
 public class OsmDataSessionImporter implements SessionLayerImporter {
 
@@ -50,3 +55,2 @@
     }
 }
-
Index: trunk/src/org/openstreetmap/josm/io/session/SessionLayerExporter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/session/SessionLayerExporter.java	(revision 9454)
+++ trunk/src/org/openstreetmap/josm/io/session/SessionLayerExporter.java	(revision 9455)
@@ -10,4 +10,8 @@
 import org.w3c.dom.Element;
 
+/**
+ * Session layer exporter.
+ * @since 4685
+ */
 public interface SessionLayerExporter {
 
Index: trunk/src/org/openstreetmap/josm/io/session/SessionLayerImporter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/session/SessionLayerImporter.java	(revision 9454)
+++ trunk/src/org/openstreetmap/josm/io/session/SessionLayerImporter.java	(revision 9455)
@@ -10,4 +10,8 @@
 import org.w3c.dom.Element;
 
+/**
+ * Session layer importer.
+ * @since 4668
+ */
 public interface SessionLayerImporter {
 
Index: trunk/src/org/openstreetmap/josm/io/session/SessionReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/session/SessionReader.java	(revision 9454)
+++ trunk/src/org/openstreetmap/josm/io/session/SessionReader.java	(revision 9455)
@@ -54,9 +54,17 @@
 /**
  * Reads a .jos session file and loads the layers in the process.
- *
+ * @since 4668
  */
 public class SessionReader {
 
     private static final Map<String, Class<? extends SessionLayerImporter>> sessionLayerImporters = new HashMap<>();
+
+    private URI sessionFileURI;
+    private boolean zip; // true, if session file is a .joz file; false if it is a .jos file
+    private ZipFile zipFile;
+    private List<Layer> layers = new ArrayList<>();
+    private int active = -1;
+    private final List<Runnable> postLoadTasks = new ArrayList<>();
+    private ViewportData viewport;
 
     static {
@@ -68,8 +76,19 @@
     }
 
+    /**
+     * Register a session layer importer.
+     *
+     * @param layerType layer type
+     * @param importer importer for this layer class
+     */
     public static void registerSessionLayerImporter(String layerType, Class<? extends SessionLayerImporter> importer) {
         sessionLayerImporters.put(layerType, importer);
     }
 
+    /**
+     * Returns the session layer importer for the given layer type.
+     * @param layerType layer type to import
+     * @return session layer importer for the given layer
+     */
     public static SessionLayerImporter getSessionLayerImporter(String layerType) {
         Class<? extends SessionLayerImporter> importerClass = sessionLayerImporters.get(layerType);
@@ -85,12 +104,4 @@
     }
 
-    private URI sessionFileURI;
-    private boolean zip; // true, if session file is a .joz file; false if it is a .jos file
-    private ZipFile zipFile;
-    private List<Layer> layers = new ArrayList<>();
-    private int active = -1;
-    private final List<Runnable> postLoadTasks = new ArrayList<>();
-    private ViewportData viewport;
-
     /**
      * @return list of layers that are later added to the mapview
@@ -124,4 +135,8 @@
     }
 
+    /**
+     * A class that provides some context for the individual {@link SessionLayerImporter}
+     * when doing the import.
+     */
     public class ImportSupport {
 
@@ -130,4 +145,16 @@
         private final List<LayerDependency> layerDependencies;
 
+        /**
+         * Path of the file inside the zip archive.
+         * Used as alternative return value for getFile method.
+         */
+        private String inZipPath;
+
+        /**
+         * Constructs a new {@code ImportSupport}.
+         * @param layerName layer name
+         * @param layerIndex layer index
+         * @param layerDependencies layer dependencies
+         */
         public ImportSupport(String layerName, int layerIndex, List<LayerDependency> layerDependencies) {
             this.layerName = layerName;
@@ -135,10 +162,4 @@
             this.layerDependencies = layerDependencies;
         }
-
-        /**
-         * Path of the file inside the zip archive.
-         * Used as alternative return value for getFile method.
-         */
-        private String inZipPath;
 
         /**
@@ -556,11 +577,15 @@
     }
 
+    /**
+     * Loads session from the given file.
+     * @param sessionFile session file to load
+     * @param zip {@code true} if it's a zipped session (.joz)
+     * @param progressMonitor progress monitor
+     * @throws IllegalDataException if invalid data is detected
+     * @throws IOException if any I/O error occurs
+     */
     public void loadSession(File sessionFile, boolean zip, ProgressMonitor progressMonitor) throws IllegalDataException, IOException {
-        if (progressMonitor == null) {
-            progressMonitor = NullProgressMonitor.INSTANCE;
-        }
-
         try (InputStream josIS = createInputStream(sessionFile, zip)) {
-            loadSession(josIS, sessionFile.toURI(), zip, progressMonitor);
+            loadSession(josIS, sessionFile.toURI(), zip, progressMonitor != null ? progressMonitor : NullProgressMonitor.INSTANCE);
         }
     }
@@ -621,6 +646,5 @@
     private static Element getElementByTagName(Element root, String name) {
         NodeList els = root.getElementsByTagName(name);
-        if (els.getLength() == 0) return null;
-        return (Element) els.item(0);
+        return els.getLength() > 0 ? (Element) els.item(0) : null;
     }
 }
Index: trunk/src/org/openstreetmap/josm/io/session/SessionWriter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/session/SessionWriter.java	(revision 9454)
+++ trunk/src/org/openstreetmap/josm/io/session/SessionWriter.java	(revision 9455)
@@ -47,7 +47,19 @@
 import org.w3c.dom.Text;
 
+/**
+ * Writes a .jos session file from current supported layers.
+ * @since 4685
+ */
 public class SessionWriter {
 
     private static Map<Class<? extends Layer>, Class<? extends SessionLayerExporter>> sessionLayerExporters = new HashMap<>();
+
+    private final List<Layer> layers;
+    private final int active;
+    private final Map<Layer, SessionLayerExporter> exporters;
+    private final MultiMap<Layer, Layer> dependencies;
+    private final boolean zip;
+
+    private ZipOutputStream zipOut;
 
     static {
@@ -72,8 +84,14 @@
     }
 
+    /**
+     * Returns the session layer exporter for the given layer.
+     * @param layer layer to export
+     * @return session layer exporter for the given layer
+     */
     public static SessionLayerExporter getSessionLayerExporter(Layer layer) {
         Class<? extends Layer> layerClass = layer.getClass();
         Class<? extends SessionLayerExporter> exporterClass = sessionLayerExporters.get(layerClass);
-        if (exporterClass == null) return null;
+        if (exporterClass == null)
+            return null;
         try {
             Constructor<? extends SessionLayerExporter> constructor = exporterClass.getConstructor(layerClass);
@@ -83,12 +101,4 @@
         }
     }
-
-    private final List<Layer> layers;
-    private final int active;
-    private final Map<Layer, SessionLayerExporter> exporters;
-    private final MultiMap<Layer, Layer> dependencies;
-    private final boolean zip;
-
-    private ZipOutputStream zipOut;
 
     /**
@@ -118,4 +128,9 @@
         private final int layerIndex;
 
+        /**
+         * Constructs a new {@code ExportSupport}.
+         * @param doc XML document
+         * @param layerIndex layer index
+         */
         public ExportSupport(Document doc, int layerIndex) {
             this.doc = doc;
@@ -123,8 +138,20 @@
         }
 
+        /**
+         * Creates an element of the type specified.
+         * @param name The name of the element type to instantiate
+         * @return A new {@code Element} object
+         * @see Document#createElement
+         */
         public Element createElement(String name) {
             return doc.createElement(name);
         }
 
+        /**
+         * Creates a text node given the specified string.
+         * @param text The data for the node.
+         * @return The new {@code Text} object.
+         * @see Document#createTextNode
+         */
         public Text createTextNode(String text) {
             return doc.createTextNode(text);
@@ -168,4 +195,9 @@
     }
 
+    /**
+     * Creates XML (.jos) session document.
+     * @return new document
+     * @throws IOException if any I/O error occurs
+     */
     public Document createJosDocument() throws IOException {
         DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
@@ -219,5 +251,6 @@
                 for (Layer depLayer : deps) {
                     int depIndex = layers.indexOf(depLayer);
-                    if (depIndex == -1) throw new AssertionError();
+                    if (depIndex == -1)
+                        throw new AssertionError();
                     depsInt.add(depIndex+1);
                 }
@@ -229,4 +262,10 @@
     }
 
+    /**
+     * Writes given .jos document to an output stream.
+     * @param doc session document
+     * @param out output stream
+     * @throws IOException if any I/O error occurs
+     */
     public void writeJos(Document doc, OutputStream out) throws IOException {
         try {
@@ -246,4 +285,9 @@
     }
 
+    /**
+     * Writes session to given file.
+     * @param f output file
+     * @throws IOException if any I/O error occurs
+     */
     public void write(File f) throws IOException {
         try (OutputStream out = new FileOutputStream(f)) {
@@ -254,4 +298,9 @@
     }
 
+    /**
+     * Writes session to given output stream.
+     * @param out output stream
+     * @throws IOException if any I/O error occurs
+     */
     public void write(OutputStream out) throws IOException {
         if (zip) {
