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)
@@ -499,16 +499,28 @@
             if ((pb.width >= nb.getWidth() && pb.height >= nb.getHeight()) && // quick check
                     area.contains(centeredNBounds) // slow but nice
             ) {
+                Font defaultFont = g.getFont();
+                int x = (int)(centeredNBounds.getMinX() - nb.getMinX());
+                int y = (int)(centeredNBounds.getMinY() - nb.getMinY());
                 if (isInactiveMode || osm.isDisabled()) {
                     g.setColor(inactiveColor);
+                    g.setFont (text.font);
+                    g.drawString(name, x, y);
+                } else 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.setColor(text.color);
+                    g.setFont (text.font);
+                    g.drawString(name, x, y);
                 }
-                Font defaultFont = g.getFont();
-                g.setFont (text.font);
-                g.drawString (name,
-                        (int)(centeredNBounds.getMinX() - nb.getMinX()),
-                        (int)(centeredNBounds.getMinY() - nb.getMinY()));
                 g.setFont(defaultFont);
             }
         }
@@ -589,10 +601,8 @@
         }
         if (isInactiveMode || n.isDisabled()) {
             g.setColor(inactiveColor);
-        } else {
-            g.setColor(text.color);
-        }
-        if (text.haloRadius != null) {
+            g.drawString(s, x, y);
+        } else 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();
@@ -603,6 +613,7 @@
             g.setColor(text.color);
             g.fill(textOutline);
         } else {
+            g.setColor(text.color);
             g.drawString(s, x, y);
         }
         g.setFont(defaultFont);
@@ -1150,7 +1161,10 @@
                 gv.setGlyphTransform(i, trfm);
             }
         }
-        if (text.haloRadius != null) {
+        if (isInactiveMode || way.isDisabled()) {
+            g.setColor(inactiveColor);
+            g.drawGlyphVector(gv, 0, 0);
+        } else if (text.haloRadius != null) {
             Shape textOutline = gv.getOutline();
             g.setStroke(new BasicStroke(2*text.haloRadius, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND));
             g.setColor(text.haloColor);
