Index: trunk/src/org/openstreetmap/josm/gui/MainApplication.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 10982)
+++ trunk/src/org/openstreetmap/josm/gui/MainApplication.java	(revision 10983)
@@ -123,5 +123,9 @@
     public static void showHelp() {
         // TODO: put in a platformHook for system that have no console by default
-        System.out.println(tr("Java OpenStreetMap Editor")+" ["
+        System.out.println(getHelp());
+    }
+
+    static String getHelp() {
+        return tr("Java OpenStreetMap Editor")+" ["
                 +Version.getInstance().getAgentString()+"]\n\n"+
                 tr("usage")+":\n"+
@@ -157,15 +161,14 @@
                         "      Java option to specify the maximum size of allocated memory in megabytes")+":\n"+
                         "\t-Xmx...m\n\n"+
-                        tr("examples")+":\n"+
-                        "\tjava -jar josm.jar track1.gpx track2.gpx london.osm\n"+
-                        "\tjava -jar josm.jar "+OsmUrlToBounds.getURL(43.2, 11.1, 13)+'\n'+
-                        "\tjava -jar josm.jar london.osm --selection=http://www.ostertag.name/osm/OSM_errors_node-duplicate.xml\n"+
-                        "\tjava -jar josm.jar 43.2,11.1,43.4,11.4\n"+
-                        "\tjava -Djosm.pref=$XDG_CONFIG_HOME -Djosm.userdata=$XDG_DATA_HOME -Djosm.cache=$XDG_CACHE_HOME -jar josm.jar\n"+
-                        "\tjava -Djosm.home=/home/user/.josm_dev -jar josm.jar\n"+
-                        "\tjava -Xmx1024m -jar josm.jar\n\n"+
-                        tr("Parameters --download, --downloadgps, and --selection are processed in this order.")+'\n'+
-                        tr("Make sure you load some data if you use --selection.")+'\n'
-                );
+                tr("examples")+":\n"+
+                "\tjava -jar josm.jar track1.gpx track2.gpx london.osm\n"+
+                "\tjava -jar josm.jar "+OsmUrlToBounds.getURL(43.2, 11.1, 13)+'\n'+
+                "\tjava -jar josm.jar london.osm --selection=http://www.ostertag.name/osm/OSM_errors_node-duplicate.xml\n"+
+                "\tjava -jar josm.jar 43.2,11.1,43.4,11.4\n"+
+                "\tjava -Djosm.pref=$XDG_CONFIG_HOME -Djosm.userdata=$XDG_DATA_HOME -Djosm.cache=$XDG_CACHE_HOME -jar josm.jar\n"+
+                "\tjava -Djosm.home=/home/user/.josm_dev -jar josm.jar\n"+
+                "\tjava -Xmx1024m -jar josm.jar\n\n"+
+                tr("Parameters --download, --downloadgps, and --selection are processed in this order.")+'\n'+
+                tr("Make sure you load some data if you use --selection.")+'\n';
     }
 
@@ -182,4 +185,5 @@
             args = new ProgramArguments(argArray);
         } catch (IllegalArgumentException e) {
+            System.err.println(e.getMessage());
             System.exit(1);
             return;
@@ -188,5 +192,7 @@
         Level logLevel = args.getLogLevel();
         Logging.setLogLevel(logLevel);
-        Main.info(tr("Log level is at {0} ({1}, {2})", logLevel.getLocalizedName(), logLevel.getName(), logLevel.intValue()));
+        if (!args.showVersion() && !args.showHelp()) {
+            Main.info(tr("Log level is at {0} ({1}, {2})", logLevel.getLocalizedName(), logLevel.getName(), logLevel.intValue()));
+        }
 
         Optional<String> language = args.getSingle(Option.LANGUAGE);
@@ -215,13 +221,13 @@
         Main.platform.preStartupHook();
 
-        Main.COMMAND_LINE_ARGS.addAll(Arrays.asList(argArray));
-
         if (args.showVersion()) {
             System.out.println(Version.getInstance().getAgentString());
-            System.exit(0);
+            return;
         } else if (args.showHelp()) {
             showHelp();
-            System.exit(0);
-        }
+            return;
+        }
+
+        Main.COMMAND_LINE_ARGS.addAll(Arrays.asList(argArray));
 
         boolean skipLoadingPlugins = args.hasOption(Option.SKIP_PLUGINS);
@@ -246,10 +252,4 @@
 
         checkIPv6();
-
-        // asking for help? show help and exit
-        if (args.hasOption(Option.HELP)) {
-            showHelp();
-            System.exit(0);
-        }
 
         processOffline(args);
Index: trunk/src/org/openstreetmap/josm/tools/I18n.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/I18n.java	(revision 10982)
+++ trunk/src/org/openstreetmap/josm/tools/I18n.java	(revision 10983)
@@ -403,5 +403,5 @@
         // FIXME: This can be removed after we switch to a minimal version of Java that enables CLDR by default
         // or includes all languages we need in the JRE. See http://openjdk.java.net/jeps/252 for Java 9
-        Utils.updateSystemProperty("java.locale.providers", "JRE,CLDR");
+        System.setProperty("java.locale.providers", "JRE,CLDR"); // Don't call Utils.updateSystemProperty to avoid spurious log at startup
 
         //languages.put("ar", PluralMode.MODE_AR);
Index: trunk/test/unit/org/openstreetmap/josm/gui/MainApplicationTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/gui/MainApplicationTest.java	(revision 10982)
+++ trunk/test/unit/org/openstreetmap/josm/gui/MainApplicationTest.java	(revision 10983)
@@ -6,4 +6,7 @@
 import static org.junit.Assert.assertNull;
 
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.PrintStream;
 import java.util.Arrays;
 import java.util.Collection;
@@ -15,4 +18,5 @@
 import org.junit.Test;
 import org.openstreetmap.josm.JOSMFixture;
+import org.openstreetmap.josm.data.Version;
 import org.openstreetmap.josm.gui.SplashScreen.SplashProgressMonitor;
 import org.openstreetmap.josm.plugins.PluginHandler;
@@ -33,4 +37,41 @@
     public static void setUp() {
         JOSMFixture.createUnitTestFixture().init(true);
+    }
+
+    private void testShow(final String arg, String expected) throws InterruptedException, IOException {
+        PrintStream old = System.out;
+        try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
+            System.setOut(new PrintStream(baos));
+            Thread t = new Thread() {
+                @Override
+                public void run() {
+                    MainApplication.main(new String[] {arg});
+                }
+            };
+            t.run();
+            t.join();
+            System.out.flush();
+            assertEquals(expected, baos.toString().trim());
+        } finally {
+            System.setOut(old);
+        }
+    }
+
+    /**
+     * Test of {@link MainApplication#main} with argument {@code --version}.
+     * @throws Exception in case of error
+     */
+    @Test
+    public void testShowVersion() throws Exception {
+        testShow("--version", Version.getInstance().getAgentString());
+    }
+
+    /**
+     * Test of {@link MainApplication#main} with argument {@code --help}.
+     * @throws Exception in case of error
+     */
+    @Test
+    public void testShowHelp() throws Exception {
+        testShow("--help", MainApplication.getHelp().trim());
     }
 
@@ -72,5 +113,4 @@
 
     private static PluginInformation newPluginInformation(String plugin) throws PluginListParseException {
-        //return new PluginInformation(new File(TestUtils.getTestDataRoot()+File.separator+"plugin"+File.separator+plugin+".jar"));
         return PluginListParser.createInfo(plugin+".jar", "https://svn.openstreetmap.org/applications/editors/josm/dist/"+plugin+".jar",
                 "");
