Index: trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java	(revision 10958)
+++ trunk/src/org/openstreetmap/josm/gui/layer/GpxLayer.java	(revision 10959)
@@ -388,4 +388,5 @@
     @Override
     public void destroy() {
+        super.destroy();
         SystemOfMeasurement.removeSoMChangeListener(drawHelper);
     }
Index: trunk/src/org/openstreetmap/josm/gui/layer/Layer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/Layer.java	(revision 10958)
+++ trunk/src/org/openstreetmap/josm/gui/layer/Layer.java	(revision 10959)
@@ -221,5 +221,5 @@
         AbstractProperty<Color> colorProperty = getColorProperty();
         if (colorProperty != null) {
-            colorProperty.addWeakListener(invalidateListener);
+            colorProperty.addListener(invalidateListener);
         }
     }
@@ -285,4 +285,5 @@
     public void destroy() {
         // Override in subclasses if needed
+        removeColorPropertyListener();
     }
 
@@ -651,3 +652,8 @@
         return v.getBounds();
     }
+
+    @Override
+    public String toString() {
+        return getClass().getSimpleName() + " [name=" + name + ", associatedFile=" + associatedFile + ']';
+    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 10958)
+++ trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 10959)
@@ -934,4 +934,5 @@
     @Override
     public void destroy() {
+        super.destroy();
         DataSet.removeSelectionListener(this);
     }
