Index: src/org/openstreetmap/josm/data/validation/tests/TurnrestrictionTest.java
===================================================================
--- src/org/openstreetmap/josm/data/validation/tests/TurnrestrictionTest.java	(revision 14962)
+++ src/org/openstreetmap/josm/data/validation/tests/TurnrestrictionTest.java	(working copy)
@@ -185,28 +185,37 @@
 
         if (via.get(0) instanceof Node) {
             final Node viaNode = (Node) via.get(0);
-            final Way viaPseudoWay = new Way();
-            viaPseudoWay.addNode(viaNode);
-            checkIfConnected(fromWay, viaPseudoWay,
-                    tr("The \"from\" way does not start or end at a \"via\" node."), FROM_VIA_NODE);
-            if (toWay.isOneway() != 0 && viaNode.equals(toWay.lastNode(true))) {
+            if (isFullOneway(toWay) && viaNode.equals(toWay.lastNode(true))) {
                 errors.add(TestError.builder(this, Severity.WARNING, SUPERFLUOUS)
                         .message(tr("Superfluous turnrestriction as \"to\" way is oneway"))
                         .primitives(r)
+                        .highlight(toWay)
                         .build());
                 return;
             }
-            checkIfConnected(viaPseudoWay, toWay,
+            if (isFullOneway(fromWay) && viaNode.equals(fromWay.firstNode(true))) {
+                errors.add(TestError.builder(this, Severity.WARNING, SUPERFLUOUS)
+                        .message(tr("Superfluous turnrestriction as \"from\" way is oneway"))
+                        .primitives(r)
+                        .highlight(fromWay)
+                        .build());
+                return;
+            }
+            final Way viaPseudoWay = new Way();
+            viaPseudoWay.addNode(viaNode);
+            checkIfConnected(r, fromWay, viaPseudoWay,
+                    tr("The \"from\" way does not start or end at a \"via\" node."), FROM_VIA_NODE);
+            checkIfConnected(r, viaPseudoWay, toWay,
                     tr("The \"to\" way does not start or end at a \"via\" node."), TO_VIA_NODE);
         } else {
             // check if consecutive ways are connected: from/via[0], via[i-1]/via[i], via[last]/to
-            checkIfConnected(fromWay, (Way) via.get(0),
+            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);
                     Way current = (Way) via.get(i);
-                    checkIfConnected(previous, current,
+                    checkIfConnected(r, previous, current,
                             tr("The \"via\" ways are not connected."), UNCONNECTED_VIA);
                 }
             }
@@ -217,7 +226,7 @@
                         .build());
                 return;
             }
-            checkIfConnected((Way) via.get(via.size() - 1), toWay,
+            checkIfConnected(r, (Way) via.get(via.size() - 1), toWay,
                     tr("The last \"via\" and the \"to\" way are not connected."), TO_VIA_WAY);
         }
     }
@@ -226,7 +235,7 @@
         return w.isOneway() != 0 && !w.hasTag("oneway:bicycle", "no");
     }
 
-    private void checkIfConnected(Way previous, Way current, String msg, int code) {
+    private void checkIfConnected(Relation r, Way previous, Way current, String msg, int code) {
         boolean c;
         if (isFullOneway(previous) && isFullOneway(current)) {
             // both oneways: end/start node must be equal
@@ -242,9 +251,22 @@
             c = current.isFirstLastNode(previous.firstNode()) || current.isFirstLastNode(previous.lastNode());
         }
         if (!c) {
+            List<OsmPrimitive> hilite = new ArrayList<>();
+            if (previous.getNodesCount() == 1 && previous.isNew())
+                hilite.add(previous.firstNode());
+            else
+                hilite.add(previous);
+            if (current.getNodesCount() == 1 && current.isNew())
+                hilite.add(current.firstNode());
+            else
+                hilite.add(current);
+            List<OsmPrimitive> primitives = new ArrayList<>();
+            primitives.add(r);
+            primitives.addAll(hilite);
             errors.add(TestError.builder(this, Severity.ERROR, code)
                     .message(msg)
-                    .primitives(previous, current)
+                    .primitives(primitives)
+                    .highlight(hilite)
                     .build());
         }
     }
