Index: /trunk/src/org/openstreetmap/josm/actions/upload/ValidateUploadHook.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/actions/upload/ValidateUploadHook.java	(revision 18775)
+++ /trunk/src/org/openstreetmap/josm/actions/upload/ValidateUploadHook.java	(revision 18776)
@@ -15,7 +15,5 @@
 import org.openstreetmap.josm.data.APIDataSet;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
-import org.openstreetmap.josm.data.preferences.sources.ValidatorPrefHelper;
 import org.openstreetmap.josm.data.validation.OsmValidator;
-import org.openstreetmap.josm.data.validation.Severity;
 import org.openstreetmap.josm.data.validation.TestError;
 import org.openstreetmap.josm.data.validation.ValidationTask;
@@ -53,8 +51,4 @@
         OsmValidator.initializeTests();
         new ValidationTask(errors -> {
-            if (!Boolean.TRUE.equals(ValidatorPrefHelper.PREF_OTHER_UPLOAD.get())) {
-                // Use >= just in case we add additional levels.
-                errors.removeIf(error -> error.getSeverity().getLevel() >= Severity.OTHER.getLevel());
-            }
             if (errors.stream().allMatch(TestError::isIgnored)) {
                 returnCode.set(true);
Index: /trunk/src/org/openstreetmap/josm/data/validation/ValidationTask.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/validation/ValidationTask.java	(revision 18775)
+++ /trunk/src/org/openstreetmap/josm/data/validation/ValidationTask.java	(revision 18776)
@@ -108,4 +108,10 @@
         }
         if (this.onFinish != null) {
+            // Remove any low severity issues if they are not desired.
+            if (!(Boolean.TRUE.equals(ValidatorPrefHelper.PREF_OTHER.get()) &&
+                    (!this.beforeUpload || Boolean.TRUE.equals(ValidatorPrefHelper.PREF_OTHER_UPLOAD.get())))) {
+                // Use >= just in case we add additional levels.
+                this.errors.removeIf(error -> error.getSeverity().getLevel() >= Severity.OTHER.getLevel());
+            }
             this.onFinish.accept(this.errors);
         }
@@ -125,5 +131,6 @@
             getProgressMonitor().setCustomText(tr("Test {0}/{1}: Starting {2}", testCounter, tests.size(), test.getName()));
             test.setBeforeUpload(this.beforeUpload);
-            test.setPartialSelection(formerValidatedPrimitives != null);
+            // Pre-upload checks only run on a partial selection.
+            test.setPartialSelection(this.beforeUpload || formerValidatedPrimitives != null);
             test.startTest(getProgressMonitor().createSubTaskMonitor(validatedPrimitives.size(), false));
             test.visit(validatedPrimitives);
Index: /trunk/test/unit/org/openstreetmap/josm/actions/upload/ValidateUploadHookTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/actions/upload/ValidateUploadHookTest.java	(revision 18775)
+++ /trunk/test/unit/org/openstreetmap/josm/actions/upload/ValidateUploadHookTest.java	(revision 18776)
@@ -6,4 +6,5 @@
 
 import java.util.Collections;
+import java.util.stream.Stream;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
@@ -12,5 +13,6 @@
 import org.junit.jupiter.api.extension.RegisterExtension;
 import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.ValueSource;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.data.APIDataSet;
@@ -48,8 +50,18 @@
     }
 
+    static Stream<Arguments> testUploadOtherErrors() {
+        return Stream.of(
+                Arguments.of(true, true),
+                Arguments.of(true, false),
+                Arguments.of(false, false),
+                Arguments.of(false, true)
+        );
+    }
+
     @ParameterizedTest
-    @ValueSource(booleans = {true, false})
-    void testUploadOtherErrors(boolean otherEnabled) {
-        ValidatorPrefHelper.PREF_OTHER_UPLOAD.put(otherEnabled);
+    @MethodSource
+    void testUploadOtherErrors(boolean otherUploadEnabled, boolean otherEnabled) {
+        ValidatorPrefHelper.PREF_OTHER.put(otherEnabled);
+        ValidatorPrefHelper.PREF_OTHER_UPLOAD.put(otherUploadEnabled);
         final DataSet ds = new DataSet();
         final Way building = TestUtils.newWay("building=yes", new Node(new LatLon(33.2287665, -111.8259225)),
@@ -74,5 +86,5 @@
                 };
         new ValidateUploadHook().checkUpload(new APIDataSet(ds));
-        assertEquals(!otherEnabled, mocker.getInvocationLog().isEmpty());
+        assertEquals(!(otherEnabled && otherUploadEnabled), mocker.getInvocationLog().isEmpty());
     }
 }
