Index: src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java
===================================================================
--- src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java	(revision 17023)
+++ src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java	(working copy)
@@ -31,6 +31,7 @@
 import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.gui.layer.GpxLayer;
 import org.openstreetmap.josm.gui.preferences.display.GPXSettingsPanel;
+import org.openstreetmap.josm.spi.preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.template_engine.ParseError;
@@ -147,6 +148,7 @@
     private String cachedDefaultTemplate;
 
     private CachedLatLon coor;
+    private PreferenceChangedListener listener = l -> updateText();
 
     private boolean erroneous;
 
@@ -174,7 +176,7 @@
         this.dataProvider = dataProvider;
         this.text = text;
 
-        Preferences.main().addKeyPreferenceChangeListener("draw.rawgps." + getTextTemplateKey(), l -> updateText());
+        Preferences.main().addKeyPreferenceChangeListener("draw.rawgps." + getTextTemplateKey(), listener);
     }
 
     /**
@@ -432,4 +434,12 @@
             redSymbol = null;
         }
     }
+
+    /**
+     * Removes the preference change listener.
+     * @since xxx
+     */
+    public void removeListener() {
+        Preferences.main().removeKeyPreferenceChangeListener("draw.rawgps." + getTextTemplateKey(), listener);
+    }
 }
Index: src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java
===================================================================
--- src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java	(revision 17023)
+++ src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java	(working copy)
@@ -171,6 +171,7 @@
         syncAudioMarker = null;
         currentMarker = null;
         fromLayer = null;
+        data.forEach(Marker::removeListener);
         data.clear();
         super.destroy();
     }
