diff --git a/src/org/openstreetmap/josm/tools/OpenBrowser.java b/src/org/openstreetmap/josm/tools/OpenBrowser.java
index 083de23d1..739e3c92f 100644
--- a/src/org/openstreetmap/josm/tools/OpenBrowser.java
+++ b/src/org/openstreetmap/josm/tools/OpenBrowser.java
@@ -42,10 +42,7 @@ public static String displayUrl(URI uri) {
 
         if (Desktop.isDesktopSupported()) {
             try {
-                if (PlatformManager.isPlatformWindows()) {
-                    // Desktop API works fine under Windows, so we don't try any fallback in case of I/O exceptions because it's not API's fault
-                    Desktop.getDesktop().browse(uri);
-                } else if (PlatformManager.isPlatformUnixoid() || PlatformManager.isPlatformOsx()) {
+                if (PlatformManager.isPlatformWindows() || PlatformManager.isPlatformUnixoid() || PlatformManager.isPlatformOsx()) {
                     // see #5629 #5108 #9568
                     PlatformManager.getPlatform().openUrl(uri.toString());
                 } else {
diff --git a/src/org/openstreetmap/josm/tools/PlatformHookWindows.java b/src/org/openstreetmap/josm/tools/PlatformHookWindows.java
index 2a9d46f35..230856541 100644
--- a/src/org/openstreetmap/josm/tools/PlatformHookWindows.java
+++ b/src/org/openstreetmap/josm/tools/PlatformHookWindows.java
@@ -30,7 +30,7 @@
 import static org.openstreetmap.josm.tools.Utils.getSystemProperty;
 import static org.openstreetmap.josm.tools.WinRegistry.HKEY_LOCAL_MACHINE;
 
-import java.awt.GraphicsEnvironment;
+import java.awt.*;
 import java.io.BufferedWriter;
 import java.io.File;
 import java.io.IOException;
@@ -39,6 +39,8 @@
 import java.io.OutputStreamWriter;
 import java.io.Writer;
 import java.lang.reflect.InvocationTargetException;
+import java.net.URI;
+import java.net.URISyntaxException;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.DirectoryIteratorException;
 import java.nio.file.DirectoryStream;
@@ -187,7 +189,18 @@ public void startupHook(JavaExpirationCallback callback) {
 
     @Override
     public void openUrl(String url) throws IOException {
-        Runtime.getRuntime().exec(new String[]{"rundll32", "url.dll,FileProtocolHandler", url});
+        final String customBrowser = Config.getPref().get("browser.windows", null);
+        if (customBrowser != null) {
+            Runtime.getRuntime().exec(new String[]{customBrowser, url});
+            return;
+        }
+        try {
+            // Desktop API works fine under Windows
+            Desktop.getDesktop().browse(new URI(url));
+        } catch (IOException | URISyntaxException e) {
+            Logging.log(Logging.LEVEL_WARN, "Desktop class failed. Platform dependent fall back for open url in browser.", e);
+            Runtime.getRuntime().exec(new String[]{"rundll32", "url.dll,FileProtocolHandler", url});
+        }
     }
 
     @Override
