Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java	(revision 7751)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java	(revision 7752)
@@ -28,6 +28,8 @@
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
@@ -235,5 +237,5 @@
     }
 
-    private static Boolean IS_GLYPH_VECTOR_DOUBLE_TRANSLATION_BUG = null;
+    private static Map<Font,Boolean> IS_GLYPH_VECTOR_DOUBLE_TRANSLATION_BUG = new HashMap<>();
 
     /**
@@ -259,11 +261,11 @@
      * method which apparently no longer gives a useful result for Java 7.
      */
-    public static boolean isGlyphVectorDoubleTranslationBug() {
-        if (IS_GLYPH_VECTOR_DOUBLE_TRANSLATION_BUG != null)
-            return IS_GLYPH_VECTOR_DOUBLE_TRANSLATION_BUG;
-        String overridePref = Main.pref.get("glyph-bug", "false");
+    public static boolean isGlyphVectorDoubleTranslationBug(Font font) {
+        Boolean cached  = IS_GLYPH_VECTOR_DOUBLE_TRANSLATION_BUG.get(font);
+        if (cached != null)
+            return cached;
+        String overridePref = Main.pref.get("glyph-bug", "auto");
         if ("auto".equals(overridePref)) {
             FontRenderContext frc = new FontRenderContext(null, false, false);
-            Font font = new Font("Dialog", Font.PLAIN, 12);
             GlyphVector gv = font.createGlyphVector(frc, "x");
             gv.setGlyphTransform(0, AffineTransform.getTranslateInstance(1000, 1000));
@@ -272,10 +274,11 @@
             // x is about 1000 on normal stystems and about 2000 when the bug occurs
             int x = shape.getBounds().x;
-            IS_GLYPH_VECTOR_DOUBLE_TRANSLATION_BUG = x > 1500;
-            return IS_GLYPH_VECTOR_DOUBLE_TRANSLATION_BUG;
+            boolean isBug = x > 1500;
+            IS_GLYPH_VECTOR_DOUBLE_TRANSLATION_BUG.put(font, isBug);
+            return isBug;
         } else {
             boolean override = Boolean.parseBoolean(overridePref);
-            IS_GLYPH_VECTOR_DOUBLE_TRANSLATION_BUG = override;
-            return IS_GLYPH_VECTOR_DOUBLE_TRANSLATION_BUG;
+            IS_GLYPH_VECTOR_DOUBLE_TRANSLATION_BUG.put(font, override);
+            return override;
         }
     }
@@ -1206,5 +1209,5 @@
                 double off = -rect.getY() - rect.getHeight()/2 + text.yOffset;
                 trfm.translate(-rect.getWidth()/2, off);
-                if (isGlyphVectorDoubleTranslationBug()) {
+                if (isGlyphVectorDoubleTranslationBug(text.font)) {
                     // scale the translation components by one half
                     AffineTransform tmp = AffineTransform.getTranslateInstance(-0.5 * trfm.getTranslateX(), -0.5 * trfm.getTranslateY());
