Index: /trunk/src/org/openstreetmap/josm/data/osm/DataSet.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 14555)
+++ /trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 14556)
@@ -1036,4 +1036,6 @@
     @Override
     public void clear() {
+        //TODO: Why can't we clear a dataset that is locked?
+        //TODO: Report listeners that are still active (should be none)
         checkModifiable();
         beginUpdate();
Index: /trunk/src/org/openstreetmap/josm/gui/layer/LayerManager.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/LayerManager.java	(revision 14555)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/LayerManager.java	(revision 14556)
@@ -12,4 +12,5 @@
 import java.util.function.Consumer;
 
+import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.util.GuiHelper;
@@ -478,4 +479,9 @@
             }
         }
+        if (layer instanceof OsmDataLayer) {
+            DataSet data = ((OsmDataLayer)layer).data;
+            if (data != null && !data.isLocked())
+                data.clear();
+        }
         return e.scheduleForRemoval;
     }
Index: /trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 14555)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java	(revision 14556)
@@ -359,4 +359,5 @@
      */
     public final DataSet data;
+    private DataSetListenerAdapter dataSetListenerAdapter;
 
     /**
@@ -412,6 +413,7 @@
         this.data = data;
         this.data.setName(name);
+        this.dataSetListenerAdapter = new DataSetListenerAdapter(this);
         this.setAssociatedFile(associatedFile);
-        data.addDataSetListener(new DataSetListenerAdapter(this));
+        data.addDataSetListener(dataSetListenerAdapter);
         data.addDataSetListener(MultipolygonCache.getInstance());
         data.addHighlightUpdateListener(this);
@@ -1059,8 +1061,8 @@
         data.removeSelectionListener(this);
         data.removeHighlightUpdateListener(this);
+        data.removeDataSetListener(dataSetListenerAdapter);
+        data.removeDataSetListener(MultipolygonCache.getInstance());
         removeClipboardDataFor(this);
-        if (!data.isLocked()) {
-            data.clear();
-        }
+        recentRelations.clear();
     }
 
