Index: trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 14684)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 14685)
@@ -34,9 +34,6 @@
 
 import org.openstreetmap.josm.actions.ExpertToggleAction;
-import org.openstreetmap.josm.actions.IPrimitiveAction;
 import org.openstreetmap.josm.actions.relation.AddSelectionToRelations;
 import org.openstreetmap.josm.actions.relation.DeleteRelationsAction;
-import org.openstreetmap.josm.actions.relation.DownloadMembersAction;
-import org.openstreetmap.josm.actions.relation.DownloadSelectedIncompleteMembersAction;
 import org.openstreetmap.josm.actions.relation.DuplicateRelationAction;
 import org.openstreetmap.josm.actions.relation.EditRelationAction;
@@ -44,5 +41,5 @@
 import org.openstreetmap.josm.actions.relation.ExportRelationToGpxAction.Mode;
 import org.openstreetmap.josm.actions.relation.RecentRelationsAction;
-import org.openstreetmap.josm.actions.relation.SelectMembersAction;
+import org.openstreetmap.josm.actions.relation.SelectInRelationListAction;
 import org.openstreetmap.josm.actions.relation.SelectRelationAction;
 import org.openstreetmap.josm.data.osm.DataSet;
@@ -73,4 +70,5 @@
 import org.openstreetmap.josm.gui.SideButton;
 import org.openstreetmap.josm.gui.dialogs.relation.RelationEditor;
+import org.openstreetmap.josm.gui.dialogs.relation.RelationPopupMenus;
 import org.openstreetmap.josm.gui.layer.LayerManager.LayerAddEvent;
 import org.openstreetmap.josm.gui.layer.LayerManager.LayerChangeListener;
@@ -99,5 +97,5 @@
  */
 public class RelationListDialog extends ToggleDialog
-        implements DataSetListener, NavigatableComponent.ZoomChangeListener, ExpertToggleAction.ExpertModeChangeListener {
+        implements DataSetListener, NavigatableComponent.ZoomChangeListener {
     /** The display list. */
     private final JList<IRelation<?>> displaylist;
@@ -120,14 +118,8 @@
     /** the duplicate action */
     private final DuplicateRelationAction duplicateAction = new DuplicateRelationAction();
-    private final DownloadMembersAction downloadMembersAction = new DownloadMembersAction();
-    private final DownloadSelectedIncompleteMembersAction downloadSelectedIncompleteMembersAction =
-            new DownloadSelectedIncompleteMembersAction();
-    private final SelectMembersAction selectMembersAction = new SelectMembersAction(false);
-    private final SelectMembersAction addMembersToSelectionAction = new SelectMembersAction(true);
+    /** the select relation action */
     private final SelectRelationAction selectRelationAction = new SelectRelationAction(false);
-    private final SelectRelationAction addRelationToSelectionAction = new SelectRelationAction(true);
     /** add all selected primitives to the given relations */
     private final AddSelectionToRelations addSelectionToRelations = new AddSelectionToRelations();
-    private transient JMenuItem addSelectionToRelationMenuItem;
 
     /** export relation to GPX track action */
@@ -245,6 +237,4 @@
         SelectionEventManager.getInstance().addSelectionListener(addSelectionToRelations);
         dataChanged(null);
-        ExpertToggleAction.addExpertModeChangeListener(this);
-        expertChanged(ExpertToggleAction.isExpert());
     }
 
@@ -256,5 +246,4 @@
         DatasetEventManager.getInstance().removeDatasetListener(this);
         SelectionEventManager.getInstance().removeSelectionListener(addSelectionToRelations);
-        ExpertToggleAction.removeExpertModeChangeListener(this);
     }
 
@@ -632,16 +621,5 @@
         List<JMenuItem> checkDisabled = new ArrayList<>();
 
-        // -- select action
-        popupMenuHandler.addAction(selectRelationAction);
-        popupMenuHandler.addAction(addRelationToSelectionAction);
-
-        // -- select members action
-        popupMenuHandler.addAction(selectMembersAction);
-        popupMenuHandler.addAction(addMembersToSelectionAction);
-
-        // -- download members action
-        popupMenuHandler.addSeparator();
-        popupMenuHandler.addAction(downloadMembersAction);
-        popupMenuHandler.addAction(downloadSelectedIncompleteMembersAction);
+        RelationPopupMenus.setupHandler(popupMenuHandler, SelectInRelationListAction.class);
 
         // -- export relation to gpx action
@@ -658,5 +636,5 @@
         popupMenuHandler.addAction(deleteRelationsAction).setVisible(false);
 
-        addSelectionToRelationMenuItem = popupMenuHandler.addAction(addSelectionToRelations);
+        ExpertToggleAction.addVisibilitySwitcher(popupMenuHandler.addAction(addSelectionToRelations));
 
         popupMenuHandler.addListener(new PopupMenuListener() {
@@ -664,8 +642,6 @@
             public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
                 for (JMenuItem mi: checkDisabled) {
-                    mi.setVisible(((IPrimitiveAction) mi.getAction()).isEnabled());
-
-                    Component sep = popupMenu.getComponent(
-                            Math.max(0, popupMenu.getComponentIndex(mi)-1));
+                    mi.setVisible(mi.getAction().isEnabled());
+                    Component sep = popupMenu.getComponent(Math.max(0, popupMenu.getComponentIndex(mi) - 1));
                     if (!(sep instanceof JMenuItem)) {
                         sep.setVisible(mi.isVisible());
@@ -770,8 +746,3 @@
         }
     }
-
-    @Override
-    public void expertChanged(boolean isExpert) {
-        addSelectionToRelationMenuItem.setVisible(isExpert);
-    }
 }
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 14684)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 14685)
@@ -40,7 +40,5 @@
 import org.openstreetmap.josm.actions.AutoScaleAction;
 import org.openstreetmap.josm.actions.AutoScaleAction.AutoScaleMode;
-import org.openstreetmap.josm.actions.relation.DownloadSelectedIncompleteMembersAction;
 import org.openstreetmap.josm.actions.relation.EditRelationAction;
-import org.openstreetmap.josm.actions.relation.SelectInRelationListAction;
 import org.openstreetmap.josm.data.osm.DataSelectionListener;
 import org.openstreetmap.josm.data.osm.DataSet;
@@ -72,4 +70,5 @@
 import org.openstreetmap.josm.gui.datatransfer.PrimitiveTransferable;
 import org.openstreetmap.josm.gui.datatransfer.data.PrimitiveTransferData;
+import org.openstreetmap.josm.gui.dialogs.relation.RelationPopupMenus;
 import org.openstreetmap.josm.gui.history.HistoryBrowserDialogManager;
 import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeEvent;
@@ -100,7 +99,4 @@
     private final ZoomToJOSMSelectionAction actZoomToJOSMSelection = new ZoomToJOSMSelectionAction();
     private final ZoomToListSelection actZoomToListSelection = new ZoomToListSelection();
-    private final SelectInRelationListAction actSetRelationSelection = new SelectInRelationListAction();
-    private final EditRelationAction actEditRelationSelection = new EditRelationAction();
-    private final DownloadSelectedIncompleteMembersAction actDownloadSelIncompleteMembers = new DownloadSelectedIncompleteMembersAction();
 
     /** the popup menu and its handler */
@@ -216,5 +212,5 @@
                 } else if (osm instanceof Relation) {
                     // else open relation editor if applicable
-                    actEditRelationSelection.actionPerformed(null);
+                    EditRelationAction.launchEditor((Relation) osm);
                 }
             } else if (highlightEnabled && MainApplication.isDisplayingMapView() && helper.highlightOnly(model.getElementAt(idx))) {
@@ -235,9 +231,5 @@
         handler.addAction(actZoomToListSelection);
         handler.addSeparator();
-        handler.addAction(actSetRelationSelection);
-        handler.addAction(actEditRelationSelection);
-        handler.addSeparator();
-        handler.addAction(actDownloadSelIncompleteMembers);
-        return handler;
+        return RelationPopupMenus.setupHandler(handler);
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 14684)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 14685)
@@ -50,9 +50,6 @@
 
 import org.openstreetmap.josm.actions.JosmAction;
-import org.openstreetmap.josm.actions.relation.DownloadMembersAction;
-import org.openstreetmap.josm.actions.relation.DownloadSelectedIncompleteMembersAction;
-import org.openstreetmap.josm.actions.relation.SelectInRelationListAction;
-import org.openstreetmap.josm.actions.relation.SelectMembersAction;
-import org.openstreetmap.josm.actions.relation.SelectRelationAction;
+import org.openstreetmap.josm.actions.relation.DeleteRelationsAction;
+import org.openstreetmap.josm.actions.relation.EditRelationAction;
 import org.openstreetmap.josm.command.ChangeCommand;
 import org.openstreetmap.josm.command.ChangePropertyCommand;
@@ -90,4 +87,5 @@
 import org.openstreetmap.josm.gui.dialogs.ToggleDialog;
 import org.openstreetmap.josm.gui.dialogs.relation.RelationEditor;
+import org.openstreetmap.josm.gui.dialogs.relation.RelationPopupMenus;
 import org.openstreetmap.josm.gui.help.HelpUtil;
 import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeEvent;
@@ -198,16 +196,4 @@
     private final JosmAction[] josmActions = new JosmAction[]{addAction, editAction, deleteAction};
 
-    // relation actions
-    private final SelectInRelationListAction setRelationSelectionAction = new SelectInRelationListAction();
-    private final SelectRelationAction selectRelationAction = new SelectRelationAction(false);
-    private final SelectRelationAction addRelationToSelectionAction = new SelectRelationAction(true);
-
-    private final DownloadMembersAction downloadMembersAction = new DownloadMembersAction();
-    private final DownloadSelectedIncompleteMembersAction downloadSelectedIncompleteMembersAction =
-            new DownloadSelectedIncompleteMembersAction();
-
-    private final SelectMembersAction selectMembersAction = new SelectMembersAction(false);
-    private final SelectMembersAction addMembersToSelectionAction = new SelectMembersAction(true);
-
     private final transient HighlightHelper highlightHelper = new HighlightHelper();
 
@@ -371,12 +357,5 @@
             membershipMenu.addSeparator();
         }
-        membershipMenuHandler.addAction(setRelationSelectionAction);
-        membershipMenuHandler.addAction(selectRelationAction);
-        membershipMenuHandler.addAction(addRelationToSelectionAction);
-        membershipMenuHandler.addAction(selectMembersAction);
-        membershipMenuHandler.addAction(addMembersToSelectionAction);
-        membershipMenu.addSeparator();
-        membershipMenuHandler.addAction(downloadMembersAction);
-        membershipMenuHandler.addAction(downloadSelectedIncompleteMembersAction);
+        RelationPopupMenus.setupHandler(membershipMenuHandler, EditRelationAction.class, DeleteRelationsAction.class);
         membershipMenu.addSeparator();
         membershipMenu.add(helpAction);
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/RelationPopupMenus.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/RelationPopupMenus.java	(revision 14685)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/RelationPopupMenus.java	(revision 14685)
@@ -0,0 +1,60 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.dialogs.relation;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+import javax.swing.Action;
+
+import org.openstreetmap.josm.actions.relation.DeleteRelationsAction;
+import org.openstreetmap.josm.actions.relation.DownloadMembersAction;
+import org.openstreetmap.josm.actions.relation.DownloadSelectedIncompleteMembersAction;
+import org.openstreetmap.josm.actions.relation.EditRelationAction;
+import org.openstreetmap.josm.actions.relation.SelectInRelationListAction;
+import org.openstreetmap.josm.actions.relation.SelectMembersAction;
+import org.openstreetmap.josm.actions.relation.SelectRelationAction;
+import org.openstreetmap.josm.gui.PopupMenuHandler;
+
+/**
+ * Utility class to setup a {@link PopupMenuHandler} with a consistent set of relation actions.
+ * @since 14685
+ */
+public final class RelationPopupMenus {
+    private RelationPopupMenus() {
+        // Hide default constructor for utils classes
+    }
+
+    /**
+     * Adds relation actions to the given {@link PopupMenuHandler}
+     * @param menu handler to add actions to
+     * @param excludeActions 0 or more action classes to exclude, i.e., not add
+     * @return {@code menu}
+     */
+    @SafeVarargs
+    public static PopupMenuHandler setupHandler(PopupMenuHandler menu, Class<? extends Action>... excludeActions) {
+        final Collection<Class<? extends Action>> exclude = Arrays.asList(excludeActions);
+        if (!exclude.contains(EditRelationAction.class)) {
+            menu.addAction(new EditRelationAction());
+        }
+
+        if (!exclude.contains(DeleteRelationsAction.class)) {
+            menu.addAction(new DeleteRelationsAction());
+            menu.addSeparator();
+        }
+
+        if (!exclude.contains(SelectInRelationListAction.class)) {
+            menu.addAction(new SelectInRelationListAction());
+        }
+
+        menu.addAction(new SelectRelationAction(false));
+        menu.addAction(new SelectRelationAction(true));
+        menu.addAction(new SelectMembersAction(false));
+        menu.addAction(new SelectMembersAction(true));
+        menu.addSeparator();
+
+        menu.addAction(new DownloadMembersAction());
+        menu.addAction(new DownloadSelectedIncompleteMembersAction());
+
+        return menu;
+    }
+}
