Index: /trunk/src/org/openstreetmap/josm/actions/relation/ExportRelationToGpxAction.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/relation/ExportRelationToGpxAction.java	(revision 15396)
+++ /trunk/src/org/openstreetmap/josm/actions/relation/ExportRelationToGpxAction.java	(revision 15397)
@@ -166,8 +166,8 @@
                                 .findFirst()
                                 .ifPresent(r -> {
-                                    trkAttr.put("name", r.getName() != null ? r.getName() : r.getId());
+                                    trkAttr.put("name", r.getName() != null ? r.getName() : Long.toString(r.getId()));
                                     trkAttr.put("desc", tr("based on osm route relation data, timestamps are synthetic"));
                                 });
-                        GpxData.ensureUniqueName(trkAttr, names);
+                        GpxData.ensureUniqueName(trkAttr, names, (String) trkAttr.get("name"));
                     }
                     List<Node> ln = flat.get(i).getWay().getNodes();
Index: /trunk/src/org/openstreetmap/josm/data/gpx/GpxData.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/gpx/GpxData.java	(revision 15396)
+++ /trunk/src/org/openstreetmap/josm/data/gpx/GpxData.java	(revision 15397)
@@ -438,14 +438,15 @@
      * @param attrs attributes of/for an gpx track, written to if the name appeared previously in {@code counts}.
      * @param counts a {@code HashMap} of previously seen names, associated with their count.
+     * @param srcLayerName Source layer name
      * @return the unique name for the gpx track.
      *
-     * @since 13210
-     */
-    public static String ensureUniqueName(Map<String, Object> attrs, Map<String, Integer> counts) {
-        String name = attrs.getOrDefault("name", "GPX split result").toString();
+     * @since 15397
+     */
+    public static String ensureUniqueName(Map<String, Object> attrs, Map<String, Integer> counts, String srcLayerName) {
+        String name = attrs.getOrDefault("name", srcLayerName).toString().replaceFirst(" #\\d+$", "");
         Integer count = counts.getOrDefault(name, 0) + 1;
         counts.put(name, count);
 
-        attrs.put("name", MessageFormat.format("{0}{1}", name, (count > 1) ? " #"+count : ""));
+        attrs.put("name", MessageFormat.format("{0}{1}", name, " #" + count));
         return attrs.get("name").toString();
     }
@@ -455,7 +456,9 @@
      * Each segment will make up one individual track after this operation.
      *
-     * @since 13210
-     */
-    public synchronized void splitTrackSegmentsToTracks() {
+     * @param srcLayerName Source layer name
+     *
+     * @since 15397
+     */
+    public synchronized void splitTrackSegmentsToTracks(String srcLayerName) {
         final HashMap<String, Integer> counts = new HashMap<>();
 
@@ -463,5 +466,5 @@
             .flatMap(trk -> trk.getSegments().stream().map(seg -> {
                     HashMap<String, Object> attrs = new HashMap<>(trk.getAttributes());
-                    ensureUniqueName(attrs, counts);
+                    ensureUniqueName(attrs, counts, srcLayerName);
                     return new ImmutableGpxTrack(Arrays.asList(seg), attrs);
                 }))
@@ -479,7 +482,9 @@
      * is untouched as to preserve potential route or wpt parts.
      *
-     * @since 13210
-     */
-    public synchronized void splitTracksToLayers() {
+     * @param srcLayerName Source layer name
+     *
+     * @since 15397
+     */
+    public synchronized void splitTracksToLayers(String srcLayerName) {
         final HashMap<String, Integer> counts = new HashMap<>();
 
@@ -490,5 +495,5 @@
                 GpxData d = new GpxData();
                 d.addTrack(trk);
-                return new GpxLayer(d, ensureUniqueName(attrs, counts));
+                return new GpxLayer(d, ensureUniqueName(attrs, counts, srcLayerName));
             })
             .forEachOrdered(layer -> MainApplication.getLayerManager().addLayer(layer));
@@ -707,5 +712,5 @@
     * so we just ingore points from future and from year before 1970 in this method
     * works correctly @since 5815
-     * @return minimum and maximum dates in array of 2 elements
+    * @return minimum and maximum dates in array of 2 elements
     */
     public synchronized Date[] getMinMaxTimeForAllTracks() {
Index: /trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java	(revision 15396)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java	(revision 15397)
@@ -427,5 +427,5 @@
         @Override
         public void actionPerformed(ActionEvent e) {
-            layer.data.splitTrackSegmentsToTracks();
+            layer.data.splitTrackSegmentsToTracks(!layer.getName().isEmpty() ? layer.getName() : "GPX split result");
             layer.invalidate();
         }
@@ -460,5 +460,5 @@
         @Override
         public void actionPerformed(ActionEvent e) {
-            layer.data.splitTracksToLayers();
+            layer.data.splitTracksToLayers(!layer.getName().isEmpty() ? layer.getName() : "GPX split result");
             // layer is not modified by this action
         }
