Index: trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetMenu.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetMenu.java	(revision 2206)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetMenu.java	(revision 2208)
@@ -29,4 +29,26 @@
         super.setIcon(iconName);
     }
+
+    private Component copyMenuComponent(Component menuComponent) {
+        if (menuComponent instanceof JMenu) {
+            JMenu menu = (JMenu)menuComponent;
+            JMenu result = new JMenu(menu.getAction());
+            for (Component item:menu.getMenuComponents()) {
+                result.add(copyMenuComponent(item));
+            }
+            result.setText(menu.getText());
+            return result;
+        } else if (menuComponent instanceof JMenuItem) {
+            JMenuItem menuItem = (JMenuItem)menuComponent;
+            JMenuItem result = new JMenuItem(menuItem.getAction());
+            result.setText(menuItem.getText());
+            return result;
+        } else if(menuComponent instanceof JSeparator) {
+            return new JSeparator();
+        } else {
+            return menuComponent;
+        }
+    }
+
     public void actionPerformed(ActionEvent e) {
         Object s = e.getSource();
@@ -36,13 +58,6 @@
             JPopupMenu pm = new JPopupMenu(getName());
             for(Component c : menu.getMenuComponents())
+                pm.add(copyMenuComponent(c));
             {
-                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);
