diff --git a/src/org/openstreetmap/josm/io/session/GenericSessionExporter.java b/src/org/openstreetmap/josm/io/session/GenericSessionExporter.java
index 6d1e3eb0d..ab8592c7e 100644
--- a/src/org/openstreetmap/josm/io/session/GenericSessionExporter.java
+++ b/src/org/openstreetmap/josm/io/session/GenericSessionExporter.java
@@ -12,7 +12,7 @@
 import java.io.File;
 import java.io.IOException;
 import java.io.OutputStream;
-import java.net.MalformedURLException;
+import java.nio.file.Path;
 
 import javax.swing.AbstractAction;
 import javax.swing.ButtonGroup;
@@ -191,13 +191,16 @@ public Element export(ExportSupport support) throws IOException {
             file.appendChild(support.createTextNode(zipPath));
             addDataFile(support.getOutputStreamZip(zipPath));
         } else {
-            try {
-                File f = layer.getAssociatedFile();
-                if (f != null) {
-                    file.appendChild(support.createTextNode(f.toURI().toURL().toString()));
+            File f = layer.getAssociatedFile();
+            if (f != null) {
+                final Path sessionDirectory = support.getOutput().getParent();
+                final String fileString;
+                if (f.toPath().startsWith(sessionDirectory)) {
+                    fileString = sessionDirectory.relativize(f.toPath()).toString();
+                } else {
+                    fileString = f.toPath().toString();
                 }
-            } catch (MalformedURLException e) {
-                throw new IOException(e);
+                file.appendChild(support.createTextNode(fileString));
             }
         }
         return layerEl;
diff --git a/src/org/openstreetmap/josm/io/session/SessionWriter.java b/src/org/openstreetmap/josm/io/session/SessionWriter.java
index c116c219e..efccebab3 100644
--- a/src/org/openstreetmap/josm/io/session/SessionWriter.java
+++ b/src/org/openstreetmap/josm/io/session/SessionWriter.java
@@ -8,6 +8,7 @@
 import java.io.OutputStreamWriter;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
+import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -63,6 +64,7 @@
     private final MultiMap<Layer, Layer> dependencies;
     private final boolean zip;
 
+    private Path output;
     private ZipOutputStream zipOut;
 
     static {
@@ -195,6 +197,15 @@ public OutputStream getOutputStreamZip(String zipPath) throws IOException {
         public boolean isZip() {
             return zip;
         }
+
+        /**
+         * Returns the path of the output file.
+         *
+         * @return the path of the output file
+         */
+        public Path getOutput() {
+            return output;
+        }
     }
 
     /**
@@ -328,7 +339,8 @@ public void writeJos(Document doc, OutputStream out) throws IOException {
      * @throws IOException if any I/O error occurs
      */
     public void write(File f) throws IOException {
-        try (OutputStream out = Files.newOutputStream(f.toPath())) {
+        output = f.toPath();
+        try (OutputStream out = Files.newOutputStream(output)) {
             write(out);
         }
     }
