Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 1919)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 1920)
@@ -32,4 +32,5 @@
 import javax.swing.AbstractAction;
 import javax.swing.BorderFactory;
+import javax.swing.DefaultListSelectionModel;
 import javax.swing.JButton;
 import javax.swing.JComponent;
@@ -57,4 +58,5 @@
 import org.openstreetmap.josm.command.ChangeCommand;
 import org.openstreetmap.josm.command.ConflictAddCommand;
+import org.openstreetmap.josm.data.SelectionChangedListener;
 import org.openstreetmap.josm.data.conflict.Conflict;
 import org.openstreetmap.josm.data.osm.DataSet;
@@ -200,5 +202,4 @@
 
         memberTableModel.setSelectedMembers(selectedMembers);
-        DataSet.selListeners.add(memberTableModel);
     }
 
@@ -336,5 +337,7 @@
         editor.setAutoCompletionList(acList);
 
-        memberTable.getSelectionModel().addListSelectionListener(new SelectionSynchronizer());
+        SelectionSynchronizer synchronizer = new SelectionSynchronizer();
+        memberTable.getSelectionModel().addListSelectionListener(synchronizer);
+        DataSet.selListeners.add(synchronizer);
         memberTable.addMouseListener(new MemberTableDblClickAdapter());
         memberTableModel.addMemberModelListener(memberTable);
@@ -1451,7 +1454,6 @@
      * Updates the selection in the current data set with the selected referers in
      * in the member table.
-     *
      */
-    class SelectionSynchronizer implements ListSelectionListener {
+    class SelectionSynchronizer implements ListSelectionListener, SelectionChangedListener{
         public void valueChanged(ListSelectionEvent e) {
             if (e.getValueIsAdjusting())
@@ -1464,4 +1466,13 @@
             if (!memberTableModel.selectionsAreInSync()) {
                 getLayer().data.setSelected(memberTableModel.getSelectedReferers());
+            }
+        }
+
+        public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
+            // ignore selection change events if they happen for a dataset in another
+            // layer
+            if (!memberTableModel.isActiveLayer()) return;
+            if (!memberTableModel.selectionsAreInSync()) {
+                memberTableModel.selectMembersReferringTo(newSelection);
             }
         }
@@ -1550,5 +1561,3 @@
         }
     }
-
-
 }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 1919)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 1920)
@@ -27,5 +27,5 @@
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 
-public class MemberTableModel extends AbstractTableModel implements SelectionChangedListener{
+public class MemberTableModel extends AbstractTableModel {
 
     private ArrayList<RelationMember> members;
@@ -514,15 +514,4 @@
         if (Main.map == null || Main.map.mapView == null) return false;
         return Main.map.mapView.getActiveLayer() == layer;
-    }
-
-
-    /* ------------------------------------------------------------------------- */
-    /* Interface SelectionChangedListener                                        */
-    /* ------------------------------------------------------------------------- */
-    public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
-        // ignore selection change events if they happen for a dataset in another
-        // layer
-        if (!isActiveLayer()) return;
-        selectMembersReferringTo(newSelection);
     }
 
