Index: trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 3289)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 3290)
@@ -53,4 +53,5 @@
 import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
 import org.openstreetmap.josm.data.osm.Relation;
+import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.osm.Way;
 import org.openstreetmap.josm.data.osm.event.AbstractDatasetChangedEvent;
@@ -73,4 +74,5 @@
 import org.openstreetmap.josm.gui.MapView.EditLayerChangeListener;
 import org.openstreetmap.josm.gui.dialogs.relation.DownloadRelationMemberTask;
+import org.openstreetmap.josm.gui.dialogs.relation.RelationEditor;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
 import org.openstreetmap.josm.gui.widgets.PopupMenuLauncher;
@@ -93,4 +95,6 @@
     private ZoomToJOSMSelectionAction actZoomToJOSMSelection;
     private ZoomToListSelection actZoomToListSelection;
+    private SetRelationSelection actSetRelationSelection;
+    private EditRelationSelection actEditRelationSelection;
     private DownloadSelectedIncompleteMembersAction actDownloadSelectedIncompleteMembers;
     private InspectAction actInspect;
@@ -174,4 +178,10 @@
         lstPrimitives.getSelectionModel().addListSelectionListener(actZoomToListSelection);
 
+        actSetRelationSelection = new SetRelationSelection();
+        lstPrimitives.getSelectionModel().addListSelectionListener(actSetRelationSelection);
+
+        actEditRelationSelection = new EditRelationSelection();
+        lstPrimitives.getSelectionModel().addListSelectionListener(actEditRelationSelection);
+
         actDownloadSelectedIncompleteMembers = new DownloadSelectedIncompleteMembersAction();
         lstPrimitives.getSelectionModel().addListSelectionListener(actDownloadSelectedIncompleteMembers);
@@ -251,4 +261,7 @@
             add(actZoomToListSelection);
             addSeparator();
+            add(actSetRelationSelection);
+            add(actEditRelationSelection);
+            addSeparator();
             add(actDownloadSelectedIncompleteMembers);
             addSeparator();
@@ -391,4 +404,57 @@
         public void updateEnabledState() {
             setEnabled(!model.getSelected().isEmpty());
+        }
+
+        public void valueChanged(ListSelectionEvent e) {
+            updateEnabledState();
+        }
+    }
+
+    /**
+     * The action for setting and editing a relation in relation list dialog
+     *
+     */
+    class EditRelationSelection extends SetRelationSelection {
+        public EditRelationSelection() {
+            putValue(NAME, tr("Call editor for relation"));
+            putValue(SHORT_DESCRIPTION, tr("Call relation editor for selected relation"));
+            putValue(SMALL_ICON, ImageProvider.get("dialogs", "edit"));
+            updateEnabledState();
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            Relation relation = (Relation)model.getSelected().toArray()[0];
+            Collection<RelationMember> members = new HashSet<RelationMember>();
+            Collection<OsmPrimitive> selection = model.getAllElements();
+            for (RelationMember member: relation.getMembers()) {
+                if (selection.contains(member.getMember()))
+                    members.add(member);
+            }
+            Main.map.relationListDialog.selectRelation(relation);
+            RelationEditor.getEditor(Main.map.mapView.getEditLayer(), relation,
+                members).setVisible(true);
+        }
+    }
+
+    /**
+     * The action for setting a relation in relation list dialog
+     *
+     */
+    class SetRelationSelection extends AbstractAction implements ListSelectionListener{
+        public SetRelationSelection() {
+            putValue(NAME, tr("Select in relation list"));
+            putValue(SHORT_DESCRIPTION, tr("Select relation in relation list."));
+            putValue(SMALL_ICON, ImageProvider.get("dialogs", "selectionlist"));
+            updateEnabledState();
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            Relation relation = (Relation)model.getSelected().toArray()[0];
+            Main.map.relationListDialog.selectRelation(relation);
+        }
+
+        public void updateEnabledState() {
+            Object[] sel = model.getSelected().toArray();
+            setEnabled(sel.length == 1 && sel[0] instanceof Relation);
         }
 
@@ -497,4 +563,14 @@
             }
             return sel;
+        }
+
+        /**
+         * Replies the collection of OSM primitives in the view
+         * of this model
+         *
+         * @return
+         */
+        public Collection<OsmPrimitive> getAllElements() {
+            return selection;
         }
 
