Index: trunk/src/org/openstreetmap/josm/actions/upload/ValidateUploadHook.java
===================================================================
--- trunk/src/org/openstreetmap/josm/actions/upload/ValidateUploadHook.java	(revision 18999)
+++ trunk/src/org/openstreetmap/josm/actions/upload/ValidateUploadHook.java	(revision 19000)
@@ -22,5 +22,4 @@
 import org.openstreetmap.josm.gui.MainApplication;
 import org.openstreetmap.josm.gui.dialogs.validator.ValidatorTreePanel;
-import org.openstreetmap.josm.gui.layer.ValidatorLayer;
 import org.openstreetmap.josm.gui.util.GuiHelper;
 import org.openstreetmap.josm.gui.widgets.HtmlPanel;
@@ -106,12 +105,5 @@
         GuiHelper.destroyComponents(ed, false);
         ed.dispose();
-        if (rc != 1) {
-            OsmValidator.initializeTests();
-            OsmValidator.initializeErrorLayer();
-            MainApplication.getMap().validatorDialog.unfurlDialog();
-            MainApplication.getLayerManager().getLayersOfType(ValidatorLayer.class).forEach(ValidatorLayer::invalidate);
-            return false;
-        }
-        return true;
+        return rc == 1;
     }
 }
Index: trunk/src/org/openstreetmap/josm/data/preferences/sources/ValidatorPrefHelper.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/preferences/sources/ValidatorPrefHelper.java	(revision 18999)
+++ trunk/src/org/openstreetmap/josm/data/preferences/sources/ValidatorPrefHelper.java	(revision 19000)
@@ -72,4 +72,11 @@
 
     /**
+     * See #23519
+     * The preferences key for the automatic unfurl of the validation result window
+     *
+     */
+    public static final BooleanProperty PREF_UNFURL = new BooleanProperty(PREFIX + ".force.unfurl.window", true);
+
+    /**
      * Constructs a new {@code PresetPrefHelper}.
      */
Index: trunk/src/org/openstreetmap/josm/data/validation/ValidationTask.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/validation/ValidationTask.java	(revision 18999)
+++ trunk/src/org/openstreetmap/josm/data/validation/ValidationTask.java	(revision 19000)
@@ -24,5 +24,5 @@
 import org.openstreetmap.josm.gui.Notification;
 import org.openstreetmap.josm.gui.PleaseWaitRunnable;
-import org.openstreetmap.josm.gui.layer.ValidatorLayer;
+import org.openstreetmap.josm.gui.dialogs.ValidatorDialog;
 import org.openstreetmap.josm.gui.progress.ProgressMonitor;
 import org.openstreetmap.josm.gui.progress.swing.PleaseWaitProgressMonitor;
@@ -143,8 +143,9 @@
                 if (!map.validatorDialog.isShowing() && errors.isEmpty() && beforeUpload)
                     return;
-                map.validatorDialog.unfurlDialog();
+                if (Boolean.TRUE.equals(ValidatorPrefHelper.PREF_UNFURL.get()))
+                    map.validatorDialog.unfurlDialog();
                 map.validatorDialog.tree.setErrors(errors);
                 //FIXME: nicer way to find / invalidate the corresponding error layer
-                MainApplication.getLayerManager().getLayersOfType(ValidatorLayer.class).forEach(ValidatorLayer::invalidate);
+                ValidatorDialog.invalidateValidatorLayers();
                 if (!errors.isEmpty()) {
                     OsmValidator.initializeErrorLayer();
Index: trunk/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java	(revision 18999)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/ValidatorDialog.java	(revision 19000)
@@ -702,5 +702,8 @@
     }
 
-    private static void invalidateValidatorLayers() {
+    /**
+     * Invalidate the error layer
+     */
+    public static void invalidateValidatorLayers() {
         MainApplication.getLayerManager().getLayersOfType(ValidatorLayer.class).forEach(ValidatorLayer::invalidate);
     }
