Index: src/org/openstreetmap/josm/data/osm/DataSet.java
===================================================================
--- src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 11437)
+++ src/org/openstreetmap/josm/data/osm/DataSet.java	(working copy)
@@ -977,7 +977,13 @@
         Set<Way> result = new HashSet<>();
         beginUpdate();
         try {
-            for (Way way: ways) {
+            List<Way> refWays = new ArrayList<>();
+            for (OsmPrimitive ref : node.getReferrers()) {
+                if (ref instanceof Way) {
+                    refWays.add((Way) ref);
+                }
+            }
+            for (Way way : refWays) {
                 List<Node> wayNodes = way.getNodes();
                 if (wayNodes.remove(node)) {
                     if (wayNodes.size() < 2) {
Index: test/unit/org/openstreetmap/josm/data/osm/DataSetTest.java
===================================================================
--- test/unit/org/openstreetmap/josm/data/osm/DataSetTest.java	(revision 11437)
+++ test/unit/org/openstreetmap/josm/data/osm/DataSetTest.java	(working copy)
@@ -1,14 +1,16 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.data.osm;
 
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.Assert;
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.Assert;
+import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.testutils.JOSMTestRules;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-import java.util.List;
-import org.openstreetmap.josm.data.coor.LatLon;
 
 /**
  * Unit tests for class {@link DataSet}.
@@ -33,14 +35,14 @@
             "Empty data set should produce an empty list.",
             ds.searchRelations(null).isEmpty()
         );
-        
+
         // empty data set, any bbox => empty list
-        BBox bbox = new BBox(LatLon.NORTH_POLE, LatLon.SOUTH_POLE);
+        BBox bbox = new BBox(new LatLon(-180, -90), new LatLon(180, 90));
         Assert.assertTrue(
             "Empty data set should produce an empty list.",
             ds.searchRelations(bbox).isEmpty()
         );
-        
+
         // data set with elements in the given bbox => these elements
         Node node = new Node(LatLon.ZERO);
         Relation r = new Relation(1);
@@ -52,6 +54,24 @@
         List<Relation> result = ds.searchRelations(bbox);
         Assert.assertEquals("We should have found only one item.", 1, result.size());
         Assert.assertTrue("The item found is relation r.", result.contains(r));
-        
     }
+
+    @Test
+    public void testErr14186() {
+        final DataSet ds = new DataSet();
+        Node n1 = new Node(1);
+        Node n2 = new Node(2);
+        Node n3 = new Node(3);
+        Way w1 = new Way(1);
+        w1.setNodes(Arrays.asList(n1, n2, n3));
+        Way w2 = new Way(2);
+        w2.setNodes(Arrays.asList(n1, n2, n3));
+        ds.addPrimitive(n1);
+        ds.addPrimitive(n2);
+        ds.addPrimitive(n3);
+        ds.addPrimitive(w1);
+        ds.addPrimitive(w2);
+        ds.unlinkNodeFromWays(n2);
+    }
+
 }
