Index: trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 2193)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 2194)
@@ -77,5 +77,5 @@
         displaylist = new JList(model);
         displaylist.setCellRenderer(new OsmPrimitivRenderer());
-        displaylist.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+        displaylist.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
         displaylist.addMouseListener(new DoubleClickAdapter());
         add(new JScrollPane(displaylist), BorderLayout.CENTER);
@@ -97,5 +97,5 @@
         buttonPanel.add(new SideButton(editAction), GBC.std());
 
-        // the edit action
+        // the duplicate action
         //
         DuplicateAction duplicateAction = new DuplicateAction();
@@ -108,4 +108,12 @@
         displaylist.addListSelectionListener(deleteAction);
         buttonPanel.add(new SideButton(deleteAction), GBC.eol());
+
+        // the select action
+        //
+        SelectAction selectAction = new SelectAction();
+        displaylist.addListSelectionListener(selectAction);
+        buttonPanel.add(new SideButton(selectAction), GBC.eol());
+
+
         add(buttonPanel, BorderLayout.SOUTH);
 
@@ -275,5 +283,5 @@
         public EditAction() {
             putValue(SHORT_DESCRIPTION,tr( "Open an editor for the selected relation"));
-            putValue(NAME, tr("Edit"));
+            //putValue(NAME, tr("Edit"));
             putValue(SMALL_ICON, ImageProvider.get("dialogs", "edit"));
             setEnabled(false);
@@ -303,5 +311,5 @@
 
         public void valueChanged(ListSelectionEvent e) {
-            setEnabled(displaylist.getSelectedIndices() != null && displaylist.getSelectedIndices().length > 0);
+            setEnabled(displaylist.getSelectedIndices() != null && displaylist.getSelectedIndices().length == 1);
         }
     }
@@ -311,17 +319,15 @@
      *
      */
-    class DeleteAction extends AbstractAction implements ListSelectionListener, Runnable {
+    class DeleteAction extends AbstractAction implements ListSelectionListener {
         class AbortException extends Exception {}
 
         public DeleteAction() {
             putValue(SHORT_DESCRIPTION,tr("Delete the selected relation"));
-            putValue(NAME, tr("Delete"));
+            //putValue(NAME, tr("Delete"));
             putValue(SMALL_ICON, ImageProvider.get("dialogs", "delete"));
             setEnabled(false);
         }
 
-        public void run() {
-            if (!isEnabled()) return;
-            Relation toDelete = getSelected();
+        protected void deleteRelation(Relation toDelete) {
             if (toDelete == null)
                 return;
@@ -333,5 +339,13 @@
 
         public void actionPerformed(ActionEvent e) {
-            run();
+            if (!isEnabled()) return;
+            int [] idx  = displaylist.getSelectedIndices();
+            ArrayList<Relation> toDelete = new ArrayList<Relation>(idx.length);
+            for (int i: idx) {
+                toDelete.add(model.getRelation(i));
+            }
+            for (Relation r: toDelete) {
+                deleteRelation(r);
+            }
         }
 
@@ -348,5 +362,5 @@
         public NewAction() {
             putValue(SHORT_DESCRIPTION,tr("Create a new relation"));
-            putValue(NAME, tr("New"));
+            //putValue(NAME, tr("New"));
             putValue(SMALL_ICON, ImageProvider.get("dialogs", "addrelation"));
             setEnabled(false);
@@ -385,7 +399,6 @@
         public DuplicateAction() {
             putValue(SHORT_DESCRIPTION, tr("Create a copy of this relation and open it in another editor window"));
-            // FIXME provide an icon
             putValue(SMALL_ICON, ImageProvider.get("duplicate"));
-            putValue(NAME, tr("Duplicate"));
+            //putValue(NAME, tr("Duplicate"));
             updateEnabledState();
         }
@@ -419,4 +432,33 @@
     }
 
+    /**
+     * Sets the current selection to the list of relations selected in this dialog
+     *
+     */
+    class SelectAction extends AbstractAction implements ListSelectionListener{
+        public SelectAction() {
+            putValue(SHORT_DESCRIPTION,tr("Set the current selection to the list of selected relations"));
+            //putValue(NAME, tr("Select"));
+            putValue(SMALL_ICON, ImageProvider.get("dialogs", "select"));
+            setEnabled(false);
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            if (!isEnabled()) return;
+            int [] idx = displaylist.getSelectedIndices();
+            if (idx == null || idx.length == 0) return;
+            ArrayList<OsmPrimitive> selection = new ArrayList<OsmPrimitive>(idx.length);
+            for (int i: idx) {
+                selection.add(model.getRelation(i));
+            }
+            Main.map.mapView.getEditLayer().data.setSelected(selection);
+            DataSet.fireSelectionChanged(selection);
+        }
+
+        public void valueChanged(ListSelectionEvent e) {
+            setEnabled(displaylist.getSelectedIndices() != null && displaylist.getSelectedIndices().length > 0);
+        }
+    }
+
     private static  class RelationListModel extends AbstractListModel {
         private ArrayList<Relation> relations;
@@ -424,4 +466,8 @@
         public ArrayList<Relation> getRelations() {
             return relations;
+        }
+
+        public Relation getRelation(int idx) {
+            return relations.get(idx);
         }
 
