Index: /applications/editors/josm/plugins/smed2/src/panels/PanelMain.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/panels/PanelMain.java	(revision 29197)
+++ /applications/editors/josm/plugins/smed2/src/panels/PanelMain.java	(revision 29198)
@@ -16,6 +16,4 @@
 public class PanelMain extends JPanel {
 
-	private static final long serialVersionUID = 1L;
-	
 	private JTabbedPane tabs = null;
 //	public PanelF panelF = null;
Index: /applications/editors/josm/plugins/smed2/src/panels/ShowFrame.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/panels/ShowFrame.java	(revision 29197)
+++ /applications/editors/josm/plugins/smed2/src/panels/ShowFrame.java	(revision 29198)
@@ -18,5 +18,4 @@
 
 public class ShowFrame extends JFrame implements MapHelper {
-	private static final long serialVersionUID = 1L;
 	
 	public SeaMap showMap;
Index: /applications/editors/josm/plugins/smed2/src/seamap/Renderer.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/seamap/Renderer.java	(revision 29197)
+++ /applications/editors/josm/plugins/smed2/src/seamap/Renderer.java	(revision 29198)
@@ -18,5 +18,4 @@
 import s57.S57att.Att;
 import s57.S57obj.Obj;
-import s57.S57val.ColCOL;
 import s57.S57val.*;
 import s57.S57val;
@@ -66,16 +65,16 @@
 			ArrayList<Long> way = map.ways.get(feature.refs);
 			Coord coord = map.nodes.get(way.get(0));
-	    double llon = Math.toRadians(coord.lon);
-	    double llat = Math.toRadians(coord.lat);
+	    double llon = coord.lon;
+	    double llat = coord.lat;
 	    double sigma = 0.0;
 			for (long node : way) {
 				coord = map.nodes.get(node);
-				double lat = Math.toRadians(coord.lat);
-				double lon = Math.toRadians(coord.lon);
+				double lat = coord.lat;
+				double lon = coord.lon;
 				sigma += (lon * Math.sin(llat)) - (llon * Math.sin(lat));
 				llon = lon;
 				llat = lat;
 	    }
-	    return Math.abs(sigma) / 2.0 * 3444 * 3444;
+	    return Math.abs(sigma) * 3444 * 3444 / 2.0;
 	  }
 	  return 0.0;
@@ -83,5 +82,4 @@
 
 	public static Coord findCentroid(Feature feature) {
-		double tst = calcArea(feature);
 		Coord coord;
 		ArrayList<Long> way = map.ways.get(feature.refs);
@@ -105,5 +103,5 @@
       double lon = coord.lon;
       double lat = coord.lat;
-      double arc = (Math.acos(Math.cos(Math.toRadians(lon-llon)) * Math.cos(Math.toRadians(lat-llat))));
+      double arc = (Math.acos(Math.cos(lon-llon) * Math.cos(lat-llat)));
       slat += (lat * arc);
       slon += (lon * arc);
@@ -122,3 +120,24 @@
 	}
 	
+	public static void lineSymbols(Feature feature, Symbol prisymb, double space, Symbol secsymb, int ratio) {
+		if (feature.flag != Fflag.NODE) {
+			ArrayList<Long> way = map.ways.get(feature.refs);
+			for (long node : way) {
+				Point2D point = helper.getPoint(map.nodes.get(node));
+				
+			}
+		}
+	}
+	
+	public static void lineVector (Feature feature, LineStyle style) {
+		
+	}
+	
+	public static void labelText (Feature feature, String str, TextStyle style, Delta delta) {
+		
+	}
+	
+	public static void lineText (Feature feature, String str, TextStyle style, double offset, Delta delta) {
+		
+	}
 }
Index: /applications/editors/josm/plugins/smed2/src/seamap/Rules.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/seamap/Rules.java	(revision 29197)
+++ /applications/editors/josm/plugins/smed2/src/seamap/Rules.java	(revision 29198)
@@ -10,4 +10,8 @@
 package seamap;
 
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.geom.AffineTransform;
 import java.util.ArrayList;
 
@@ -16,5 +20,4 @@
 import s57.S57obj.*;
 
-import seamap.SeaMap.AttItem;
 import seamap.SeaMap.*;
 import symbols.*;
@@ -29,224 +32,404 @@
 		map = m;
 		zoom = z;
-		ArrayList<Feature> feature;
-		if ((feature = map.features.get(Obj.SLCONS)) != null) shoreline(feature);
-		if ((feature = map.features.get(Obj.SLCONS)) != null) shoreline(feature);
-		if ((feature = map.features.get(Obj.PIPSOL)) != null) pipelines(feature);
-		if ((feature = map.features.get(Obj.CBLSUB)) != null) cables(feature);
-		if ((feature = map.features.get(Obj.PIPOHD)) != null) pipelines(feature);
-		if ((feature = map.features.get(Obj.CBLOHD)) != null) cables(feature);
-		if ((feature = map.features.get(Obj.TSEZNE)) != null) separation(feature);
-		if ((feature = map.features.get(Obj.TSSCRS)) != null) separation(feature);
-		if ((feature = map.features.get(Obj.TSSRON)) != null) separation(feature);
-		if ((feature = map.features.get(Obj.TSELNE)) != null) separation(feature);
-		if ((feature = map.features.get(Obj.TSSLPT)) != null) separation(feature);
-		if ((feature = map.features.get(Obj.TSSBND)) != null) separation(feature);
-		if ((feature = map.features.get(Obj.SNDWAV)) != null) areas(feature);
-		if ((feature = map.features.get(Obj.OSPARE)) != null) areas(feature);
-		if ((feature = map.features.get(Obj.FAIRWY)) != null) areas(feature);
-		if ((feature = map.features.get(Obj.DRGARE)) != null) areas(feature);
-		if ((feature = map.features.get(Obj.RESARE)) != null) areas(feature);
-		if ((feature = map.features.get(Obj.SPLARE)) != null) areas(feature);
-		if ((feature = map.features.get(Obj.SEAARE)) != null) areas(feature);
-		if ((feature = map.features.get(Obj.OBSTRN)) != null) obstructions(feature);
-		if ((feature = map.features.get(Obj.UWTROC)) != null) obstructions(feature);
-		if ((feature = map.features.get(Obj.MARCUL)) != null) areas(feature);
-		if ((feature = map.features.get(Obj.WTWAXS)) != null) waterways(feature);
-		if ((feature = map.features.get(Obj.RECTRC)) != null) transits(feature);
-		if ((feature = map.features.get(Obj.NAVLNE)) != null) transits(feature);
-		if ((feature = map.features.get(Obj.HRBFAC)) != null) harbours(feature);
-		if ((feature = map.features.get(Obj.ACHARE)) != null) harbours(feature);
-		if ((feature = map.features.get(Obj.ACHBRT)) != null) harbours(feature);
-		if ((feature = map.features.get(Obj.LOKBSN)) != null) locks(feature);
-		if ((feature = map.features.get(Obj.LKBSPT)) != null) locks(feature);
-		if ((feature = map.features.get(Obj.GATCON)) != null) locks(feature);
-		if ((feature = map.features.get(Obj.DISMAR)) != null) distances(feature);
-		if ((feature = map.features.get(Obj.HULKES)) != null) ports(feature);
-		if ((feature = map.features.get(Obj.CRANES)) != null) ports(feature);
-		if ((feature = map.features.get(Obj.LNDMRK)) != null) landmarks(feature);
-		if ((feature = map.features.get(Obj.MORFAC)) != null) moorings(feature);
-		if ((feature = map.features.get(Obj.NOTMRK)) != null) notices(feature);
-		if ((feature = map.features.get(Obj.SMCFAC)) != null) marinas(feature);
-		if ((feature = map.features.get(Obj.BRIDGE)) != null) bridges(feature);
-		if ((feature = map.features.get(Obj.LITMAJ)) != null) lights(feature);
-		if ((feature = map.features.get(Obj.LITMIN)) != null) lights(feature);
-		if ((feature = map.features.get(Obj.LIGHTS)) != null) lights(feature);
-		if ((feature = map.features.get(Obj.SISTAT)) != null) signals(feature);
-		if ((feature = map.features.get(Obj.SISTAW)) != null) signals(feature);
-		if ((feature = map.features.get(Obj.CGUSTA)) != null) signals(feature);
-		if ((feature = map.features.get(Obj.RDOSTA)) != null) signals(feature);
-		if ((feature = map.features.get(Obj.RADSTA)) != null) signals(feature);
-		if ((feature = map.features.get(Obj.RSCSTA)) != null) signals(feature);
-		if ((feature = map.features.get(Obj.PILBOP)) != null) signals(feature);
-		if ((feature = map.features.get(Obj.WTWGAG)) != null) gauges(feature);
-		if ((feature = map.features.get(Obj.OFSPLF)) != null) platforms(feature);
-		if ((feature = map.features.get(Obj.WRECKS)) != null) wrecks(feature);
-		if ((feature = map.features.get(Obj.LITVES)) != null) floats(feature);
-		if ((feature = map.features.get(Obj.LITFLT)) != null) floats(feature);
-		if ((feature = map.features.get(Obj.BOYINB)) != null) floats(feature);
-		if ((feature = map.features.get(Obj.BOYLAT)) != null) buoys(feature);
-		if ((feature = map.features.get(Obj.BOYCAR)) != null) buoys(feature);
-		if ((feature = map.features.get(Obj.BOYISD)) != null) buoys(feature);
-		if ((feature = map.features.get(Obj.BOYSAW)) != null) buoys(feature);
-		if ((feature = map.features.get(Obj.BOYSPP)) != null) buoys(feature);
-		if ((feature = map.features.get(Obj.BOYWTW)) != null) buoys(feature);
-		if ((feature = map.features.get(Obj.BCNLAT)) != null) beacons(feature);
-		if ((feature = map.features.get(Obj.BCNCAR)) != null) beacons(feature);
-		if ((feature = map.features.get(Obj.BCNISD)) != null) beacons(feature);
-		if ((feature = map.features.get(Obj.BCNSAW)) != null) beacons(feature);
-		if ((feature = map.features.get(Obj.BCNSPP)) != null) beacons(feature);
-		if ((feature = map.features.get(Obj.BCNWTW)) != null) beacons(feature);
+		ArrayList<Feature> objects;
+		if ((objects = map.features.get(Obj.SLCONS)) != null) for (Feature feature : objects) shoreline(feature);
+		if ((objects = map.features.get(Obj.SLCONS)) != null) for (Feature feature : objects) shoreline(feature);;
+		if ((objects = map.features.get(Obj.PIPSOL)) != null) for (Feature feature : objects) pipelines(feature);
+		if ((objects = map.features.get(Obj.CBLSUB)) != null) for (Feature feature : objects) cables(feature);
+		if ((objects = map.features.get(Obj.PIPOHD)) != null) for (Feature feature : objects) pipelines(feature);
+		if ((objects = map.features.get(Obj.CBLOHD)) != null) for (Feature feature : objects) cables(feature);
+		if ((objects = map.features.get(Obj.TSEZNE)) != null) for (Feature feature : objects) separation(feature);
+		if ((objects = map.features.get(Obj.TSSCRS)) != null) for (Feature feature : objects) separation(feature);
+		if ((objects = map.features.get(Obj.TSSRON)) != null) for (Feature feature : objects) separation(feature);
+		if ((objects = map.features.get(Obj.TSELNE)) != null) for (Feature feature : objects) separation(feature);
+		if ((objects = map.features.get(Obj.TSSLPT)) != null) for (Feature feature : objects) separation(feature);
+		if ((objects = map.features.get(Obj.TSSBND)) != null) for (Feature feature : objects) separation(feature);
+		if ((objects = map.features.get(Obj.SNDWAV)) != null) for (Feature feature : objects) areas(feature);
+		if ((objects = map.features.get(Obj.OSPARE)) != null) for (Feature feature : objects) areas(feature);
+		if ((objects = map.features.get(Obj.FAIRWY)) != null) for (Feature feature : objects) areas(feature);
+		if ((objects = map.features.get(Obj.DRGARE)) != null) for (Feature feature : objects) areas(feature);
+		if ((objects = map.features.get(Obj.RESARE)) != null) for (Feature feature : objects) areas(feature);
+		if ((objects = map.features.get(Obj.SPLARE)) != null) for (Feature feature : objects) areas(feature);
+		if ((objects = map.features.get(Obj.SEAARE)) != null) for (Feature feature : objects) areas(feature);
+		if ((objects = map.features.get(Obj.OBSTRN)) != null) for (Feature feature : objects) obstructions(feature);
+		if ((objects = map.features.get(Obj.UWTROC)) != null) for (Feature feature : objects) obstructions(feature);
+		if ((objects = map.features.get(Obj.MARCUL)) != null) for (Feature feature : objects) areas(feature);
+		if ((objects = map.features.get(Obj.WTWAXS)) != null) for (Feature feature : objects) waterways(feature);
+		if ((objects = map.features.get(Obj.RECTRC)) != null) for (Feature feature : objects) transits(feature);
+		if ((objects = map.features.get(Obj.NAVLNE)) != null) for (Feature feature : objects) transits(feature);
+		if ((objects = map.features.get(Obj.HRBFAC)) != null) for (Feature feature : objects) harbours(feature);
+		if ((objects = map.features.get(Obj.ACHARE)) != null) for (Feature feature : objects) harbours(feature);
+		if ((objects = map.features.get(Obj.ACHBRT)) != null) for (Feature feature : objects) harbours(feature);
+		if ((objects = map.features.get(Obj.LOKBSN)) != null) for (Feature feature : objects) locks(feature);
+		if ((objects = map.features.get(Obj.LKBSPT)) != null) for (Feature feature : objects) locks(feature);
+		if ((objects = map.features.get(Obj.GATCON)) != null) for (Feature feature : objects) locks(feature);
+		if ((objects = map.features.get(Obj.DISMAR)) != null) for (Feature feature : objects) distances(feature);
+		if ((objects = map.features.get(Obj.HULKES)) != null) for (Feature feature : objects) ports(feature);
+		if ((objects = map.features.get(Obj.CRANES)) != null) for (Feature feature : objects) ports(feature);
+		if ((objects = map.features.get(Obj.LNDMRK)) != null) for (Feature feature : objects) landmarks(feature);
+		if ((objects = map.features.get(Obj.MORFAC)) != null) for (Feature feature : objects) moorings(feature);
+		if ((objects = map.features.get(Obj.NOTMRK)) != null) for (Feature feature : objects) notices(feature);
+		if ((objects = map.features.get(Obj.SMCFAC)) != null) for (Feature feature : objects) marinas(feature);
+		if ((objects = map.features.get(Obj.BRIDGE)) != null) for (Feature feature : objects) bridges(feature);
+		if ((objects = map.features.get(Obj.LITMAJ)) != null) for (Feature feature : objects) lights(feature);
+		if ((objects = map.features.get(Obj.LITMIN)) != null) for (Feature feature : objects) lights(feature);
+		if ((objects = map.features.get(Obj.LIGHTS)) != null) for (Feature feature : objects) lights(feature);
+		if ((objects = map.features.get(Obj.SISTAT)) != null) for (Feature feature : objects) signals(feature);
+		if ((objects = map.features.get(Obj.SISTAW)) != null) for (Feature feature : objects) signals(feature);
+		if ((objects = map.features.get(Obj.CGUSTA)) != null) for (Feature feature : objects) signals(feature);
+		if ((objects = map.features.get(Obj.RDOSTA)) != null) for (Feature feature : objects) signals(feature);
+		if ((objects = map.features.get(Obj.RADSTA)) != null) for (Feature feature : objects) signals(feature);
+		if ((objects = map.features.get(Obj.RSCSTA)) != null) for (Feature feature : objects) signals(feature);
+		if ((objects = map.features.get(Obj.PILBOP)) != null) for (Feature feature : objects) signals(feature);
+		if ((objects = map.features.get(Obj.WTWGAG)) != null) for (Feature feature : objects) gauges(feature);
+		if ((objects = map.features.get(Obj.OFSPLF)) != null) for (Feature feature : objects) platforms(feature);
+		if ((objects = map.features.get(Obj.WRECKS)) != null) for (Feature feature : objects) wrecks(feature);
+		if ((objects = map.features.get(Obj.LITVES)) != null) for (Feature feature : objects) floats(feature);
+		if ((objects = map.features.get(Obj.LITFLT)) != null) for (Feature feature : objects) floats(feature);
+		if ((objects = map.features.get(Obj.BOYINB)) != null) for (Feature feature : objects) floats(feature);
+		if ((objects = map.features.get(Obj.BOYLAT)) != null) for (Feature feature : objects) buoys(feature);
+		if ((objects = map.features.get(Obj.BOYCAR)) != null) for (Feature feature : objects) buoys(feature);
+		if ((objects = map.features.get(Obj.BOYISD)) != null) for (Feature feature : objects) buoys(feature);
+		if ((objects = map.features.get(Obj.BOYSAW)) != null) for (Feature feature : objects) buoys(feature);
+		if ((objects = map.features.get(Obj.BOYSPP)) != null) for (Feature feature : objects) buoys(feature);
+		if ((objects = map.features.get(Obj.BOYWTW)) != null) for (Feature feature : objects) buoys(feature);
+		if ((objects = map.features.get(Obj.BCNLAT)) != null) for (Feature feature : objects) beacons(feature);
+		if ((objects = map.features.get(Obj.BCNCAR)) != null) for (Feature feature : objects) beacons(feature);
+		if ((objects = map.features.get(Obj.BCNISD)) != null) for (Feature feature : objects) beacons(feature);
+		if ((objects = map.features.get(Obj.BCNSAW)) != null) for (Feature feature : objects) beacons(feature);
+		if ((objects = map.features.get(Obj.BCNSPP)) != null) for (Feature feature : objects) beacons(feature);
+		if ((objects = map.features.get(Obj.BCNWTW)) != null) for (Feature feature : objects) beacons(feature);
 	}
 	
-	private static void shoreline(ArrayList<Feature> features) {
-//		for (Feature feature : features) {
-//		}
-	}
-	private static void pipelines(ArrayList<Feature> features) {}
-	private static void cables(ArrayList<Feature> features) {}
-	private static void separation(ArrayList<Feature> features) {}
-	private static void areas(ArrayList<Feature> features) {}
-	private static void obstructions(ArrayList<Feature> features) {}
-	private static void waterways(ArrayList<Feature> features) {}
-	private static void transits(ArrayList<Feature> features) {}
-	private static void harbours(ArrayList<Feature> features) {}
-	private static void locks(ArrayList<Feature> features) {}
-	private static void distances(ArrayList<Feature> features) {}
-	private static void ports(ArrayList<Feature> features) {}
-	private static void landmarks(ArrayList<Feature> features) {
-		for (Feature feature : features) {
-			ArrayList<CatLMK> cats = (ArrayList<CatLMK>) Renderer.getAttVal(feature, feature.type, 0, Att.CATLMK);
-			Symbol catSym = Landmarks.Shapes.get(cats.get(0));
-			ArrayList<FncFNC> fncs = (ArrayList<FncFNC>) Renderer.getAttVal(feature, feature.type, 0, Att.FUNCTN);
-			Symbol fncSym = Landmarks.Funcs.get(fncs.get(0));
-			if ((fncs.get(0) == FncFNC.FNC_CHCH) && (cats.get(0) == CatLMK.LMK_TOWR)) catSym = Landmarks.ChurchTower;
-			if ((cats.get(0) == CatLMK.LMK_UNKN) && (fncs.get(0) == FncFNC.FNC_UNKN) && (feature.objs.get(Obj.LIGHTS) != null)) catSym = Beacons.LightMajor;
-			if (cats.get(0) == CatLMK.LMK_RADR) fncSym = Landmarks.RadioTV;
-			Renderer.symbol(feature, catSym, feature.type, null);
-			Renderer.symbol(feature, fncSym, feature.type, null);
-		}
-	}
-	private static void moorings(ArrayList<Feature> features) {
-		for (Feature feature : features) {
-			CatMOR cat = (CatMOR) Renderer.getAttVal(feature, feature.type, 0, Att.CATMOR);
+	private static void shoreline(Feature feature) {
+		CatSLC cat = (CatSLC) Renderer.getAttVal(feature, feature.type, 0, Att.CATSLC);
+		if (zoom >= 12) {
 			switch (cat) {
-			case MOR_DLPN:
-				Renderer.symbol(feature, Harbours.Dolphin, feature.type, null);
-				break;
-			case MOR_DDPN:
-				Renderer.symbol(feature, Harbours.DeviationDolphin, feature.type, null);
-				break;
-			case MOR_BLRD:
-			case MOR_POST:
-				Renderer.symbol(feature, Harbours.Bollard, feature.type, null);
-				break;
-			case MOR_BUOY:
-				BoySHP shape = (BoySHP) Renderer.getAttVal(feature, feature.type, 0, Att.BOYSHP);
-				if (shape == BoySHP.BOY_UNKN) shape = BoySHP.BOY_SPHR;
-				Renderer.symbol(feature, Buoys.Shapes.get(shape), feature.type, null);
-				break;
-			}
-		}
-	}
-	private static void notices(ArrayList<Feature> features) {}
-	private static void marinas(ArrayList<Feature> features) {}
-	private static void bridges(ArrayList<Feature> features) {}
-	private static void wrecks(ArrayList<Feature> features) {}
-	private static void gauges(ArrayList<Feature> features) {}
-	private static void lights(ArrayList<Feature> features) {
-		for (Feature feature : features) {
-			switch (feature.type) {
-			case LITMAJ:
-				Renderer.symbol(feature, Beacons.LightMajor, feature.type, null);
-				break;
-			case LITMIN:
-			case LIGHTS:
-				Renderer.symbol(feature, Beacons.LightMinor, feature.type, null);
-				break;
-			}
-		}
-	}
-	private static void signals(ArrayList<Feature> features) {
-		for (Feature feature : features) {
-			switch (feature.type) {
-			case SISTAT:
-			case SISTAW:
-				Renderer.symbol(feature, Harbours.SignalStation, feature.type, null);
-				break;
-			case RDOSTA:
-				Renderer.symbol(feature, Harbours.SignalStation, feature.type, null);
-				break;
-			case RADSTA:
-				Renderer.symbol(feature, Harbours.SignalStation, feature.type, null);
-				break;
-			case PILBOP:
-				Renderer.symbol(feature, Harbours.SignalStation, feature.type, null);
-				break;
-			case CGUSTA:
-//			Renderer.symbol(feature, Harbours.CGuardStation, feature.type, null);
-			break;
-			case RSCSTA:
-//				Renderer.symbol(feature, Harbours.RescueStation, feature.type, null);
-				break;
-			}
-		}
-	}
-	private static void floats(ArrayList<Feature> features) {
-		for (Feature feature : features) {
-			switch (feature.type) {
-			case LITVES:
-				Renderer.symbol(feature, Buoys.Super, feature.type, null);
-				break;
-			case LITFLT:
-				Renderer.symbol(feature, Buoys.Float, feature.type, null);
-				break;
-			case BOYINB:
-				Renderer.symbol(feature, Buoys.Storage, feature.type, null);
-				break;
-			}
+			case SLC_TWAL:
+				WatLEV lev = (WatLEV) Renderer.getAttVal(feature, feature.type, 0, Att.WATLEV);
+				if (lev == WatLEV.LEV_CVRS) {
+					Renderer.lineVector(feature, new LineStyle(new BasicStroke(10, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND, 1, new float[] { 40, 40 }, 0), Color.black, null));
+					if (zoom >= 15)
+						Renderer.lineText(feature, "(covers)", new TextStyle(new Font("Arial", Font.PLAIN, 80)), 0.5, new Delta(Handle.TC, AffineTransform.getTranslateInstance(0, 20)));
+				} else {
+					Renderer.lineVector(feature, new LineStyle(new BasicStroke(10, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND), Color.black, null));
+				}
+				if (zoom >= 15)
+					Renderer.lineText(feature, "Training Wall", new TextStyle(new Font("Arial", Font.PLAIN, 80)), 0.5, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -20)));
+			}
+		}
+	}
+	private static void pipelines(Feature feature) {
+		if (zoom >= 14) {
+			if (feature.type == Obj.PIPSOL) {
+				Renderer.lineSymbols(feature, Areas.Pipeline, 1.0, null, 0);
+			} else if (feature.type == Obj.PIPOHD) {
+
+			}
+		}
+	}
+	private static void cables(Feature feature) {
+		if (zoom >= 14) {
+			if (feature.type == Obj.CBLSUB) {
+				Renderer.lineSymbols(feature, Areas.Cable, 0.0, null, 0);
+			} else if (feature.type == Obj.CBLOHD) {
+
+			}
+		}
+	}
+	private static void separation(Feature feature) {
+		switch (feature.type) {
+		case TSEZNE:
+		case TSSCRS:
+		case TSSRON:
+			if (zoom <= 15)
+				Renderer.lineVector(feature, new LineStyle(null, null, new Color(0x80c480ff, true)));
+			else
+				Renderer.lineVector(feature, new LineStyle(new BasicStroke(20, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND), new Color(0x80c480ff, true), null));
+			AttItem name = feature.atts.get(Att.OBJNAM);
+			if ((zoom >= 10) && (name != null))
+				Renderer.labelText(feature, (String) name.val, new TextStyle(new Font("Arial", Font.BOLD, 150)), null);
+			break;
+		case TSELNE:
+			Renderer.lineVector(feature, new LineStyle(new BasicStroke(20, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND), new Color(0x80c480ff, true), null));
+			break;
+		case TSSLPT:
+			Renderer.lineSymbols(feature, Areas.LaneArrow, 0.5, null, 0);
+			break;
+		case TSSBND:
+			Renderer.lineVector(feature, new LineStyle(new BasicStroke(20, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND, 1, new float[] { 40, 40 }, 0), new Color(0x80c480ff, true), null));
+			break;
+		}
+	}
+	private static void areas(Feature feature) {
+		AttItem name = feature.atts.get(Att.OBJNAM);
+		switch (feature.type) {
+		case SPLARE:
+			if (zoom >= 12) {
+				Renderer.symbol(feature, Areas.Plane, Obj.SPLARE, null);
+				Renderer.lineSymbols(feature, Areas.Restricted, 0.5, Areas.LinePlane, 10);
+			}
+			if ((zoom >= 15) && (name != null))
+				Renderer.labelText(feature, (String) name.val, new TextStyle(new Font("Arial", Font.BOLD, 80)), new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, -90)));
+			break;
+		case MARCUL:
+			if (zoom >= 14)
+				Renderer.symbol(feature, Areas.MarineFarm, Obj.MARCUL, null);
+			if (zoom >= 16)
+				Renderer.lineVector(feature, new LineStyle(new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND, 1, new float[] { 10, 10 }, 0), Color.black, null));
+			break;
+		case FAIRWY:
+			if (Renderer.calcArea(feature) > 2.0) {
+				if (zoom < 16)
+					Renderer.lineVector(feature, new LineStyle(new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND, 1, new float[] { 50, 50 }, 0), new Color(0xc480ff), new Color(0x40ffffff, true)));
+				else
+					Renderer.lineVector(feature, new LineStyle(new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND, 1, new float[] { 50, 50 }, 0), new Color(0xc480ff), null));
+			} else {
+				if (zoom >= 14)
+					Renderer.lineVector(feature, new LineStyle(null, null, new Color(0x40ffffff, true)));
+			}
+			break;
+		case DRGARE:
+			if (zoom < 16)
+				Renderer.lineVector(feature, new LineStyle(new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND, 1, new float[] { 25, 25 }, 0), Color.black, new Color(0x40ffffff, true)));
+			else
+				Renderer.lineVector(feature, new LineStyle(new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND, 1, new float[] { 25, 25 }, 0), Color.black, null));
+			if ((zoom >= 12) && (name != null))
+				Renderer.labelText(feature, (String) name.val, new TextStyle(new Font("Arial", Font.PLAIN, 100)), new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 0)));
+			break;
+		case RESARE:
+			if (zoom >= 12) {
+				Renderer.lineSymbols(feature, Areas.Restricted, 1.0, null, 0);
+				if ((CatREA)Renderer.getAttVal(feature, feature.type, 0, Att.CATREA) == CatREA.REA_NWAK)
+					Renderer.symbol(feature, Areas.NoWake, Obj.RESARE, null);
+			}
+			break;
+		case OSPARE:
+			if ((CatPRA)Renderer.getAttVal(feature, feature.type, 0, Att.CATPRA) == CatPRA.PRA_WFRM) {
+				Renderer.symbol(feature, Areas.WindFarm, Obj.OSPARE, null);
+				Renderer.lineVector(feature, new LineStyle(new BasicStroke(20, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND, 1, new float[] { 40, 40 }, 0), Color.black, null));
+				if ((zoom >= 15) && (name != null))
+					Renderer.labelText(feature, (String) name.val, new TextStyle(new Font("Arial", Font.BOLD, 80)), new Delta(Handle.TC, AffineTransform.getTranslateInstance(0, 10)));
+			}
+			break;
+		case SEAARE:
+			break;
+		case SNDWAV:
+//	  if (zoom>=12)) area("fill:url(#sandwaves)");
+			break;
+		}
+/*
+  if (is_type("sea_area")) {
+    if (has_attribute("category")) {
+      make_string("");
+      attribute_switch("category")
+      attribute_case("reach") { if (zoom >= 10) add_string("font-family:Arial;font-weight:normal;font-style:italic;font-size:150;text-anchor:middle") }
+      attribute_case("bay") { if (zoom >= 12) add_string("font-family:Arial;font-weight:normal;font-style:italic;font-size:150;text-anchor:middle") }
+      attribute_case("shoal") { if (zoom >= 14) {
+        if (is_area) {
+          area("stroke:#c480ff;stroke-width:4;stroke-dasharray:25,25;fill:none");
+          if (has_item_attribute("name")) text(item_attribute("name"), "font-family:Arial;font-weight:normal;font-style:italic;font-size:75;text-anchor:middle", 0, -40);
+          text("(Shoal)", "font-family:Arial;font-weight:normal;font-size:60;text-anchor:middle", 0, 0);
+        } else if (is_line) {
+          if (has_item_attribute("name")) way_text(item_attribute("name"), "font-family:Arial;font-weight:normal;font-style:italic;font-size:75;text-anchor:middle", 0.5, -40, line("stroke:none;fill:none"));
+          way_text("(Shoal)", "font-family:Arial;font-weight:normal;font-size:60;text-anchor:middle", 0.5, 0, line("stroke:none;fill:none"));
+        } else {
+          if (has_item_attribute("name")) text(item_attribute("name"), "font-family:Arial;font-weight:normal;font-style:italic;font-size:75;text-anchor:middle", 0, -40);
+          text("(Shoal)", "font-family:Arial;font-weight:normal;font-size:60;text-anchor:middle", 0, 0);
+        }
+      }
+      }
+      attribute_case("gat|narrows") { if (zoom >= 12) add_string("font-family:Arial;font-weight:normal;font-style:italic;font-size:100;text-anchor:middle") }
+      end_switch
+      if ((strlen(string) > 0) && !attribute_test("category", "shoal")) {
+        int ref = line("stroke:none;fill:none");
+        if (ref != 0) {
+          if (has_item_attribute("name")) way_text(item_attribute("name"), string, 0.5, 0, ref);
+        } else {
+          if (has_item_attribute("name")) text(item_attribute("name"), string, 0, 0);
+        }
+      }
+      free_string
+    }
+  }
+ */
+	}
+
+	private static void obstructions(Feature feature) {
+		if ((zoom >= 14) && (feature.type == Obj.UWTROC)) {
+			WatLEV lvl = (WatLEV) Renderer.getAttVal(feature, feature.type, 0, Att.WATLEV);
+			switch (lvl) {
+			case LEV_CVRS:
+				Renderer.symbol(feature, Areas.RockC, feature.type, null);
+				break;
+			case LEV_AWSH:
+				Renderer.symbol(feature, Areas.RockA, feature.type, null);
+				break;
+			default:
+				Renderer.symbol(feature, Areas.Rock, feature.type, null);
+			}
+		} else {
+			Renderer.symbol(feature, Areas.Rock, feature.type, null);
+		}
+	}
+	private static void waterways(Feature feature) {
+		if ((zoom >= 14) && (feature.atts.get(Att.OBJNAM) != null)) {
+			// lineText(item_attribute("name"), "font-family:Arial;font-weight:bold;font-size:80;text-anchor:middle", 0.5, 15, line("stroke:none;fill:none"));
+		}
+	}
+	private static void transits(Feature feature) {
+	}
+	private static void harbours(Feature feature) {
+	}
+	private static void locks(Feature feature) {
+	}
+	private static void distances(Feature feature) {
+	}
+	private static void ports(Feature feature) {
+	}
+	private static void landmarks(Feature feature) {
+		ArrayList<CatLMK> cats = (ArrayList<CatLMK>) Renderer.getAttVal(feature, feature.type, 0, Att.CATLMK);
+		Symbol catSym = Landmarks.Shapes.get(cats.get(0));
+		ArrayList<FncFNC> fncs = (ArrayList<FncFNC>) Renderer.getAttVal(feature, feature.type, 0, Att.FUNCTN);
+		Symbol fncSym = Landmarks.Funcs.get(fncs.get(0));
+		if ((fncs.get(0) == FncFNC.FNC_CHCH) && (cats.get(0) == CatLMK.LMK_TOWR))
+			catSym = Landmarks.ChurchTower;
+		if ((cats.get(0) == CatLMK.LMK_UNKN) && (fncs.get(0) == FncFNC.FNC_UNKN) && (feature.objs.get(Obj.LIGHTS) != null))
+			catSym = Beacons.LightMajor;
+		if (cats.get(0) == CatLMK.LMK_RADR)
+			fncSym = Landmarks.RadioTV;
+		Renderer.symbol(feature, catSym, feature.type, null);
+		Renderer.symbol(feature, fncSym, feature.type, null);
+	}
+	private static void moorings(Feature feature) {
+		CatMOR cat = (CatMOR) Renderer.getAttVal(feature, feature.type, 0, Att.CATMOR);
+		switch (cat) {
+		case MOR_DLPN:
+			Renderer.symbol(feature, Harbours.Dolphin, feature.type, null);
+			break;
+		case MOR_DDPN:
+			Renderer.symbol(feature, Harbours.DeviationDolphin, feature.type, null);
+			break;
+		case MOR_BLRD:
+		case MOR_POST:
+			Renderer.symbol(feature, Harbours.Bollard, feature.type, null);
+			break;
+		case MOR_BUOY:
+			BoySHP shape = (BoySHP) Renderer.getAttVal(feature, feature.type, 0, Att.BOYSHP);
+			if (shape == BoySHP.BOY_UNKN)
+				shape = BoySHP.BOY_SPHR;
+			Renderer.symbol(feature, Buoys.Shapes.get(shape), feature.type, null);
+			break;
+		}
+	}
+	private static void notices(Feature feature) {
+	}
+	private static void marinas(Feature feature) {
+	}
+	private static void bridges(Feature feature) {
+	}
+	private static void wrecks(Feature feature) {
+		if (zoom >= 14) {
+			CatWRK cat = (CatWRK) Renderer.getAttVal(feature, feature.type, 0, Att.CATWRK);
+			switch (cat) {
+			case WRK_DNGR:
+			case WRK_MSTS:
+				Renderer.symbol(feature, Areas.WreckD, feature.type, null);
+				break;
+			case WRK_HULS:
+				Renderer.symbol(feature, Areas.WreckS, feature.type, null);
+				break;
+			default:
+				Renderer.symbol(feature, Areas.WreckND, feature.type, null);
+			}
+		} else {
+			Renderer.symbol(feature, Areas.WreckND, feature.type, null);
+		}
+	}
+	private static void gauges(Feature feature) {
+	}
+	private static void lights(Feature feature) {
+		switch (feature.type) {
+		case LITMAJ:
+			Renderer.symbol(feature, Beacons.LightMajor, feature.type, null);
+			break;
+		case LITMIN:
+		case LIGHTS:
+			Renderer.symbol(feature, Beacons.LightMinor, feature.type, null);
+			break;
+		}
+	}
+	private static void signals(Feature feature) {
+		switch (feature.type) {
+		case SISTAT:
+		case SISTAW:
+			Renderer.symbol(feature, Harbours.SignalStation, feature.type, null);
+			break;
+		case RDOSTA:
+			Renderer.symbol(feature, Harbours.SignalStation, feature.type, null);
+			break;
+		case RADSTA:
+			Renderer.symbol(feature, Harbours.SignalStation, feature.type, null);
+			break;
+		case PILBOP:
+			Renderer.symbol(feature, Harbours.SignalStation, feature.type, null);
+			break;
+		case CGUSTA:
+			Renderer.symbol(feature, Harbours.CoastGStation, feature.type, null);
+			break;
+		case RSCSTA:
+			Renderer.symbol(feature, Harbours.RescueStation, feature.type, null);
+			break;
+		}
+	}
+	private static void floats(Feature feature) {
+		switch (feature.type) {
+		case LITVES:
+			Renderer.symbol(feature, Buoys.Super, feature.type, null);
+			break;
+		case LITFLT:
+			Renderer.symbol(feature, Buoys.Float, feature.type, null);
+			break;
+		case BOYINB:
+			Renderer.symbol(feature, Buoys.Storage, feature.type, null);
+			break;
+		}
+		if (feature.objs.get(Obj.TOPMAR) != null)
+			Renderer.symbol(feature, Topmarks.Shapes.get(feature.objs.get(Obj.TOPMAR).get(0).get(Att.TOPSHP).val), Obj.TOPMAR, Topmarks.Floats);
+	}
+	private static void platforms(Feature feature) {
+		Renderer.symbol(feature, Landmarks.Platform, feature.type, null);
+	}
+	private static void buoys(Feature feature) {
+		BoySHP shape = (BoySHP) Renderer.getAttVal(feature, feature.type, 0, Att.BOYSHP);
+		Renderer.symbol(feature, Buoys.Shapes.get(shape), feature.type, null);
+		if (feature.objs.get(Obj.TOPMAR) != null) {
+			Renderer.symbol(feature, Topmarks.Shapes.get(feature.objs.get(Obj.TOPMAR).get(0).get(Att.TOPSHP).val), Obj.TOPMAR, Topmarks.Buoys.get(shape));
+		}
+	}
+	private static void beacons(Feature feature) {
+		BcnSHP shape = (BcnSHP) Renderer.getAttVal(feature, feature.type, 0, Att.BCNSHP);
+		if (((shape == BcnSHP.BCN_PRCH) || (shape == BcnSHP.BCN_WTHY)) && (feature.type == Obj.BCNLAT)) {
+			CatLAM cat = (CatLAM) Renderer.getAttVal(feature, feature.type, 0, Att.CATLAM);
+			switch (cat) {
+			case LAM_PORT:
+				if (shape == BcnSHP.BCN_PRCH)
+					Renderer.symbol(feature, Beacons.PerchPort, feature.type, null);
+				else
+					Renderer.symbol(feature, Beacons.WithyPort, feature.type, null);
+				break;
+			case LAM_STBD:
+				if (shape == BcnSHP.BCN_PRCH)
+					Renderer.symbol(feature, Beacons.PerchStarboard, feature.type, null);
+				else
+					Renderer.symbol(feature, Beacons.WithyStarboard, feature.type, null);
+				break;
+			default:
+				Renderer.symbol(feature, Beacons.Stake, feature.type, null);
+			}
+		} else {
+			Renderer.symbol(feature, Beacons.Shapes.get(shape), feature.type, null);
 			if (feature.objs.get(Obj.TOPMAR) != null)
-				Renderer.symbol(feature, Topmarks.Shapes.get(feature.objs.get(Obj.TOPMAR).get(0).get(Att.TOPSHP).val), Obj.TOPMAR, Topmarks.Floats);
-		}
-	}
-	private static void platforms(ArrayList<Feature> features) {
-		for (Feature feature : features) {
-			Renderer.symbol(feature, Landmarks.Platform, feature.type, null);
-		}
-	}
-	private static void buoys(ArrayList<Feature> features) {
-		for (Feature feature : features) {
-			BoySHP shape = (BoySHP) Renderer.getAttVal(feature, feature.type, 0, Att.BOYSHP);
-			Renderer.symbol(feature, Buoys.Shapes.get(shape), feature.type, null);
-			if (feature.objs.get(Obj.TOPMAR) != null) {
-				Renderer.symbol(feature, Topmarks.Shapes.get(feature.objs.get(Obj.TOPMAR).get(0).get(Att.TOPSHP).val), Obj.TOPMAR, Topmarks.Buoys.get(shape));
-			}
-		}
-	}
-	private static void beacons(ArrayList<Feature> features) {
-		for (Feature feature : features) {
-			BcnSHP shape = (BcnSHP) Renderer.getAttVal(feature, feature.type, 0, Att.BCNSHP);
-			if (((shape == BcnSHP.BCN_PRCH) || (shape == BcnSHP.BCN_WTHY)) && (feature.type == Obj.BCNLAT)) {
-				CatLAM cat = (CatLAM) Renderer.getAttVal(feature, feature.type, 0, Att.CATLAM);
-				switch (cat) {
-				case LAM_PORT:
-					if (shape == BcnSHP.BCN_PRCH)
-						Renderer.symbol(feature, Beacons.PerchPort, feature.type, null);
-					else
-						Renderer.symbol(feature, Beacons.WithyPort, feature.type, null);
-					break;
-				case LAM_STBD:
-					if (shape == BcnSHP.BCN_PRCH)
-						Renderer.symbol(feature, Beacons.PerchStarboard, feature.type, null);
-					else
-						Renderer.symbol(feature, Beacons.WithyStarboard, feature.type, null);
-					break;
-				default:
-					Renderer.symbol(feature, Beacons.Stake, feature.type, null);
-				}
-			} else {
-				Renderer.symbol(feature, Beacons.Shapes.get(shape), feature.type, null);
-				if (feature.objs.get(Obj.TOPMAR) != null)
-					Renderer.symbol(feature, Topmarks.Shapes.get(feature.objs.get(Obj.TOPMAR).get(0).get(Att.TOPSHP).val), Obj.TOPMAR, Topmarks.Beacons);
-			}
+				Renderer.symbol(feature, Topmarks.Shapes.get(feature.objs.get(Obj.TOPMAR).get(0).get(Att.TOPSHP).val), Obj.TOPMAR, Topmarks.Beacons);
 		}
 	}
Index: /applications/editors/josm/plugins/smed2/src/seamap/SeaMap.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/seamap/SeaMap.java	(revision 29197)
+++ /applications/editors/josm/plugins/smed2/src/seamap/SeaMap.java	(revision 29198)
@@ -38,5 +38,4 @@
 
 	public class AttMap extends EnumMap<Att, AttItem> {
-		private static final long serialVersionUID = 1L;
 		public AttMap() {
 			super(Att.class);
@@ -45,5 +44,4 @@
 	
 	public class ObjTab extends HashMap<Integer, AttMap> {
-		private static final long serialVersionUID = 1L;
 		public ObjTab() {
 			super();
@@ -52,5 +50,4 @@
 	
 	public class ObjMap extends EnumMap<Obj, ObjTab> {
-		private static final long serialVersionUID = 1L;
 		public ObjMap() {
 			super(Obj.class);
@@ -59,5 +56,4 @@
 	
 	public class NodeTab extends HashMap<Long, Coord> {
-		private static final long serialVersionUID = 1L;
 		public NodeTab() {
 			super();
@@ -66,5 +62,4 @@
 	
 	public class WayTab extends HashMap<Long, ArrayList<Long>> {
-		private static final long serialVersionUID = 1L;
 		public WayTab() {
 			super();
@@ -73,5 +68,4 @@
 	
 	public class FtrMap extends EnumMap<Obj, ArrayList<Feature>> {
-		private static final long serialVersionUID = 1L;
 		public FtrMap() {
 			super(Obj.class);
@@ -80,5 +74,4 @@
 	
 	public class FtrTab extends HashMap<Long, Feature> {
-		private static final long serialVersionUID = 1L;
 		public FtrTab() {
 			super();
@@ -131,5 +124,5 @@
 
 	public void addNode(long id, double lat, double lon) {
-		nodes.put(id, new Coord(lat, lon));
+		nodes.put(id, new Coord(Math.toRadians(lat), Math.toRadians(lon)));
 		feature = new Feature();
 		feature.refs = id;
@@ -138,5 +131,5 @@
 
 	public void moveNode(long id, double lat, double lon) {
-		nodes.put(id, new Coord(lat, lon));
+		nodes.put(id, new Coord(Math.toRadians(lat), Math.toRadians(lon)));
 	}
 
Index: /applications/editors/josm/plugins/smed2/src/smed2/MapImage.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/smed2/MapImage.java	(revision 29197)
+++ /applications/editors/josm/plugins/smed2/src/smed2/MapImage.java	(revision 29198)
@@ -87,5 +87,5 @@
 
 	public Point2D getPoint(Coord coord) {
-		return Main.map.mapView.getPoint2D(new LatLon(coord.lat, coord.lon));
+		return Main.map.mapView.getPoint2D(new LatLon(Math.toDegrees(coord.lat), Math.toDegrees(coord.lon)));
 	}
 }
Index: /applications/editors/josm/plugins/smed2/src/smed2/Smed2Action.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/smed2/Smed2Action.java	(revision 29197)
+++ /applications/editors/josm/plugins/smed2/src/smed2/Smed2Action.java	(revision 29198)
@@ -27,5 +27,4 @@
 public class Smed2Action extends JosmAction implements EditLayerChangeListener, SelectionChangedListener {
 
-	private static final long serialVersionUID = 1L;
 	private static String editor = tr("SeaMap Editor");
 	public static JFrame editFrame = null;
@@ -42,5 +41,5 @@
 		@Override
 		public void dataChanged(DataChangedEvent e) {
-			// reMap();
+			System.out.println("DataChangedEvent");
 		}
 
@@ -55,30 +54,30 @@
 		@Override
 		public void otherDatasetChange(AbstractDatasetChangedEvent e) {
-			// reMap();
+			System.out.println("AbstractDatasetChangedEvent");
 		}
 
 		@Override
 		public void primitivesAdded(PrimitivesAddedEvent e) {
-			// reMap();
+			System.out.println("PrimitivesAddedEvent");
 		}
 
 		@Override
 		public void primitivesRemoved(PrimitivesRemovedEvent e) {
-			// reMap();
+			System.out.println("PrimitivesRemovedEvent");
 		}
 
 		@Override
 		public void relationMembersChanged(RelationMembersChangedEvent e) {
-			// reMap();
+			System.out.println("RelationMembersChangedEvent");
 		}
 
 		@Override
 		public void tagsChanged(TagsChangedEvent e) {
-			// reMap();
+			System.out.println("TagsChangedEvent");
 		}
 
 		@Override
 		public void wayNodesChanged(WayNodesChangedEvent e) {
-			// reMap();
+			System.out.println("WayNodesChangedEvent");
 		}
 	};
Index: /applications/editors/josm/plugins/smed2/src/symbols/Areas.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/symbols/Areas.java	(revision 29197)
+++ /applications/editors/josm/plugins/smed2/src/symbols/Areas.java	(revision 29198)
@@ -28,5 +28,5 @@
 	static {
 		Cable.add(new Instr(Prim.BBOX, new Rectangle(-30,-60,60,60)));
-		Cable.add(new Instr(Prim.STRK, new BasicStroke(8.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
+		Cable.add(new Instr(Prim.STRK, new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
 		Cable.add(new Instr(Prim.FILL, new Color(0xc480ff)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(0,0); p.curveTo(-13,-13,-13,-17,0,-30); p.curveTo(13,-43,13,-47,0,-60);
@@ -35,5 +35,5 @@
 	public static final Symbol LaneArrow = new Symbol();
 	static {
-		LaneArrow.add(new Instr(Prim.STRK, new BasicStroke(10.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
+		LaneArrow.add(new Instr(Prim.STRK, new BasicStroke(10, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
 		LaneArrow.add(new Instr(Prim.FILL, new Color(0x80c480ff, true)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(15,0); p.lineTo(15,-195); p.lineTo(40,-195);
@@ -53,5 +53,5 @@
 	public static final Symbol MarineFarm = new Symbol();
 	static {
-		MarineFarm.add(new Instr(Prim.STRK, new BasicStroke(3.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		MarineFarm.add(new Instr(Prim.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
 		MarineFarm.add(new Instr(Prim.FILL, Color.black));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-23,12); p.lineTo(-23,23); p.lineTo(23,23); p.lineTo(23,12); p.moveTo(-8,15); p.lineTo(-8,23); p.moveTo(8,15); p.lineTo(8,23);
@@ -63,9 +63,9 @@
 	public static final Symbol NoWake = new Symbol();
 	static {
-		NoWake.add(new Instr(Prim.STRK, new BasicStroke(12.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoWake.add(new Instr(Prim.STRK, new BasicStroke(12, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		NoWake.add(new Instr(Prim.FILL, new Color(0xa30075)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-60,20); p.curveTo(-28,20,-32,0,0,0); p.curveTo(32,0,28,20,60,20); p.moveTo(-60,0); p.curveTo(-28,0,-32,-20,0,-20); p.curveTo(32,-20,28,0,60,0);
 		NoWake.add(new Instr(Prim.PLIN, p));
-		NoWake.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoWake.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		NoWake.add(new Instr(Prim.LINE, new Line2D.Double(-60,60,60,-60)));
 		NoWake.add(new Instr(Prim.LINE, new Line2D.Double(-60,-60,60,60)));
@@ -74,5 +74,5 @@
 	static {
 		Pipeline.add(new Instr(Prim.BBOX, new Rectangle(-15,-60,30,60)));
-		Pipeline.add(new Instr(Prim.STRK, new BasicStroke(8.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		Pipeline.add(new Instr(Prim.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
 		Pipeline.add(new Instr(Prim.FILL, new Color(0xc480ff)));
 		Pipeline.add(new Instr(Prim.LINE, new Line2D.Double(0,0,0,-50)));
@@ -82,5 +82,5 @@
 	static {
 		Restricted.add(new Instr(Prim.BBOX, new Rectangle(-15,-30,30,30)));
-		Restricted.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		Restricted.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
 		Restricted.add(new Instr(Prim.FILL, new Color(0xc480ff)));
 		Restricted.add(new Instr(Prim.LINE, new Line2D.Double(0,0,0,-30)));
@@ -91,8 +91,8 @@
 		Rock.add(new Instr(Prim.FILL, new Color(0x80c0ff)));
 		Rock.add(new Instr(Prim.RSHP, new Ellipse2D.Double(-30,-30,60,60)));
-		Rock.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1, new float[]{5,5}, 0)));
+		Rock.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1, new float[]{5,5}, 0)));
 		Rock.add(new Instr(Prim.FILL, Color.black));
 		Rock.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-30,-30,60,60)));
-		Rock.add(new Instr(Prim.STRK, new BasicStroke(5.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Rock.add(new Instr(Prim.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		Rock.add(new Instr(Prim.LINE, new Line2D.Double(-20,0,20,0)));
 		Rock.add(new Instr(Prim.LINE, new Line2D.Double(0,-20,0,20)));
@@ -102,8 +102,8 @@
 		RockA.add(new Instr(Prim.FILL, new Color(0x80c0ff)));
 		RockA.add(new Instr(Prim.RSHP, new Ellipse2D.Double(-30,-30,60,60)));
-		RockA.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1, new float[]{5,5}, 0)));
+		RockA.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1, new float[]{5,5}, 0)));
 		RockA.add(new Instr(Prim.FILL, Color.black));
 		RockA.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-30,-30,60,60)));
-		RockA.add(new Instr(Prim.STRK, new BasicStroke(5.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		RockA.add(new Instr(Prim.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		RockA.add(new Instr(Prim.LINE, new Line2D.Double(-20,0,20,0)));
 		RockA.add(new Instr(Prim.LINE, new Line2D.Double(0,-20,0,20)));
@@ -117,8 +117,8 @@
 		RockC.add(new Instr(Prim.FILL, new Color(0x80c0ff)));
 		RockC.add(new Instr(Prim.RSHP, new Ellipse2D.Double(-30,-30,60,60)));
-		RockC.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1, new float[]{5,5}, 0)));
+		RockC.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1, new float[]{5,5}, 0)));
 		RockC.add(new Instr(Prim.FILL, Color.black));
 		RockC.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-30,-30,60,60)));
-		RockC.add(new Instr(Prim.STRK, new BasicStroke(5.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		RockC.add(new Instr(Prim.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		RockC.add(new Instr(Prim.LINE, new Line2D.Double(-20,0,20,0)));
 		RockC.add(new Instr(Prim.LINE, new Line2D.Double(-10,17.3,10,-17.3)));
@@ -128,5 +128,5 @@
 	public static final Symbol Seaplane = new Symbol();
 	static {
-		Seaplane.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Seaplane.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		Seaplane.add(new Instr(Prim.FILL, new Color(0xa30075)));
 		Seaplane.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-60,-60,120,120)));
@@ -135,5 +135,5 @@
 	public static final Symbol WindFarm = new Symbol();
 	static {
-		WindFarm.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		WindFarm.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		WindFarm.add(new Instr(Prim.FILL, Color.black));
 		WindFarm.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-100,-100,200,200)));
@@ -148,8 +148,8 @@
 		WreckD.add(new Instr(Prim.FILL, new Color(0x80c0ff)));
 		WreckD.add(new Instr(Prim.RSHP, new Ellipse2D.Double(-50,-40,100,80)));
-		WreckD.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1, new float[]{5,5}, 0)));
+		WreckD.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1, new float[]{5,5}, 0)));
 		WreckD.add(new Instr(Prim.FILL, Color.black));
 		WreckD.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-50,-40,100,80)));
-		WreckD.add(new Instr(Prim.STRK, new BasicStroke(5.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		WreckD.add(new Instr(Prim.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		WreckD.add(new Instr(Prim.LINE, new Line2D.Double(-40,0,40,0)));
 		WreckD.add(new Instr(Prim.LINE, new Line2D.Double(0,-30,0,30)));
@@ -159,5 +159,5 @@
 	public static final Symbol WreckND = new Symbol();
 	static {
-		WreckND.add(new Instr(Prim.STRK, new BasicStroke(5.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		WreckND.add(new Instr(Prim.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		WreckND.add(new Instr(Prim.FILL, Color.black));
 		WreckND.add(new Instr(Prim.LINE, new Line2D.Double(-40,0,40,0)));
@@ -168,5 +168,5 @@
 	public static final Symbol WreckS = new Symbol();
 	static {
-		WreckS.add(new Instr(Prim.STRK, new BasicStroke(3.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		WreckS.add(new Instr(Prim.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		WreckS.add(new Instr(Prim.FILL, Color.black));
 		WreckS.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-6,-6,12,12)));
Index: /applications/editors/josm/plugins/smed2/src/symbols/Beacons.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/symbols/Beacons.java	(revision 29197)
+++ /applications/editors/josm/plugins/smed2/src/symbols/Beacons.java	(revision 29198)
@@ -41,5 +41,5 @@
     colours.add(new Instr(Prim.V2, p));
     Beacon.add(new Instr(Prim.COLR, colours));
-    Beacon.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+    Beacon.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     Beacon.add(new Instr(Prim.FILL, Color.black));
     Beacon.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
@@ -51,5 +51,5 @@
 	public static final Symbol Cairn = new Symbol();
 	static {
-		Cairn.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		Cairn.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
 		Cairn.add(new Instr(Prim.FILL, Color.black));
 		Cairn.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
@@ -62,8 +62,8 @@
 	public static final Symbol FogSignal = new Symbol();
 	static {
-		FogSignal.add(new Instr(Prim.STRK, new BasicStroke(3.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		FogSignal.add(new Instr(Prim.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
 		FogSignal.add(new Instr(Prim.FILL, Color.black));
 		FogSignal.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
-		FogSignal.add(new Instr(Prim.STRK, new BasicStroke(10.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		FogSignal.add(new Instr(Prim.STRK, new BasicStroke(10, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
 		FogSignal.add(new Instr(Prim.FILL, new Color(0xd400d4)));
 		FogSignal.add(new Instr(Prim.EARC, new Arc2D.Double(-120.0,-120.0,240.0,240.0,190.0,50.0,Arc2D.OPEN)));
@@ -97,5 +97,5 @@
 	public static final Symbol PerchPort = new Symbol();
 	static {
-		PerchPort.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		PerchPort.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
 		PerchPort.add(new Instr(Prim.FILL, Color.black));
 		PerchPort.add(new Instr(Prim.LINE, new Line2D.Double(-10,0,10,0)));
@@ -106,5 +106,5 @@
 	public static final Symbol PerchStarboard = new Symbol();
 	static {
-		PerchStarboard.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		PerchStarboard.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
 		PerchStarboard.add(new Instr(Prim.FILL, Color.black));
 		PerchStarboard.add(new Instr(Prim.LINE, new Line2D.Double(-10,0,10,0)));
@@ -121,5 +121,5 @@
 	public static final Symbol Stake = new Symbol();
 	static {
-		Stake.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		Stake.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
 		Stake.add(new Instr(Prim.FILL, Color.black));
 		Stake.add(new Instr(Prim.LINE, new Line2D.Double(0,0,0,-70)));
@@ -155,5 +155,5 @@
     colours.add(new Instr(Prim.V2, p));
     Tower.add(new Instr(Prim.COLR, colours));
-    Tower.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+    Tower.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     Tower.add(new Instr(Prim.FILL, Color.black));
     Tower.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
@@ -165,5 +165,5 @@
 	public static final Symbol WithyPort = new Symbol();
 	static {
-		WithyPort.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		WithyPort.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
 		WithyPort.add(new Instr(Prim.FILL, Color.black));
 		WithyPort.add(new Instr(Prim.LINE, new Line2D.Double(-10,0,10,0)));
@@ -176,5 +176,5 @@
 	public static final Symbol WithyStarboard = new Symbol();
 	static {
-		WithyStarboard.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		WithyStarboard.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
 		WithyStarboard.add(new Instr(Prim.FILL, Color.black));
 		WithyStarboard.add(new Instr(Prim.LINE, new Line2D.Double(-10,0,10,0)));
Index: /applications/editors/josm/plugins/smed2/src/symbols/Buoys.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/symbols/Buoys.java	(revision 29197)
+++ /applications/editors/josm/plugins/smed2/src/symbols/Buoys.java	(revision 29198)
@@ -28,5 +28,5 @@
 		colours.add(new Instr(Prim.P1, p));
 		Barrel.add(new Instr(Prim.COLR, colours));
-    Barrel.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+    Barrel.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
 		Barrel.add(new Instr(Prim.FILL, Color.black));
 		Barrel.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
@@ -55,5 +55,5 @@
     colours.add(new Instr(Prim.V2, p));
 		Can.add(new Instr(Prim.COLR, colours));
-    Can.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+    Can.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
 		Can.add(new Instr(Prim.FILL, Color.black));
 		Can.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
@@ -81,5 +81,5 @@
     colours.add(new Instr(Prim.V2, p));
 		Cone.add(new Instr(Prim.COLR, colours));
-    Cone.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+    Cone.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
 		Cone.add(new Instr(Prim.FILL, Color.black));
 		Cone.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
@@ -111,5 +111,5 @@
     colours.add(new Instr(Prim.V2, p));
 		Float.add(new Instr(Prim.COLR, colours));
-    Float.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+    Float.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
 		Float.add(new Instr(Prim.FILL, Color.black));
 		Float.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
@@ -127,5 +127,5 @@
 		colours.add(new Instr(Prim.P1, p));
     Ice.add(new Instr(Prim.COLR, colours));
-    Ice.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+    Ice.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     Ice.add(new Instr(Prim.FILL, Color.black));
     Ice.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
@@ -156,5 +156,5 @@
     colours.add(new Instr(Prim.V2, p));
 		Pillar.add(new Instr(Prim.COLR, colours));
-		Pillar.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		Pillar.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
 		Pillar.add(new Instr(Prim.FILL, Color.black));
 		Pillar.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
@@ -180,5 +180,5 @@
     colours.add(new Instr(Prim.V2, p));
 		Spar.add(new Instr(Prim.COLR, colours));
-		Spar.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		Spar.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
 		Spar.add(new Instr(Prim.FILL, Color.black));
 		Spar.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
@@ -206,5 +206,5 @@
     colours.add(new Instr(Prim.V2, p));
     Sphere.add(new Instr(Prim.COLR, colours));
-    Sphere.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+    Sphere.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     Sphere.add(new Instr(Prim.FILL, Color.black));
     Sphere.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
@@ -215,5 +215,5 @@
 	public static final Symbol Storage = new Symbol();
 	static {
-		Storage.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Storage.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		Storage.add(new Instr(Prim.FILL, Color.black));
 		Storage.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
@@ -240,5 +240,5 @@
     colours.add(new Instr(Prim.V2, p));
 		Super.add(new Instr(Prim.COLR, colours));
-    Super.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+    Super.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
 		Super.add(new Instr(Prim.FILL, Color.black));
 		Super.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
Index: /applications/editors/josm/plugins/smed2/src/symbols/Facilities.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/symbols/Facilities.java	(revision 29197)
+++ /applications/editors/josm/plugins/smed2/src/symbols/Facilities.java	(revision 29198)
@@ -19,5 +19,5 @@
 	private static final Symbol Facility = new Symbol();
 	static {
-		Facility.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Facility.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		Facility.add(new Instr(Prim.FILL, new Color(0x80ffffff, true)));
 		RoundRectangle2D.Double s = new RoundRectangle2D.Double(-29,-29,58,58,15,15);
@@ -29,5 +29,5 @@
 	static {
 		Boatlift.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
-		Boatlift.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
+		Boatlift.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
 		Boatlift.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-3.7,-19.7,12,12)));
 		Boatlift.add(new Instr(Prim.LINE, new Line2D.Double(2.3,-7.7,2.3,-2.0)));
@@ -37,5 +37,5 @@
 	static {
 		Boatyard.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
-		Boatyard.add(new Instr(Prim.STRK, new BasicStroke(8.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
+		Boatyard.add(new Instr(Prim.STRK, new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
 		Boatyard.add(new Instr(Prim.LINE, new Line2D.Double(19,19,-8,-8)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-11.3,-11.3); p.lineTo(-10.5,-17.5); p.lineTo(-14.8,-21.9); p.lineTo(-11.3,-25.4); p.lineTo(-7.4,-21.5);
@@ -46,5 +46,5 @@
 	static {
 		Chandler.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
-		Chandler.add(new Instr(Prim.STRK, new BasicStroke(5.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		Chandler.add(new Instr(Prim.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
 		Chandler.add(new Instr(Prim.ELPS, new Ellipse2D.Double(14,7,10,10)));
 		Chandler.add(new Instr(Prim.LINE, new Line2D.Double(-23.0,12.0,14.0,12.0)));
@@ -97,5 +97,5 @@
 	static {
 		SailingClub.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
-		SailingClub.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		SailingClub.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
 		SailingClub.add(new Instr(Prim.FILL, new Color(0xa30075)));
 		SailingClub.add(new Instr(Prim.LINE, new Line2D.Double(-5,20,-5,-20)));
@@ -106,8 +106,8 @@
 	static {
 		Shower.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
-		Shower.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		Shower.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
 		Shower.add(new Instr(Prim.FILL, new Color(0xa30075)));
 		Shower.add(new Instr(Prim.LINE, new Line2D.Double(-4.8,-24.5,6.2,-13.5)));
-		Shower.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		Shower.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
 		Shower.add(new Instr(Prim.LINE, new Line2D.Double(-18.1,-17.9,-6.1,-21.3)));
 		Shower.add(new Instr(Prim.LINE, new Line2D.Double(-13.9,-10.2,-3.9,-17.7)));
@@ -120,5 +120,5 @@
 	static {
 		Slipway.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
-		Slipway.add(new Instr(Prim.STRK, new BasicStroke(3.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		Slipway.add(new Instr(Prim.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
 		Slipway.add(new Instr(Prim.FILL, new Color(0xa30075)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-24.8,0.1); p.lineTo(-24.8,18.0); p.curveTo(-21.2,18.0,-22.2,16.7,-18.6,16.7); p.curveTo(-15.0,16.7,-16.0,18.0,-12.4,18.0);
@@ -127,5 +127,5 @@
 		Slipway.add(new Instr(Prim.PGON, p));
 		Slipway.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-1.65,-1.9,8,8)));
-		Slipway.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		Slipway.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
 		Slipway.add(new Instr(Prim.LINE, new Line2D.Double(-24.5,-8.3,-3.1,-2.4)));
 		Slipway.add(new Instr(Prim.LINE, new Line2D.Double(9.3,1.1,22.2,4.6)));
@@ -137,5 +137,5 @@
 	static {
 		Toilet.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
-		Toilet.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		Toilet.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
 		Toilet.add(new Instr(Prim.FILL, new Color(0xa30075)));
 		Toilet.add(new Instr(Prim.LINE, new Line2D.Double(0,20,0,-20)));
@@ -166,9 +166,9 @@
 		p.lineTo(8.0,0.0); p.curveTo(8.0,-11.0,-8.0,-11.0,-8.0,0.0); p.closePath();
 		VisitorMooring.add(new Instr(Prim.PGON, p));
-    VisitorMooring.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+    VisitorMooring.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     VisitorMooring.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
     VisitorMooring.add(new Instr(Prim.LINE, new Line2D.Double(-33,0,-10,0)));
     VisitorMooring.add(new Instr(Prim.LINE, new Line2D.Double(10,0,40,0)));
-    VisitorMooring.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+    VisitorMooring.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
     VisitorMooring.add(new Instr(Prim.ELPS, new Ellipse2D.Double(6.5,-49.5,12,12)));
     VisitorMooring.add(new Instr(Prim.FILL, Color.white));
Index: /applications/editors/josm/plugins/smed2/src/symbols/Harbours.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/symbols/Harbours.java	(revision 29197)
+++ /applications/editors/josm/plugins/smed2/src/symbols/Harbours.java	(revision 29198)
@@ -21,5 +21,5 @@
 	static {
 		Anchor.add(new Instr(Prim.BBOX, new Rectangle(-60,-60,120,120)));
-		Anchor.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Anchor.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		Anchor.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-10,-59,20,20)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(23.0,-40.0); p.lineTo(23.0,-30.0); p.lineTo(6.0,-30.0); p.lineTo(7.0,31.0); p.quadTo(21.0,29.0,31.0,22.0);
@@ -31,5 +31,5 @@
 	public static final Symbol Yacht = new Symbol();
 	static {
-		Yacht.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Yacht.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-65.0,50.0); p.curveTo(-36.0,97.0,36.0,97.0,65.0,50.0); p.lineTo(3.0,50.0); p.lineTo(3.0,40.0); p.lineTo(55.0,30.0);
 		p.curveTo(32.0,4.0,25.0,-15.0,26.0,-52.0); p.lineTo(1.5,-40.0); p.lineTo(1.0,-64.0); p.lineTo(-2.0,-64.0); p.lineTo(-4.0,50.0); p.closePath();
@@ -45,5 +45,5 @@
 	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.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		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);
@@ -54,5 +54,5 @@
 	public static final Symbol Bollard = new Symbol();
 	static {
-		Bollard.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Bollard.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		Bollard.add(new Instr(Prim.FILL, Color.white));
 		Ellipse2D.Double s = new Ellipse2D.Double(-10,-10,20,20);
@@ -63,5 +63,5 @@
 	public static final Symbol ClearV = new Symbol();
 	static {
-		ClearV.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		ClearV.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		ClearV.add(new Instr(Prim.FILL, Color.white));
 		ClearV.add(new Instr(Prim.RSHP, new Ellipse2D.Double(-30,-30,60,60)));
@@ -72,7 +72,11 @@
 		ClearV.add(new Instr(Prim.LINE, new Line2D.Double(0,25,0,15)));
 	}
+	public static final Symbol CoastGStation = new Symbol();
+	static{
+		
+	}
 	public static final Symbol ContainerCrane = new Symbol();
 	static {
-		ContainerCrane.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		ContainerCrane.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		ContainerCrane.add(new Instr(Prim.FILL, Color.black));
 		ContainerCrane.add(new Instr(Prim.RSHP, new Rectangle2D.Double(-15,-65,30,100)));
@@ -81,5 +85,5 @@
 	public static final Symbol DeviationDolphin = new Symbol();
 	static {
-		DeviationDolphin.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		DeviationDolphin.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		DeviationDolphin.add(new Instr(Prim.FILL, Color.black));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-30.0,0.0); p.lineTo(30.0,0.0); p.moveTo(0.0,0.0); p.lineTo(0.0,-40.0);
@@ -89,5 +93,5 @@
 	public static final Symbol DistanceI = new Symbol();
 	static {
-		DistanceI.add(new Instr(Prim.STRK, new BasicStroke(3.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		DistanceI.add(new Instr(Prim.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		DistanceI.add(new Instr(Prim.FILL, Color.black));
 		DistanceI.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-11,-11,22,22)));
@@ -95,5 +99,5 @@
 	public static final Symbol DistanceU = new Symbol();
 	static {
-		DistanceU.add(new Instr(Prim.STRK, new BasicStroke(3.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		DistanceU.add(new Instr(Prim.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		DistanceU.add(new Instr(Prim.FILL, new Color(0xa30075)));
 		DistanceU.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-11,-11,22,22)));
@@ -101,5 +105,5 @@
 	public static final Symbol Dolphin = new Symbol();
 	static {
-		Dolphin.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Dolphin.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		Dolphin.add(new Instr(Prim.FILL, new Color(0xffd400)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(3.8,-9.2); p.lineTo(9.2,-3.8); p.lineTo(9.2,3.8); p.lineTo(3.8,9.2);
@@ -111,5 +115,5 @@
 	public static final Symbol Harbour = new Symbol();
 	static {
-		Harbour.add(new Instr(Prim.STRK, new BasicStroke(15.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Harbour.add(new Instr(Prim.STRK, new BasicStroke(15, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		Harbour.add(new Instr(Prim.FILL, new Color(0xa30075)));
 		Harbour.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-75,-75,150,150)));
@@ -118,5 +122,5 @@
 	public static final Symbol HarbourMaster = new Symbol();
 	static {
-		HarbourMaster.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		HarbourMaster.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		HarbourMaster.add(new Instr(Prim.FILL, Color.black));
 		HarbourMaster.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-35,-50,70,100)));
@@ -134,5 +138,5 @@
 	public static final Symbol Marina = new Symbol();
 	static {
-		Marina.add(new Instr(Prim.STRK, new BasicStroke(15.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Marina.add(new Instr(Prim.STRK, new BasicStroke(15, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		Marina.add(new Instr(Prim.FILL, new Color(0xa30075)));
 		Marina.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Harbours.Yacht, 1.0, 0, 0, null, null)));
@@ -141,5 +145,5 @@
 	public static final Symbol MarinaNF = new Symbol();
 	static {
-		MarinaNF.add(new Instr(Prim.STRK, new BasicStroke(15.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		MarinaNF.add(new Instr(Prim.STRK, new BasicStroke(15, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		MarinaNF.add(new Instr(Prim.FILL, new Color(0xa30075)));
 		MarinaNF.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Harbours.Yacht, 1.0, 0, 0, null, null)));
@@ -147,5 +151,5 @@
 	public static final Symbol PortCrane = new Symbol();
 	static {
-		PortCrane.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		PortCrane.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		PortCrane.add(new Instr(Prim.FILL, Color.black));
 		PortCrane.add(new Instr(Prim.EARC, new Arc2D.Double(-36.0,-36.0,72.0,72.0,70.0,-320.0,Arc2D.OPEN)));
@@ -157,7 +161,11 @@
 		Post.add(new Instr(Prim.RSHP, new Ellipse2D.Double(-10,-10,20,20)));
 	}
+	public static final Symbol RescueStation = new Symbol();
+	static{
+		
+	}
 	public static final Symbol SignalStation = new Symbol();
 	static {
-		SignalStation.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		SignalStation.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		SignalStation.add(new Instr(Prim.FILL, Color.black));
 		SignalStation.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-25,-25,50,50)));
@@ -166,5 +174,5 @@
 	public static final Symbol TideGauge = new Symbol();
 	static {
-		TideGauge.add(new Instr(Prim.STRK, new BasicStroke(3.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TideGauge.add(new Instr(Prim.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		TideGauge.add(new Instr(Prim.FILL, Color.black));
 		TideGauge.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
@@ -172,5 +180,5 @@
 		TideGauge.add(new Instr(Prim.LINE, new Line2D.Double(10,0,30,0)));
 		TideGauge.add(new Instr(Prim.LINE, new Line2D.Double(0,-10,0,-80)));
-		TideGauge.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TideGauge.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		TideGauge.add(new Instr(Prim.LINE, new Line2D.Double(-15,-25,15,-25)));
 		TideGauge.add(new Instr(Prim.LINE, new Line2D.Double(-25,-45,25,-45)));
Index: /applications/editors/josm/plugins/smed2/src/symbols/Landmarks.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/symbols/Landmarks.java	(revision 29197)
+++ /applications/editors/josm/plugins/smed2/src/symbols/Landmarks.java	(revision 29198)
@@ -26,5 +26,5 @@
 	private static final Symbol Base = new Symbol();
 	static {
-		Base.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Base.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		Base.add(new Instr(Prim.FILL, Color.black));
 		Base.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
@@ -36,5 +36,5 @@
 	static {
 		Chimney.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
-		Chimney.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Chimney.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		Chimney.add(new Instr(Prim.FILL, Color.black));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-25.0,0.0); p.lineTo(-10.0,-120.0); p.lineTo(10.0,-120.0); p.lineTo(25.0,0.0);
@@ -56,5 +56,5 @@
 	public static final Symbol ChurchTower = new Symbol();
 	static {
-		ChurchTower.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		ChurchTower.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		ChurchTower.add(new Instr(Prim.FILL, Color.black));
 		ChurchTower.add(new Instr(Prim.RECT, new Rectangle2D.Double(-36,-36,72,72)));
@@ -64,5 +64,5 @@
 	static {
 		Cross.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
-		Cross.add(new Instr(Prim.STRK, new BasicStroke(6.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Cross.add(new Instr(Prim.STRK, new BasicStroke(6, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		Cross.add(new Instr(Prim.FILL, Color.black));
 		Cross.add(new Instr(Prim.LINE, new Line2D.Double(0,-10,0,-150)));
@@ -72,5 +72,5 @@
 	static {
 		DishAerial.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
-		DishAerial.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL)));
+		DishAerial.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL)));
 		DishAerial.add(new Instr(Prim.FILL, Color.black));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-7.8,-6.0); p.lineTo(0.0,-62.0); p.lineTo(7.8,-6.0); p.moveTo(18.0,-109.0); p.lineTo(25.0,-113.0);
@@ -80,5 +80,5 @@
 	public static final Symbol Dome = new Symbol();
 	static {
-		Dome.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Dome.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		Dome.add(new Instr(Prim.FILL, Color.black));
 		Dome.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-36,-36,72,72)));
@@ -88,5 +88,5 @@
 	static {
 		Flagstaff.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
-		Flagstaff.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Flagstaff.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		Flagstaff.add(new Instr(Prim.FILL, Color.black));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(0.0,-10.0); p.lineTo(0.0,-150.0); p.moveTo(0.0,-140.0); p.lineTo(40.0,-140.0); p.lineTo(40.0,-100.0); p.lineTo(0.0,-100.0);
@@ -96,9 +96,9 @@
 	static {
 		FlareStack.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
-		FlareStack.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		FlareStack.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		FlareStack.add(new Instr(Prim.FILL, Color.black));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-7.8,-6.0); p.lineTo(-7.8,-100.0); p.lineTo(7.8,-100.0); p.lineTo(7.8,-6.0);
 		FlareStack.add(new Instr(Prim.PLIN, p));
-		FlareStack.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		FlareStack.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
 		p = new Path2D.Double(); p.moveTo(21.6,-169.6); p.curveTo(-22.0,-132.4,-27.4,-103.5,3.0,-100.0); p.curveTo(39.0,-118.0,-4.0,-141.0,21.6,-169.6);
 		FlareStack.add(new Instr(Prim.PLIN, p));
@@ -107,5 +107,5 @@
 	static {
 		LandTower.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
-		LandTower.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		LandTower.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		LandTower.add(new Instr(Prim.FILL, Color.black));
 		LandTower.add(new Instr(Prim.LINE, new Line2D.Double(-25,0,-15,-120)));
@@ -116,5 +116,5 @@
 	static {
 		Mast.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
-		Mast.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL)));
+		Mast.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL)));
 		Mast.add(new Instr(Prim.FILL, Color.black));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-25.0,0.0); p.lineTo(0.0,-150.0); p.lineTo(25.0,0.0);
@@ -124,5 +124,5 @@
 	static {
 		Monument.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
-		Monument.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
+		Monument.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
 		Monument.add(new Instr(Prim.FILL, Color.black));
 		Monument.add(new Instr(Prim.LINE, new Line2D.Double(-25,0,-15,-105)));
@@ -132,5 +132,5 @@
 	public static final Symbol Platform = new Symbol();
 	static {
-		Platform.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Platform.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		Platform.add(new Instr(Prim.FILL, Color.black));
 		Platform.add(new Instr(Prim.RECT, new Rectangle2D.Double(-48,-48,96,96)));
@@ -139,5 +139,5 @@
 	public static final Symbol RadioTV = new Symbol();
 	static {
-		RadioTV.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL)));
+		RadioTV.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL)));
 		RadioTV.add(new Instr(Prim.FILL, Color.black));
 		RadioTV.add(new Instr(Prim.EARC, new Arc2D.Double(-30.0,-180.0,60.0,60.0,45.0,-90.0,Arc2D.OPEN)));
@@ -148,5 +148,5 @@
 	public static final Symbol Spire = new Symbol();
 	static {
-		Spire.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Spire.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		Spire.add(new Instr(Prim.FILL, Color.black));
 		Spire.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-25,-25,50,50)));
@@ -156,14 +156,14 @@
 	static {
 		Minaret.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Landmarks.Spire, 1.0, 0, 0, null, null)));
-		Minaret.add(new Instr(Prim.STRK, new BasicStroke(6.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Minaret.add(new Instr(Prim.STRK, new BasicStroke(6, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		Minaret.add(new Instr(Prim.LINE, new Line2D.Double(0,-25,0,-50)));
-		Minaret.add(new Instr(Prim.STRK, new BasicStroke(6.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
+		Minaret.add(new Instr(Prim.STRK, new BasicStroke(6, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
 		Minaret.add(new Instr(Prim.EARC, new Arc2D.Double(-40.0,-110.0,80.0,60.0,180.0,180.0,Arc2D.OPEN)));
 	}
 	public static final Symbol Temple = new Symbol();
 	static {
-		Temple.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Temple.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		Temple.add(new Instr(Prim.RECT, new Rectangle2D.Double(-25,-15,50,30)));
-		Temple.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Temple.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		Temple.add(new Instr(Prim.LINE, new Line2D.Double(-35,-21,35,21)));
 		Temple.add(new Instr(Prim.LINE, new Line2D.Double(-35,21,35,-21)));
@@ -172,5 +172,5 @@
 	static {
 		WaterTower.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
-		WaterTower.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		WaterTower.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		WaterTower.add(new Instr(Prim.FILL, Color.black));
 		WaterTower.add(new Instr(Prim.LINE, new Line2D.Double(-25,0,-15,-120)));
@@ -181,5 +181,5 @@
 	static {
 		WindMotor.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
-		WindMotor.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
+		WindMotor.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
 		WindMotor.add(new Instr(Prim.FILL, Color.black));
 		WindMotor.add(new Instr(Prim.LINE, new Line2D.Double(0,-10,0,-90)));
@@ -190,5 +190,5 @@
 	public static final Symbol Windmill = new Symbol();
 	static {
-		Windmill.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Windmill.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		Windmill.add(new Instr(Prim.FILL, Color.black));
 		Windmill.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-12,-12,24,24)));
@@ -199,10 +199,10 @@
 	static {
 		Windsock.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
-		Windsock.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
+		Windsock.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
 		Windsock.add(new Instr(Prim.FILL, Color.black));
 		Windsock.add(new Instr(Prim.LINE, new Line2D.Double(0,-10,0,-100)));
-		Windsock.add(new Instr(Prim.STRK, new BasicStroke(8.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
+		Windsock.add(new Instr(Prim.STRK, new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
 		Windsock.add(new Instr(Prim.LINE, new Line2D.Double(0,-100,0,-150)));
-		Windsock.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
+		Windsock.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(0.0,-100.0); p.lineTo(10.0,-100.0); p.lineTo(10.0,-150.0); p.lineTo(0.0,-150.0);
 		p.moveTo(10.0,-150.0); p.lineTo(50.0,-145.0); p.lineTo(120.0,-70.0); p.quadTo(120.0,-55.0,105.0,-55.0);
Index: /applications/editors/josm/plugins/smed2/src/symbols/Notices.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/symbols/Notices.java	(revision 29197)
+++ /applications/editors/josm/plugins/smed2/src/symbols/Notices.java	(revision 29198)
@@ -51,10 +51,9 @@
 	private static final Symbol Sport = new Symbol();
 	static {
-		Sport.add(new Instr(Prim.FONT, new Font("Arial", Font.BOLD, 15)));
-		Sport.add(new Instr(Prim.TEXT, new Caption("SPORT", (float)-25.0, (float)5.0)));
+		Sport.add(new Instr(Prim.TEXT, new Caption("SPORT", new TextStyle(new Font("Arial", Font.BOLD, 15)), (float)-25.0, (float)5.0)));
 	}
 	private static final Symbol Turn = new Symbol();
 	static {
-		Turn.add(new Instr(Prim.STRK, new BasicStroke(5.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Turn.add(new Instr(Prim.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		Turn.add(new Instr(Prim.FILL, Color.black));
 		Turn.add(new Instr(Prim.EARC, new Arc2D.Double(-9.0,-9.0,18.0,18.0,270.0,230.0,Arc2D.OPEN)));
@@ -66,6 +65,5 @@
 	private static final Symbol VHF = new Symbol();
 	static {
-		VHF.add(new Instr(Prim.FONT, new Font("Arial", Font.BOLD, 20)));
-		VHF.add(new Instr(Prim.TEXT, new Caption("VHF", (float)-20.0, (float)-5.0)));
+		VHF.add(new Instr(Prim.TEXT, new Caption("VHF", new TextStyle(new Font("Arial", Font.BOLD, 20)), (float)-20.0, (float)-5.0)));
 	}
 	private static final Symbol Waterbike = new Symbol();
@@ -77,8 +75,8 @@
 		NoticeA.add(new Instr(Prim.FILL, Color.white));
 		NoticeA.add(new Instr(Prim.RSHP, new Rectangle2D.Double(-21,-21,42,42)));
-		NoticeA.add(new Instr(Prim.STRK, new BasicStroke(8.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
+		NoticeA.add(new Instr(Prim.STRK, new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
 		NoticeA.add(new Instr(Prim.FILL, new Color(0xe80000)));
 		NoticeA.add(new Instr(Prim.LINE, new Line2D.Double(-25,-25,25,25)));
-		NoticeA.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeA.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		NoticeA.add(new Instr(Prim.FILL, Color.black));
 		NoticeA.add(new Instr(Prim.RRCT, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
@@ -90,5 +88,5 @@
 		NoticeB.add(new Instr(Prim.FILL, Color.white));
 		NoticeB.add(new Instr(Prim.RSHP, new Rectangle2D.Double(-21,-21,42,42)));
-		NoticeB.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeB.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		NoticeB.add(new Instr(Prim.FILL, Color.black));
 		NoticeB.add(new Instr(Prim.RRCT, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
@@ -98,5 +96,5 @@
 		NoticeE.add(new Instr(Prim.FILL, new Color(0x0000a0)));
 		NoticeE.add(new Instr(Prim.RSHP, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
-		NoticeE.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeE.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		NoticeE.add(new Instr(Prim.FILL, Color.black));
 		NoticeE.add(new Instr(Prim.RRCT, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
@@ -108,5 +106,5 @@
 		NoticeA1.add(new Instr(Prim.FILL, new Color(0xe80000)));
 		NoticeA1.add(new Instr(Prim.RSHP, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
-		NoticeA1.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeA1.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		NoticeA1.add(new Instr(Prim.FILL, Color.white));
 		NoticeA1.add(new Instr(Prim.RSHP, new Rectangle2D.Double(-30,-10,60,20)));
@@ -118,5 +116,5 @@
 		NoticeA1a.add(new Instr(Prim.FILL, new Color(0xe80000)));
 		NoticeA1a.add(new Instr(Prim.RSHP, new Ellipse2D.Double(-30,-30,60,60)));
-		NoticeA1a.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeA1a.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		NoticeA1a.add(new Instr(Prim.FILL, Color.white));
 		NoticeA1a.add(new Instr(Prim.RSHP, new Rectangle2D.Double(-29,-10,58,20)));
@@ -185,5 +183,5 @@
 	static {
 		NoticeA9.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
-		NoticeA9.add(new Instr(Prim.STRK, new BasicStroke(7.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeA9.add(new Instr(Prim.STRK, new BasicStroke(7, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		NoticeA9.add(new Instr(Prim.FILL, Color.black));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-23,10); p.curveTo(-11,10,-12,4,0,4); p.curveTo(12,4,11,10,23,10);
@@ -200,5 +198,5 @@
 		p = new Path2D.Double(); p.moveTo(0,-30); p.lineTo(-30,0); p.lineTo(0,30); p.closePath();
 		NoticeA10a.add(new Instr(Prim.PGON, p));
-		NoticeA10a.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeA10a.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		NoticeA10a.add(new Instr(Prim.FILL, Color.black));
 		p = new Path2D.Double(); p.moveTo(0,-30); p.lineTo(-30,0); p.lineTo(0,30); p.lineTo(30,0); p.closePath();
Index: /applications/editors/josm/plugins/smed2/src/symbols/Symbols.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/symbols/Symbols.java	(revision 29197)
+++ /applications/editors/josm/plugins/smed2/src/symbols/Symbols.java	(revision 29198)
@@ -24,5 +24,5 @@
 
 	public enum Prim {
-		BBOX, STRK, COLR, FILL, LINE, RECT, RRCT, ELPS, EARC, PLIN, PGON, RSHP, FONT, TEXT, SYMB, P1, P2, H2, H3, H4, H5, V2, D2, D3, D4, B2, S2, S3, S4, C2, X2
+		BBOX, STRK, COLR, FILL, LINE, RECT, RRCT, ELPS, EARC, PLIN, PGON, RSHP, TEXT, SYMB, P1, P2, H2, H3, H4, H5, V2, D2, D3, D4, B2, S2, S3, S4, C2, X2
 	}
 
@@ -85,11 +85,21 @@
 	}
 
+	public static class TextStyle {
+		Font font;
+
+		public TextStyle(Font ifont) {
+			font = ifont;
+		}
+	}
+
 	public static class Caption {
-		String str;;
+		String str;
+		TextStyle style;
 		float x;
 		float y;
 
-		public Caption(String istr, float ix, float iy) {
+		public Caption(String istr, TextStyle istyle, float ix, float iy) {
 			str = istr;
+			style = istyle;
 			x = ix;
 			y = iy;
@@ -97,6 +107,17 @@
 	}
 
+	public static class LineStyle {
+		BasicStroke stroke;
+		Color line;
+		Color fill;
+
+		public LineStyle(BasicStroke istroke, Color iline, Color ifill) {
+			stroke = istroke;
+			line = iline;
+			fill = ifill;
+		}
+	}
+
 	public static class Symbol extends ArrayList<Instr> {
-		private static final long serialVersionUID = 1L;
 
 		public Symbol() {
@@ -185,5 +206,5 @@
 				case COLR:
 					if ((cs != null) && (cs.col != null)) {
-						for (Instr patch : (ArrayList<Instr>) item.params) {
+						for (Instr patch : (Symbol) item.params) {
 							switch (patch.type) {
 							case P1:
@@ -271,9 +292,7 @@
 					drawSymbol(g2, s.instr, s.scale, s.x, s.y, s.delta, s.scheme);
 					break;
-				case FONT:
-					g2.setFont((Font) item.params);
-					break;
 				case TEXT:
 					Caption c = (Caption) item.params;
+					g2.setFont(c.style.font);
 					g2.drawString(c.str, c.x, c.y);
 					break;
Index: /applications/editors/josm/plugins/smed2/src/symbols/Topmarks.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/symbols/Topmarks.java	(revision 29197)
+++ /applications/editors/josm/plugins/smed2/src/symbols/Topmarks.java	(revision 29198)
@@ -31,5 +31,5 @@
 		colours.add(new Instr(Prim.P1, p));
 		TopBoard.add(new Instr(Prim.COLR, colours));
-		TopBoard.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopBoard.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		TopBoard.add(new Instr(Prim.FILL, Color.black));
 		p = new Path2D.Double(); p.moveTo(-19.0,-2.0); p.lineTo(-19.0,-39.0); p.lineTo(19.0,-39.0); p.lineTo(19.0,-2.0); p.closePath();
@@ -43,5 +43,5 @@
 		colours.add(new Instr(Prim.P1, p));
 		TopCan.add(new Instr(Prim.COLR, colours));
-		TopCan.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopCan.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		TopCan.add(new Instr(Prim.FILL, Color.black));
 		TopCan.add(new Instr(Prim.LINE, new Line2D.Double(0,0,0,-15)));
@@ -56,5 +56,5 @@
 		colours.add(new Instr(Prim.P1, p));
 		TopCone.add(new Instr(Prim.COLR, colours));
-		TopCone.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopCone.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		TopCone.add(new Instr(Prim.FILL, Color.black));
 		TopCone.add(new Instr(Prim.LINE, new Line2D.Double(0,0,0,-15)));
@@ -70,8 +70,8 @@
 		colours.add(new Instr(Prim.P1, p));
 		TopCross.add(new Instr(Prim.COLR, colours));
-		TopCross.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopCross.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		TopCross.add(new Instr(Prim.FILL, Color.black));
 		TopCross.add(new Instr(Prim.LINE, new Line2D.Double(0,0,0,-15)));
-		TopCross.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopCross.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		p = new Path2D.Double(); p.moveTo(-5.0,-15.0); p.lineTo(-5.0,-32.5); p.lineTo(-22.5,-32.5); p.lineTo(-22.5,-42.5); p.lineTo(-5.0,-42.5); p.lineTo(-5.0,-60.0);
 		p.lineTo(5.0,-60.0); p.lineTo(5.0,-42.5); p.lineTo(22.5,-42.5); p.lineTo(22.5,-32.5); p.lineTo(5.0,-32.5); p.lineTo(5.0,-15.0); p.closePath();
@@ -87,9 +87,9 @@
 		colours.add(new Instr(Prim.P2, p));
 		TopEast.add(new Instr(Prim.COLR, colours));
-		TopEast.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopEast.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		TopEast.add(new Instr(Prim.FILL, Color.black));
 		TopEast.add(new Instr(Prim.LINE, new Line2D.Double(0,0,0,-10)));
 		TopEast.add(new Instr(Prim.LINE, new Line2D.Double(0,-43,0,-47)));
-		TopEast.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopEast.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		p = new Path2D.Double(); p.moveTo(0.0,-10.0); p.lineTo(-15.0,-43.0); p.lineTo(15.0,-43.0); p.closePath();
 		p.moveTo(0.0,-80.0); p.lineTo(-15.0,-47.0);  p.lineTo(15.0,-47.0); p.closePath();
@@ -105,8 +105,8 @@
 		colours.add(new Instr(Prim.P2, p));
 		TopIsol.add(new Instr(Prim.COLR, colours));
-		TopIsol.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopIsol.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		TopIsol.add(new Instr(Prim.FILL, Color.black));
 		TopIsol.add(new Instr(Prim.LINE, new Line2D.Double(0,0,0,-15)));
-		TopIsol.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopIsol.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		TopIsol.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-13,-41,26,26)));
 		TopIsol.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-13,-68,26,26)));
@@ -115,5 +115,5 @@
 	static {
 		TopMooring.add(new Instr(Prim.BBOX, new Rectangle(-30,-80,60,80)));
-		TopMooring.add(new Instr(Prim.STRK, new BasicStroke(3.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopMooring.add(new Instr(Prim.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		TopMooring.add(new Instr(Prim.FILL, Color.black));
 		TopMooring.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-1.5,-6,3,3)));
@@ -129,8 +129,8 @@
 		colours.add(new Instr(Prim.P2, p));
 		TopNorth.add(new Instr(Prim.COLR, colours));
-		TopNorth.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopNorth.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		TopNorth.add(new Instr(Prim.FILL, Color.black));
 		TopNorth.add(new Instr(Prim.LINE, new Line2D.Double(0,0,0,-10)));
-		TopNorth.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopNorth.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		p = new Path2D.Double(); p.moveTo(-15.0,-10.0); p.lineTo(0.0,-43.0); p.lineTo(15.0,-10.0); p.closePath();
 		p.moveTo(0.0,-78.0); p.lineTo(-15.0,-45.0);  p.lineTo(15.0,-45.0); p.closePath();
@@ -146,8 +146,8 @@
 		colours.add(new Instr(Prim.P2, p));
 		TopSouth.add(new Instr(Prim.COLR, colours));
-		TopSouth.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopSouth.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		TopSouth.add(new Instr(Prim.FILL, Color.black));
 		TopSouth.add(new Instr(Prim.LINE, new Line2D.Double(0,0,0,-10)));
-		TopSouth.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopSouth.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		p = new Path2D.Double(); p.moveTo(0.0,-10.0); p.lineTo(-15.0,-43.0); p.lineTo(15.0,-43.0); p.closePath();
 		p.moveTo(-15.0,-78.0); p.lineTo(0.0,-45.0);  p.lineTo(15.0,-78.0); p.closePath();
@@ -161,8 +161,8 @@
 		colours.add(new Instr(Prim.P1, p));
 		TopSphere.add(new Instr(Prim.COLR, colours));
-		TopSphere.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopSphere.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		TopSphere.add(new Instr(Prim.FILL, Color.black));
 		TopSphere.add(new Instr(Prim.LINE, new Line2D.Double(0,0,0,-15)));
-		TopSphere.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopSphere.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		TopSphere.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-14,-42,28,28)));
 	}
@@ -174,5 +174,5 @@
 		colours.add(new Instr(Prim.P1, p));
 		TopSquare.add(new Instr(Prim.COLR, colours));
-		TopSquare.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopSquare.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		TopSquare.add(new Instr(Prim.FILL, Color.black));
 		p = new Path2D.Double(); p.moveTo(-13.0,-1.0); p.lineTo(-13.0,-27.0); p.lineTo(13.0,-27.0); p.lineTo(13.0,-1.0); p.closePath();
@@ -186,5 +186,5 @@
 		colours.add(new Instr(Prim.P1, p));
 		TopTriangle.add(new Instr(Prim.COLR, colours));
-		TopTriangle.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopTriangle.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		TopTriangle.add(new Instr(Prim.FILL, Color.black));
 		p = new Path2D.Double(); p.moveTo(-15.0,-1.0); p.lineTo(0.0,-29.0); p.lineTo(15.0,-1.0); p.closePath();
@@ -200,8 +200,8 @@
 		colours.add(new Instr(Prim.P2, p));
 		TopWest.add(new Instr(Prim.COLR, colours));
-		TopWest.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopWest.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		TopWest.add(new Instr(Prim.FILL, Color.black));
 		TopWest.add(new Instr(Prim.LINE, new Line2D.Double(0,0,0,-10)));
-		TopWest.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopWest.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		p = new Path2D.Double(); p.moveTo(-15.0,-10.0); p.lineTo(0.0,-43.0); p.lineTo(15.0,-10.0); p.closePath();
 		p.moveTo(-15.0,-78.0); p.lineTo(0.0,-45.0);  p.lineTo(15.0,-78.0); p.closePath();
@@ -216,8 +216,8 @@
 		colours.add(new Instr(Prim.P1, p));
 		TopX.add(new Instr(Prim.COLR, colours));
-		TopX.add(new Instr(Prim.STRK, new BasicStroke(4.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopX.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		TopX.add(new Instr(Prim.FILL, Color.black));
 		TopX.add(new Instr(Prim.LINE, new Line2D.Double(0,0,0,-27)));
-		TopX.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopX.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		p = new Path2D.Double(); p.moveTo(0.0,-27.7); p.lineTo(-12.4,-15.7); p.lineTo(-19.3,-22.6); p.lineTo(-7.3,-35.0); p.lineTo(-19.3,-47.3); p.lineTo(-12.4,-54.2); p.lineTo(0.0,-42.4);
 		p.lineTo(12.4,-54.2); p.lineTo(19.3,-47.3); p.lineTo(7.3,-35.0); p.lineTo(19.3,-22.6); p.lineTo(12.4,-15.7); p.closePath();
