Index: /trunk/data/defaultpresets.xml
===================================================================
--- /trunk/data/defaultpresets.xml	(revision 6189)
+++ /trunk/data/defaultpresets.xml	(revision 6190)
@@ -1056,11 +1056,13 @@
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Tag:highway=traffic_signals"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:highway=traffic_signals" />
+            <label text="Edit Traffic Signal" />
+            <space />
             <key key="highway" value="traffic_signals" />
-            <optional>
+            <optional text="Optional crossing attributes:">
                  <combo key="crossing" text="Pedestrian crossing type" values="uncontrolled,traffic_signals,island,unmarked,no,unknown" />
+                 <combo key="crossing_ref" text="Crossing type name (UK)" values="zebra,pelican,toucan,puffin,pegasus,tiger" />
+                 <check key="supervised" text="Crossing attendant" default="off" />
+                 <check key="bicycle" text="Cross by bicycle" default="off" />
                  <check key="horse" text="Cross on horseback" default="off" />
-                 <check key="bicycle" text="Cross by bicycle" default="off" />
-                 <check key="supervised" text="Crossing attendant" default="off" />
-                 <combo key="crossing_ref" text="Crossing type name (UK)" values="zebra,pelican,toucan,puffin,pegasus,tiger" />
             </optional>
         </item>
@@ -1079,4 +1081,6 @@
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Tag:highway=mini_roundabout" />
             <key key="highway" value="mini_roundabout" />
+            <label text="Edit Mini-Roundabout" />
+            <space />
             <combo key="direction" text="Direction" values="clockwise" />
         </item>
@@ -1089,11 +1093,12 @@
                   pt_BR.href="http://wiki.openstreetmap.org/wiki/Pt-br:Key:crossing"
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Key:crossing" />
-            <label text="Edit Crossing" />
+            <label text="Edit Pedestrian Crossing" />
+            <space />
             <key key="highway" value="crossing" />
-            <combo key="crossing" text="Type" values="uncontrolled,traffic_signals,island,unmarked,no,unknown" />
+            <combo key="crossing" text="Pedestrian crossing type" values="uncontrolled,traffic_signals,island,unmarked,no,unknown" />
+            <combo key="crossing_ref" text="Crossing type name (UK)" values="zebra,pelican,toucan,puffin,pegasus,tiger" />
+            <check key="supervised" text="Crossing attendant" default="off" />
             <check key="bicycle" text="Cross by bicycle" default="off" />
             <check key="horse" text="Cross on horseback" default="off" />
-            <check key="supervised" text="Crossing attendant" default="off" />
-            <combo key="crossing_ref" text="Type name (UK)" values="zebra,pelican,toucan,puffin,pegasus,tiger" />
         </item>
         <item name="Traffic Calming" icon="presets/chicane.png" type="node,way">
@@ -1107,4 +1112,5 @@
                   ru.href="http://wiki.openstreetmap.org/wiki/RU:Key:traffic_calming"/>
             <label text="Edit Traffic Calming" />
+            <space />
             <combo key="traffic_calming" text="Type" values="yes,bump,chicane,choker,cushion,hump,island,rumble_strip,table" match="key" />
         </item>
Index: /trunk/data/tagging-preset.xsd
===================================================================
--- /trunk/data/tagging-preset.xsd	(revision 6189)
+++ /trunk/data/tagging-preset.xsd	(revision 6190)
@@ -71,4 +71,6 @@
 	<complexType name="optional">
 		<group ref="tns:optional_elements" maxOccurs="unbounded" />
+        <attribute name="text" type="string" />
+        <attribute name="text_context" type="string" />
 	</complexType>
 
Index: /trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetItems.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetItems.java	(revision 6189)
+++ /trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetItems.java	(revision 6190)
@@ -295,51 +295,29 @@
     }
 
-    public static class Label extends TaggingPresetItem {
-
+    /**
+     * A tagging preset item displaying a localizable text.
+     * @since 6190
+     */
+    public static abstract class TaggingPresetTextItem extends TaggingPresetItem {
+
+        /**
+         * The text to display
+         */
         public String text;
+        
+        /**
+         * The context used for translating {@link #text}
+         */
         public String text_context;
+        
+        /**
+         * The localized version of {@link #text}
+         */
         public String locale_text;
 
-        @Override
-        public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
-            if (locale_text == null) {
-                if (text_context != null) {
-                    locale_text = trc(text_context, fixPresetString(text));
-                } else {
-                    locale_text = tr(fixPresetString(text));
-                }
-            }
-            p.add(new JLabel(locale_text), GBC.eol());
-            return false;
-        }
-
-        @Override
-        public void addCommands(List<Tag> changedTags) {
-        }
-
-        @Override
-        public String toString() {
-            return "Label ["
-                    + (text != null ? "text=" + text + ", " : "")
-                    + (text_context != null ? "text_context=" + text_context
-                            + ", " : "")
-                    + (locale_text != null ? "locale_text=" + locale_text : "")
-                    + "]";
-        }
-    }
-
-    public static class Link extends TaggingPresetItem {
-
-        public String href;
-        public String text;
-        public String text_context;
-        public String locale_text;
-        public String locale_href;
-
-        @Override
-        public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
+        protected final void initializeLocaleText(String defaultText) {
             if (locale_text == null) {
                 if (text == null) {
-                    locale_text = tr("More information about this feature");
+                    locale_text = defaultText;
                 } else if (text_context != null) {
                     locale_text = trc(text_context, fixPresetString(text));
@@ -348,4 +326,47 @@
                 }
             }
+        }
+
+        @Override
+        void addCommands(List<Tag> changedTags) {
+        }
+
+        protected String fieldsToString() {
+            return (text != null ? "text=" + text + ", " : "")
+                    + (text_context != null ? "text_context=" + text_context + ", " : "")
+                    + (locale_text != null ? "locale_text=" + locale_text : "");
+        }
+        
+        @Override
+        public String toString() {
+            return getClass().getSimpleName() + " [" + fieldsToString() + "]";
+        }
+    }
+
+    public static class Label extends TaggingPresetTextItem {
+
+        @Override
+        public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
+            initializeLocaleText(null);
+            p.add(new JLabel(locale_text), GBC.eol());
+            return false;
+        }
+    }
+
+    public static class Link extends TaggingPresetTextItem {
+
+        /**
+         * The link to display
+         */
+        public String href;
+        
+        /**
+         * The localized version of {@link #href}
+         */
+        public String locale_href;
+
+        @Override
+        public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
+            initializeLocaleText(tr("More information about this feature"));
             String url = locale_href;
             if (url == null) {
@@ -359,5 +380,8 @@
 
         @Override
-        public void addCommands(List<Tag> changedTags) {
+        protected String fieldsToString() {
+            return super.fieldsToString()
+                    + (href != null ? "href=" + href + ", " : "")
+                    + (locale_href != null ? "locale_href=" + locale_href + ", " : "");
         }
     }
@@ -389,22 +413,14 @@
     }
 
-    public static class Optional extends TaggingPresetItem {
+    public static class Optional extends TaggingPresetTextItem {
 
         // TODO: Draw a box around optional stuff
         @Override
         public boolean addToPanel(JPanel p, Collection<OsmPrimitive> sel) {
+            initializeLocaleText(tr("Optional Attributes:"));
             p.add(new JLabel(" "), GBC.eol()); // space
-            p.add(new JLabel(tr("Optional Attributes:")), GBC.eol());
+            p.add(new JLabel(locale_text), GBC.eol());
             p.add(new JLabel(" "), GBC.eol()); // space
             return false;
-        }
-
-        @Override
-        public void addCommands(List<Tag> changedTags) {
-        }
-
-        @Override
-        public String toString() {
-            return "Optional";
         }
     }
