Index: trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 5799)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java	(revision 5800)
@@ -395,5 +395,5 @@
                 }
                 selectRelationAction.setRelations(rels);
-                addMembersToSelectionAction.setRelations(rels);
+                addRelationToSelectionAction.setRelations(rels);
                 addMembersToSelectionAction.setRelations(rels);
                 downloadSelectedIncompleteMembersAction.setRelations(rels);
@@ -422,6 +422,10 @@
                 Point p = evt.getPoint();
                 int row = propertyTable.rowAtPoint(p);
-                if (row > -1) {
+                int selectedCount = propertyTable.getSelectedRowCount();
+                // if nothing or one row is selected, select row under mouse instead
+                if (selectedCount<2 && row>-1) { 
                     propertyTable.changeSelection(row, 0, false, false);
+                }
+                if (selectedCount>=2 || row>-1) {
                     propertyMenu.show(propertyTable, p.x, p.y-3);
                 }
@@ -554,5 +558,5 @@
         }
 
-        String selectedTag = null;
+        String selectedTag;
         Relation selectedRelation = null;
         selectedTag = editHelper.getChangedKey(); // select last added or last edited key by default
@@ -624,5 +628,5 @@
         List<Relation> sortedRelations = new ArrayList<Relation>(roles.keySet());
         Collections.sort(sortedRelations, new Comparator<Relation>() {
-            public int compare(Relation o1, Relation o2) {
+            @Override public int compare(Relation o1, Relation o2) {
                 int comp = Boolean.valueOf(o1.isDisabledAndHidden()).compareTo(o2.isDisabledAndHidden());
                 if (comp == 0) {
@@ -1121,18 +1125,23 @@
         @Override
         public void actionPerformed(ActionEvent ae) {
-            if (propertyTable.getSelectedRowCount() != 1)
-                return;
-            String key = propertyData.getValueAt(propertyTable.getSelectedRow(), 0).toString();
+            int rows[] = propertyTable.getSelectedRows();
+            Set<String> values = new TreeSet<String>();
             Collection<OsmPrimitive> sel = Main.main.getCurrentDataSet().getSelected();
-            if (sel.isEmpty())
-                return;
-            Set<String> values = new TreeSet<String>();
-            for (OsmPrimitive p : sel) {
-                Collection<String> s = getString(p,key);
-                if (s != null) {
-                    values.addAll(s);
-                }
-            }
-            Utils.copyToClipboard(Utils.join("\n", values));
+            if (rows.length == 0 || sel.isEmpty()) return;
+
+            for (int row: rows) {
+                String key = propertyData.getValueAt(row, 0).toString();
+                if (sel.isEmpty())
+                    return;
+                for (OsmPrimitive p : sel) {
+                    Collection<String> s = getString(p,key);
+                    if (s != null) {
+                        values.addAll(s);
+                    }
+                }
+            }
+            if (!values.isEmpty()) {
+                Utils.copyToClipboard(Utils.join("\n", values));
+            }
         }
     }
