Index: trunk/src/org/openstreetmap/josm/gui/layer/MainLayerManager.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/MainLayerManager.java	(revision 18389)
+++ trunk/src/org/openstreetmap/josm/gui/layer/MainLayerManager.java	(revision 18390)
@@ -174,8 +174,19 @@
      */
     public synchronized void addActiveLayerChangeListener(ActiveLayerChangeListener listener) {
-        if (activeLayerChangeListeners.contains(listener)) {
-            throw new IllegalArgumentException("Attempted to add listener that was already in list: " + listener);
+        for (int i = 0; i< activeLayerChangeListeners.size(); i++) {
+            if (activeLayerChangeListeners.get(i) == listener) {
+                Logging.error("");
+                Logging.error("Attempted to add listener that was already in list: " + listener);
+                showStackTrace(Thread.currentThread().getStackTrace());
+                return;
+            }
         }
         activeLayerChangeListeners.add(listener);
+    }
+
+    private void showStackTrace(StackTraceElement[] stackTrace) {
+        for (StackTraceElement st : stackTrace) {
+            Logging.error("\tat " + st);
+        }
     }
 
@@ -195,8 +206,18 @@
      */
     public synchronized void removeActiveLayerChangeListener(ActiveLayerChangeListener listener) {
-        if (!activeLayerChangeListeners.contains(listener)) {
-            throw new IllegalArgumentException("Attempted to remove listener that was not in list: " + listener);
-        }
-        activeLayerChangeListeners.remove(listener);
+        int old = -1;
+        for (int i = 0; i < activeLayerChangeListeners.size(); i++) {
+            if (activeLayerChangeListeners.get(i) == listener) {
+                old = i;
+                break;
+            }
+        }
+        if (old < 0) {
+            Logging.error("");
+            Logging.error("Attempted to remove listener that was not in list: " + listener);
+            showStackTrace(Thread.currentThread().getStackTrace());
+            return;
+        }
+        activeLayerChangeListeners.remove(old);
     }
 
@@ -207,7 +228,5 @@
      */
     public synchronized void addLayerAvailabilityListener(LayerAvailabilityListener listener) {
-        if (!layerAvailabilityListeners.add(listener)) {
-            throw new IllegalArgumentException("Attempted to add listener that was already in list: " + listener);
-        }
+        layerAvailabilityListeners.add(listener);
     }
 
