Index: trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetSearchAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetSearchAction.java	(revision 4285)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetSearchAction.java	(revision 4286)
@@ -26,5 +26,5 @@
             return;
 
-        TaggingPresetSearchDialog dialog = new TaggingPresetSearchDialog(Main.parent);
+        TaggingPresetSearchDialog dialog = TaggingPresetSearchDialog.getInstance();
         dialog.showDialog();
     }
Index: trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetSearchDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetSearchDialog.java	(revision 4285)
+++ trunk/src/org/openstreetmap/josm/gui/tagging/TaggingPresetSearchDialog.java	(revision 4286)
@@ -54,10 +54,11 @@
 public class TaggingPresetSearchDialog extends ExtendedDialog {
 
-    private int CLASSIFICATION_NAME_MATCH = 300;
-    private int CLASSIFICATION_GROUP_MATCH = 200;
-    private int CLASSIFICATION_TAGS_MATCH = 100;
-
-    private final BooleanProperty SEARCH_IN_TAGS = new BooleanProperty("taggingpreset.dialog.search-in-tags", true);
-    private final BooleanProperty ONLY_APPLICABLE  = new BooleanProperty("taggingpreset.dialog.only-applicable-to-selection", true);
+    private static final int CLASSIFICATION_IN_FAVORITES = 300;
+    private static final int CLASSIFICATION_NAME_MATCH = 300;
+    private static final int CLASSIFICATION_GROUP_MATCH = 200;
+    private static final int CLASSIFICATION_TAGS_MATCH = 100;
+
+    private static final BooleanProperty SEARCH_IN_TAGS = new BooleanProperty("taggingpreset.dialog.search-in-tags", true);
+    private static final BooleanProperty ONLY_APPLICABLE  = new BooleanProperty("taggingpreset.dialog.only-applicable-to-selection", true);
 
     private static class ResultListCellRenderer extends DefaultListCellRenderer {
@@ -101,4 +102,5 @@
         public final TaggingPreset preset;
         public int classification;
+        public int favoriteIndex;
         private final Collection<String> groups = new HashSet<String>();
         private final Collection<String> names = new HashSet<String>();
@@ -190,4 +192,11 @@
     }
 
+    private static TaggingPresetSearchDialog instance;
+    public static TaggingPresetSearchDialog getInstance() {
+        if (instance == null) {
+            instance = new TaggingPresetSearchDialog();
+        }
+        return instance;
+    }
 
     private JTextField edSearchText;
@@ -199,6 +208,6 @@
     private ResultListModel lsResultModel = new ResultListModel();
 
-    public TaggingPresetSearchDialog(Component parent) {
-        super(parent, tr("Presets"), new String[] {tr("Select"), tr("Cancel")});
+    private TaggingPresetSearchDialog() {
+        super(Main.parent, tr("Presets"), new String[] {tr("Select"), tr("Cancel")});
         getTypesInSelection();
 
@@ -213,4 +222,12 @@
         build();
         filterPresets("");
+    }
+
+    @Override
+    public ExtendedDialog showDialog() {
+        super.showDialog();
+        edSearchText.setText("");
+        lsResult.getSelectionModel().clearSelection();
+        return this;
     }
 
@@ -336,5 +353,5 @@
      */
     private void filterPresets(String text) {
-        //TODO Favorites
+        //TODO Save favorites to file
         text = text.toLowerCase();
 
@@ -398,4 +415,5 @@
 
                 if (presetClasification.classification > 0) {
+                    presetClasification.classification += presetClasification.favoriteIndex;
                     result.add(presetClasification);
                 }
@@ -433,5 +451,13 @@
                 selectPreset = 0;
             }
-            lsResultModel.getPresets().get(selectPreset).preset.actionPerformed(null);
+            TaggingPreset preset = lsResultModel.getPresets().get(selectPreset).preset;
+            for (PresetClasification pc: classifications) {
+                if (pc.preset == preset) {
+                    pc.favoriteIndex = CLASSIFICATION_IN_FAVORITES;
+                } else if (pc.favoriteIndex > 0) {
+                    pc.favoriteIndex--;
+                }
+            }
+            preset.actionPerformed(null);
         }
 
