Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 4157)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 4158)
@@ -139,5 +139,5 @@
         // the select action
         //
-        SelectAction selectAction = new SelectAction();
+        SelectAction selectAction = new SelectAction(false);
         displaylist.addListSelectionListener(selectAction);
         tp.add(new SideButton(selectAction, false));
@@ -430,8 +430,12 @@
      */
     class SelectAction extends AbstractAction implements ListSelectionListener{
-        public SelectAction() {
-            putValue(SHORT_DESCRIPTION,tr("Set the current selection to the list of selected relations"));
+        boolean add;
+        public SelectAction(boolean add) {
+            putValue(SHORT_DESCRIPTION, add ? tr("Add the selected relations to the current selection")
+            : tr("Set the current selection to the list of selected relations"));
             putValue(SMALL_ICON, ImageProvider.get("dialogs", "select"));
-            setEnabled(false);
+            putValue(NAME, add ? tr("Select relation (add)") : tr("Select relation"));
+            this.add = add;
+            updateEnabledState();
         }
 
@@ -444,9 +448,16 @@
                 selection.add(model.getRelation(i));
             }
-            Main.map.mapView.getEditLayer().data.setSelected(selection);
+            if(add)
+                Main.map.mapView.getEditLayer().data.addSelected(selection);
+            else
+                Main.map.mapView.getEditLayer().data.setSelected(selection);
+        }
+
+        protected void updateEnabledState() {
+            setEnabled(displaylist.getSelectedIndices() != null && displaylist.getSelectedIndices().length > 0);
         }
 
         public void valueChanged(ListSelectionEvent e) {
-            setEnabled(displaylist.getSelectedIndices() != null && displaylist.getSelectedIndices().length > 0);
+            updateEnabledState();
         }
     }
@@ -457,8 +468,11 @@
      */
     class SelectMembersAction extends AbstractAction implements ListSelectionListener{
-        public SelectMembersAction() {
-            putValue(SHORT_DESCRIPTION,tr("Select the members of all selected relations"));
+        boolean add;
+        public SelectMembersAction(boolean add) {
+            putValue(SHORT_DESCRIPTION,add ? tr("Add the members of all selected relations to current selection")
+            : tr("Select the members of all selected relations"));
             putValue(SMALL_ICON, ImageProvider.get("selectall"));
-            putValue(NAME, tr("Select members"));
+            putValue(NAME, add ? tr("Select members (add)") : tr("Select members"));
+            this.add = add;
             updateEnabledState();
         }
@@ -471,5 +485,8 @@
                 members.addAll(r.getMemberPrimitives());
             }
-            Main.map.mapView.getEditLayer().data.setSelected(members);
+            if(add)
+                Main.map.mapView.getEditLayer().data.addSelected(members);
+            else
+                Main.map.mapView.getEditLayer().data.setSelected(members);
         }
 
@@ -783,7 +800,21 @@
             // -- select members action
             //
-            SelectMembersAction selectMembersAction = new SelectMembersAction();
+            SelectMembersAction selectMembersAction = new SelectMembersAction(false);
             displaylist.addListSelectionListener(selectMembersAction);
             add(selectMembersAction);
+
+            selectMembersAction = new SelectMembersAction(true);
+            displaylist.addListSelectionListener(selectMembersAction);
+            add(selectMembersAction);
+
+            // -- select action
+            //
+            SelectAction selectAction = new SelectAction(false);
+            displaylist.addListSelectionListener(selectAction);
+            add(selectAction);
+
+            selectAction = new SelectAction(true);
+            displaylist.addListSelectionListener(selectAction);
+            add(selectAction);
         }
 
