diff --git a/data/defaultpresets.xml b/data/defaultpresets.xml
index db9d63a..51ad2fc 100755
--- a/data/defaultpresets.xml
+++ b/data/defaultpresets.xml
@@ -78,7 +78,7 @@ check: checkbox
   value_off: the value to set when unchecked (default is 'no')
 
 role: type to specify possible roles in relations
-  key: the role name used in relation
+  key: comma separated list of role names used in relation
   text: fixed label to display
   requisite: "optional" or "required" (default is optional)
   count: how often can the role occur (if not given unlimited number is assumed)
@@ -4160,11 +4160,10 @@ are supplied, then "values" will be treated as "display_values" and translated i
             </optional>
             <roles>
                 <role key="" text="route segment" requisite="optional" type="way" />
-                <role key="forward" text="forward segment" requisite="optional" type="way" />
-                <role key="backward" text="backward segment" requisite="optional" type="way" />
+                <role key="forward,backward" text="forward/backward segment" requisite="optional" type="way" />
                 <role key="stop" text="halt point" requisite="optional" type="node" />
-                <role key="forward_stop" text="forward halt point" requisite="optional" type="node" />
-                <role key="backward_stop" text="backward halt point" requisite="optional" type="node" />
+                <role key="forward_stop,backward_stop" text="forward/backward_stop halt point" requisite="optional" type="node" />
+                <role key="north,south,east,west" text="(for North America)" requisite="optional" type="way" />
             </roles>
         </item>
         <item name="Route network" icon="presets/path.png" type="relation">
diff --git a/src/org/openstreetmap/josm/data/validation/tests/RelationChecker.java b/src/org/openstreetmap/josm/data/validation/tests/RelationChecker.java
index 7279e34..a7fc790 100644
--- a/src/org/openstreetmap/josm/data/validation/tests/RelationChecker.java
+++ b/src/org/openstreetmap/josm/data/validation/tests/RelationChecker.java
@@ -109,6 +109,7 @@ public class RelationChecker extends Test {
                 RoleInfo ri = map.get(s);
                 if (ri == null) {
                     ri = new RoleInfo();
+                    map.put(s, ri);
                 }
                 ri.total++;
                 if (m.isRelation()) {
@@ -124,7 +125,6 @@ public class RelationChecker extends Test {
                 else if (m.isNode()) {
                     ri.nodes++;
                 }
-                map.put(s, ri);
             }
             if(map.isEmpty()) {
                 errors.add( new TestError(this, Severity.ERROR, tr("Relation is empty"),
@@ -132,12 +132,13 @@ public class RelationChecker extends Test {
             } else {
                 LinkedList<String> done = new LinkedList<String>();
                 for (TaggingPreset.Role r : allroles) {
-                    done.add(r.key);
-                    String keyname = r.key;
+                    for (String keyname : r.key.split(",")) {
+                        keyname = keyname.trim();
+                        done.add(keyname);
+                        RoleInfo ri = map.get(keyname);
                     if ("".equals(keyname)) {
                         keyname = tr("<empty>");
                     }
-                    RoleInfo ri = map.get(r.key);
                     long count = (ri == null) ? 0 : ri.total;
                     long vc = r.getValidCount(count);
                     if (count != vc) {
@@ -164,6 +165,7 @@ public class RelationChecker extends Test {
                                 tr(s, keyname), MessageFormat.format(s, keyname), WRONG_TYPE, n) );
                     }
                 }
+                }
                 for (String key : map.keySet()) {
                     if (!done.contains(key)) {
                         if (key.length() > 0) {
