Index: trunk/src/org/openstreetmap/josm/data/preferences/AbstractProperty.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/preferences/AbstractProperty.java	(revision 12195)
+++ trunk/src/org/openstreetmap/josm/data/preferences/AbstractProperty.java	(revision 12196)
@@ -7,4 +7,5 @@
 import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
 import org.openstreetmap.josm.tools.ListenableWeakReference;
+import org.openstreetmap.josm.tools.bugreport.BugReport;
 
 /**
@@ -238,5 +239,9 @@
      */
     public void addListener(ValueChangeListener<? super T> listener) {
-        addListenerImpl(new PreferenceChangedListenerAdapter(listener));
+        try {
+            addListenerImpl(new PreferenceChangedListenerAdapter(listener));
+        } catch (RuntimeException e) {
+            throw BugReport.intercept(e).put("listener", listener).put("preference", key);
+        }
     }
 
@@ -251,7 +256,11 @@
      */
     public void addWeakListener(ValueChangeListener<? super T> listener) {
-        ValueChangeListener<T> weakListener = new WeakPreferenceAdapter(listener);
-        PreferenceChangedListenerAdapter adapter = new PreferenceChangedListenerAdapter(weakListener);
-        addListenerImpl(adapter);
+        try {
+            ValueChangeListener<T> weakListener = new WeakPreferenceAdapter(listener);
+            PreferenceChangedListenerAdapter adapter = new PreferenceChangedListenerAdapter(weakListener);
+            addListenerImpl(adapter);
+        } catch (RuntimeException e) {
+            throw BugReport.intercept(e).put("listener", listener).put("preference", key);
+        }
     }
 
@@ -281,5 +290,9 @@
      */
     public void removeListener(ValueChangeListener<? super T> listener) {
-        removeListenerImpl(new PreferenceChangedListenerAdapter(listener));
+        try {
+            removeListenerImpl(new PreferenceChangedListenerAdapter(listener));
+        } catch (RuntimeException e) {
+            throw BugReport.intercept(e).put("listener", listener).put("preference", key);
+        }
     }
 
Index: trunk/src/org/openstreetmap/josm/data/preferences/AbstractToStringProperty.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/preferences/AbstractToStringProperty.java	(revision 12195)
+++ trunk/src/org/openstreetmap/josm/data/preferences/AbstractToStringProperty.java	(revision 12196)
@@ -57,4 +57,10 @@
             super.addListenerImpl(adapter);
             parent.addListenerImpl(adapter);
+        }
+
+        @Override
+        protected void removeListenerImpl(PreferenceChangedListener adapter) {
+            super.removeListenerImpl(adapter);
+            parent.removeListenerImpl(adapter);
         }
 
