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 29228)
+++ applications/editors/josm/plugins/roadsigns/src/org/openstreetmap/josm/plugins/roadsigns/RoadSignInputDialog.java	(revision 29230)
@@ -29,4 +29,5 @@
 import javax.swing.BorderFactory;
 import javax.swing.Box;
+import javax.swing.ButtonGroup;
 import javax.swing.JButton;
 import javax.swing.JCheckBox;
@@ -36,4 +37,5 @@
 import javax.swing.JLabel;
 import javax.swing.JPanel;
+import javax.swing.JRadioButton;
 import javax.swing.JScrollPane;
 import javax.swing.JTabbedPane;
@@ -694,6 +696,4 @@
             fireTableDataChanged();
         }
-
-
     }
 
@@ -814,4 +814,5 @@
         private List<PresetMetaData> presetsData;
         private JComboBox selectionBox;
+        JRadioButton rbAll, rbUseful;
 
         public SettingsPanel(boolean standalone, final Action update) {
@@ -831,4 +832,27 @@
             this.add(selectionBox, GBC.eol().insets(0, 5, 5, 5));
             if (!standalone) {
+                String snd = "Hide signs that do not have an OSM tag assigned";
+
+                rbAll = new JRadioButton(tr("Show all signs"));
+                rbUseful = new JRadioButton(tr("Show a selection of the most useful signs"));
+
+                ButtonGroup grp = new ButtonGroup();
+                grp.add(rbAll);
+                grp.add(rbUseful);
+
+                String filterPref = Main.pref.get("plugin.roadsigns.preset.filter");
+                if (filterPref.equals("useful")) {
+                    rbUseful.setSelected(true);
+                } else {
+                    rbAll.setSelected(true);
+                }
+
+                JPanel pnFilter = new JPanel(new GridBagLayout());
+                pnFilter.setBorder(BorderFactory.createTitledBorder(tr("Filter")));
+                pnFilter.add(rbAll, GBC.eop());
+                pnFilter.add(rbUseful, GBC.eop());
+
+                this.add(pnFilter, GBC.eol().insets(5, 0, 5, 5));
+
                 JButton apply = new JButton(new AbstractAction(tr("Apply")) {
                     @Override
@@ -848,4 +872,15 @@
 
         public void apply() throws IOException {
+            String filter = null;
+            if (rbAll != null) {
+                if (rbAll.isSelected()) {
+                    filter = "all";
+                } else if (rbUseful.isSelected()) {
+                    filter = "useful";
+                }
+            }
+            if (filter != null) {
+                Main.pref.put("plugin.roadsigns.preset.filter", filter);
+            }
             RoadSignsPlugin.setSelectedPreset(presetsData.get(selectionBox.getSelectedIndex()));
         }
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 29228)
+++ applications/editors/josm/plugins/roadsigns/src/org/openstreetmap/josm/plugins/roadsigns/RoadSignsPlugin.java	(revision 29230)
@@ -183,5 +183,4 @@
         List<PresetMetaData> presetsData =  getAvailablePresetsMetaData();
         String code = Main.pref.get("plugin.roadsigns.preset.selection", null);
-        if (selectedPreset != null && selectedPreset.code.equals(code)) return;
 
         for (PresetMetaData data : presetsData) {
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 29228)
+++ applications/editors/josm/plugins/roadsigns/src/org/openstreetmap/josm/plugins/roadsigns/RoadSignsReader.java	(revision 29230)
@@ -22,11 +22,11 @@
 import org.xml.sax.helpers.DefaultHandler;
 
+import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.io.OsmDataParsingException;
 import org.openstreetmap.josm.plugins.roadsigns.Sign.SignParameter;
 import org.openstreetmap.josm.plugins.roadsigns.Sign.Tag;
-import org.openstreetmap.josm.tools.LanguageInfo;
-
 import org.openstreetmap.josm.plugins.roadsigns.javacc.ParseException;
 import org.openstreetmap.josm.plugins.roadsigns.javacc.TokenMgrError;
+import org.openstreetmap.josm.tools.LanguageInfo;
 
 /**
@@ -113,4 +113,9 @@
 
                 curSign.help = getLocalized(atts, "help");
+
+                String useful = atts.getValue("useful");
+                if (useful != null) {
+                    curSign.useful = Boolean.parseBoolean(useful);
+                }
 
             } else if (curSign != null && qname.equals("tag")) {
@@ -312,5 +317,16 @@
             factory.newSAXParser().parse(inputSource, parser);
             parser.wireSupplements();
-            return parser.allSigns;
+            String filterPref = Main.pref.get("plugin.roadsigns.preset.filter");
+            if (filterPref.equals("useful")) {
+                List<Sign> filtered = new ArrayList<Sign>();
+                for (Sign s : parser.allSigns) {
+                    if (s.isUseful()) {
+                        filtered.add(s);
+                    }
+                }
+                return filtered;
+            } else {
+                return parser.allSigns;
+            }
         } catch (ParserConfigurationException e) {
             e.printStackTrace(); // broken SAXException chaining
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 29228)
+++ applications/editors/josm/plugins/roadsigns/src/org/openstreetmap/josm/plugins/roadsigns/Sign.java	(revision 29230)
@@ -34,4 +34,5 @@
     public String wiki;
     public String help;
+    public Boolean useful;
 
     public JLabel label; // FIXME: don't put gui stuff here
@@ -120,4 +121,9 @@
     }
 
+    public boolean isUseful() {
+        if (useful != null) return useful;
+        return !tags.isEmpty();
+    }
+
     @Override
     public String toString() {
