Index: src/org/openstreetmap/josm/data/validation/tests/TurnrestrictionTest.java
===================================================================
--- src/org/openstreetmap/josm/data/validation/tests/TurnrestrictionTest.java	(revision 18969)
+++ src/org/openstreetmap/josm/data/validation/tests/TurnrestrictionTest.java	(working copy)
@@ -47,10 +47,22 @@
 
     private static final List<String> SUPPORTED_RESTRICTIONS = Arrays.asList(
             "no_right_turn", "no_left_turn", "no_u_turn", "no_straight_on",
-            "only_right_turn", "only_left_turn", "only_straight_on",
+            "only_right_turn", "only_left_turn", "only_straight_on", "only_u_turn",
             "no_entry", "no_exit"
         );
 
+    // This should really be replaced with a transport mode hierarchy, i.e. #18383
+    private static final List<String> SUPPORTED_VEHICLE_TYPES = Arrays.asList(
+            "agricultural", "bicycle", "bus", "caravan", "foot", "hazmat",
+            "hgv", "horse", "motor_vehicle", "motorcar", "motorcycle",
+            "psv", "vehicle"
+    );
+
+    /** A string for "restriction" */
+    private static final String RESTRICTION_STRING = "restriction";
+    /** A string for "conditional" */
+    private static final String CONDITIONAL_STRING = "conditional";
+
     /**
      * Constructs a new {@code TurnrestrictionTest}.
      */
@@ -58,24 +70,48 @@
         super(tr("Turn restrictions"), tr("This test checks if turn restrictions are valid."));
     }
 
-    private static boolean hasSupportedRestrictionTag(Relation r) {
-        if (r.hasTag("restriction", SUPPORTED_RESTRICTIONS))
-            return true;
-        String conditionalValue = r.get("restriction:conditional");
-        if (conditionalValue != null) {
+    /**
+     * Check for any restriction tag (e.g., "restriction:mode:conditional" or "restriction:conditional)
+     * @param key The key to check
+     * @param value The value to check
+     * @return {@code true} if the tag is supported
+     */
+    private static boolean restrictionTagIsSupported(final String key, final String value) {
+        if (!key.startsWith("restriction:"))
+            return false;
+        String[] parts = key.split(":");
+        if (parts.length > 3)
+            return false;
+        if (parts.length == 3 && !SUPPORTED_VEHICLE_TYPES.contains(parts[1]))
+            return false;
+        if (key.endsWith(CONDITIONAL_STRING)) {
+            // restriction:conditional=* or restriction:mode:condition=*
             try {
-                List<ConditionalValue> values = ConditionalValue.parse(conditionalValue);
-                return !values.isEmpty() && SUPPORTED_RESTRICTIONS.contains(values.get(0).restrictionValue);
+                final List<ConditionalValue> conditionalValues = ConditionalValue.parse(value);
+                return !conditionalValues.isEmpty() && conditionalValues.stream()
+                        .anyMatch(conditional -> SUPPORTED_RESTRICTIONS.contains(conditional.restrictionValue));
             } catch (ConditionalParsingException e) {
                 Logging.trace(e);
             }
+        } else if (SUPPORTED_VEHICLE_TYPES.contains(parts[1])) {
+            // restriction:mode=*
+            return SUPPORTED_RESTRICTIONS.contains(value);
         }
         return false;
     }
 
+    private static boolean hasSupportedRestrictionTag(Relation r) {
+        if (r.hasTag(RESTRICTION_STRING, SUPPORTED_RESTRICTIONS))
+            return true;
+        if (r.hasTag("restriction:bicycle", "give_way", "stop"))
+            return true;
+        return r.getKeys().entrySet().stream()
+                .anyMatch(entry -> restrictionTagIsSupported(entry.getKey(), entry.getValue()));
+    }
+
     @Override
     public void visit(Relation r) {
-        if (!r.hasTag("type", "restriction"))
+        if (!r.hasTag("type", RESTRICTION_STRING))
             return;
 
         if (!hasSupportedRestrictionTag(r)) {
@@ -224,7 +260,7 @@
             return;
         }
         if (fromWay.equals(toWay)) {
-            Severity severity = r.hasTag("restriction", "no_u_turn") ? Severity.OTHER : Severity.WARNING;
+            Severity severity = r.hasTag(RESTRICTION_STRING, "no_u_turn") ? Severity.OTHER : Severity.WARNING;
             errors.add(TestError.builder(this, severity, FROM_EQUALS_TO)
                     .message(tr("\"from\" way equals \"to\" way"))
                     .primitives(r)
Index: nodist/data/restriction.osm
===================================================================
--- nodist/data/restriction.osm	(revision 18969)
+++ nodist/data/restriction.osm	(working copy)
@@ -303,6 +303,36 @@
   </node>
   <node id='-139153' action='modify' lat='51.12589701544' lon='14.16097636327' />
   <node id='-139155' action='modify' lat='51.12605520638' lon='14.16056440756' />
+  <node id='-139208' action='modify' lat='51.12625114973' lon='14.15235587932' />
+  <node id='-139209' action='modify' lat='51.12618309097' lon='14.151858722' />
+  <node id='-139210' action='modify' lat='51.12642930304' lon='14.1518794535' />
+  <node id='-139211' action='modify' lat='51.12659369391' lon='14.15201819507'>
+    <tag k='name' v='14 - hgv only straight on' />
+  </node>
+  <node id='-139212' action='modify' lat='51.12600068301' lon='14.15168569371' />
+  <node id='-139213' action='modify' lat='51.12586506509' lon='14.15166097538' />
+  <node id='-139214' action='modify' lat='51.12569691835' lon='14.15169924892' />
+  <node id='-139215' action='modify' lat='51.12638976908' lon='14.15142056972' />
+  <node id='-139224' action='modify' lat='51.12615056402' lon='14.1527188163' />
+  <node id='-139225' action='modify' lat='51.12639677626' lon='14.1527395478' />
+  <node id='-139226' action='modify' lat='51.12656116725' lon='14.15287828937'>
+    <tag k='name' v='15 - only straight on conditional' />
+  </node>
+  <node id='-139227' action='modify' lat='51.12596815593' lon='14.15254578801' />
+  <node id='-139228' action='modify' lat='51.12583253792' lon='14.15252106968' />
+  <node id='-139229' action='modify' lat='51.12566439106' lon='14.15255934322' />
+  <node id='-139230' action='modify' lat='51.12621862282' lon='14.15321597362' />
+  <node id='-139231' action='modify' lat='51.12635724228' lon='14.15228066402' />
+  <node id='-139292' action='modify' lat='51.12616277589' lon='14.15339796366' />
+  <node id='-139293' action='modify' lat='51.12598036785' lon='14.15322493537' />
+  <node id='-139294' action='modify' lat='51.12584474987' lon='14.15320021704' />
+  <node id='-139295' action='modify' lat='51.12567660306' lon='14.15323849058' />
+  <node id='-139296' action='modify' lat='51.12623083467' lon='14.15389512098' />
+  <node id='-139297' action='modify' lat='51.12640898807' lon='14.15341869516' />
+  <node id='-139298' action='modify' lat='51.12657337901' lon='14.15355743673'>
+    <tag k='name' v='16 - hgv only straight on conditional' />
+  </node>
+  <node id='-139299' action='modify' lat='51.12636945409' lon='14.15295981138' />
   <way id='-138981' timestamp='2009-09-09T15:30:17Z'>
     <nd ref='-112783' />
     <nd ref='-112877' />
@@ -983,6 +1013,75 @@
     <tag k='highway' v='unclassified' />
     <tag k='oneway' v='yes' />
   </way>
+  <way id='-139194' action='modify'>
+    <nd ref='-139208' />
+    <nd ref='-139209' />
+    <tag k='highway' v='unclassified' />
+  </way>
+  <way id='-139195' action='modify'>
+    <nd ref='-139209' />
+    <nd ref='-139210' />
+    <nd ref='-139211' />
+    <tag k='highway' v='unclassified' />
+  </way>
+  <way id='-139196' action='modify'>
+    <nd ref='-139209' />
+    <nd ref='-139212' />
+    <nd ref='-139213' />
+    <nd ref='-139214' />
+    <tag k='highway' v='unclassified' />
+  </way>
+  <way id='-139197' action='modify'>
+    <nd ref='-139215' />
+    <nd ref='-139209' />
+    <tag k='highway' v='unclassified' />
+  </way>
+  <way id='-139202' action='modify'>
+    <nd ref='-139224' />
+    <nd ref='-139225' />
+    <nd ref='-139226' />
+    <tag k='highway' v='unclassified' />
+  </way>
+  <way id='-139203' action='modify'>
+    <nd ref='-139224' />
+    <nd ref='-139227' />
+    <nd ref='-139228' />
+    <nd ref='-139229' />
+    <tag k='highway' v='unclassified' />
+  </way>
+  <way id='-139204' action='modify'>
+    <nd ref='-139230' />
+    <nd ref='-139224' />
+    <tag k='highway' v='unclassified' />
+  </way>
+  <way id='-139205' action='modify'>
+    <nd ref='-139231' />
+    <nd ref='-139224' />
+    <tag k='highway' v='unclassified' />
+  </way>
+  <way id='-139258' action='modify'>
+    <nd ref='-139292' />
+    <nd ref='-139293' />
+    <nd ref='-139294' />
+    <nd ref='-139295' />
+    <tag k='highway' v='unclassified' />
+  </way>
+  <way id='-139259' action='modify'>
+    <nd ref='-139296' />
+    <nd ref='-139292' />
+    <tag k='highway' v='unclassified' />
+  </way>
+  <way id='-139260' action='modify'>
+    <nd ref='-139292' />
+    <nd ref='-139297' />
+    <nd ref='-139298' />
+    <tag k='highway' v='unclassified' />
+  </way>
+  <way id='-139261' action='modify'>
+    <nd ref='-139299' />
+    <nd ref='-139292' />
+    <tag k='highway' v='unclassified' />
+  </way>
   <relation id='-139094' action='modify' timestamp='2009-09-09T15:30:17Z'>
     <member type='way' ref='-139044' role='to' />
     <member type='node' ref='-112839' role='via' />
@@ -1319,4 +1418,28 @@
     <tag k='restriction:conditional' v='no_u_turn @ (Mo-Fr 16:00-18:00)' />
     <tag k='type' v='restriction' />
   </relation>
+  <relation id='-139211' action='modify'>
+    <member type='way' ref='-139196' role='from' />
+    <member type='way' ref='-139195' role='to' />
+    <member type='node' ref='-139209' role='via' />
+    <tag k='name' v='OK 14 - hgv only straight on' />
+    <tag k='restriction:hgv' v='only_straight_on' />
+    <tag k='type' v='restriction' />
+  </relation>
+  <relation id='-139213' action='modify'>
+    <member type='way' ref='-139203' role='from' />
+    <member type='way' ref='-139202' role='to' />
+    <member type='node' ref='-139224' role='via' />
+    <tag k='name' v='OK 15- only straight on conditional' />
+    <tag k='restriction:conditional' v='only_straight_on @ (07:00-09:00)' />
+    <tag k='type' v='restriction' />
+  </relation>
+  <relation id='-139216' action='modify'>
+    <member type='way' ref='-139258' role='from' />
+    <member type='way' ref='-139260' role='to' />
+    <member type='node' ref='-139292' role='via' />
+    <tag k='name' v='OK 16- hgv only straight on conditional' />
+    <tag k='restriction:caravan:conditional' v='only_straight_on @ (07:00-09:00)' />
+    <tag k='type' v='restriction' />
+  </relation>
 </osm>
