Index: trunk/src/org/openstreetmap/josm/gui/preferences/TaggingPresetPreference.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/preferences/TaggingPresetPreference.java	(revision 877)
+++ trunk/src/org/openstreetmap/josm/gui/preferences/TaggingPresetPreference.java	(revision 878)
@@ -138,4 +138,5 @@
 				{
 					JMenu submenu = new JMenu(p);
+					((TaggingPresetMenu)p).menu = submenu;
 					submenus.put((TaggingPresetMenu)p, submenu);
 					m.add(submenu);
Index: trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetMenu.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetMenu.java	(revision 877)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetMenu.java	(revision 878)
@@ -4,9 +4,17 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
+import java.awt.event.ActionEvent;
+import java.awt.Component;
+
 import javax.swing.Action;
+import javax.swing.JMenu;
+import javax.swing.JMenuItem;
+import javax.swing.JPopupMenu;
+import javax.swing.JSeparator;
 
 import org.openstreetmap.josm.gui.tagging.TaggingPreset;
 
 public class TaggingPresetMenu extends TaggingPreset {
+	public JMenu menu = null; // set by TaggingPresetPreferences
 	public void setDisplayName() {
 		String n = getName();
@@ -18,3 +26,23 @@
 		super.setIcon(iconName);
 	}
+	public void actionPerformed(ActionEvent e) {
+		Object s = e.getSource();
+		if(menu != null && s instanceof Component)
+		{
+			Component co = (Component)s;
+			JPopupMenu pm = new JPopupMenu(getName());
+			for(Component c : menu.getMenuComponents())
+			{
+				if(c instanceof JMenuItem)
+				{
+					JMenuItem j = new JMenuItem(((JMenuItem)c).getAction());
+					j.setText(((JMenuItem)c).getText());
+					pm.add(j);
+				}
+				else if(c instanceof JSeparator)
+					pm.addSeparator();
+			}
+			pm.show(co, co.getWidth()/2, co.getHeight()/2);
+		}
+	}
 }
