Index: /trunk/data_nodist/restriction.osm
===================================================================
--- /trunk/data_nodist/restriction.osm	(revision 15070)
+++ /trunk/data_nodist/restriction.osm	(revision 15071)
@@ -295,4 +295,13 @@
   <node id='-138978' action='modify' lat='51.11929761964' lon='14.1607307948' />
   <node id='-138980' action='modify' lat='51.11938242064' lon='14.1607607948' />
+  <node id='-139147' action='modify' lat='51.12600394515' lon='14.1602059678' />
+  <node id='-139148' action='modify' lat='51.12545534658' lon='14.15967261709' />
+  <node id='-139149' action='modify' lat='51.1257203484' lon='14.15988743891' />
+  <node id='-139150' action='modify' lat='51.12552508405' lon='14.16119859274' />
+  <node id='-139152' action='modify' lat='51.12608298001' lon='14.1608430256'>
+    <tag k='name' v='05.4 - no u-turn via way (oneway, conditional)' />
+  </node>
+  <node id='-139153' action='modify' lat='51.12589701544' lon='14.16097636327' />
+  <node id='-139155' action='modify' lat='51.12605520638' lon='14.16056440756' />
   <way id='-138981' timestamp='2009-09-09T15:30:17Z'>
     <nd ref='-112783' />
@@ -953,4 +962,25 @@
     <nd ref='-138964' />
     <tag k='highway' v='unclassified' />
+  </way>
+  <way id='-139151' action='modify'>
+    <nd ref='-139148' />
+    <nd ref='-139149' />
+    <nd ref='-139147' />
+    <tag k='highway' v='unclassified' />
+    <tag k='oneway' v='yes' />
+  </way>
+  <way id='-139154' action='modify'>
+    <nd ref='-139147' />
+    <nd ref='-139155' />
+    <nd ref='-139152' />
+    <tag k='highway' v='unclassified' />
+    <tag k='oneway' v='yes' />
+  </way>
+  <way id='-139156' action='modify'>
+    <nd ref='-139152' />
+    <nd ref='-139153' />
+    <nd ref='-139150' />
+    <tag k='highway' v='unclassified' />
+    <tag k='oneway' v='yes' />
   </way>
   <relation id='-139094' action='modify' timestamp='2009-09-09T15:30:17Z'>
@@ -1282,3 +1312,11 @@
     <tag k='type' v='restriction' />
   </relation>
+  <relation id='-139207' action='modify'>
+    <member type='way' ref='-139151' role='from' />
+    <member type='way' ref='-139154' role='via' />
+    <member type='way' ref='-139156' role='to' />
+    <tag k='name' v='OK 05.4 - no u-turn via way (oneway, conditional)' />
+    <tag k='restriction:conditional' v='no_u_turn @ (Mo-Fr 16:00-18:00)' />
+    <tag k='type' v='restriction' />
+  </relation>
 </osm>
Index: /trunk/src/org/openstreetmap/josm/data/validation/tests/ConditionalKeys.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/validation/tests/ConditionalKeys.java	(revision 15070)
+++ /trunk/src/org/openstreetmap/josm/data/validation/tests/ConditionalKeys.java	(revision 15071)
@@ -38,4 +38,11 @@
             /*,"hov","emergency","hazmat","disabled"*/));
 
+    private static final Pattern CONDITIONAL_PATTERN;
+    static {
+        final String part = Pattern.compile("([^@\\p{Space}][^@]*?)"
+                + "\\s*@\\s*" + "(\\([^)\\p{Space}][^)]+?\\)|[^();\\p{Space}][^();]*?)\\s*").toString();
+        CONDITIONAL_PATTERN = Pattern.compile('(' + part + ")(;\\s*" + part + ")*");
+    }
+
     /**
      * Constructs a new {@code ConditionalKeys}.
@@ -164,7 +171,5 @@
             // <restriction-value> @ <condition>[;<restriction-value> @ <condition>]
             final List<ConditionalValue> r = new ArrayList<>();
-            final String part = Pattern.compile("([^@\\p{Space}][^@]*?)"
-                    + "\\s*@\\s*" + "(\\([^)\\p{Space}][^)]+?\\)|[^();\\p{Space}][^();]*?)\\s*").toString();
-            final Matcher m = Pattern.compile('(' + part + ")(;\\s*" + part + ")*").matcher(value);
+            final Matcher m = CONDITIONAL_PATTERN.matcher(value);
             if (!m.matches()) {
                 throw new ConditionalParsingException(tr("Does not match pattern ''restriction value @ condition''"));
Index: /trunk/src/org/openstreetmap/josm/data/validation/tests/TurnrestrictionTest.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/validation/tests/TurnrestrictionTest.java	(revision 15070)
+++ /trunk/src/org/openstreetmap/josm/data/validation/tests/TurnrestrictionTest.java	(revision 15071)
@@ -16,4 +16,7 @@
 import org.openstreetmap.josm.data.validation.Test;
 import org.openstreetmap.josm.data.validation.TestError;
+import org.openstreetmap.josm.data.validation.tests.ConditionalKeys.ConditionalParsingException;
+import org.openstreetmap.josm.data.validation.tests.ConditionalKeys.ConditionalValue;
+import org.openstreetmap.josm.tools.Logging;
 
 /**
@@ -56,4 +59,19 @@
     }
 
+    private static boolean hasSupportedRestrictionTag(Relation r) {
+        if (r.hasTag("restriction", SUPPORTED_RESTRICTIONS))
+            return true;
+        String conditionalValue = r.get("restriction:conditional");
+        if (conditionalValue != null) {
+            try {
+                List<ConditionalValue> values = ConditionalValue.parse(conditionalValue);
+                return !values.isEmpty() && SUPPORTED_RESTRICTIONS.contains(values.get(0).restrictionValue);
+            } catch (ConditionalParsingException e) {
+                Logging.trace(e);
+            }
+        }
+        return false;
+    }
+
     @Override
     public void visit(Relation r) {
@@ -61,5 +79,5 @@
             return;
 
-        if (!r.hasTag("restriction", SUPPORTED_RESTRICTIONS)) {
+        if (!hasSupportedRestrictionTag(r)) {
             errors.add(TestError.builder(this, Severity.ERROR, UNKNOWN_RESTRICTION)
                     .message(tr("Unknown turn restriction"))
Index: /trunk/test/unit/org/openstreetmap/josm/data/validation/tests/ConditionalKeysTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/data/validation/tests/ConditionalKeysTest.java	(revision 15070)
+++ /trunk/test/unit/org/openstreetmap/josm/data/validation/tests/ConditionalKeysTest.java	(revision 15071)
@@ -47,4 +47,5 @@
         assertTrue(test.isKeyValid("oneway:backward:conditional"));
         assertTrue(test.isKeyValid("fee:conditional"));
+        assertTrue(test.isKeyValid("restriction:conditional"));
         assertFalse(test.isKeyValid("maxspeed:hgv:conditional:backward"));
     }
@@ -67,4 +68,5 @@
         assertFalse(test.isValueValid("motor_vehicle:conditional", "no @ (10:00until18:00 AND length>5)"));
         assertTrue(test.isValueValid("maxspeed:hgv:conditional", "60 @ (weight>7.5)"));
+        assertTrue(test.isValueValid("restriction:conditional", "no_left_turn @ (Mo-Fr 16:00-18:00)"));
     }
 }
Index: /trunk/test/unit/org/openstreetmap/josm/data/validation/tests/ValidatorTestUtils.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/data/validation/tests/ValidatorTestUtils.java	(revision 15070)
+++ /trunk/test/unit/org/openstreetmap/josm/data/validation/tests/ValidatorTestUtils.java	(revision 15071)
@@ -66,6 +66,6 @@
                 } else if (t.hasKey("name") && namePredicate != null && namePredicate.test(t.getName())) {
                     fail(name + " lacks josm_error_codes tag");
-                } else if (t.hasKey("name") && name.startsWith("OK") && !errors.isEmpty()) {
-                    fail(name + "has unexpected error(s) ");
+                } else if (t.hasKey("name") && t.get("name").startsWith("OK") && !errors.isEmpty()) {
+                    fail(name + "has unexpected error(s): " + errors);
                 }
             }
