Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java	(revision 986)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java	(revision 987)
@@ -31,4 +31,5 @@
 import org.openstreetmap.josm.gui.mappaint.AreaElemStyle;
 import org.openstreetmap.josm.gui.mappaint.ElemStyle;
+import org.openstreetmap.josm.gui.mappaint.ElemStyles;
 import org.openstreetmap.josm.gui.mappaint.IconElemStyle;
 import org.openstreetmap.josm.gui.mappaint.LineElemStyle;
@@ -46,10 +47,10 @@
 	protected Stroke currentStroke = null;
 	protected static final Font orderFont = new Font("Helvetica", Font.PLAIN, 8);
+	protected ElemStyles styles;
+	protected double circum;
 
 	protected boolean isZoomOk(ElemStyle e) {
 		if (!zoomLevelDisplay) /* show everything if the user wishes so */
 			return true;
-
-		double circum = Main.map.mapView.getScale()*100*Main.proj.scaleFactor()*40041455; // circumference of the earth in meter
 
 		if(e == null) /* the default for things that don't have a rule (show, if scale is smaller than 1500m) */
@@ -71,15 +72,13 @@
 	 */
 	public void visit(Node n) {
-		IconElemStyle nodeStyle = MapPaintStyles.getStyles().get(n);
+		IconElemStyle nodeStyle = styles.get(n);
 		if (nodeStyle != null && isZoomOk(nodeStyle))
 			drawNode(n, nodeStyle.icon, nodeStyle.annotate);
-		else {
-			if (n.selected)
-				drawNode(n, selectedColor, selectedNodeSize, selectedNodeRadius, fillSelectedNode);
-			else if (n.tagged)
-				drawNode(n, nodeColor, taggedNodeSize, taggedNodeRadius, fillUnselectedNode);
-			else
-				drawNode(n, nodeColor, unselectedNodeSize, unselectedNodeRadius, fillUnselectedNode);
-		}
+		else if (n.selected)
+			drawNode(n, selectedColor, selectedNodeSize, selectedNodeRadius, fillSelectedNode);
+		else if (n.tagged)
+			drawNode(n, nodeColor, taggedNodeSize, taggedNodeRadius, fillUnselectedNode);
+		else
+			drawNode(n, nodeColor, unselectedNodeSize, unselectedNodeRadius, fillUnselectedNode);
 	}
 
@@ -89,5 +88,6 @@
 	 */
 	public void visit(Way w) {
-		double circum = Main.map.mapView.getScale()*100*Main.proj.scaleFactor()*40041455; // circumference of the earth in meter
+		if(w.nodes.size() < 2)
+			return;
 		// show direction arrows, if draw.segment.relevant_directions_only is not set, the way is tagged with a direction key
 		// (even if the tag is negated as in oneway=false) or the way is selected
@@ -96,19 +96,17 @@
 
 		Color color = untaggedColor;
-		Color areacolor = untaggedColor;
 		int width = defaultSegmentWidth;
 		int realWidth = 0; //the real width of the element in meters
 		boolean dashed = false;
-		boolean area = false;
-		ElemStyle wayStyle = MapPaintStyles.getStyles().get(w);
+		ElemStyle wayStyle = styles.get(w);
 
 		if(!isZoomOk(wayStyle))
 			return;
-		if(w.nodes.size() < 2)
-			return;
 
 		LineElemStyle l = null;
 		if(wayStyle!=null)
 		{
+			Color areacolor = untaggedColor;
+			boolean area = false;
 			if(wayStyle instanceof LineElemStyle)
 				l = (LineElemStyle)wayStyle;
@@ -127,8 +125,8 @@
 				dashed = l.dashed;
 			}
-		}
-
-		if (area && fillAreas)
-			drawWayAsArea(w, areacolor);
+			if (area && fillAreas)
+				drawWayAsArea(w, areacolor);
+		}
+
 		if (realWidth > 0 && useRealWidth && !showDirection)
 		{
@@ -194,4 +192,5 @@
 			}
 		}
+		displaySegments();
 	}
 
@@ -317,15 +316,26 @@
 		fillAreas = Main.pref.getBoolean("mappaint.fillareas", true);
 		fillAlpha = Math.min(255, Math.max(0, Integer.valueOf(Main.pref.getInteger("mappaint.fillalpha", 50))));
-
-		Collection<Way> noAreaWays = new LinkedList<Way>();
-
-		for (final OsmPrimitive osm : data.ways)
-			if (!osm.incomplete && !osm.deleted && MapPaintStyles.getStyles().isArea((Way)osm))
+		circum = Main.map.mapView.getScale()*100*Main.proj.scaleFactor()*40041455; // circumference of the earth in meter
+		styles = MapPaintStyles.getStyles();
+
+		if(styles.hasAreas())
+		{
+			Collection<Way> noAreaWays = new LinkedList<Way>();
+
+			for (final OsmPrimitive osm : data.ways)
+				if (!osm.incomplete && !osm.deleted && styles.isArea((Way)osm))
+					osm.visit(this);
+				else if (!osm.deleted && !osm.incomplete)
+					noAreaWays.add((Way)osm);
+
+			for (final OsmPrimitive osm : noAreaWays)
 				osm.visit(this);
-			else if (!osm.deleted && !osm.incomplete)
-				noAreaWays.add((Way)osm);
-
-		for (final OsmPrimitive osm : noAreaWays)
-			osm.visit(this);
+		}
+		else
+		{
+			for (final OsmPrimitive osm : data.ways)
+				if (!osm.incomplete && !osm.deleted)
+					osm.visit(this);
+		}
 
 		for (final OsmPrimitive osm : data.getSelected())
Index: trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java	(revision 986)
+++ trunk/src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java	(revision 987)
@@ -72,5 +72,5 @@
 	protected int selectedNodeSize;
 	protected int unselectedNodeSize;
-	protected int defaultSegmentWidth = 2;
+	protected int defaultSegmentWidth;
 	protected int virtualNodeSize;
 	protected int virtualNodeSpace;
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/ElemStyleHandler.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/ElemStyleHandler.java	(revision 986)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/ElemStyleHandler.java	(revision 987)
@@ -14,4 +14,5 @@
 	boolean hadLine, hadLineMod, hadIcon, hadArea;
 	ElemStyles styles;
+	String styleName;
 	RuleElem rule = new RuleElem();
 
@@ -38,5 +39,6 @@
 	};
 
-	public ElemStyleHandler() {
+	public ElemStyleHandler(String name) {
+		styleName = name;
 		inDoc=inRule=inCondition=inElemStyle=inLine=inIcon=inArea=false;
 		rule.init();
@@ -174,14 +176,14 @@
 		{
 			if(hadLine)
-				styles.add(rule.key, rule.value, rule.boolValue,
+				styles.add(styleName, rule.key, rule.value, rule.boolValue,
 				new LineElemStyle(rule.line, rule.scaleMax, rule.scaleMin));
 			if(hadLineMod)
-				styles.addModifier(rule.key, rule.value, rule.boolValue,
+				styles.addModifier(styleName, rule.key, rule.value, rule.boolValue,
 				new LineElemStyle(rule.line, rule.scaleMax, rule.scaleMin));
 			if(hadIcon)
-				styles.add(rule.key, rule.value, rule.boolValue,
+				styles.add(styleName, rule.key, rule.value, rule.boolValue,
 				new IconElemStyle(rule.icon, rule.scaleMax, rule.scaleMin));
 			if(hadArea)
-				styles.add(rule.key, rule.value, rule.boolValue,
+				styles.add(styleName, rule.key, rule.value, rule.boolValue,
 				new AreaElemStyle(rule.area, rule.scaleMax, rule.scaleMin));
 			inRule = false;
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java	(revision 986)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/ElemStyles.java	(revision 987)
@@ -11,18 +11,26 @@
 import org.openstreetmap.josm.data.osm.OsmUtils;
 import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.Main;
 
 public class ElemStyles
 {
-	private HashMap<String, IconElemStyle> icons;
-	private HashMap<String, LineElemStyle> lines;
-	private HashMap<String, AreaElemStyle> areas;
-	private HashMap<String, LineElemStyle> modifiers;
+	private class StyleSet {
+		HashMap<String, IconElemStyle> icons;
+		HashMap<String, LineElemStyle> lines;
+		HashMap<String, AreaElemStyle> areas;
+		HashMap<String, LineElemStyle> modifiers;
+		public StyleSet()
+		{
+			icons = new HashMap<String, IconElemStyle>();
+			lines = new HashMap<String, LineElemStyle>();
+			modifiers = new HashMap<String, LineElemStyle>();
+			areas = new HashMap<String, AreaElemStyle>();
+		}
+	}
+	HashMap<String, StyleSet> styleSet;
 
 	public ElemStyles()
 	{
-		icons = new HashMap<String, IconElemStyle>();
-		lines = new HashMap<String, LineElemStyle>();
-		modifiers = new HashMap<String, LineElemStyle>();
-		areas = new HashMap<String, AreaElemStyle>();
+		styleSet = new HashMap<String, StyleSet>();
 	}
 
@@ -37,28 +45,42 @@
 	}
 
-	public void add(String k, String v, String b, LineElemStyle style)
+	public void add(String name, String k, String v, String b, LineElemStyle style)
 	{
-		lines.put(getKey(k,v,b), style);
+		getStyleSet(name, true).lines.put(getKey(k,v,b), style);
 	}
 
-	public void addModifier(String k, String v, String b, LineElemStyle style)
+	public void addModifier(String name, String k, String v, String b, LineElemStyle style)
 	{
-		modifiers.put(getKey(k,v,b), style);
+		getStyleSet(name, true).modifiers.put(getKey(k,v,b), style);
 	}
 
-	public void add(String k, String v, String b, AreaElemStyle style)
+	public void add(String name, String k, String v, String b, AreaElemStyle style)
 	{
-		areas.put(getKey(k,v,b), style);
+		getStyleSet(name, true).areas.put(getKey(k,v,b), style);
 	}
 
-	public void add(String k, String v, String b, IconElemStyle style)
+	public void add(String name, String k, String v, String b, IconElemStyle style)
 	{
-		icons.put(getKey(k,v,b), style);
+		getStyleSet(name, true).icons.put(getKey(k,v,b), style);
+	}
+
+	private StyleSet getStyleSet(String name, boolean create)
+	{
+		if(name == null)
+			name = Main.pref.get("mappaint.style", "standard");
+		StyleSet s = styleSet.get(name);
+		if(create && s == null)
+		{
+			s = new StyleSet();
+			styleSet.put(name, s);
+		}
+		return s;
 	}
 
 	public IconElemStyle get(Node n)
 	{
+		StyleSet ss = getStyleSet(null, false);
 		IconElemStyle ret = null;
-		if(n.keys != null)
+		if(ss != null && n.keys != null)
 		{
 			Iterator<String> iterator = n.keys.keySet().iterator();
@@ -68,15 +90,15 @@
 				String val = n.keys.get(key);
 				IconElemStyle style;
-				if((style = icons.get("n" + key + "=" + val)) != null)
+				if((style = ss.icons.get("n" + key + "=" + val)) != null)
 				{
 					if(ret == null || style.priority > ret.priority)
 						ret = style;
 				}
-				if((style = icons.get("b" + key + "=" + OsmUtils.getNamedOsmBoolean(val))) != null)
+				if((style = ss.icons.get("b" + key + "=" + OsmUtils.getNamedOsmBoolean(val))) != null)
 				{
 					if(ret == null || style.priority > ret.priority)
 						ret = style;
 				}
-				if((style = icons.get("x" + key)) != null)
+				if((style = ss.icons.get("x" + key)) != null)
 				{
 					if(ret == null || style.priority > ret.priority)
@@ -90,38 +112,38 @@
 	public ElemStyle get(Way w)
 	{
+		StyleSet ss = getStyleSet(null, false);
+		if(ss == null || w.keys == null)
+			return null;
 		AreaElemStyle retArea = null;
 		LineElemStyle retLine = null;
 		List<LineElemStyle> over = new LinkedList<LineElemStyle>();
-		if(w.keys != null)
+		Iterator<String> iterator = w.keys.keySet().iterator();
+		while(iterator.hasNext())
 		{
-			Iterator<String> iterator = w.keys.keySet().iterator();
-			while(iterator.hasNext())
-			{
-				String key = iterator.next();
-				String val = w.keys.get(key);
-				AreaElemStyle styleArea;
-				LineElemStyle styleLine;
-				String idx = "n" + key + "=" + val;
-				if((styleArea = areas.get(idx)) != null && (retArea == null || styleArea.priority > retArea.priority))
-					retArea = styleArea;
-				if((styleLine = lines.get(idx)) != null && (retLine == null || styleLine.priority > retLine.priority))
-					retLine = styleLine;
-				if((styleLine = modifiers.get(idx)) != null)
-					over.add(styleLine);
-				idx = "b" + key + "=" + OsmUtils.getNamedOsmBoolean(val);
-				if((styleArea = areas.get(idx)) != null && (retArea == null || styleArea.priority > retArea.priority))
-					retArea = styleArea;
-				if((styleLine = lines.get(idx)) != null && (retLine == null || styleLine.priority > retLine.priority))
-					retLine = styleLine;
-				if((styleLine = modifiers.get(idx)) != null)
-					over.add(styleLine);
-				idx = "x" + key;
-				if((styleArea = areas.get(idx)) != null && (retArea == null || styleArea.priority > retArea.priority))
-					retArea = styleArea;
-				if((styleLine = lines.get(idx)) != null && (retLine == null || styleLine.priority > retLine.priority))
-					retLine = styleLine;
-				if((styleLine = modifiers.get(idx)) != null)
-					over.add(styleLine);
-			}
+			String key = iterator.next();
+			String val = w.keys.get(key);
+			AreaElemStyle styleArea;
+			LineElemStyle styleLine;
+			String idx = "n" + key + "=" + val;
+			if((styleArea = ss.areas.get(idx)) != null && (retArea == null || styleArea.priority > retArea.priority))
+				retArea = styleArea;
+			if((styleLine = ss.lines.get(idx)) != null && (retLine == null || styleLine.priority > retLine.priority))
+				retLine = styleLine;
+			if((styleLine = ss.modifiers.get(idx)) != null)
+				over.add(styleLine);
+			idx = "b" + key + "=" + OsmUtils.getNamedOsmBoolean(val);
+			if((styleArea = ss.areas.get(idx)) != null && (retArea == null || styleArea.priority > retArea.priority))
+				retArea = styleArea;
+			if((styleLine = ss.lines.get(idx)) != null && (retLine == null || styleLine.priority > retLine.priority))
+				retLine = styleLine;
+			if((styleLine = ss.modifiers.get(idx)) != null)
+				over.add(styleLine);
+			idx = "x" + key;
+			if((styleArea = ss.areas.get(idx)) != null && (retArea == null || styleArea.priority > retArea.priority))
+				retArea = styleArea;
+			if((styleLine = ss.lines.get(idx)) != null && (retLine == null || styleLine.priority > retLine.priority))
+				retLine = styleLine;
+			if((styleLine = ss.modifiers.get(idx)) != null)
+				over.add(styleLine);
 		}
 		if(over.size() != 0 && retLine != null)
@@ -142,5 +164,6 @@
 	public boolean isArea(Way w)
 	{
-		if(w.keys != null)
+		StyleSet ss = getStyleSet(null, false);
+		if(ss != null && w.keys != null)
 		{
 			Iterator<String> iterator = w.keys.keySet().iterator();
@@ -149,7 +172,7 @@
 				String key = iterator.next();
 				String val = w.keys.get(key);
-				if(areas.containsKey("n" + key + "=" + val)
-				|| areas.containsKey("n" + key + "=" + OsmUtils.getNamedOsmBoolean(val))
-				|| areas.containsKey("x" + key))
+				if(ss.areas.containsKey("n" + key + "=" + val)
+				|| ss.areas.containsKey("n" + key + "=" + OsmUtils.getNamedOsmBoolean(val))
+				|| ss.areas.containsKey("x" + key))
 					return true;
 			}
@@ -157,3 +180,8 @@
 		return false;
 	}
+	public boolean hasAreas()
+	{
+		StyleSet ss = getStyleSet(null, false);
+		return ss != null && ss.areas.size() > 0;
+	}
 }
Index: trunk/src/org/openstreetmap/josm/gui/mappaint/MapPaintStyles.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/mappaint/MapPaintStyles.java	(revision 986)
+++ trunk/src/org/openstreetmap/josm/gui/mappaint/MapPaintStyles.java	(revision 987)
@@ -80,5 +80,5 @@
 //				System.out.println("mappaint: Using style file: \"" + f + "\"");
 				XMLReader xmlReader = XMLReaderFactory.createXMLReader();
-				ElemStyleHandler handler = new ElemStyleHandler();
+				ElemStyleHandler handler = new ElemStyleHandler(styleName);
 				xmlReader.setContentHandler(handler);
 				xmlReader.setErrorHandler(handler);
@@ -101,5 +101,5 @@
 				{
 					XMLReader xmlReader = XMLReaderFactory.createXMLReader();
-					ElemStyleHandler handler = new ElemStyleHandler();
+					ElemStyleHandler handler = new ElemStyleHandler(internalStyleName);
 					xmlReader.setContentHandler(handler);
 					xmlReader.setErrorHandler(handler);
