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 21995)
+++ 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 21995)
+++ 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 21995)
+++ 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 21995)
+++ 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 21995)
+++ 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 */
             {
