Index: trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java	(revision 16279)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/presets/TaggingPreset.java	(revision 16280)
@@ -20,4 +20,5 @@
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 import java.util.concurrent.CompletableFuture;
@@ -307,5 +308,4 @@
         PresetPanel p = new PresetPanel();
         List<Link> l = new LinkedList<>();
-        List<PresetLink> presetLink = new LinkedList<>();
 
         final JPanel pp = new JPanel();
@@ -336,27 +336,25 @@
         boolean presetInitiallyMatches = !selected.isEmpty() && selected.stream().allMatch(this);
         JPanel items = new JPanel(new GridBagLayout());
+        TaggingPresetItem previous = null;
         for (TaggingPresetItem i : data) {
             if (i instanceof Link) {
                 l.add((Link) i);
                 p.hasElements = true;
-            } else if (i instanceof PresetLink) {
-                presetLink.add((PresetLink) i);
             } else {
+                if (i instanceof PresetLink) {
+                    PresetLink link = (PresetLink) i;
+                    if (!(previous instanceof PresetLink && Objects.equals(((PresetLink) previous).text, link.text))) {
+                        items.add(link.createLabel(), GBC.eol().insets(0, 8, 0, 0));
+                    }
+                }
                 if (i.addToPanel(items, selected, presetInitiallyMatches)) {
                     p.hasElements = true;
                 }
             }
+            previous = i;
         }
         p.add(items, GBC.eol().fill());
         if (selected.isEmpty() && !supportsRelation()) {
             GuiHelper.setEnabledRec(items, false);
-        }
-
-        // add PresetLink
-        if (!presetLink.isEmpty()) {
-            p.add(new JLabel(tr("Edit also …")), GBC.eol().insets(0, 8, 0, 0));
-            for (PresetLink link : presetLink) {
-                link.addToPanel(p, selected, presetInitiallyMatches);
-            }
         }
 
Index: trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/PresetLink.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/PresetLink.java	(revision 16279)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/PresetLink.java	(revision 16280)
@@ -1,4 +1,6 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.gui.tagging.presets.items;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.event.MouseAdapter;
@@ -14,5 +16,4 @@
 import org.openstreetmap.josm.data.osm.Tag;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset;
-import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetItem;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetLabel;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets;
@@ -23,5 +24,5 @@
  * @since 8863
  */
-public class PresetLink extends TaggingPresetItem {
+public class PresetLink extends TextItem {
 
     static final class TaggingPresetMouseAdapter extends MouseAdapter {
@@ -40,4 +41,13 @@
     /** The exact name of the preset to link to. Required. */
     public String preset_name = ""; // NOSONAR
+
+    /**
+     * Creates a label to be inserted aboive this link
+     * @return a label
+     */
+    public JLabel createLabel() {
+        initializeLocaleText(tr("Edit also …"));
+        return new JLabel(locale_text);
+    }
 
     @Override
