Index: trunk/src/org/openstreetmap/josm/actions/relation/AddSelectionToRelations.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/relation/AddSelectionToRelations.java	(revision 7741)
+++ trunk/src/org/openstreetmap/josm/actions/relation/AddSelectionToRelations.java	(revision 7742)
@@ -19,5 +19,8 @@
 import org.openstreetmap.josm.tools.ImageProvider;
 
-
+/**
+ * Add all objects selected in the current dataset after the last member of relation(s).
+ * @since 5799
+ */
 public class AddSelectionToRelations extends AbstractRelationAction implements SelectionChangedListener {
     /**
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 7741)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java	(revision 7742)
@@ -737,4 +737,11 @@
     }
 
+    /**
+     * Adds primitives to a given relation.
+     * @param orig The relation to modify
+     * @param primitivesToAdd The primitives to add as relation members
+     * @return The resulting command
+     * @throws IllegalArgumentException if orig is null
+     */
     public static Command addPrimitivesToRelation(final Relation orig, Collection<? extends OsmPrimitive> primitivesToAdd)
             throws IllegalArgumentException {
@@ -753,6 +760,6 @@
                     continue;
                 }
-                final String role = presets.isEmpty() ? null : presets.iterator().next().suggestRoleForOsmPrimitive(p);
-                relation.addMember(new RelationMember(role == null ? "" : role, p));
+                final Set<String> roles = findSuggestedRoles(presets, p);
+                relation.addMember(new RelationMember(roles.size() == 1 ? roles.iterator().next() : "", p));
                 modified = true;
             }
@@ -761,4 +768,15 @@
             return null;
         }
+    }
+
+    protected static Set<String> findSuggestedRoles(final Collection<TaggingPreset> presets, OsmPrimitive p) {
+        final Set<String> roles = new HashSet<>();
+        for (TaggingPreset preset : presets) {
+            String role = preset.suggestRoleForOsmPrimitive(p);
+            if (role != null && !role.isEmpty()) {
+                roles.add(role);
+            }
+        }
+        return roles;
     }
 
