Index: /applications/editors/josm/plugins/smed2/src/panels/ShowFrame.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/panels/ShowFrame.java	(revision 30023)
+++ /applications/editors/josm/plugins/smed2/src/panels/ShowFrame.java	(revision 30024)
@@ -53,6 +53,10 @@
 			return new Point2D.Double(150, 150);
 		}
+
+		public double mile(Feature feature) {
+			return 1000;
+		}
 	}
-	
+
 	public ShowFrame(String title) {
 		super(title);
Index: /applications/editors/josm/plugins/smed2/src/s57/S57att.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/s57/S57att.java	(revision 30023)
+++ /applications/editors/josm/plugins/smed2/src/s57/S57att.java	(revision 30024)
@@ -203,5 +203,5 @@
 	  objatt.add(new ObjAtt(Obj.WEDKLP, Att.CATWED)); objatt.add(new ObjAtt(Obj.WRECKS, Att.CATWRK)); objatt.add(new ObjAtt(Obj.TS_FEB, Att.CAT_TS));
 	  objatt.add(new ObjAtt(Obj.DEPCNT, Att.VALDCO)); objatt.add(new ObjAtt(Obj.SOUNDG, Att.VALSOU)); objatt.add(new ObjAtt(Obj.NOTMRK, Att.BNKWTW));
-	  objatt.add(new ObjAtt(Obj.UNKOBJ, Att.RADIUS)); objatt.add(new ObjAtt(Obj.LIGHTS, Att.LITRAD));
+	  objatt.add(new ObjAtt(Obj.ACHBRT, Att.RADIUS)); objatt.add(new ObjAtt(Obj.LIGHTS, Att.LITRAD));
 	}
 	
Index: /applications/editors/josm/plugins/smed2/src/s57/S57val.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/s57/S57val.java	(revision 30023)
+++ /applications/editors/josm/plugins/smed2/src/s57/S57val.java	(revision 30024)
@@ -1107,7 +1107,7 @@
 			}
 		case I:
-			return null;
+			return 0;
 		case F:
-			return null;
+			return 0.0;
 		}
 		return null;
Index: /applications/editors/josm/plugins/smed2/src/seamap/MapHelper.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/seamap/MapHelper.java	(revision 30023)
+++ /applications/editors/josm/plugins/smed2/src/seamap/MapHelper.java	(revision 30024)
@@ -7,3 +7,4 @@
 public interface MapHelper {
 	Point2D getPoint(Snode coord);
+	double mile(Feature feature);
 }
Index: /applications/editors/josm/plugins/smed2/src/seamap/Renderer.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/seamap/Renderer.java	(revision 30023)
+++ /applications/editors/josm/plugins/smed2/src/seamap/Renderer.java	(revision 30024)
@@ -61,10 +61,12 @@
 	public static final double symbolScale[] = { 256.0, 128.0, 64.0, 32.0, 16.0, 8.0, 4.0, 2.0, 1.0, 0.61, 0.372, 0.227, 0.138, 0.0843, 0.0514, 0.0313, 0.0191, 0.0117, 0.007, 0.138 };
 
-	public static final double textScale[] = { 256.0, 128.0, 64.0, 32.0, 16.0, 8.0, 4.0, 2.0, 1.0, 0.5556, 0.3086, 0.1714, 0.0953, 0.0529, 0.0294, 0.0163, 0.0091, 0.0050, 0.0028, 0.0163 };
+//	public static final double textScale[] = { 256.0, 128.0, 64.0, 32.0, 16.0, 8.0, 4.0, 2.0, 1.0, 0.5556, 0.3086, 0.1714, 0.0953, 0.0529, 0.0294, 0.0163, 0.0091, 0.0050, 0.0028, 0.0163 };
+	
+	public enum LabelStyle { NONE, RRCT, RECT, ELPS, CIRC }
 
 	static MapHelper helper;
 	static SeaMap map;
 	static double sScale;
-	static double tScale;
+//	static double tScale;
 	static Graphics2D g2;
 	static int zoom;
@@ -76,5 +78,5 @@
 		map = m;
 		sScale = symbolScale[zoom] * factor;
-		tScale = textScale[zoom] * factor;
+//		tScale = textScale[zoom] * factor;
 		if (map != null) {
 			g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
@@ -139,8 +141,4 @@
 	}
 
-	private double mile(Feature feature) {
-		return Math.pow(2, zoom) * 256 / (21600 * Math.abs(Math.cos(feature.centre.lat)));
-	}
-	
 	public static void lineSymbols(Feature feature, Symbol prisymb, double space, Symbol secsymb, int ratio, Color col) {
 		Area area;
@@ -274,4 +272,38 @@
 	}
 	
+	public static void lineCircle(Feature feature, LineStyle style, double radius, UniHLU units) {
+		switch (units) {
+		case HLU_FEET:
+			radius /= 6076;
+			break;
+		case HLU_KMTR:
+			radius /= 1.852;
+			break;
+		case HLU_HMTR:
+			radius /= 18.52;
+			break;
+		case HLU_SMIL:
+			radius /= 1.15078;
+			break;
+		case HLU_NMIL:
+			break;
+		default:
+			radius /= 1852;
+			break;
+		}
+		radius *= helper.mile(feature);
+		Symbol circle = new Symbol();
+		if (style.fill != null) {
+			circle.add(new Instr(Prim.FILL, style.fill));
+			circle.add(new Instr(Prim.RSHP, new Ellipse2D.Double(-radius,-radius,radius*2,radius*2)));
+		}
+		circle.add(new Instr(Prim.FILL, style.line));
+		circle.add(new Instr(Prim.STRK, new BasicStroke(style.width, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1, style.dash, 0)));
+		circle.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-radius,-radius,radius*2,radius*2)));
+		Point2D point = helper.getPoint(feature.centre);
+		Symbols.drawSymbol(g2, circle, sScale, point.getX(), point.getY(), null, null);
+	}
+
+	
 	public static void fillPattern(Feature feature, BufferedImage image) {
 		Path2D.Double p = new Path2D.Double();
@@ -300,7 +332,66 @@
 	}
 
-	public static void labelText(Feature feature, String str, Font font, Color colour, Delta delta) {
+	public static void labelText(Feature feature, String str, Font font, LabelStyle style, Color fg, Color bg, Delta delta) {
+		if (delta == null) delta = new Delta(Handle.CC, null);
+		if (bg == null) bg = new Color(0x00000000, true);
+		if (str == null) str = " ";
+		if (str.isEmpty()) str = " ";
+    FontRenderContext frc = g2.getFontRenderContext();
+    GlyphVector gv = font.deriveFont((float)(font.getSize())).createGlyphVector(frc, str.equals(" ") ? "M" : str);
+    Rectangle2D bounds = gv.getVisualBounds();
+    double width = bounds.getWidth() * 1.5;
+    double height = bounds.getHeight() * 1.5;
+    double dx = 0;
+    double dy = 0;
+		switch (delta.h) {
+		case CC:
+			dx = width / 2.0;
+			dy = height / 2.0;
+			break;
+		case TL:
+			dx = 0;
+			dy = 0;
+			break;
+		case TR:
+			dx = width;
+			dy = 0;
+			break;
+		case TC:
+			dx = width / 2.0;
+			dy = 0;
+			break;
+		case LC:
+			dx = 0;
+			dy = height / 2.0;
+			break;
+		case RC:
+			dx = width;
+			dy = height / 2.0;
+			break;
+		case BL:
+			dx = 0;
+			dy = height;
+			break;
+		case BR:
+			dx = width;
+			dy = height;
+			break;
+		case BC:
+			dx = width / 2.0;
+			dy = height;
+			break;
+		}
 		Symbol label = new Symbol();
-		label.add(new Instr(Prim.TEXT, new Caption(str, font, colour, (delta == null) ? new Delta(Handle.CC, null) : delta)));
+		switch (style) {
+		case RRCT:
+			if (width < height) width = height;
+			label.add(new Instr(Prim.FILL, bg));
+			label.add(new Instr(Prim.RSHP, new RoundRectangle2D.Double(-dx,-dy/1.25,width,height,height,height)));
+			label.add(new Instr(Prim.FILL, fg));
+			label.add(new Instr(Prim.STRK, new BasicStroke(1 + (int)(height/10), BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+			label.add(new Instr(Prim.RRCT, new RoundRectangle2D.Double(-dx,-dy/1.25,width,height,height,height)));
+			break;
+		}
+		label.add(new Instr(Prim.TEXT, new Caption(str, font, fg, delta)));
 		Point2D point = helper.getPoint(feature.centre);
 		Symbols.drawSymbol(g2, label, sScale, point.getX(), point.getY(), null, null);
@@ -325,5 +416,5 @@
 			g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
 	    FontRenderContext frc = g2.getFontRenderContext();
-	    GlyphVector gv = font.deriveFont((float)(font.getSize()*tScale)).createGlyphVector(frc, str);
+	    GlyphVector gv = font.deriveFont((float)(font.getSize()*sScale)).createGlyphVector(frc, str);
 //			double psize = Math.abs(prect.getX());
 			Point2D prev = new Point2D.Double();
Index: /applications/editors/josm/plugins/smed2/src/seamap/Rules.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/seamap/Rules.java	(revision 30023)
+++ /applications/editors/josm/plugins/smed2/src/seamap/Rules.java	(revision 30024)
@@ -19,4 +19,5 @@
 import s57.S57obj.*;
 
+import seamap.Renderer.*;
 import seamap.SeaMap.*;
 import symbols.*;
@@ -111,5 +112,5 @@
 				Renderer.lineVector(feature, new LineStyle(Color.black, 8, new float[] { 25, 25 }, null));
 			if ((zoom >= 12) && (name != null))
-				Renderer.labelText(feature, (String) name.val, new Font("Arial", Font.PLAIN, 100), Color.black, null);
+				Renderer.labelText(feature, (String) name.val, new Font("Arial", Font.PLAIN, 100), LabelStyle.NONE, Color.black, null, null);
 			break;
 		case FAIRWY:
@@ -135,5 +136,5 @@
 				Renderer.lineVector(feature, new LineStyle(Color.black, 20, new float[] { 40, 40 }, null));
 				if ((zoom >= 15) && (name != null))
-					Renderer.labelText(feature, (String) name.val, new Font("Arial", Font.BOLD, 80), Color.black, new Delta(Handle.TC, AffineTransform.getTranslateInstance(0, 10)));
+					Renderer.labelText(feature, (String) name.val, new Font("Arial", Font.BOLD, 80), LabelStyle.NONE, Color.black, null, new Delta(Handle.TC, AffineTransform.getTranslateInstance(0, 10)));
 			}
 			break;
@@ -202,5 +203,5 @@
 			}
 			if ((zoom >= 15) && (name != null))
-				Renderer.labelText(feature, (String) name.val, new Font("Arial", Font.BOLD, 80), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -90)));
+				Renderer.labelText(feature, (String) name.val, new Font("Arial", Font.BOLD, 80), LabelStyle.NONE, Color.black, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -90)));
 			break;
 		}
@@ -309,4 +310,15 @@
 		AttItem name = feature.atts.get(Att.OBJNAM);
 		switch (feature.type) {
+		case ACHBRT:
+			if (zoom >= 14) {
+				Renderer.symbol(feature, Harbours.Anchorage, null, null, new Scheme(new Color(0xc480ff)));
+				Renderer.labelText(feature, name == null ? " " : (String) name.val, new Font("Arial", Font.PLAIN, 30), LabelStyle.RRCT, new Color(0xc480ff), Color.white, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 0)));
+			}
+			double radius = (Double)Renderer.getAttVal(feature, Obj.ACHBRT, 0, Att.RADIUS);
+			if (radius != 0) {
+				UniHLU units = (UniHLU)Renderer.getAttVal(feature, Obj.ACHBRT, 0, Att.HUNITS);
+				Renderer.lineCircle (feature, new LineStyle(new Color(0xc480ff), 10, new float[] { 25, 25 }, null), radius, units);
+			}
+			break;
 		case ACHARE:
 			if (zoom >= 12) {
@@ -318,9 +330,9 @@
 				}
 				if ((zoom >= 15) && ((name) != null)) {
-					Renderer.labelText(feature, (String) name.val, new Font("Arial", Font.BOLD, 60), new Color(0xc480ff), new Delta(Handle.LC, AffineTransform.getTranslateInstance(70, 0)));
+					Renderer.labelText(feature, (String) name.val, new Font("Arial", Font.BOLD, 60), LabelStyle.NONE, new Color(0xc480ff), null, new Delta(Handle.LC, AffineTransform.getTranslateInstance(70, 0)));
 				}
 				ArrayList<StsSTS> sts = (ArrayList<StsSTS>)Renderer.getAttVal(feature, Obj.ACHARE, 0, Att.STATUS);
 				if ((zoom >= 15) && (sts != null) && (sts.contains(StsSTS.STS_RESV))) {
-					Renderer.labelText(feature, "Reserved", new Font("Arial", Font.BOLD, 50), new Color(0xc480ff), new Delta(Handle.TC, AffineTransform.getTranslateInstance(0, 60)));
+					Renderer.labelText(feature, "Reserved", new Font("Arial", Font.PLAIN, 50), LabelStyle.NONE, new Color(0xc480ff), null, new Delta(Handle.TC, AffineTransform.getTranslateInstance(0, 60)));
 				}
 			}
@@ -330,13 +342,13 @@
 				switch (cat) {
 				case ACH_DEEP:
-					Renderer.labelText(feature, "DW", new Font("Arial", Font.BOLD, 50), new Color(0xc480ff), new Delta(Handle.RC, AffineTransform.getTranslateInstance(-60, dy)));
+					Renderer.labelText(feature, "DW", new Font("Arial", Font.BOLD, 50), LabelStyle.NONE, new Color(0xc480ff), null, new Delta(Handle.RC, AffineTransform.getTranslateInstance(-60, dy)));
 					dy += 60;
 					break;
 				case ACH_TANK:
-					Renderer.labelText(feature, "Tanker", new Font("Arial", Font.BOLD, 50), new Color(0xc480ff), new Delta(Handle.RC, AffineTransform.getTranslateInstance(-60, dy)));
+					Renderer.labelText(feature, "Tanker", new Font("Arial", Font.BOLD, 50), LabelStyle.NONE, new Color(0xc480ff), null, new Delta(Handle.RC, AffineTransform.getTranslateInstance(-60, dy)));
 					dy += 60;
 					break;
 				case ACH_H24P:
-					Renderer.labelText(feature, "24h", new Font("Arial", Font.BOLD, 50), new Color(0xc480ff), new Delta(Handle.RC, AffineTransform.getTranslateInstance(-60, dy)));
+					Renderer.labelText(feature, "24h", new Font("Arial", Font.BOLD, 50), LabelStyle.NONE, new Color(0xc480ff), null, new Delta(Handle.RC, AffineTransform.getTranslateInstance(-60, dy)));
 					dy += 60;
 					break;
@@ -750,5 +762,5 @@
 		AttItem name = feature.atts.get(Att.OBJNAM);
 		if ((zoom >= 15) && (name != null))
-			Renderer.labelText(feature, (String) name.val, new Font("Arial", Font.BOLD, 80), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(60, -50)));
+			Renderer.labelText(feature, (String) name.val, new Font("Arial", Font.BOLD, 80), LabelStyle.NONE, Color.black, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(60, -50)));
 /*object_rules(platforms) {
   if (has_object("fog_signal")) object(fogs);
@@ -769,5 +781,5 @@
 				AttItem name = feature.atts.get(Att.OBJNAM);
 				if ((zoom >= 15) && (name != null))
-					Renderer.labelText(feature, (String) name.val, new Font("Arial", Font.BOLD, 80), Color.black, null);
+					Renderer.labelText(feature, (String) name.val, new Font("Arial", Font.BOLD, 80), LabelStyle.NONE, Color.black, null, null);
 			}
 		}
@@ -784,5 +796,5 @@
 			AttItem name = feature.atts.get(Att.OBJNAM);
 			if ((zoom >= 10) && (name != null))
-				Renderer.labelText(feature, (String) name.val, new Font("Arial", Font.BOLD, 150), new Color(0x80c48080), null);
+				Renderer.labelText(feature, (String) name.val, new Font("Arial", Font.BOLD, 150), LabelStyle.NONE, new Color(0x80c48080), null, null);
 			break;
 		case TSELNE:
@@ -883,49 +895,49 @@
 						break;
 					case ROS_VAIS:
-						Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 70), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 180)));
+						Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 40), LabelStyle.NONE, Color.black, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 80)));
 						break;
 					case ROS_VANC:
-						Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 70), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 180)));
+						Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 40), LabelStyle.NONE, Color.black, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 80)));
 						Renderer.symbol(feature, Topmarks.TopNorth, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -25)), null);
 						break;
 					case ROS_VASC:
-						Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 70), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 180)));
+						Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 40), LabelStyle.NONE, Color.black, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 80)));
 						Renderer.symbol(feature, Topmarks.TopSouth, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -25)), null);
 						break;
 					case ROS_VAEC:
-						Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 70), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 180)));
+						Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 40), LabelStyle.NONE, Color.black, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 80)));
 						Renderer.symbol(feature, Topmarks.TopEast, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -25)), null);
 						break;
 					case ROS_VAWC:
-						Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 70), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 180)));
+						Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 40), LabelStyle.NONE, Color.black, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 80)));
 						Renderer.symbol(feature, Topmarks.TopWest, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -25)), null);
 						break;
 					case ROS_VAPL:
-						Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 70), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 180)));
+						Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 40), LabelStyle.NONE, Color.black, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 80)));
 						Renderer.symbol(feature, Topmarks.TopCan, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -25)), null);
 						break;
 					case ROS_VASL:
-						Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 70), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 180)));
+						Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 40), LabelStyle.NONE, Color.black, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 80)));
 						Renderer.symbol(feature, Topmarks.TopCone, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -25)), null);
 						break;
 					case ROS_VAID:
-						Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 70), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 180)));
+						Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 40), LabelStyle.NONE, Color.black, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 80)));
 						Renderer.symbol(feature, Topmarks.TopIsol, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -25)), null);
 						break;
 					case ROS_VASW:
-						Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 70), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 180)));
+						Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 40), LabelStyle.NONE, Color.black, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 80)));
 						Renderer.symbol(feature, Topmarks.TopSphere, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -25)), null);
 						break;
 					case ROS_VASP:
-						Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 70), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 180)));
+						Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 40), LabelStyle.NONE, Color.black, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 80)));
 						Renderer.symbol(feature, Topmarks.TopX, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -25)), null);
 						break;
 					case ROS_VAWK:
-						Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 70), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 180)));
+						Renderer.labelText(feature, " V-AIS", new Font("Arial", Font.PLAIN, 40), LabelStyle.NONE, Color.black, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 80)));
 						Renderer.symbol(feature, Topmarks.TopCross, null, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -25)), null);
 						break;
 					}
 				}
-				if (!str.isEmpty()) Renderer.labelText(feature, str, new Font("Arial", Font.PLAIN, 70), Color.black, new Delta(Handle.BR, AffineTransform.getTranslateInstance(-30, -180)));
+				if (!str.isEmpty()) Renderer.labelText(feature, str, new Font("Arial", Font.PLAIN, 40), LabelStyle.NONE, Color.black, null, new Delta(Handle.BR, AffineTransform.getTranslateInstance(-30, -80)));
 				break;
 			case RADSTA:
Index: /applications/editors/josm/plugins/smed2/src/smed2/MapImage.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/smed2/MapImage.java	(revision 30023)
+++ /applications/editors/josm/plugins/smed2/src/smed2/MapImage.java	(revision 30024)
@@ -10,4 +10,5 @@
 package smed2;
 
+import java.awt.BasicStroke;
 import java.awt.Color;
 import java.awt.Font;
@@ -74,6 +75,6 @@
 	public void paint(Graphics2D g2, MapView mv, Bounds bb) {
 		Rectangle rect = Main.map.mapView.getBounds();
-//		g2.setBackground(new Color(0xb5d0d0));
-//		g2.clearRect(rect.x, rect.y, rect.width, rect.height);
+//	g2.setBackground(new Color(0xb5d0d0));
+//	g2.clearRect(rect.x, rect.y, rect.width, rect.height);
 		g2.setPaint(Color.black);
 		g2.setFont(new Font("Arial", Font.BOLD, 20));
@@ -99,3 +100,7 @@
 		return (Double) Main.map.mapView.getPoint2D(new LatLon(Math.toDegrees(coord.lat), Math.toDegrees(coord.lon)));
 	}
+
+	public double mile(Feature feature) {
+		return Math.pow(2, zoom) * 256 / (21600 * Math.abs(Math.cos(feature.centre.lat)));
+	}
 }
Index: /applications/editors/josm/plugins/smed2/src/symbols/Harbours.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/symbols/Harbours.java	(revision 30023)
+++ /applications/editors/josm/plugins/smed2/src/symbols/Harbours.java	(revision 30024)
@@ -32,14 +32,4 @@
 	static {
 		Anchorage.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Harbours.Anchor, 1.0, 0, 0, null, null)));
-	}
-	public static final Symbol AnchorBerth = new Symbol();
-	static {
-		AnchorBerth.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Harbours.Anchorage, 1.0, 0, 0, null, null)));
-		AnchorBerth.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		AnchorBerth.add(new Instr(Prim.FILL, Color.white));
-		Ellipse2D.Double s = new Ellipse2D.Double(-25,-25,50,50);
-		AnchorBerth.add(new Instr(Prim.RSHP, s));
-		AnchorBerth.add(new Instr(Prim.FILL, new Color(0xa30075)));
-		AnchorBerth.add(new Instr(Prim.ELPS, s));
 	}
 	public static final Symbol Bollard = new Symbol();
