Index: /trunk/src/org/openstreetmap/josm/data/osm/Node.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/Node.java	(revision 16076)
+++ /trunk/src/org/openstreetmap/josm/data/osm/Node.java	(revision 16077)
@@ -430,3 +430,8 @@
         return idGenerator;
     }
+
+    @Override
+    protected void updateDirectionFlags() {
+        // Nodes do not need/have a direction, greatly improves performance, see #18886
+    }
 }
Index: /trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 16076)
+++ /trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 16077)
@@ -607,5 +607,5 @@
     }
 
-    private void updateDirectionFlags() {
+    protected void updateDirectionFlags() {
         boolean hasDirections = false;
         boolean directionReversed = false;
Index: /trunk/test/unit/org/openstreetmap/josm/data/osm/NodeTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/data/osm/NodeTest.java	(revision 16076)
+++ /trunk/test/unit/org/openstreetmap/josm/data/osm/NodeTest.java	(revision 16077)
@@ -130,3 +130,10 @@
     }
 
+    /**
+     * Test that {@link Node#hasDirectionKeys} is not set.
+     */
+    @Test
+    public void testDirectional() {
+        assertFalse(OsmUtils.createPrimitive("node oneway=yes").hasDirectionKeys());
+    }
 }
