Index: /trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 4483)
+++ /trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 4484)
@@ -40,4 +40,5 @@
 
 import javax.swing.AbstractAction;
+import javax.swing.Action;
 import javax.swing.Box;
 import javax.swing.DefaultListCellRenderer;
@@ -47,4 +48,5 @@
 import javax.swing.JLabel;
 import javax.swing.JList;
+import javax.swing.JMenuItem;
 import javax.swing.JOptionPane;
 import javax.swing.JPanel;
@@ -163,4 +165,7 @@
     // button in the upper right corner of this dialog
     public static JPanel pluginHook = new JPanel();
+    
+    private JPopupMenu propertyMenu;
+    private JPopupMenu membershipMenu;
 
     private final Map<String, Map<String, Integer>> valueCount = new TreeMap<String, Map<String, Integer>>();
@@ -610,4 +615,11 @@
 
         // setting up the properties table
+        propertyMenu = new JPopupMenu();
+        propertyMenu.add(copyValueAction);
+        propertyMenu.add(copyKeyValueAction);
+        propertyMenu.add(copyAllKeyValueAction);
+        propertyMenu.addSeparator();
+        propertyMenu.add(helpAction);
+        
         propertyData.setColumnIdentifiers(new String[]{tr("Key"),tr("Value")});
         propertyTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
@@ -620,11 +632,5 @@
                 if (row > -1) {
                     propertyTable.changeSelection(row, 0, false, false);
-                    JPopupMenu menu = new JPopupMenu();
-                    menu.add(copyValueAction);
-                    menu.add(copyKeyValueAction);
-                    menu.add(copyAllKeyValueAction);
-                    menu.addSeparator();
-                    menu.add(helpAction);
-                    menu.show(propertyTable, p.x, p.y-3);
+                    propertyMenu.show(propertyTable, p.x, p.y-3);
                 }
             }
@@ -658,4 +664,11 @@
 
         // setting up the membership table
+        membershipMenu = new JPopupMenu();
+        membershipMenu.add(new SelectRelationAction(true));
+        membershipMenu.add(new SelectRelationAction(false));
+        membershipMenu.add(new SelectRelationMembersAction());
+        membershipMenu.add(new DownloadIncompleteMembersAction());
+        membershipMenu.addSeparator();
+        membershipMenu.add(helpAction);
 
         membershipData.setColumnIdentifiers(new String[]{tr("Member Of"),tr("Role"),tr("Position")});
@@ -668,13 +681,14 @@
                 if (row > -1) {
                     membershipTable.changeSelection(row, 0, false, false);
-                    JPopupMenu menu = new JPopupMenu();
                     Relation relation = (Relation)membershipData.getValueAt(row, 0);
-                    menu.add(new SelectRelationAction(relation, true));
-                    menu.add(new SelectRelationAction(relation, false));
-                    menu.add(new SelectRelationMembersAction(relation));
-                    menu.add(new DownloadIncompleteMembersAction(relation));
-                    menu.addSeparator();
-                    menu.add(helpAction);
-                    menu.show(membershipTable, p.x, p.y-3);
+                    for (Component c : membershipMenu.getComponents()) {
+                        if (c instanceof JMenuItem) {
+                            Action action = ((JMenuItem) c).getAction();
+                            if (action instanceof RelationRelated) {
+                                ((RelationRelated)action).setRelation(relation);
+                            }
+                        }
+                    }
+                    membershipMenu.show(membershipTable, p.x, p.y-3);
                 }
             }
@@ -1223,10 +1237,39 @@
     }
 
-    static class SelectRelationAction extends AbstractAction {
+    public void addPropertyPopupMenuSeparator() {
+        propertyMenu.addSeparator();
+    }
+
+    public JMenuItem addPropertyPopupMenuAction(Action a) {
+        return propertyMenu.add(a);
+    }
+    
+    public void addMembershipPopupMenuSeparator() {
+        membershipMenu.addSeparator();
+    }
+
+    public JMenuItem addMembershipPopupMenuAction(Action a) {
+        return membershipMenu.add(a);
+    }
+    
+    public static interface RelationRelated {
+        public Relation getRelation();
+        public void setRelation(Relation relation);
+    }
+    
+    static abstract class AbstractRelationAction extends AbstractAction implements RelationRelated {
+        protected Relation relation;
+        public Relation getRelation() {
+            return this.relation;
+        }
+        public void setRelation(Relation relation) {
+            this.relation = relation;
+        }
+    }
+    
+    static class SelectRelationAction extends AbstractRelationAction {
         boolean selectionmode;
-        Relation relation;
-        public SelectRelationAction(Relation r, boolean select) {
+        public SelectRelationAction(boolean select) {
             selectionmode = select;
-            relation = r;
             if(select) {
                 putValue(NAME, tr("Select relation"));
@@ -1255,8 +1298,6 @@
      *
      */
-    class SelectRelationMembersAction extends AbstractAction {
-        Relation relation;
-        public SelectRelationMembersAction(Relation r) {
-            relation = r;
+    class SelectRelationMembersAction extends AbstractRelationAction {
+        public SelectRelationMembersAction() {
             putValue(SHORT_DESCRIPTION,tr("Select the members of selected relation"));
             putValue(SMALL_ICON, ImageProvider.get("selectall"));
@@ -1276,8 +1317,6 @@
      *
      */
-    class DownloadIncompleteMembersAction extends AbstractAction {
-        Relation relation;
-        public DownloadIncompleteMembersAction(Relation r) {
-            relation = r;
+    class DownloadIncompleteMembersAction extends AbstractRelationAction {
+        public DownloadIncompleteMembersAction() {
             putValue(SHORT_DESCRIPTION, tr("Download incomplete members of selected relations"));
             putValue(SMALL_ICON, ImageProvider.get("dialogs/relation", "downloadincompleteselected"));
