Index: /trunk/images/dialogs/relation/deletemembers.svg
===================================================================
--- /trunk/images/dialogs/relation/deletemembers.svg	(revision 1927)
+++ /trunk/images/dialogs/relation/deletemembers.svg	(revision 1927)
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="24"
+   height="24"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   version="1.0"
+   sodipodi:docname="deletemembers.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   inkscape:export-filename="C:\data\projekte\eclipse-3.4.1-ws\JOSM-new\images\dialogs\relation\selectmembers.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective10" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="8.0000004"
+     inkscape:cx="-21.020221"
+     inkscape:cy="17.529543"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     showborder="true"
+     inkscape:window-width="1254"
+     inkscape:window-height="834"
+     inkscape:window-x="169"
+     inkscape:window-y="85" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Ebene 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <rect
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#646464;stroke-width:0.80511302;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect2383"
+       width="7.1048818"
+       height="19.479883"
+       x="1.1038077"
+       y="2.2288091" />
+    <path
+       style="fill:none;fill-rule:evenodd"
+       d="M 1,4.25 L 7.75,4.1875"
+       id="path3157" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#646464;stroke-width:0.485;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 1.3710885,6.2979757 L 7.8164115,6.3407824"
+       id="path3165" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#646464;stroke-width:0.47918671;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 1.498302,11.033343 L 7.8221585,11.075895"
+       id="path3167" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#646464;stroke-width:0.47906977;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 1.5123801,16.611547 L 7.8158267,16.654215"
+       id="path3219" />
+    <rect
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#800000;stroke-width:1.384;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect2474"
+       width="5.2508626"
+       height="5.0939198"
+       x="17.149"
+       y="2.7272458" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#800000;stroke-width:1.384;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 19.962713,8.5021259 L 19.964937,15.297928"
+       id="path3272"
+       sodipodi:nodetypes="cc" />
+    <rect
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.38355958000000000;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect3282"
+       width="5.2508626"
+       height="5.0939198"
+       x="17.261948"
+       y="15.972962" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#800000;stroke-width:1.38399994;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 1.0595479,1.0240808 L 8.6631694,22.713319"
+       id="path3989"
+       sodipodi:nodetypes="cc" />
+  </g>
+</svg>
Index: /trunk/images/dialogs/relation/selectmembers.svg
===================================================================
--- /trunk/images/dialogs/relation/selectmembers.svg	(revision 1927)
+++ /trunk/images/dialogs/relation/selectmembers.svg	(revision 1927)
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="24"
+   height="24"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   version="1.0"
+   sodipodi:docname="selectmembers.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   inkscape:export-filename="C:\data\projekte\eclipse-3.4.1-ws\JOSM-new\images\dialogs\relation\selectmembers.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective10" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="11.313709"
+     inkscape:cx="-6.0202237"
+     inkscape:cy="1.3155282"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     showborder="true"
+     inkscape:window-width="1348"
+     inkscape:window-height="669"
+     inkscape:window-x="169"
+     inkscape:window-y="85" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Ebene 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <path
+       style="fill:#c8c8c8;fill-opacity:1;fill-rule:evenodd;stroke:#c8c8c8;stroke-width:1.13305676;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 14.040989,16.338285 L 14.040989,8.4092986 L 10.604195,12.36531 L 14.040989,16.338285 z"
+       id="path3276"
+       sodipodi:nodetypes="cccc" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#646464;stroke-width:0.80511302;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect2383"
+       width="7.1048818"
+       height="19.479883"
+       x="1.1038077"
+       y="2.2288091" />
+    <path
+       style="fill:none;fill-rule:evenodd"
+       d="M 1,4.25 L 7.75,4.1875"
+       id="path3157" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#646464;stroke-width:0.48521939;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 1.3710885,6.2979757 L 7.8164115,6.3407824"
+       id="path3165" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#646464;stroke-width:0.47918671;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 1.498302,11.033343 L 7.8221585,11.075895"
+       id="path3167" />
+    <rect
+       style="fill:#8faaff;fill-opacity:1;fill-rule:nonzero;stroke:#8faaff;stroke-width:0.36889639;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect3173"
+       width="6.0146875"
+       height="3.9307344"
+       x="1.6734251"
+       y="6.6937037" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#646464;stroke-width:0.47906977;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 1.5123801,16.611547 L 7.8158267,16.654215"
+       id="path3219" />
+    <path
+       style="fill:#000080;fill-rule:evenodd;stroke:#000080;stroke-width:1.16147232;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 13.22293,15.211705 L 13.22293,7.2486346 L 9.627052,11.221652 L 13.22293,15.211705 z"
+       id="path3171"
+       sodipodi:nodetypes="cccc" />
+    <rect
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#800000;stroke-width:1.384;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect2474"
+       width="5.2508626"
+       height="5.0939198"
+       x="17.149"
+       y="2.7272458" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#800000;stroke-width:1.384;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 19.962713,8.5021259 L 19.964937,15.297928"
+       id="path3272"
+       sodipodi:nodetypes="cc" />
+    <rect
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.38355958000000000;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect3282"
+       width="5.2508626"
+       height="5.0939198"
+       x="17.261948"
+       y="15.972962" />
+  </g>
+</svg>
Index: /trunk/images/dialogs/relation/selectprimitives.svg
===================================================================
--- /trunk/images/dialogs/relation/selectprimitives.svg	(revision 1927)
+++ /trunk/images/dialogs/relation/selectprimitives.svg	(revision 1927)
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="24"
+   height="24"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   version="1.0"
+   sodipodi:docname="selectprimitives.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   inkscape:export-filename="C:\data\projekte\eclipse-3.4.1-ws\JOSM-new\images\dialogs\relation\selectmembers.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective10" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="11.313709"
+     inkscape:cx="9.8758618"
+     inkscape:cy="9.8361649"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     showborder="true"
+     inkscape:window-width="1348"
+     inkscape:window-height="669"
+     inkscape:window-x="169"
+     inkscape:window-y="85" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Ebene 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <path
+       style="fill:#c8c8c8;fill-opacity:1;fill-rule:evenodd;stroke:#c8c8c8;stroke-width:1.13305676;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 10.427419,7.9673574 L 10.427419,15.896345 L 13.864213,11.940334 L 10.427419,7.9673574 z"
+       id="path3276"
+       sodipodi:nodetypes="cccc" />
+    <rect
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#646464;stroke-width:0.80511302;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect2383"
+       width="7.1048818"
+       height="19.479883"
+       x="1.1038077"
+       y="2.2288091" />
+    <path
+       style="fill:none;fill-rule:evenodd"
+       d="M 1,4.25 L 7.75,4.1875"
+       id="path3157" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#646464;stroke-width:0.48521939;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 1.3710885,6.2979757 L 7.8164115,6.3407824"
+       id="path3165" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#646464;stroke-width:0.47918671;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 1.498302,11.033343 L 7.8221585,11.075895"
+       id="path3167" />
+    <rect
+       style="fill:#8faaff;fill-opacity:1;fill-rule:nonzero;stroke:#8faaff;stroke-width:0.36889639;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect3173"
+       width="6.0146875"
+       height="3.9307344"
+       x="1.6734251"
+       y="6.6937037" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#646464;stroke-width:0.47906977;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       d="M 1.5123801,16.611547 L 7.8158267,16.654215"
+       id="path3219" />
+    <path
+       style="fill:#000080;fill-rule:evenodd;stroke:#000080;stroke-width:1.16147232;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 11.394813,6.8066933 L 11.394813,14.769765 L 14.99069,10.796748 L 11.394813,6.8066933 z"
+       id="path3171"
+       sodipodi:nodetypes="cccc" />
+    <rect
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#800000;stroke-width:1.384;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect2474"
+       width="5.2508626"
+       height="5.0939198"
+       x="17.149"
+       y="2.7272458" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#800000;stroke-width:1.384;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 19.962713,8.5021259 L 19.964937,15.297928"
+       id="path3272"
+       sodipodi:nodetypes="cc" />
+    <rect
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.38355958000000000;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect3282"
+       width="5.2508626"
+       height="5.0939198"
+       x="17.261948"
+       y="15.972962" />
+  </g>
+</svg>
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 1926)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 1927)
@@ -334,7 +334,4 @@
         editor.setAutoCompletionList(acList);
 
-        SelectionSynchronizer synchronizer = new SelectionSynchronizer();
-        memberTable.getSelectionModel().addListSelectionListener(synchronizer);
-        DataSet.selListeners.add(synchronizer);
         memberTable.addMouseListener(new MemberTableDblClickAdapter());
         memberTableModel.addMemberModelListener(memberTable);
@@ -489,4 +486,7 @@
         gc.weightx = 0.0;
         gc.weighty = 0.0;
+
+        // -----
+        gc.gridy = 0;
         MoveUpAction moveUpAction = new MoveUpAction();
         memberTableModel.getSelectionModel().addListSelectionListener(moveUpAction);
@@ -511,6 +511,13 @@
         pnl.add(new JButton(removeSelectedAction), gc);
 
+
         // ------
         gc.gridy = 4;
+        SelectPrimitivesForSelectedMembersAction selectAction = new SelectPrimitivesForSelectedMembersAction();
+        memberTable.getSelectionModel().addListSelectionListener(selectAction);
+        pnl.add(new JButton(selectAction), gc);
+
+        // ------
+        gc.gridy = 5;
         SortAction sortAction = new SortAction();
         pnl.add(new JButton(sortAction), gc);
@@ -518,5 +525,5 @@
         // ------
         // just grab the remaining space
-        gc.gridy = 5;
+        gc.gridy = 6;
         gc.weighty = 1.0;
         gc.fill = GridBagConstraints.BOTH;
@@ -550,4 +557,11 @@
         // -----
         gc.gridy = 1;
+        SelectedMembersForSelectionAction selectMembersForSelectionAction = new SelectedMembersForSelectionAction();
+        selectionTableModel.addTableModelListener(selectMembersForSelectionAction);
+        memberTableModel.addTableModelListener(selectMembersForSelectionAction);
+        pnl.add(new JButton(selectMembersForSelectionAction), gc);
+
+        // -----
+        gc.gridy = 2;
         RemoveSelectedAction removeSelectedAction = new RemoveSelectedAction();
         selectionTableModel.addTableModelListener(removeSelectedAction);
@@ -556,5 +570,5 @@
         // ------
         // just grab the remaining space
-        gc.gridy = 2;
+        gc.gridy = 3;
         gc.weighty = 1.0;
         gc.fill = GridBagConstraints.BOTH;
@@ -562,5 +576,5 @@
 
         // -----
-        gc.gridy = 3;
+        gc.gridy = 4;
         gc.weighty = 0.0;
         AddSelectedAtStartAction addSelectionAction = new AddSelectedAtStartAction();
@@ -569,5 +583,5 @@
 
         // -----
-        gc.gridy = 4;
+        gc.gridy = 5;
         AddSelectedBeforeSelection addSelectedBeforeSelectionAction = new AddSelectedBeforeSelection();
         selectionTableModel.addTableModelListener(addSelectedBeforeSelectionAction);
@@ -576,5 +590,5 @@
 
         // -----
-        gc.gridy = 5;
+        gc.gridy = 6;
         AddSelectedAfterSelection addSelectedAfterSelectionAction = new AddSelectedAfterSelection();
         selectionTableModel.addTableModelListener(addSelectedAfterSelectionAction);
@@ -887,5 +901,5 @@
         public RemoveSelectedAction() {
             putValue(SHORT_DESCRIPTION, tr("Remove all members referring to one of the selected primitives"));
-            putValue(SMALL_ICON, ImageProvider.get("dialogs", "removeselected"));
+            putValue(SMALL_ICON, ImageProvider.get("dialogs/relation", "deletemembers"));
             // putValue(NAME, tr("Remove Selected"));
             Shortcut.registerShortcut("relationeditor:removeselected", tr("Relation Editor: Remove Selected"),
@@ -912,4 +926,64 @@
 
         public void tableChanged(TableModelEvent e) {
+            updateEnabledState();
+        }
+    }
+
+    /**
+     * Selects  members in the relation editor which refer to primitives in the current
+     * selection of the context layer.
+     * 
+     */
+    class SelectedMembersForSelectionAction extends AbstractAction implements TableModelListener {
+        public SelectedMembersForSelectionAction() {
+            putValue(SHORT_DESCRIPTION, tr("Select relation members which refer to primitives in the current selection"));
+            putValue(SMALL_ICON, ImageProvider.get("dialogs/relation", "selectmembers"));
+            updateEnabledState();
+        }
+
+        protected void updateEnabledState() {
+            boolean enabled = selectionTableModel.getRowCount() > 0
+            &&  !memberTableModel.getChildPrimitives(getLayer().data.getSelected()).isEmpty();
+
+            if (enabled) {
+                putValue(SHORT_DESCRIPTION, tr("Select relation members which refer to {0} primitives in the current selection",memberTableModel.getChildPrimitives(getLayer().data.getSelected()).size()));
+            } else {
+                putValue(SHORT_DESCRIPTION, tr("Select relation members which refer to primitives in the current selection"));
+            }
+            setEnabled(enabled);
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            memberTableModel.selectMembersReferringTo(getLayer().data.getSelected());
+        }
+
+        public void tableChanged(TableModelEvent e) {
+            updateEnabledState();
+
+        }
+    }
+
+    /**
+     * Selects primitives in the layer this editor belongs to. The selected primitives are
+     * equal to the set of primitives the currently selected relation members refer to.
+     * 
+     */
+    class SelectPrimitivesForSelectedMembersAction extends AbstractAction implements ListSelectionListener {
+        public SelectPrimitivesForSelectedMembersAction() {
+            putValue(SHORT_DESCRIPTION, tr("Select primitives for selected relation members"));
+            putValue(SMALL_ICON, ImageProvider.get("dialogs/relation", "selectprimitives"));
+            updateEnabledState();
+        }
+
+        protected void updateEnabledState() {
+            setEnabled(memberTable.getSelectedRowCount() > 0);
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            getLayer().data.setSelected(memberTableModel.getSelectedChildPrimitives());
+            DataSet.fireSelectionChanged(getLayer().data.getSelected());
+        }
+
+        public void valueChanged(ListSelectionEvent e) {
             updateEnabledState();
         }
@@ -1444,36 +1518,4 @@
             if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 2) {
                 new EditAction().run();
-            }
-        }
-    }
-
-    /**
-     * Updates the selection in the current data set with the selected referers in
-     * in the member table.
-     */
-    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 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()) {
-                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);
             }
         }
Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 1926)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java	(revision 1927)
@@ -376,5 +376,5 @@
      * @return the set of selected referers
      */
-    public Set<OsmPrimitive> getSelectedReferers() {
+    public Set<OsmPrimitive> getSelectedChildPrimitives() {
         HashSet<OsmPrimitive> ret = new HashSet<OsmPrimitive>();
         for (RelationMember m: getSelectedMembers()) {
@@ -385,4 +385,21 @@
 
     /**
+     * Replies the set of selected referers. Never null, but may be empty.
+     * 
+     * @return the set of selected referers
+     */
+    public Set<OsmPrimitive> getChildPrimitives(Collection<? extends OsmPrimitive> referenceSet) {
+        HashSet<OsmPrimitive> ret = new HashSet<OsmPrimitive>();
+        if (referenceSet == null) return null;
+        for (RelationMember m: members) {
+            if (referenceSet.contains(m.member)) {
+                ret.add(m.member);
+            }
+        }
+        return ret;
+    }
+
+
+    /**
      * Replies true, if the selected {@see OsmPrimitive}s in the layer belonging
      * to this model are in sync with the selected referers in this model.
@@ -391,5 +408,5 @@
      */
     public boolean selectionsAreInSync() {
-        HashSet<OsmPrimitive> s1 = new HashSet<OsmPrimitive>(getSelectedReferers());
+        HashSet<OsmPrimitive> s1 = new HashSet<OsmPrimitive>(getSelectedChildPrimitives());
         if (s1.size() != layer.data.getSelected().size()) return false;
         s1.removeAll(layer.data.getSelected());
