Index: trunk/src/org/openstreetmap/josm/actions/search/SearchAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/search/SearchAction.java	(revision 3175)
+++ trunk/src/org/openstreetmap/josm/actions/search/SearchAction.java	(revision 3176)
@@ -66,5 +66,47 @@
     }
 
-    public static final LinkedList<SearchSetting> searchHistory = new LinkedList<SearchSetting>();
+    private static LinkedList<SearchSetting> searchHistory = null;
+
+    public static Collection<SearchSetting> getSearchHistory() {
+        if (searchHistory == null) {
+            searchHistory = new LinkedList<SearchSetting>();
+            for (String s: Main.pref.getCollection("search.history", Collections.<String>emptyList())) {
+                SearchSetting ss = SearchSetting.readFromString(s);
+                if (ss != null) {
+                    searchHistory.add(ss);
+                }
+            }
+        }
+
+        return searchHistory;
+    }
+
+    public static void saveToHistory(SearchSetting s) {
+        if(searchHistory.isEmpty() || !s.equals(searchHistory.getFirst())) {
+            searchHistory.addFirst(new SearchSetting(s));
+        }
+        int maxsize = Main.pref.getInteger("search.history-size", DEFAULT_SEARCH_HISTORY_SIZE);
+        while (searchHistory.size() > maxsize) {
+            searchHistory.removeLast();
+        }
+        List<String> savedHistory = new ArrayList<String>();
+        for (SearchSetting item: searchHistory) {
+            savedHistory.add(item.writeToString());
+        }
+        Main.pref.putCollection("search.history", savedHistory);
+    }
+
+    public static List<String> getSearchExpressionHistory() {
+        ArrayList<String> ret = new ArrayList<String>(getSearchHistory().size());
+        for (SearchSetting ss: getSearchHistory()) {
+            ret.add(ss.text);
+        }
+        return ret;
+    }
+
+
+
+
+
 
     private static SearchSetting lastSearch = null;
@@ -88,12 +130,4 @@
             searchWithoutHistory((SearchSetting) parameters.get(SEARCH_EXPRESSION));
         }
-    }
-
-    public static List<String> getSearchExpressionHistory() {
-        ArrayList<String> ret = new ArrayList<String>(searchHistory.size());
-        for (SearchSetting ss: searchHistory) {
-            ret.add(ss.text);
-        }
-        return ret;
     }
 
@@ -222,11 +256,5 @@
      */
     public static void searchWithHistory(SearchSetting s) {
-        if(searchHistory.isEmpty() || !s.equals(searchHistory.getFirst())) {
-            searchHistory.addFirst(new SearchSetting(s));
-        }
-        int maxsize = Main.pref.getInteger("search.history-size", DEFAULT_SEARCH_HISTORY_SIZE);
-        while (searchHistory.size() > maxsize) {
-            searchHistory.removeLast();
-        }
+        saveToHistory(s);
         lastSearch = new SearchSetting(s);
         search(s);
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 3175)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/SelectionListDialog.java	(revision 3176)
@@ -83,4 +83,5 @@
  */
 public class SelectionListDialog extends ToggleDialog  {
+    @SuppressWarnings("unused")
     static private final Logger logger = Logger.getLogger(SelectionListDialog.class.getName());
 
@@ -639,5 +640,5 @@
      */
     protected static class SearchMenuItem extends JMenuItem implements ActionListener {
-        protected SearchSetting s;
+        final protected SearchSetting s;
 
         public SearchMenuItem(SearchSetting s) {
@@ -658,5 +659,5 @@
     protected static class SearchPopupMenu extends JPopupMenu {
         static public void launch(Component parent) {
-            if (org.openstreetmap.josm.actions.search.SearchAction.searchHistory.isEmpty())
+            if (org.openstreetmap.josm.actions.search.SearchAction.getSearchHistory().isEmpty())
                 return;
             JPopupMenu menu = new SearchPopupMenu();
@@ -666,5 +667,5 @@
 
         public SearchPopupMenu() {
-            for (SearchSetting ss: org.openstreetmap.josm.actions.search.SearchAction.searchHistory) {
+            for (SearchSetting ss: org.openstreetmap.josm.actions.search.SearchAction.getSearchHistory()) {
                 add(new SearchMenuItem(ss));
             }
