Index: trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java	(revision 15917)
+++ trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java	(revision 15918)
@@ -128,4 +128,5 @@
 import org.openstreetmap.josm.tools.MemoryManager.MemoryHandle;
 import org.openstreetmap.josm.tools.MemoryManager.NotEnoughMemoryException;
+import org.openstreetmap.josm.tools.PlatformManager;
 import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.bugreport.BugReport;
@@ -172,5 +173,6 @@
      * lower resolution of imagery useful in "retina" displays, positive values will result in higher resolution
      */
-    public static final IntegerProperty ZOOM_OFFSET = new IntegerProperty(PREFERENCE_PREFIX + ".zoom_offset", 0);
+    public static final IntegerProperty ZOOM_OFFSET = new IntegerProperty(PREFERENCE_PREFIX + ".zoom_offset",
+            PlatformManager.getPlatform().isHighDpiDisplay() ? 2 : 0);
 
     /*
Index: trunk/src/org/openstreetmap/josm/tools/PlatformHook.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/PlatformHook.java	(revision 15917)
+++ trunk/src/org/openstreetmap/josm/tools/PlatformHook.java	(revision 15918)
@@ -138,4 +138,15 @@
 
     /**
+     * Determines if the default screen is a high-dpi device such as a mac Retina display.
+     * @return {@code true} if the default screen is a high-dpi device such as a mac Retina display
+     * @since 15918
+     */
+    default boolean isHighDpiDisplay() {
+        // https://stackoverflow.com/a/49770313
+        return !GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration()
+                .getDefaultTransform().isIdentity();
+    }
+
+    /**
      * Renames a file.
      * @param from Source file
