Index: trunk/src/org/openstreetmap/josm/data/UserIdentityManager.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/UserIdentityManager.java	(revision 12743)
+++ trunk/src/org/openstreetmap/josm/data/UserIdentityManager.java	(revision 12744)
@@ -50,5 +50,5 @@
  *   <li>safely search for objects last touched by the current user based on its user id, not on its user name</li>
  * </ul>
- * @since xxx (renamed from {@code org.openstreetmap.josm.gui.JosmUserIdentityManager})
+ * @since 12743 (renamed from {@code org.openstreetmap.josm.gui.JosmUserIdentityManager})
  * @since 2689 (creation)
  */
Index: trunk/src/org/openstreetmap/josm/gui/MainApplication.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 12743)
+++ trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 12744)
@@ -812,4 +812,6 @@
         Main.platform.afterPrefStartupHook();
 
+        applyWorkarounds();
+
         FontsManager.initialize();
 
@@ -934,4 +936,26 @@
             Logging.info("Enabled EDT checker, wrongful access to gui from non EDT thread will be printed to console");
             RepaintManager.setCurrentManager(new CheckThreadViolationRepaintManager());
+        }
+    }
+
+    static void applyWorkarounds() {
+        // Workaround for JDK-8180379: crash on Windows 10 1703 with Windows L&F and java < 8u141 / 9+172
+        // To remove during Java 9 migration
+        if (System.getProperty("os.name").toLowerCase(Locale.ENGLISH).contains("windows 10") &&
+                platform.getDefaultStyle().equals(LafPreference.LAF.get())) {
+            try {
+                final int currentBuild = Integer.parseInt(PlatformHookWindows.getCurrentBuild());
+                final int javaVersion = Utils.getJavaVersion();
+                final int javaUpdate = Utils.getJavaUpdate();
+                final int javaBuild = Utils.getJavaBuild();
+                // See https://technet.microsoft.com/en-us/windows/release-info.aspx
+                if (currentBuild >= 15_063 && ((javaVersion == 8 && javaUpdate < 141)
+                        || (javaVersion == 9 && javaUpdate == 0 && javaBuild < 173))) {
+                    // Workaround from https://bugs.openjdk.java.net/browse/JDK-8179014
+                    UIManager.put("FileChooser.useSystemExtensionHiding", Boolean.FALSE);
+                }
+            } catch (NumberFormatException | ReflectiveOperationException e) {
+                Logging.error(e);
+            }
         }
     }
Index: trunk/src/org/openstreetmap/josm/tools/PlatformHookWindows.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/PlatformHookWindows.java	(revision 12743)
+++ trunk/src/org/openstreetmap/josm/tools/PlatformHookWindows.java	(revision 12744)
@@ -66,9 +66,7 @@
 
 import javax.swing.JOptionPane;
-import javax.swing.UIManager;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Preferences;
-import org.openstreetmap.josm.gui.preferences.display.LafPreference;
 import org.openstreetmap.josm.io.CertificateAmendment.CertAmend;
 
@@ -161,23 +159,4 @@
     public void afterPrefStartupHook() {
         extendFontconfig("fontconfig.properties.src");
-        // Workaround for JDK-8180379: crash on Windows 10 1703 with Windows L&F and java < 8u152 / 9+171
-        // To remove during Java 9 migration
-        if (System.getProperty("os.name").toLowerCase(Locale.ENGLISH).contains("windows 10") &&
-                getDefaultStyle().equals(LafPreference.LAF.get())) {
-            try {
-                final int currentBuild = Integer.parseInt(getCurrentBuild());
-                final int javaVersion = Utils.getJavaVersion();
-                final int javaUpdate = Utils.getJavaUpdate();
-                final int javaBuild = Utils.getJavaBuild();
-                // See https://technet.microsoft.com/en-us/windows/release-info.aspx
-                if (currentBuild >= 15_063 && ((javaVersion == 8 && javaUpdate < 141)
-                        || (javaVersion == 9 && javaUpdate == 0 && javaBuild < 173))) {
-                    // Workaround from https://bugs.openjdk.java.net/browse/JDK-8179014
-                    UIManager.put("FileChooser.useSystemExtensionHiding", Boolean.FALSE);
-                }
-            } catch (NumberFormatException | ReflectiveOperationException e) {
-                Logging.error(e);
-            }
-        }
     }
 
@@ -282,13 +261,34 @@
     }
 
-    private static String getProductName() throws IllegalAccessException, InvocationTargetException {
+    /**
+     * Returns the Windows product name from registry (example: "Windows 10 Pro")
+     * @return the Windows product name from registry
+     * @throws IllegalAccessException if Java language access control is enforced and the underlying method is inaccessible
+     * @throws InvocationTargetException if the underlying method throws an exception
+     * @since 12744
+     */
+    public static String getProductName() throws IllegalAccessException, InvocationTargetException {
         return WinRegistry.readString(HKEY_LOCAL_MACHINE, CURRENT_VERSION, "ProductName");
     }
 
-    private static String getReleaseId() throws IllegalAccessException, InvocationTargetException {
+    /**
+     * Returns the Windows release identifier from registry (example: "1703")
+     * @return the Windows release identifier from registry
+     * @throws IllegalAccessException if Java language access control is enforced and the underlying method is inaccessible
+     * @throws InvocationTargetException if the underlying method throws an exception
+     * @since 12744
+     */
+    public static String getReleaseId() throws IllegalAccessException, InvocationTargetException {
         return WinRegistry.readString(HKEY_LOCAL_MACHINE, CURRENT_VERSION, "ReleaseId");
     }
 
-    private static String getCurrentBuild() throws IllegalAccessException, InvocationTargetException {
+    /**
+     * Returns the Windows current build number from registry (example: "15063")
+     * @return the Windows current build number from registry
+     * @throws IllegalAccessException if Java language access control is enforced and the underlying method is inaccessible
+     * @throws InvocationTargetException if the underlying method throws an exception
+     * @since 12744
+     */
+    public static String getCurrentBuild() throws IllegalAccessException, InvocationTargetException {
         return WinRegistry.readString(HKEY_LOCAL_MACHINE, CURRENT_VERSION, "CurrentBuild");
     }
