Index: applications/editors/josm/plugins/roadsigns/build.xml
===================================================================
--- applications/editors/josm/plugins/roadsigns/build.xml	(revision 22411)
+++ applications/editors/josm/plugins/roadsigns/build.xml	(revision 22420)
@@ -31,5 +31,5 @@
 
 	<!-- enter the SVN commit message -->
-	<property name="commit.message" value="fix message/i18n" />
+	<property name="commit.message" value="added support for traffic_sign tag" />
 	<!-- enter the *lowest* JOSM version this plugin is currently compatible with -->
 	<property name="plugin.main.version" value="3338" />
Index: applications/editors/josm/plugins/roadsigns/data/defaultroadsignpreset.xml
===================================================================
--- applications/editors/josm/plugins/roadsigns/data/defaultroadsignpreset.xml	(revision 22411)
+++ applications/editors/josm/plugins/roadsigns/data/defaultroadsignpreset.xml	(revision 22420)
@@ -11,6 +11,6 @@
 (or enter it in the advanced preferences tab in JOSM):
 
-plugin.roadsign.sources=/path/to/myroadsignpreset.xml
-plugin.roadsign.icon.sources=/path/to/image/folder
+plugin.roadsigns.sources=/path/to/myroadsignpreset.xml
+plugin.roadsigns.icon.sources=/path/to/image/folder
 
 (The second one is only needed if you like to display your own icons.)
@@ -23,13 +23,14 @@
 
 sign:
-    ref             Short official designation of the sign that can be used for the traffic_sign tag. (accepts parameters)
-    id              Unique identifier. (If missing, equals ref. Either id or ref must be present.)
-    icon            Icon image name. (If missing, id or ref is used as image name. In this case ':' and '.' characters are converted to underscore '_'.)
-    name            Name of the sign. (required)
-    long_name       Long (e.g. official) name of the sign.
-    help            Some notes to guide the user.
-    wiki            Page in the osm wiki
-    deprecated      Set to "yes" if authorities have decided to no longer install signs of this kind.
-                    (But old signs may still be there and need to be recorded.)
+    ref                 Short official designation of the sign that can be used for the traffic_sign tag. (accepts parameters)
+    id                  Unique identifier. (If missing, equals ref. Either id or ref must be present.)
+    icon                Icon image name. (If missing, id or ref is used as image name. In this case ':' and '.' characters are converted to underscore '_'.)
+    name                Name of the sign. (required)
+    long_name           Long (e.g. official) name of the sign.
+    traffic_sign_tag    Value that should be used for traffic_sign tag (if different from ref).
+    help                Some notes to guide the user.
+    wiki                Page in the osm wiki
+    deprecated          Set to "yes" if authorities have decided to no longer install signs of this kind.
+                        (But old signs may still be there and need to be recorded.)
 
 tag:
@@ -69,5 +70,5 @@
 -->
 <roadsignpreset country="DE">
-    <sign ref="DE:110" name="Incline" de.name="Steigung"
+    <sign ref="DE:108/DE:110" icon="DE_110" traffic_sign_tag="" name="Incline" de.name="Steigung"
             help="Applies for the road section with steep incline. (Split the way at the ends of the steep section.) 
 Positive values indicate movement upward in the direction of the (osm) way and negative values indicate movement downwards in the direction of the way."
@@ -76,4 +77,8 @@
             wiki="Key:incline"
             de.wiki="DE:Key:incline">
+        <!--Suppress the traffic_sign tag, because it would be incorrect to add
+            traffic_sign=DE:110, when in reality it is DE:108.
+            Both are essentially equal, so in this tool only the incline symbol
+            should be present.-->
         <tag key="incline" value="$val%"/>
         <parameter input="textfield" name="max. incline" de.name="Maximale Steigung" type="int" ident="val" default="12" suffix="%" field_width="3"/>
Index: applications/editors/josm/plugins/roadsigns/src/org/openstreetmap/josm/plugins/roadsigns/ParametrizedString.java
===================================================================
--- applications/editors/josm/plugins/roadsigns/src/org/openstreetmap/josm/plugins/roadsigns/ParametrizedString.java	(revision 22411)
+++ applications/editors/josm/plugins/roadsigns/src/org/openstreetmap/josm/plugins/roadsigns/ParametrizedString.java	(revision 22420)
@@ -1,3 +1,3 @@
-//License: GPL (v2 or later)
+// License: GPL (v2 or later)
 package org.openstreetmap.josm.plugins.roadsigns;
 
Index: applications/editors/josm/plugins/roadsigns/src/org/openstreetmap/josm/plugins/roadsigns/RoadSignInputDialog.java
===================================================================
--- applications/editors/josm/plugins/roadsigns/src/org/openstreetmap/josm/plugins/roadsigns/RoadSignInputDialog.java	(revision 22411)
+++ applications/editors/josm/plugins/roadsigns/src/org/openstreetmap/josm/plugins/roadsigns/RoadSignInputDialog.java	(revision 22420)
@@ -11,4 +11,5 @@
 import java.awt.Rectangle;
 import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
@@ -24,4 +25,5 @@
 
 import javax.swing.BorderFactory;
+import javax.swing.JCheckBox;
 import javax.swing.JComponent;
 import javax.swing.JEditorPane;
@@ -52,4 +54,5 @@
 import org.openstreetmap.josm.plugins.roadsigns.Sign.SignParameter;
 import org.openstreetmap.josm.plugins.roadsigns.Sign.Tag;
+import org.openstreetmap.josm.tools.GBC;
 import org.openstreetmap.josm.tools.OpenBrowser;
 import org.openstreetmap.josm.tools.Pair;
@@ -69,14 +72,15 @@
  */
 class RoadSignInputDialog extends ExtendedDialog {
-    private final SignSelection sel;
-    private final List<Sign> signs;
-    private JTable previewTable;
-
-    private PreviewTableModel previewModel;
-    private JPanel pnlSignSelection;
-    private JPanel pnlPossibleSigns;
-    private JPanel pnlPossibleSupplements;
-    private JEditorPane info;
-    private JScrollPane scrollInfo;
+    protected final SignSelection sel;
+    protected final List<Sign> signs;
+    protected JTable previewTable;
+    protected JCheckBox addTrafficSignTag;
+
+    protected PreviewTableModel previewModel;
+    protected JPanel pnlSignSelection;
+    protected JPanel pnlPossibleSigns;
+    protected JPanel pnlPossibleSupplements;
+    protected JEditorPane info;
+    protected JScrollPane scrollInfo;
 
     public RoadSignInputDialog(List<Sign> signs) {
@@ -93,4 +97,6 @@
             Collection<OsmPrimitive> selPrim = Main.main.getCurrentDataSet().getSelected();
             if (selPrim.size() != 0) {
+                Main.pref.put("plugin.roadsigns.addTrafficSignTag", addTrafficSignTag.isSelected());
+
                 Command cmd = createCommand(selPrim);
                 if (cmd != null) {
@@ -464,7 +470,18 @@
 
     public JComponent buildPreviewPanel() {
+        JPanel previewPanel = new JPanel(new GridBagLayout());
+        
         String[] columnNames = {tr("Key"), tr("Value")};
         String[][] data = {{}};
-        previewTable = new JTable(data, columnNames);
+        previewTable = new JTable(data, columnNames) {
+            public String getToolTipText(MouseEvent e) {
+                int rowIndex = rowAtPoint(e.getPoint());
+                int colIndex = columnAtPoint(e.getPoint());
+                if (rowIndex == -1 || colIndex == -1)
+                    return null;
+                int realColumnIndex = convertColumnIndexToModel(colIndex);
+                return (String) getValueAt(rowIndex, colIndex);
+            }
+        };
         previewTable.setFillsViewportHeight(true);
         previewTable.setRowSelectionAllowed(false);
@@ -475,8 +492,19 @@
 
         JScrollPane scroll = new JScrollPane(previewTable);
-        Dimension dim = new Dimension(236, 10);
+        Dimension dim = new Dimension(336, 10);
         scroll.setPreferredSize(dim);
         scroll.setMinimumSize(dim); /* minimum size is relevant for multisplit layout */
-        return scroll;
+        
+        addTrafficSignTag = new JCheckBox(tr("{0} tag", "traffic_sign"));
+        addTrafficSignTag.setSelected(Main.pref.getBoolean("plugin.roadsigns.addTrafficSignTag"));
+        addTrafficSignTag.addActionListener(new ActionListener() {
+            public void actionPerformed(ActionEvent e) {
+                previewModel.update();
+            }
+        });
+        
+        previewPanel.add(scroll, GBC.eol().fill());
+        previewPanel.add(addTrafficSignTag, GBC.eol());
+        return previewPanel;
     }
 
@@ -515,6 +543,9 @@
         public void update() {
             final TreeMap<String, String> map= new TreeMap<String, String>();
+            String traffic_sign = "";
+            
             for (SignCombination sc : sel.combos) {
                 final Map<String, String> env = new HashMap<String, String>();
+                String combo_traffic_sign = "";
 
                 /**
@@ -573,4 +604,12 @@
                     if (sw.sign.ref != null) {
                         sw.signRef = sw.sign.ref.evaluate(env);
+                        if (combo_traffic_sign.length() != 0) {
+                            combo_traffic_sign += ",";
+                        }
+                        if (sw.sign.traffic_sign_tag != null) {
+                            combo_traffic_sign += sw.sign.traffic_sign_tag.evaluate(env);
+                        } else {
+                            combo_traffic_sign += sw.signRef;
+                        }
                     }
                     for (Tag t : sw.sign.tags) {
@@ -615,4 +654,14 @@
                     map.putAll(result);
                 }
+                
+                if (combo_traffic_sign.length() != 0) {
+                    if (traffic_sign.length() != 0) {
+                        traffic_sign += ";";
+                    }
+                    traffic_sign += combo_traffic_sign;
+                }
+            }
+            if (addTrafficSignTag.isSelected()) {
+                map.put("traffic_sign", traffic_sign);
             }
 
Index: applications/editors/josm/plugins/roadsigns/src/org/openstreetmap/josm/plugins/roadsigns/RoadSignsPlugin.java
===================================================================
--- applications/editors/josm/plugins/roadsigns/src/org/openstreetmap/josm/plugins/roadsigns/RoadSignsPlugin.java	(revision 22411)
+++ applications/editors/josm/plugins/roadsigns/src/org/openstreetmap/josm/plugins/roadsigns/RoadSignsPlugin.java	(revision 22420)
@@ -68,10 +68,10 @@
         presetsLoaded=true;
         List<String> files = new ArrayList<String>(
-                Main.pref.getCollection("plugin.roadsign.sources",
+                Main.pref.getCollection("plugin.roadsigns.sources",
                     Collections.<String>singletonList("resource://data/defaultroadsignpreset.xml")));
         iconDirs = new ArrayList<String>(
-                Main.pref.getCollection("plugin.roadsign.icon.sources", Collections.<String>emptySet()));
+                Main.pref.getCollection("plugin.roadsigns.icon.sources", Collections.<String>emptySet()));
 
-        if (Main.pref.getBoolean("plugin.roadsign.use_default_icon_source", true)) {
+        if (Main.pref.getBoolean("plugin.roadsigns.use_default_icon_source", true)) {
             iconDirs.add("resource://images/");
         }
Index: applications/editors/josm/plugins/roadsigns/src/org/openstreetmap/josm/plugins/roadsigns/RoadSignsReader.java
===================================================================
--- applications/editors/josm/plugins/roadsigns/src/org/openstreetmap/josm/plugins/roadsigns/RoadSignsReader.java	(revision 22411)
+++ applications/editors/josm/plugins/roadsigns/src/org/openstreetmap/josm/plugins/roadsigns/RoadSignsReader.java	(revision 22420)
@@ -77,4 +77,5 @@
                 try {
                     curSign.ref = ParametrizedString.create(atts.getValue("ref"));
+                    curSign.traffic_sign_tag = ParametrizedString.create(atts.getValue("traffic_sign_tag"));
                 } catch (ParseException ex) {
                     throw new SAXException(ex);
@@ -107,5 +108,5 @@
                     curSign.isSupplementing = true;
                 }
-
+                
                 curSign.wiki = atts.getValue("wiki");
                 curSign.loc_wiki = getLocalized(atts, "wiki");
Index: applications/editors/josm/plugins/roadsigns/src/org/openstreetmap/josm/plugins/roadsigns/Sign.java
===================================================================
--- applications/editors/josm/plugins/roadsigns/src/org/openstreetmap/josm/plugins/roadsigns/Sign.java	(revision 22411)
+++ applications/editors/josm/plugins/roadsigns/src/org/openstreetmap/josm/plugins/roadsigns/Sign.java	(revision 22420)
@@ -21,4 +21,5 @@
     public String id;
     public ParametrizedString ref;
+    public ParametrizedString traffic_sign_tag;
     public String iconURL;
     public ImageIcon icon;
@@ -99,5 +100,5 @@
         r = r.replaceAll("\\[.*\\]", "");
         if (r.startsWith("DE:")) {
-            r=r.replaceFirst("DE:", "");
+            r=r.replaceAll("DE:", "");
             /* normal sign: starts with 3 digits, then a non-digit */
             {
