Index: trunk/src/org/openstreetmap/josm/io/session/GenericSessionExporter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/session/GenericSessionExporter.java	(revision 14629)
+++ trunk/src/org/openstreetmap/josm/io/session/GenericSessionExporter.java	(revision 14630)
@@ -13,5 +13,5 @@
 import java.io.IOException;
 import java.io.OutputStream;
-import java.net.MalformedURLException;
+import java.nio.file.Path;
 
 import javax.swing.AbstractAction;
@@ -192,11 +192,14 @@
             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));
             }
         }
Index: trunk/src/org/openstreetmap/josm/io/session/SessionWriter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/session/SessionWriter.java	(revision 14629)
+++ trunk/src/org/openstreetmap/josm/io/session/SessionWriter.java	(revision 14630)
@@ -9,4 +9,5 @@
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
+import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -64,4 +65,5 @@
     private final boolean zip;
 
+    private Path output;
     private ZipOutputStream zipOut;
 
@@ -195,4 +197,13 @@
         public boolean isZip() {
             return zip;
+        }
+
+        /**
+         * Returns the path of the output file.
+         *
+         * @return the path of the output file
+         */
+        public Path getOutput() {
+            return output;
         }
     }
@@ -329,5 +340,6 @@
      */
     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);
         }
