Index: trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 15706)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java	(revision 15707)
@@ -667,8 +667,6 @@
             @Override
             public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
-                final IRelation<?> selection = getSelected();
-                if (selection != null) {
-                    selection.visitKeys((primitive, key, value) -> addLinks(popupMenu, key, value));
-                }
+                getSelectedRelations().forEach(relation ->
+                        relation.visitKeys((primitive, key, value) -> addLinks(popupMenu, key, value)));
             }
         });
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 15706)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 15707)
@@ -236,8 +236,6 @@
             @Override
             public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
-                final Collection<OsmPrimitive> selection = getSelectedPrimitives();
-                if (!selection.isEmpty()) {
-                    selection.iterator().next().visitKeys((primitive, key, value) -> addLinks(popupMenu, key, value));
-                }
+                getSelectedPrimitives().forEach(primitive ->
+                        primitive.visitKeys((p, key, value) -> addLinks(popupMenu, key, value)));
             }
         });
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 15706)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 15707)
@@ -28,4 +28,5 @@
 import java.util.TreeSet;
 import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.stream.Collectors;
 
 import javax.swing.AbstractAction;
@@ -65,4 +66,5 @@
 import org.openstreetmap.josm.data.osm.IRelation;
 import org.openstreetmap.josm.data.osm.IRelationMember;
+import org.openstreetmap.josm.data.osm.KeyValueVisitor;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmData;
@@ -396,8 +398,6 @@
             @Override
             public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
-                final IRelation<?> relation = getSelectedMembershipRelation();
-                if (relation != null) {
-                    relation.visitKeys((primitive, key, value) -> addLinks(membershipMenu, key, value));
-                }
+                getSelectedMembershipRelations().forEach(relation ->
+                        relation.visitKeys((primitive, key, value) -> addLinks(membershipMenu, key, value)));
             }
         });
@@ -457,8 +457,5 @@
             @Override
             public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
-                final Tags tags = getSelectedProperties();
-                if (tags != null) {
-                    tags.getValues().forEach(value -> addLinks(tagMenu, tags.getKey(), value));
-                }
+                visitSelectedProperties((primitive, key, value) -> addLinks(tagMenu, key, value));
             }
         });
@@ -804,4 +801,17 @@
 
     /**
+     * Visits all combinations of the selected keys/values.
+     * @param visitor the visitor
+     * @since 15707
+     */
+    public void visitSelectedProperties(KeyValueVisitor visitor) {
+        for (int row : tagTable.getSelectedRows()) {
+            final String key = editHelper.getDataKey(row);
+            Set<String> values = editHelper.getDataValues(row).keySet();
+            values.forEach(value -> visitor.visitKeyValue(null, key, value));
+        }
+    }
+
+    /**
      * Replies the membership popup menu handler.
      * @return The membership popup menu handler
@@ -818,4 +828,15 @@
         int row = membershipTable.getSelectedRow();
         return row > -1 ? (IRelation<?>) membershipData.getValueAt(row, 0) : null;
+    }
+
+    /**
+     * Returns all selected relation memberships.
+     * @return The selected relation memberships
+     * @since 15707
+     */
+    public Collection<IRelation<?>> getSelectedMembershipRelations() {
+        return Arrays.stream(membershipTable.getSelectedRows())
+                .mapToObj(row -> (IRelation<?>) membershipData.getValueAt(row, 0))
+                .collect(Collectors.toList());
     }
 
