Index: trunk/src/org/openstreetmap/josm/data/Preferences.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 8294)
+++ trunk/src/org/openstreetmap/josm/data/Preferences.java	(revision 8295)
@@ -17,4 +17,6 @@
 import java.lang.annotation.RetentionPolicy;
 import java.lang.reflect.Field;
+import java.net.InetAddress;
+import java.net.Inet6Address;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
@@ -925,4 +927,34 @@
             }
         }
+        if("auto".equals(get("prefer.ipv6", "auto"))) {
+             new Thread(new Runnable() { /* this may take some time (DNS, Connect) */
+                public void run() {
+                    boolean hasv6 = false;
+                    try {
+                        /* Use the check result from last run of the software, as after the test value
+                           changes have no effect anymore */
+                        if(getBoolean("validated.ipv6", false)) {
+                            Utils.updateSystemProperty("java.net.preferIPv6Addresses", "true");
+                        }
+                        for(InetAddress a : InetAddress.getAllByName("josm.openstreetmap.de")) {
+                            if(a instanceof Inet6Address) {
+                                if(a.isReachable(1000)) {
+                                    Utils.updateSystemProperty("java.net.preferIPv6Addresses", "true");
+                                    if(!getBoolean("validated.ipv6", false)) {
+                                        Main.info(tr("Automatics detected useable IPv6 network, prefering IPv6 over IPv4 after next restart."));
+                                    } else {
+                                        Main.info(tr("Automatics detected useable IPv6 network, prefering IPv6 over IPv4."));
+                                    }
+                                    hasv6 = true;
+                                }
+                                break; /* we're done */
+                            }
+                        }
+                    } catch (Exception e) {
+                    }
+                    put("validated.ipv6", hasv6);
+                }
+            }).start();
+        }
     }
 
@@ -1373,5 +1405,5 @@
      */
     public void updateSystemProperties() {
-        if(getBoolean("prefer.ipv6", false)) {
+        if("true".equals(get("prefer.ipv6", "auto"))) {
             // never set this to false, only true!
             Utils.updateSystemProperty("java.net.preferIPv6Addresses", "true");
