Index: trunk/src/org/openstreetmap/josm/data/validation/tests/DirectionNodes.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/DirectionNodes.java	(revision 17409)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/DirectionNodes.java	(revision 17411)
@@ -8,4 +8,5 @@
 import java.util.List;
 import java.util.Map.Entry;
+import java.util.stream.Collectors;
 
 import org.openstreetmap.josm.data.osm.Node;
@@ -25,6 +26,8 @@
     private static final int END_NODE_CODE = 4001;
     private static final int NO_WAY_CODE = 4002;
+    private static final int NO_SUITABLE_WAY = 4003;
 
-    private static final String DIR_VERIF_PROBLEM_MSG = tr("Invalid usage of direction on node");
+    private static final String INVALID_USE_MSG = tr("Invalid usage of direction on node");
+    private static final String DISPUTED_USE_MSG = tr("Disputed usage of direction on node");
 
     /**
@@ -54,26 +57,41 @@
         final List<Way> ways = new ArrayList<>();
         int count = 0;
+        int countHighWays = 0;
         for (Way w : n.getParentWays()) {
             if (isSuitableParentWay(w)) {
                 ways.add(w);
+                if (w.hasKey("highway"))
+                    countHighWays++;
             }
             count++;
         }
-        boolean needsParentWays = n.isNew() || (!n.isOutsideDownloadArea() && n.getDataSet().getDataSourceArea() != null);
+
+        // ignore minor highways (footway, path etc) if a major highway is found
+        if (countHighWays > 1 && (n.hasKey("highway") || n.hasTag("traffic_sign", "city_limit"))) {
+            List<Way> minor = ways.stream().filter(w -> !w.hasTag("highway", Highways.CLASSIFIED_HIGHWAYS))
+                    .collect(Collectors.toList());
+            if (minor.size() != countHighWays) {
+                ways.removeAll(minor);
+            }
+        }
+        boolean needsParentWays = n.isNew()
+                || (!n.isOutsideDownloadArea() && n.getDataSet().getDataSourceArea() != null);
         TestError.Builder builder = null;
         if (ways.isEmpty() && needsParentWays) {
             if (count == 0) {
-                builder = TestError.builder(this, Severity.WARNING, NO_WAY_CODE).message(DIR_VERIF_PROBLEM_MSG,
-                        marktr("Unconnected node with {0}"), tag);
+                builder = TestError.builder(this, Severity.ERROR, NO_WAY_CODE).message(INVALID_USE_MSG,
+                        marktr("Unconnected node with {0}. Use angle or cardinal direction"), tag);
+            } else {
+                builder = TestError.builder(this, Severity.WARNING, NO_SUITABLE_WAY).message(INVALID_USE_MSG,
+                        marktr("Node with {0} should be connected to a linear way"), tag);
             }
-
         } else if (ways.size() == 1) {
             Way w = ways.get(0);
             if (w.firstNode() == n || w.lastNode() == n) {
-                builder = TestError.builder(this, Severity.WARNING, END_NODE_CODE).message(DIR_VERIF_PROBLEM_MSG,
+                builder = TestError.builder(this, Severity.OTHER, END_NODE_CODE).message(DISPUTED_USE_MSG,
                         marktr("Node with {0} on end of way"), tag);
             }
         } else if (ways.size() > 1) {
-            builder = TestError.builder(this, Severity.WARNING, MULTIPLE_WAYS_CODE).message(DIR_VERIF_PROBLEM_MSG,
+            builder = TestError.builder(this, Severity.OTHER, MULTIPLE_WAYS_CODE).message(DISPUTED_USE_MSG,
                     marktr("Node with {0} on a connection of multiple ways"), tag);
         }
Index: trunk/src/org/openstreetmap/josm/data/validation/tests/Highways.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/tests/Highways.java	(revision 17409)
+++ trunk/src/org/openstreetmap/josm/data/validation/tests/Highways.java	(revision 17411)
@@ -46,5 +46,5 @@
      */
     // CHECKSTYLE.OFF: SingleSpaceSeparator
-    private static final List<String> CLASSIFIED_HIGHWAYS = Arrays.asList(
+    static final List<String> CLASSIFIED_HIGHWAYS = Arrays.asList(
             "motorway",  "motorway_link",
             "trunk",     "trunk_link",
