Index: /trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/DefaultMarkerProducers.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/DefaultMarkerProducers.java	(revision 11892)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/DefaultMarkerProducers.java	(revision 11892)
@@ -0,0 +1,79 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.layer.markerlayer;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Optional;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.gpx.Extensions;
+import org.openstreetmap.josm.data.gpx.GpxConstants;
+import org.openstreetmap.josm.data.gpx.GpxLink;
+import org.openstreetmap.josm.data.gpx.WayPoint;
+import org.openstreetmap.josm.tools.Utils;
+
+/**
+ * Marker specifying the default behaviour.
+ * @since 11892 (extracted from Marker)
+ */
+public final class DefaultMarkerProducers implements MarkerProducers {
+
+    @Override
+    public Collection<Marker> createMarkers(WayPoint wpt, File relativePath, MarkerLayer parentLayer, double time,
+            double offset) {
+        String uri = null;
+        // cheapest way to check whether "link" object exists and is a non-empty collection of GpxLink objects...
+        Collection<GpxLink> links = wpt.<GpxLink>getCollection(GpxConstants.META_LINKS);
+        if (links != null) {
+            for (GpxLink oneLink : links) {
+                uri = oneLink.uri;
+                break;
+            }
+        }
+
+        URL url = uriToUrl(uri, relativePath);
+        String urlStr = url == null ? "" : url.toString();
+        String symbolName = Optional.ofNullable(wpt.getString("symbol"))
+                .orElseGet(() -> wpt.getString(GpxConstants.PT_SYM));
+        // text marker is returned in every case, see #10208
+        final Marker marker = new Marker(wpt.getCoor(), wpt, symbolName, parentLayer, time, offset);
+        if (url == null) {
+            return Collections.singleton(marker);
+        } else if (urlStr.endsWith(".wav")) {
+            final AudioMarker audioMarker = new AudioMarker(wpt.getCoor(), wpt, url, parentLayer, time, offset);
+            Extensions exts = (Extensions) wpt.get(GpxConstants.META_EXTENSIONS);
+            if (exts != null && exts.containsKey("offset")) {
+                try {
+                    audioMarker.syncOffset = Double.parseDouble(exts.get("sync-offset"));
+                } catch (NumberFormatException nfe) {
+                    Main.warn(nfe);
+                }
+            }
+            return Arrays.asList(marker, audioMarker);
+        } else if (urlStr.endsWith(".png") || urlStr.endsWith(".jpg") || urlStr.endsWith(".jpeg")
+                || urlStr.endsWith(".gif")) {
+            return Arrays.asList(marker, new ImageMarker(wpt.getCoor(), url, parentLayer, time, offset));
+        } else {
+            return Arrays.asList(marker, new WebMarker(wpt.getCoor(), url, parentLayer, time, offset));
+        }
+    }
+
+    private static URL uriToUrl(String uri, File relativePath) {
+        URL url = null;
+        if (uri != null) {
+            try {
+                url = new URL(uri);
+            } catch (MalformedURLException e) {
+                // Try a relative file:// url, if the link is not in an URL-compatible form
+                if (relativePath != null) {
+                    url = Utils.fileToURL(new File(relativePath.getParentFile(), uri));
+                }
+            }
+        }
+        return url;
+    }
+}
Index: /trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java	(revision 11891)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java	(revision 11892)
@@ -10,12 +10,8 @@
 import java.awt.image.BufferedImage;
 import java.io.File;
-import java.net.MalformedURLException;
-import java.net.URL;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
@@ -23,5 +19,4 @@
 import java.util.List;
 import java.util.Map;
-import java.util.Optional;
 import java.util.TimeZone;
 
@@ -34,7 +29,5 @@
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon;
-import org.openstreetmap.josm.data.gpx.Extensions;
 import org.openstreetmap.josm.data.gpx.GpxConstants;
-import org.openstreetmap.josm.data.gpx.GpxLink;
 import org.openstreetmap.josm.data.gpx.WayPoint;
 import org.openstreetmap.josm.data.preferences.CachedProperty;
@@ -42,5 +35,4 @@
 import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.tools.ImageProvider;
-import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.template_engine.ParseError;
 import org.openstreetmap.josm.tools.template_engine.TemplateEngineDataProvider;
@@ -184,39 +176,5 @@
     // Add one Marker specifying the default behaviour.
     static {
-        Marker.markerProducers.add((wpt, relativePath, parentLayer, time, offset) -> {
-            String uri = null;
-            // cheapest way to check whether "link" object exists and is a non-empty collection of GpxLink objects...
-            Collection<GpxLink> links = wpt.<GpxLink>getCollection(GpxConstants.META_LINKS);
-            if (links != null) {
-                for (GpxLink oneLink : links) {
-                    uri = oneLink.uri;
-                    break;
-                }
-            }
-
-            URL url = uriToUrl(uri, relativePath);
-            String urlStr = url == null ? "" : url.toString();
-            String symbolName = Optional.ofNullable(wpt.getString("symbol")).orElseGet(() -> wpt.getString(GpxConstants.PT_SYM));
-            // text marker is returned in every case, see #10208
-            final Marker marker = new Marker(wpt.getCoor(), wpt, symbolName, parentLayer, time, offset);
-            if (url == null) {
-                return Collections.singleton(marker);
-            } else if (urlStr.endsWith(".wav")) {
-                final AudioMarker audioMarker = new AudioMarker(wpt.getCoor(), wpt, url, parentLayer, time, offset);
-                Extensions exts = (Extensions) wpt.get(GpxConstants.META_EXTENSIONS);
-                if (exts != null && exts.containsKey("offset")) {
-                    try {
-                        audioMarker.syncOffset = Double.parseDouble(exts.get("sync-offset"));
-                    } catch (NumberFormatException nfe) {
-                        Main.warn(nfe);
-                    }
-                }
-                return Arrays.asList(marker, audioMarker);
-            } else if (urlStr.endsWith(".png") || urlStr.endsWith(".jpg") || urlStr.endsWith(".jpeg") || urlStr.endsWith(".gif")) {
-                return Arrays.asList(marker, new ImageMarker(wpt.getCoor(), url, parentLayer, time, offset));
-            } else {
-                return Arrays.asList(marker, new WebMarker(wpt.getCoor(), url, parentLayer, time, offset));
-            }
-        });
+        Marker.markerProducers.add(new DefaultMarkerProducers());
     }
 
@@ -237,19 +195,4 @@
     public static void prependMarkerProducer(MarkerProducers mp) {
         markerProducers.add(0, mp);
-    }
-
-    private static URL uriToUrl(String uri, File relativePath) {
-        URL url = null;
-        if (uri != null) {
-            try {
-                url = new URL(uri);
-            } catch (MalformedURLException e) {
-                // Try a relative file:// url, if the link is not in an URL-compatible form
-                if (relativePath != null) {
-                    url = Utils.fileToURL(new File(relativePath.getParentFile(), uri));
-                }
-            }
-        }
-        return url;
     }
 
