Index: trunk/src/org/openstreetmap/josm/actions/JumpToAction.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/JumpToAction.java	(revision 16401)
+++ trunk/src/org/openstreetmap/josm/actions/JumpToAction.java	(revision 16402)
@@ -9,9 +9,13 @@
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
+import java.io.IOException;
+import java.util.List;
 import java.util.Optional;
 
+import javax.swing.BorderFactory;
 import javax.swing.JLabel;
 import javax.swing.JOptionPane;
 import javax.swing.JPanel;
+import javax.swing.JSeparator;
 import javax.swing.event.DocumentEvent;
 import javax.swing.event.DocumentListener;
@@ -23,7 +27,9 @@
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.MapView;
+import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.gui.datatransfer.ClipboardUtils;
 import org.openstreetmap.josm.gui.widgets.JosmTextField;
 import org.openstreetmap.josm.gui.widgets.SelectAllOnFocusGainedDecorator;
+import org.openstreetmap.josm.io.NameFinder;
 import org.openstreetmap.josm.spi.preferences.Config;
 import org.openstreetmap.josm.tools.GBC;
@@ -40,4 +46,5 @@
 
     private final JosmTextField url = new JosmTextField();
+    private final JosmTextField place = new JosmTextField();
     private final JosmTextField lat = new JosmTextField();
     private final JosmTextField lon = new JosmTextField();
@@ -112,4 +119,5 @@
         if (boundsFromClipboard.isPresent() && Config.getPref().getBoolean("jumpto.use.clipboard", true)) {
             setBounds(boundsFromClipboard.get());
+            place.setText("");
         } else {
             setBounds(mv.getState().getViewArea().getCornerBounds());
@@ -132,4 +140,5 @@
         url.getDocument().addDocumentListener(new OsmURLListener());
 
+        SelectAllOnFocusGainedDecorator.decorate(place);
         SelectAllOnFocusGainedDecorator.decorate(lat);
         SelectAllOnFocusGainedDecorator.decorate(lon);
@@ -140,4 +149,8 @@
         panel.add(p, BorderLayout.NORTH);
 
+        p.add(new JLabel(tr("Enter a place name to search for")), GBC.eol());
+        p.add(place, GBC.eol().fill(GBC.HORIZONTAL));
+        p.add(new JSeparator(), GBC.eol().fill(GBC.HORIZONTAL).insets(3, 5, 3, 5));
+
         p.add(new JLabel(tr("Latitude")), GBC.eol());
         p.add(lat, GBC.eol().fill(GBC.HORIZONTAL));
@@ -148,4 +161,5 @@
         p.add(new JLabel(tr("Zoom (in metres)")), GBC.eol());
         p.add(zm, GBC.eol().fill(GBC.HORIZONTAL));
+        p.add(new JSeparator(), GBC.eol().fill(GBC.HORIZONTAL).insets(3, 5, 3, 5));
 
         p.add(new JLabel(tr("URL")), GBC.eol());
@@ -159,4 +173,19 @@
 
             if (option != 1) return;
+            if (place.hasFocus() && !place.getText().trim().isEmpty()) {
+                try {
+                    List<NameFinder.SearchResult> searchResults = NameFinder.queryNominatim(place.getText());
+                    if (!searchResults.isEmpty()) {
+                        NameFinder.SearchResult searchResult = searchResults.get(0);
+                        new Notification(tr("Jumping to: {0}", searchResult.getName()))
+                                .setIcon(JOptionPane.INFORMATION_MESSAGE)
+                                .show();
+                        mv.zoomTo(searchResult.getBounds());
+                    }
+                    return;
+                } catch (IOException | RuntimeException ex) {
+                    Logging.warn(ex);
+                }
+            }
             try {
                 zoomLvl = Double.parseDouble(zm.getText());
