Index: trunk/src/org/openstreetmap/josm/data/osm/IPrimitive.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/IPrimitive.java	(revision 13805)
+++ trunk/src/org/openstreetmap/josm/data/osm/IPrimitive.java	(revision 13806)
@@ -308,4 +308,12 @@
 
     /**
+     * <p>Visits {@code visitor} for all referrers.</p>
+     *
+     * @param visitor the visitor. Ignored, if null.
+     * @since 13806
+     */
+    void visitReferrers(PrimitiveVisitor visitor);
+
+    /**
      * Replies the name of this primitive. The default implementation replies the value
      * of the tag <code>name</code> or null, if this tag is not present.
Index: trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 13805)
+++ trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 13806)
@@ -19,4 +19,5 @@
 import java.util.Objects;
 import java.util.Set;
+import java.util.function.Consumer;
 
 import org.openstreetmap.josm.data.osm.search.SearchCompiler;
@@ -24,4 +25,5 @@
 import org.openstreetmap.josm.data.osm.search.SearchParseError;
 import org.openstreetmap.josm.data.osm.visitor.OsmPrimitiveVisitor;
+import org.openstreetmap.josm.data.osm.visitor.PrimitiveVisitor;
 import org.openstreetmap.josm.gui.mappaint.StyleCache;
 import org.openstreetmap.josm.spi.preferences.Config;
@@ -998,5 +1000,15 @@
      */
     public void visitReferrers(OsmPrimitiveVisitor visitor) {
-        if (visitor == null) return;
+        if (visitor != null)
+            doVisitReferrers(o -> o.accept(visitor));
+    }
+
+    @Override
+    public void visitReferrers(PrimitiveVisitor visitor) {
+        if (visitor != null)
+            doVisitReferrers(o -> o.accept(visitor));
+    }
+
+    private void doVisitReferrers(Consumer<OsmPrimitive> visitor) {
         if (this.referrers == null)
             return;
@@ -1004,5 +1016,5 @@
             OsmPrimitive ref = (OsmPrimitive) this.referrers;
             if (ref.dataSet == dataSet) {
-                ref.accept(visitor);
+                visitor.accept(ref);
             }
         } else if (this.referrers instanceof OsmPrimitive[]) {
@@ -1010,5 +1022,5 @@
             for (OsmPrimitive ref: refs) {
                 if (ref.dataSet == dataSet) {
-                    ref.accept(visitor);
+                    visitor.accept(ref);
                 }
             }
Index: trunk/src/org/openstreetmap/josm/data/osm/PrimitiveData.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/PrimitiveData.java	(revision 13805)
+++ trunk/src/org/openstreetmap/josm/data/osm/PrimitiveData.java	(revision 13806)
@@ -13,4 +13,5 @@
 import java.util.Map;
 
+import org.openstreetmap.josm.data.osm.visitor.PrimitiveVisitor;
 import org.openstreetmap.josm.gui.mappaint.StyleCache;
 
@@ -170,4 +171,9 @@
 
     @Override
+    public void visitReferrers(PrimitiveVisitor visitor) {
+        // Override if needed
+    }
+
+    @Override
     public StyleCache getCachedStyle() {
         return null;
