Index: src/org/openstreetmap/josm/plugins/utilsplugin2/actions/TagBufferAction.java
===================================================================
--- src/org/openstreetmap/josm/plugins/utilsplugin2/actions/TagBufferAction.java	(revision 34765)
+++ src/org/openstreetmap/josm/plugins/utilsplugin2/actions/TagBufferAction.java	(working copy)
@@ -20,6 +20,11 @@
 import org.openstreetmap.josm.command.SequenceCommand;
 import org.openstreetmap.josm.data.UndoRedoHandler;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
+import org.openstreetmap.josm.data.osm.event.AbstractDatasetChangedEvent;
+import org.openstreetmap.josm.data.osm.event.DataSetListenerAdapter;
+import org.openstreetmap.josm.data.osm.event.DatasetEventManager;
+import org.openstreetmap.josm.data.osm.event.DatasetEventManager.FireMode;
+import org.openstreetmap.josm.data.osm.event.TagsChangedEvent;
 import org.openstreetmap.josm.tools.Shortcut;
 import org.openstreetmap.josm.tools.SubclassFilteredCollection;
 
@@ -28,12 +33,13 @@
  *
  * @author Zverik
  */
-public class TagBufferAction extends JosmAction {
+public class TagBufferAction extends JosmAction implements DataSetListenerAdapter.Listener {
     private static final String TITLE = tr("Copy tags from previous selection");
     private static final Predicate<OsmPrimitive> IS_TAGGED_PREDICATE = object -> object.isTagged();
     private Map<String, String> tags = new HashMap<>();
     private Map<String, String> currentTags = new HashMap<>();
     private Set<OsmPrimitive> selectionBuf = new HashSet<>();
+    private final DataSetListenerAdapter dataSetListenerAdapter = new DataSetListenerAdapter(this);
 
     /**
      * Constructs a new {@code TagBufferAction}.
@@ -45,6 +51,7 @@
                 true, false);
         // The fields are not initialized while the super constructor is running, so we have to call this afterwards:
         installAdapters();
+        DatasetEventManager.getInstance().addDatasetListener(dataSetListenerAdapter, FireMode.IMMEDIATELY);
     }
 
     @Override
@@ -77,8 +84,9 @@
             setEnabled(false);
             if (selectionBuf != null)
                 selectionBuf.clear();
-        } else
+        } else {
             updateEnabledState(getLayerManager().getEditDataSet().getSelected());
+        }
     }
 
     @Override
@@ -137,4 +145,15 @@
             }
         }
     }
+
+	@Override
+	public void processDatasetEvent(AbstractDatasetChangedEvent event) {
+		if (event instanceof TagsChangedEvent) {
+			TagsChangedEvent e = (TagsChangedEvent) event;
+			if (!e.getPrimitive().isSelected() || e.getPrimitive().getKeys().isEmpty())
+				return;
+			currentTags.clear();
+			currentTags.putAll(e.getPrimitive().getKeys());
+		}
+	}
 }
