Index: src/org/openstreetmap/josm/data/validation/tests/TurnrestrictionTest.java
===================================================================
--- src/org/openstreetmap/josm/data/validation/tests/TurnrestrictionTest.java	(Revision 19394)
+++ src/org/openstreetmap/josm/data/validation/tests/TurnrestrictionTest.java	(Arbeitskopie)
@@ -21,6 +21,7 @@
 
 /**
  * Checks if turn restrictions are valid
+ * 
  * @since 3669
  */
 public class TurnrestrictionTest extends Test {
@@ -86,11 +87,10 @@
             return;
         }
 
-        Way fromWay = null;
+        List<Way> fromWays = new ArrayList<>();
         Way toWay = null;
         List<OsmPrimitive> via = new ArrayList<>();
 
-        boolean morefrom = false;
         boolean moreto = false;
         boolean morevia = false;
         boolean mixvia = false;
@@ -111,11 +111,7 @@
 
                 switch (m.getRole()) {
                 case "from":
-                    if (fromWay != null) {
-                        morefrom = true;
-                    } else {
-                        fromWay = w;
-                    }
+                    fromWays.add(w);
                     break;
                 case "to":
                     if (toWay != null) {
@@ -128,7 +124,7 @@
                     if (!via.isEmpty() && via.get(0) instanceof Node) {
                         mixvia = true;
                     } else {
-                        via.add(w);
+                        via.add(w);                        
                     }
                     break;
                 default:
@@ -165,12 +161,15 @@
                         .build());
             }
         }
-        if (morefrom) {
-            errors.add(TestError.builder(this, Severity.ERROR, MORE_FROM)
-                    .message(tr("More than one \"from\" way found"))
-                    .primitives(r)
-                    .build());
-            return;
+        if (fromWays.size() > 1) {
+            if (!r.hasTag("restriction", "no_entry")) {
+
+                errors.add(TestError.builder(this, Severity.ERROR, MORE_FROM)
+                        .message(tr("More than one \"from\" way found"))
+                        .primitives(r)
+                        .build());
+                return;
+            }
         }
         if (moreto) {
             errors.add(TestError.builder(this, Severity.ERROR, MORE_TO)
@@ -194,21 +193,25 @@
             return;
         }
 
-        if (fromWay == null) {
+        if (fromWays.isEmpty()) {
             errors.add(TestError.builder(this, Severity.ERROR, NO_FROM)
                     .message(tr("No \"from\" way found"))
                     .primitives(r)
                     .build());
             return;
-        } else if (fromWay.isClosed()) {
-            errors.add(TestError.builder(this, Severity.ERROR, FROM_CLOSED_WAY)
-                    .message(tr("\"from\" way is a closed way"))
-                    .primitives(r)
-                    .highlight(fromWay)
-                    .build());
-            return;
-        }
+        } else
 
+            for (Way fromWay : fromWays) {
+                if (fromWay.isClosed()) {
+                    errors.add(TestError.builder(this, Severity.ERROR, FROM_CLOSED_WAY)
+                            .message(tr("\"from\" way is a closed way"))
+                            .primitives(r)
+                            .highlight(fromWay)
+                            .build());
+                    return;
+                }
+            }
+
         if (toWay == null) {
             errors.add(TestError.builder(this, Severity.ERROR, NO_TO)
                     .message(tr("No \"to\" way found"))
@@ -223,12 +226,15 @@
                     .build());
             return;
         }
-        if (fromWay.equals(toWay)) {
-            Severity severity = r.hasTag("restriction", "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)
-                    .build());
+        for (Way fromWay : fromWays) {
+
+            if (fromWay.equals(toWay)) {
+                Severity severity = r.hasTag("restriction", "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)
+                        .build());
+            }
         }
         if (via.isEmpty()) {
             errors.add(TestError.builder(this, Severity.ERROR, NO_VIA)
@@ -248,20 +254,27 @@
                         .build());
                 return;
             }
-            if (isFullOneway(fromWay) && viaNode.equals(fromWay.firstNode(true))) {
-                errors.add(TestError.builder(this, Severity.WARNING, SUPERFLUOUS)
+            if (fromWays.size() == 1){
+                Way fromWay = fromWays.get(0);
+                if (isFullOneway(fromWay) && viaNode.equals(fromWay.firstNode(true))) {
+                    errors.add(TestError.builder(this, Severity.WARNING, SUPERFLUOUS)
                         .message(tr("Superfluous turn restriction as \"from\" way is oneway"))
                         .primitives(r)
                         .highlight(fromWay)
                         .build());
-                return;
+                    return;
+                }
             }
-            if (!fromWay.isFirstLastNode(viaNode)) {
-                errors.add(TestError.builder(this, Severity.WARNING, FROM_VIA_NODE)
-                        .message(tr("The \"from\" way does not start or end at a \"via\" node."))
-                        .primitives(r, fromWay, viaNode)
-                        .highlight(fromWay, viaNode)
-                        .build());
+
+            for (Way fromWay : fromWays) {
+ 
+                if (!fromWay.isFirstLastNode(viaNode)) {
+                    errors.add(TestError.builder(this, Severity.WARNING, FROM_VIA_NODE)
+                            .message(tr("The \"from\" way does not start or end at a \"via\" node."))
+                            .primitives(r, fromWay, viaNode)
+                            .highlight(fromWay, viaNode)
+                            .build());
+                }
             }
             if (!toWay.isFirstLastNode(viaNode)) {
                 errors.add(TestError.builder(this, Severity.WARNING, TO_VIA_NODE)
@@ -279,17 +292,22 @@
                         .build());
                 return;
             }
-            if (isFullOneway(fromWay) && ((Way) via.get(0)).isFirstLastNode(fromWay.firstNode(true))) {
-                errors.add(TestError.builder(this, Severity.WARNING, SUPERFLUOUS)
-                        .message(tr("Superfluous turn restriction as \"from\" way is oneway"))
-                        .primitives(r)
-                        .highlight(fromWay)
-                        .build());
-                return;
+            if (fromWays.size() == 1) {
+                Way fromWay = fromWays.get(0);
+                if (isFullOneway(fromWay) && ((Way) via.get(0)).isFirstLastNode(fromWay.firstNode(true))) {
+                    errors.add(TestError.builder(this, Severity.WARNING, SUPERFLUOUS)
+                            .message(tr("Superfluous turn restriction as \"from\" way is oneway"))
+                            .primitives(r)
+                            .highlight(fromWay)
+                            .build());
+                    return;
+                }
             }
             // check if consecutive ways are connected: from/via[0], via[i-1]/via[i], via[last]/to
-            checkIfConnected(r, fromWay, (Way) via.get(0),
-                    tr("The \"from\" and the first \"via\" way are not connected."), FROM_VIA_WAY);
+            for (Way fromWay : fromWays) {
+                checkIfConnected(r, fromWay, (Way) via.get(0),
+                        tr("The \"from\" and the first \"via\" way are not connected."), FROM_VIA_WAY);
+            }
             if (via.size() > 1) {
                 for (int i = 1; i < via.size(); i++) {
                     Way previous = (Way) via.get(i - 1);
