Index: src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 14508)
+++ src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(working copy)
@@ -567,6 +567,8 @@
     public void selectionChanged(SelectionChangeEvent event) {
         if (!isVisible())
             return;
+        if (event != null && event.getSelection().isEmpty())
+            editHelper.resetSel();
         if (tagTable == null)
             return; // selection changed may be received in base class constructor before init
         if (tagTable.getCellEditor() != null) {
@@ -707,6 +709,7 @@
     public void activeOrEditLayerChanged(ActiveLayerChangeEvent e) {
         if (e.getSource().getEditLayer() == null) {
             editHelper.saveTagsIfNeeded();
+            editHelper.resetSel();
         }
         // it is time to save history of tags
         updateSelection();
Index: src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java	(revision 14508)
+++ src/org/openstreetmap/josm/gui/dialogs/properties/TagEditHelper.java	(working copy)
@@ -367,6 +367,13 @@
     }
 
     /**
+     * Forget recently selected primitives to allow GC.
+     */
+    public void resetSel() {
+        sel = null;
+    }
+
+    /**
      * Update cache of recent tags used for displaying tags.
      */
     private void cacheRecentTags() {
