Index: trunk/src/org/openstreetmap/josm/tools/OpenBrowser.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/OpenBrowser.java	(revision 14388)
+++ trunk/src/org/openstreetmap/josm/tools/OpenBrowser.java	(revision 14389)
@@ -22,10 +22,4 @@
     }
 
-    private static void displayUrlFallback(URI uri) throws IOException {
-        if (PlatformManager.getPlatform() == null)
-            throw new IllegalStateException(tr("Failed to open URL. There is currently no platform set. Please set a platform first."));
-        PlatformManager.getPlatform().openUrl(uri.toString());
-    }
-
     /**
      * Displays an external URI using platform associated software.
@@ -41,36 +35,18 @@
         Logging.info(tr("Opening URL: {0}", 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()) {
-                    // see #5629 #5108 #9568
-                    PlatformManager.getPlatform().openUrl(uri.toString());
-                } else {
-                    // This is not the case with some Linux environments (see below),
-                    // and not sure about Mac OS X, so we need to handle API failure
-                    try {
-                        Desktop.getDesktop().browse(uri);
-                    } catch (IOException e) {
-                        // Workaround for KDE (Desktop API is severely flawed)
-                        // see https://bugs.openjdk.java.net/browse/JDK-6486393
-                        Logging.log(Logging.LEVEL_WARN, "Desktop class failed. Platform dependent fall back for open url in browser.", e);
-                        displayUrlFallback(uri);
-                    }
-                }
-            } catch (IOException e) {
-                Logging.warn(e);
-                return e.getMessage();
+        try {
+            if (PlatformManager.getPlatform() != null) {
+                // see #5629 #5108 #9568
+                PlatformManager.getPlatform().openUrl(uri.toString());
+            } else if (Desktop.isDesktopSupported()) {
+                // This is not the case with some Linux environments (see below),
+                // and not sure about Mac OS X, so we need to handle API failure
+                Desktop.getDesktop().browse(uri);
+            } else {
+                Logging.warn("Neither Platform nor Desktop class is not supported. Cannot open " + uri);
             }
-        } else {
-            try {
-                Logging.warn("Desktop class is not supported. Platform dependent fall back for open url in browser.");
-                displayUrlFallback(uri);
-            } catch (IOException e) {
-                Logging.debug(e);
-                return e.getMessage();
-            }
+        } catch (IOException e) {
+            Logging.warn(e);
+            return e.getMessage();
         }
         return null;
Index: trunk/src/org/openstreetmap/josm/tools/PlatformHookWindows.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/PlatformHookWindows.java	(revision 14388)
+++ trunk/src/org/openstreetmap/josm/tools/PlatformHookWindows.java	(revision 14389)
@@ -31,4 +31,5 @@
 import static org.openstreetmap.josm.tools.WinRegistry.HKEY_LOCAL_MACHINE;
 
+import java.awt.Desktop;
 import java.awt.GraphicsEnvironment;
 import java.io.BufferedWriter;
@@ -40,4 +41,6 @@
 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;
@@ -188,5 +191,16 @@
     @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});
+        }
     }
 
