Index: trunk/src/org/openstreetmap/josm/gui/download/PlaceSelection.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/download/PlaceSelection.java	(revision 2361)
+++ trunk/src/org/openstreetmap/josm/gui/download/PlaceSelection.java	(revision 2362)
@@ -18,4 +18,5 @@
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
@@ -49,4 +50,5 @@
 import org.openstreetmap.josm.gui.ExceptionDialogUtil;
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
+import org.openstreetmap.josm.gui.widgets.HistoryComboBox;
 import org.openstreetmap.josm.io.OsmTransferException;
 import org.openstreetmap.josm.tools.ImageProvider;
@@ -57,6 +59,7 @@
 
 public class PlaceSelection implements DownloadSelection {
-
-    private JTextField tfSearchExpression;
+    private static final String HISTORY_KEY = "download.places.history";
+
+    private HistoryComboBox cbSearchExpression;
     private JButton btnSearch;
     private NamedResultTableModel model;
@@ -79,10 +82,13 @@
         // the search expression field
         //
-        tfSearchExpression = new JTextField();
-        tfSearchExpression.setToolTipText(tr("Enter a place name to search for"));
+        cbSearchExpression = new HistoryComboBox();
+        cbSearchExpression.setToolTipText(tr("Enter a place name to search for"));
+        List<String> cmtHistory = new LinkedList<String>(Main.pref.getCollection(HISTORY_KEY, new LinkedList<String>()));
+        Collections.reverse(cmtHistory);
+        cbSearchExpression.setPossibleItems(cmtHistory);
         gc.gridx = 0;
         gc.gridy = 1;
         gc.gridwidth = 1;
-        panel.add(tfSearchExpression,  gc);
+        panel.add(cbSearchExpression,  gc);
 
         // the search button
@@ -90,6 +96,6 @@
         SearchAction searchAction = new SearchAction();
         btnSearch = new JButton(searchAction);
-        tfSearchExpression.getDocument().addDocumentListener(searchAction);
-        tfSearchExpression.addActionListener(searchAction);
+        ((JTextField)cbSearchExpression.getEditor().getEditorComponent()).getDocument().addDocumentListener(searchAction);
+        ((JTextField)cbSearchExpression.getEditor().getEditorComponent()).addActionListener(searchAction);
 
         gc.gridx = 1;
@@ -120,5 +126,5 @@
         panel.add(scrollPane, BorderLayout.CENTER);
         
-        gui.addDownloadAreaSelector(panel, tr("Areas around Places"));
+        gui.addDownloadAreaSelector(panel, tr("Areas around places"));
 
         scrollPane.setPreferredSize(scrollPane.getPreferredSize());        
@@ -255,12 +261,14 @@
         
         public void actionPerformed(ActionEvent e) {
-            if (!isEnabled() || tfSearchExpression.getText().trim().length() == 0)
+            if (!isEnabled() || cbSearchExpression.getText().trim().length() == 0)
                 return;
-            NameQueryTask task = new NameQueryTask(tfSearchExpression.getText());
+            cbSearchExpression.addCurrentItemToHistory();
+            Main.pref.putCollection(HISTORY_KEY, cbSearchExpression.getHistory());
+            NameQueryTask task = new NameQueryTask(cbSearchExpression.getText());
             Main.worker.submit(task);
         }
         
         protected void updateEnabledState() {
-            setEnabled(tfSearchExpression.getText().trim().length() > 0);
+            setEnabled(cbSearchExpression.getText().trim().length() > 0);
         }
 
@@ -439,4 +447,5 @@
     
     class NamedResultCellRenderer extends JLabel implements TableCellRenderer {
+        
         public NamedResultCellRenderer() {
             setOpaque(true);
@@ -506,3 +515,4 @@
         }
     }
+
 }
