Index: trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 1885)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 1886)
@@ -9,4 +9,6 @@
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
+import java.util.Collection;
+import java.util.HashSet;
 
 import javax.swing.AbstractAction;
@@ -23,4 +25,5 @@
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
 import org.openstreetmap.josm.data.osm.Relation;
+import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.gui.OsmPrimitivRenderer;
 import org.openstreetmap.josm.gui.PrimitiveNameFormatter;
@@ -35,4 +38,6 @@
 import org.openstreetmap.josm.tools.Shortcut;
 
+import com.sun.corba.se.spi.legacy.connection.GetEndPointInfoAgainException;
+
 /**
  * A dialog showing all known relations, with buttons to add, edit, and
@@ -245,4 +250,14 @@
             setEnabled(false);
         }
+        protected Collection<RelationMember> getMembersForCurrentSelection(Relation r) {
+            Collection<RelationMember> members = new HashSet<RelationMember>();
+            Collection<OsmPrimitive> selection = Main.map.mapView.getEditLayer().data.getSelected();
+            for (RelationMember member: r.members) {
+                if (selection.contains(member.member)) {
+                    members.add(member);
+                }
+            }
+            return members;
+        }
 
         public void run() {
@@ -251,5 +266,5 @@
             if (toEdit == null)
                 return;
-            RelationEditor.getEditor(Main.map.mapView.getEditLayer(),toEdit, null).setVisible(true);
+            RelationEditor.getEditor(Main.map.mapView.getEditLayer(),toEdit, getMembersForCurrentSelection(toEdit)).setVisible(true);
         }
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 1885)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 1886)
@@ -24,4 +24,5 @@
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
@@ -83,10 +84,4 @@
  * This dialog is for editing relations.
  * 
- * In the basic form, it provides two tables, one with the relation tags and one with the relation
- * members. (Relation tags can be edited through the normal properties dialog as well, if you manage
- * to get a relation selected!)
- * 
- * @author Frederik Ramm <frederik@remote.org>
- * 
  */
 public class GenericRelationEditor extends RelationEditor {
@@ -146,5 +141,4 @@
             this.memberTableModel.populate(null);
         }
-        memberTableModel.setSelectedMembers(selectedMembers);
         tagEditorModel.ensureOneTag();
 
@@ -196,4 +190,5 @@
         );
 
+        memberTableModel.setSelectedMembers(selectedMembers);
     }
 
@@ -331,4 +326,5 @@
         memberTable.getSelectionModel().addListSelectionListener(new SelectionSynchronizer());
         memberTable.addMouseListener(new MemberTableDblClickAdapter());
+        memberTableModel.addMemberModelListener(memberTable);
 
         final JScrollPane scrollPane = new JScrollPane(memberTable);
@@ -1389,4 +1385,15 @@
         }
 
+        protected Collection<RelationMember> getMembersForCurrentSelection(Relation r) {
+            Collection<RelationMember> members = new HashSet<RelationMember>();
+            Collection<OsmPrimitive> selection = getLayer().data.getSelected();
+            for (RelationMember member: r.members) {
+                if (selection.contains(member.member)) {
+                    members.add(member);
+                }
+            }
+            return members;
+        }
+
         public void run() {
             int idx = memberTable.getSelectedRow();
@@ -1399,5 +1406,6 @@
             if (r.incomplete)
                 return;
-            RelationEditor editor = RelationEditor.getEditor(getLayer(), r, null);
+
+            RelationEditor editor = RelationEditor.getEditor(getLayer(), r, getMembersForCurrentSelection(r));
             editor.setVisible(true);
         }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 1885)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 1886)
@@ -374,7 +374,10 @@
         ArrayList<Integer> selectedIndices = new ArrayList<Integer>();
         for (RelationMember member : selectedMembers) {
-            int idx = members.indexOf(member);
-            if (idx >= 0 && !selectedIndices.contains(idx)) {
-                selectedIndices.add(idx);
+            for (int idx = 0; idx < members.size(); idx ++) {
+                if (members.get(idx).equals(member)) {
+                    if (!selectedIndices.contains(idx)) {
+                        selectedIndices.add(idx);
+                    }
+                }
             }
         }
@@ -487,8 +490,7 @@
          */
 
-        if (map.isEmpty()) {
+        if (map.isEmpty())
             // empty relation or incomplete members
             return;
-        }
         segments = new Vector<LinkedList<Integer>>();
 
