Index: src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java
===================================================================
--- src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java	(revision 6111)
+++ src/org/openstreetmap/josm/data/osm/visitor/paint/StyledMapRenderer.java	(working copy)
@@ -505,10 +505,22 @@
                     g.setColor(text.color);
                 }
                 Font defaultFont = g.getFont();
-                g.setFont (text.font);
-                g.drawString (name,
-                        (int)(centeredNBounds.getMinX() - nb.getMinX()),
-                        (int)(centeredNBounds.getMinY() - nb.getMinY()));
+                int x = (int)(centeredNBounds.getMinX() - nb.getMinX());
+                int y = (int)(centeredNBounds.getMinY() - nb.getMinY());
+                if (text.haloRadius != null) {
+                    g.setStroke(new BasicStroke(2*text.haloRadius, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND));
+                    g.setColor(text.haloColor);
+                    FontRenderContext frc = g.getFontRenderContext();
+                    GlyphVector gv = text.font.createGlyphVector(frc, name);
+                    Shape textOutline = gv.getOutline(x, y);
+                    g.draw(textOutline);
+                    g.setStroke(new BasicStroke());
+                    g.setColor(text.color);
+                    g.fill(textOutline);
+                } else {
+                    g.setFont (text.font);
+                    g.drawString(name, x, y);
+                }
                 g.setFont(defaultFont);
             }
         }
