Index: trunk/test/unit/org/openstreetmap/josm/data/gpx/GpxDataTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/data/gpx/GpxDataTest.java	(revision 18283)
+++ trunk/test/unit/org/openstreetmap/josm/data/gpx/GpxDataTest.java	(revision 18287)
@@ -504,5 +504,5 @@
         EqualsVerifier.forClass(GpxData.class).usingGetClass()
             .suppress(Warning.NONFINAL_FIELDS)
-            .withIgnoredFields("creator", "fromServer", "storageFile", "initializing", "updating",
+            .withIgnoredFields("creator", "fromServer", "fromSession", "storageFile", "initializing", "updating",
                     "suppressedInvalidate", "listeners", "tracks", "routes", "waypoints", "proxy", "segSpans", "modified")
             .withPrefabValues(WayPoint.class, new WayPoint(LatLon.NORTH_POLE), new WayPoint(LatLon.SOUTH_POLE))
Index: trunk/test/unit/org/openstreetmap/josm/data/gpx/GpxTrackTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/data/gpx/GpxTrackTest.java	(revision 18283)
+++ trunk/test/unit/org/openstreetmap/josm/data/gpx/GpxTrackTest.java	(revision 18287)
@@ -9,6 +9,6 @@
 import java.util.HashMap;
 
+import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.RegisterExtension;
-import org.junit.jupiter.api.Test;
 import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
@@ -32,5 +32,5 @@
 
     /**
-     * Tests weather the track can read and write colors.
+     * Tests whether the track can read and write colors.
      */
     @Test
Index: trunk/test/unit/org/openstreetmap/josm/io/session/SessionWriterTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/io/session/SessionWriterTest.java	(revision 18283)
+++ trunk/test/unit/org/openstreetmap/josm/io/session/SessionWriterTest.java	(revision 18287)
@@ -1,13 +1,16 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.io.session;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import java.awt.Color;
 import java.io.File;
 import java.io.IOException;
-import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.time.Instant;
 import java.util.Arrays;
 import java.util.Collections;
@@ -15,4 +18,6 @@
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 
@@ -43,6 +48,4 @@
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
 /**
  * Unit tests for Session writing.
@@ -109,5 +112,5 @@
     }
 
-    private byte[] testWrite(List<Layer> layers, final boolean zip) throws IOException {
+    private Map<String, byte[]> testWrite(List<Layer> layers, final boolean zip) throws IOException {
         Map<Layer, SessionLayerExporter> exporters = new HashMap<>();
         if (zip) {
@@ -119,5 +122,11 @@
         }
         for (final Layer l : layers) {
-            exporters.put(l, SessionWriter.getSessionLayerExporter(l));
+            SessionLayerExporter s = SessionWriter.getSessionLayerExporter(l);
+            exporters.put(l, s);
+            if (s instanceof GpxTracksSessionExporter) {
+                ((GpxTracksSessionExporter) s).setMetaTime(Instant.parse("2021-10-16T18:27:12.351Z"));
+            } else if (s instanceof MarkerSessionExporter) {
+                ((MarkerSessionExporter) s).setMetaTime(Instant.parse("2021-10-16T18:27:12.351Z"));
+            }
         }
         SessionWriter sw = new SessionWriter(layers, -1, exporters, new MultiMap<Layer, Layer>(), zip);
@@ -128,7 +137,13 @@
                 return null;
             }
-            try (ZipFile zipFile = new ZipFile(file);
-                 InputStream input = zipFile.getInputStream(zipFile.getEntry("session.jos"))) {
-                return Utils.readBytesFromStream(input);
+            try (ZipFile zipFile = new ZipFile(file)) {
+                return Collections.list(zipFile.entries()).stream().collect(Collectors.toMap(ZipEntry::getName, e -> {
+                    try {
+                        return Utils.readBytesFromStream(zipFile.getInputStream(e));
+                    } catch (IOException ex) {
+                        fail(ex);
+                    }
+                    return null;
+                }));
             }
         } finally {
@@ -147,5 +162,7 @@
     private GpxLayer createGpxLayer() {
         GpxData data = new GpxData();
-        data.waypoints.add(new WayPoint(new LatLon(42.72665, -0.00747)));
+        WayPoint wp = new WayPoint(new LatLon(42.72665, -0.00747));
+        wp.setInstant(Instant.parse("2021-01-01T10:15:30.00Z"));
+        data.waypoints.add(wp);
         data.waypoints.add(new WayPoint(new LatLon(42.72659, -0.00749)));
         GpxLayer layer = new GpxLayer(data, "GPX layer name");
@@ -233,8 +250,19 @@
     void testWriteGpxAndMarkerJoz() throws IOException {
         GpxLayer gpx = createGpxLayer();
-        byte[] bytes = testWrite(Arrays.asList(gpx, createMarkerLayer(gpx)), true);
+        Map<String, byte[]> bytes = testWrite(Arrays.asList(gpx, createMarkerLayer(gpx)), true);
+
         Path path = Paths.get(TestUtils.getTestDataRoot() + "/sessions/gpx_markers.jos");
         String expected = new String(Files.readAllBytes(path), StandardCharsets.UTF_8).replace("\r", "");
-        String actual = new String(bytes, StandardCharsets.UTF_8).replace("\r", "");
+        String actual = new String(bytes.get("session.jos"), StandardCharsets.UTF_8).replace("\r", "");
+        assertEquals(expected, actual);
+
+        path = Paths.get(TestUtils.getTestDataRoot() + "/sessions/data_export.gpx");
+        expected = new String(Files.readAllBytes(path), StandardCharsets.UTF_8).replace("\r", "");
+        actual = new String(bytes.get("layers/01/data.gpx"), StandardCharsets.UTF_8).replace("\r", "");
+        assertEquals(expected, actual);
+
+        path = Paths.get(TestUtils.getTestDataRoot() + "/sessions/markers.gpx");
+        expected = new String(Files.readAllBytes(path), StandardCharsets.UTF_8).replace("\r", "");
+        actual = new String(bytes.get("layers/02/data.gpx"), StandardCharsets.UTF_8).replace("\r", "");
         assertEquals(expected, actual);
     }
