Index: trunk/src/org/openstreetmap/josm/data/vector/VectorDataStore.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/vector/VectorDataStore.java	(revision 18476)
+++ trunk/src/org/openstreetmap/josm/data/vector/VectorDataStore.java	(revision 18477)
@@ -17,4 +17,5 @@
 import java.util.Map;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 import org.openstreetmap.gui.jmapviewer.Tile;
@@ -25,4 +26,5 @@
 import org.openstreetmap.josm.data.imagery.vectortile.VectorTile;
 import org.openstreetmap.josm.data.imagery.vectortile.mapbox.Feature;
+import org.openstreetmap.josm.data.imagery.vectortile.mapbox.GeometryTypes;
 import org.openstreetmap.josm.data.imagery.vectortile.mapbox.Layer;
 import org.openstreetmap.josm.data.osm.BBox;
@@ -294,10 +296,9 @@
         final Map<ILatLon, VectorNode> nodeMap = new HashMap<>();
         for (Layer layer : tile.getLayers()) {
-            for (Feature feature : layer.getFeatures()) {
-                try {
-                    addFeatureData(tile, layer, feature, nodeMap);
-                } catch (IllegalArgumentException e) {
-                    Logging.error("Cannot add vector data for feature {0} of tile {1}: {2}", feature, tile, e.getMessage());
-                    Logging.error(e);
+            Map<GeometryTypes, List<Feature>> grouped = layer.getFeatures().stream().collect(Collectors.groupingBy(Feature::getGeometryType));
+            // Unknown -> Point -> LineString -> Polygon
+            for (GeometryTypes type : GeometryTypes.values()) {
+                if (grouped.containsKey(type)) {
+                    addFeatureData(tile, layer, grouped.get(type), nodeMap);
                 }
             }
@@ -312,8 +313,19 @@
     }
 
+    private <T extends Tile & VectorTile> void addFeatureData(T tile, Layer layer, Collection<Feature> features, Map<ILatLon, VectorNode> nodeMap) {
+        for (Feature feature : features) {
+            try {
+                addFeatureData(tile, layer, feature, nodeMap);
+            } catch (IllegalArgumentException e) {
+                Logging.error("Cannot add vector data for feature {0} of tile {1}: {2}", feature, tile, e.getMessage());
+                Logging.error(e);
+            }
+        }
+    }
+
     private <T extends Tile & VectorTile> void addFeatureData(T tile, Layer layer, Feature feature, Map<ILatLon, VectorNode> nodeMap) {
         // This will typically be larger than primaryFeatureObjects, but this at least avoids quite a few ArrayList#grow calls
         List<VectorPrimitive> featureObjects = new ArrayList<>(feature.getGeometryObject().getShapes().size());
-        List<VectorPrimitive> primaryFeatureObjects = new ArrayList<>(featureObjects.size());
+        List<VectorPrimitive> primaryFeatureObjects = new ArrayList<>(feature.getGeometryObject().getShapes().size());
         for (Shape shape : feature.getGeometryObject().getShapes()) {
             primaryFeatureObjects.add(shapeToPrimaryFeatureObject(tile, layer, shape, featureObjects, nodeMap));
Index: trunk/test/unit/org/openstreetmap/josm/data/vector/VectorDataSetTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/data/vector/VectorDataSetTest.java	(revision 18476)
+++ trunk/test/unit/org/openstreetmap/josm/data/vector/VectorDataSetTest.java	(revision 18477)
@@ -1,4 +1,13 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.vector;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
 
 import org.awaitility.Awaitility;
@@ -14,13 +23,4 @@
 import org.openstreetmap.josm.gui.layer.imagery.MVTLayer;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
-
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
Index: trunk/test/unit/org/openstreetmap/josm/data/vector/VectorNodeTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/data/vector/VectorNodeTest.java	(revision 18476)
+++ trunk/test/unit/org/openstreetmap/josm/data/vector/VectorNodeTest.java	(revision 18477)
@@ -1,4 +1,15 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.vector;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
 
 import org.junit.jupiter.api.Test;
@@ -15,15 +26,4 @@
 import org.openstreetmap.josm.data.projection.ProjectionRegistry;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertSame;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.junit.jupiter.api.Assertions.fail;
 
 /**
@@ -144,8 +144,10 @@
         assertSame(way, node.getReferrers(true).get(0));
         // No dataset yet
+        assertTrue(node.isReferredByWays(1));
+        VectorDataSet dataSet = new VectorDataSet();
+        dataSet.addPrimitive(node);
+        // Way is not yet in dataset
         assertFalse(node.isReferredByWays(1));
-        VectorDataSet dataSet = new VectorDataSet();
         dataSet.addPrimitive(way);
-        dataSet.addPrimitive(node);
         assertTrue(node.isReferredByWays(1));
         assertFalse(node.isReferredByWays(2));
