Index: /trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 366)
+++ /trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java	(revision 367)
@@ -5,8 +5,10 @@
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -81,4 +83,12 @@
 
 	/**
+	 * true if this object is considered "tagged". To be "tagged", an object
+	 * must have one or more "non-standard" tags. "created_by" and "source"
+	 * are typically considered "standard" tags and do not make an object 
+	 * "tagged".
+	 */
+	public boolean tagged = false;
+	
+	/**
 	 * If set to true, this object is currently selected.
 	 */
@@ -104,4 +114,11 @@
 	public boolean incomplete = false; 
 
+	/**
+	 * Contains a list of "uninteresting" keys that do not make an object
+	 * "tagged".
+	 */
+	public static Collection<String> uninteresting = 
+		new HashSet<String>(Arrays.asList(new String[] {"source", "note", "created_by"}));
+	
 	/**
 	 * Implementation of the visitor scheme. Subclases have to call the correct
@@ -176,4 +193,5 @@
 			keys.put(key, value);
 		}
+		checkTagged();
 	}
 	/**
@@ -186,4 +204,5 @@
 				keys = null;
 		}
+		checkTagged();
 	}
 
@@ -215,4 +234,5 @@
 		selected = osm.selected;
 		timestamp = osm.timestamp;
+		tagged = osm.tagged;
 	}
 
@@ -237,4 +257,19 @@
 	}
 	
+	/**
+	 * Updates the "tagged" flag. "keys" property should probably be made private
+	 * to make sure this gets called when keys are set.
+	 */
+	public void checkTagged() {
+		tagged = false;
+		if (keys != null) {
+			for (Entry<String,String> e : keys.entrySet()) {
+				if (!uninteresting.contains(e.getKey())) {
+					tagged = true;
+					break;
+				}
+			}
+		}
+	}
 	
 }
Index: /trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java	(revision 366)
+++ /trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java	(revision 367)
@@ -7,4 +7,5 @@
 import java.awt.Point;
 import java.awt.Rectangle;
+import java.awt.Stroke;
 import java.awt.geom.GeneralPath;
 import java.awt.geom.Line2D;
@@ -51,4 +52,5 @@
 	protected Color nodeColor;
 	protected Color dfltWayColor;
+	protected Color untaggedWayColor;
 	protected Color incompleteColor;
 	protected Color backgroundColor;
@@ -68,4 +70,5 @@
 		nodeColor = getPreferencesColor("node", Color.RED);
 		dfltWayColor = getPreferencesColor("way", darkblue);
+		untaggedWayColor = getPreferencesColor("untagged way", darkgreen);
 		incompleteColor = getPreferencesColor("incomplete way", darkerblue);
 		backgroundColor = getPreferencesColor("background", Color.BLACK);
@@ -73,11 +76,21 @@
 		showOrderNumber = Main.pref.getBoolean("draw.segment.order_number");
 		
+		// draw tagged ways first, then untagged ways. takes
+		// time to iterate through list twice, OTOH does not
+		// require changing the colour while painting...
 		for (final OsmPrimitive osm : data.ways)
-			if (!osm.deleted && !osm.selected)
+			if (!osm.deleted && !osm.selected && osm.tagged)
 				osm.visit(this);
 		displaySegments(null);
+
+	    for (final OsmPrimitive osm : data.ways)
+			if (!osm.deleted && !osm.selected && !osm.tagged)
+				osm.visit(this);
+		displaySegments(null);
+	    
 		for (final OsmPrimitive osm : data.nodes)
 			if (!osm.deleted && !osm.selected)
 				osm.visit(this);
+	
 		for (final OsmPrimitive osm : data.getSelected())
 			if (!osm.deleted)
@@ -113,7 +126,10 @@
 
 		Color wayColor;
-		if (inactive)
+		
+		if (inactive) {
 			wayColor = inactiveColor;
-		else {
+		} else if (!w.tagged) {
+			wayColor = untaggedWayColor;
+		} else {
 			wayColor = dfltWayColor;
 		}
@@ -171,5 +187,10 @@
 
 		if (screen.contains(p.x, p.y))
-			g.drawRect(p.x-1, p.y-1, 2, 2);
+			if (n.tagged) {
+				g.drawRect(p.x, p.y, 0, 0);
+				g.drawRect(p.x-2, p.y-2, 4, 4);
+			} else {
+				g.drawRect(p.x-1, p.y-1, 2, 2);
+			}
 	}
 
@@ -179,7 +200,5 @@
 	protected void drawSegment(Node n1, Node n2, Color col, boolean showDirection) {
 
-		if (col != currentColor) {
-			displaySegments(col);
-		}
+		if (col != currentColor) displaySegments(col);
 		
 		Point p1 = nc.getPoint(n1.eastNorth);
Index: /trunk/src/org/openstreetmap/josm/io/OsmReader.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/OsmReader.java	(revision 366)
+++ /trunk/src/org/openstreetmap/josm/io/OsmReader.java	(revision 367)
@@ -88,4 +88,5 @@
 			osm.user = user;
 			osm.visible = visible;
+			osm.checkTagged();
 		}
 	}
