Index: trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/Check.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/Check.java	(revision 17649)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/presets/items/Check.java	(revision 17650)
@@ -2,7 +2,4 @@
 package org.openstreetmap.josm.gui.tagging.presets.items;
 
-import java.awt.GridBagLayout;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -10,5 +7,4 @@
 import java.util.List;
 
-import javax.swing.JLabel;
 import javax.swing.JPanel;
 
@@ -17,4 +13,5 @@
 import org.openstreetmap.josm.data.osm.Tag;
 import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetItemGuiSupport;
+import org.openstreetmap.josm.gui.widgets.IconTextCheckBox;
 import org.openstreetmap.josm.gui.widgets.QuadStateCheckBox;
 import org.openstreetmap.josm.tools.GBC;
@@ -88,16 +85,5 @@
 
         if (icon != null) {
-            JPanel checkPanel = new JPanel(new GridBagLayout());
-            checkPanel.add(check, GBC.std());
-            JLabel label = new JLabel(locale_text);
-            addIcon(label);
-            label.addMouseListener(new MouseAdapter() {
-                @Override
-                public void mousePressed(MouseEvent e) {
-                    check.getMouseAdapter().mousePressed(e);
-                }
-            });
-            checkPanel.add(label);
-            checkPanel.add(new JLabel(), GBC.eol().fill());
+            JPanel checkPanel = IconTextCheckBox.wrap(check, locale_text, getIcon());
             p.add(checkPanel, GBC.eol()); // Do not fill, see #15104
         } else {
Index: trunk/src/org/openstreetmap/josm/gui/widgets/IconTextCheckBox.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/widgets/IconTextCheckBox.java	(revision 17650)
+++ trunk/src/org/openstreetmap/josm/gui/widgets/IconTextCheckBox.java	(revision 17650)
@@ -0,0 +1,52 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.widgets;
+
+import org.openstreetmap.josm.tools.GBC;
+
+import javax.swing.Icon;
+import javax.swing.JCheckBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.SwingConstants;
+import javax.swing.SwingUtilities;
+import java.awt.GridBagLayout;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+
+/**
+ * Allows using an icon as well as a text on a {@link JCheckBox}
+ */
+public interface IconTextCheckBox {
+
+    /**
+     * Wraps the checkbox to display an icon as well as a text
+     * @param check the checkbox
+     * @param text the label text to display
+     * @param icon the icon to display
+     * @return a wrapping component
+     */
+    static JPanel wrap(JCheckBox check, String text, Icon icon) {
+        JPanel panel = new JPanel(new GridBagLayout());
+        JLabel label = new JLabel(text, icon, SwingConstants.LEADING);
+
+        panel.add(check, GBC.std());
+        panel.add(label);
+        panel.add(new JLabel(), GBC.eol().fill());
+
+        label.addMouseListener(new MouseAdapter() {
+            @Override
+            public void mousePressed(MouseEvent e) {
+                if (!SwingUtilities.isLeftMouseButton(e)) {
+                    return;
+                }
+                if (check instanceof QuadStateCheckBox) {
+                    ((QuadStateCheckBox) check).nextState();
+                } else {
+                    check.setSelected(!check.isSelected());
+                }
+            }
+        });
+
+        return panel;
+    }
+}
