Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/MapPainter.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/MapPainter.java	(revision 3862)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/paint/MapPainter.java	(revision 3865)
@@ -2,4 +2,5 @@
 package org.openstreetmap.josm.data.osm.visitor.paint;
 
+import java.awt.AlphaComposite;
 import java.awt.BasicStroke;
 import java.awt.Color;
@@ -31,5 +32,7 @@
 import org.openstreetmap.josm.data.osm.visitor.paint.relations.Multipolygon.PolyData;
 import org.openstreetmap.josm.gui.NavigatableComponent;
+import org.openstreetmap.josm.gui.mappaint.ElemStyle;
 import org.openstreetmap.josm.gui.mappaint.NodeElemStyle;
+import org.openstreetmap.josm.gui.mappaint.NodeElemStyle.Symbol;
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.LanguageInfo;
@@ -54,5 +57,4 @@
 
     private final Font orderFont;
-    private final int fillAlpha;
     private final int virtualNodeSize;
     private final int virtualNodeSpace;
@@ -89,5 +91,4 @@
 
         this.orderFont = new Font(Main.pref.get("mappaint.font", "Helvetica"), Font.PLAIN, Main.pref.getInteger("mappaint.fontsize", 8));
-        this.fillAlpha = Math.min(255, Math.max(0, Integer.valueOf(Main.pref.getInteger("mappaint.fillalpha", 50))));
         this.virtualNodeSize = virtual ? Main.pref.getInteger("mappaint.node.virtual-size", 8) / 2 : 0;
         this.virtualNodeSpace = Main.pref.getInteger("mappaint.node.virtual-space", 70);
@@ -187,10 +188,14 @@
     }
 
-    public void drawNodeIcon(Node n, ImageIcon icon, boolean selected, boolean member, String name) {
+    public void drawNodeIcon(Node n, ImageIcon icon, float iconAlpha, boolean selected, boolean member, String name) {
         Point p = nc.getPoint(n);
         if ((p.x < 0) || (p.y < 0) || (p.x > nc.getWidth()) || (p.y > nc.getHeight())) return;
 
         int w = icon.getIconWidth(), h=icon.getIconHeight();
+        if (iconAlpha != 1f) {
+            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, iconAlpha));
+        }
         icon.paintIcon ( nc, g, p.x-w/2, p.y-h/2 );
+        g.setPaintMode();
         if(name != null) {
             if (inactive || n.isDisabled()) {
@@ -208,4 +213,35 @@
             g.setColor(selected? selectedColor : relationSelectedColor);
             g.drawRect(p.x-w/2-2, p.y-h/2-2, w+4, h+4);
+        }
+    }
+
+    public void drawNodeSymbol(Node n, Symbol s, boolean selected, boolean member, String name) {
+        Point p = nc.getPoint(n);
+        if ((p.x < 0) || (p.y < 0) || (p.x > nc.getWidth()) || (p.y > nc.getHeight())) return;
+        int radius = (int) (s.size / 2);
+
+        if (s.fillColor != null) {
+            g.setColor(s.fillColor);
+            switch (s.symbol) {
+                case CIRCLE:
+                    g.fillOval(p.x - radius, p.y - radius, (int) s.size, (int) s.size);
+                    break;
+                case SQUARE:
+                    g.fillRect(p.x - radius, p.y - radius, (int) s.size, (int) s.size);
+                    break;
+            }
+        }
+        if (s.stroke != null) {
+            g.setStroke(s.stroke);
+            g.setColor(s.strokeColor);
+            switch (s.symbol) {
+                case CIRCLE:
+                    g.drawOval(p.x - radius, p.y - radius, (int) s.size - 1, (int) s.size - 1);
+                    break;
+                case SQUARE:
+                    g.drawRect(p.x - radius, p.y - radius, (int) s.size - 1, (int) s.size - 1);
+                    break;
+            }
+            g.setStroke(new BasicStroke());
         }
     }
@@ -271,7 +307,10 @@
             TexturePaint texture = new TexturePaint(fillImage, 
                     new Rectangle(polygon.xpoints[0], polygon.ypoints[0], fillImage.getWidth(), fillImage.getHeight()));
-
             g.setPaint(texture);
+            if (color.getAlpha() != 255) {
+                g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, ElemStyle.color_int2float(color.getAlpha())));
+            }
             g.fill(polygon);
+            g.setPaintMode();
         }
 
