Index: trunk/src/org/openstreetmap/josm/data/validation/tests/RelationChecker.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/RelationChecker.java	(revision 16615)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/RelationChecker.java	(revision 16616)
@@ -44,5 +44,5 @@
 
     // CHECKSTYLE.OFF: SingleSpaceSeparator
-    /** Role ''{0}'' is not in templates ''{1}'' */
+    /** Role ''{0}'' is not among expected values ''{1}'' */
     public static final int ROLE_UNKNOWN     = 1701;
     /** Empty role found when expecting one of ''{0}'' */
@@ -320,5 +320,9 @@
         for (String key : map.keySet()) {
             if (allroles.keySet().stream().noneMatch(role -> role.isRole(key))) {
-                String templates = allroles.keySet().stream().map(r -> r.key).collect(Collectors.joining("/"));
+                String templates = allroles.keySet().stream()
+                        .map(r -> r.key)
+                        .map(r -> r == null || r.isEmpty() ? tr("<empty>") : r)
+                        .distinct()
+                        .collect(Collectors.joining("/"));
                 List<OsmPrimitive> primitives = new ArrayList<>(n.findRelationMembers(key));
                 primitives.add(0, n);
@@ -326,5 +330,5 @@
                 if (!key.isEmpty()) {
                     errors.add(TestError.builder(this, Severity.WARNING, ROLE_UNKNOWN)
-                            .message(ROLE_VERIF_PROBLEM_MSG, marktr("Role ''{0}'' is not in templates ''{1}''"), key, templates)
+                            .message(ROLE_VERIF_PROBLEM_MSG, marktr("Role ''{0}'' is not among expected values ''{1}''"), key, templates)
                             .primitives(primitives)
                             .build());
