Index: /trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java	(revision 758)
+++ /trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java	(revision 759)
@@ -2,4 +2,5 @@
 package org.openstreetmap.josm.data.osm.visitor;
 
+import java.awt.BasicStroke;
 import java.awt.Color;
 import java.awt.Graphics;
@@ -7,4 +8,5 @@
 import java.awt.Point;
 import java.awt.Rectangle;
+import java.awt.Stroke;
 import java.awt.geom.GeneralPath;
 
@@ -14,4 +16,5 @@
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Relation;
+import org.openstreetmap.josm.data.osm.RelationMember;
 import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.data.osm.OsmPrimitive;
@@ -31,4 +34,5 @@
 	public final static Color darkblue = new Color(0,0,128);
 	public final static Color darkgreen = new Color(0,128,0);
+	public final static Color teal = new Color(0,128,128);
 
 	/**
@@ -52,4 +56,5 @@
 	protected Color nodeColor;
 	protected Color dfltWayColor;
+	protected Color relationColor;
 	protected Color untaggedWayColor;
 	protected Color incompleteColor;
@@ -72,4 +77,5 @@
 		nodeColor = Preferences.getPreferencesColor("node", Color.RED);
 		dfltWayColor = Preferences.getPreferencesColor("way", darkblue);
+		relationColor = Preferences.getPreferencesColor("relation", teal);
 		untaggedWayColor = Preferences.getPreferencesColor("untagged way", darkgreen);
 		incompleteColor = Preferences.getPreferencesColor("incomplete way", darkerblue);
@@ -82,4 +88,8 @@
 		// time to iterate through list twice, OTOH does not
 		// require changing the colour while painting...
+		for (final OsmPrimitive osm : data.relations)
+			if (!osm.deleted && !osm.selected)
+				osm.visit(this);
+
 		for (final OsmPrimitive osm : data.ways)
 			if (!osm.deleted && !osm.selected && osm.tagged)
@@ -157,6 +167,46 @@
 	}
 
-	public void visit(Relation e) {
-		// relations are not (yet?) drawn.
+	private Stroke relatedWayStroke = new BasicStroke(
+		4, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_BEVEL);
+	public void visit(Relation r) {
+		if (r.incomplete) return;
+
+		Color col;
+		if (inactive) {
+			col = inactiveColor;
+		} else if (r.selected) {
+			col = selectedColor;
+		} else {
+			col = relationColor;
+		}
+		g.setColor(col);
+
+		for (RelationMember m : r.members) {
+			if (m.member.incomplete || m.member.deleted) continue;
+
+			if (m.member instanceof Node) {
+				Point p = nc.getPoint(((Node) m.member).eastNorth);
+				if (p.x < 0 || p.y < 0
+					|| p.x > nc.getWidth() || p.y > nc.getHeight()) continue;
+
+				g.drawOval(p.x-3, p.y-3, 6, 6);
+			} else if (m.member instanceof Way) {
+				GeneralPath path = new GeneralPath();
+
+				boolean first = true;
+				for (Node n : ((Way) m.member).nodes) {
+					if (n.incomplete || n.deleted) continue;
+					Point p = nc.getPoint(n.eastNorth);
+					if (first) {
+						path.moveTo(p.x, p.y);
+						first = false;
+					} else {
+						path.lineTo(p.x, p.y);
+					}
+				}
+
+				((Graphics2D) g).draw(relatedWayStroke.createStrokedShape(path));
+			}
+		}
 	}
 	
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/ColorPreference.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/ColorPreference.java	(revision 758)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/ColorPreference.java	(revision 759)
@@ -150,4 +150,5 @@
 			marktr("way"), ColorHelper.color2html(SimplePaintVisitor.darkblue),
 			marktr("incomplete way"), ColorHelper.color2html(SimplePaintVisitor.darkerblue),
+			marktr("relation"), ColorHelper.color2html(SimplePaintVisitor.teal),
 			marktr("selected"), ColorHelper.color2html(Color.white),
 			marktr("gps point"), ColorHelper.color2html(Color.gray),
