Index: trunk/src/org/openstreetmap/josm/io/OsmServerReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OsmServerReader.java	(revision 9307)
+++ trunk/src/org/openstreetmap/josm/io/OsmServerReader.java	(revision 9308)
@@ -124,4 +124,5 @@
             final HttpClient client = HttpClient.create(url);
             client.setReasonForRequest(reason);
+            adaptRequest(client);
             if (doAuthenticate) {
                 addAuth(client);
@@ -170,4 +171,12 @@
 
     /**
+     * Allows subclasses to modify the request.
+     * @param request the prepared request
+     * @since 9308
+     */
+    protected void adaptRequest(HttpClient request) {
+    }
+
+    /**
      * Download OSM files from somewhere
      * @param progressMonitor The progress monitor
Index: trunk/src/org/openstreetmap/josm/io/OverpassDownloadReader.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/OverpassDownloadReader.java	(revision 9307)
+++ trunk/src/org/openstreetmap/josm/io/OverpassDownloadReader.java	(revision 9308)
@@ -5,4 +5,6 @@
 
 import java.io.InputStream;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import javax.xml.stream.XMLStreamConstants;
@@ -13,4 +15,5 @@
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
+import org.openstreetmap.josm.tools.HttpClient;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -105,4 +108,15 @@
 
     @Override
+    protected void adaptRequest(HttpClient request) {
+        // see https://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_QL#timeout
+        final Matcher timeoutMatcher = Pattern.compile("\\[timeout:(\\d+)\\]").matcher(overpassQuery);
+        if (timeoutMatcher.find()) {
+            final int timeout = 1000 * Integer.parseInt(timeoutMatcher.group(1));
+            request.setConnectTimeout(timeout);
+            request.setReadTimeout(timeout);
+        }
+    }
+
+    @Override
     protected String getTaskName() {
         return tr("Contacting Server...");
