Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 1921)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 1922)
@@ -1457,10 +1457,14 @@
     class SelectionSynchronizer implements ListSelectionListener, SelectionChangedListener{
         public void valueChanged(ListSelectionEvent e) {
+            // as long as the model is computing the final selection it emits selection
+            // change events with getValueIsAdjusting() true. Ignore these events, only
+            // handle the final selection update. Otherwise, infinite loops of property
+            // change events occur.
+            //
             if (e.getValueIsAdjusting())
                 return;
 
-            // Avoid endless loops. memberTableModel is registered as SelectionChangeListener
-            // too. Only update the selection if it is not in sync with what is already
-            // selected.
+            // Avoid infinite loop.  Only update the selection if it is not in sync with what
+            // is already selected. Avoids infinite loops of property change events.
             //
             if (!memberTableModel.selectionsAreInSync()) {
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 1921)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 1922)
@@ -394,5 +394,5 @@
     public boolean selectionsAreInSync() {
         HashSet<OsmPrimitive> s1 = new HashSet<OsmPrimitive>(getSelectedReferers());
-        if (s1.size() > layer.data.getSelected().size()) return false;
+        if (s1.size() != layer.data.getSelected().size()) return false;
         s1.removeAll(layer.data.getSelected());
         return s1.isEmpty();
@@ -489,5 +489,5 @@
      */
     public void selectMembersReferringTo(Collection<? extends OsmPrimitive> primitives) {
-        if (primitives == null || primitives.isEmpty()) return;
+        if (primitives == null) return;
         getSelectionModel().setValueIsAdjusting(true);
         getSelectionModel().clearSelection();
