Index: trunk/src/org/openstreetmap/josm/data/osm/DataSet.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 11439)
+++ trunk/src/org/openstreetmap/josm/data/osm/DataSet.java	(revision 11440)
@@ -978,5 +978,5 @@
         beginUpdate();
         try {
-            for (Way way: ways) {
+            for (Way way : OsmPrimitive.getFilteredList(node.getReferrers(), Way.class)) {
                 List<Node> wayNodes = way.getNodes();
                 if (wayNodes.remove(node)) {
Index: trunk/test/unit/org/openstreetmap/josm/data/osm/DataSetTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/data/osm/DataSetTest.java	(revision 11439)
+++ trunk/test/unit/org/openstreetmap/josm/data/osm/DataSetTest.java	(revision 11440)
@@ -2,12 +2,14 @@
 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;
 
 /**
@@ -34,12 +36,12 @@
             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);
@@ -53,5 +55,25 @@
         Assert.assertEquals("We should have found only one item.", 1, result.size());
         Assert.assertTrue("The item found is relation r.", result.contains(r));
-        
+    }
+
+    /**
+     * Non-regression test for <a href="https://josm.openstreetmap.de/ticket/14186">Bug #14186</a>.
+     */
+    @Test
+    public void testTicket14186() {
+        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);
     }
 }
