Index: /applications/editors/josm/plugins/opendata/build.xml
===================================================================
--- /applications/editors/josm/plugins/opendata/build.xml	(revision 35138)
+++ /applications/editors/josm/plugins/opendata/build.xml	(revision 35139)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <project name="opendata" default="dist" basedir=".">
-    <property name="plugin.main.version" value="14977"/>
+    <property name="plugin.main.version" value="15377"/>
     <property name="plugin.author" value="Don-vip"/>
     <property name="plugin.class" value="org.openstreetmap.josm.plugins.opendata.OdPlugin"/>
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/OdPlugin.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/OdPlugin.java	(revision 35138)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/OdPlugin.java	(revision 35139)
@@ -22,4 +22,6 @@
 import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
 import org.openstreetmap.josm.gui.util.GuiHelper;
+import org.openstreetmap.josm.io.session.SessionReader;
+import org.openstreetmap.josm.io.session.SessionWriter;
 import org.openstreetmap.josm.plugins.Plugin;
 import org.openstreetmap.josm.plugins.PluginInformation;
@@ -39,7 +41,10 @@
 import org.openstreetmap.josm.plugins.opendata.core.io.geographic.MifTabImporter;
 import org.openstreetmap.josm.plugins.opendata.core.io.geographic.ShpImporter;
+import org.openstreetmap.josm.plugins.opendata.core.io.session.OpenDataSessionExporter;
+import org.openstreetmap.josm.plugins.opendata.core.io.session.OpenDataSessionImporter;
 import org.openstreetmap.josm.plugins.opendata.core.io.tabular.CsvImporter;
 import org.openstreetmap.josm.plugins.opendata.core.io.tabular.OdsImporter;
 import org.openstreetmap.josm.plugins.opendata.core.io.tabular.XlsImporter;
+import org.openstreetmap.josm.plugins.opendata.core.layers.OdDataLayer;
 import org.openstreetmap.josm.plugins.opendata.core.modules.Module;
 import org.openstreetmap.josm.plugins.opendata.core.modules.ModuleHandler;
@@ -58,4 +63,12 @@
 
     private OdDialog dialog;
+
+    public final List<AbstractImporter> importers =  Arrays.asList(new AbstractImporter[]{
+            new CsvImporter(), new OdsImporter(), new XlsImporter(), // Tabular file formats
+            new KmlKmzImporter(), new ShpImporter(), new MifTabImporter(), new GmlImporter(), // Geographic file formats
+            new ZipImporter(), // Zip archive containing any of the others
+            new SevenZipImporter(), // 7Zip archive containing any of the others
+            xmlImporter // Generic importer for XML files (currently used for Neptune files)
+    });
 
     public OdPlugin(PluginInformation info) {
@@ -68,13 +81,8 @@
         }
         // Allow JOSM to import more files
-        for (AbstractImporter importer : Arrays.asList(new AbstractImporter[]{
-                new CsvImporter(), new OdsImporter(), new XlsImporter(), // Tabular file formats
-                new KmlKmzImporter(), new ShpImporter(), new MifTabImporter(), new GmlImporter(), // Geographic file formats
-                new ZipImporter(), // Zip archive containing any of the others
-                new SevenZipImporter(), // 7Zip archive containing any of the others
-                xmlImporter // Generic importer for XML files (currently used for Neptune files)
-        })) {
-            ExtensionFileFilter.addImporterFirst(importer);
-        }
+        importers.forEach(ExtensionFileFilter::addImporterFirst);
+        // Session support
+        SessionReader.registerSessionLayerImporter("open-data", OpenDataSessionImporter.class);
+        SessionWriter.registerSessionLayerExporter(OdDataLayer.class, OpenDataSessionExporter.class);
 
         menu = MainApplication.getMenu().dataMenu;
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/AbstractImporter.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/AbstractImporter.java	(revision 35138)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/AbstractImporter.java	(revision 35139)
@@ -44,4 +44,8 @@
     }
 
+    public final void setFile(File file) {
+        this.file = file;
+    }
+
     @Override
     public void importData(File file, ProgressMonitor progressMonitor)
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/session/OpenDataSessionExporter.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/session/OpenDataSessionExporter.java	(revision 35139)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/session/OpenDataSessionExporter.java	(revision 35139)
@@ -0,0 +1,20 @@
+package org.openstreetmap.josm.plugins.opendata.core.io.session;
+
+import java.io.IOException;
+import java.io.OutputStream;
+
+import org.openstreetmap.josm.io.session.GenericSessionExporter;
+import org.openstreetmap.josm.io.session.OsmDataSessionExporter;
+import org.openstreetmap.josm.plugins.opendata.core.layers.OdDataLayer;
+
+public class OpenDataSessionExporter extends GenericSessionExporter<OdDataLayer> {
+
+    public OpenDataSessionExporter(OdDataLayer layer) { // NO_UCD (test only)
+        super(layer, "open-data", "0.1", "osm");
+    }
+
+    @Override
+    protected void addDataFile(OutputStream out) throws IOException {
+        OsmDataSessionExporter.export(layer.data, out);
+    }
+}
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/session/OpenDataSessionImporter.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/session/OpenDataSessionImporter.java	(revision 35139)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/session/OpenDataSessionImporter.java	(revision 35139)
@@ -0,0 +1,32 @@
+package org.openstreetmap.josm.plugins.opendata.core.io.session;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.openstreetmap.josm.gui.io.importexport.OsmImporter;
+import org.openstreetmap.josm.gui.layer.Layer;
+import org.openstreetmap.josm.gui.progress.ProgressMonitor;
+import org.openstreetmap.josm.io.IllegalDataException;
+import org.openstreetmap.josm.io.session.OsmDataSessionImporter;
+import org.openstreetmap.josm.io.session.SessionLayerImporter;
+import org.openstreetmap.josm.io.session.SessionReader.ImportSupport;
+import org.openstreetmap.josm.plugins.opendata.OdPlugin;
+import org.openstreetmap.josm.plugins.opendata.core.io.AbstractImporter;
+import org.w3c.dom.Element;
+
+public class OpenDataSessionImporter implements SessionLayerImporter {
+
+    @Override
+    public Layer load(Element elem, ImportSupport support, ProgressMonitor progressMonitor) throws IOException, IllegalDataException {
+        OsmDataSessionImporter.checkMetaVersion(elem);
+        String fileStr = OsmDataSessionImporter.extractFileName(elem, support);
+        File pathname = new File(fileStr.startsWith("file:/") ? fileStr.replace("file:/", "") : fileStr);
+        for (AbstractImporter importer : OdPlugin.getInstance().importers) {
+            if (importer.acceptFile(pathname)) {
+                importer.setFile(pathname);
+                return OsmDataSessionImporter.importData(importer, support, fileStr, progressMonitor);
+            }
+        }
+        return OsmDataSessionImporter.importData(new OsmImporter(), support, fileStr, progressMonitor);
+    }
+}
