Index: src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 19277)
+++ src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(working copy)
@@ -5,7 +5,6 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.BorderLayout;
-import java.awt.Component;
 import java.awt.Dimension;
 import java.awt.FlowLayout;
 import java.awt.GridBagConstraints;
@@ -161,9 +160,6 @@
      */
     private final ArrayList<FlavorListener> clipboardListeners = new ArrayList<>();
 
-    private Component selectedTabPane;
-    private final JTabbedPane tabbedPane;
-
     /**
      * Creates a new relation editor for the given relation. The relation will be saved if the user
      * selects "ok" in the editor.
@@ -235,12 +231,12 @@
         pnl.setBorder(BorderFactory.createRaisedBevelBorder());
 
         getContentPane().setLayout(new BorderLayout());
+        final JTabbedPane tabbedPane;
         tabbedPane = new JTabbedPane();
         tabbedPane.add(tr("Tags and Members"), pnl);
         referrerBrowser = new ReferringRelationsBrowser(getLayer(), referrerModel);
         tabbedPane.add(tr("Parent Relations"), referrerBrowser);
         tabbedPane.add(tr("Child Relations"), new ChildRelationBrowser(getLayer(), relation));
-        selectedTabPane = tabbedPane.getSelectedComponent();
         tabbedPane.addChangeListener(e -> {
             JTabbedPane sourceTabbedPane = (JTabbedPane) e.getSource();
             int index = sourceTabbedPane.getSelectedIndex();
@@ -248,14 +244,6 @@
             if (title.equals(tr("Parent Relations"))) {
                 referrerBrowser.init();
             }
-            // see #20228
-            boolean selIsTagsAndMembers = sourceTabbedPane.getSelectedComponent() == pnl;
-            if (selectedTabPane == pnl && !selIsTagsAndMembers) {
-                unregisterMain();
-            } else if (selectedTabPane != pnl && selIsTagsAndMembers) {
-                registerMain();
-            }
-            selectedTabPane = sourceTabbedPane.getSelectedComponent();
         });
 
         actionAccess = new RelationEditorActionAccess();
@@ -330,18 +318,6 @@
         UndoRedoHandler.getInstance().addCommandQueueListener(this);
     }
 
-    private void registerMain() {
-        selectionTableModel.register();
-        memberTableModel.register();
-        memberTable.registerListeners();
-    }
-
-    private void unregisterMain() {
-        selectionTableModel.unregister();
-        memberTableModel.unregister();
-        memberTable.unregisterListeners();
-    }
-
     @Override
     public void reloadDataFromRelation() {
         setRelation(getRelation());
@@ -788,9 +764,10 @@
             // make sure all registered listeners are unregistered
             //
             memberTable.stopHighlighting();
-            if (tabbedPane != null && tr("Tags and Members").equals(tabbedPane.getTitleAt(tabbedPane.getSelectedIndex()))) {
-                unregisterMain();
-            }
+            selectionTableModel.unregister();
+            memberTableModel.unregister();
+            memberTable.unregisterListeners();
+
             if (windowMenuItem != null) {
                 MainApplication.getMenu().windowMenu.remove(windowMenuItem);
                 windowMenuItem = null;
@@ -897,7 +874,6 @@
         UndoRedoHandler.getInstance().removeCommandQueueListener(this);
         super.dispose(); // call before setting relation to null, see #20304
         setRelation(null);
-        selectedTabPane = null;
     }
 
     /**
Index: src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java
===================================================================
--- src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 19277)
+++ src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(working copy)
@@ -132,8 +132,10 @@
     public void dataChanged(DataChangedEvent event) {
         // just trigger a repaint - the display name of the relation members may have changed
         Collection<RelationMember> sel = getSelectedMembers();
-        GuiHelper.runInEDT(this::fireTableDataChanged);
-        setSelectedMembers(sel);
+        GuiHelper.runInEDT(() -> {
+            fireTableDataChanged();
+            setSelectedMembers(sel);
+        });
     }
 
     @Override
