Index: /applications/editors/josm/plugins/http2/src/org/openstreetmap/josm/plugins/http2/Http2Client.java
===================================================================
--- /applications/editors/josm/plugins/http2/src/org/openstreetmap/josm/plugins/http2/Http2Client.java	(revision 35059)
+++ /applications/editors/josm/plugins/http2/src/org/openstreetmap/josm/plugins/http2/Http2Client.java	(revision 35060)
@@ -14,6 +14,7 @@
 import java.net.http.HttpResponse.BodyHandlers;
 import java.time.Duration;
-import java.time.LocalDateTime;
-import java.time.ZoneOffset;
+import java.time.Instant;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoField;
@@ -25,4 +26,5 @@
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.tools.JosmRuntimeException;
+import org.openstreetmap.josm.tools.Logging;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -42,7 +44,9 @@
     @Override
     protected void setupConnection(ProgressMonitor progressMonitor) throws IOException {
-        clientBuilder = HttpClient.newBuilder()
-                .connectTimeout(Duration.ofMillis(getConnectTimeout()))
-                .followRedirects(Redirect.NEVER); // we do that ourselves
+        clientBuilder = HttpClient.newBuilder().followRedirects(Redirect.NEVER); // we do that ourselves
+        int timeout = getConnectTimeout();
+        if (timeout > 0) {
+            clientBuilder.connectTimeout(Duration.ofMillis(timeout));
+        }
         try {
             requestBuilder = HttpRequest.newBuilder()
@@ -51,12 +55,15 @@
                               ? BodyPublishers.ofByteArray(getRequestBody())
                               : BodyPublishers.noBody())
-                      .header("User-Agent", Version.getInstance().getFullAgentString())
-                      .timeout(Duration.ofMillis(getReadTimeout()));
+                      .header("User-Agent", Version.getInstance().getFullAgentString());
         } catch (URISyntaxException e) {
             throw new IOException(e);
         }
+        timeout = getReadTimeout();
+        if (timeout > 0) {
+            requestBuilder.timeout(Duration.ofMillis(timeout));
+        }
         if (getIfModifiedSince() > 0) {
             requestBuilder.header("If-Modified-Since", DateTimeFormatter.RFC_1123_DATE_TIME.format(
-                    LocalDateTime.ofEpochSecond(getIfModifiedSince() / 1000, 0, ZoneOffset.UTC)));
+                    ZonedDateTime.ofInstant(Instant.ofEpochMilli(getIfModifiedSince()), ZoneId.systemDefault())));
         }
         if (!isUseCache()) {
@@ -65,5 +72,9 @@
         for (Map.Entry<String, String> header : getHeaders().entrySet()) {
             if (header.getValue() != null) {
-                requestBuilder.header(header.getKey(), header.getValue());
+                try {
+                    requestBuilder.header(header.getKey(), header.getValue());
+                } catch (IllegalArgumentException e) {
+                    Logging.warn(e.getMessage());
+                }
             }
         }
