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"))
