Index: /applications/editors/josm/plugins/smed2/js57toosm/src/js57toosm/Js57toosm.java
===================================================================
--- /applications/editors/josm/plugins/smed2/js57toosm/src/js57toosm/Js57toosm.java	(revision 30214)
+++ /applications/editors/josm/plugins/smed2/js57toosm/src/js57toosm/Js57toosm.java	(revision 30215)
@@ -11,5 +11,11 @@
 
 import java.io.*;
-
+import java.util.Map;
+
+import s57.S57obj;
+import s57.S57att;
+import s57.S57att.*;
+import s57.S57val;
+import s57.S57val.*;
 import s57.S57dat;
 import s57.S57dat.*;
@@ -34,4 +40,5 @@
 		int len;
 		int pos;
+		boolean inFeature = false;
 		
 		double comf = 1;
@@ -39,4 +46,6 @@
 		long name = 0;
 		S57map.Nflag nflag = Nflag.ANON;
+		S57map.Pflag prim = S57map.Pflag.NOSP;
+		long objl = 0;
 		S57map map = new S57map();
 		double minlat = 90, minlon = 180, maxlat = -90, maxlon = -180;
@@ -67,8 +76,4 @@
 						}
 						break;
-					case "DSID":
-						break;
-					case "DSSI":
-						break;
 					case "DSPM":
 						comf = (double) (Long) S57dat.getSubf(record, fields + pos, S57field.DSPM, S57subf.COMF);
@@ -76,21 +81,47 @@
 						break;
 					case "FRID":
+						inFeature = true;
+						switch ((int)((long)S57dat.getSubf(record, fields + pos, S57field.FRID, S57subf.PRIM))) {
+						case 1:
+							prim = S57map.Pflag.POINT;
+							break;
+						case 2:
+							prim = S57map.Pflag.LINE;
+							break;
+						case 3:
+							prim = S57map.Pflag.AREA;
+							break;
+						default:
+							prim = S57map.Pflag.NOSP;
+						}
+						objl = (long)S57dat.getSubf(S57subf.OBJL);
 						break;
 					case "FOID":
+						name = (long) S57dat.getSubf(record, fields + pos, S57field.FOID, S57subf.LNAM);
+						map.newFeature(name, prim, objl);
 						break;
 					case "ATTF":
-						break;
-					case "NATF":
-						break;
-					case "FFPC":
+						S57dat.setField(record, fields + pos, S57field.ATTF, len);
+						do {
+							long attl = (long) S57dat.getSubf(S57subf.ATTL);
+							String atvl = (String) S57dat.getSubf(S57subf.ATVL);
+							map.newAtt(attl, atvl);
+						} while (S57dat.more());
 						break;
 					case "FFPT":
-						break;
-					case "FSPC":
+						name = (long) S57dat.getSubf(record, fields + pos, S57field.FFPT, S57subf.LNAM);
+						int rind = ((Long) S57dat.getSubf(S57subf.RIND)).intValue();
+						map.newObj(name, rind);
 						break;
 					case "FSPT":
+						S57dat.setField(record, fields + pos, S57field.FSPT, len);
+						do {
+							name = (Long) S57dat.getSubf(S57subf.NAME) << 16;
+							map.newPrim(name, (long) S57dat.getSubf(S57subf.ORNT), (long) S57dat.getSubf(S57subf.USAG));
+						} while (S57dat.more());
 						break;
 					case "VRID":
-						name = (Long) S57dat.getSubf(record, fields + pos, S57field.VRID, S57subf.RCNM);
+						inFeature = false;
+						name = (long) S57dat.getSubf(record, fields + pos, S57field.VRID, S57subf.RCNM);
 						switch ((int) name) {
 						case 110:
@@ -105,5 +136,5 @@
 						}
 						name <<= 32;
-						name += (Long) S57dat.getSubf(record, fields + pos, S57field.VRID, S57subf.RCID);
+						name += (Long) S57dat.getSubf(S57subf.RCID);
 						name <<= 16;
 						if (nflag == Nflag.ANON) {
@@ -111,21 +142,15 @@
 						}
 						break;
-					case "ATTV":
-						break;
-					case "VRPC":
-						break;
 					case "VRPT":
-						name = (Long) S57dat.getSubf(record, fields + pos, S57field.VRPT, S57subf.NAME) << 16;
-						int topi = ((Long) S57dat.getSubf(S57subf.TOPI)).intValue();
-						map.addConn(name, topi);
-						name = (Long) S57dat.getSubf(S57subf.NAME) << 16;
-						topi = ((Long) S57dat.getSubf(S57subf.TOPI)).intValue();
-						map.addConn(name, topi);
-						break;
-					case "SGCC":
+						S57dat.setField(record, fields + pos, S57field.VRPT, len);
+						do {
+							name = (Long) S57dat.getSubf(S57subf.NAME) << 16;
+							int topi = ((Long) S57dat.getSubf(S57subf.TOPI)).intValue();
+							map.addConn(name, topi);
+						} while (S57dat.more());
 						break;
 					case "SG2D":
 						S57dat.setField(record, fields + pos, S57field.SG2D, len);
-						while (S57dat.more()) {
+						do {
 							double lat = (double) ((Long) S57dat.getSubf(S57subf.YCOO)) / comf;
 							double lon = (double) ((Long) S57dat.getSubf(S57subf.XCOO)) / comf;
@@ -143,9 +168,9 @@
 							if (lon > maxlon)
 								maxlon = lon;
-						}
+						} while (S57dat.more());
 						break;
 					case "SG3D":
 						S57dat.setField(record, fields + pos, S57field.SG3D, len);
-						while (S57dat.more()) {
+						do {
 							double lat = (double) ((Long) S57dat.getSubf(S57subf.YCOO)) / comf;
 							double lon = (double) ((Long) S57dat.getSubf(S57subf.XCOO)) / comf;
@@ -160,10 +185,15 @@
 							if (lon > maxlon)
 								maxlon = lon;
-						}
+						} while (S57dat.more());
 						break;
 					}
 				}
-			}
-		}
+				if (inFeature) {
+					map.endFeature();
+					inFeature = false;
+				}
+			}
+		}
+		map.endFile();
 		in.close();
 		
@@ -172,4 +202,29 @@
 		out.println("<bounds minlat='" + minlat +"' minlon='" + minlon + "' maxlat='" + maxlat + "' maxlon='" + maxlon + "'/>");
 		
+		for (long id : map.index.keySet()) {
+			Feature feature = map.index.get(id);
+			if (feature.reln != Rflag.SLAVE) {
+				if (feature.geom.prim == Pflag.POINT) {
+					Snode node = map.nodes.get(feature.geom.elems.get(0).id);
+					String type = S57obj.stringType(feature.type);
+					out.format("  <node id='%d' lat='%f' lon='%f' version='1'>%n",-id,  Math.toDegrees(node.lat), Math.toDegrees(node.lon));
+					out.format("    <tag k='seamark:type' v=\"%s\"/>%n", type);
+					for (Map.Entry<Att, AttVal<?>> item : feature.atts.entrySet()) {
+						out.format("    <tag k='seamark:%s:%s' v=\"%s\"/>%n", type, S57att.stringAttribute(item.getKey()), S57val.stringValue(item.getValue()));
+					}
+					for (Reln rel : feature.rels) {
+						if (rel.reln == Rflag.SLAVE) {
+							Feature slave = map.index.get(rel.id);
+							type = S57obj.stringType(slave.type);
+							for (Map.Entry<Att, AttVal<?>> item : slave.atts.entrySet()) {
+								out.format("    <tag k='seamark:%s:%s' v=\"%s\"/>%n", type, S57att.stringAttribute(item.getKey()), S57val.stringValue(item.getValue()));
+							}
+						}
+					}
+					out.format("  </node>%n");
+				}
+			}
+		}
+/*		
 		for (long id : map.nodes.keySet()) {
 			Snode node = map.nodes.get(id);
@@ -194,5 +249,5 @@
 			out.format("  </way>%n");
 		}
-		
+*/		
 		out.println("</osm>\n");
 	}
Index: /applications/editors/josm/plugins/smed2/src/panels/PanelMain.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/panels/PanelMain.java	(revision 30214)
+++ /applications/editors/josm/plugins/smed2/src/panels/PanelMain.java	(revision 30215)
@@ -22,4 +22,5 @@
 import s57.S57att.Att;
 import s57.S57obj.Obj;
+import s57.S57val.*;
 import s57.S57map.*;
 import render.Renderer;
@@ -148,5 +149,5 @@
 				for (AttMap atts : feature.objs.get(obj).values()) {
 					for (Att att : atts.keySet()) {
-						AttItem item = atts.get(att);
+						AttVal<?> item = atts.get(att);
 						switch (item.conv) {
 						case E:
Index: /applications/editors/josm/plugins/smed2/src/panels/ShowFrame.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/panels/ShowFrame.java	(revision 30214)
+++ /applications/editors/josm/plugins/smed2/src/panels/ShowFrame.java	(revision 30215)
@@ -33,5 +33,4 @@
 			showMap.nodes = map.nodes;
 			showMap.edges = map.edges;
-			showMap.areas = map.areas;
 			showMap.index = map.index;
 			if (feature != null) {
Index: /applications/editors/josm/plugins/smed2/src/render/Renderer.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/render/Renderer.java	(revision 30214)
+++ /applications/editors/josm/plugins/smed2/src/render/Renderer.java	(revision 30215)
@@ -19,5 +19,4 @@
 import s57.S57map;
 import s57.S57map.*;
-import s57.S57map.Area;
 import symbols.Areas;
 import symbols.Symbols;
@@ -102,5 +101,5 @@
 		if (symbols.size() > 4) {
 			for (Instr instr : symbols.get(0)) {
-				if (instr.type == Prim.BBOX) {
+				if (instr.type == Form.BBOX) {
 					bbox = (Rectangle2D.Double) instr.params;
 					break;
@@ -180,8 +179,8 @@
 		while (ssymb != null) {
 			for (Instr item : symbol) {
-				if (item.type == Prim.BBOX) {
+				if (item.type == Form.BBOX) {
 					return (Rectangle2D.Double) item.params;
 				}
-				if (item.type == Prim.SYMB) {
+				if (item.type == Form.SYMB) {
 					ssymb = ((SubSymbol) item.params).instr;
 					break;
@@ -195,17 +194,6 @@
 
 	public static void lineSymbols(Feature feature, Symbol prisymb, double space, Symbol secsymb, Symbol tersymb, int ratio, Color col) {
-		Area area;
-		switch (feature.flag) {
-		case LINE:
-			Edge edge = map.edges.get(feature.refs);
-			area = map.new Area();
-			area.add(map.new Bound(map.new Side(edge, true), true));
-			break;
-		case AREA:
-			area = map.areas.get(feature.refs);
-			break;
-		default:
+		if ((feature.geom.prim == Pflag.NOSP) || (feature.geom.prim == Pflag.POINT))
 			return;
-		}
 		Rectangle2D.Double prect = symbolSize(prisymb);
 		Rectangle2D.Double srect = symbolSize(secsymb);
@@ -228,10 +216,11 @@
 			boolean stflag = false;
 			Symbol symbol = prisymb;
-			for (Bound bound : area) {
-				BoundIterator bit = map.new BoundIterator(bound);
+			GeomIterator git = map.new GeomIterator(feature.geom);
+			while (git.hasMore()) {
+				git.more();
 				boolean first = true;
-				while (bit.hasNext()) {
+				while (git.hasNext()) {
 					prev = next;
-					next = context.getPoint(bit.next());
+					next = context.getPoint(git.next());
 					angle = Math.atan2(next.getY() - prev.getY(), next.getX() - prev.getX());
 					piv = true;
@@ -286,27 +275,13 @@
 		p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
 		Point2D point;
-		switch (feature.flag) {
-		case LINE:
-			EdgeIterator eit = map.new EdgeIterator(map.edges.get(feature.refs), true);
-			point = context.getPoint(eit.next());
+		GeomIterator git = map.new GeomIterator(feature.geom);
+		while (git.hasMore()) {
+			git.more();
+			point = context.getPoint(git.next());
 			p.moveTo(point.getX(), point.getY());
-			while (eit.hasNext()) {
-				point = context.getPoint(eit.next());
+			while (git.hasNext()) {
+				point = context.getPoint(git.next());
 				p.lineTo(point.getX(), point.getY());
 			}
-			break;
-		case AREA:
-			for (Bound bound : map.areas.get(feature.refs)) {
-				BoundIterator bit = map.new BoundIterator(bound);
-				point = context.getPoint(bit.next());
-				p.moveTo(point.getX(), point.getY());
-				while (bit.hasNext()) {
-					point = context.getPoint(bit.next());
-					p.lineTo(point.getX(), point.getY());
-				}
-			}
-			break;
-		default:
-			break;
 		}
 		if (style.line != null) {
@@ -353,10 +328,10 @@
 		Symbol circle = new Symbol();
 		if (style.fill != null) {
-			circle.add(new Instr(Prim.FILL, style.fill));
-			circle.add(new Instr(Prim.RSHP, new Ellipse2D.Double(-radius,-radius,radius*2,radius*2)));
-		}
-		circle.add(new Instr(Prim.FILL, style.line));
-		circle.add(new Instr(Prim.STRK, new BasicStroke(style.width, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1, style.dash, 0)));
-		circle.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-radius,-radius,radius*2,radius*2)));
+			circle.add(new Instr(Form.FILL, style.fill));
+			circle.add(new Instr(Form.RSHP, new Ellipse2D.Double(-radius,-radius,radius*2,radius*2)));
+		}
+		circle.add(new Instr(Form.FILL, style.line));
+		circle.add(new Instr(Form.STRK, new BasicStroke(style.width, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1, style.dash, 0)));
+		circle.add(new Instr(Form.ELPS, new Ellipse2D.Double(-radius,-radius,radius*2,radius*2)));
 		Point2D point = context.getPoint(feature.centre);
 		Symbols.drawSymbol(g2, circle, 1, point.getX(), point.getY(), null, null);
@@ -368,5 +343,5 @@
 		p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
 		Point2D point;
-		switch (feature.flag) {
+		switch (feature.geom.prim) {
 		case POINT:
 			point = context.getPoint(feature.centre);
@@ -375,10 +350,11 @@
 			break;
 		case AREA:
-			for (Bound bound : map.areas.get(feature.refs)) {
-				BoundIterator bit = map.new BoundIterator(bound);
-				point = context.getPoint(bit.next());
+			GeomIterator git = map.new GeomIterator(feature.geom);
+			while (git.hasMore()) {
+				git.more();
+				point = context.getPoint(git.next());
 				p.moveTo(point.getX(), point.getY());
-				while (bit.hasNext()) {
-					point = context.getPoint(bit.next());
+				while (git.hasNext()) {
+					point = context.getPoint(git.next());
 					p.lineTo(point.getX(), point.getY());
 				}
@@ -427,10 +403,10 @@
 	    tx = lx + (height * 0.34);
 	    ty = ly + (height * 0.17);
-			label.add(new Instr(Prim.BBOX, new Rectangle2D.Double(lx,ly,width,height)));
-			label.add(new Instr(Prim.FILL, bg));
-			label.add(new Instr(Prim.RSHP, new RoundRectangle2D.Double(lx,ly,width,height,height,height)));
-			label.add(new Instr(Prim.FILL, fg));
-			label.add(new Instr(Prim.STRK, new BasicStroke(1 + (int)(height/10), BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-			label.add(new Instr(Prim.RRCT, new RoundRectangle2D.Double(lx,ly,width,height,height,height)));
+			label.add(new Instr(Form.BBOX, new Rectangle2D.Double(lx,ly,width,height)));
+			label.add(new Instr(Form.FILL, bg));
+			label.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(lx,ly,width,height,height,height)));
+			label.add(new Instr(Form.FILL, fg));
+			label.add(new Instr(Form.STRK, new BasicStroke(1 + (int)(height/10), BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+			label.add(new Instr(Form.RRCT, new RoundRectangle2D.Double(lx,ly,width,height,height,height)));
 			break;
 		case VCLR:
@@ -442,14 +418,14 @@
 	    tx = lx + (height * 0.27);
 	    ty = ly + (height * 0.25);
-			label.add(new Instr(Prim.BBOX, new Rectangle2D.Double(lx,ly,width,height)));
-			label.add(new Instr(Prim.FILL, bg));
-			label.add(new Instr(Prim.RSHP, new RoundRectangle2D.Double(lx,ly,width,height,height,height)));
-			label.add(new Instr(Prim.FILL, fg));
+			label.add(new Instr(Form.BBOX, new Rectangle2D.Double(lx,ly,width,height)));
+			label.add(new Instr(Form.FILL, bg));
+			label.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(lx,ly,width,height,height,height)));
+			label.add(new Instr(Form.FILL, fg));
 			int sw = 1 + (int)(height/10);
 			double po = sw / 2;
-			label.add(new Instr(Prim.STRK, new BasicStroke(sw, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+			label.add(new Instr(Form.STRK, new BasicStroke(sw, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 			Path2D.Double p = new Path2D.Double(); p.moveTo(-height*0.2,-ly-po); p.lineTo(height*0.2,-ly-po); p.moveTo(0,-ly-po); p.lineTo(0,-ly-po-(height*0.15));
 			p.moveTo(-height*0.2,ly+po); p.lineTo((height*0.2),ly+po); p.moveTo(0,ly+po); p.lineTo(0,ly+po+(height*0.15));
-			label.add(new Instr(Prim.PLIN, p));
+			label.add(new Instr(Form.PLIN, p));
 			break;
 		case PCLR:
@@ -461,16 +437,16 @@
 	    tx = lx + (height * 0.27);
 	    ty = ly + (height * 0.25);
-			label.add(new Instr(Prim.BBOX, new Rectangle2D.Double(lx,ly,width,height)));
-			label.add(new Instr(Prim.FILL, bg));
-			label.add(new Instr(Prim.RSHP, new RoundRectangle2D.Double(lx,ly,width,height,height,height)));
-			label.add(new Instr(Prim.FILL, fg));
+			label.add(new Instr(Form.BBOX, new Rectangle2D.Double(lx,ly,width,height)));
+			label.add(new Instr(Form.FILL, bg));
+			label.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(lx,ly,width,height,height,height)));
+			label.add(new Instr(Form.FILL, fg));
 			sw = 1 + (int)(height/10);
 			po = sw / 2;
-			label.add(new Instr(Prim.STRK, new BasicStroke(sw, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+			label.add(new Instr(Form.STRK, new BasicStroke(sw, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 			p = new Path2D.Double(); p.moveTo(-height*0.2,-ly-po); p.lineTo(height*0.2,-ly-po); p.moveTo(0,-ly-po); p.lineTo(0,-ly-po-(height*0.15));
 			p.moveTo(-height*0.2,ly+po); p.lineTo((height*0.2),ly+po); p.moveTo(0,ly+po); p.lineTo(0,ly+po+(height*0.15));
-			label.add(new Instr(Prim.PLIN, p));
-			label.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Areas.CableFlash, 1, 0, 0, null, new Delta(Handle.CC, new AffineTransform(0,-1,1,0,-width/2,0)))));
-			label.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Areas.CableFlash, 1, 0, 0, null, new Delta(Handle.CC, new AffineTransform(0,-1,1,0,width/2,0)))));
+			label.add(new Instr(Form.PLIN, p));
+			label.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Areas.CableFlash, 1, 0, 0, null, new Delta(Handle.CC, new AffineTransform(0,-1,1,0,-width/2,0)))));
+			label.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Areas.CableFlash, 1, 0, 0, null, new Delta(Handle.CC, new AffineTransform(0,-1,1,0,width/2,0)))));
 			break;
 		case HCLR:
@@ -482,14 +458,14 @@
 	    tx = lx + (height * 0.5);
 	    ty = ly + (height * 0.17);
-			label.add(new Instr(Prim.BBOX, new Rectangle2D.Double(lx,ly,width,height)));
-			label.add(new Instr(Prim.FILL, bg));
-			label.add(new Instr(Prim.RSHP, new RoundRectangle2D.Double(lx,ly,width,height,height,height)));
-			label.add(new Instr(Prim.FILL, fg));
+			label.add(new Instr(Form.BBOX, new Rectangle2D.Double(lx,ly,width,height)));
+			label.add(new Instr(Form.FILL, bg));
+			label.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(lx,ly,width,height,height,height)));
+			label.add(new Instr(Form.FILL, fg));
 			sw = 1 + (int)(height/10);
 			double vo = height / 4;
-			label.add(new Instr(Prim.STRK, new BasicStroke(sw, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+			label.add(new Instr(Form.STRK, new BasicStroke(sw, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 			p = new Path2D.Double(); p.moveTo(-width*0.4-sw,-ly-vo); p.lineTo(-width*0.4-sw,ly+vo); p.moveTo(-width*0.4-sw,0); p.lineTo(-width*0.4+sw,0);
 			p.moveTo(width*0.4+sw,-ly-vo); p.lineTo(width*0.4+sw,ly+vo); p.moveTo(width*0.4-sw,0); p.lineTo(width*0.4+sw,0);
-			label.add(new Instr(Prim.PLIN, p));
+			label.add(new Instr(Form.PLIN, p));
 			break;
 		default:
@@ -498,8 +474,8 @@
 			tx = lx;
 			ty = ly;
-			label.add(new Instr(Prim.BBOX, new Rectangle2D.Double(lx,ly,width,height)));
-			break;
-		}
-		label.add(new Instr(Prim.TEXT, new Caption(str, font, tc, new Delta(Handle.TL, AffineTransform.getTranslateInstance(tx, ty)))));
+			label.add(new Instr(Form.BBOX, new Rectangle2D.Double(lx,ly,width,height)));
+			break;
+		}
+		label.add(new Instr(Form.TEXT, new Caption(str, font, tc, new Delta(Handle.TL, AffineTransform.getTranslateInstance(tx, ty)))));
 		Point2D point = context.getPoint(feature.centre);
 		Symbols.drawSymbol(g2, label, sScale, point.getX(), point.getY(), null, delta);
@@ -507,17 +483,4 @@
 
 	public static void lineText(Feature feature, String str, Font font, Color colour, double offset, double dy) {
-		Area area;
-		switch (feature.flag) {
-		case LINE:
-			Edge edge = map.edges.get(feature.refs);
-			area = map.new Area();
-			area.add(map.new Bound(map.new Side(edge, true), true));
-			break;
-		case AREA:
-			area = map.areas.get(feature.refs);
-			break;
-		default:
-			return;
-		}
 //		Rectangle prect = symbolSize(prisymb);
 		if (!str.isEmpty()) {
@@ -533,10 +496,11 @@
 			double len = 0;
 			double angle = 0;
-			for (Bound bound : area) {
-				BoundIterator bit = map.new BoundIterator(bound);
+			GeomIterator git = map.new GeomIterator(feature.geom);
+			while (git.hasMore()) {
+				git.more();
 				boolean first = true;
-				while (bit.hasNext()) {
+				while (git.hasNext()) {
 					prev = next;
-					next = context.getPoint(bit.next());
+					next = context.getPoint(git.next());
 					angle = Math.atan2(next.getY() - prev.getY(), next.getX() - prev.getX());
 					piv = true;
Index: /applications/editors/josm/plugins/smed2/src/render/Rules.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/render/Rules.java	(revision 30214)
+++ /applications/editors/josm/plugins/smed2/src/render/Rules.java	(revision 30215)
@@ -32,5 +32,5 @@
 	
 	static String getName(Feature feature) {
-		AttItem name = feature.atts.get(Att.OBJNAM);
+		AttVal<?> name = feature.atts.get(Att.OBJNAM);
 		if (name == null) {
 			AttMap atts = feature.objs.get(feature.type).get(0);
@@ -58,5 +58,5 @@
 			return S57val.nullVal(att);
 		else {
-			AttItem item = atts.get(att);
+			AttVal<?> item = atts.get(att);
 			if (item == null)
 				return S57val.nullVal(att);
@@ -89,5 +89,5 @@
 		AttMap atts = getAtts(feature, obj, 0);
 		if (atts != null) {
-			AttItem item = atts.get(att);
+			AttVal item = atts.get(att);
 			if (item != null) {
 				switch (item.conv) {
@@ -233,5 +233,5 @@
 			case SEA_RECH:
 				if ((Renderer.zoom >= 10) && (name != null))
-					if (feature.flag == Fflag.LINE) {
+					if (feature.geom.prim == Pflag.LINE) {
 						Renderer.lineText(feature, name, new Font("Arial", Font.PLAIN, 150), Color.black, 0.5, -40);
 					} else {
@@ -241,5 +241,5 @@
 			case SEA_BAY:
 				if ((Renderer.zoom >= 12) && (name != null))
-					if (feature.flag == Fflag.LINE) {
+					if (feature.geom.prim == Pflag.LINE) {
 						Renderer.lineText(feature, name, new Font("Arial", Font.PLAIN, 150), Color.black, 0.5, -40);
 					} else {
@@ -249,5 +249,5 @@
 			case SEA_SHOL:
 				if (Renderer.zoom >= 14) {
-					if (feature.flag == Fflag.AREA) {
+					if (feature.geom.prim == Pflag.AREA) {
 						Renderer.lineVector(feature, new LineStyle(new Color(0xc480ff), 4, new float[] { 25, 25 }));
 						if (name != null) {
@@ -255,5 +255,5 @@
 							Renderer.labelText(feature, "(Shoal)", new Font("Arial", Font.PLAIN, 60), Color.black, new Delta(Handle.BC));
 						}
-					} else if (feature.flag == Fflag.LINE) {
+					} else if (feature.geom.prim == Pflag.LINE) {
 						if (name != null) {
 							Renderer.lineText(feature, name, new Font("Arial", Font.ITALIC, 75), Color.black, 0.5, -40);
@@ -489,5 +489,5 @@
 		case ACHARE:
 			if (Renderer.zoom >= 12) {
-				if (feature.flag != Fflag.AREA) {
+				if (feature.geom.prim != Pflag.AREA) {
 					Renderer.symbol(feature, Harbours.Anchorage, new Scheme(Color.black));
 				} else {
@@ -683,5 +683,5 @@
 			MarSYS sys = MarSYS.SYS_CEVN;
 			BnkWTW bnk = BnkWTW.BWW_UNKN;
-			AttItem att = feature.atts.get(Att.MARSYS);
+			AttVal att = feature.atts.get(Att.MARSYS);
 			if (att != null) sys = (MarSYS)att.val;
 			ObjTab objs = feature.objs.get(Obj.NOTMRK);
Index: /applications/editors/josm/plugins/smed2/src/s57/S57att.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/s57/S57att.java	(revision 30214)
+++ /applications/editors/josm/plugins/smed2/src/s57/S57att.java	(revision 30215)
@@ -24,5 +24,5 @@
 	  APTREF, SHPTYP, UPDMSG, ADDMRK, CATBNK, CATNMK, CATBRT, CATBUN, CATCCL, CATCOM, CATHBR, CATRFD, CATTML, CATGAG, CATVTR, CATTAB, CATEXS, CATWWM, LG_SPD, LG_SPR,
 	  LG_BME, LG_LGS, LG_DRT, LG_WDP, LG_WDU, LG_REL, LG_FNC, LG_DES, LG_PBR, LC_CSI, LC_CSE, LC_ASI, LC_ASE, LC_CCI, LC_CCE, LC_BM1, LC_BM2, LC_LG1, LC_LG2, LC_DR1,
-	  LC_DR2, LC_SP1, LC_SP2, LC_WD1, LC_WD2, LITRAD
+	  LC_DR2, LC_SP1, LC_SP2, LC_WD1, LC_WD2, LITRAD, CATCVR
 	}
 
@@ -32,4 +32,5 @@
 		AttS57.put(Att.CALSGN, 6); AttS57.put(Att.CATAIR, 7); AttS57.put(Att.CATACH, 8); AttS57.put(Att.CATBRG, 9); AttS57.put(Att.CATBUA, 10); AttS57.put(Att.CATCBL, 11);
 		AttS57.put(Att.CATCAN, 12); AttS57.put(Att.CATCAM, 13); AttS57.put(Att.CATCHP, 14); AttS57.put(Att.CATCOA, 15); AttS57.put(Att.CATCTR, 16); AttS57.put(Att.CATCON, 17);
+		AttS57.put(Att.CATCVR, 18);
 		AttS57.put(Att.CATCRN, 19); AttS57.put(Att.CATDAM, 20); AttS57.put(Att.CATDIS, 21); AttS57.put(Att.CATDOC, 22); AttS57.put(Att.CATDPG, 23);	AttS57.put(Att.CATFNC, 24);
 		AttS57.put(Att.CATFRY, 25); AttS57.put(Att.CATFIF, 26); AttS57.put(Att.CATFOG, 27); AttS57.put(Att.CATFOR, 28); AttS57.put(Att.CATGAT, 29); AttS57.put(Att.CATHAF, 30);
@@ -49,5 +50,6 @@
 		AttS57.put(Att.ORIENT, 117); AttS57.put(Att.PEREND, 118);	AttS57.put(Att.PERSTA, 119); AttS57.put(Att.PICREP, 120);	AttS57.put(Att.PILDST, 121); AttS57.put(Att.PRCTRY, 122);
 		AttS57.put(Att.PRODCT, 123); AttS57.put(Att.PUBREF, 124);	AttS57.put(Att.QUASOU, 125); AttS57.put(Att.RADWAL, 126);	AttS57.put(Att.RADIUS, 127); AttS57.put(Att.RECDAT, 128);
-		AttS57.put(Att.RECIND, 129); AttS57.put(Att.RYRMGV, 130);	AttS57.put(Att.RESTRN, 131); AttS57.put(Att.SECTR1, 136);	AttS57.put(Att.SECTR2, 137); AttS57.put(Att.SHIPAM, 138);
+		AttS57.put(Att.RECIND, 129); AttS57.put(Att.RYRMGV, 130);	AttS57.put(Att.RESTRN, 131);	AttS57.put(Att.SCAMIN, 133);
+		AttS57.put(Att.SECTR1, 136);	AttS57.put(Att.SECTR2, 137); AttS57.put(Att.SHIPAM, 138);
 		AttS57.put(Att.SIGFRQ, 139); AttS57.put(Att.SIGGEN, 140);	AttS57.put(Att.SIGGRP, 141); AttS57.put(Att.SIGPER, 142);	AttS57.put(Att.SIGSEQ, 143); AttS57.put(Att.SOUACC, 144);
 		AttS57.put(Att.SDISMX, 145); AttS57.put(Att.SDISMN, 146);	AttS57.put(Att.SORDAT, 147); AttS57.put(Att.SORIND, 148);	AttS57.put(Att.STATUS, 149); AttS57.put(Att.SURATH, 150);
@@ -150,5 +152,5 @@
 		AttStr.put(Att.CATVTR, "category");	AttStr.put(Att.CATTAB, "operation"); AttStr.put(Att.SCHREF, "schedule"); AttStr.put(Att.USESHP, "use"); AttStr.put(Att.CURVHW, "high_velocity");
 		AttStr.put(Att.CURVLW, "low_velocity"); AttStr.put(Att.CURVMW, "mean_velocity"); AttStr.put(Att.CURVOW, "other_velocity"); AttStr.put(Att.APTREF, "passing_time");
-		AttStr.put(Att.CATCOM, "category");
+		AttStr.put(Att.CATCOM, "category"); AttStr.put(Att.CATCVR, "category"); AttStr.put(Att.SCAMIN, "scale_minimum");
 		AttStr.put(Att.CATEXS, "category"); AttStr.put(Att.CATWWM, "category"); AttStr.put(Att.SHPTYP, "ship"); AttStr.put(Att.UPDMSG, "message"); AttStr.put(Att.LITRAD, "radius");
 	}
@@ -205,5 +207,5 @@
 	  objatt.add(new ObjAtt(Obj.DEPCNT, Att.VALDCO)); objatt.add(new ObjAtt(Obj.SOUNDG, Att.VALSOU)); objatt.add(new ObjAtt(Obj.NOTMRK, Att.BNKWTW));
 	  objatt.add(new ObjAtt(Obj.WTWAXS, Att.CATCCL)); objatt.add(new ObjAtt(Obj.WTWARE, Att.CATCCL)); objatt.add(new ObjAtt(Obj.COMARE, Att.CATCOM));
-	  objatt.add(new ObjAtt(Obj.RDOCAL, Att.CATCOM)); objatt.add(new ObjAtt(Obj.WTWGAG, Att.CATGAG));
+	  objatt.add(new ObjAtt(Obj.RDOCAL, Att.CATCOM)); objatt.add(new ObjAtt(Obj.WTWGAG, Att.CATGAG)); objatt.add(new ObjAtt(Obj.M_COVR, Att.CATCVR));
 	  objatt.add(new ObjAtt(Obj.ACHBRT, Att.RADIUS)); objatt.add(new ObjAtt(Obj.LIGHTS, Att.LITRAD));
 	}
@@ -224,6 +226,6 @@
 	}
 
-	public static Att decodeAttribute(Integer attribute) {	// Convert S57 attribute code to OSeaM attribute enumeration
-		Att att = S57Att.get(attribute);
+	public static Att decodeAttribute(long attribute) {	// Convert S57 attribute code to OSeaM attribute enumeration
+		Att att = S57Att.get((int)attribute);
 		return (att != null) ? att : Att.UNKATT;
 	}
Index: /applications/editors/josm/plugins/smed2/src/s57/S57dat.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/s57/S57dat.java	(revision 30214)
+++ /applications/editors/josm/plugins/smed2/src/s57/S57dat.java	(revision 30215)
@@ -100,5 +100,6 @@
 	private static ArrayList<S57subf> S57ddsc = new ArrayList<S57subf>(Arrays.asList(S57subf.ATLB, S57subf.ASET, S57subf.AUTH ));
 	private static ArrayList<S57subf> S57frid = new ArrayList<S57subf>(Arrays.asList(S57subf.RCNM, S57subf.RCID, S57subf.PRIM, S57subf.GRUP, S57subf.OBJL, S57subf.RVER, S57subf.RUIN ));
-	private static ArrayList<S57subf> S57foid = new ArrayList<S57subf>(Arrays.asList(S57subf.AGEN, S57subf.FIDN, S57subf.FIDS ));
+//	private static ArrayList<S57subf> S57foid = new ArrayList<S57subf>(Arrays.asList(S57subf.AGEN, S57subf.FIDN, S57subf.FIDS ));
+	private static ArrayList<S57subf> S57foid = new ArrayList<S57subf>(Arrays.asList(S57subf.LNAM));
 	private static ArrayList<S57subf> S57attf = new ArrayList<S57subf>(Arrays.asList(S57subf.ATTL, S57subf.ATVL ));
 	private static ArrayList<S57subf> S57natf = new ArrayList<S57subf>(Arrays.asList(S57subf.ATTL, S57subf.ATVL ));
@@ -140,29 +141,4 @@
 	public static int rnum;
 	
-	public static void setField(byte[] buf, int off, S57field fld, int len) {
-		buffer = buf;
-		offset = off;
-		maxoff = off + len - 1;
-		field = fld;
-		index = 0;
-	}
-	
-	public static boolean more() {
-		return (offset < maxoff);
-	}
-	
-	public static Object getSubf(byte[] buf, int off, S57field fld, S57subf subf) {
-		buffer = buf;
-		offset = off;
-		index = 0;
-		return getSubf(fld, subf);
-	}
-	
-	public static Object getSubf(S57field fld, S57subf subf) {
-		field = fld;
-		index = 0;
-		return getSubf(subf);
-	}
-
 	private static S57conv findSubf(S57subf subf) {
 		ArrayList<S57subf> subs = fields.get(field);
@@ -188,4 +164,29 @@
 	}
 	
+	public static void setField(byte[] buf, int off, S57field fld, int len) {
+		buffer = buf;
+		offset = off;
+		maxoff = off + len - 1;
+		field = fld;
+		index = 0;
+	}
+	
+	public static boolean more() {
+		return ((offset < maxoff) && (buffer[offset+1] != 0x1e));
+	}
+	
+	public static Object getSubf(byte[] buf, int off, S57field fld, S57subf subf) {
+		buffer = buf;
+		offset = off;
+		index = 0;
+		return getSubf(fld, subf);
+	}
+	
+	public static Object getSubf(S57field fld, S57subf subf) {
+		field = fld;
+		index = 0;
+		return getSubf(subf);
+	}
+
 	public static Object getSubf(S57subf subf) {
 		S57conv conv = findSubf(subf);
@@ -194,6 +195,7 @@
 			if (conv.asc == 0) {
 				while (buffer[offset] != 0x1f) {
-					str += buffer[offset++];
-				}
+					str += (char)(buffer[offset++]);
+				}
+				offset++;
 			} else {
 				str = new String(buffer, offset, conv.asc);
Index: /applications/editors/josm/plugins/smed2/src/s57/S57map.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/s57/S57map.java	(revision 30214)
+++ /applications/editors/josm/plugins/smed2/src/s57/S57map.java	(revision 30215)
@@ -12,8 +12,8 @@
 import java.util.*;
 
+import s57.S57obj;
+import s57.S57obj.*;
 import s57.S57att;
 import s57.S57att.*;
-import s57.S57obj;
-import s57.S57obj.*;
 import s57.S57val;
 import s57.S57val.*;
@@ -78,49 +78,27 @@
 		}
 	}
-
-	public class Side {	// An edge as used in a line or area feature
-		Edge edge;				// Side is formed by this Edge...
-		boolean forward;	// ... in this direction
-
-		public Side(Edge iedge, boolean ifwd) {
-			edge = iedge;
-			forward = ifwd;
-		}
-	}
-
-	public class Bound { // A single closed area
-		public boolean outer;		// Role
-		ArrayList<Side> sides;	// Sides that make up this area
-
-		public Bound() {
-			outer = true;
-			sides = new ArrayList<Side>();
-		}
-		public Bound(Side iside, boolean irole) {
-			outer = irole;
-			sides = new ArrayList<Side>();
-			sides.add(iside);
-		}
-	}
-
-	public class Area extends ArrayList<Bound> {	// The collection of bounds for an area.
-		public Area() {
+	
+	public enum Rflag {
+		UNKN, AGGR, MASTER, SLAVE, PEER
+	}
+	
+	public class Reln {
+		public long id;
+		public Rflag reln;
+		public Reln(long i, Rflag r) {
+			id = i;
+			reln = r;
+		}
+	}
+
+	public class AttMap extends HashMap<Att, AttVal<?>> {
+		public AttMap() {
 			super();
 		}
 	}
 
-	public class AttItem {
-		public Conv conv;
-		public Object val;
-
-		AttItem(Conv iconv, Object ival) {
-			conv = iconv;
-			val = ival;
-		}
-	}
-
-	public class AttMap extends EnumMap<Att, AttItem> {
-		public AttMap() {
-			super(Att.class);
+	public class RelTab extends ArrayList<Reln> {
+		public RelTab() {
+			super();
 		}
 	}
@@ -150,10 +128,4 @@
 	}
 
-	public class AreaTab extends HashMap<Long, Area> {
-		public AreaTab() {
-			super();
-		}
-	}
-
 	public class FtrMap extends EnumMap<Obj, ArrayList<Feature>> {
 		public FtrMap() {
@@ -168,23 +140,52 @@
 	}
 
-	public enum Fflag {
-		UNKN, POINT, LINE, AREA
-	}
-
+	public class Prim {				// Spatial element
+		public long id;					// ID
+		public boolean forward;	// Direction of vector used (LINEs & AREAs)
+		public boolean outer;		// Exterior/Interior boundary (AREAs)
+		public Prim() {
+			id = 0; forward = true; outer = true;
+		}
+		public Prim(long i) {
+			id = i; forward = true; outer = true;
+		}
+		public Prim(long i, boolean o) {
+			id = i; forward = true; outer = o;
+		}
+		public Prim(long i, boolean f, boolean o) {
+			id = i; forward = f; outer = o;
+		}
+	}
+	
+	public enum Pflag {
+		NOSP, POINT, LINE, AREA
+	}
+	
+	public class Geom {							// Geometric structure of feature
+		public Pflag prim;						// Geometry type
+		public ArrayList<Prim> elems;	// Ordered list of elements
+		public Geom(Pflag p) {
+			prim = p;
+			elems = new ArrayList<Prim>();
+		}
+	}
+	
 	public class Feature {
-		public Fflag flag;
-		public long refs;
-		public Obj type;
-		public AttMap atts;
-		public ObjMap objs;
-		public double area;
-		public double length;
-		public Snode centre;
+		public Rflag reln;		// Relationship status
+		public Geom geom;			// Geometry data
+		public Obj type;			// Feature type
+		public AttMap atts;		// Feature attributes
+		public RelTab rels;		// Related objects
+		public ObjMap objs;		// Slave objects
+		public double area;		// Area of feature
+		public double length;	// Length of feature
+		public Snode centre;	// Centre of feature
 
 		Feature() {
-			flag = Fflag.UNKN;
-			refs = 0;
-			type = Obj.UNKOBJ;
+			reln = Rflag.UNKN;
+			geom = new Geom(Pflag.NOSP);
+			type = Obj.C_AGGR;
 			atts = new AttMap();
+			rels = new RelTab();
 			objs = new ObjMap();
 			area = 0;
@@ -196,5 +197,4 @@
 	public NodeTab nodes;
 	public EdgeTab edges;
-	public AreaTab areas;
 
 	public FtrMap features;
@@ -203,110 +203,15 @@
 	private Feature feature;
 	private Edge edge;
-	private ArrayList<Long> outers;
-	private ArrayList<Long> inners;
-
-	public class EdgeIterator {
-		Edge edge;
-		boolean forward;
-		ListIterator<Long> it;
-
-		public EdgeIterator(Edge iedge, boolean dir) {
-			edge = iedge;
-			forward = dir;
-			it = null;
-		}
-
-		public boolean hasNext() {
-			return (edge != null);
-		}
-
-		public Snode next() {
-			long ref = 0;
-			if (forward) {
-				if (it == null) {
-					ref = edge.first;
-					it = edge.nodes.listIterator();
-				} else {
-					if (it.hasNext()) {
-						ref = it.next();
-					} else {
-						ref = edge.last;
-						edge = null;
-					}
-				}
-			} else {
-				if (it == null) {
-					ref = edge.last;
-					it = edge.nodes.listIterator(edge.nodes.size());
-				} else {
-					if (it.hasPrevious()) {
-						ref = it.previous();
-					} else {
-						ref = edge.first;
-						edge = null;
-					}
-				}
-			}
-			return nodes.get(ref);
-		}
-	}
-
-	public class BoundIterator {
-		Bound bound;
-		Side side;
-		ListIterator<Side> sit;
-		EdgeIterator eit;
-
-		public BoundIterator(Bound ibound) {
-			bound = ibound;
-			sit = bound.sides.listIterator();
-			if (sit.hasNext()) {
-				side = sit.next();
-				eit = new EdgeIterator(side.edge, side.forward);
-			} else {
-				side = null;
-			}
-		}
-
-		public boolean hasNext() {
-			return (side != null) && ((sit.hasNext()) || (eit.hasNext()));
-		}
-
-		public Snode next() {
-			Snode node = null;
-			if (side != null) {
-				if (eit.hasNext()) {
-					node = eit.next();
-				} else {
-					if (sit.hasNext()) {
-						side = sit.next();
-						eit = new EdgeIterator(side.edge, side.forward);
-						node = eit.next();
-					} else {
-						side = null;
-					}
-				}
-			}
-			return node;
-		}
-	}
-	
+
 	public S57map() {
-		nodes = new NodeTab();
-		edges = new EdgeTab();
-		areas = new AreaTab();
-		feature = new Feature();
-		features = new FtrMap();
-		index = new FtrTab();
-	}
-
-	public void addNode(long id, double lat, double lon) {
-		nodes.put(id, new Snode(Math.toRadians(lat), Math.toRadians(lon)));
-		feature = new Feature();
-		feature.refs = id;
-		feature.flag = Fflag.POINT;
-		edge = null;
-	}
-
+		nodes = new NodeTab();		// All nodes in map
+		edges = new EdgeTab();		// All edges in map
+		feature = new Feature();	// Current feature being built
+		features = new FtrMap();	// All features in map, grouped by type
+		index = new FtrTab();			// Feature look-up table
+	}
+
+	// S57 map building methods
+	
 	public void newNode(long id, double lat, double lon, Nflag flag) {
 		nodes.put(id, new Snode(Math.toRadians(lat), Math.toRadians(lon), flag));
@@ -320,7 +225,43 @@
 	}
 
-	public void newEdge(long id) {
-		edge = new Edge();
-		edges.put(id, edge);
+	public void newFeature(long id, Pflag p, long objl) {
+		feature = new Feature();
+		Obj obj = S57obj.decodeType(objl);
+		if (obj == Obj.C_AGGR) {
+			feature.reln = Rflag.AGGR;
+		}
+		feature.geom = new Geom(p);
+		feature.type = obj;
+		index.put(id, feature);
+	}
+	
+	public void newObj(long id, int rind) {
+		Rflag r = Rflag.AGGR;
+		switch (rind) {
+		case 1:
+			r = Rflag.MASTER;
+			break;
+		case 2:
+			r = Rflag.SLAVE;
+			break;
+		case 3:
+			r = Rflag.PEER;
+			break;
+		}
+		feature.rels.add(new Reln(id, r));
+	}
+	
+	public void endFeature() {
+		
+	}
+	
+	public void newAtt(long attl, String atvl) {
+		Att att = S57att.decodeAttribute(attl);
+		AttVal<?> val = S57val.decodeValue(atvl, att);
+		feature.atts.put(att, val);
+	}
+
+	public void newPrim(long id, long ornt, long usag) {
+		feature.geom.elems.add(new Prim(id, (ornt != 2), (usag != 2)));
 	}
 
@@ -333,8 +274,68 @@
 	}
 
+	public void newEdge(long id) {
+		edge = new Edge();
+		edges.put(id, edge);
+	}
+
+	public void endFile() {
+		for (long id : index.keySet()) {
+			Feature feature = index.get(id);
+			for (Reln rel : feature.rels) {
+				Feature reln = index.get(rel.id);
+				reln.reln = rel.reln;
+				if (feature.reln == Rflag.UNKN) {
+					switch (rel.reln) {
+					case MASTER:
+						feature.reln = Rflag.AGGR;
+						break;
+					case SLAVE:
+						feature.reln = Rflag.MASTER;
+					case PEER:
+						feature.reln = Rflag.PEER;
+						break;
+					default:
+						break;
+					}
+				}
+				ObjTab tab = feature.objs.get(reln.type);
+				if (tab == null) {
+					tab = new ObjTab();
+					feature.objs.put(reln.type, tab);
+				}
+				tab.put(tab.size(), reln.atts);
+			}
+		}
+		for (long id : index.keySet()) {
+			Feature feature = index.get(id);
+			if (feature.reln == Rflag.UNKN) {
+				feature.reln = Rflag.MASTER;
+			}
+			if ((feature.type != Obj.UNKOBJ) && ((feature.reln == Rflag.MASTER) || (feature.reln == Rflag.PEER))) {
+				if (features.get(feature.type) == null) {
+					features.put(feature.type, new ArrayList<Feature>());
+				}
+				features.get(feature.type).add(feature);
+			}
+		}
+	}
+
+	// OSM map building methods
+	
+	public void addNode(long id, double lat, double lon) {
+		Snode node = new Snode(Math.toRadians(lat), Math.toRadians(lon));
+		nodes.put(id, node);
+		feature = new Feature();
+		feature.reln = Rflag.AGGR;
+		feature.geom.prim = Pflag.POINT;
+		feature.geom.elems.add(new Prim(id));
+		edge = null;
+	}
+
 	public void addEdge(long id) {
 		feature = new Feature();
-		feature.refs = id;
-		feature.flag = Fflag.LINE;
+		feature.reln = Rflag.AGGR;
+		feature.geom.prim = Pflag.LINE;
+		feature.geom.elems.add(new Prim(id));
 		edge = new Edge();
 	}
@@ -343,4 +344,5 @@
 		if (edge.first == 0) {
 			edge.first = node;
+			nodes.get(node).flg = Nflag.CONN;
 		} else {
 			if (edge.last != 0) {
@@ -353,17 +355,12 @@
 	public void addArea(long id) {
 		feature = new Feature();
-		feature.refs = id;
-		feature.flag = Fflag.AREA;
-		outers = new ArrayList<Long>();
-		inners = new ArrayList<Long>();
+		feature.reln = Rflag.AGGR;
+		feature.geom.prim = Pflag.AREA;
+		feature.geom.elems.add(new Prim(id));
 		edge = null;
 	}
 
 	public void addToArea(long id, boolean outer) {
-		if (outer) {
-			outers.add(id);
-		} else {
-			inners.add(id);
-		}
+		feature.geom.elems.add(new Prim(id, outer));
 	}
 
@@ -395,5 +392,5 @@
 				AttVal<?> attval = S57val.convertValue(val, att);
 				if (attval.val != null)
-					atts.put(att, new AttItem(attval.conv, attval.val));
+					atts.put(att, attval);
 			} else {
 				if (subkeys[1].equals("type")) {
@@ -407,5 +404,5 @@
 						AttVal<?> attval = S57val.convertValue(val, att);
 						if (attval.val != null)
-							feature.atts.put(att, new AttItem(attval.conv, attval.val));
+							feature.atts.put(att, attval);
 					}
 				}
@@ -415,5 +412,5 @@
 
 	public void tagsDone(long id) {
-		switch (feature.flag) {
+		switch (feature.geom.prim) {
 		case POINT:
 			Snode node = nodes.get(id);
@@ -428,12 +425,8 @@
 			nodes.get(edge.first).flg = Nflag.CONN;
 			nodes.get(edge.last).flg = Nflag.CONN;
-			Bound ebound = (new Bound(new Side(edge, true), true));
-			feature.length = calcLength(ebound);
+			feature.length = calcLength(feature.geom);
 			if (edge.first == edge.last) {
-				feature.flag = Fflag.AREA;
-				Area area = new Area();
-				area.add(ebound);
-				feature.area = calcArea(ebound);
-				areas.put(id, area);
+				feature.geom.prim = Pflag.AREA;
+				feature.area = calcArea(feature.geom);
 			} else {
 				feature.area = 0;
@@ -441,42 +434,5 @@
 			break;
 		case AREA:
-			Bound bound = null;
-			Area area = new Area();
-			ArrayList<Long> role = outers;
-			while (role != null) {
-				while (!role.isEmpty()) {
-					Edge edge = edges.get(role.remove(0));
-					long node1 = edge.first;
-					long node2 = edge.last;
-					bound = new Bound(new Side(edge, true), (role == outers));
-					if (node1 != node2) {
-						for (ListIterator<Long> it = role.listIterator(0); it.hasNext();) {
-							Edge nedge = edges.get(it.next());
-							if (nedge.first == node2) {
-								bound.sides.add(new Side(nedge, true));
-								it.remove();
-								if (nedge.last == node2)
-									break;
-							} else if (nedge.last == node2) {
-								bound.sides.add(new Side(nedge, false));
-								it.remove();
-								if (nedge.first == node2)
-									break;
-							}
-						}
-					}
-					area.add(bound);
-				}
-				if (role == outers) {
-					feature.length = calcLength(bound);
-					feature.area = calcArea(bound);
-					role = inners;
-				} else {
-					role = null;
-				}
-			}
-			areas.put(id, area);
 			break;
-		case UNKN:
 		default:
 			break;
@@ -492,10 +448,107 @@
 	}
 
-	double signedArea(Bound bound) {
+	// Utility methods
+	
+	public class EdgeIterator {
+		Edge edge;
+		boolean forward;
+		ListIterator<Long> it;
+
+		public EdgeIterator(Edge e, boolean dir) {
+			edge = e;
+			forward = dir;
+			it = null;
+		}
+
+		public boolean hasNext() {
+			return (edge != null);
+		}
+
+		public Snode next() {
+			long ref = 0;
+			if (forward) {
+				if (it == null) {
+					ref = edge.first;
+					it = edge.nodes.listIterator();
+				} else {
+					if (it.hasNext()) {
+						ref = it.next();
+					} else {
+						ref = edge.last;
+						edge = null;
+					}
+				}
+			} else {
+				if (it == null) {
+					ref = edge.last;
+					it = edge.nodes.listIterator(edge.nodes.size());
+				} else {
+					if (it.hasPrevious()) {
+						ref = it.previous();
+					} else {
+						ref = edge.first;
+						edge = null;
+					}
+				}
+			}
+			return nodes.get(ref);
+		}
+	}
+
+	public class GeomIterator {
+		Geom geom;
+		Prim prim;
+		EdgeIterator eit;
+		ListIterator<S57map.Prim> it;
+		Snode first;
+		Snode last;
+		
+		public GeomIterator(Geom g) {
+			geom = g;
+			eit = null;
+			first = last = null;
+			if ((geom.prim != Pflag.NOSP) && (geom.prim != Pflag.POINT)) {
+				it = geom.elems.listIterator();
+			} else {
+				it = null;
+			}
+		}
+		
+		public boolean hasMore() {
+			return (it != null) && it.hasNext();
+		}
+		
+		public boolean more() {
+			if ((it != null) && it.hasNext()) {
+				prim = it.next();
+				return prim.outer;
+			}
+			return false;
+		}
+		
+		public boolean hasNext() {
+			return (first != last) && (eit.hasNext() || it.hasNext());
+		}
+		
+		public Snode next() {
+			if (!eit.hasNext()) {
+				if (it.hasNext()) {
+					prim = it.next();
+					eit = new EdgeIterator(edges.get(prim.id), prim.forward);
+				} else {
+					return null;
+				}
+			}
+			last = eit.next();
+			return last;
+		}
+	}
+	
+	double signedArea(Geom geom) {
 		Snode node;
 		double lat, lon, llon, llat;
 		lat = lon = llon = llat = 0;
 		double sigma = 0;
-		BoundIterator it = new BoundIterator(bound);
+/*		BoundIterator it = new BoundIterator(bound);
 		while (it.hasNext()) {
 			llon = lon;
@@ -506,17 +559,17 @@
 			sigma += (lon * Math.sin(llat)) - (llon * Math.sin(lat));
 		}
-		return sigma / 2.0;
-	}
-
-	public boolean handOfArea(Bound bound) {
-		return (signedArea(bound) < 0);
-	}
-
-	public double calcArea(Bound bound) {
-		return Math.abs(signedArea(bound)) * 3444 * 3444;
-	}
-
-	public double calcLength(Bound bound) {
-		Snode node;
+*/		return sigma / 2.0;
+	}
+
+	public boolean handOfArea(Geom geom) {
+		return (signedArea(geom) < 0);
+	}
+
+	public double calcArea(Geom geom) {
+		return Math.abs(signedArea(geom)) * 3444 * 3444;
+	}
+
+	public double calcLength(Geom geom) {
+/*		Snode node;
 		double lat, lon, llon, llat;
 		lat = lon = llon = llat = 0;
@@ -537,16 +590,17 @@
 		}
 		return sigma * 3444;
+*/		return 0;
 	}
 
 	public Snode findCentroid(Feature feature) {
-		double lat, lon, slat, slon, llat, llon;
+/*		double lat, lon, slat, slon, llat, llon;
 		llat = llon = lat = lon = slat = slon = 0;
 		double sarc = 0;
 		boolean first = true;
-		switch (feature.flag) {
+		switch (feature.geom.prim) {
 		case POINT:
-			return nodes.get(feature.refs);
+			return nodes.get(feature.geom);
 		case LINE:
-			Edge edge = edges.get(feature.refs);
+			Edge edge = edges.get(feature.geom);
 			EdgeIterator eit = new EdgeIterator(edge, true);
 			while (eit.hasNext()) {
@@ -583,5 +637,5 @@
 			return new Snode(llat + ((lat - llat) * harc / sarc), llon + ((lon - llon) * harc / sarc));
 		case AREA:
-			Bound bound = areas.get(feature.refs).get(0);
+			Bound bound = areas.get(feature.geom).get(0);
 			BoundIterator bit = new BoundIterator(bound);
 			while (bit.hasNext()) {
@@ -603,5 +657,5 @@
 		default:
 		}
-		return null;
+*/		return null;
 	}
 
Index: /applications/editors/josm/plugins/smed2/src/s57/S57obj.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/s57/S57obj.java	(revision 30214)
+++ /applications/editors/josm/plugins/smed2/src/s57/S57obj.java	(revision 30215)
@@ -19,57 +19,59 @@
 		TIDEWY, TOPMAR, TSELNE, TSSBND, TSSCRS, TSSLPT, TSSRON, TSEZNE, TUNNEL, TWRTPT, UWTROC, UNSARE, VEGATN, WATTUR, WATFAL, WEDKLP,
 		WRECKS, TS_FEB, NOTMRK, WTWAXS, WTWPRF, BRGARE, BUNSTA, COMARE, HRBBSN, LOKARE, LKBSPT, PRTARE, BCNWTW, BOYWTW, REFDMP, RTPLPT,
-		TERMNL, TRNBSN, WTWARE, WTWGAG, TISDGE, VEHTRF, EXCNST, LG_SDM, LG_VSP, LITMIN, LITMAJ
+		TERMNL, TRNBSN, WTWARE, WTWGAG, TISDGE, VEHTRF, EXCNST, LG_SDM, LG_VSP, LITMIN, LITMAJ, C_AGGR, M_COVR
 	}
 
 	private static final EnumMap<Obj, Integer> ObjS57 = new EnumMap<Obj, Integer>(Obj.class);
 	static {
-		ObjS57.put(Obj.UNKOBJ,0); ObjS57.put(Obj.ADMARE,1); ObjS57.put(Obj.AIRARE,2); ObjS57.put(Obj.ACHBRT,3); ObjS57.put(Obj.ACHARE,4);
-		ObjS57.put(Obj.BCNCAR,5); ObjS57.put(Obj.BCNISD,6); ObjS57.put(Obj.BCNLAT,7); ObjS57.put(Obj.BCNSAW,8); ObjS57.put(Obj.BCNSPP,9);
-		ObjS57.put(Obj.BERTHS,10); ObjS57.put(Obj.BRIDGE,11); ObjS57.put(Obj.BUISGL,12); ObjS57.put(Obj.BUAARE,13); ObjS57.put(Obj.BOYCAR,14);
-		ObjS57.put(Obj.BOYINB,15); ObjS57.put(Obj.BOYISD,16); ObjS57.put(Obj.BOYLAT,17); ObjS57.put(Obj.BOYSAW,18); ObjS57.put(Obj.BOYSPP,19);
-		ObjS57.put(Obj.CBLARE,20); ObjS57.put(Obj.CBLOHD,21); ObjS57.put(Obj.CBLSUB,22); ObjS57.put(Obj.CANALS,23);	ObjS57.put(Obj.CANBNK,24);
-		ObjS57.put(Obj.CTSARE,25); ObjS57.put(Obj.CAUSWY,26);	ObjS57.put(Obj.CTNARE,27); ObjS57.put(Obj.CHKPNT,28); ObjS57.put(Obj.CGUSTA,29);
-		ObjS57.put(Obj.COALNE,30); ObjS57.put(Obj.CONZNE,31); ObjS57.put(Obj.COSARE,32); ObjS57.put(Obj.CTRPNT,33); ObjS57.put(Obj.CONVYR,34);
-		ObjS57.put(Obj.CRANES,35); ObjS57.put(Obj.CURENT,36); ObjS57.put(Obj.CUSZNE,37); ObjS57.put(Obj.DAMCON,38);	ObjS57.put(Obj.DAYMAR,39);
-		ObjS57.put(Obj.DWRTCL,40); ObjS57.put(Obj.DWRTPT,41); ObjS57.put(Obj.DEPARE,42); ObjS57.put(Obj.DEPCNT,43);	ObjS57.put(Obj.DISMAR,44);
-		ObjS57.put(Obj.DOCARE,45); ObjS57.put(Obj.DRGARE,46); ObjS57.put(Obj.DRYDOC,47); ObjS57.put(Obj.DMPGRD,48); ObjS57.put(Obj.DYKCON,49);
-		ObjS57.put(Obj.EXEZNE,50); ObjS57.put(Obj.FAIRWY,51); ObjS57.put(Obj.FNCLNE,52); ObjS57.put(Obj.FERYRT,53); ObjS57.put(Obj.FSHZNE,54);
-		ObjS57.put(Obj.FSHFAC,55); ObjS57.put(Obj.FSHGRD,56); ObjS57.put(Obj.FLODOC,57); ObjS57.put(Obj.FOGSIG,58); ObjS57.put(Obj.FORSTC,59);
-		ObjS57.put(Obj.FRPARE,60); ObjS57.put(Obj.GATCON,61); ObjS57.put(Obj.GRIDRN,62); ObjS57.put(Obj.HRBARE,63); ObjS57.put(Obj.HRBFAC,64);
-		ObjS57.put(Obj.HULKES,65); ObjS57.put(Obj.ICEARE,66); ObjS57.put(Obj.ICNARE,67); ObjS57.put(Obj.ISTZNE,68); ObjS57.put(Obj.LAKARE,69);
-		ObjS57.put(Obj.LAKSHR,70); ObjS57.put(Obj.LNDARE,71);	ObjS57.put(Obj.LNDELV,72); ObjS57.put(Obj.LNDRGN,73); ObjS57.put(Obj.LNDMRK,74);
-		ObjS57.put(Obj.LIGHTS,75); ObjS57.put(Obj.LITFLT,76); ObjS57.put(Obj.LITVES,77); ObjS57.put(Obj.LOCMAG,78); ObjS57.put(Obj.LOKBSN,79);
-		ObjS57.put(Obj.LOGPON,80); ObjS57.put(Obj.MAGVAR,81); ObjS57.put(Obj.MARCUL,82); ObjS57.put(Obj.MIPARE,83); ObjS57.put(Obj.MORFAC,84);
-		ObjS57.put(Obj.NAVLNE,85); ObjS57.put(Obj.OBSTRN,86); ObjS57.put(Obj.OFSPLF,87); ObjS57.put(Obj.OSPARE,88); ObjS57.put(Obj.OILBAR,89);
-		ObjS57.put(Obj.PILPNT,90); ObjS57.put(Obj.PILBOP,91);	ObjS57.put(Obj.PIPARE,92); ObjS57.put(Obj.PIPOHD,93); ObjS57.put(Obj.PIPSOL,94);
-		ObjS57.put(Obj.PONTON,95); ObjS57.put(Obj.PRCARE,96); ObjS57.put(Obj.PRDARE,97); ObjS57.put(Obj.PYLONS,98); ObjS57.put(Obj.RADLNE,99);
-		ObjS57.put(Obj.RADRNG,100); ObjS57.put(Obj.RADRFL,101); ObjS57.put(Obj.RADSTA,102); ObjS57.put(Obj.RTPBCN,103);	ObjS57.put(Obj.RDOCAL,104);
-		ObjS57.put(Obj.RDOSTA,105);	ObjS57.put(Obj.RAILWY,106);	ObjS57.put(Obj.RAPIDS,107);	ObjS57.put(Obj.RCRTCL,108);	ObjS57.put(Obj.RECTRC,109);
-		ObjS57.put(Obj.RCTLPT,110);	ObjS57.put(Obj.RSCSTA,111);	ObjS57.put(Obj.RESARE,112);	ObjS57.put(Obj.RETRFL,113);	ObjS57.put(Obj.RIVERS,114);
-		ObjS57.put(Obj.RIVBNK,115);	ObjS57.put(Obj.ROADWY,116);	ObjS57.put(Obj.RUNWAY,117);	ObjS57.put(Obj.SNDWAV,118);	ObjS57.put(Obj.SEAARE,119);
-		ObjS57.put(Obj.SPLARE,120);	ObjS57.put(Obj.SBDARE,121);	ObjS57.put(Obj.SLCONS,122);	ObjS57.put(Obj.SISTAT,123);	ObjS57.put(Obj.SISTAW,124);
-		ObjS57.put(Obj.SILTNK,125);	ObjS57.put(Obj.SLOTOP,126);	ObjS57.put(Obj.SLOGRD,127);	ObjS57.put(Obj.SMCFAC,128);	ObjS57.put(Obj.SOUNDG,129);
-		ObjS57.put(Obj.SPRING,130);	ObjS57.put(Obj.SQUARE,131);	ObjS57.put(Obj.STSLNE,132);	ObjS57.put(Obj.SUBTLN,133);	ObjS57.put(Obj.SWPARE,134);
-		ObjS57.put(Obj.TESARE,135); ObjS57.put(Obj.TS_PRH,136);	ObjS57.put(Obj.TS_PNH,137); ObjS57.put(Obj.TS_PAD,138);	ObjS57.put(Obj.TS_TIS,139);
-		ObjS57.put(Obj.T_HMON,140);	ObjS57.put(Obj.T_NHMN,141);	ObjS57.put(Obj.T_TIMS,142);	ObjS57.put(Obj.TIDEWY,143);	ObjS57.put(Obj.TOPMAR,144);
-		ObjS57.put(Obj.TSELNE,145);	ObjS57.put(Obj.TSSBND,146);	ObjS57.put(Obj.TSSCRS,147);	ObjS57.put(Obj.TSSLPT,148);	ObjS57.put(Obj.TSSRON,149);
-		ObjS57.put(Obj.TSEZNE,150);	ObjS57.put(Obj.TUNNEL,151);	ObjS57.put(Obj.TWRTPT,152);	ObjS57.put(Obj.UWTROC,153);	ObjS57.put(Obj.UNSARE,154);
-		ObjS57.put(Obj.VEGATN,155);	ObjS57.put(Obj.WATTUR,156);	ObjS57.put(Obj.WATFAL,157);	ObjS57.put(Obj.WEDKLP,158);	ObjS57.put(Obj.WRECKS,159);
-		ObjS57.put(Obj.TS_FEB,160); ObjS57.put(Obj.MPAARE,199);
+		ObjS57.put(Obj.UNKOBJ,0);
+		ObjS57.put(Obj.ADMARE,1); ObjS57.put(Obj.AIRARE,2); ObjS57.put(Obj.ACHBRT,3); ObjS57.put(Obj.ACHARE,4); ObjS57.put(Obj.BCNCAR,5);
+		ObjS57.put(Obj.BCNISD,6); ObjS57.put(Obj.BCNLAT,7); ObjS57.put(Obj.BCNSAW,8); ObjS57.put(Obj.BCNSPP,9); ObjS57.put(Obj.BERTHS,10);
+		ObjS57.put(Obj.BRIDGE,11); ObjS57.put(Obj.BUISGL,12); ObjS57.put(Obj.BUAARE,13); ObjS57.put(Obj.BOYCAR,14); ObjS57.put(Obj.BOYINB,15);
+		ObjS57.put(Obj.BOYISD,16); ObjS57.put(Obj.BOYLAT,17); ObjS57.put(Obj.BOYSAW,18); ObjS57.put(Obj.BOYSPP,19); ObjS57.put(Obj.CBLARE,20);
+		ObjS57.put(Obj.CBLOHD,21); ObjS57.put(Obj.CBLSUB,22); ObjS57.put(Obj.CANALS,23); ObjS57.put(Obj.CANBNK,24); ObjS57.put(Obj.CTSARE,25);
+		ObjS57.put(Obj.CAUSWY,26); ObjS57.put(Obj.CTNARE,27); ObjS57.put(Obj.CHKPNT,28); ObjS57.put(Obj.CGUSTA,29); ObjS57.put(Obj.COALNE,30);
+		ObjS57.put(Obj.CONZNE,31); ObjS57.put(Obj.COSARE,32); ObjS57.put(Obj.CTRPNT,33); ObjS57.put(Obj.CONVYR,34); ObjS57.put(Obj.CRANES,35);
+		ObjS57.put(Obj.CURENT,36); ObjS57.put(Obj.CUSZNE,37); ObjS57.put(Obj.DAMCON,38); ObjS57.put(Obj.DAYMAR,39); ObjS57.put(Obj.DWRTCL,40);
+		ObjS57.put(Obj.DWRTPT,41); ObjS57.put(Obj.DEPARE,42); ObjS57.put(Obj.DEPCNT,43); ObjS57.put(Obj.DISMAR,44); ObjS57.put(Obj.DOCARE,45);
+		ObjS57.put(Obj.DRGARE,46); ObjS57.put(Obj.DRYDOC,47); ObjS57.put(Obj.DMPGRD,48); ObjS57.put(Obj.DYKCON,49); ObjS57.put(Obj.EXEZNE,50);
+		ObjS57.put(Obj.FAIRWY,51); ObjS57.put(Obj.FNCLNE,52); ObjS57.put(Obj.FERYRT,53); ObjS57.put(Obj.FSHZNE,54); ObjS57.put(Obj.FSHFAC,55);
+		ObjS57.put(Obj.FSHGRD,56); ObjS57.put(Obj.FLODOC,57); ObjS57.put(Obj.FOGSIG,58); ObjS57.put(Obj.FORSTC,59); ObjS57.put(Obj.FRPARE,60);
+		ObjS57.put(Obj.GATCON,61); ObjS57.put(Obj.GRIDRN,62); ObjS57.put(Obj.HRBARE,63); ObjS57.put(Obj.HRBFAC,64); ObjS57.put(Obj.HULKES,65);
+		ObjS57.put(Obj.ICEARE,66); ObjS57.put(Obj.ICNARE,67); ObjS57.put(Obj.ISTZNE,68); ObjS57.put(Obj.LAKARE,69); ObjS57.put(Obj.LAKSHR,70);
+		ObjS57.put(Obj.LNDARE,71); ObjS57.put(Obj.LNDELV,72); ObjS57.put(Obj.LNDRGN,73); ObjS57.put(Obj.LNDMRK,74); ObjS57.put(Obj.LIGHTS,75);
+		ObjS57.put(Obj.LITFLT,76); ObjS57.put(Obj.LITVES,77); ObjS57.put(Obj.LOCMAG,78); ObjS57.put(Obj.LOKBSN,79); ObjS57.put(Obj.LOGPON,80);
+		ObjS57.put(Obj.MAGVAR,81); ObjS57.put(Obj.MARCUL,82); ObjS57.put(Obj.MIPARE,83); ObjS57.put(Obj.MORFAC,84); ObjS57.put(Obj.NAVLNE,85);
+		ObjS57.put(Obj.OBSTRN,86); ObjS57.put(Obj.OFSPLF,87); ObjS57.put(Obj.OSPARE,88); ObjS57.put(Obj.OILBAR,89); ObjS57.put(Obj.PILPNT,90);
+		ObjS57.put(Obj.PILBOP,91); ObjS57.put(Obj.PIPARE,92); ObjS57.put(Obj.PIPOHD,93); ObjS57.put(Obj.PIPSOL,94); ObjS57.put(Obj.PONTON,95);
+		ObjS57.put(Obj.PRCARE,96); ObjS57.put(Obj.PRDARE,97); ObjS57.put(Obj.PYLONS,98); ObjS57.put(Obj.RADLNE,99); ObjS57.put(Obj.RADRNG,100);
+		ObjS57.put(Obj.RADRFL,101); ObjS57.put(Obj.RADSTA,102); ObjS57.put(Obj.RTPBCN,103);	ObjS57.put(Obj.RDOCAL,104); ObjS57.put(Obj.RDOSTA,105);
+		ObjS57.put(Obj.RAILWY,106);	ObjS57.put(Obj.RAPIDS,107);	ObjS57.put(Obj.RCRTCL,108);	ObjS57.put(Obj.RECTRC,109); ObjS57.put(Obj.RCTLPT,110);
+		ObjS57.put(Obj.RSCSTA,111);	ObjS57.put(Obj.RESARE,112);	ObjS57.put(Obj.RETRFL,113);	ObjS57.put(Obj.RIVERS,114); ObjS57.put(Obj.RIVBNK,115);
+		ObjS57.put(Obj.ROADWY,116);	ObjS57.put(Obj.RUNWAY,117);	ObjS57.put(Obj.SNDWAV,118);	ObjS57.put(Obj.SEAARE,119); ObjS57.put(Obj.SPLARE,120);
+		ObjS57.put(Obj.SBDARE,121);	ObjS57.put(Obj.SLCONS,122);	ObjS57.put(Obj.SISTAT,123);	ObjS57.put(Obj.SISTAW,124); ObjS57.put(Obj.SILTNK,125);
+		ObjS57.put(Obj.SLOTOP,126);	ObjS57.put(Obj.SLOGRD,127);	ObjS57.put(Obj.SMCFAC,128);	ObjS57.put(Obj.SOUNDG,129); ObjS57.put(Obj.SPRING,130);
+		ObjS57.put(Obj.SQUARE,131);	ObjS57.put(Obj.STSLNE,132);	ObjS57.put(Obj.SUBTLN,133);	ObjS57.put(Obj.SWPARE,134); ObjS57.put(Obj.TESARE,135);
+		ObjS57.put(Obj.TS_PRH,136);	ObjS57.put(Obj.TS_PNH,137); ObjS57.put(Obj.TS_PAD,138);	ObjS57.put(Obj.TS_TIS,139); ObjS57.put(Obj.T_HMON,140);
+		ObjS57.put(Obj.T_NHMN,141);	ObjS57.put(Obj.T_TIMS,142);	ObjS57.put(Obj.TIDEWY,143);	ObjS57.put(Obj.TOPMAR,144); ObjS57.put(Obj.TSELNE,145);
+		ObjS57.put(Obj.TSSBND,146);	ObjS57.put(Obj.TSSCRS,147);	ObjS57.put(Obj.TSSLPT,148);	ObjS57.put(Obj.TSSRON,149); ObjS57.put(Obj.TSEZNE,150);
+		ObjS57.put(Obj.TUNNEL,151);	ObjS57.put(Obj.TWRTPT,152);	ObjS57.put(Obj.UWTROC,153);	ObjS57.put(Obj.UNSARE,154); ObjS57.put(Obj.VEGATN,155);
+		ObjS57.put(Obj.WATTUR,156);	ObjS57.put(Obj.WATFAL,157);	ObjS57.put(Obj.WEDKLP,158);	ObjS57.put(Obj.WRECKS,159); ObjS57.put(Obj.TS_FEB,160);
+		ObjS57.put(Obj.MPAARE,199); ObjS57.put(Obj.C_AGGR,400); ObjS57.put(Obj.M_COVR,302);
 	}
 
 	private static final EnumMap<Obj, Integer> ObjIENC = new EnumMap<Obj, Integer>(Obj.class);
 	static {
-		ObjIENC.put(Obj.UNKOBJ, 0);	ObjIENC.put(Obj.ACHBRT, 17000);	ObjIENC.put(Obj.ACHARE, 17001);	ObjIENC.put(Obj.CANBNK, 17002);	ObjIENC.put(Obj.DEPARE, 17003);
-		ObjIENC.put(Obj.DISMAR, 17004);	ObjIENC.put(Obj.RESARE, 17005);	ObjIENC.put(Obj.RIVBNK, 17006);	ObjIENC.put(Obj.SISTAT, 17007);	ObjIENC.put(Obj.SISTAW, 17008);
-		ObjIENC.put(Obj.TOPMAR, 17009);	ObjIENC.put(Obj.BERTHS, 17010);	ObjIENC.put(Obj.BRIDGE, 17011);	ObjIENC.put(Obj.CBLOHD, 17012);	ObjIENC.put(Obj.FERYRT, 17013);
-		ObjIENC.put(Obj.HRBARE, 17014);	ObjIENC.put(Obj.HRBFAC, 17015);	ObjIENC.put(Obj.LOKBSN, 17016);	ObjIENC.put(Obj.RDOCAL, 17017); ObjIENC.put(Obj.CURENT, 17019);
-		ObjIENC.put(Obj.HULKES, 17020);	ObjIENC.put(Obj.PONTON, 17021);	ObjIENC.put(Obj.PIPOHD, 17024);	ObjIENC.put(Obj.FLODOC, 17025);	ObjIENC.put(Obj.CHKPNT, 17027);
-		ObjIENC.put(Obj.BCNLAT, 17028);	ObjIENC.put(Obj.BOYLAT, 17029);	ObjIENC.put(Obj.CRANES, 17030);	ObjIENC.put(Obj.GATCON, 17031);	ObjIENC.put(Obj.SLCONS, 17032);
-		ObjIENC.put(Obj.UWTROC, 17033);	ObjIENC.put(Obj.CONVYR, 17034);	ObjIENC.put(Obj.NOTMRK, 17050);	ObjIENC.put(Obj.WTWAXS, 17051);	ObjIENC.put(Obj.WTWPRF, 17052);
-		ObjIENC.put(Obj.BRGARE, 17053);	ObjIENC.put(Obj.BUNSTA, 17054);	ObjIENC.put(Obj.COMARE, 17055);	ObjIENC.put(Obj.HRBBSN, 17056);	ObjIENC.put(Obj.LOKARE, 17057);
-		ObjIENC.put(Obj.LKBSPT, 17058);	ObjIENC.put(Obj.PRTARE, 17059);	ObjIENC.put(Obj.BCNWTW, 17060);	ObjIENC.put(Obj.BOYWTW, 17061);	ObjIENC.put(Obj.REFDMP, 17062);
-		ObjIENC.put(Obj.RTPLPT, 17063);	ObjIENC.put(Obj.TERMNL, 17064);	ObjIENC.put(Obj.TRNBSN, 17065);	ObjIENC.put(Obj.WTWARE, 17066);	ObjIENC.put(Obj.WTWGAG, 17067);
-		ObjIENC.put(Obj.TISDGE, 17068);	ObjIENC.put(Obj.VEHTRF, 17069);	ObjIENC.put(Obj.EXCNST, 17070);	ObjIENC.put(Obj.LG_SDM, 18001);	ObjIENC.put(Obj.LG_VSP, 18002);
+		ObjIENC.put(Obj.UNKOBJ, 0);
+		ObjIENC.put(Obj.ACHBRT, 17000);	ObjIENC.put(Obj.ACHARE, 17001);	ObjIENC.put(Obj.CANBNK, 17002);	ObjIENC.put(Obj.DEPARE, 17003); ObjIENC.put(Obj.DISMAR, 17004);
+		ObjIENC.put(Obj.RESARE, 17005);	ObjIENC.put(Obj.RIVBNK, 17006);	ObjIENC.put(Obj.SISTAT, 17007);	ObjIENC.put(Obj.SISTAW, 17008); ObjIENC.put(Obj.TOPMAR, 17009);
+		ObjIENC.put(Obj.BERTHS, 17010);	ObjIENC.put(Obj.BRIDGE, 17011);	ObjIENC.put(Obj.CBLOHD, 17012);	ObjIENC.put(Obj.FERYRT, 17013); ObjIENC.put(Obj.HRBARE, 17014);
+		ObjIENC.put(Obj.HRBFAC, 17015);	ObjIENC.put(Obj.LOKBSN, 17016);	ObjIENC.put(Obj.RDOCAL, 17017); ObjIENC.put(Obj.CURENT, 17019); ObjIENC.put(Obj.HULKES, 17020);
+		ObjIENC.put(Obj.PONTON, 17021);	ObjIENC.put(Obj.PIPOHD, 17024);	ObjIENC.put(Obj.FLODOC, 17025);	ObjIENC.put(Obj.CHKPNT, 17027); ObjIENC.put(Obj.BCNLAT, 17028);
+		ObjIENC.put(Obj.BOYLAT, 17029);	ObjIENC.put(Obj.CRANES, 17030);	ObjIENC.put(Obj.GATCON, 17031);	ObjIENC.put(Obj.SLCONS, 17032); ObjIENC.put(Obj.UWTROC, 17033);
+		ObjIENC.put(Obj.CONVYR, 17034);	ObjIENC.put(Obj.NOTMRK, 17050);	ObjIENC.put(Obj.WTWAXS, 17051);	ObjIENC.put(Obj.WTWPRF, 17052); ObjIENC.put(Obj.BRGARE, 17053);
+		ObjIENC.put(Obj.BUNSTA, 17054);	ObjIENC.put(Obj.COMARE, 17055);	ObjIENC.put(Obj.HRBBSN, 17056);	ObjIENC.put(Obj.LOKARE, 17057); ObjIENC.put(Obj.LKBSPT, 17058);
+		ObjIENC.put(Obj.PRTARE, 17059);	ObjIENC.put(Obj.BCNWTW, 17060);	ObjIENC.put(Obj.BOYWTW, 17061);	ObjIENC.put(Obj.REFDMP, 17062); ObjIENC.put(Obj.RTPLPT, 17063);
+		ObjIENC.put(Obj.TERMNL, 17064);	ObjIENC.put(Obj.TRNBSN, 17065);	ObjIENC.put(Obj.WTWARE, 17066);	ObjIENC.put(Obj.WTWGAG, 17067); ObjIENC.put(Obj.TISDGE, 17068);
+		ObjIENC.put(Obj.VEHTRF, 17069);	ObjIENC.put(Obj.EXCNST, 17070);	ObjIENC.put(Obj.LG_SDM, 18001);	ObjIENC.put(Obj.LG_VSP, 18002);
 	}
 
@@ -134,5 +136,5 @@
 		ObjStr.put(Obj.TRNBSN, "turning_basin"); ObjStr.put(Obj.WTWARE, "waterway_area"); ObjStr.put(Obj.WTWGAG, "waterway_gauge"); ObjStr.put(Obj.TISDGE, "time_schedule");
 		ObjStr.put(Obj.VEHTRF, "vehicle_transfer"); ObjStr.put(Obj.EXCNST, "exceptional_structure"); ObjStr.put(Obj.LG_SDM, ""); ObjStr.put(Obj.LG_VSP, "");
-		ObjStr.put(Obj.MPAARE, "protected_area"); ObjStr.put(Obj.LITMAJ, "light_major"); ObjStr.put(Obj.LITMIN, "light_minor");
+		ObjStr.put(Obj.MPAARE, "protected_area"); ObjStr.put(Obj.LITMAJ, "light_major"); ObjStr.put(Obj.LITMIN, "light_minor"); ObjStr.put(Obj.M_COVR, "coverage");
 	}
 	
@@ -145,10 +147,10 @@
 	}
 	
-	public static Obj decodeType(Integer objl) { // Convert S57 feature code to OSeaM object enumeration
-		Obj obj = S57Obj.get(objl);
+	public static Obj decodeType(long objl) { // Convert S57 feature code to OSeaM object enumeration
+		Obj obj = S57Obj.get((int)objl);
 		return (obj != null) ? obj : Obj.UNKOBJ;
 	}
 
-	public static Integer encodeType(Obj type) { // Convert OSM object enumeration to S57 feature code
+	public static long encodeType(Obj type) { // Convert OSM object enumeration to S57 feature code
 		if (ObjS57.containsKey(type))
 			return ObjS57.get(type);
Index: /applications/editors/josm/plugins/smed2/src/s57/S57val.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/s57/S57val.java	(revision 30214)
+++ /applications/editors/josm/plugins/smed2/src/s57/S57val.java	(revision 30215)
@@ -21,5 +21,5 @@
 		Conv conv;
 		EnumMap<?, ?> map;
-		S57key(Conv c, EnumMap<?, ?> m) {
+		S57key(Conv c, EnumMap<?, S57enum> m) {
 			conv = c; map = m;
 		}
@@ -225,6 +225,6 @@
 	private static final EnumMap<CatLAM, S57enum> Catlam = new EnumMap<CatLAM, S57enum>(CatLAM.class); static { Catlam.put(CatLAM.LAM_UNKN, new S57enum(0, ""));
 		Catlam.put(CatLAM.LAM_PORT, new S57enum(1, "port")); Catlam.put(CatLAM.LAM_STBD, new S57enum(2, "starboard")); Catlam.put(CatLAM.LAM_PCST, new S57enum(3, "preferred_channel_starboard"));
-		Catlam.put(CatLAM.LAM_PCPT, new S57enum(4, "preferred_channel_port")); Catlam.put(CatLAM.LAM_WWLT, new S57enum(5, "waterway_left")); Catlam.put(CatLAM.LAM_WWRT, new S57enum(6, "waterway_right"));
-		Catlam.put(CatLAM.LAM_CHLT, new S57enum(7, "channel_left")); Catlam.put(CatLAM.LAM_CHRT, new S57enum(8, "channel_right")); Catlam.put(CatLAM.LAM_WWSN, new S57enum(9, "waterway_separation"));
+		Catlam.put(CatLAM.LAM_PCPT, new S57enum(4, "preferred_channel_port")); Catlam.put(CatLAM.LAM_WWRT, new S57enum(5, "waterway_right")); Catlam.put(CatLAM.LAM_WWLT, new S57enum(6, "waterway_left"));
+		Catlam.put(CatLAM.LAM_CHRT, new S57enum(7, "channel_right")); Catlam.put(CatLAM.LAM_CHLT, new S57enum(8, "channel_left")); Catlam.put(CatLAM.LAM_WWSN, new S57enum(9, "waterway_separation"));
 		Catlam.put(CatLAM.LAM_CHSN, new S57enum(10, "channel_separation")); Catlam.put(CatLAM.LAM_CHRB, new S57enum(11, "channel_right_bank")); Catlam.put(CatLAM.LAM_CHLB, new S57enum(12, "channel_left_bank"));
 		Catlam.put(CatLAM.LAM_CRRT, new S57enum(13, "crossover_right")); Catlam.put(CatLAM.LAM_CRLT, new S57enum(14, "crossover_left")); Catlam.put(CatLAM.LAM_DRLT, new S57enum(15, "danger_right"));
@@ -997,4 +997,9 @@
 		Shptyp.put(ShpTYP.TYP_BCAR, new S57enum(10, "bulk_carrier")); Shptyp.put(ShpTYP.TYP_SPLN, new S57enum(11, "seaplane")); Shptyp.put(ShpTYP.TYP_TUGB, new S57enum(12, "tugboat"));
 		Shptyp.put(ShpTYP.TYP_PSGR, new S57enum(13, "passenger")); Shptyp.put(ShpTYP.TYP_FERY, new S57enum(14, "ferry")); Shptyp.put(ShpTYP.TYP_BOAT, new S57enum(15, "boat"));
+	}
+
+	public enum CatCVR { CVR_UNKN, CVR_COVR, CVR_NCVR }
+	private static final EnumMap<CatCVR, S57enum> Catcvr = new EnumMap<CatCVR, S57enum>(CatCVR.class); static { Catcvr.put(CatCVR.CVR_UNKN, new S57enum(0, ""));
+	Catcvr.put(CatCVR.CVR_COVR, new S57enum(1, "coverage")); Catcvr.put(CatCVR.CVR_NCVR, new S57enum(2, "no_coverage"));
 	}
 
@@ -1089,5 +1094,5 @@
 		keys.put(Att.LC_LG2, new S57key(Conv.F, null));	keys.put(Att.LC_DR1, new S57key(Conv.F, null)); keys.put(Att.LC_DR2, new S57key(Conv.F, null));
 		keys.put(Att.LC_SP1, new S57key(Conv.F, null));	keys.put(Att.LC_SP2, new S57key(Conv.F, null)); keys.put(Att.LC_WD1, new S57key(Conv.F, null));
-		keys.put(Att.LC_WD2, new S57key(Conv.F, null));	keys.put(Att.LITRAD, new S57key(Conv.A, null));
+		keys.put(Att.LC_WD2, new S57key(Conv.F, null));	keys.put(Att.LITRAD, new S57key(Conv.A, null));	keys.put(Att.CATCVR, new S57key(Conv.E, Catcvr));
 	}
 	
@@ -1114,19 +1119,52 @@
 	}
 	
-	public static String decodeValue(String val, Integer attl) {          // Convert S57 attribute value string to OSeaM attribute value string
-		Att att = S57att.decodeAttribute(attl);
-		switch (keys.get(att).conv) {
+	public static Enum<?> s57Enum(String val, Att att) { // Convert S57 attribute value string to OSeaM enumeration
+		EnumMap<?, ?> map = keys.get(att).map;
+		Enum<?> unkn = null;
+		int i = 0;
+		try {
+			i = Integer.parseInt(val);
+		} catch (Exception e) {
+			return unkn;
+		}
+		if (map != null) {
+			for (Object item : map.keySet()) {
+				if (unkn == null)
+					unkn = (Enum<?>) item;
+				if (((S57enum) map.get(item)).atvl.equals(i))
+					return (Enum<?>) item;
+			}
+		}
+		return unkn;
+	}
+
+	public static AttVal<?> decodeValue(String val, Att att) {          // Convert S57 attribute value string to OSeaM attribute value
+		Conv conv = keys.get(att).conv;
+		switch (conv) {
 		case A:
 		case S:
-			return val;
+			return new AttVal<String>(att, conv, val);
 		case E:
+			return new AttVal<Enum<?>>(att, Conv.E, s57Enum(val, att));
 		case L:
-			return (String)(keys.get(att).map).get(val);
+			ArrayList<Enum<?>> list = new ArrayList<Enum<?>>();
+			for (String item : val.split(",")) {
+				list.add(s57Enum(item, att));
+			}
+			return new AttVal<ArrayList<?>>(att, Conv.L, list);
 		case I:
-			return (Integer.valueOf(val.trim())).toString();
+			try {
+				return new AttVal<Long>(att, Conv.I, Long.parseLong(val));
+			} catch (Exception e) {
+				break;
+			}
 		case F:
-			return (Float.valueOf(val.trim())).toString();
+			try {
+				return new AttVal<Double>(att, Conv.F, Double.parseDouble(val));
+			} catch (Exception e) {
+				break;
+			}
 		}
-		return "";
+		return null;
 	}
 
@@ -1147,21 +1185,23 @@
 			return (String)attval.val;
 		case E:
-			return (String)((EnumMap<?, ?>)attval.val).get(attval.att);
+			EnumMap<?,?> map = keys.get(attval.att).map;
+			return ((S57enum)map.get(attval.val)).val;
 		case L:
 			String str = "";
+			map = keys.get(attval.att).map;
 			for (Object item : (ArrayList<?>)attval.val) {
 				if (!str.isEmpty()) str += ";";
-				str += keys.get(attval.att).map.get(item);
+				str += ((S57enum)map.get(item)).val;
 			}
 			return str;
 		case I:
-			return ((Integer)attval.val).toString();
+			return ((Long)attval.val).toString();
 		case F:
-			return ((Float)attval.val).toString();
+			return ((Double)attval.val).toString();
 		}
 		return "";
 	}
 
-	public static Enum<?> enumValue(String val, Att att) { // Convert OSeaM attribute value string to OSeaM enumeration
+	public static Enum<?> osmEnum(String val, Att att) { // Convert OSeaM attribute value string to OSeaM enumeration
 		EnumMap<?, ?> map = keys.get(att).map;
 		Enum<?> unkn = null;
@@ -1183,15 +1223,14 @@
 			return new AttVal<String>(att, Conv.S, val);
 		case E:
-			return new AttVal<Enum<?>>(att, Conv.E, enumValue(val, att));
+			return new AttVal<Enum<?>>(att, Conv.E, osmEnum(val, att));
 		case L:
 			ArrayList<Enum<?>> list = new ArrayList<Enum<?>>();
 			for (String item : val.split(";")) {
-				list.add(enumValue(item, att));
+				list.add(osmEnum(item, att));
 			}
 			return new AttVal<ArrayList<?>>(att, Conv.L, list);
 		case I:
 			try {
-				long i = Long.parseLong(val);
-				return new AttVal<Long>(att, Conv.I, i);
+				return new AttVal<Long>(att, Conv.I, Long.parseLong(val));
 			} catch (Exception e) {
 				break;
@@ -1199,6 +1238,5 @@
 		case F:
 			try {
-				double f = Double.parseDouble(val);
-				return new AttVal<Double>(att, Conv.F, f);
+				return new AttVal<Double>(att, Conv.F, Double.parseDouble(val));
 			} catch (Exception e) {
 				break;
Index: /applications/editors/josm/plugins/smed2/src/symbols/Areas.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/symbols/Areas.java	(revision 30214)
+++ /applications/editors/josm/plugins/smed2/src/symbols/Areas.java	(revision 30215)
@@ -19,173 +19,173 @@
 	public static final Symbol Plane = new Symbol();
 	static {
-		Plane.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-60,-60,120,120)));
+		Plane.add(new Instr(Form.BBOX, new Rectangle2D.Double(-60,-60,120,120)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(40,20); p.lineTo(50,10); p.lineTo(27.0,13.3); p.lineTo(23.7,6.8); p.lineTo(40.0,5.0); p.curveTo(55,4,55,-9,40,-10);
 		p.quadTo(31,-11,30,-15); p.lineTo(-30,2); p.quadTo(-35,-12,-45,-15); p.quadTo(-56,-3,-50,15); p.lineTo(18.4,7.3); p.lineTo(21.7,14); p.lineTo(-20,20); p.closePath();
-		Plane.add(new Instr(Prim.PGON, p));
+		Plane.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol Cable = new Symbol();
 	static {
-		Cable.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-30,-60,60,60)));
-		Cable.add(new Instr(Prim.STRK, new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
-		Cable.add(new Instr(Prim.FILL, new Color(0xc480ff)));
+		Cable.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-60,60,60)));
+		Cable.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
+		Cable.add(new Instr(Form.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);
-		Cable.add(new Instr(Prim.PLIN, p));
+		Cable.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol CableDot = new Symbol();
 	static {
-		CableDot.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-30,-60,60,60)));
-		CableDot.add(new Instr(Prim.RSHP, new Ellipse2D.Double(-10,-40,20,20)));
+		CableDot.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-60,60,60)));
+		CableDot.add(new Instr(Form.RSHP, new Ellipse2D.Double(-10,-40,20,20)));
 	}
 	public static final Symbol CableDash = new Symbol();
 	static {
-		CableDash.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-30,-60,60,60)));
-		CableDash.add(new Instr(Prim.STRK, new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
-		CableDash.add(new Instr(Prim.LINE, new Line2D.Double(0,-15,0,-45)));
+		CableDash.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-60,60,60)));
+		CableDash.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
+		CableDash.add(new Instr(Form.LINE, new Line2D.Double(0,-15,0,-45)));
 	}
 	public static final Symbol CableFlash = new Symbol();
 	static {
-		CableFlash.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-30,-60,60,60)));
+		CableFlash.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-60,60,60)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-30,-25); p.lineTo(-10,-40); p.lineTo(10,-26); p.lineTo(30,-35); p.lineTo(10,-20); p.lineTo(-10,-34); p.closePath();
-		CableFlash.add(new Instr(Prim.PGON, p));
+		CableFlash.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol LaneArrow = new Symbol();
 	static {
-		LaneArrow.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-20,-240,40,240)));
-		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)));
+		LaneArrow.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20,-240,40,240)));
+		LaneArrow.add(new Instr(Form.STRK, new BasicStroke(10, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
+		LaneArrow.add(new Instr(Form.FILL, new Color(0x80c480ff, true)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(15,0); p.lineTo(15,-195); p.lineTo(40,-195);
 		p.lineTo(0,-240); p.lineTo(-40,-195); p.lineTo(-15,-195); p.lineTo(-15,0); p.closePath();
-		LaneArrow.add(new Instr(Prim.PLIN, p));
+		LaneArrow.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol LineAnchor = new Symbol();
 	static {
-		LineAnchor.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-30,-60,60,90)));
-		LineAnchor.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Harbours.Anchor, 0.5, 0, 0, null, new Delta(Handle.CC, AffineTransform.getRotateInstance(Math.toRadians(-90.0))))));
+		LineAnchor.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-60,60,90)));
+		LineAnchor.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Harbours.Anchor, 0.5, 0, 0, null, new Delta(Handle.CC, AffineTransform.getRotateInstance(Math.toRadians(-90.0))))));
 	}
 	public static final Symbol LinePlane = new Symbol();
 	static {
-		LinePlane.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-30,-60,60,90)));
-		LinePlane.add(new Instr(Prim.FILL, new Color(0xc480ff)));
-		LinePlane.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Areas.Plane, 0.5, 0, 0, null, new Delta(Handle.CC, AffineTransform.getRotateInstance(Math.toRadians(-90.0))))));
+		LinePlane.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-60,60,90)));
+		LinePlane.add(new Instr(Form.FILL, new Color(0xc480ff)));
+		LinePlane.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Areas.Plane, 0.5, 0, 0, null, new Delta(Handle.CC, AffineTransform.getRotateInstance(Math.toRadians(-90.0))))));
 	}
 	public static final Symbol MarineFarm = new Symbol();
 	static {
-		MarineFarm.add(new Instr(Prim.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		MarineFarm.add(new Instr(Form.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
 		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);
 		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);
 		p.moveTo(-21,8); p.quadTo(-1,-14,21,0); p.quadTo(-1,14,-21,-8); p.moveTo(7,6); p.quadTo(2,0,7,-6);
-		MarineFarm.add(new Instr(Prim.PLIN, p));
-		MarineFarm.add(new Instr(Prim.RSHP, new Ellipse2D.Double(9,-2,4,4)));
+		MarineFarm.add(new Instr(Form.PLIN, p));
+		MarineFarm.add(new Instr(Form.RSHP, new Ellipse2D.Double(9,-2,4,4)));
 	}
 	public static final Symbol NoWake = new Symbol();
 	static {
-		NoWake.add(new Instr(Prim.STRK, new BasicStroke(12, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoWake.add(new Instr(Prim.FILL, new Color(0xa30075)));
+		NoWake.add(new Instr(Form.STRK, new BasicStroke(12, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoWake.add(new Instr(Form.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, 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)));
+		NoWake.add(new Instr(Form.PLIN, p));
+		NoWake.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoWake.add(new Instr(Form.LINE, new Line2D.Double(-60,60,60,-60)));
+		NoWake.add(new Instr(Form.LINE, new Line2D.Double(-60,-60,60,60)));
 	}
 	public static final Symbol Pipeline = new Symbol();
 	static {
-		Pipeline.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-15,-60,30,60)));
-		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)));
-		Pipeline.add(new Instr(Prim.RSHP, new Ellipse2D.Double(-10,-60,20,20)));
+		Pipeline.add(new Instr(Form.BBOX, new Rectangle2D.Double(-15,-60,30,60)));
+		Pipeline.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		Pipeline.add(new Instr(Form.FILL, new Color(0xc480ff)));
+		Pipeline.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-50)));
+		Pipeline.add(new Instr(Form.RSHP, new Ellipse2D.Double(-10,-60,20,20)));
 	}
 	public static final Symbol Restricted = new Symbol();
 	static {
-		Restricted.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-15,-30,30,30)));
-		Restricted.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
-		Restricted.add(new Instr(Prim.LINE, new Line2D.Double(0,0,0,-30)));
-		Restricted.add(new Instr(Prim.LINE, new Line2D.Double(0,-15,17,-15)));
+		Restricted.add(new Instr(Form.BBOX, new Rectangle2D.Double(-15,-30,30,30)));
+		Restricted.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		Restricted.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-30)));
+		Restricted.add(new Instr(Form.LINE, new Line2D.Double(0,-15,17,-15)));
 	}
 	public static final Symbol Rock = new Symbol();
 	static {
-		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, 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, 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)));
+		Rock.add(new Instr(Form.FILL, new Color(0x80c0ff)));
+		Rock.add(new Instr(Form.RSHP, new Ellipse2D.Double(-30,-30,60,60)));
+		Rock.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1, new float[]{5,5}, 0)));
+		Rock.add(new Instr(Form.FILL, Color.black));
+		Rock.add(new Instr(Form.ELPS, new Ellipse2D.Double(-30,-30,60,60)));
+		Rock.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Rock.add(new Instr(Form.LINE, new Line2D.Double(-20,0,20,0)));
+		Rock.add(new Instr(Form.LINE, new Line2D.Double(0,-20,0,20)));
 	}
 	public static final Symbol RockA = new Symbol();
 	static {
-		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, 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, 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)));
-		RockA.add(new Instr(Prim.RSHP, new Ellipse2D.Double(-17,-17,8,8)));
-		RockA.add(new Instr(Prim.RSHP, new Ellipse2D.Double(-17,9,8,8)));
-		RockA.add(new Instr(Prim.RSHP, new Ellipse2D.Double(9,-17,8,8)));
-		RockA.add(new Instr(Prim.RSHP, new Ellipse2D.Double(9,9,8,8)));
+		RockA.add(new Instr(Form.FILL, new Color(0x80c0ff)));
+		RockA.add(new Instr(Form.RSHP, new Ellipse2D.Double(-30,-30,60,60)));
+		RockA.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1, new float[]{5,5}, 0)));
+		RockA.add(new Instr(Form.FILL, Color.black));
+		RockA.add(new Instr(Form.ELPS, new Ellipse2D.Double(-30,-30,60,60)));
+		RockA.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		RockA.add(new Instr(Form.LINE, new Line2D.Double(-20,0,20,0)));
+		RockA.add(new Instr(Form.LINE, new Line2D.Double(0,-20,0,20)));
+		RockA.add(new Instr(Form.RSHP, new Ellipse2D.Double(-17,-17,8,8)));
+		RockA.add(new Instr(Form.RSHP, new Ellipse2D.Double(-17,9,8,8)));
+		RockA.add(new Instr(Form.RSHP, new Ellipse2D.Double(9,-17,8,8)));
+		RockA.add(new Instr(Form.RSHP, new Ellipse2D.Double(9,9,8,8)));
 	}
 	public static final Symbol RockC = new Symbol();
 	static {
-		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, 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, 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)));
-		RockC.add(new Instr(Prim.LINE, new Line2D.Double(10,17.3,-10,-17.3)));
+		RockC.add(new Instr(Form.FILL, new Color(0x80c0ff)));
+		RockC.add(new Instr(Form.RSHP, new Ellipse2D.Double(-30,-30,60,60)));
+		RockC.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1, new float[]{5,5}, 0)));
+		RockC.add(new Instr(Form.FILL, Color.black));
+		RockC.add(new Instr(Form.ELPS, new Ellipse2D.Double(-30,-30,60,60)));
+		RockC.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		RockC.add(new Instr(Form.LINE, new Line2D.Double(-20,0,20,0)));
+		RockC.add(new Instr(Form.LINE, new Line2D.Double(-10,17.3,10,-17.3)));
+		RockC.add(new Instr(Form.LINE, new Line2D.Double(10,17.3,-10,-17.3)));
 	}
 	public static final Symbol Seaplane = new Symbol();
 	static {
-		Seaplane.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-60,-60,120,120)));
-		Seaplane.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		Seaplane.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-58,-58,116,116)));
-		Seaplane.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Areas.Plane, 1.0, 0, 0, null, null)));
+		Seaplane.add(new Instr(Form.BBOX, new Rectangle2D.Double(-60,-60,120,120)));
+		Seaplane.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Seaplane.add(new Instr(Form.ELPS, new Ellipse2D.Double(-58,-58,116,116)));
+		Seaplane.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Areas.Plane, 1.0, 0, 0, null, null)));
 	}
 	public static final Symbol WindFarm = new Symbol();
 	static {
-		WindFarm.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		WindFarm.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-100,-100,200,200)));
-		WindFarm.add(new Instr(Prim.LINE, new Line2D.Double(-35,50,35,50)));
-		WindFarm.add(new Instr(Prim.LINE, new Line2D.Double(0,50,0,-27.5)));
-		WindFarm.add(new Instr(Prim.LINE, new Line2D.Double(0,-27.5,30,-27.5)));
-		WindFarm.add(new Instr(Prim.LINE, new Line2D.Double(0,-27.5,-13.8,-3.8)));
-		WindFarm.add(new Instr(Prim.LINE, new Line2D.Double(0,-27.5,-13.8,-53.6)));
+		WindFarm.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		WindFarm.add(new Instr(Form.ELPS, new Ellipse2D.Double(-100,-100,200,200)));
+		WindFarm.add(new Instr(Form.LINE, new Line2D.Double(-35,50,35,50)));
+		WindFarm.add(new Instr(Form.LINE, new Line2D.Double(0,50,0,-27.5)));
+		WindFarm.add(new Instr(Form.LINE, new Line2D.Double(0,-27.5,30,-27.5)));
+		WindFarm.add(new Instr(Form.LINE, new Line2D.Double(0,-27.5,-13.8,-3.8)));
+		WindFarm.add(new Instr(Form.LINE, new Line2D.Double(0,-27.5,-13.8,-53.6)));
 	}
 	public static final Symbol WreckD = new Symbol();
 	static {
-		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, 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, 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)));
-		WreckD.add(new Instr(Prim.LINE, new Line2D.Double(-20,-15,-20,15)));
-		WreckD.add(new Instr(Prim.LINE, new Line2D.Double(20,-15,20,15)));
+		WreckD.add(new Instr(Form.FILL, new Color(0x80c0ff)));
+		WreckD.add(new Instr(Form.RSHP, new Ellipse2D.Double(-50,-40,100,80)));
+		WreckD.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1, new float[]{5,5}, 0)));
+		WreckD.add(new Instr(Form.FILL, Color.black));
+		WreckD.add(new Instr(Form.ELPS, new Ellipse2D.Double(-50,-40,100,80)));
+		WreckD.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		WreckD.add(new Instr(Form.LINE, new Line2D.Double(-40,0,40,0)));
+		WreckD.add(new Instr(Form.LINE, new Line2D.Double(0,-30,0,30)));
+		WreckD.add(new Instr(Form.LINE, new Line2D.Double(-20,-15,-20,15)));
+		WreckD.add(new Instr(Form.LINE, new Line2D.Double(20,-15,20,15)));
 	}
 	public static final Symbol WreckND = new Symbol();
 	static {
-		WreckND.add(new Instr(Prim.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		WreckND.add(new Instr(Prim.LINE, new Line2D.Double(-40,0,40,0)));
-		WreckND.add(new Instr(Prim.LINE, new Line2D.Double(0,-30,0,30)));
-		WreckND.add(new Instr(Prim.LINE, new Line2D.Double(-20,-15,-20,15)));
-		WreckND.add(new Instr(Prim.LINE, new Line2D.Double(20,-15,20,15)));
+		WreckND.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		WreckND.add(new Instr(Form.LINE, new Line2D.Double(-40,0,40,0)));
+		WreckND.add(new Instr(Form.LINE, new Line2D.Double(0,-30,0,30)));
+		WreckND.add(new Instr(Form.LINE, new Line2D.Double(-20,-15,-20,15)));
+		WreckND.add(new Instr(Form.LINE, new Line2D.Double(20,-15,20,15)));
 	}
 	public static final Symbol WreckS = new Symbol();
 	static {
-		WreckS.add(new Instr(Prim.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		WreckS.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-6,-6,12,12)));
-		WreckS.add(new Instr(Prim.LINE, new Line2D.Double(-40,0,-6,0)));
-		WreckS.add(new Instr(Prim.LINE, new Line2D.Double(40,0,6,0)));
+		WreckS.add(new Instr(Form.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		WreckS.add(new Instr(Form.ELPS, new Ellipse2D.Double(-6,-6,12,12)));
+		WreckS.add(new Instr(Form.LINE, new Line2D.Double(-40,0,-6,0)));
+		WreckS.add(new Instr(Form.LINE, new Line2D.Double(40,0,6,0)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-30,0); p.lineTo(-40,-25); p.lineTo(-0.3,-12.6); p.lineTo(13.7,-37.7); p.lineTo(16.3,-36.3);
 		p.lineTo(2.7,-11.6); p.lineTo(37.5,0); p.lineTo(6,0); p.curveTo(5.6,-8,-5.6,-8,-6,0); p.closePath();
-		WreckS.add(new Instr(Prim.PGON, p));
+		WreckS.add(new Instr(Form.PGON, p));
 	}
 	public static final BufferedImage Sandwaves = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
Index: /applications/editors/josm/plugins/smed2/src/symbols/Beacons.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/symbols/Beacons.java	(revision 30214)
+++ /applications/editors/josm/plugins/smed2/src/symbols/Beacons.java	(revision 30215)
@@ -25,113 +25,113 @@
 		Symbol colours = new Symbol();
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-6.0,-8.5); p.lineTo(-6.0,-70.0); p.lineTo(6.0,-70.0); p.lineTo(6.0,-8.5); p.curveTo(6.0,-10.0,-6.0,-10.0,-6.0,-8.5); p.closePath();
-		colours.add(new Instr(Prim.P1, p));
+		colours.add(new Instr(Form.P1, p));
 		p = new Path2D.Double(); p.moveTo(-6.0,-8.5); p.lineTo(-6.0,-40.0); p.lineTo(6.0,-40.0); p.lineTo(6.0,-8.5); p.curveTo(6.0,-10.0,-6.0,-10.0,-6.0,-8.5); p.closePath();
-    colours.add(new Instr(Prim.H2, p));
+    colours.add(new Instr(Form.H2, p));
 		p = new Path2D.Double(); p.moveTo(-6.0,-30.0); p.lineTo(-6.0,-50.0); p.lineTo(6.0,-50.0); p.lineTo(6.0,-30.0); p.closePath();
-    colours.add(new Instr(Prim.H3, p));
+    colours.add(new Instr(Form.H3, p));
 		p = new Path2D.Double(); p.moveTo(-6.0,-40.0); p.lineTo(-6.0,-55.0); p.lineTo(6.0,-55.0); p.lineTo(6.0,-40.0); p.closePath();
-    colours.add(new Instr(Prim.H4, p));
+    colours.add(new Instr(Form.H4, p));
 		p = new Path2D.Double(); p.moveTo(-6.0,-25.0); p.lineTo(-6.0,-40.0); p.lineTo(6.0,-40.0); p.lineTo(6.0,-25.0); p.closePath();
-    colours.add(new Instr(Prim.H5, p));
+    colours.add(new Instr(Form.H5, p));
 		p = new Path2D.Double(); p.moveTo(0.0,-70.0); p.lineTo(6.0,-70.0); p.lineTo(6.0,-8.5); p.quadTo(3.0,-9.3,0.0,-10.0); p.closePath();
-    colours.add(new Instr(Prim.V2, p));
-    Beacon.add(new Instr(Prim.COLR, colours));
-    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)));
-    Beacon.add(new Instr(Prim.LINE, new Line2D.Double(-20,0,-10,0)));
-    Beacon.add(new Instr(Prim.LINE, new Line2D.Double(10,0,20,0)));
+    colours.add(new Instr(Form.V2, p));
+    Beacon.add(new Instr(Form.COLR, colours));
+    Beacon.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+    Beacon.add(new Instr(Form.FILL, Color.black));
+    Beacon.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
+    Beacon.add(new Instr(Form.LINE, new Line2D.Double(-20,0,-10,0)));
+    Beacon.add(new Instr(Form.LINE, new Line2D.Double(10,0,20,0)));
 		p = new Path2D.Double(); p.moveTo(-6.0,-8.5); p.lineTo(-6.0,-70.0); p.lineTo(6.0,-70.0); p.lineTo(6.0,-8.5);
-		Beacon.add(new Instr(Prim.PLIN, p));
+		Beacon.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol Cairn = new Symbol();
 	static {
-		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)));
-		Cairn.add(new Instr(Prim.LINE, new Line2D.Double(-40,0,-10,0)));
-		Cairn.add(new Instr(Prim.LINE, new Line2D.Double(10,0,40,0)));
-		Cairn.add(new Instr(Prim.ELPS, new Ellipse2D.Double(3,-40,40,40)));
-		Cairn.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-43,-40,40,40)));
-		Cairn.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-18,-70,36,36)));
+		Cairn.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		Cairn.add(new Instr(Form.FILL, Color.black));
+		Cairn.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
+		Cairn.add(new Instr(Form.LINE, new Line2D.Double(-40,0,-10,0)));
+		Cairn.add(new Instr(Form.LINE, new Line2D.Double(10,0,40,0)));
+		Cairn.add(new Instr(Form.ELPS, new Ellipse2D.Double(3,-40,40,40)));
+		Cairn.add(new Instr(Form.ELPS, new Ellipse2D.Double(-43,-40,40,40)));
+		Cairn.add(new Instr(Form.ELPS, new Ellipse2D.Double(-18,-70,36,36)));
 	}
 	public static final Symbol FogSignal = new Symbol();
 	static {
-		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, 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)));
-		FogSignal.add(new Instr(Prim.EARC, new Arc2D.Double(-92.5,-92.5,185.0,185.0,190.0,50.0,Arc2D.OPEN)));
-		FogSignal.add(new Instr(Prim.EARC, new Arc2D.Double(-65.0,-65.0,130.0,130.0,190.0,50.0,Arc2D.OPEN)));
+		FogSignal.add(new Instr(Form.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		FogSignal.add(new Instr(Form.FILL, Color.black));
+		FogSignal.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
+		FogSignal.add(new Instr(Form.STRK, new BasicStroke(10, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		FogSignal.add(new Instr(Form.FILL, new Color(0xd400d4)));
+		FogSignal.add(new Instr(Form.EARC, new Arc2D.Double(-120.0,-120.0,240.0,240.0,190.0,50.0,Arc2D.OPEN)));
+		FogSignal.add(new Instr(Form.EARC, new Arc2D.Double(-92.5,-92.5,185.0,185.0,190.0,50.0,Arc2D.OPEN)));
+		FogSignal.add(new Instr(Form.EARC, new Arc2D.Double(-65.0,-65.0,130.0,130.0,190.0,50.0,Arc2D.OPEN)));
 	}
 	public static final Symbol LightFlare = new Symbol();
 	static {
-		LightFlare.add(new Instr(Prim.RSHP, new Ellipse2D.Double(-3,-3,6,6)));
+		LightFlare.add(new Instr(Form.RSHP, new Ellipse2D.Double(-3,-3,6,6)));
 		Path2D.Double p = new Path2D.Double();
 		p.moveTo(0.0,-25.0); p.lineTo(15.0,-95.0); p.curveTo(20.0,-123.0,-20.0,-123.0,-15.0,-95.0);
 		p.closePath();
-		LightFlare.add(new Instr(Prim.PGON, p));
+		LightFlare.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol LightMajor = new Symbol();
 	static {
-		LightMajor.add(new Instr(Prim.FILL, Color.black));
+		LightMajor.add(new Instr(Form.FILL, Color.black));
 		Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_NON_ZERO);
 		p.moveTo(0.0,-7.0); p.curveTo(-9.3,-6.5,-9.3,6.5,0.0,7.0); p.curveTo(9.3,6.5,9.3,-6.5,0.0,-7.0); p.closePath();
 		p.moveTo(0.0,-35.5); p.lineTo(8.0,-11.2); p.lineTo(33.5,-11.2); p.lineTo(12.8,4.0);
 		p.lineTo(20.5,28.5); p.lineTo(0.0,13.0); p.lineTo(-20.5,28.5); p.lineTo(-12.8,4.0); p.lineTo(-33.5,-11.2); p.lineTo(-8.0,-11.2); p.closePath();
-		LightMajor.add(new Instr(Prim.PGON, p));
+		LightMajor.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol LightMinor = new Symbol();
 	static {
-		LightMinor.add(new Instr(Prim.FILL, Color.black));
+		LightMinor.add(new Instr(Form.FILL, Color.black));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(0.0,-26.5); p.lineTo(6.0,-8.4); p.lineTo(25.1,-8.4); p.lineTo(9.6,3.0);
 		p.lineTo(15.4,21.4); p.lineTo(0.0,9.8); p.lineTo(-15.4,21.4); p.lineTo(-9.6,3.0); p.lineTo(-25.1,-8.4); p.lineTo(-6.0,-8.4); p.closePath();
-		LightMinor.add(new Instr(Prim.PGON, p));
+		LightMinor.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol PerchPort = new Symbol();
 	static {
-		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)));
-		PerchPort.add(new Instr(Prim.LINE, new Line2D.Double(0,0,0,-40)));
-		PerchPort.add(new Instr(Prim.LINE, new Line2D.Double(25,-70,0,-40)));
-		PerchPort.add(new Instr(Prim.LINE, new Line2D.Double(-25,-70,0,-40)));
+		PerchPort.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		PerchPort.add(new Instr(Form.FILL, Color.black));
+		PerchPort.add(new Instr(Form.LINE, new Line2D.Double(-10,0,10,0)));
+		PerchPort.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-40)));
+		PerchPort.add(new Instr(Form.LINE, new Line2D.Double(25,-70,0,-40)));
+		PerchPort.add(new Instr(Form.LINE, new Line2D.Double(-25,-70,0,-40)));
 	}
 	public static final Symbol PerchStarboard = new Symbol();
 	static {
-		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)));
-		PerchStarboard.add(new Instr(Prim.LINE, new Line2D.Double(0,0,0,-70)));
-		PerchStarboard.add(new Instr(Prim.LINE, new Line2D.Double(25,-40,0,-68.7)));
-		PerchStarboard.add(new Instr(Prim.LINE, new Line2D.Double(-25,-40,0,-68.7)));
+		PerchStarboard.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		PerchStarboard.add(new Instr(Form.FILL, Color.black));
+		PerchStarboard.add(new Instr(Form.LINE, new Line2D.Double(-10,0,10,0)));
+		PerchStarboard.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-70)));
+		PerchStarboard.add(new Instr(Form.LINE, new Line2D.Double(25,-40,0,-68.7)));
+		PerchStarboard.add(new Instr(Form.LINE, new Line2D.Double(-25,-40,0,-68.7)));
 	}
 	public static final Symbol RadarStation = new Symbol();
 	static {
-		RadarStation.add(new Instr(Prim.STRK, new BasicStroke(2.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
-		RadarStation.add(new Instr(Prim.FILL, new Color(0xd400d4)));
-		RadarStation.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-125,-125,250,250)));
+		RadarStation.add(new Instr(Form.STRK, new BasicStroke(2.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		RadarStation.add(new Instr(Form.FILL, new Color(0xd400d4)));
+		RadarStation.add(new Instr(Form.ELPS, new Ellipse2D.Double(-125,-125,250,250)));
 	}
 	public static final Symbol Stake = new Symbol();
 	static {
-		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)));
+		Stake.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		Stake.add(new Instr(Form.FILL, Color.black));
+		Stake.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-70)));
 		Symbol colours = new Symbol();
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-2.0,0.0); p.lineTo(-2.0,-70.0); p.lineTo(2.0,-70.0); p.lineTo(2.0,0.0); p.closePath();
-		colours.add(new Instr(Prim.P1, p));
+		colours.add(new Instr(Form.P1, p));
 		p = new Path2D.Double(); p.moveTo(-2.0,0.0); p.lineTo(-2.0,-35.0); p.lineTo(2.0,-35.0); p.lineTo(2.0,0.0); p.closePath();
-		colours.add(new Instr(Prim.H2, p));
+		colours.add(new Instr(Form.H2, p));
 		p = new Path2D.Double(); p.moveTo(-2.0,-23.3); p.lineTo(-2.0,-46.7); p.lineTo(2.0,-46.7); p.lineTo(2.0,-23.3); p.closePath();
-		colours.add(new Instr(Prim.H3, p));
+		colours.add(new Instr(Form.H3, p));
 		p = new Path2D.Double(); p.moveTo(-2.0,-35.0); p.lineTo(-2.0,-52.5); p.lineTo(2.0,-52.5); p.lineTo(2.0,-35.0); p.closePath();
-		colours.add(new Instr(Prim.H4, p));
+		colours.add(new Instr(Form.H4, p));
 		p = new Path2D.Double(); p.moveTo(-2.0,-17.5); p.lineTo(-2.0,-35.0); p.lineTo(2.0,-35.0); p.lineTo(2.0,-17.5); p.closePath();
-		colours.add(new Instr(Prim.H5, p));
-		Stake.add(new Instr(Prim.COLR, colours));
-		Stake.add(new Instr(Prim.FILL, Color.black));
-		Stake.add(new Instr(Prim.LINE, new Line2D.Double(-10,0,10,0)));
+		colours.add(new Instr(Form.H5, p));
+		Stake.add(new Instr(Form.COLR, colours));
+		Stake.add(new Instr(Form.FILL, Color.black));
+		Stake.add(new Instr(Form.LINE, new Line2D.Double(-10,0,10,0)));
 	}
 	public static final Symbol Tower = new Symbol();
@@ -139,45 +139,45 @@
 		Symbol colours = new Symbol();
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-25.0,0.0); p.lineTo(-20.0,-70.0); p.lineTo(20.0,-70.0); p.lineTo(25.0,0.0); p.lineTo(10.0,0.0); p.curveTo(10.0,-13.3,-10.0,-13.3,-10.0,0.0); p.closePath();
-		colours.add(new Instr(Prim.P1, p));
+		colours.add(new Instr(Form.P1, p));
 		p = new Path2D.Double(); p.moveTo(-25.0,0.0); p.lineTo(-22.5,-35.0); p.lineTo(22.5,-35.0); p.lineTo(25.0,0.0); p.lineTo(10.0,0.0); p.curveTo(10.0,-13.3,-10.0,-13.3,-10.0,0.0); p.closePath();
-    colours.add(new Instr(Prim.H2, p));
+    colours.add(new Instr(Form.H2, p));
 		p = new Path2D.Double(); p.moveTo(-23.3,-23.3); p.lineTo(-21.7,-46.7); p.lineTo(21.7,-46.7); p.lineTo(23.3,-23.3); p.closePath();
-    colours.add(new Instr(Prim.H3, p));
+    colours.add(new Instr(Form.H3, p));
 		p = new Path2D.Double(); p.moveTo(-22.5,-35.0); p.lineTo(-21.0,-52.5); p.lineTo(21.0,-52.5); p.lineTo(22.5,-35.0); p.closePath();
-    colours.add(new Instr(Prim.H4, p));
+    colours.add(new Instr(Form.H4, p));
 		p = new Path2D.Double(); p.moveTo(-23.6,-17.5); p.lineTo(-22.5,-35.0); p.lineTo(22.5,-35.0); p.lineTo(23.6,-17.5); p.closePath();
-    colours.add(new Instr(Prim.H5, p));
+    colours.add(new Instr(Form.H5, p));
 		p = new Path2D.Double(); p.moveTo(0.0,-70.0); p.lineTo(20.0,-70.0); p.lineTo(25.0,0.0); p.lineTo(10.0,0.0); p.quadTo(10.0,-10.0,0.0,-10.0); p.closePath();
-    colours.add(new Instr(Prim.V2, p));
-    Tower.add(new Instr(Prim.COLR, colours));
-    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)));
-    Tower.add(new Instr(Prim.LINE, new Line2D.Double(-35,0,-10,0)));
-    Tower.add(new Instr(Prim.LINE, new Line2D.Double(10,0,35,0)));
+    colours.add(new Instr(Form.V2, p));
+    Tower.add(new Instr(Form.COLR, colours));
+    Tower.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+    Tower.add(new Instr(Form.FILL, Color.black));
+    Tower.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
+    Tower.add(new Instr(Form.LINE, new Line2D.Double(-35,0,-10,0)));
+    Tower.add(new Instr(Form.LINE, new Line2D.Double(10,0,35,0)));
 		p = new Path2D.Double(); p.moveTo(-25.0,0.0); p.lineTo(-20.0,-70.0); p.lineTo(20.0,-70.0); p.lineTo(25.0,0.0);
-		Tower.add(new Instr(Prim.PLIN, p));
+		Tower.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol WithyPort = new Symbol();
 	static {
-		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)));
-		WithyPort.add(new Instr(Prim.LINE, new Line2D.Double(0,0,0,-70)));
-		WithyPort.add(new Instr(Prim.LINE, new Line2D.Double(20,-60,0,-50)));
-		WithyPort.add(new Instr(Prim.LINE, new Line2D.Double(-20,-60,0,-50)));
-		WithyPort.add(new Instr(Prim.LINE, new Line2D.Double(30,-35,0,-21)));
-		WithyPort.add(new Instr(Prim.LINE, new Line2D.Double(-30,-35,0,-21)));
+		WithyPort.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		WithyPort.add(new Instr(Form.FILL, Color.black));
+		WithyPort.add(new Instr(Form.LINE, new Line2D.Double(-10,0,10,0)));
+		WithyPort.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-70)));
+		WithyPort.add(new Instr(Form.LINE, new Line2D.Double(20,-60,0,-50)));
+		WithyPort.add(new Instr(Form.LINE, new Line2D.Double(-20,-60,0,-50)));
+		WithyPort.add(new Instr(Form.LINE, new Line2D.Double(30,-35,0,-21)));
+		WithyPort.add(new Instr(Form.LINE, new Line2D.Double(-30,-35,0,-21)));
 	}
 	public static final Symbol WithyStarboard = new Symbol();
 	static {
-		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)));
-		WithyStarboard.add(new Instr(Prim.LINE, new Line2D.Double(0,0,0,-70)));
-		WithyStarboard.add(new Instr(Prim.LINE, new Line2D.Double(20,-50,0,-60)));
-		WithyStarboard.add(new Instr(Prim.LINE, new Line2D.Double(-20,-50,0,-60)));
-		WithyStarboard.add(new Instr(Prim.LINE, new Line2D.Double(30,-21,0,-35)));
-		WithyStarboard.add(new Instr(Prim.LINE, new Line2D.Double(-30,-21,0,-35)));
+		WithyStarboard.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		WithyStarboard.add(new Instr(Form.FILL, Color.black));
+		WithyStarboard.add(new Instr(Form.LINE, new Line2D.Double(-10,0,10,0)));
+		WithyStarboard.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-70)));
+		WithyStarboard.add(new Instr(Form.LINE, new Line2D.Double(20,-50,0,-60)));
+		WithyStarboard.add(new Instr(Form.LINE, new Line2D.Double(-20,-50,0,-60)));
+		WithyStarboard.add(new Instr(Form.LINE, new Line2D.Double(30,-21,0,-35)));
+		WithyStarboard.add(new Instr(Form.LINE, new Line2D.Double(-30,-21,0,-35)));
 	}
 	
Index: /applications/editors/josm/plugins/smed2/src/symbols/Buoys.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/symbols/Buoys.java	(revision 30214)
+++ /applications/editors/josm/plugins/smed2/src/symbols/Buoys.java	(revision 30215)
@@ -26,14 +26,14 @@
 		p.curveTo(-18.0,-40.0,12.0,-40.0,25.0,-36.0); p.curveTo(38.0,-32.0,43.0,-11.0,43.0,0);
 		p.lineTo(8.0, 0.0); p.curveTo(8.0,-11.0,-8.0,-11.0,-8.0,0.0); p.closePath();
-		colours.add(new Instr(Prim.P1, p));
-		Barrel.add(new Instr(Prim.COLR, colours));
-    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)));
-		Barrel.add(new Instr(Prim.LINE, new Line2D.Double(-57,0,-10,0)));
-		Barrel.add(new Instr(Prim.LINE, new Line2D.Double(10,0,50,0)));
+		colours.add(new Instr(Form.P1, p));
+		Barrel.add(new Instr(Form.COLR, colours));
+    Barrel.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		Barrel.add(new Instr(Form.FILL, Color.black));
+		Barrel.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
+		Barrel.add(new Instr(Form.LINE, new Line2D.Double(-57,0,-10,0)));
+		Barrel.add(new Instr(Form.LINE, new Line2D.Double(10,0,50,0)));
 		p = new Path2D.Double(); p.moveTo(-50.0,0); p.curveTo(-50.0,-11.0,-45.0,-32.0,-32.0,-36.0); p.curveTo(-18.0,-40.0,12.0,-40.0,25.0,-36.0);
 		p.curveTo(38.0,-32.0,43.0,-11.0,43.0,0); p.moveTo(-32.0,-36.0); p.curveTo(-23.0,-25.0,-21.0,-12.0,-21.0,0.0);
-    Barrel.add(new Instr(Prim.PLIN, p));
+    Barrel.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol Can = new Symbol();
@@ -42,24 +42,24 @@
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-31.6, 0); p.lineTo(-15.7,-47.4); p.lineTo(41.1,-28.4); p.lineTo(31.6,0);
 		p.lineTo(8.0, 0.0); p.curveTo(8.0,-11.0,-8.0,-11.0,-8.0,0.0); p.closePath();
-		colours.add(new Instr(Prim.P1, p));
+		colours.add(new Instr(Form.P1, p));
 		p = new Path2D.Double(); p.moveTo(-31.6,0); p.lineTo(-22.0,-28.4); p.lineTo(34.8,-9.4); p.lineTo(31.6,0);
 		p.lineTo(8.0,0.0); p.curveTo(8.0,-11.0,-8.0,-11.0,-8.0,0.0); p.closePath();
-    colours.add(new Instr(Prim.H2, p));
+    colours.add(new Instr(Form.H2, p));
 		p = new Path2D.Double(); p.moveTo(-24.2,-22.1); p.lineTo(-19.9,-34.8); p.lineTo(36.9,-15.8); p.lineTo(32.6,-3.1);	p.closePath();
-    colours.add(new Instr(Prim.H3, p));
+    colours.add(new Instr(Form.H3, p));
 		p = new Path2D.Double(); p.moveTo(-22.0,-28.4); p.lineTo(-18.9,-37.9); p.lineTo(37.9,-18.9); p.lineTo(34.8,-9.4);	p.closePath();
-    colours.add(new Instr(Prim.H4, p));
+    colours.add(new Instr(Form.H4, p));
 		p = new Path2D.Double(); p.moveTo(-25.2,-19.0); p.lineTo(-22.0,-28.4); p.lineTo(34.8,-9.4); p.lineTo(31.6,0.0);	p.closePath();
-    colours.add(new Instr(Prim.H5, p));
+    colours.add(new Instr(Form.H5, p));
 		p = new Path2D.Double(); p.moveTo(12.7,-37.9); p.lineTo(41.1,-28.4); p.lineTo(31.6,0);	p.lineTo(8.0,0.0); p.quadTo(8.0,-6.0,2.5,-7.6); p.closePath();
-    colours.add(new Instr(Prim.V2, p));
-		Can.add(new Instr(Prim.COLR, colours));
-    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)));
-		Can.add(new Instr(Prim.LINE, new Line2D.Double(-40,0,-10,0)));
-		Can.add(new Instr(Prim.LINE, new Line2D.Double(10,0,40,0)));
+    colours.add(new Instr(Form.V2, p));
+		Can.add(new Instr(Form.COLR, colours));
+    Can.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		Can.add(new Instr(Form.FILL, Color.black));
+		Can.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
+		Can.add(new Instr(Form.LINE, new Line2D.Double(-40,0,-10,0)));
+		Can.add(new Instr(Form.LINE, new Line2D.Double(10,0,40,0)));
 		p = new Path2D.Double(); p.moveTo(-31.6, 0); p.lineTo(-15.7,-47.4); p.lineTo(41.1,-28.4); p.lineTo(31.6,0);
-    Can.add(new Instr(Prim.PLIN, p));
+    Can.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol Cone = new Symbol();
@@ -68,24 +68,24 @@
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-31.6,0); p.curveTo(-24.9,-32.2, 1.4,-38.7,12.7,-37.9); p.curveTo(21.9,-30.5,32.8,-18.4,32.1,0.0);
 		p.lineTo(8.0,0.0); p.curveTo(8.0,-11.0,-8.0,-11.0,-8.0,0.0); p.closePath();
-		colours.add(new Instr(Prim.P1, p));
+		colours.add(new Instr(Form.P1, p));
 		p = new Path2D.Double(); p.moveTo(-31.6,0); p.quadTo(-29.0,-15.5,-17.3,-26.9); p.lineTo(31.5,-10.5); p.quadTo(33.0,-5.0,32.1,0.0);
 		p.lineTo(8.0,0.0); p.curveTo(8.0, -11.0, -8.0, -11.0, -8.0, 0.0); p.closePath();
-    colours.add(new Instr(Prim.H2, p));
+    colours.add(new Instr(Form.H2, p));
 		p = new Path2D.Double(); p.moveTo(-22.3,-21.4); p.quadTo(-15.2,-29.8,-10.8,-31.8); p.lineTo(28.8,-18.5); p.quadTo(31.8,-12.5,32.6,-3.1); p.closePath();
-    colours.add(new Instr(Prim.H3, p));
+    colours.add(new Instr(Form.H3, p));
 		p = new Path2D.Double(); p.moveTo(-17.3,-27.0); p.quadTo(-13.0,-31.4,-6.9,-33.8); p.lineTo(26.4,-22.7); p.quadTo(30.0,-17.0,31.7,-10.3); p.closePath();
-    colours.add(new Instr(Prim.H4, p));
+    colours.add(new Instr(Form.H4, p));
 		p = new Path2D.Double(); p.moveTo(-24.4,-18.7); p.quadTo(-20.3,-25.0,-17.3,-27.0); p.lineTo(31.7,-10.3); p.quadTo(32.7,-4.5,32.1,0.0); p.closePath();
-    colours.add(new Instr(Prim.H5, p));
+    colours.add(new Instr(Form.H5, p));
 		p = new Path2D.Double(); p.moveTo(12.7,-37.9); p.curveTo(21.9,-30.5,32.8,-18.4,32.1,0.0);	p.lineTo(8.0,0.0); p.quadTo(8.0,-6.0,2.5,-7.6); p.closePath();
-    colours.add(new Instr(Prim.V2, p));
-		Cone.add(new Instr(Prim.COLR, colours));
-    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)));
-		Cone.add(new Instr(Prim.LINE, new Line2D.Double(-40,0,-10,0)));
-		Cone.add(new Instr(Prim.LINE, new Line2D.Double(10,0,40,0)));
+    colours.add(new Instr(Form.V2, p));
+		Cone.add(new Instr(Form.COLR, colours));
+    Cone.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		Cone.add(new Instr(Form.FILL, Color.black));
+		Cone.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
+		Cone.add(new Instr(Form.LINE, new Line2D.Double(-40,0,-10,0)));
+		Cone.add(new Instr(Form.LINE, new Line2D.Double(10,0,40,0)));
 		p = new Path2D.Double(); p.moveTo(-31.6, 0); p.curveTo(-24.9,-32.2,1.4,-38.7,12.7,-37.9); p.curveTo(21.9,-30.5,32.8,-18.4,32.1,0.0);
-    Cone.add(new Instr(Prim.PLIN, p));
+    Cone.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol Float = new Symbol();
@@ -95,28 +95,28 @@
 		p.lineTo(-12.0,-42.0); p.lineTo(12.0,-42.0); p.lineTo(19.0,-23.0); p.quadTo(30.0,-25.0,47.0,-33.0); p.lineTo(36.0,0);
 		p.lineTo(8.0, 0.0); p.curveTo(8.0,-11.0,-8.0,-11.0,-8.0,0.0); p.closePath();
-		colours.add(new Instr(Prim.P1, p));
+		colours.add(new Instr(Form.P1, p));
 		p = new Path2D.Double(); p.moveTo(-36.0,0); p.lineTo(-43.0,-21.0); p.lineTo(43.0,-21.0); p.lineTo(36.0,0);
 		p.lineTo(8.0,0.0); p.curveTo(8.0,-11.0,-8.0,-11.0,-8.0,0.0); p.closePath();
-    colours.add(new Instr(Prim.H2, p));
+    colours.add(new Instr(Form.H2, p));
 		p = new Path2D.Double(); p.moveTo(-40.8,-14.0); p.lineTo(-45.4,-28.0); p.lineTo(-35.5,-28.0); p.quadTo(-28.0,-25.0,-19.0,-23.0); p.lineTo(-17.2,-28.0);
 		p.lineTo(17.2,-28.0); p.lineTo(19.0,-23.0); p.quadTo(28.0,-25.0,35.5,-28.0); p.lineTo(45.4,-28.0); p.lineTo(40.8,-14.0); p.closePath();
-    colours.add(new Instr(Prim.H3, p));
+    colours.add(new Instr(Form.H3, p));
 		p = new Path2D.Double(); p.moveTo(-43.0,-21.0); p.lineTo(-47.0,-33.0); p.quadTo(-29.7,-24.8,-19.0,-23.0); p.lineTo(-15.8,-31.5); p.lineTo(15.8,-31.5);
 		p.lineTo(19.0,-23.0); p.quadTo(28.4,-24.3,47.0,-33.0); p.lineTo(43.0,-21.0);	p.closePath();
-    colours.add(new Instr(Prim.H4, p));
+    colours.add(new Instr(Form.H4, p));
 		p = new Path2D.Double(); p.moveTo(-39.8,-11.5); p.lineTo(-43.0,-21.0); p.lineTo(43.0,-21.0); p.lineTo(39.8,-11.5);	p.closePath();
-    colours.add(new Instr(Prim.H5, p));
+    colours.add(new Instr(Form.H5, p));
 		p = new Path2D.Double(); p.moveTo(0.0,-42.0); p.lineTo(12.0,-42.0); p.lineTo(19.0,-23.0); p.quadTo(28.4,-24.3,47.0,-33.0); p.lineTo(36.0,0.0);
 		p.lineTo(8.0,0.0); p.quadTo(7.7,-7.7,0.0,-8.0); p.closePath();
-    colours.add(new Instr(Prim.V2, p));
-		Float.add(new Instr(Prim.COLR, colours));
-    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)));
-		Float.add(new Instr(Prim.LINE, new Line2D.Double(-54,0,-10,0)));
-		Float.add(new Instr(Prim.LINE, new Line2D.Double(10,0,54,0)));
+    colours.add(new Instr(Form.V2, p));
+		Float.add(new Instr(Form.COLR, colours));
+    Float.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		Float.add(new Instr(Form.FILL, Color.black));
+		Float.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
+		Float.add(new Instr(Form.LINE, new Line2D.Double(-54,0,-10,0)));
+		Float.add(new Instr(Form.LINE, new Line2D.Double(10,0,54,0)));
 		p = new Path2D.Double(); p.moveTo(-36.0,0); p.lineTo(-47.0,-33.0); p.curveTo(-15.0, -17.0, 15.0, -17.0, 47.0,-33.0); p.lineTo(36.0,0);
 		p.moveTo(-19.0, -23.0); p.lineTo(-12.0,-42.0); p.lineTo(12.0,-42.0); p.lineTo(19.0,-23.0);
-    Float.add(new Instr(Prim.PLIN, p));
+    Float.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol Ice = new Symbol();
@@ -125,15 +125,15 @@
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-15.0,0); p.quadTo(-30.0,0.0,-30.0,-15.0); p.lineTo(-30.0,-25.0); p.lineTo(30.0,-25.0); p.lineTo(30.0,-15); p.quadTo(30.0,0.0,15.0,0.0);
 		p.lineTo(8.0, 0.0); p.curveTo(8.0,-11.0,-8.0,-11.0,-8.0,0.0); p.closePath();
-		colours.add(new Instr(Prim.P1, p));
-    Ice.add(new Instr(Prim.COLR, colours));
-    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)));
-    Ice.add(new Instr(Prim.LINE, new Line2D.Double(-35,0,-10,0)));
-    Ice.add(new Instr(Prim.LINE, new Line2D.Double(10,0,35,0)));
+		colours.add(new Instr(Form.P1, p));
+    Ice.add(new Instr(Form.COLR, colours));
+    Ice.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+    Ice.add(new Instr(Form.FILL, Color.black));
+    Ice.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
+    Ice.add(new Instr(Form.LINE, new Line2D.Double(-35,0,-10,0)));
+    Ice.add(new Instr(Form.LINE, new Line2D.Double(10,0,35,0)));
 		p = new Path2D.Double(); p.moveTo(-15.0,0); p.quadTo(-30.0,0.0,-30.0,-15.0); p.lineTo(-30.0,-25.0); p.lineTo(30.0,-25.0); p.lineTo(30.0,-15); p.quadTo(30.0,0.0,15.0,0.0);
-		Ice.add(new Instr(Prim.PLIN, p));
+		Ice.add(new Instr(Form.PLIN, p));
 		p = new Path2D.Double(); p.moveTo(-6.0,8.0); p.lineTo(-6.0,40.0); p.lineTo(6.0,40.0); p.lineTo(6.0,8.0);
-		Ice.add(new Instr(Prim.PLIN, p));
+		Ice.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol Pillar = new Symbol();
@@ -142,25 +142,25 @@
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-32.0,0.0); p.lineTo(-2.8,-32.5); p.lineTo(25.6,-96.7); p.lineTo(37.0,-92.9); p.lineTo(21.8,-24.3);
 		p.lineTo(25.0,0.0); p.lineTo(8.0, 0.0); p.curveTo(8.0,-11.0,-8.0,-11.0,-8.0,0.0); p.closePath();
-		colours.add(new Instr(Prim.P1, p));
+		colours.add(new Instr(Form.P1, p));
 		p = new Path2D.Double(); p.moveTo(-32.0,0); p.lineTo(-2.8,-32.5); p.lineTo(5.3,-51.0); p.lineTo(26.3,-43.9); p.lineTo(21.8,-24.3); p.lineTo(25.0,0.0);
 		p.lineTo(8.0,0.0); p.curveTo(8.0,-11.0,-8.0,-11.0,-8.0,0.0); p.closePath();
-    colours.add(new Instr(Prim.H2, p));
+    colours.add(new Instr(Form.H2, p));
 		p = new Path2D.Double(); p.moveTo(-0.9,-37.1); p.lineTo(11.3,-64.6); p.lineTo(29.6,-58.7); p.lineTo(23.1,-29.3);	p.closePath();
-    colours.add(new Instr(Prim.H3, p));
+    colours.add(new Instr(Form.H3, p));
 		p = new Path2D.Double(); p.moveTo(5.3,-51.0); p.lineTo(14.5,-71.5); p.lineTo(31.2,-65.9); p.lineTo(26.3,-43.9);	p.closePath();
-    colours.add(new Instr(Prim.H4, p));
+    colours.add(new Instr(Form.H4, p));
 		p = new Path2D.Double(); p.moveTo(-5.2,-29.7); p.lineTo(-2.8,-32.5); p.lineTo(5.3,-51.0); p.lineTo(26.3,-43.9); p.lineTo(21.8,-24.3); p.lineTo(22.2,-21.5);	p.closePath();
-    colours.add(new Instr(Prim.H5, p));
+    colours.add(new Instr(Form.H5, p));
 		p = new Path2D.Double(); p.moveTo(12.7,-37.9); p.lineTo(31.3,-94.8); p.lineTo(37.0,-92.9); p.lineTo(21.8,-24.3);
 		p.lineTo(25.0,0.0); p.lineTo(8.0,0.0); p.quadTo(8.0,-6.0,2.5,-7.6); p.closePath();
-    colours.add(new Instr(Prim.V2, p));
-		Pillar.add(new Instr(Prim.COLR, colours));
-		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)));
-		Pillar.add(new Instr(Prim.LINE, new Line2D.Double(-42,0,-10,0)));
-		Pillar.add(new Instr(Prim.LINE, new Line2D.Double(10,0,36,0)));
+    colours.add(new Instr(Form.V2, p));
+		Pillar.add(new Instr(Form.COLR, colours));
+		Pillar.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		Pillar.add(new Instr(Form.FILL, Color.black));
+		Pillar.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
+		Pillar.add(new Instr(Form.LINE, new Line2D.Double(-42,0,-10,0)));
+		Pillar.add(new Instr(Form.LINE, new Line2D.Double(10,0,36,0)));
 		p = new Path2D.Double(); p.moveTo(-32.0,0.0); p.lineTo(-2.8,-32.5); p.lineTo(25.6,-96.7); p.lineTo(37.0,-92.9); p.lineTo(21.8,-24.3); p.lineTo(25.0,0.0);
-		Pillar.add(new Instr(Prim.PLIN, p));
+		Pillar.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol Spar = new Symbol();
@@ -168,23 +168,23 @@
 		Symbol colours = new Symbol();
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-3.2,-9.5); p.lineTo(25.6,-96.7); p.lineTo(37.0,-92.9); p.lineTo(8.2,-5.7); p.closePath();
-		colours.add(new Instr(Prim.P1, p));
+		colours.add(new Instr(Form.P1, p));
 		p = new Path2D.Double(); p.moveTo(-3.2,-9.5); p.lineTo(11.2,-53.1); p.lineTo(22.6,-49.3); p.lineTo(8.2,-5.7); p.closePath();
-    colours.add(new Instr(Prim.H2, p));
+    colours.add(new Instr(Form.H2, p));
 		p = new Path2D.Double(); p.moveTo(6.4,-38.6); p.lineTo(16.0,-67.6); p.lineTo(27.4,-63.8); p.lineTo(17.8,-34.8);	p.closePath();
-    colours.add(new Instr(Prim.H3, p));
+    colours.add(new Instr(Form.H3, p));
 		p = new Path2D.Double(); p.moveTo(11.2,-53.1); p.lineTo(18.4,-74.9); p.lineTo(29.8,-71.1); p.lineTo(22.6,-49.3);	p.closePath();
-    colours.add(new Instr(Prim.H4, p));
+    colours.add(new Instr(Form.H4, p));
 		p = new Path2D.Double(); p.moveTo(4.0,-31.3); p.lineTo(11.2,-53.1); p.lineTo(22.6,-49.3); p.lineTo(15.4,-27.5); p.closePath();
-    colours.add(new Instr(Prim.H5, p));
+    colours.add(new Instr(Form.H5, p));
 		p = new Path2D.Double(); p.moveTo(2.5,-7.6); p.lineTo(31.3,-94.8); p.lineTo(37.0,-92.9); p.lineTo(8.2,-5.7); p.closePath();
-    colours.add(new Instr(Prim.V2, p));
-		Spar.add(new Instr(Prim.COLR, colours));
-		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)));
-		Spar.add(new Instr(Prim.LINE, new Line2D.Double(-20,0,-10,0)));
-		Spar.add(new Instr(Prim.LINE, new Line2D.Double(10,0,20,0)));
+    colours.add(new Instr(Form.V2, p));
+		Spar.add(new Instr(Form.COLR, colours));
+		Spar.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		Spar.add(new Instr(Form.FILL, Color.black));
+		Spar.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
+		Spar.add(new Instr(Form.LINE, new Line2D.Double(-20,0,-10,0)));
+		Spar.add(new Instr(Form.LINE, new Line2D.Double(10,0,20,0)));
 		p = new Path2D.Double(); p.moveTo(-3.2,-9.5); p.lineTo(25.6,-96.7); p.lineTo(37.0,-92.9); p.lineTo(8.2,-5.7);
-		Spar.add(new Instr(Prim.PLIN, p));
+		Spar.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol Sphere = new Symbol();
@@ -193,32 +193,32 @@
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-25.0,0); p.curveTo(-32.0,-21.0,-14.0,-45.5,12.7,-37.9); p.curveTo(27.5,-33.8,37.8,-15.5,32.0,0.0);
 		p.lineTo(8.0,0.0); p.curveTo(8.0,-11.0,-8.0,-11.0,-8.0,0.0); p.closePath();
-		colours.add(new Instr(Prim.P1, p));
+		colours.add(new Instr(Form.P1, p));
 		p = new Path2D.Double(); p.moveTo(-25.0,0); p.quadTo(-30.0,-15.0,-20.5,-28.0); p.lineTo(33.8,-10.0); p.quadTo(33.7,-4.0,32.0,0.0);
 		p.lineTo(8.0,0.0); p.curveTo(8.0,-11.0,-8.0,-11.0,-8.0,0.0); p.closePath();
-    colours.add(new Instr(Prim.H2, p));
+    colours.add(new Instr(Form.H2, p));
 		p = new Path2D.Double(); p.moveTo(-24.2,-22.1); p.quadTo(-21.0,-28.5,-15.2,-33.3); p.lineTo(32.8,-17.2); p.quadTo(34.6,-10.0,33.0,-2.9); p.closePath();
-    colours.add(new Instr(Prim.H3, p));
+    colours.add(new Instr(Form.H3, p));
 		p = new Path2D.Double(); p.moveTo(-20.5,-28.0); p.quadTo(-16.5,-33.0,-12.0,-35.5); p.lineTo(31.5,-21.0); p.quadTo(33.5,-17.0,34.0,-9.5); p.closePath();
-    colours.add(new Instr(Prim.H4, p));
+    colours.add(new Instr(Form.H4, p));
 		p = new Path2D.Double(); p.moveTo(-25.2,-19.0); p.quadTo(-23.5,-24.0,-20.5,-28.0); p.lineTo(34.0,-9.5); p.quadTo(34.0,-3.0,32.0,0.0);	p.closePath();
-    colours.add(new Instr(Prim.H5, p));
+    colours.add(new Instr(Form.H5, p));
 		p = new Path2D.Double(); p.moveTo(12.7,-37.9); p.curveTo(27.5,-33.8,37.8,-15.5,32.0,0.0);	p.lineTo(8.0,0.0); p.quadTo(8.0,-6.0,2.5,-7.6); p.closePath();
-    colours.add(new Instr(Prim.V2, p));
-    Sphere.add(new Instr(Prim.COLR, colours));
-    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)));
-    Sphere.add(new Instr(Prim.LINE, new Line2D.Double(-33,0,-10,0)));
-    Sphere.add(new Instr(Prim.LINE, new Line2D.Double(10,0,40,0)));
-    Sphere.add(new Instr(Prim.EARC, new Arc2D.Double(-26.5,-39.4,60.0,60.0,-18.0,216.0,Arc2D.OPEN)));
+    colours.add(new Instr(Form.V2, p));
+    Sphere.add(new Instr(Form.COLR, colours));
+    Sphere.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+    Sphere.add(new Instr(Form.FILL, Color.black));
+    Sphere.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
+    Sphere.add(new Instr(Form.LINE, new Line2D.Double(-33,0,-10,0)));
+    Sphere.add(new Instr(Form.LINE, new Line2D.Double(10,0,40,0)));
+    Sphere.add(new Instr(Form.EARC, new Arc2D.Double(-26.5,-39.4,60.0,60.0,-18.0,216.0,Arc2D.OPEN)));
 	}
 	public static final Symbol Storage = new Symbol();
 	static {
-		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)));
+		Storage.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Storage.add(new Instr(Form.FILL, Color.black));
+		Storage.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
     Path2D.Double p = new Path2D.Double(); p.moveTo(-50.0,0.0); p.lineTo(-40.0,-20.0); p.lineTo(40.0,-20.0); p.lineTo(40.0,-20.0);
     p.lineTo(50.0,0.0); p.lineTo(40.0,20.0); p.lineTo(-40.0,20.0); p.closePath();
-    Storage.add(new Instr(Prim.PLIN, p));
+    Storage.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol Super = new Symbol();
@@ -227,24 +227,24 @@
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-48.0,0); p.lineTo(-28.0,-42.0); p.lineTo(28.0,-42.0); p.lineTo(48.0,0);
 		p.lineTo(8.0, 0.0); p.curveTo(8.0,-11.0,-8.0,-11.0,-8.0,0.0); p.closePath();
-		colours.add(new Instr(Prim.P1, p));
+		colours.add(new Instr(Form.P1, p));
 		p = new Path2D.Double(); p.moveTo(-48.0,0); p.lineTo(-38.0,-21.0); p.lineTo(38.0,-21.0); p.lineTo(48.0,0);
 		p.lineTo(8.0,0.0); p.curveTo(8.0,-11.0,-8.0,-11.0,-8.0,0.0); p.closePath();
-    colours.add(new Instr(Prim.H2, p));
+    colours.add(new Instr(Form.H2, p));
 		p = new Path2D.Double(); p.moveTo(-41.3,-14.0); p.lineTo(-34.7,-28.0); p.lineTo(34.7,-28.0); p.lineTo(41.3,-14.0);	p.closePath();
-    colours.add(new Instr(Prim.H3, p));
+    colours.add(new Instr(Form.H3, p));
 		p = new Path2D.Double(); p.moveTo(-38.0,-21.0); p.lineTo(-33.0,-31.5); p.lineTo(33.0,-31.5); p.lineTo(38.0,-21.0);	p.closePath();
-    colours.add(new Instr(Prim.H4, p));
+    colours.add(new Instr(Form.H4, p));
 		p = new Path2D.Double(); p.moveTo(-43.0,-11.5); p.lineTo(-38.0,-21.0); p.lineTo(38.0,-21.0); p.lineTo(43.0,-11.5);	p.closePath();
-    colours.add(new Instr(Prim.H5, p));
+    colours.add(new Instr(Form.H5, p));
 		p = new Path2D.Double(); p.moveTo(0.0,-42.0); p.lineTo(28.0,-42.0); p.lineTo(48.0,0.0); p.lineTo(8.0,0.0); p.quadTo(7.7,-7.7,0.0,-8.0); p.closePath();
-    colours.add(new Instr(Prim.V2, p));
-		Super.add(new Instr(Prim.COLR, colours));
-    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)));
-		Super.add(new Instr(Prim.LINE, new Line2D.Double(-54,0,-10,0)));
-		Super.add(new Instr(Prim.LINE, new Line2D.Double(10,0,54,0)));
+    colours.add(new Instr(Form.V2, p));
+		Super.add(new Instr(Form.COLR, colours));
+    Super.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		Super.add(new Instr(Form.FILL, Color.black));
+		Super.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
+		Super.add(new Instr(Form.LINE, new Line2D.Double(-54,0,-10,0)));
+		Super.add(new Instr(Form.LINE, new Line2D.Double(10,0,54,0)));
 		p = new Path2D.Double(); p.moveTo(-48.0,0); p.lineTo(-28.0,-42.0); p.lineTo(28.0,-42.0); p.lineTo(48.0,0);
-    Super.add(new Instr(Prim.PLIN, p));
+    Super.add(new Instr(Form.PLIN, p));
 	}
 	
Index: /applications/editors/josm/plugins/smed2/src/symbols/Facilities.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/symbols/Facilities.java	(revision 30214)
+++ /applications/editors/josm/plugins/smed2/src/symbols/Facilities.java	(revision 30215)
@@ -21,172 +21,172 @@
 	private static final Symbol Facility = new Symbol();
 	static {
-		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)));
+		Facility.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Facility.add(new Instr(Form.FILL, new Color(0x80ffffff, true)));
 		RoundRectangle2D.Double s = new RoundRectangle2D.Double(-29,-29,58,58,15,15);
-		Facility.add(new Instr(Prim.RSHP, s));
-		Facility.add(new Instr(Prim.FILL, new Color(0xa30075)));
-		Facility.add(new Instr(Prim.RRCT, s));
+		Facility.add(new Instr(Form.RSHP, s));
+		Facility.add(new Instr(Form.FILL, new Color(0xa30075)));
+		Facility.add(new Instr(Form.RRCT, s));
 	}
 	public static final Symbol Boatlift = new Symbol();//was Crane
 	static {
-		Boatlift.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
-		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, 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)));
-		Boatlift.add(new Instr(Prim.EARC, new Arc2D.Double(-10.0,-1.5,20,20,75.0,-260.0,Arc2D.OPEN)));
+		Boatlift.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
+		Boatlift.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
+		Boatlift.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
+		Boatlift.add(new Instr(Form.ELPS, new Ellipse2D.Double(-3.7,-19.7,12,12)));
+		Boatlift.add(new Instr(Form.LINE, new Line2D.Double(2.3,-7.7,2.3,-2.0)));
+		Boatlift.add(new Instr(Form.EARC, new Arc2D.Double(-10.0,-1.5,20,20,75.0,-260.0,Arc2D.OPEN)));
 	}
 	public static final Symbol Boatyard = new Symbol();
 	static {
-		Boatyard.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
-		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, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
-		Boatyard.add(new Instr(Prim.LINE, new Line2D.Double(19,19,-8,-8)));
+		Boatyard.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
+		Boatyard.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
+		Boatyard.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
+		Boatyard.add(new Instr(Form.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);
 		p.curveTo(1.0,-11.5,-11.5,1.0,-21.5,-7.4); p.lineTo(-25.4,-11.3); p.lineTo(-21.9,-14.8); p.lineTo(-17.5,-10.5); p.closePath();
-		Boatyard.add(new Instr(Prim.PGON, p));
+		Boatyard.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol Chandler = new Symbol();
 	static {
-		Chandler.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
-		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, 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)));
-		Chandler.add(new Instr(Prim.LINE, new Line2D.Double(8.0,21.0,8.0,-8.6)));
-		Chandler.add(new Instr(Prim.LINE, new Line2D.Double(-16.0,21.0,-16.0,-8.6)));
-		Chandler.add(new Instr(Prim.EARC, new Arc2D.Double(-16.0,-20.5,24,24,0.0,180.0,Arc2D.OPEN)));
+		Chandler.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
+		Chandler.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
+		Chandler.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		Chandler.add(new Instr(Form.ELPS, new Ellipse2D.Double(14,7,10,10)));
+		Chandler.add(new Instr(Form.LINE, new Line2D.Double(-23.0,12.0,14.0,12.0)));
+		Chandler.add(new Instr(Form.LINE, new Line2D.Double(8.0,21.0,8.0,-8.6)));
+		Chandler.add(new Instr(Form.LINE, new Line2D.Double(-16.0,21.0,-16.0,-8.6)));
+		Chandler.add(new Instr(Form.EARC, new Arc2D.Double(-16.0,-20.5,24,24,0.0,180.0,Arc2D.OPEN)));
 	}
 	public static final Symbol Fuel = new Symbol();
 	static {
-		Fuel.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
-		Fuel.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
-		Fuel.add(new Instr(Prim.STRK, new BasicStroke(2.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
-		Fuel.add(new Instr(Prim.FILL, new Color(0xa30075)));
+		Fuel.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
+		Fuel.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
+		Fuel.add(new Instr(Form.STRK, new BasicStroke(2.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		Fuel.add(new Instr(Form.FILL, new Color(0xa30075)));
 		Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
 		p.moveTo(-15.6,22.1); p.lineTo(-15.6,-19.4); p.quadTo(-15.5,-22.7,-12.2,-22.8); p.lineTo(0.2,-22.8); p.quadTo(3.3,-22.7,3.4,-19.4); p.lineTo(3.4,22.1); p.closePath(); 
 		p.moveTo(-12.8,-19.0); p.quadTo(-12.7,-19.9,-11.8,-20.0); p.lineTo(-0.4,-20.0); p.quadTo(0.5,-19.9,0.6,-19.0); p.lineTo(0.6,-9.4);
 		p.quadTo(0.5,-8.5,-0.4,-8.4); p.lineTo(-11.8,-8.4); p.quadTo(-12.7,-8.3,-12.8,-9.4); p.closePath();
-		Fuel.add(new Instr(Prim.PGON, p));
+		Fuel.add(new Instr(Form.PGON, p));
 		p = new Path2D.Double(); p.moveTo(3.0,-3.0); p.lineTo(7.0,-3.0); p.quadTo(9.4,-2.8,9.6,-0.4); p.lineTo(9.6,18.0); p.curveTo(10.1,23.2,18.4,21.5,17.4,17.2);
 		p.lineTo(14.9,3.5); p.lineTo(15.1,-10.3); p.quadTo(14.9,-11.9,13.9,-13.1); p.lineTo(7.4,-19.6); p.moveTo(15.1,-7.4); p.lineTo(12.6,-7.4); p.quadTo(11.1,-7.4,11.1,-8.9); p.lineTo(11.1,-16.0);
-		Fuel.add(new Instr(Prim.PLIN, p));
+		Fuel.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol Laundrette = new Symbol();
 	static {
-		Laundrette.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
-		Laundrette.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
-		Laundrette.add(new Instr(Prim.STRK, new BasicStroke(1.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
-		Laundrette.add(new Instr(Prim.FILL, new Color(0xa30075)));
-		Laundrette.add(new Instr(Prim.RECT, new Rectangle2D.Double(-15,-15,30,30)));
-		Laundrette.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
+		Laundrette.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
+		Laundrette.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
+		Laundrette.add(new Instr(Form.STRK, new BasicStroke(1.5f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		Laundrette.add(new Instr(Form.FILL, new Color(0xa30075)));
+		Laundrette.add(new Instr(Form.RECT, new Rectangle2D.Double(-15,-15,30,30)));
+		Laundrette.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-15,-15); p.lineTo(-15,-20); p.lineTo(15,-20); p.lineTo(15,-15);
 		p.moveTo(-10,15); p.lineTo(-10,20); p.lineTo(10,20); p.lineTo(10,15);
-		Laundrette.add(new Instr(Prim.PLIN, p));
+		Laundrette.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol PumpOut = new Symbol();
 	static {
-		PumpOut.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
-		PumpOut.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
-		PumpOut.add(new Instr(Prim.STRK, new BasicStroke(2.5f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
-		PumpOut.add(new Instr(Prim.FILL, new Color(0xa30075)));
+		PumpOut.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
+		PumpOut.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
+		PumpOut.add(new Instr(Form.STRK, new BasicStroke(2.5f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
+		PumpOut.add(new Instr(Form.FILL, new Color(0xa30075)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(3.9,-3.7); p.lineTo(-7.4,-3.7); p.lineTo(-12.0,2.0); p.lineTo(-22.7,2.0);
 		p.lineTo(-11.8,14.9); p.lineTo(15.1,14.9); p.lineTo(21.9,10.2); p.lineTo(21.9,3.1); p.lineTo(13.5,3.1);
-		PumpOut.add(new Instr(Prim.PLIN, p));
-		PumpOut.add(new Instr(Prim.STRK, new BasicStroke(3.5f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
+		PumpOut.add(new Instr(Form.PLIN, p));
+		PumpOut.add(new Instr(Form.STRK, new BasicStroke(3.5f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
 		p = new Path2D.Double(); p.moveTo(-2.5,3.0); p.lineTo(-2.5,-13.8); p.lineTo(6.9,-13.8); p.lineTo(6.9,-6.7); p.lineTo(14.5,-6.7);
-		PumpOut.add(new Instr(Prim.PLIN, p));
+		PumpOut.add(new Instr(Form.PLIN, p));
 		p = new Path2D.Double(); p.moveTo(9.7,2.3); p.lineTo(9.7,10.3); p.lineTo(-4.1,10.3); p.lineTo(-4.1,2.3); p.closePath();
-		PumpOut.add(new Instr(Prim.PGON, p));
+		PumpOut.add(new Instr(Form.PGON, p));
 		p = new Path2D.Double(); p.moveTo(14.1,-10.6); p.lineTo(23.1,-6.7); p.lineTo(14.1,-2.8); p.closePath();
-		PumpOut.add(new Instr(Prim.PGON, p));
+		PumpOut.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol SailingClub = new Symbol();
 	static {
-		SailingClub.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
-		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, 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)));
+		SailingClub.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
+		SailingClub.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
+		SailingClub.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		SailingClub.add(new Instr(Form.FILL, new Color(0xa30075)));
+		SailingClub.add(new Instr(Form.LINE, new Line2D.Double(-5,20,-5,-20)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-5,0); p.lineTo(20,-10); p.lineTo(-5,-20); p.closePath();
-		SailingClub.add(new Instr(Prim.PGON, p));
+		SailingClub.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol Shower = new Symbol();
 	static {
-		Shower.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
-		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, 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, 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)));
-		Shower.add(new Instr(Prim.LINE, new Line2D.Double(-7.8,-4.4,-0.5,-14.3)));
-		Shower.add(new Instr(Prim.LINE, new Line2D.Double(-0.2,-0.2,3.1,-12.1)));
+		Shower.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
+		Shower.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
+		Shower.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		Shower.add(new Instr(Form.FILL, new Color(0xa30075)));
+		Shower.add(new Instr(Form.LINE, new Line2D.Double(-4.8,-24.5,6.2,-13.5)));
+		Shower.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		Shower.add(new Instr(Form.LINE, new Line2D.Double(-18.1,-17.9,-6.1,-21.3)));
+		Shower.add(new Instr(Form.LINE, new Line2D.Double(-13.9,-10.2,-3.9,-17.7)));
+		Shower.add(new Instr(Form.LINE, new Line2D.Double(-7.8,-4.4,-0.5,-14.3)));
+		Shower.add(new Instr(Form.LINE, new Line2D.Double(-0.2,-0.2,3.1,-12.1)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(11.1,24.6); p.lineTo(11.1,-16.0); p.curveTo(11.1,-22.7,3.4,-23.6,0.8,-19.3);
-		Shower.add(new Instr(Prim.PLIN, p));
+		Shower.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol Slipway = new Symbol();
 	static {
-		Slipway.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
-		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, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
-		Slipway.add(new Instr(Prim.FILL, new Color(0xa30075)));
+		Slipway.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
+		Slipway.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
+		Slipway.add(new Instr(Form.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		Slipway.add(new Instr(Form.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);
 		p.curveTo(-8.8,18.0,-9.8,16.7,-6.2,16.7); p.curveTo(-2.6,16.7,-3.6,18.0,0.0,18.0); p.curveTo(3.6,18.0,2.6,16.7,6.2,16.7); p.curveTo(9.8,16.7,8.8,18.0,12.4,18.0);
 		p.curveTo(16.0,18.0,15.0,16.7,18.6,16.7); p.curveTo(22.2,16.7,21.2,18.0,24.8,18.0);	p.lineTo(24.8,13.6); p.closePath();
-		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, 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)));
+		Slipway.add(new Instr(Form.PGON, p));
+		Slipway.add(new Instr(Form.ELPS, new Ellipse2D.Double(-1.65,-1.9,8,8)));
+		Slipway.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		Slipway.add(new Instr(Form.LINE, new Line2D.Double(-24.5,-8.3,-3.1,-2.4)));
+		Slipway.add(new Instr(Form.LINE, new Line2D.Double(9.3,1.1,22.2,4.6)));
 		p = new Path2D.Double(); p.moveTo(22.9,0.6); p.lineTo(25.0,-7.4); p.lineTo(-5.1,-15.8); p.lineTo(0.3,-19.6); p.lineTo(-1.6,-20.1); p.lineTo(-7.2,-16.2);
 		p.lineTo(-17.1,-18.9); p.quadTo(-16.8,-11.4,-7.7,-7.7); p.closePath();
-		Slipway.add(new Instr(Prim.PGON, p));
+		Slipway.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol Toilet = new Symbol();
 	static {
-		Toilet.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
-		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, 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)));
-		Toilet.add(new Instr(Prim.RSHP, new Ellipse2D.Double(-18.5,-22.5,7.4,7.4)));
-		Toilet.add(new Instr(Prim.RSHP, new Ellipse2D.Double(11,-22.5,7.4,7.4)));
+		Toilet.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
+		Toilet.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Facilities.Facility, 1.0, 0, 0, null, null)));
+		Toilet.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		Toilet.add(new Instr(Form.FILL, new Color(0xa30075)));
+		Toilet.add(new Instr(Form.LINE, new Line2D.Double(0,20,0,-20)));
+		Toilet.add(new Instr(Form.RSHP, new Ellipse2D.Double(-18.5,-22.5,7.4,7.4)));
+		Toilet.add(new Instr(Form.RSHP, new Ellipse2D.Double(11,-22.5,7.4,7.4)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-9.8,-12.2); p.lineTo(-4.8,2.7); p.lineTo(-7.3,3.9); p.lineTo(-10.6,-7.0); p.lineTo(-11.7,-6.4); p.lineTo(-7.6,9.0);
 		p.lineTo(-11.3,9.0); p.lineTo(-11.6,22.1); p.lineTo(-13.9,22.1); p.lineTo(-14.2,9.0); p.lineTo(-15.8,9.0); p.lineTo(-16.2,22.1); p.lineTo(-18.4,22.1);
 		p.lineTo(-18.8,9.0); p.lineTo(-22.3,9.0); p.lineTo(-18.2,-6.4); p.lineTo(-19.1,-7.0); p.lineTo(-22.9,3.9); p.lineTo(-25.1,2.7); p.lineTo(-19.9,-12.2); p.closePath();
-		Toilet.add(new Instr(Prim.PGON, p));
+		Toilet.add(new Instr(Form.PGON, p));
 		p = new Path2D.Double(); p.moveTo(19.2,-12.2); p.lineTo(22.3,-10.1); p.lineTo(22.3,4.4); p.lineTo(20.2,4.4); p.lineTo(20.2,-7.3); p.lineTo(18.3,-7.3); p.lineTo(18.3,22.1);
 		p.lineTo(15.8,22.1); p.lineTo(15.8,4.6); p.lineTo(13.8,4.6); p.lineTo(13.4,22.1); p.lineTo(11.0,22.1); p.lineTo(11.0,-7.3); p.lineTo(9.5,-7.3); p.lineTo(9.5,4.4); p.lineTo(6.8,4.4);
 		p.lineTo(6.8,-10.1); p.lineTo(9.4,-12.2); p.closePath();
-		Toilet.add(new Instr(Prim.PGON, p));
+		Toilet.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol VisitorBerth = new Symbol();
 	static {
-		VisitorBerth.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
-		VisitorBerth.add(new Instr(Prim.FILL, new Color(0xa30075)));
-		VisitorBerth.add(new Instr(Prim.RSHP, new Ellipse2D.Double(-25,-25,50,50)));
-		VisitorBerth.add(new Instr(Prim.FILL, Color.white));
+		VisitorBerth.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
+		VisitorBerth.add(new Instr(Form.FILL, new Color(0xa30075)));
+		VisitorBerth.add(new Instr(Form.RSHP, new Ellipse2D.Double(-25,-25,50,50)));
+		VisitorBerth.add(new Instr(Form.FILL, Color.white));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(7.9,-13.6); p.lineTo(14.0,-13.6); p.lineTo(3.4,13.6); p.lineTo(-3.4,13.6);
 		p.lineTo(-14.0,-13.6); p.lineTo(-7.9,-13.6); p.lineTo(0.0,8.7); p.closePath();
-		VisitorBerth.add(new Instr(Prim.PGON, p));
+		VisitorBerth.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol VisitorMooring = new Symbol();
 	static {
-		VisitorMooring.add(new Instr(Prim.FILL, new Color(0xa30075)));
+		VisitorMooring.add(new Instr(Form.FILL, new Color(0xa30075)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-25.0,0); p.curveTo(-32.0,-21.0,-14.0,-45.5,12.7,-37.9); p.curveTo(27.5,-33.8,37.8,-15.5,32.0,0.0);
 		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, 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, 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));
+		VisitorMooring.add(new Instr(Form.PGON, p));
+    VisitorMooring.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+    VisitorMooring.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
+    VisitorMooring.add(new Instr(Form.LINE, new Line2D.Double(-33,0,-10,0)));
+    VisitorMooring.add(new Instr(Form.LINE, new Line2D.Double(10,0,40,0)));
+    VisitorMooring.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+    VisitorMooring.add(new Instr(Form.ELPS, new Ellipse2D.Double(6.5,-49.5,12,12)));
+    VisitorMooring.add(new Instr(Form.FILL, Color.white));
 		p = new Path2D.Double(); p.moveTo(8.3,-32.8); p.lineTo(12.5,-32.8); p.lineTo(5.4,-12.9); p.lineTo(1.0,-12.9); p.lineTo(-6.1,-32.8);
 		p.lineTo(-1.9,-32.8); p.lineTo(3.2,-18.1); p.closePath();
-		VisitorMooring.add(new Instr(Prim.PGON, p));
+		VisitorMooring.add(new Instr(Form.PGON, p));
 	}
 
Index: /applications/editors/josm/plugins/smed2/src/symbols/Harbours.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/symbols/Harbours.java	(revision 30214)
+++ /applications/editors/josm/plugins/smed2/src/symbols/Harbours.java	(revision 30215)
@@ -20,127 +20,127 @@
 	public static final Symbol Anchor = new Symbol();
 	static {
-		Anchor.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-60,-60,120,120)));
-		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)));
+		Anchor.add(new Instr(Form.BBOX, new Rectangle2D.Double(-60,-60,120,120)));
+		Anchor.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Anchor.add(new Instr(Form.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);
 		p.lineTo(27.0,18.0); p.lineTo(52.0,0.0); p.lineTo(45.0,35.0); p.lineTo(37.0,28.0);	p.quadTo(25.0,39.0,7.0,43.0); p.lineTo(6.0,51.0);
 		p.lineTo(-6.0,51.0); p.lineTo(-7.0,43.0);	p.quadTo(-25.0,39.0,-37.0,28.0); p.lineTo(-45.0,35.0); p.lineTo(-52.0,0.0); p.lineTo(-27.0,18.0);
 		p.lineTo(-31.0,22.0); p.quadTo(-21.0,29.0,-7.0,31.0); p.lineTo(-6.0,-30.0); p.lineTo(-23.0,-30.0); p.lineTo(-23.0,-40.0); p.closePath();
-		Anchor.add(new Instr(Prim.PGON, p));
+		Anchor.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol Yacht = new Symbol();
 	static {
-		Yacht.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Yacht.add(new Instr(Form.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();
 		p.moveTo(-50.0,45.0); p.curveTo(-55.0,3.0,-37.0,-28.5,-7.0,-46.0); p.curveTo(-28.0,-15.0,-26.0,11.0,-20.5,30.0); p.closePath();
-		Yacht.add(new Instr(Prim.PGON, p));
+		Yacht.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol Anchorage = new Symbol();
 	static {
-		Anchorage.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Harbours.Anchor, 1.0, 0, 0, new Scheme(Rules.Msymb), null)));
+		Anchorage.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Harbours.Anchor, 1.0, 0, 0, new Scheme(Rules.Msymb), null)));
 	}
 	public static final Symbol Bollard = new Symbol();
 	static {
-		Bollard.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		Bollard.add(new Instr(Prim.FILL, Color.white));
+		Bollard.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Bollard.add(new Instr(Form.FILL, Color.white));
 		Ellipse2D.Double s = new Ellipse2D.Double(-10,-10,20,20);
-		Bollard.add(new Instr(Prim.RSHP, s));
-		Bollard.add(new Instr(Prim.FILL, Color.black));
-		Bollard.add(new Instr(Prim.ELPS, s));
+		Bollard.add(new Instr(Form.RSHP, s));
+		Bollard.add(new Instr(Form.FILL, Color.black));
+		Bollard.add(new Instr(Form.ELPS, s));
 	}
 	public static final Symbol ContainerCrane = new Symbol();
 	static {
-		ContainerCrane.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		ContainerCrane.add(new Instr(Prim.RSHP, new Rectangle2D.Double(-15,-65,30,100)));
-		ContainerCrane.add(new Instr(Prim.RECT, new Rectangle2D.Double(-40,-12.5,80,25)));
+		ContainerCrane.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		ContainerCrane.add(new Instr(Form.RSHP, new Rectangle2D.Double(-15,-65,30,100)));
+		ContainerCrane.add(new Instr(Form.RECT, new Rectangle2D.Double(-40,-12.5,80,25)));
 	}
 	public static final Symbol Customs = new Symbol();
 	static {
-		Customs.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
-		Customs.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
-		Customs.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-28,-28,56,56)));
-		Customs.add(new Instr(Prim.LINE, new Line2D.Double(-25,5,25,5)));
-		Customs.add(new Instr(Prim.LINE, new Line2D.Double(-25,-5,25,-5)));
+		Customs.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
+		Customs.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
+		Customs.add(new Instr(Form.ELPS, new Ellipse2D.Double(-28,-28,56,56)));
+		Customs.add(new Instr(Form.LINE, new Line2D.Double(-25,5,25,5)));
+		Customs.add(new Instr(Form.LINE, new Line2D.Double(-25,-5,25,-5)));
 	}
 	public static final Symbol DeviationDolphin = new Symbol();
 	static {
-		DeviationDolphin.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		DeviationDolphin.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		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);
 		p.moveTo(-20.0,0.0); p.lineTo(-15.0,-32.0); p.lineTo(15.0,-32.0); p.lineTo(20.0,0.0);
-		DeviationDolphin.add(new Instr(Prim.PLIN, p));
+		DeviationDolphin.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol DistanceI = new Symbol();
 	static {
-		DistanceI.add(new Instr(Prim.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		DistanceI.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-11,-11,22,22)));
+		DistanceI.add(new Instr(Form.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		DistanceI.add(new Instr(Form.ELPS, new Ellipse2D.Double(-11,-11,22,22)));
 	}
 	public static final Symbol DistanceU = new Symbol();
 	static {
-		DistanceU.add(new Instr(Prim.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		DistanceU.add(new Instr(Prim.FILL, Rules.Msymb));
-		DistanceU.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-11,-11,22,22)));
+		DistanceU.add(new Instr(Form.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		DistanceU.add(new Instr(Form.FILL, Rules.Msymb));
+		DistanceU.add(new Instr(Form.ELPS, new Ellipse2D.Double(-11,-11,22,22)));
 	}
 	public static final Symbol Dolphin = new Symbol();
 	static {
-		Dolphin.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		Dolphin.add(new Instr(Prim.FILL, new Color(0xffd400)));
+		Dolphin.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Dolphin.add(new Instr(Form.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);
 		p.lineTo(-3.8,9.2); p.lineTo(-9.2,3.8); p.lineTo(-9.2,-3.8); p.lineTo(-3.8,-9.2); p.closePath();
-		Dolphin.add(new Instr(Prim.PGON, p));
-		Dolphin.add(new Instr(Prim.FILL, Color.black));
-		Dolphin.add(new Instr(Prim.PLIN, p));
+		Dolphin.add(new Instr(Form.PGON, p));
+		Dolphin.add(new Instr(Form.FILL, Color.black));
+		Dolphin.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol Explosives = new Symbol();
 	static {
-		Explosives.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
-		Explosives.add(new Instr(Prim.RSHP, new Ellipse2D.Double(-5,25,10,10)));
-		Explosives.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
+		Explosives.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
+		Explosives.add(new Instr(Form.RSHP, new Ellipse2D.Double(-5,25,10,10)));
+		Explosives.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-10,20); p.lineTo(-13,17); p.lineTo(-13,8);
 		p.moveTo(0,10); p.lineTo(0,0); p.lineTo(-8,-10);
 		p.moveTo(10,17); p.lineTo(18,-10); p.lineTo(10,-20);
-		Explosives.add(new Instr(Prim.PLIN, p));
+		Explosives.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol Fishing = new Symbol();
 	static {
-		Fishing.add(new Instr(Prim.STRK, new BasicStroke(15, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		Fishing.add(new Instr(Prim.FILL, Rules.Msymb));
-		Fishing.add(new Instr(Prim.EARC, new Arc2D.Double(-75,-75,150,150,15,140,Arc2D.OPEN)));
-		Fishing.add(new Instr(Prim.EARC, new Arc2D.Double(-75,-75,150,150,-15,-140,Arc2D.OPEN)));
+		Fishing.add(new Instr(Form.STRK, new BasicStroke(15, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Fishing.add(new Instr(Form.FILL, Rules.Msymb));
+		Fishing.add(new Instr(Form.EARC, new Arc2D.Double(-75,-75,150,150,15,140,Arc2D.OPEN)));
+		Fishing.add(new Instr(Form.EARC, new Arc2D.Double(-75,-75,150,150,-15,-140,Arc2D.OPEN)));
 		Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
 		p.moveTo(-40,5); p.curveTo(20,40,50,25,80,0); p.curveTo(50,-25,20,-40,-40,-5);
 		p.lineTo(-75,-25); p.quadTo(-80, 0, -75, 25); p.closePath();
 		p.moveTo(42, 0); p.curveTo(42, 10, 56, 10, 56, 0); p.curveTo(56, -10, 42, -10, 42, 0); p.closePath();
-		Fishing.add(new Instr(Prim.PGON, p));
+		Fishing.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol Harbour = new Symbol();
 	static {
-		Harbour.add(new Instr(Prim.STRK, new BasicStroke(15, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		Harbour.add(new Instr(Prim.FILL, Rules.Msymb));
-		Harbour.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-75,-75,150,150)));
-		Harbour.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Harbours.Anchor, 1.0, 0, 0, new Scheme(Rules.Msymb), null)));
+		Harbour.add(new Instr(Form.STRK, new BasicStroke(15, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Harbour.add(new Instr(Form.FILL, Rules.Msymb));
+		Harbour.add(new Instr(Form.ELPS, new Ellipse2D.Double(-75,-75,150,150)));
+		Harbour.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Harbours.Anchor, 1.0, 0, 0, new Scheme(Rules.Msymb), null)));
 	}
 	public static final Symbol HarbourMaster = new Symbol();
 	static {
-		HarbourMaster.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
-		HarbourMaster.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		HarbourMaster.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-24,-28,48,56)));
-		HarbourMaster.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Harbours.Anchor, 0.4, 0, 0, null, null)));
+		HarbourMaster.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
+		HarbourMaster.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		HarbourMaster.add(new Instr(Form.ELPS, new Ellipse2D.Double(-24,-28,48,56)));
+		HarbourMaster.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Harbours.Anchor, 0.4, 0, 0, null, null)));
 	}
 	public static final Symbol Hospital = new Symbol();
 	static {
-		Hospital.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
-		Hospital.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
-		Hospital.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-28,-28,56,56)));
+		Hospital.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
+		Hospital.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
+		Hospital.add(new Instr(Form.ELPS, new Ellipse2D.Double(-28,-28,56,56)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-26,-5); p.lineTo(-5,-5); p.lineTo(-5,-25); p.moveTo(5,-25); p.lineTo(5,-5); p.lineTo(25,-5);
 		p.moveTo(-25,5); p.lineTo(-5,5); p.lineTo(-5,25); p.moveTo(5,25); p.lineTo(5,5); p.lineTo(25,5);
-		Hospital.add(new Instr(Prim.PLIN, p));
+		Hospital.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol LandingSteps = new Symbol();
 	static {
-		LandingSteps.add(new Instr(Prim.FILL, Rules.Msymb));
+		LandingSteps.add(new Instr(Form.FILL, Rules.Msymb));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-20,-10); p.lineTo(10,20); p.lineTo(20,20); p.lineTo(20,10);
 		p.lineTo(10,10); p.lineTo(10,0); p.lineTo(0,0); p.lineTo(0,-10); p.lineTo(-10,-10); p.lineTo(-10,-20); p.lineTo(-20,-20); p.closePath();
-		LandingSteps.add(new Instr(Prim.PGON, p));
+		LandingSteps.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol Lock_Gate = new Symbol();
@@ -148,56 +148,56 @@
 	public static final Symbol Marina = new Symbol();
 	static {
-		Marina.add(new Instr(Prim.STRK, new BasicStroke(15, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		Marina.add(new Instr(Prim.FILL, Rules.Msymb));
-		Marina.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Harbours.Yacht, 1.0, 0, 0, new Scheme(Rules.Msymb), null)));
-		Marina.add(new Instr(Prim.EARC, new Arc2D.Double(-80.0,-80.0,160.0,160.0,215.0,-250.0,Arc2D.OPEN)));
+		Marina.add(new Instr(Form.STRK, new BasicStroke(15, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Marina.add(new Instr(Form.FILL, Rules.Msymb));
+		Marina.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Harbours.Yacht, 1.0, 0, 0, new Scheme(Rules.Msymb), null)));
+		Marina.add(new Instr(Form.EARC, new Arc2D.Double(-80.0,-80.0,160.0,160.0,215.0,-250.0,Arc2D.OPEN)));
 	}
 	public static final Symbol MarinaNF = new Symbol();
 	static {
-		MarinaNF.add(new Instr(Prim.STRK, new BasicStroke(15, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		MarinaNF.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Harbours.Yacht, 1.0, 0, 0, new Scheme(Rules.Msymb), null)));
+		MarinaNF.add(new Instr(Form.STRK, new BasicStroke(15, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		MarinaNF.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Harbours.Yacht, 1.0, 0, 0, new Scheme(Rules.Msymb), null)));
 	}
 	public static final Symbol Pilot = new Symbol();
 	static{
-		Pilot.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		Pilot.add(new Instr(Prim.FILL, new Color(0xd400d4)));
+		Pilot.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Pilot.add(new Instr(Form.FILL, new Color(0xd400d4)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-15,0); p.lineTo(0,-56); p.lineTo(15,0); p.lineTo(0,56); p.closePath();
-		Pilot.add(new Instr(Prim.PGON, p));
-		Pilot.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-58,-58,116,116)));
+		Pilot.add(new Instr(Form.PGON, p));
+		Pilot.add(new Instr(Form.ELPS, new Ellipse2D.Double(-58,-58,116,116)));
 	}
 	public static final Symbol PortCrane = new Symbol();
 	static {
-		PortCrane.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		PortCrane.add(new Instr(Prim.EARC, new Arc2D.Double(-36.0,-36.0,72.0,72.0,70.0,-320.0,Arc2D.OPEN)));
-		PortCrane.add(new Instr(Prim.LINE, new Line2D.Double(0,0,0,-60)));
+		PortCrane.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		PortCrane.add(new Instr(Form.EARC, new Arc2D.Double(-36.0,-36.0,72.0,72.0,70.0,-320.0,Arc2D.OPEN)));
+		PortCrane.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-60)));
 	}
 	public static final Symbol Post = new Symbol();
 	static {
-		Post.add(new Instr(Prim.RSHP, new Ellipse2D.Double(-10,-10,20,20)));
+		Post.add(new Instr(Form.RSHP, new Ellipse2D.Double(-10,-10,20,20)));
 	}
 	public static final Symbol Rescue = new Symbol();
 	static{
-		Rescue.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Rescue.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-11,0); p.lineTo(0,-43); p.lineTo(11,0); p.lineTo(0,43); p.closePath();
-		Rescue.add(new Instr(Prim.PGON, p));
-		Rescue.add(new Instr(Prim.LINE, new Line2D.Double(-15,0,15,0)));
+		Rescue.add(new Instr(Form.PGON, p));
+		Rescue.add(new Instr(Form.LINE, new Line2D.Double(-15,0,15,0)));
 	}
 	public static final Symbol SignalStation = new Symbol();
 	static {
-		SignalStation.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		SignalStation.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-25,-25,50,50)));
-		SignalStation.add(new Instr(Prim.RSHP, new Ellipse2D.Double(-4,-4,8,8)));
+		SignalStation.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		SignalStation.add(new Instr(Form.ELPS, new Ellipse2D.Double(-25,-25,50,50)));
+		SignalStation.add(new Instr(Form.RSHP, new Ellipse2D.Double(-4,-4,8,8)));
 	}
 	public static final Symbol TideGauge = new Symbol();
 	static {
-		TideGauge.add(new Instr(Prim.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		TideGauge.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
-		TideGauge.add(new Instr(Prim.LINE, new Line2D.Double(-10,0,-30,0)));
-		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, 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)));
-		TideGauge.add(new Instr(Prim.LINE, new Line2D.Double(-15,-65,15,-65)));
+		TideGauge.add(new Instr(Form.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TideGauge.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
+		TideGauge.add(new Instr(Form.LINE, new Line2D.Double(-10,0,-30,0)));
+		TideGauge.add(new Instr(Form.LINE, new Line2D.Double(10,0,30,0)));
+		TideGauge.add(new Instr(Form.LINE, new Line2D.Double(0,-10,0,-80)));
+		TideGauge.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TideGauge.add(new Instr(Form.LINE, new Line2D.Double(-15,-25,15,-25)));
+		TideGauge.add(new Instr(Form.LINE, new Line2D.Double(-25,-45,25,-45)));
+		TideGauge.add(new Instr(Form.LINE, new Line2D.Double(-15,-65,15,-65)));
 	}
 }
Index: /applications/editors/josm/plugins/smed2/src/symbols/Landmarks.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/symbols/Landmarks.java	(revision 30214)
+++ /applications/editors/josm/plugins/smed2/src/symbols/Landmarks.java	(revision 30215)
@@ -21,19 +21,19 @@
 	private static final Symbol Base = new Symbol();
 	static {
-		Base.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		Base.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
-		Base.add(new Instr(Prim.LINE, new Line2D.Double(-35,0,-10,0)));
-		Base.add(new Instr(Prim.LINE, new Line2D.Double(10,0,35,0)));
+		Base.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Base.add(new Instr(Form.ELPS, new Ellipse2D.Double(-10,-10,20,20)));
+		Base.add(new Instr(Form.LINE, new Line2D.Double(-35,0,-10,0)));
+		Base.add(new Instr(Form.LINE, new Line2D.Double(10,0,35,0)));
 	}
 	
 	public static final Symbol Chimney = new Symbol();
 	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, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Chimney.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
+		Chimney.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		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);
 		p.moveTo(-10.0,-128.0); p.curveTo(-13.0,-147.0,15.0,-159.0,20.0,-148.0);
 		p.moveTo(16.0,-152.3); p.curveTo(58.0,-194.0,98.0,-87.0,16.0,-132.0);
 		p.moveTo(11.0,-128.0); p.curveTo(13.4,-132.0,20.0,-132.0,20.0,-136.0);
-		Chimney.add(new Instr(Prim.PLIN, p));
+		Chimney.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol Church = new Symbol();
@@ -44,145 +44,145 @@
 		p.lineTo(-50.0,21.0); p.lineTo(-50.0,-21.0); p.lineTo(-48.0,-21.0); p.quadTo(-48.0,-10.0,-37.0,-10.0); p.lineTo(-10.0,-10.0); p.lineTo(-10.0,-37.0);
 		p.quadTo(-10.0,-48.0,-21.0,-48.0); p.lineTo(-21.0,-50.0); p.lineTo(21.0,-50.0); p.lineTo(21.0,-48.0); p.quadTo(10.0,-48.0,10.0,-37.0); p.closePath();
-		Church.add(new Instr(Prim.PGON, p));
+		Church.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol ChurchTower = new Symbol();
 	static {
-		ChurchTower.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		ChurchTower.add(new Instr(Prim.RECT, new Rectangle2D.Double(-36,-36,72,72)));
-		ChurchTower.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-2,-2,4,4)));
+		ChurchTower.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		ChurchTower.add(new Instr(Form.RECT, new Rectangle2D.Double(-36,-36,72,72)));
+		ChurchTower.add(new Instr(Form.ELPS, new Ellipse2D.Double(-2,-2,4,4)));
 	}
 	public static final Symbol Cross = new Symbol();
 	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, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		Cross.add(new Instr(Prim.LINE, new Line2D.Double(0,-10,0,-150)));
-		Cross.add(new Instr(Prim.LINE, new Line2D.Double(-30,-115,30,-115)));
+		Cross.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
+		Cross.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Cross.add(new Instr(Form.LINE, new Line2D.Double(0,-10,0,-150)));
+		Cross.add(new Instr(Form.LINE, new Line2D.Double(-30,-115,30,-115)));
 	}
 	public static final Symbol DishAerial = new Symbol();
 	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, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL)));
+		DishAerial.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
+		DishAerial.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL)));
 		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);
 		p.moveTo(-9.5,-157.0); p.curveTo(-60.7,-125.5,-16.5,-33.9,44.9,-61.7); p.closePath();
-		DishAerial.add(new Instr(Prim.PLIN, p));
+		DishAerial.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol Dome = new Symbol();
 	static {
-		Dome.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		Dome.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-36,-36,72,72)));
-		Dome.add(new Instr(Prim.RSHP, new Ellipse2D.Double(-4,-4,8,8)));
+		Dome.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Dome.add(new Instr(Form.ELPS, new Ellipse2D.Double(-36,-36,72,72)));
+		Dome.add(new Instr(Form.RSHP, new Ellipse2D.Double(-4,-4,8,8)));
 	}
 	public static final Symbol Flagstaff = new Symbol();
 	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, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Flagstaff.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
+		Flagstaff.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		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);
-		Flagstaff.add(new Instr(Prim.PLIN, p));
+		Flagstaff.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol FlareStack = new Symbol();
 	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, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		FlareStack.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
+		FlareStack.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		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, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		FlareStack.add(new Instr(Form.PLIN, p));
+		FlareStack.add(new Instr(Form.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));
+		FlareStack.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol LandTower = new Symbol();
 	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, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		LandTower.add(new Instr(Prim.LINE, new Line2D.Double(-25,0,-15,-120)));
-		LandTower.add(new Instr(Prim.LINE, new Line2D.Double(25,0,15,-120)));
-		LandTower.add(new Instr(Prim.RECT, new Rectangle2D.Double(-15,-150,30,30)));
+		LandTower.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
+		LandTower.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		LandTower.add(new Instr(Form.LINE, new Line2D.Double(-25,0,-15,-120)));
+		LandTower.add(new Instr(Form.LINE, new Line2D.Double(25,0,15,-120)));
+		LandTower.add(new Instr(Form.RECT, new Rectangle2D.Double(-15,-150,30,30)));
 	}
 	public static final Symbol Mast = new Symbol();
 	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, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL)));
+		Mast.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
+		Mast.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-25.0,0.0); p.lineTo(0.0,-150.0); p.lineTo(25.0,0.0);
-		Mast.add(new Instr(Prim.PLIN, p));
+		Mast.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol Monument = new Symbol();
 	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, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
-		Monument.add(new Instr(Prim.LINE, new Line2D.Double(-25,0,-15,-105)));
-		Monument.add(new Instr(Prim.LINE, new Line2D.Double(25,0,15,-105)));
-		Monument.add(new Instr(Prim.EARC, new Arc2D.Double(-25.0,-150.0,50.0,50.0,233.0,-285.0,Arc2D.OPEN)));
+		Monument.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
+		Monument.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
+		Monument.add(new Instr(Form.LINE, new Line2D.Double(-25,0,-15,-105)));
+		Monument.add(new Instr(Form.LINE, new Line2D.Double(25,0,15,-105)));
+		Monument.add(new Instr(Form.EARC, new Arc2D.Double(-25.0,-150.0,50.0,50.0,233.0,-285.0,Arc2D.OPEN)));
 	}
 	public static final Symbol Platform = new Symbol();
 	static {
-		Platform.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		Platform.add(new Instr(Prim.RECT, new Rectangle2D.Double(-48,-48,96,96)));
-		Platform.add(new Instr(Prim.RSHP, new Ellipse2D.Double(-4,-4,8,8)));
+		Platform.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Platform.add(new Instr(Form.RECT, new Rectangle2D.Double(-48,-48,96,96)));
+		Platform.add(new Instr(Form.RSHP, new Ellipse2D.Double(-4,-4,8,8)));
 	}
 	public static final Symbol RadioTV = new Symbol();
 	static {
-		RadioTV.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL)));
-		RadioTV.add(new Instr(Prim.EARC, new Arc2D.Double(-30.0,-180.0,60.0,60.0,45.0,-90.0,Arc2D.OPEN)));
-		RadioTV.add(new Instr(Prim.EARC, new Arc2D.Double(-45.0,-195.0,90.0,90.0,45.0,-90.0,Arc2D.OPEN)));
-		RadioTV.add(new Instr(Prim.EARC, new Arc2D.Double(-30.0,-180.0,60.0,60.0,225.0,-90.0,Arc2D.OPEN)));
-		RadioTV.add(new Instr(Prim.EARC, new Arc2D.Double(-45.0,-195.0,90.0,90.0,225.0,-90.0,Arc2D.OPEN)));
+		RadioTV.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL)));
+		RadioTV.add(new Instr(Form.EARC, new Arc2D.Double(-30.0,-180.0,60.0,60.0,45.0,-90.0,Arc2D.OPEN)));
+		RadioTV.add(new Instr(Form.EARC, new Arc2D.Double(-45.0,-195.0,90.0,90.0,45.0,-90.0,Arc2D.OPEN)));
+		RadioTV.add(new Instr(Form.EARC, new Arc2D.Double(-30.0,-180.0,60.0,60.0,225.0,-90.0,Arc2D.OPEN)));
+		RadioTV.add(new Instr(Form.EARC, new Arc2D.Double(-45.0,-195.0,90.0,90.0,225.0,-90.0,Arc2D.OPEN)));
 	}
 	public static final Symbol Spire = new Symbol();
 	static {
-		Spire.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		Spire.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-25,-25,50,50)));
-		Spire.add(new Instr(Prim.RSHP, new Ellipse2D.Double(-4,-4,8,8)));
+		Spire.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Spire.add(new Instr(Form.ELPS, new Ellipse2D.Double(-25,-25,50,50)));
+		Spire.add(new Instr(Form.RSHP, new Ellipse2D.Double(-4,-4,8,8)));
 	}
 	public static final Symbol Minaret = new Symbol();
 	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, 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, 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)));
+		Minaret.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Landmarks.Spire, 1.0, 0, 0, null, null)));
+		Minaret.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Minaret.add(new Instr(Form.LINE, new Line2D.Double(0,-25,0,-50)));
+		Minaret.add(new Instr(Form.STRK, new BasicStroke(6, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
+		Minaret.add(new Instr(Form.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, 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, 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)));
+		Temple.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Temple.add(new Instr(Form.RECT, new Rectangle2D.Double(-25,-15,50,30)));
+		Temple.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Temple.add(new Instr(Form.LINE, new Line2D.Double(-35,-21,35,21)));
+		Temple.add(new Instr(Form.LINE, new Line2D.Double(-35,21,35,-21)));
 	}
 	public static final Symbol WaterTower = new Symbol();
 	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, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		WaterTower.add(new Instr(Prim.LINE, new Line2D.Double(-25,0,-15,-120)));
-		WaterTower.add(new Instr(Prim.LINE, new Line2D.Double(25,0,15,-120)));
-		WaterTower.add(new Instr(Prim.RECT, new Rectangle2D.Double(-25,-150,50,30)));
+		WaterTower.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
+		WaterTower.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		WaterTower.add(new Instr(Form.LINE, new Line2D.Double(-25,0,-15,-120)));
+		WaterTower.add(new Instr(Form.LINE, new Line2D.Double(25,0,15,-120)));
+		WaterTower.add(new Instr(Form.RECT, new Rectangle2D.Double(-25,-150,50,30)));
 	}
 	public static final Symbol WindMotor = new Symbol();
 	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, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
-		WindMotor.add(new Instr(Prim.LINE, new Line2D.Double(0,-10,0,-90)));
-		WindMotor.add(new Instr(Prim.LINE, new Line2D.Double(0,-90,30,-90)));
-		WindMotor.add(new Instr(Prim.LINE, new Line2D.Double(0,-90,-14,-116.6)));
-		WindMotor.add(new Instr(Prim.LINE, new Line2D.Double(0,-90,-14.3,-66.7)));
+		WindMotor.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
+		WindMotor.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
+		WindMotor.add(new Instr(Form.LINE, new Line2D.Double(0,-10,0,-90)));
+		WindMotor.add(new Instr(Form.LINE, new Line2D.Double(0,-90,30,-90)));
+		WindMotor.add(new Instr(Form.LINE, new Line2D.Double(0,-90,-14,-116.6)));
+		WindMotor.add(new Instr(Form.LINE, new Line2D.Double(0,-90,-14.3,-66.7)));
 	}
 	public static final Symbol Windmill = new Symbol();
 	static {
-		Windmill.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		Windmill.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-12,-12,24,24)));
-		Windmill.add(new Instr(Prim.LINE, new Line2D.Double(-30,-42,30,10)));
-		Windmill.add(new Instr(Prim.LINE, new Line2D.Double(-30,10,30,-42)));
+		Windmill.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Windmill.add(new Instr(Form.ELPS, new Ellipse2D.Double(-12,-12,24,24)));
+		Windmill.add(new Instr(Form.LINE, new Line2D.Double(-30,-42,30,10)));
+		Windmill.add(new Instr(Form.LINE, new Line2D.Double(-30,10,30,-42)));
 	}
 	public static final Symbol Windsock = new Symbol();
 	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, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
-		Windsock.add(new Instr(Prim.LINE, new Line2D.Double(0,-10,0,-100)));
-		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, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
+		Windsock.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Landmarks.Base, 1.0, 0, 0, null, null)));
+		Windsock.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
+		Windsock.add(new Instr(Form.LINE, new Line2D.Double(0,-10,0,-100)));
+		Windsock.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
+		Windsock.add(new Instr(Form.LINE, new Line2D.Double(0,-100,0,-150)));
+		Windsock.add(new Instr(Form.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);
 		p.lineTo(55,-95); p.lineTo(40,-102); p.lineTo(10,-100); p.moveTo(40,-102); p.lineTo(50,-120); p.moveTo(55,-95); p.lineTo(75,-97);
-		Windsock.add(new Instr(Prim.PLIN, p));
+		Windsock.add(new Instr(Form.PLIN, p));
 	}
 	
Index: /applications/editors/josm/plugins/smed2/src/symbols/Notices.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/symbols/Notices.java	(revision 30214)
+++ /applications/editors/josm/plugins/smed2/src/symbols/Notices.java	(revision 30215)
@@ -27,5 +27,5 @@
 		p.closePath(); p.moveTo(8.4,-4.3); p.curveTo(9.0,-9.3,9.0,-11.4,11.2,-13.0); p.curveTo(12.8,-15.0,12.8,-16.7,11.0,-18.6); p.curveTo(4.0,-22.2,-4.0,-22.2,-11.0,-18.6);
 		p.curveTo(-12.8,-16.7,-12.8,-15.0,-11.2,-13.0); p.curveTo(-9.0,-11.3,-8.7,-9.5,-8.4,-6.5); p.closePath();
-		Bollard.add(new Instr(Prim.PGON, p));
+		Bollard.add(new Instr(Form.PGON, p));
 	}
 	private static final Symbol Motor = new Symbol();
@@ -35,39 +35,39 @@
 		p.curveTo(-5.3,-19.2,-11.6,-18.3,-13.7,-13.7); p.curveTo(-14.3,-12.2,-14.0,-11.2,-12.5,-10.6); p.curveTo(-8.6,-9.6,-5.3,-6.0,-4.0,-3.4); p.curveTo(-5.4,-2.6,-6.2,-2.0,-6.2,0.2);
 		p.curveTo(-12.8,-1.0,-17.5,3.7,-17.5,9.3); p.curveTo(-17.5,14.7,-12.6,18.8,-8.0,17.6); p.curveTo(-7.0,17.2,-6.6,16.2,-7.2,14.6); p.curveTo(-7.7,12.4,-7.0,7.7,-5.0,4.3); p.closePath();
-		Motor.add(new Instr(Prim.PGON, p));
+		Motor.add(new Instr(Form.PGON, p));
 	}
 	private static final Symbol Rowboat = new Symbol();
 	static {
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-17.5,-2.0); p.lineTo(17.5,-2.0); p.lineTo(15.0,6.0); p.lineTo(-11.0,6.0); p.closePath();
-		Rowboat.add(new Instr(Prim.PGON, p));
-		Rowboat.add(new Instr(Prim.RSHP, new Ellipse2D.Double(-6,-17.5,6,6)));
-		Rowboat.add(new Instr(Prim.STRK, new BasicStroke(5, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
-		Rowboat.add(new Instr(Prim.LINE, new Line2D.Double(-5.5,-9,-8,0)));
-		Rowboat.add(new Instr(Prim.LINE, new Line2D.Double(-5.0,10.0,-7.5,14.0)));
-		Rowboat.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
-		Rowboat.add(new Instr(Prim.LINE, new Line2D.Double(-5.5,-9,7,-6.5)));
-		Rowboat.add(new Instr(Prim.LINE, new Line2D.Double(7.3,-7.8,-5.0,10.0)));
+		Rowboat.add(new Instr(Form.PGON, p));
+		Rowboat.add(new Instr(Form.RSHP, new Ellipse2D.Double(-6,-17.5,6,6)));
+		Rowboat.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
+		Rowboat.add(new Instr(Form.LINE, new Line2D.Double(-5.5,-9,-8,0)));
+		Rowboat.add(new Instr(Form.LINE, new Line2D.Double(-5.0,10.0,-7.5,14.0)));
+		Rowboat.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
+		Rowboat.add(new Instr(Form.LINE, new Line2D.Double(-5.5,-9,7,-6.5)));
+		Rowboat.add(new Instr(Form.LINE, new Line2D.Double(7.3,-7.8,-5.0,10.0)));
 	}
 	private static final Symbol Sailboard = new Symbol();
 	static {
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-6.0,19.0); p.quadTo(-4.0,-5,1.5,-20.0); p.quadTo(14,-7,15.5,6.5); p.quadTo(7,17,-6.0,19.0); p.closePath();
-		Sailboard.add(new Instr(Prim.PGON, p));
-		Sailboard.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
-		Sailboard.add(new Instr(Prim.LINE, new Line2D.Double(-2,20,-10,20)));
-		Sailboard.add(new Instr(Prim.LINE, new Line2D.Double(-13,2.5,-3,2.5)));
-		Sailboard.add(new Instr(Prim.RSHP, new Ellipse2D.Double(-15,-4,5,5)));
-		Sailboard.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
+		Sailboard.add(new Instr(Form.PGON, p));
+		Sailboard.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
+		Sailboard.add(new Instr(Form.LINE, new Line2D.Double(-2,20,-10,20)));
+		Sailboard.add(new Instr(Form.LINE, new Line2D.Double(-13,2.5,-3,2.5)));
+		Sailboard.add(new Instr(Form.RSHP, new Ellipse2D.Double(-15,-4,5,5)));
+		Sailboard.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
 		p = new Path2D.Double(); p.moveTo(-13,2.5); p.lineTo(-12,6.0); p.lineTo(-12,9.5);
-		Sailboard.add(new Instr(Prim.PLIN, p));
-		Sailboard.add(new Instr(Prim.STRK, new BasicStroke(3, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
+		Sailboard.add(new Instr(Form.PLIN, p));
+		Sailboard.add(new Instr(Form.STRK, new BasicStroke(3, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
 		p = new Path2D.Double(); p.moveTo(-12,9.5); p.lineTo(-7.5,13.0); p.lineTo(-6.0,19.0);
-		Sailboard.add(new Instr(Prim.PLIN, p));
+		Sailboard.add(new Instr(Form.PLIN, p));
 	}
 	private static final Symbol Sailboat = new Symbol();
 	static {
 		Path2D.Double p = new Path2D.Double(); p.moveTo(3.75,-20.5); p.lineTo(3.75,8.5); p.lineTo(-19.5,8.5); p.closePath();
-		Sailboat.add(new Instr(Prim.PGON, p));
+		Sailboat.add(new Instr(Form.PGON, p));
 		p = new Path2D.Double(); p.moveTo(-19.5,12.0); p.lineTo(19.5,12.0); p.lineTo(13.0,20.5); p.lineTo(-16.0,20.5); p.closePath();
-		Sailboat.add(new Instr(Prim.PGON, p));
+		Sailboat.add(new Instr(Form.PGON, p));
 	}
 	private static final Symbol Slipway = new Symbol();
@@ -75,551 +75,551 @@
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-17,-5.5); p.lineTo(-13.5,0); p.lineTo(4,-1.5); p.quadTo(18,-5,20,-13.5); p.closePath();
 		p.moveTo(-14,7); p.lineTo(-14,11); p.lineTo(20,11); p.lineTo(20,2); p.closePath();
-		Slipway.add(new Instr(Prim.PGON, p));
-		Slipway.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		Slipway.add(new Instr(Prim.LINE, new Line2D.Double(-14,3,20,-2.5)));
-		Slipway.add(new Instr(Prim.STRK, new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		Slipway.add(new Instr(Prim.ELPS, new Ellipse2D.Double(1,1.5,3,3)));
+		Slipway.add(new Instr(Form.PGON, p));
+		Slipway.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Slipway.add(new Instr(Form.LINE, new Line2D.Double(-14,3,20,-2.5)));
+		Slipway.add(new Instr(Form.STRK, new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Slipway.add(new Instr(Form.ELPS, new Ellipse2D.Double(1,1.5,3,3)));
 		p = new Path2D.Double(); p.moveTo(-21,8.5); p.curveTo(-17.5, 5, -17.5, 12, -13, 7.2);
-		Slipway.add(new Instr(Prim.PLIN, p));
+		Slipway.add(new Instr(Form.PLIN, p));
 	}
 	private static final Symbol Speedboat = new Symbol();
 	static {
-		Speedboat.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		Speedboat.add(new Instr(Prim.LINE, new Line2D.Double(-21,0,-17,-1)));
+		Speedboat.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Speedboat.add(new Instr(Form.LINE, new Line2D.Double(-21,0,-17,-1)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-17.5,8.5); p.curveTo(-10.5,13,-2.5,2,4,6); p.curveTo(12,2,11.5,9.5,20,6);
-		Speedboat.add(new Instr(Prim.PLIN, p));
+		Speedboat.add(new Instr(Form.PLIN, p));
 		p = new Path2D.Double(); p.moveTo(-18.5,1.5); p.lineTo(-16,6); p.curveTo(-9, 9.0, -3.5, -2.0, 4.5, 3.5); p.lineTo(14.5,0); p.quadTo(19, -3, 19.5, -9);
 		p.lineTo(9.5,-6); p.lineTo(6.5,-8); p.lineTo(2.5,-4); p.closePath();
-		Speedboat.add(new Instr(Prim.PGON, p));
-		Speedboat.add(new Instr(Prim.RSHP, new Ellipse2D.Double(-1.5,-13,5,5)));
-		Speedboat.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
-		Speedboat.add(new Instr(Prim.LINE, new Line2D.Double(-2,-7,-5,0)));
-		Speedboat.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
-		Speedboat.add(new Instr(Prim.LINE, new Line2D.Double(-2,-7,5,-5)));
+		Speedboat.add(new Instr(Form.PGON, p));
+		Speedboat.add(new Instr(Form.RSHP, new Ellipse2D.Double(-1.5,-13,5,5)));
+		Speedboat.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
+		Speedboat.add(new Instr(Form.LINE, new Line2D.Double(-2,-7,-5,0)));
+		Speedboat.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
+		Speedboat.add(new Instr(Form.LINE, new Line2D.Double(-2,-7,5,-5)));
 	}
 	private static final Symbol Turn = new Symbol();
 	static {
-		Turn.add(new Instr(Prim.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		Turn.add(new Instr(Prim.EARC, new Arc2D.Double(-9.0,-9.0,18.0,18.0,270.0,230.0,Arc2D.OPEN)));
-		Turn.add(new Instr(Prim.EARC, new Arc2D.Double(-20.0,-20.0,40.0,40.0,315.0,-280.0,Arc2D.OPEN)));
+		Turn.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Turn.add(new Instr(Form.EARC, new Arc2D.Double(-9.0,-9.0,18.0,18.0,270.0,230.0,Arc2D.OPEN)));
+		Turn.add(new Instr(Form.EARC, new Arc2D.Double(-20.0,-20.0,40.0,40.0,315.0,-280.0,Arc2D.OPEN)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(21.8,-7.0); p.lineTo(18.8,-18.2); p.lineTo(10.5,-10.0); p.closePath();
 		p.moveTo(-12.9,0.7); p.lineTo(-1.7,-2.3); p.lineTo(-9.9,-10.5); p.closePath();
-		Turn.add(new Instr(Prim.PGON, p));
+		Turn.add(new Instr(Form.PGON, p));
 	}
 	private static final Symbol Waterbike = new Symbol();
 	static {
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-17.5,13); p.curveTo(-10.5,17.5,-2.5,6.5,4,10.5); p.curveTo(12,6.5,11.5,14,20,10.5);
-		Waterbike.add(new Instr(Prim.PLIN, p));
+		Waterbike.add(new Instr(Form.PLIN, p));
 		p = new Path2D.Double(); p.moveTo(-16.5,9.5); p.lineTo(-16,10.5); p.curveTo(-9, 13.5, -3.5, 2.5, 4.5, 8); p.quadTo(15, 4, 19.5, -4); p.closePath();
 		p.moveTo(19.5,-5); p.lineTo(1, -5); p.lineTo(-4.5, -10); p.lineTo(-5.5, -10); p.lineTo(2, -2); p.lineTo(-15, 4); p.lineTo(-16, 8); p.closePath();
-		Waterbike.add(new Instr(Prim.PGON, p));
-		Waterbike.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
+		Waterbike.add(new Instr(Form.PGON, p));
+		Waterbike.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
 		p = new Path2D.Double(); p.moveTo(-7,1); p.lineTo(-7.5,-1.5); p.lineTo(-12.5,-3.5); p.lineTo(-11.5,-10.5);
-		Waterbike.add(new Instr(Prim.PLIN, p));
-		Waterbike.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
-		Waterbike.add(new Instr(Prim.LINE, new Line2D.Double(-11.5,-10.5,-3,-8.5)));
-		Waterbike.add(new Instr(Prim.RSHP, new Ellipse2D.Double(-11.5,-18,5,5)));
+		Waterbike.add(new Instr(Form.PLIN, p));
+		Waterbike.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
+		Waterbike.add(new Instr(Form.LINE, new Line2D.Double(-11.5,-10.5,-3,-8.5)));
+		Waterbike.add(new Instr(Form.RSHP, new Ellipse2D.Double(-11.5,-18,5,5)));
 	}
 	private static final Symbol Waterski = new Symbol();
 	static {
-		Waterski.add(new Instr(Prim.RSHP, new Ellipse2D.Double(12,-18,6,6)));
-		Waterski.add(new Instr(Prim.STRK, new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		Waterski.add(new Instr(Prim.LINE, new Line2D.Double(-18,-6,0,-6)));
-		Waterski.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
+		Waterski.add(new Instr(Form.RSHP, new Ellipse2D.Double(12,-18,6,6)));
+		Waterski.add(new Instr(Form.STRK, new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Waterski.add(new Instr(Form.LINE, new Line2D.Double(-18,-6,0,-6)));
+		Waterski.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(6.5,17.5); p.lineTo(-13,14.5); p.curveTo(-15,14.25,-16.0,13.6,-17.5,12.0);
-		Waterski.add(new Instr(Prim.PLIN, p));
-		Waterski.add(new Instr(Prim.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
+		Waterski.add(new Instr(Form.PLIN, p));
+		Waterski.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND)));
 		p = new Path2D.Double(); p.moveTo(-1.5,-4.0); p.lineTo(14,-7.5); p.lineTo(9.5,3.5); p.lineTo(2.0,6.0); p.lineTo(-4.4,15.8);
-		Waterski.add(new Instr(Prim.PLIN, p));
+		Waterski.add(new Instr(Form.PLIN, p));
 	}
 	private static final Symbol NoticeA = new Symbol();
 	static {
-		NoticeA.add(new Instr(Prim.FILL, new Color(0xe80000)));
-		NoticeA.add(new Instr(Prim.RSHP, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
-		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, 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, 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)));
+		NoticeA.add(new Instr(Form.FILL, new Color(0xe80000)));
+		NoticeA.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
+		NoticeA.add(new Instr(Form.FILL, Color.white));
+		NoticeA.add(new Instr(Form.RSHP, new Rectangle2D.Double(-21,-21,42,42)));
+		NoticeA.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
+		NoticeA.add(new Instr(Form.FILL, new Color(0xe80000)));
+		NoticeA.add(new Instr(Form.LINE, new Line2D.Double(-25,-25,25,25)));
+		NoticeA.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeA.add(new Instr(Form.FILL, Color.black));
+		NoticeA.add(new Instr(Form.RRCT, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
 	}
 	private static final Symbol NoticeB = new Symbol();
 	static {
-		NoticeB.add(new Instr(Prim.FILL, new Color(0xe80000)));
-		NoticeB.add(new Instr(Prim.RSHP, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
-		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, 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)));
+		NoticeB.add(new Instr(Form.FILL, new Color(0xe80000)));
+		NoticeB.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
+		NoticeB.add(new Instr(Form.FILL, Color.white));
+		NoticeB.add(new Instr(Form.RSHP, new Rectangle2D.Double(-21,-21,42,42)));
+		NoticeB.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeB.add(new Instr(Form.FILL, Color.black));
+		NoticeB.add(new Instr(Form.RRCT, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
 	}
 	private static final Symbol NoticeE = new Symbol();
 	static {
-		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, 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)));
-		NoticeE.add(new Instr(Prim.FILL, Color.white));
+		NoticeE.add(new Instr(Form.FILL, new Color(0x0000a0)));
+		NoticeE.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
+		NoticeE.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeE.add(new Instr(Form.FILL, Color.black));
+		NoticeE.add(new Instr(Form.RRCT, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
+		NoticeE.add(new Instr(Form.FILL, Color.white));
 	}
 	public static final Symbol Notice = new Symbol();
 	static {
-		Notice.add(new Instr(Prim.FILL, new Color(0xe80000)));
-		Notice.add(new Instr(Prim.RSHP, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
-		Notice.add(new Instr(Prim.FILL, new Color(0x0000a0)));
-		Notice.add(new Instr(Prim.RSHP, new Rectangle2D.Double(-21,-21,42,42)));
-		Notice.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		Notice.add(new Instr(Prim.FILL, Color.black));
-		Notice.add(new Instr(Prim.RRCT, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
+		Notice.add(new Instr(Form.FILL, new Color(0xe80000)));
+		Notice.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
+		Notice.add(new Instr(Form.FILL, new Color(0x0000a0)));
+		Notice.add(new Instr(Form.RSHP, new Rectangle2D.Double(-21,-21,42,42)));
+		Notice.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		Notice.add(new Instr(Form.FILL, Color.black));
+		Notice.add(new Instr(Form.RRCT, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
 	}
 	public static final Symbol NoticeA1 = new Symbol();
 	static {
-		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, 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)));
-		NoticeA1.add(new Instr(Prim.FILL, Color.black));
-		NoticeA1.add(new Instr(Prim.RRCT, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
+		NoticeA1.add(new Instr(Form.FILL, new Color(0xe80000)));
+		NoticeA1.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
+		NoticeA1.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeA1.add(new Instr(Form.FILL, Color.white));
+		NoticeA1.add(new Instr(Form.RSHP, new Rectangle2D.Double(-30,-10,60,20)));
+		NoticeA1.add(new Instr(Form.FILL, Color.black));
+		NoticeA1.add(new Instr(Form.RRCT, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
 	}
 	public static final Symbol NoticeA1a = new Symbol();
 	static {
-		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, 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)));
-		NoticeA1a.add(new Instr(Prim.FILL, Color.black));
-		NoticeA1a.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-30,-30,60,60)));
+		NoticeA1a.add(new Instr(Form.FILL, new Color(0xe80000)));
+		NoticeA1a.add(new Instr(Form.RSHP, new Ellipse2D.Double(-30,-30,60,60)));
+		NoticeA1a.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeA1a.add(new Instr(Form.FILL, Color.white));
+		NoticeA1a.add(new Instr(Form.RSHP, new Rectangle2D.Double(-29,-10,58,20)));
+		NoticeA1a.add(new Instr(Form.FILL, Color.black));
+		NoticeA1a.add(new Instr(Form.ELPS, new Ellipse2D.Double(-30,-30,60,60)));
 	}
 	public static final Symbol NoticeA2 = new Symbol();
 	static {
-		NoticeA2.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
-		NoticeA2.add(new Instr(Prim.FILL, Color.black));
+		NoticeA2.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
+		NoticeA2.add(new Instr(Form.FILL, Color.black));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-10,23); p.lineTo(-10,0); p.lineTo(-6,0); p.lineTo(-12.5,-8); p.lineTo(-19,0); p.lineTo(-15,0); p.lineTo(-15,23);
 		p.closePath(); p.moveTo(10,8); p.lineTo(10,-15); p.lineTo(6,-15); p.lineTo(12.5,-23); p.lineTo(19,-15); p.lineTo(15,-15); p.lineTo(15,8); p.closePath();
-		NoticeA2.add(new Instr(Prim.PGON, p));
+		NoticeA2.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeA3 = new Symbol();
 	static {
-		NoticeA3.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeA2, 1.0, 0, 0, null, null)));
+		NoticeA3.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA2, 1.0, 0, 0, null, null)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-10,12); p.lineTo(-6,12); p.lineTo(-12.5,4); p.lineTo(-19,12);
 		p.closePath(); p.moveTo(10,-3); p.lineTo(6,-3); p.lineTo(12.5,-11); p.lineTo(19,-3); p.closePath();
-		NoticeA3.add(new Instr(Prim.PGON, p));
+		NoticeA3.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeA4 = new Symbol();
 	static {
-		NoticeA4.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
-		NoticeA4.add(new Instr(Prim.FILL, Color.black));
+		NoticeA4.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
+		NoticeA4.add(new Instr(Form.FILL, Color.black));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-10,-15); p.lineTo(-10,8); p.lineTo(-6,8); p.lineTo(-12.5,16); p.lineTo(-19,8); p.lineTo(-15,8); p.lineTo(-15,-15);
 		p.closePath(); p.moveTo(10,15); p.lineTo(10,-8); p.lineTo(6,-8); p.lineTo(12.5,-16); p.lineTo(19,-8); p.lineTo(15,-8); p.lineTo(15,15); p.closePath();
-		NoticeA4.add(new Instr(Prim.PGON, p));
+		NoticeA4.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeA4_1 = new Symbol();
 	static {
-		NoticeA4_1.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeA4, 1.0, 0, 0, null, null)));
+		NoticeA4_1.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA4, 1.0, 0, 0, null, null)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-10,-4); p.lineTo(-6,-4); p.lineTo(-12.5,4); p.lineTo(-19,-4);
 		p.closePath(); p.moveTo(10,5); p.lineTo(6,5); p.lineTo(12.5,-3); p.lineTo(19,5); p.closePath();
-		NoticeA4_1.add(new Instr(Prim.PGON, p));
+		NoticeA4_1.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeA5 = new Symbol();
 	static {
-		NoticeA5.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
+		NoticeA5.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
 		Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD); p.moveTo(-5.3,14.6); p.lineTo(-5.3,4.0); p.lineTo(0.0,4.0); p.curveTo(4.2,4.0,7.4,3.5,9.4,0.0);
 		p.curveTo(11.4,-2.8,11.4,-7.2,9.4,-10.5); p.curveTo(7.4,-13.6,4.2,-14.0,0.0,-14.0); p.lineTo(-11.0,-14.0); p.lineTo(-11.0,14.6); p.closePath();
 		p.moveTo(-5.3,-1.0); p.lineTo(0.0,-1.0); p.curveTo(6.5,-1.0,6.5,-9.0,0.0,-9.0); p.lineTo(-5.3,-9.0); p.closePath();
-		NoticeA5.add(new Instr(Prim.PGON, p));
+		NoticeA5.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeA5_1 = new Symbol();
 	static {
-		NoticeA5_1.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
+		NoticeA5_1.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
 	}
 	public static final Symbol NoticeA6 = new Symbol();
 	static {
-		NoticeA6.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
-		NoticeA6.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Harbours.Anchor, 0.4, 0, 0, null, new Delta(Handle.CC, AffineTransform.getRotateInstance(Math.toRadians(180.0))))));
+		NoticeA6.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
+		NoticeA6.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Harbours.Anchor, 0.4, 0, 0, null, new Delta(Handle.CC, AffineTransform.getRotateInstance(Math.toRadians(180.0))))));
 	}
 	public static final Symbol NoticeA7 = new Symbol();
 	static {
-		NoticeA7.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
-		NoticeA7.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.Bollard, 1.0, 0, 0, null, null)));
+		NoticeA7.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
+		NoticeA7.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Bollard, 1.0, 0, 0, null, null)));
 	}
 	public static final Symbol NoticeA8 = new Symbol();
 	static {
-		NoticeA8.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
-		NoticeA8.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.Turn, 1.0, 0, 0, null, null)));
+		NoticeA8.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
+		NoticeA8.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Turn, 1.0, 0, 0, null, null)));
 	}
 	public static final Symbol NoticeA9 = new Symbol();
 	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, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeA9.add(new Instr(Prim.FILL, Color.black));
+		NoticeA9.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
+		NoticeA9.add(new Instr(Form.STRK, new BasicStroke(7, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeA9.add(new Instr(Form.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);
 		p.moveTo(-23,-3); p.curveTo(-11,-3,-12,-9,0,-9); p.curveTo(12,-9,11,-3,23,-3);
-		NoticeA9.add(new Instr(Prim.PLIN, p));
+		NoticeA9.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol NoticeA10a = new Symbol();
 	static {
-		NoticeA10a.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
-		NoticeA10a.add(new Instr(Prim.FILL, Color.white));
+		NoticeA10a.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
+		NoticeA10a.add(new Instr(Form.FILL, Color.white));
 		Path2D.Double 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.FILL, new Color(0xe80000)));
+		NoticeA10a.add(new Instr(Form.PGON, p));
+		NoticeA10a.add(new Instr(Form.FILL, new Color(0xe80000)));
 		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, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeA10a.add(new Instr(Prim.FILL, Color.black));
+		NoticeA10a.add(new Instr(Form.PGON, p));
+		NoticeA10a.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeA10a.add(new Instr(Form.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();
-		NoticeA10a.add(new Instr(Prim.PLIN, p));
+		NoticeA10a.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol NoticeA10b = new Symbol();
 	static {
-		NoticeA10b.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeA10a, 1.0, 0, 0, null, new Delta(Handle.CC, AffineTransform.getRotateInstance(Math.toRadians(180.0))))));
+		NoticeA10b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA10a, 1.0, 0, 0, null, new Delta(Handle.CC, AffineTransform.getRotateInstance(Math.toRadians(180.0))))));
 	}
 	public static final Symbol NoticeA12 = new Symbol();
 	static {
-		NoticeA12.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
-		NoticeA12.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.Motor, 1.0, 0, 0, null, null)));
+		NoticeA12.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
+		NoticeA12.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Motor, 1.0, 0, 0, null, null)));
 	}
 	public static final Symbol NoticeA13 = new Symbol();
 	static {
-		NoticeA13.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
-		NoticeA13.add(new Instr(Prim.TEXT, new Caption("SPORT", new Font("Arial", Font.BOLD, 15), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 5)))));
+		NoticeA13.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
+		NoticeA13.add(new Instr(Form.TEXT, new Caption("SPORT", new Font("Arial", Font.BOLD, 15), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 5)))));
 	}
 	public static final Symbol NoticeA14 = new Symbol();
 	static {
-		NoticeA14.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
-		NoticeA14.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.Waterski, 1.0, 0, 0, null, null)));
+		NoticeA14.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
+		NoticeA14.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Waterski, 1.0, 0, 0, null, null)));
 	}
 	public static final Symbol NoticeA15 = new Symbol();
 	static {
-		NoticeA15.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
-		NoticeA15.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.Sailboat, 1.0, 0, 0, null, null)));
+		NoticeA15.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
+		NoticeA15.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Sailboat, 1.0, 0, 0, null, null)));
 	}
 	public static final Symbol NoticeA16 = new Symbol();
 	static {
-		NoticeA16.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
-		NoticeA16.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.Rowboat, 1.0, 0, 0, null, null)));
+		NoticeA16.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
+		NoticeA16.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Rowboat, 1.0, 0, 0, null, null)));
 	}
 	public static final Symbol NoticeA17 = new Symbol();
 	static {
-		NoticeA17.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
-		NoticeA17.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.Sailboard, 1.0, 0, 0, null, null)));
+		NoticeA17.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
+		NoticeA17.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Sailboard, 1.0, 0, 0, null, null)));
 	}
 	public static final Symbol NoticeA18 = new Symbol();
 	static {
-		NoticeA18.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
-		NoticeA18.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.Speedboat, 1.0, 0, 0, null, null)));
+		NoticeA18.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
+		NoticeA18.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Speedboat, 1.0, 0, 0, null, null)));
 	}
 	public static final Symbol NoticeA19 = new Symbol();
 	static {
-		NoticeA19.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
-		NoticeA19.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.Slipway, 1.0, 0, 0, null, null)));
+		NoticeA19.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
+		NoticeA19.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Slipway, 1.0, 0, 0, null, null)));
 	}
 	public static final Symbol NoticeA20 = new Symbol();
 	static {
-		NoticeA20.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
-		NoticeA20.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.Waterbike, 1.0, 0, 0, null, null)));
+		NoticeA20.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeA, 1.0, 0, 0, null, null)));
+		NoticeA20.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Waterbike, 1.0, 0, 0, null, null)));
 	}
 	public static final Symbol NoticeB1a = new Symbol();
 	static {
-		NoticeB1a.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
+		NoticeB1a.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(21,8); p.lineTo(-8,8); p.lineTo(-8,18); p.lineTo(-21,0);
 		p.lineTo(-8,-18); p.lineTo(-8,-8); p.lineTo(21,-8); p.closePath();
-		NoticeB1a.add(new Instr(Prim.PGON, p));
+		NoticeB1a.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeB1b = new Symbol();
 	static {
-		NoticeB1b.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
+		NoticeB1b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-21,8); p.lineTo(8,8); p.lineTo(8,18); p.lineTo(21,0);
 		p.lineTo(8,-18); p.lineTo(8,-8); p.lineTo(-21,-8); p.closePath();
-		NoticeB1b.add(new Instr(Prim.PGON, p));
+		NoticeB1b.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeB2a = new Symbol();
 	static {
-		NoticeB2a.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
-		NoticeB2a.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeB2a.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
+		NoticeB2a.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(18,21); p.lineTo(18,10); p.lineTo(-15,-10); p.lineTo(-15,-15);
-		NoticeB2a.add(new Instr(Prim.PLIN, p));
+		NoticeB2a.add(new Instr(Form.PLIN, p));
 		p = new Path2D.Double(); p.moveTo(-15,-21); p.lineTo(-21,-15); p.lineTo(-9,-15); p.closePath();
-		NoticeB2a.add(new Instr(Prim.PGON, p));
+		NoticeB2a.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeB2b = new Symbol();
 	static {
-		NoticeB2b.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
-		NoticeB2b.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
-		NoticeB2b.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeB2b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
+		NoticeB2b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
+		NoticeB2b.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-18,21); p.lineTo(-18,10); p.lineTo(15,-10); p.lineTo(15,-15);
-		NoticeB2b.add(new Instr(Prim.PLIN, p));
+		NoticeB2b.add(new Instr(Form.PLIN, p));
 		p = new Path2D.Double(); p.moveTo(15,-21); p.lineTo(21,-15); p.lineTo(9,-15); p.closePath();
-		NoticeB2b.add(new Instr(Prim.PGON, p));
+		NoticeB2b.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeB3a = new Symbol();
 	static {
-		NoticeB3a.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
-		NoticeB3a.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeB3a.add(new Instr(Prim.LINE, new Line2D.Double(-15,21,-15,-15)));
+		NoticeB3a.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
+		NoticeB3a.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeB3a.add(new Instr(Form.LINE, new Line2D.Double(-15,21,-15,-15)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-15,-21); p.lineTo(-21,-15); p.lineTo(-9,-15); p.closePath();
-		NoticeB3a.add(new Instr(Prim.PGON, p));
-		NoticeB3a.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1.0f, new float[] { 5.5f, 2.4f }, 0.0f)));
-		NoticeB3a.add(new Instr(Prim.LINE, new Line2D.Double(15,-21,15,15)));
+		NoticeB3a.add(new Instr(Form.PGON, p));
+		NoticeB3a.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1.0f, new float[] { 5.5f, 2.4f }, 0.0f)));
+		NoticeB3a.add(new Instr(Form.LINE, new Line2D.Double(15,-21,15,15)));
 		p = new Path2D.Double(); p.moveTo(15,21); p.lineTo(21,15); p.lineTo(9,15); p.closePath();
-		NoticeB3a.add(new Instr(Prim.PGON, p));
+		NoticeB3a.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeB3b = new Symbol();
 	static {
-		NoticeB3b.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
-		NoticeB3b.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeB3b.add(new Instr(Prim.LINE, new Line2D.Double(15,21,15,-15)));
+		NoticeB3b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
+		NoticeB3b.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeB3b.add(new Instr(Form.LINE, new Line2D.Double(15,21,15,-15)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(15,-21); p.lineTo(21,-15); p.lineTo(9,-15); p.closePath();
-		NoticeB3b.add(new Instr(Prim.PGON, p));
-		NoticeB3b.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1.0f, new float[] { 5.5f, 2.4f }, 0.0f)));
-		NoticeB3b.add(new Instr(Prim.LINE, new Line2D.Double(-15,-21,-15,15)));
+		NoticeB3b.add(new Instr(Form.PGON, p));
+		NoticeB3b.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1.0f, new float[] { 5.5f, 2.4f }, 0.0f)));
+		NoticeB3b.add(new Instr(Form.LINE, new Line2D.Double(-15,-21,-15,15)));
 		p = new Path2D.Double(); p.moveTo(-15,21); p.lineTo(-21,15); p.lineTo(-9,15); p.closePath();
-		NoticeB3b.add(new Instr(Prim.PGON, p));
+		NoticeB3b.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeB4a = new Symbol();
 	static {
-		NoticeB4a.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeB2a, 1.0, 0, 0, null, null)));
-		NoticeB4a.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1.0f, new float[] { 5.5f, 2.4f }, 0.0f)));
+		NoticeB4a.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB2a, 1.0, 0, 0, null, null)));
+		NoticeB4a.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1.0f, new float[] { 5.5f, 2.4f }, 0.0f)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(18,-21); p.lineTo(18,-10); p.lineTo(-15,10); p.lineTo(-15,15);
-		NoticeB4a.add(new Instr(Prim.PLIN, p));
+		NoticeB4a.add(new Instr(Form.PLIN, p));
 		p = new Path2D.Double(); p.moveTo(-15,21); p.lineTo(-21,15); p.lineTo(-9,15); p.closePath();
-		NoticeB4a.add(new Instr(Prim.PGON, p));
+		NoticeB4a.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeB4b = new Symbol();
 	static {
-		NoticeB4b.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeB2b, 1.0, 0, 0, null, null)));
-		NoticeB4b.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1.0f, new float[] { 5.5f, 2.4f }, 0.0f)));
+		NoticeB4b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB2b, 1.0, 0, 0, null, null)));
+		NoticeB4b.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 1.0f, new float[] { 5.5f, 2.4f }, 0.0f)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-18,-21); p.lineTo(-18,-10); p.lineTo(15,10); p.lineTo(15,15);
-		NoticeB4b.add(new Instr(Prim.PLIN, p));
+		NoticeB4b.add(new Instr(Form.PLIN, p));
 		p = new Path2D.Double(); p.moveTo(15,21); p.lineTo(21,15); p.lineTo(9,15); p.closePath();
-		NoticeB4b.add(new Instr(Prim.PGON, p));
+		NoticeB4b.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeB5 = new Symbol();
 	static {
-		NoticeB5.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
-		NoticeB5.add(new Instr(Prim.STRK, new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
-		NoticeB5.add(new Instr(Prim.LINE, new Line2D.Double(15,0,-15,0)));
+		NoticeB5.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
+		NoticeB5.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
+		NoticeB5.add(new Instr(Form.LINE, new Line2D.Double(15,0,-15,0)));
 	}
 	public static final Symbol NoticeB6 = new Symbol();
 	static {
-		NoticeB6.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
+		NoticeB6.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
 	}
 	public static final Symbol NoticeB7 = new Symbol();
 	static {
-		NoticeB7.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
-		NoticeB7.add(new Instr(Prim.RSHP, new Ellipse2D.Double(-10,-10,20,20)));
+		NoticeB7.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
+		NoticeB7.add(new Instr(Form.RSHP, new Ellipse2D.Double(-10,-10,20,20)));
 	}
 	public static final Symbol NoticeB8 = new Symbol();
 	static {
-		NoticeB8.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
-		NoticeB8.add(new Instr(Prim.STRK, new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
-		NoticeB8.add(new Instr(Prim.LINE, new Line2D.Double(0,15,0,-15)));
+		NoticeB8.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
+		NoticeB8.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)));
+		NoticeB8.add(new Instr(Form.LINE, new Line2D.Double(0,15,0,-15)));
 	}
 	public static final Symbol NoticeB9a = new Symbol();
 	static {
-		NoticeB9a.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
-		NoticeB9a.add(new Instr(Prim.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeB9a.add(new Instr(Prim.LINE, new Line2D.Double(-21,0,21,0)));
-		NoticeB9a.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeB9a.add(new Instr(Prim.LINE, new Line2D.Double(0,21,0,0)));
+		NoticeB9a.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
+		NoticeB9a.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeB9a.add(new Instr(Form.LINE, new Line2D.Double(-21,0,21,0)));
+		NoticeB9a.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeB9a.add(new Instr(Form.LINE, new Line2D.Double(0,21,0,0)));
 	}
 	public static final Symbol NoticeB9b = new Symbol();
 	static {
-		NoticeB9b.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
-		NoticeB9b.add(new Instr(Prim.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeB9b.add(new Instr(Prim.LINE, new Line2D.Double(-21,0,21,0)));
-		NoticeB9b.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeB9b.add(new Instr(Prim.LINE, new Line2D.Double(0,21,0,-21)));
+		NoticeB9b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
+		NoticeB9b.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeB9b.add(new Instr(Form.LINE, new Line2D.Double(-21,0,21,0)));
+		NoticeB9b.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeB9b.add(new Instr(Form.LINE, new Line2D.Double(0,21,0,-21)));
 	}
 	public static final Symbol NoticeB11 = new Symbol();
 	static {
-		NoticeB11.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
-		NoticeB11.add(new Instr(Prim.TEXT, new Caption("VHF", new Font("Arial", Font.BOLD, 20), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 0)))));
+		NoticeB11.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
+		NoticeB11.add(new Instr(Form.TEXT, new Caption("VHF", new Font("Arial", Font.BOLD, 20), Color.black, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 0)))));
 	}
 	public static final Symbol NoticeC1 = new Symbol();
 	static {
-		NoticeC1.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
+		NoticeC1.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-15,21); p.lineTo(0,12); p.lineTo(15,21); p.closePath();
-		NoticeC1.add(new Instr(Prim.PGON, p));
+		NoticeC1.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeC2 = new Symbol();
 	static {
-		NoticeC2.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
+		NoticeC2.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-15,-21); p.lineTo(0,-12); p.lineTo(15,-21); p.closePath();
-		NoticeC2.add(new Instr(Prim.PGON, p));
+		NoticeC2.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeC3 = new Symbol();
 	static {
-		NoticeC3.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
+		NoticeC3.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(21,-15); p.lineTo(12,0); p.lineTo(21,15); p.closePath();
 		p.moveTo(-21,-15); p.lineTo(-12,0); p.lineTo(-21,15); p.closePath();
-		NoticeC3.add(new Instr(Prim.PGON, p));
+		NoticeC3.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeC4 = new Symbol();
 	static {
-		NoticeC4.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
+		NoticeC4.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
 	}
 	public static final Symbol NoticeC5a = new Symbol();
 	static {
-		NoticeC5a.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
+		NoticeC5a.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-21,-21); p.lineTo(10,-21); p.lineTo(21,0);	p.lineTo(10,21);	p.lineTo(-21,21); p.closePath();
-		NoticeC5a.add(new Instr(Prim.PGON, p));
+		NoticeC5a.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeC5b = new Symbol();
 	static {
-		NoticeC5b.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
+		NoticeC5b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeB, 1.0, 0, 0, null, null)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(21,-21); p.lineTo(-10,-21); p.lineTo(-21,0);	p.lineTo(-10,21);	p.lineTo(21,21); p.closePath();
-		NoticeC5b.add(new Instr(Prim.PGON, p));
+		NoticeC5b.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeD1a = new Symbol();
 	static {
-		NoticeD1a.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
-		NoticeD1a.add(new Instr(Prim.FILL, Color.yellow));
+		NoticeD1a.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
+		NoticeD1a.add(new Instr(Form.FILL, Color.yellow));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(0,-30); p.lineTo(-30,0); p.lineTo(0,30); p.lineTo(30,0); p.closePath();
-		NoticeD1a.add(new Instr(Prim.PGON, p));
-		NoticeD1a.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeD1a.add(new Instr(Prim.FILL, Color.black));
-		NoticeD1a.add(new Instr(Prim.PLIN, p));
+		NoticeD1a.add(new Instr(Form.PGON, p));
+		NoticeD1a.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeD1a.add(new Instr(Form.FILL, Color.black));
+		NoticeD1a.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol NoticeD1b = new Symbol();
 	static {
-		NoticeD1b.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
-		NoticeD1b.add(new Instr(Prim.FILL, Color.yellow));
+		NoticeD1b.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
+		NoticeD1b.add(new Instr(Form.FILL, Color.yellow));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-30,0); p.lineTo(-15,15); p.lineTo(15,-15); p.lineTo(30,0);	p.lineTo(15,15); p.lineTo(-15,-15); p.closePath();
-		NoticeD1b.add(new Instr(Prim.PGON, p));
-		NoticeD1b.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeD1b.add(new Instr(Prim.FILL, Color.black));
-		NoticeD1b.add(new Instr(Prim.PLIN, p));
+		NoticeD1b.add(new Instr(Form.PGON, p));
+		NoticeD1b.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeD1b.add(new Instr(Form.FILL, Color.black));
+		NoticeD1b.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol NoticeD2a = new Symbol();
 	static {
-		NoticeD2a.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
-		NoticeD2a.add(new Instr(Prim.FILL, Color.white));
+		NoticeD2a.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
+		NoticeD2a.add(new Instr(Form.FILL, Color.white));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(0,-30); p.lineTo(30,0); p.lineTo(0,30); p.closePath();
-		NoticeD2a.add(new Instr(Prim.PGON, p));
-		NoticeD2a.add(new Instr(Prim.FILL, new Color(0x00e800)));
+		NoticeD2a.add(new Instr(Form.PGON, p));
+		NoticeD2a.add(new Instr(Form.FILL, new Color(0x00e800)));
 		p = new Path2D.Double(); p.moveTo(0,-30); p.lineTo(30,0); p.lineTo(0,30); p.closePath();
-		NoticeD2a.add(new Instr(Prim.PGON, p));
-		NoticeD2a.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeD2a.add(new Instr(Prim.FILL, Color.black));
+		NoticeD2a.add(new Instr(Form.PGON, p));
+		NoticeD2a.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeD2a.add(new Instr(Form.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();
-		NoticeD2a.add(new Instr(Prim.PLIN, p));
+		NoticeD2a.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol NoticeD2b = new Symbol();
 	static {
-		NoticeD2b.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeD2a, 1.0, 0, 0, null, new Delta(Handle.CC, AffineTransform.getRotateInstance(Math.toRadians(180.0))))));
+		NoticeD2b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeD2a, 1.0, 0, 0, null, new Delta(Handle.CC, AffineTransform.getRotateInstance(Math.toRadians(180.0))))));
 	}
 	public static final Symbol NoticeD3a = new Symbol();
 	static {
-		NoticeD3a.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeD3a.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(28,10); p.lineTo(-10,10); p.lineTo(-10,20); p.lineTo(-28,0);
 		p.lineTo(-10,-20); p.lineTo(-10,-10); p.lineTo(28,-10); p.closePath();
-		NoticeD3a.add(new Instr(Prim.PGON, p));
+		NoticeD3a.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeD3b = new Symbol();
 	static {
-		NoticeD3b.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeD3b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-28,10); p.lineTo(10,10); p.lineTo(10,20); p.lineTo(28,0);
 		p.lineTo(10,-20); p.lineTo(10,-10); p.lineTo(-28,-10); p.closePath();
-		NoticeD3b.add(new Instr(Prim.PGON, p));
+		NoticeD3b.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeE1 = new Symbol();
 	static {
-		NoticeE1.add(new Instr(Prim.FILL, new Color(0x00e800)));
-		NoticeE1.add(new Instr(Prim.RSHP, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
-		NoticeE1.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeE1.add(new Instr(Prim.FILL, Color.white));
-		NoticeE1.add(new Instr(Prim.RSHP, new Rectangle2D.Double(-10,-30,20,60)));
-		NoticeE1.add(new Instr(Prim.FILL, Color.black));
-		NoticeE1.add(new Instr(Prim.RRCT, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
+		NoticeE1.add(new Instr(Form.FILL, new Color(0x00e800)));
+		NoticeE1.add(new Instr(Form.RSHP, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
+		NoticeE1.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeE1.add(new Instr(Form.FILL, Color.white));
+		NoticeE1.add(new Instr(Form.RSHP, new Rectangle2D.Double(-10,-30,20,60)));
+		NoticeE1.add(new Instr(Form.FILL, Color.black));
+		NoticeE1.add(new Instr(Form.RRCT, new RoundRectangle2D.Double(-30,-30,60,60,4,4)));
 	}
 	public static final Symbol NoticeE2 = new Symbol();
 	static {
-		NoticeE2.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE2.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(5,-25); p.lineTo(-10,-1); p.lineTo(10,-1); p.lineTo(-10,20);
 		p.lineTo(-7,20); p.lineTo(-12,25); p.lineTo(-16,20); p.lineTo(-13,20); p.lineTo(4,1); p.lineTo(-14,1);
 		p.lineTo(2,-25); p.closePath();
-		NoticeE2.add(new Instr(Prim.PGON, p));
+		NoticeE2.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeE3 = new Symbol();
 	static {
-		NoticeE3.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
-		NoticeE3.add(new Instr(Prim.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeE3.add(new Instr(Prim.LINE, new Line2D.Double(25,-20,25,20)));
-		NoticeE3.add(new Instr(Prim.LINE, new Line2D.Double(-25,-20,-25,20)));
-		NoticeE3.add(new Instr(Prim.LINE, new Line2D.Double(-15,-15,-15,20)));
-		NoticeE3.add(new Instr(Prim.LINE, new Line2D.Double(-5,-15,-5,20)));
-		NoticeE3.add(new Instr(Prim.LINE, new Line2D.Double(5,-15,5,20)));
-		NoticeE3.add(new Instr(Prim.LINE, new Line2D.Double(15,-15,15,20)));
-		NoticeE3.add(new Instr(Prim.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeE3.add(new Instr(Prim.LINE, new Line2D.Double(-26,18.5,26,18.5)));
-		NoticeE3.add(new Instr(Prim.LINE, new Line2D.Double(-26,-15,26,-15)));
+		NoticeE3.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE3.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeE3.add(new Instr(Form.LINE, new Line2D.Double(25,-20,25,20)));
+		NoticeE3.add(new Instr(Form.LINE, new Line2D.Double(-25,-20,-25,20)));
+		NoticeE3.add(new Instr(Form.LINE, new Line2D.Double(-15,-15,-15,20)));
+		NoticeE3.add(new Instr(Form.LINE, new Line2D.Double(-5,-15,-5,20)));
+		NoticeE3.add(new Instr(Form.LINE, new Line2D.Double(5,-15,5,20)));
+		NoticeE3.add(new Instr(Form.LINE, new Line2D.Double(15,-15,15,20)));
+		NoticeE3.add(new Instr(Form.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeE3.add(new Instr(Form.LINE, new Line2D.Double(-26,18.5,26,18.5)));
+		NoticeE3.add(new Instr(Form.LINE, new Line2D.Double(-26,-15,26,-15)));
 	}
 	public static final Symbol NoticeE4a = new Symbol();
 	static {
-		NoticeE4a.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE4a.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-20,-10); p.lineTo(-5,-10); p.lineTo(-5,-20); p.lineTo(5,-20); p.lineTo(5,-10);
 		p.lineTo(20,-10); p.lineTo(15,0); p.lineTo(-15,0); p.closePath();
 		p.moveTo(-25,5); p.lineTo(25,5); p.lineTo(25,10); p.lineTo(-25,10); p.closePath();
-		NoticeE4a.add(new Instr(Prim.PGON, p));
+		NoticeE4a.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeE4b = new Symbol();
 	static {
-		NoticeE4b.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE4b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-20,0); p.lineTo(-5,0); p.lineTo(-5,-10); p.lineTo(5,-10); p.lineTo(5,0);
 		p.lineTo(20,0); p.lineTo(15,10); p.lineTo(-15,10); p.closePath();
-		NoticeE4b.add(new Instr(Prim.PGON, p));
+		NoticeE4b.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeE5 = new Symbol();
 	static {
-		NoticeE5.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE5.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
 		Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD); p.moveTo(-5.3,14.6); p.lineTo(-5.3,4.0); p.lineTo(0.0,4.0); p.curveTo(4.2,4.0,7.4,3.5,9.4,0.0);
 		p.curveTo(11.4,-2.8,11.4,-7.2,9.4,-10.5); p.curveTo(7.4,-13.6,4.2,-14.0,0.0,-14.0); p.lineTo(-11.0,-14.0); p.lineTo(-11.0,14.6); p.closePath();
 		p.moveTo(-5.3,-1.0); p.lineTo(0.0,-1.0); p.curveTo(6.5,-1.0,6.5,-9.0,0.0,-9.0); p.lineTo(-5.3,-9.0); p.closePath();
-		NoticeE5.add(new Instr(Prim.PGON, p));
+		NoticeE5.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeE5_1 = new Symbol();
 	static {
-		NoticeE5_1.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE5_1.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
 	}
 	public static final Symbol NoticeE5_2 = new Symbol();
 	static {
-		NoticeE5_2.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE5_2.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
 	}
 	public static final Symbol NoticeE5_3 = new Symbol();
 	static {
-		NoticeE5_3.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE5_3.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
 	}
 	public static final Symbol NoticeE5_4 = new Symbol();
 	static {
-		NoticeE5_4.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE5_4.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
 		Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
 		p.moveTo(-28,25); p.lineTo(0,-28); p.lineTo(28,25); p.closePath();
-		NoticeE5_4.add(new Instr(Prim.PGON, p));
+		NoticeE5_4.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeE5_5 = new Symbol();
 	static {
-		NoticeE5_5.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE5_5.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
 		Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
 		p.moveTo(-28,25); p.lineTo(0,-28); p.lineTo(28,25); p.closePath();
 		p.moveTo(0,24); p.lineTo(-15,2); p.lineTo(15,2); p.closePath();
-		NoticeE5_5.add(new Instr(Prim.PGON, p));
+		NoticeE5_5.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeE5_6 = new Symbol();
 	static {
-		NoticeE5_6.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE5_6.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
 		Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
 		p.moveTo(-28,25); p.lineTo(0,-28); p.lineTo(28,25); p.closePath();
 		p.moveTo(0,7); p.lineTo(-10,-8); p.lineTo(10,-8); p.closePath();
 		p.moveTo(0,24); p.lineTo(-10,9); p.lineTo(10,9); p.closePath();
-		NoticeE5_6.add(new Instr(Prim.PGON, p));
+		NoticeE5_6.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeE5_7 = new Symbol();
 	static {
-		NoticeE5_7.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE5_7.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
 		Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
 		p.moveTo(-28,25); p.lineTo(0,-28); p.lineTo(28,25); p.closePath();
@@ -627,33 +627,33 @@
 		p.moveTo(0,11); p.lineTo(-8,1); p.lineTo(8,1); p.closePath();
 		p.moveTo(0,23); p.lineTo(-8,13); p.lineTo(8,13); p.closePath();
-		NoticeE5_7.add(new Instr(Prim.PGON, p));
+		NoticeE5_7.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeE5_8 = new Symbol();
 	static {
-		NoticeE5_8.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE5_8.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
 		Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
 		p.moveTo(-28,-25); p.lineTo(0,28); p.lineTo(28,-25); p.closePath();
-		NoticeE5_8.add(new Instr(Prim.PGON, p));
+		NoticeE5_8.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeE5_9 = new Symbol();
 	static {
-		NoticeE5_9.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE5_9.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
 		Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
 		p.moveTo(-28,-25); p.lineTo(0,28); p.lineTo(28,-25); p.closePath();
 		p.moveTo(0,8); p.lineTo(-15,-14); p.lineTo(15,-14); p.closePath();
-		NoticeE5_9.add(new Instr(Prim.PGON, p));
+		NoticeE5_9.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeE5_10 = new Symbol();
 	static {
-		NoticeE5_10.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE5_10.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
 		Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
 		p.moveTo(-28,-25); p.lineTo(0,28); p.lineTo(28,-25); p.closePath();
 		p.moveTo(0,-5); p.lineTo(-10,-20); p.lineTo(10,-20); p.closePath();
 		p.moveTo(0,15); p.lineTo(-10,0); p.lineTo(10,0); p.closePath();
-		NoticeE5_10.add(new Instr(Prim.PGON, p));
+		NoticeE5_10.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeE5_11 = new Symbol();
 	static {
-		NoticeE5_11.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE5_11.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
 		Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
 		p.moveTo(-28,-25); p.lineTo(0,28); p.lineTo(28,-25); p.closePath();
@@ -661,33 +661,33 @@
 		p.moveTo(0,3); p.lineTo(-8,-7); p.lineTo(8,-7); p.closePath();
 		p.moveTo(0,18); p.lineTo(-8,8); p.lineTo(8,8); p.closePath();
-		NoticeE5_11.add(new Instr(Prim.PGON, p));
+		NoticeE5_11.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeE5_12 = new Symbol();
 	static {
-		NoticeE5_12.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE5_12.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
 		Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
 		p.moveTo(-28,0); p.lineTo(0,28); p.lineTo(28,0); p.lineTo(0,-28); p.closePath();
-		NoticeE5_12.add(new Instr(Prim.PGON, p));
+		NoticeE5_12.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeE5_13 = new Symbol();
 	static {
-		NoticeE5_13.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE5_13.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
 		Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
 		p.moveTo(-28,0); p.lineTo(0,28); p.lineTo(28,0); p.lineTo(0,-28); p.closePath();
 		p.moveTo(0,15); p.lineTo(-15,-7); p.lineTo(15,-7); p.closePath();
-		NoticeE5_13.add(new Instr(Prim.PGON, p));
+		NoticeE5_13.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeE5_14 = new Symbol();
 	static {
-		NoticeE5_14.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE5_14.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
 		Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
 		p.moveTo(-28,0); p.lineTo(0,28); p.lineTo(28,0); p.lineTo(0,-28); p.closePath();
 		p.moveTo(0,0); p.lineTo(-10,-15); p.lineTo(10,-15); p.closePath();
 		p.moveTo(0,20); p.lineTo(-10,5); p.lineTo(10,5); p.closePath();
-		NoticeE5_14.add(new Instr(Prim.PGON, p));
+		NoticeE5_14.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeE5_15 = new Symbol();
 	static {
-		NoticeE5_15.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE5_15.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
 		Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
 		p.moveTo(-28,0); p.lineTo(0,28); p.lineTo(28,0); p.lineTo(0,-28); p.closePath();
@@ -695,181 +695,181 @@
 		p.moveTo(0,8); p.lineTo(-8,-2); p.lineTo(8,-2); p.closePath();
 		p.moveTo(0,23); p.lineTo(-8,13); p.lineTo(8,13); p.closePath();
-		NoticeE5_15.add(new Instr(Prim.PGON, p));
+		NoticeE5_15.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeE6 = new Symbol();
 	static {
-		NoticeE6.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
-		NoticeE6.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Harbours.Anchor, 0.4, 0, 0, null, null)));
+		NoticeE6.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE6.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Harbours.Anchor, 0.4, 0, 0, null, null)));
 	}
 	public static final Symbol NoticeE7 = new Symbol();
 	static {
-		NoticeE7.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
-		NoticeE7.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.Bollard, 1.0, 0, 0, null, null)));
+		NoticeE7.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE7.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Bollard, 1.0, 0, 0, null, null)));
 	}
 	public static final Symbol NoticeE7_1 = new Symbol();
 	static {
-		NoticeE7_1.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
-		NoticeE7_1.add(new Instr(Prim.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeE7_1.add(new Instr(Prim.LINE, new Line2D.Double(20,25,20,-10)));
-		NoticeE7_1.add(new Instr(Prim.LINE, new Line2D.Double(22,-8,-15,-20)));
-		NoticeE7_1.add(new Instr(Prim.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeE7_1.add(new Instr(Prim.LINE, new Line2D.Double(20,8,0,-15)));
+		NoticeE7_1.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE7_1.add(new Instr(Form.STRK, new BasicStroke(5, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeE7_1.add(new Instr(Form.LINE, new Line2D.Double(20,25,20,-10)));
+		NoticeE7_1.add(new Instr(Form.LINE, new Line2D.Double(22,-8,-15,-20)));
+		NoticeE7_1.add(new Instr(Form.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeE7_1.add(new Instr(Form.LINE, new Line2D.Double(20,8,0,-15)));
 		Path2D.Double p = new Path2D.Double(); p.setWindingRule(GeneralPath.WIND_EVEN_ODD);
 		p.moveTo(-17,2); p.quadTo(-5,0,7,2); p.lineTo(9,12); p.lineTo(7,20); p.lineTo(6,20); p.lineTo(6,23); p.lineTo(3,23); p.lineTo(3,20);
 		p.quadTo(-5,22,-13,20); p.lineTo(-13,23); p.lineTo(-16,23); p.lineTo(-16,20); p.lineTo(-17,20); p.lineTo(-19,12); p.closePath();
 		p.moveTo(-15,4); p.quadTo(-3,2,5,4); p.lineTo(6,11); p.quadTo(-5,9,-16,11); p.closePath();
-		NoticeE7_1.add(new Instr(Prim.PGON, p));
-		NoticeE7_1.add(new Instr(Prim.FILL, new Color(0x0000a0)));
-		NoticeE7_1.add(new Instr(Prim.RSHP, new Ellipse2D.Double(-16,13,4,4)));
-		NoticeE7_1.add(new Instr(Prim.RSHP, new Ellipse2D.Double(2,13,4,4)));
+		NoticeE7_1.add(new Instr(Form.PGON, p));
+		NoticeE7_1.add(new Instr(Form.FILL, new Color(0x0000a0)));
+		NoticeE7_1.add(new Instr(Form.RSHP, new Ellipse2D.Double(-16,13,4,4)));
+		NoticeE7_1.add(new Instr(Form.RSHP, new Ellipse2D.Double(2,13,4,4)));
 	}
 	public static final Symbol NoticeE8 = new Symbol();
 	static {
-		NoticeE8.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
-		NoticeE8.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.Turn, 1.0, 0, 0, null, null)));
+		NoticeE8.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE8.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Turn, 1.0, 0, 0, null, null)));
 	}
 	public static final Symbol NoticeE9a = new Symbol();
 	static {
-		NoticeE9a.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
-		NoticeE9a.add(new Instr(Prim.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeE9a.add(new Instr(Prim.LINE, new Line2D.Double(0,29,0,-29)));
-		NoticeE9a.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeE9a.add(new Instr(Prim.LINE, new Line2D.Double(-29,0,29,0)));
+		NoticeE9a.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE9a.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeE9a.add(new Instr(Form.LINE, new Line2D.Double(0,29,0,-29)));
+		NoticeE9a.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeE9a.add(new Instr(Form.LINE, new Line2D.Double(-29,0,29,0)));
 	}
 	public static final Symbol NoticeE9b = new Symbol();
 	static {
-		NoticeE9b.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
-		NoticeE9b.add(new Instr(Prim.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeE9b.add(new Instr(Prim.LINE, new Line2D.Double(0,29,0,-29)));
-		NoticeE9b.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeE9b.add(new Instr(Prim.LINE, new Line2D.Double(-2,0,29,0)));
+		NoticeE9b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE9b.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeE9b.add(new Instr(Form.LINE, new Line2D.Double(0,29,0,-29)));
+		NoticeE9b.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeE9b.add(new Instr(Form.LINE, new Line2D.Double(-2,0,29,0)));
 	}
 	public static final Symbol NoticeE9c = new Symbol();
 	static {
-		NoticeE9c.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
-		NoticeE9c.add(new Instr(Prim.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeE9c.add(new Instr(Prim.LINE, new Line2D.Double(0,29,0,-29)));
-		NoticeE9c.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeE9c.add(new Instr(Prim.LINE, new Line2D.Double(2,0,-29,0)));
+		NoticeE9c.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE9c.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeE9c.add(new Instr(Form.LINE, new Line2D.Double(0,29,0,-29)));
+		NoticeE9c.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeE9c.add(new Instr(Form.LINE, new Line2D.Double(2,0,-29,0)));
 	}
 	public static final Symbol NoticeE9d = new Symbol();
 	static {
-		NoticeE9d.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
-		NoticeE9d.add(new Instr(Prim.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeE9d.add(new Instr(Prim.LINE, new Line2D.Double(0,29,0,-4)));
-		NoticeE9d.add(new Instr(Prim.LINE, new Line2D.Double(-4,0,29,0)));
-		NoticeE9d.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeE9d.add(new Instr(Prim.LINE, new Line2D.Double(0,-29,0,2)));
+		NoticeE9d.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE9d.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeE9d.add(new Instr(Form.LINE, new Line2D.Double(0,29,0,-4)));
+		NoticeE9d.add(new Instr(Form.LINE, new Line2D.Double(-4,0,29,0)));
+		NoticeE9d.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeE9d.add(new Instr(Form.LINE, new Line2D.Double(0,-29,0,2)));
 	}
 	public static final Symbol NoticeE9e = new Symbol();
 	static {
-		NoticeE9e.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
-		NoticeE9e.add(new Instr(Prim.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeE9e.add(new Instr(Prim.LINE, new Line2D.Double(0,29,0,-4)));
-		NoticeE9e.add(new Instr(Prim.LINE, new Line2D.Double(4,0,-29,0)));
-		NoticeE9e.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeE9e.add(new Instr(Prim.LINE, new Line2D.Double(0,-29,0,2)));
+		NoticeE9e.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE9e.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeE9e.add(new Instr(Form.LINE, new Line2D.Double(0,29,0,-4)));
+		NoticeE9e.add(new Instr(Form.LINE, new Line2D.Double(4,0,-29,0)));
+		NoticeE9e.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeE9e.add(new Instr(Form.LINE, new Line2D.Double(0,-29,0,2)));
 	}
 	public static final Symbol NoticeE9f = new Symbol();
 	static {
-		NoticeE9f.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
-		NoticeE9f.add(new Instr(Prim.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeE9f.add(new Instr(Prim.LINE, new Line2D.Double(0,29,0,-4)));
-		NoticeE9f.add(new Instr(Prim.LINE, new Line2D.Double(-4,0,29,0)));
-		NoticeE9f.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeE9f.add(new Instr(Prim.LINE, new Line2D.Double(2,0,-29,0)));
+		NoticeE9f.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE9f.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeE9f.add(new Instr(Form.LINE, new Line2D.Double(0,29,0,-4)));
+		NoticeE9f.add(new Instr(Form.LINE, new Line2D.Double(-4,0,29,0)));
+		NoticeE9f.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeE9f.add(new Instr(Form.LINE, new Line2D.Double(2,0,-29,0)));
 	}
 	public static final Symbol NoticeE9g = new Symbol();
 	static {
-		NoticeE9g.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
-		NoticeE9g.add(new Instr(Prim.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeE9g.add(new Instr(Prim.LINE, new Line2D.Double(0,29,0,-4)));
-		NoticeE9g.add(new Instr(Prim.LINE, new Line2D.Double(4,0,-29,0)));
-		NoticeE9g.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeE9g.add(new Instr(Prim.LINE, new Line2D.Double(-2,0,29,0)));
+		NoticeE9g.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE9g.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeE9g.add(new Instr(Form.LINE, new Line2D.Double(0,29,0,-4)));
+		NoticeE9g.add(new Instr(Form.LINE, new Line2D.Double(4,0,-29,0)));
+		NoticeE9g.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeE9g.add(new Instr(Form.LINE, new Line2D.Double(-2,0,29,0)));
 	}
 	public static final Symbol NoticeE9h = new Symbol();
 	static {
-		NoticeE9h.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
-		NoticeE9h.add(new Instr(Prim.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeE9h.add(new Instr(Prim.LINE, new Line2D.Double(0,29,0,-4)));
-		NoticeE9h.add(new Instr(Prim.LINE, new Line2D.Double(-4,0,29,0)));
-		NoticeE9h.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeE9h.add(new Instr(Prim.LINE, new Line2D.Double(0,-29,0,2)));
-		NoticeE9h.add(new Instr(Prim.LINE, new Line2D.Double(2,0,-29,0)));
+		NoticeE9h.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE9h.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeE9h.add(new Instr(Form.LINE, new Line2D.Double(0,29,0,-4)));
+		NoticeE9h.add(new Instr(Form.LINE, new Line2D.Double(-4,0,29,0)));
+		NoticeE9h.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeE9h.add(new Instr(Form.LINE, new Line2D.Double(0,-29,0,2)));
+		NoticeE9h.add(new Instr(Form.LINE, new Line2D.Double(2,0,-29,0)));
 	}
 	public static final Symbol NoticeE9i = new Symbol();
 	static {
-		NoticeE9i.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
-		NoticeE9i.add(new Instr(Prim.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeE9i.add(new Instr(Prim.LINE, new Line2D.Double(0,29,0,-4)));
-		NoticeE9i.add(new Instr(Prim.LINE, new Line2D.Double(4,0,-29,0)));
-		NoticeE9i.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeE9i.add(new Instr(Prim.LINE, new Line2D.Double(0,-29,0,2)));
-		NoticeE9i.add(new Instr(Prim.LINE, new Line2D.Double(-2,0,29,0)));
+		NoticeE9i.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE9i.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeE9i.add(new Instr(Form.LINE, new Line2D.Double(0,29,0,-4)));
+		NoticeE9i.add(new Instr(Form.LINE, new Line2D.Double(4,0,-29,0)));
+		NoticeE9i.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeE9i.add(new Instr(Form.LINE, new Line2D.Double(0,-29,0,2)));
+		NoticeE9i.add(new Instr(Form.LINE, new Line2D.Double(-2,0,29,0)));
 	}
 	public static final Symbol NoticeE10a = new Symbol();
 	static {
-		NoticeE10a.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
-		NoticeE10a.add(new Instr(Prim.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeE10a.add(new Instr(Prim.LINE, new Line2D.Double(-29,0,29,0)));
-		NoticeE10a.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeE10a.add(new Instr(Prim.LINE, new Line2D.Double(0,29,0,-29)));
+		NoticeE10a.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE10a.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeE10a.add(new Instr(Form.LINE, new Line2D.Double(-29,0,29,0)));
+		NoticeE10a.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeE10a.add(new Instr(Form.LINE, new Line2D.Double(0,29,0,-29)));
 	}
 	public static final Symbol NoticeE10b = new Symbol();
 	static {
-		NoticeE10b.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
-		NoticeE10b.add(new Instr(Prim.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeE10b.add(new Instr(Prim.LINE, new Line2D.Double(-29,0,29,0)));
-		NoticeE10b.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeE10b.add(new Instr(Prim.LINE, new Line2D.Double(0,29,0,-2)));
+		NoticeE10b.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE10b.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeE10b.add(new Instr(Form.LINE, new Line2D.Double(-29,0,29,0)));
+		NoticeE10b.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeE10b.add(new Instr(Form.LINE, new Line2D.Double(0,29,0,-2)));
 	}
 	public static final Symbol NoticeE10c = new Symbol();
 	static {
-		NoticeE10c.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
-		NoticeE10c.add(new Instr(Prim.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeE10c.add(new Instr(Prim.LINE, new Line2D.Double(0,-29,0,4)));
-		NoticeE10c.add(new Instr(Prim.LINE, new Line2D.Double(-4,0,29,0)));
-		NoticeE10c.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeE10c.add(new Instr(Prim.LINE, new Line2D.Double(0,29,0,-2)));
+		NoticeE10c.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE10c.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeE10c.add(new Instr(Form.LINE, new Line2D.Double(0,-29,0,4)));
+		NoticeE10c.add(new Instr(Form.LINE, new Line2D.Double(-4,0,29,0)));
+		NoticeE10c.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeE10c.add(new Instr(Form.LINE, new Line2D.Double(0,29,0,-2)));
 	}
 	public static final Symbol NoticeE10d = new Symbol();
 	static {
-		NoticeE10d.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
-		NoticeE10d.add(new Instr(Prim.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeE10d.add(new Instr(Prim.LINE, new Line2D.Double(0,-29,0,4)));
-		NoticeE10d.add(new Instr(Prim.LINE, new Line2D.Double(4,0,-29,0)));
-		NoticeE10d.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeE10d.add(new Instr(Prim.LINE, new Line2D.Double(0,29,0,-2)));
+		NoticeE10d.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE10d.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeE10d.add(new Instr(Form.LINE, new Line2D.Double(0,-29,0,4)));
+		NoticeE10d.add(new Instr(Form.LINE, new Line2D.Double(4,0,-29,0)));
+		NoticeE10d.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeE10d.add(new Instr(Form.LINE, new Line2D.Double(0,29,0,-2)));
 	}
 	public static final Symbol NoticeE10e = new Symbol();
 	static {
-	NoticeE10e.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
-	NoticeE10e.add(new Instr(Prim.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-	NoticeE10e.add(new Instr(Prim.LINE, new Line2D.Double(0,-29,0,4)));
-	NoticeE10e.add(new Instr(Prim.LINE, new Line2D.Double(-4,0,29,0)));
-	NoticeE10e.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-	NoticeE10e.add(new Instr(Prim.LINE, new Line2D.Double(0,29,0,-2)));
-	NoticeE10e.add(new Instr(Prim.LINE, new Line2D.Double(2,0,-29,0)));
+	NoticeE10e.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+	NoticeE10e.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+	NoticeE10e.add(new Instr(Form.LINE, new Line2D.Double(0,-29,0,4)));
+	NoticeE10e.add(new Instr(Form.LINE, new Line2D.Double(-4,0,29,0)));
+	NoticeE10e.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+	NoticeE10e.add(new Instr(Form.LINE, new Line2D.Double(0,29,0,-2)));
+	NoticeE10e.add(new Instr(Form.LINE, new Line2D.Double(2,0,-29,0)));
 	}
 	public static final Symbol NoticeE10f = new Symbol();
 	static {
-		NoticeE10f.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
-		NoticeE10f.add(new Instr(Prim.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeE10f.add(new Instr(Prim.LINE, new Line2D.Double(0,-29,0,4)));
-		NoticeE10f.add(new Instr(Prim.LINE, new Line2D.Double(4,0,-29,0)));
-		NoticeE10f.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		NoticeE10f.add(new Instr(Prim.LINE, new Line2D.Double(0,29,0,-2)));
-		NoticeE10f.add(new Instr(Prim.LINE, new Line2D.Double(-2,0,29,0)));
+		NoticeE10f.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE10f.add(new Instr(Form.STRK, new BasicStroke(8, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeE10f.add(new Instr(Form.LINE, new Line2D.Double(0,-29,0,4)));
+		NoticeE10f.add(new Instr(Form.LINE, new Line2D.Double(4,0,-29,0)));
+		NoticeE10f.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		NoticeE10f.add(new Instr(Form.LINE, new Line2D.Double(0,29,0,-2)));
+		NoticeE10f.add(new Instr(Form.LINE, new Line2D.Double(-2,0,29,0)));
 	}
 	public static final Symbol NoticeE11 = new Symbol();
 	static {
-		NoticeE11.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
-		NoticeE11.add(new Instr(Prim.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
-		NoticeE11.add(new Instr(Prim.LINE, new Line2D.Double(-27,-27,27,27)));
+		NoticeE11.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE11.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)));
+		NoticeE11.add(new Instr(Form.LINE, new Line2D.Double(-27,-27,27,27)));
 	}
 	public static final Symbol NoticeE13 = new Symbol();
 	static {
-		NoticeE13.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE13.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-4,-16); p.lineTo(9,-16); p.lineTo(9,-14); p.lineTo(3.5,-14); p.lineTo(3.5,-7); p.lineTo(5,-7);
 		p.lineTo(5,1); p.lineTo(6.5,1); p.lineTo(6.5,5); p.lineTo(17.5,5); p.lineTo(17.5,1); p.lineTo(19,1); p.lineTo(19,15); p.lineTo(17.5,15);
@@ -877,64 +877,64 @@
 		p.quadTo(-13.5,10,-13.5,16); p.lineTo(-19,16); p.quadTo(-19,5,-9,5); p.lineTo(-2,5); p.lineTo(-2,1); p.lineTo(0,1); p.lineTo(0,-7);
 		p.lineTo(1.5,-7); p.lineTo(1.5,-14); p.lineTo(-4,-14); p.closePath();
-		NoticeE13.add(new Instr(Prim.PGON, p));
+		NoticeE13.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeE14 = new Symbol();
 	static {
-		NoticeE14.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE14.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-18,-18); p.lineTo(-11,-7); p.lineTo(-9,-10); p.lineTo(-14,-18); p.closePath();
 		p.moveTo(9.5,7); p.lineTo(22.5,9); p.lineTo(21.5,5.5); p.lineTo(12,4); p.closePath();
 		p.moveTo(-19,-16.5); p.lineTo(-13,-6.5); p.quadTo(-15.5,-2,-12.5,0); p.lineTo(4,11); p.quadTo(7,13,10,9); p.lineTo(21.5,11);
 		p.curveTo(15.5,23,1,18.5,-9,12); p.curveTo(-18,6,-28.5,-7,-19,-16.5); p.closePath();
-		NoticeE14.add(new Instr(Prim.PGON, p));
+		NoticeE14.add(new Instr(Form.PGON, p));
 	}
 	public static final Symbol NoticeE15 = new Symbol();
 	static {
-		NoticeE15.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
-		NoticeE15.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.Motor, 1.0, 0, 0, null, null)));
+		NoticeE15.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE15.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Motor, 1.0, 0, 0, null, null)));
 	}
 	public static final Symbol NoticeE16 = new Symbol();
 	static {
-		NoticeE16.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
-		NoticeE16.add(new Instr(Prim.TEXT, new Caption("SPORT", new Font("Arial", Font.BOLD, 15), Color.white, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 5)))));
+		NoticeE16.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE16.add(new Instr(Form.TEXT, new Caption("SPORT", new Font("Arial", Font.BOLD, 15), Color.white, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 5)))));
 	}
 	public static final Symbol NoticeE17 = new Symbol();
 	static {
-		NoticeE17.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
-		NoticeE17.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.Waterski, 1.0, 0, 0, null, null)));
+		NoticeE17.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE17.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Waterski, 1.0, 0, 0, null, null)));
 	}
 	public static final Symbol NoticeE18 = new Symbol();
 	static {
-		NoticeE18.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
-		NoticeE18.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.Sailboat, 1.0, 0, 0, null, null)));
+		NoticeE18.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE18.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Sailboat, 1.0, 0, 0, null, null)));
 	}
 	public static final Symbol NoticeE19 = new Symbol();
 	static {
-		NoticeE19.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
-		NoticeE19.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.Rowboat, 1.0, 0, 0, null, null)));
+		NoticeE19.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE19.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Rowboat, 1.0, 0, 0, null, null)));
 	}
 	public static final Symbol NoticeE20 = new Symbol();
 	static {
-		NoticeE20.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
-		NoticeE20.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.Sailboard, 1.0, 0, 0, null, null)));
+		NoticeE20.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE20.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Sailboard, 1.0, 0, 0, null, null)));
 	}
 	public static final Symbol NoticeE21 = new Symbol();
 	static {
-		NoticeE21.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
-		NoticeE21.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.Speedboat, 1.0, 0, 0, null, null)));
+		NoticeE21.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE21.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Speedboat, 1.0, 0, 0, null, null)));
 	}
 	public static final Symbol NoticeE22 = new Symbol();
 	static {
-		NoticeE22.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
-		NoticeE22.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.Slipway, 1.0, 0, 0, null, null)));
+		NoticeE22.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE22.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Slipway, 1.0, 0, 0, null, null)));
 	}
 	public static final Symbol NoticeE23 = new Symbol();
 	static {
-		NoticeE23.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
-		NoticeE23.add(new Instr(Prim.TEXT, new Caption("VHF", new Font("Arial", Font.BOLD, 20), Color.white, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 0)))));
+		NoticeE23.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE23.add(new Instr(Form.TEXT, new Caption("VHF", new Font("Arial", Font.BOLD, 20), Color.white, new Delta(Handle.BC, AffineTransform.getTranslateInstance(0, 0)))));
 	}
 	public static final Symbol NoticeE24 = new Symbol();
 	static {
-		NoticeE24.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
-		NoticeE24.add(new Instr(Prim.SYMB, new Symbols.SubSymbol(Notices.Waterbike, 1.0, 0, 0, null, null)));
+		NoticeE24.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.NoticeE, 1.0, 0, 0, null, null)));
+		NoticeE24.add(new Instr(Form.SYMB, new Symbols.SubSymbol(Notices.Waterbike, 1.0, 0, 0, null, null)));
 	}
 
@@ -973,11 +973,11 @@
 	public static final Symbol NoticeBnank = new Symbol();
 	static {
-		NoticeBnank.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
+		NoticeBnank.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-30,60,60)));
 		Symbol colours = new Symbol();
 		Path2D.Double p = new Path2D.Double(); p.moveTo(0.0,-80.0); p.lineTo(-15.0,-47.0); p.lineTo(15.0,-47.0); p.closePath();
-		colours.add(new Instr(Prim.P1, p));
+		colours.add(new Instr(Form.P1, p));
 		p = new Path2D.Double(); p.moveTo(0.0,-10.0); p.lineTo(-15.0,-43.0); p.lineTo(15.0,-43.0); p.closePath();
-		colours.add(new Instr(Prim.P2, p));
-		NoticeBnank.add(new Instr(Prim.COLR, colours));
+		colours.add(new Instr(Form.P2, p));
+		NoticeBnank.add(new Instr(Form.COLR, colours));
 	}
 	public static final Symbol NoticeBlmhr = new Symbol();
Index: /applications/editors/josm/plugins/smed2/src/symbols/Symbols.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/symbols/Symbols.java	(revision 30214)
+++ /applications/editors/josm/plugins/smed2/src/symbols/Symbols.java	(revision 30215)
@@ -20,5 +20,5 @@
 public class Symbols {
 
-	public enum Prim {
+	public enum Form {
 		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
 	}
@@ -33,8 +33,8 @@
 
 	public static class Instr {
-		public Prim type;
+		public Form type;
 		public Object params;
 
-		public Instr(Prim itype, Object iparams) {
+		public Instr(Form itype, Object iparams) {
 			type = itype;
 			params = iparams;
Index: /applications/editors/josm/plugins/smed2/src/symbols/Topmarks.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/symbols/Topmarks.java	(revision 30214)
+++ /applications/editors/josm/plugins/smed2/src/symbols/Topmarks.java	(revision 30215)
@@ -22,201 +22,201 @@
 	public static final Symbol TopBoard = new Symbol();
 	static {
-		TopBoard.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-20,-80,40,80)));
+		TopBoard.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20,-80,40,80)));
 		Symbol colours = new Symbol();
 		Path2D.Double 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();
-		colours.add(new Instr(Prim.P1, p));
-		TopBoard.add(new Instr(Prim.COLR, colours));
-		TopBoard.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		TopBoard.add(new Instr(Prim.FILL, Color.black));
+		colours.add(new Instr(Form.P1, p));
+		TopBoard.add(new Instr(Form.COLR, colours));
+		TopBoard.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopBoard.add(new Instr(Form.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();
-		TopBoard.add(new Instr(Prim.PLIN, p));
+		TopBoard.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol TopCan = new Symbol();
 	static {
-		TopCan.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-20,-80,40,80)));
+		TopCan.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20,-80,40,80)));
 		Symbol colours = new Symbol();
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-12.0,-15.0); p.lineTo(-12.0,-48.0); p.lineTo(12.0,-48.0); p.lineTo(12.0,-15.0); p.closePath();
-		colours.add(new Instr(Prim.P1, p));
-		TopCan.add(new Instr(Prim.COLR, colours));
-		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)));
+		colours.add(new Instr(Form.P1, p));
+		TopCan.add(new Instr(Form.COLR, colours));
+		TopCan.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopCan.add(new Instr(Form.FILL, Color.black));
+		TopCan.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-15)));
 		p = new Path2D.Double(); p.moveTo(-12.0,-15.0); p.lineTo(-12.0,-48.0); p.lineTo(12.0,-48.0); p.lineTo(12.0,-15.0); p.closePath();
-		TopCan.add(new Instr(Prim.PLIN, p));
+		TopCan.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol TopCone = new Symbol();
 	static {
-		TopCone.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-20,-80,40,80)));
+		TopCone.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20,-80,40,80)));
 		Symbol colours = new Symbol();
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-15.0,-15.0); p.lineTo(0.0,-45.0); p.lineTo(15.0,-15.0); p.closePath();
-		colours.add(new Instr(Prim.P1, p));
-		TopCone.add(new Instr(Prim.COLR, colours));
-		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)));
+		colours.add(new Instr(Form.P1, p));
+		TopCone.add(new Instr(Form.COLR, colours));
+		TopCone.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopCone.add(new Instr(Form.FILL, Color.black));
+		TopCone.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-15)));
 		p = new Path2D.Double(); p.moveTo(-15.0,-15.0); p.lineTo(0.0,-45.0); p.lineTo(15.0,-15.0); p.closePath();
-		TopCone.add(new Instr(Prim.PLIN, p));
+		TopCone.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol TopCross = new Symbol();
 	static {
-		TopCross.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-30,-80,60,80)));
+		TopCross.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-80,60,80)));
 		Symbol colours = new Symbol();
 		Path2D.Double 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();
-		colours.add(new Instr(Prim.P1, p));
-		TopCross.add(new Instr(Prim.COLR, colours));
-		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, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		colours.add(new Instr(Form.P1, p));
+		TopCross.add(new Instr(Form.COLR, colours));
+		TopCross.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopCross.add(new Instr(Form.FILL, Color.black));
+		TopCross.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-15)));
+		TopCross.add(new Instr(Form.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();
-		TopCross.add(new Instr(Prim.PLIN, p));
+		TopCross.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol TopEast = new Symbol();
 	static {
-		TopEast.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-30,-80,60,80)));
+		TopEast.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-80,60,80)));
 		Symbol colours = new Symbol();
 		Path2D.Double p = new Path2D.Double(); p.moveTo(0.0,-80.0); p.lineTo(-15.0,-47.0); p.lineTo(15.0,-47.0); p.closePath();
-		colours.add(new Instr(Prim.P1, p));
-		p = new Path2D.Double(); p.moveTo(0.0,-10.0); p.lineTo(-15.0,-43.0); p.lineTo(15.0,-43.0); p.closePath();
-		colours.add(new Instr(Prim.P2, p));
-		TopEast.add(new Instr(Prim.COLR, colours));
-		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, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		colours.add(new Instr(Form.P1, p));
+		p = new Path2D.Double(); p.moveTo(0.0,-10.0); p.lineTo(-15.0,-43.0); p.lineTo(15.0,-43.0); p.closePath();
+		colours.add(new Instr(Form.P2, p));
+		TopEast.add(new Instr(Form.COLR, colours));
+		TopEast.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopEast.add(new Instr(Form.FILL, Color.black));
+		TopEast.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-10)));
+		TopEast.add(new Instr(Form.LINE, new Line2D.Double(0,-43,0,-47)));
+		TopEast.add(new Instr(Form.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();
-		TopEast.add(new Instr(Prim.PLIN, p));
+		TopEast.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol TopIsol = new Symbol();
 	static {
-		TopIsol.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-30,-80,60,80)));
+		TopIsol.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-80,60,80)));
 		Symbol colours = new Symbol();
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-13.0,-55.0); p.curveTo(-13.0, -72.3, 13.0, -72.3, 13.0,-55.0); p.curveTo(13.0, -37.7, -13.0, -37.7, -13.0,-55.0); p.closePath();
-		colours.add(new Instr(Prim.P1, p));
+		colours.add(new Instr(Form.P1, p));
 		p = new Path2D.Double(); p.moveTo(-13.0,-28.0); p.curveTo(-13.0, -45.3, 13.0, -45.3, 13.0,-28.0); p.curveTo(13.0, -10.7, -13.0, -10.7, -13.0,-28.0); p.closePath();
-		colours.add(new Instr(Prim.P2, p));
-		TopIsol.add(new Instr(Prim.COLR, colours));
-		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, 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)));
+		colours.add(new Instr(Form.P2, p));
+		TopIsol.add(new Instr(Form.COLR, colours));
+		TopIsol.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopIsol.add(new Instr(Form.FILL, Color.black));
+		TopIsol.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-15)));
+		TopIsol.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopIsol.add(new Instr(Form.ELPS, new Ellipse2D.Double(-13,-41,26,26)));
+		TopIsol.add(new Instr(Form.ELPS, new Ellipse2D.Double(-13,-68,26,26)));
 	}
 	public static final Symbol TopMooring = new Symbol();
 	static {
-		TopMooring.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-30,-80,60,80)));
-		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)));
-		TopMooring.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-8.5,-25,17,17)));
+		TopMooring.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-80,60,80)));
+		TopMooring.add(new Instr(Form.STRK, new BasicStroke(3, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopMooring.add(new Instr(Form.FILL, Color.black));
+		TopMooring.add(new Instr(Form.ELPS, new Ellipse2D.Double(-1.5,-6,3,3)));
+		TopMooring.add(new Instr(Form.ELPS, new Ellipse2D.Double(-8.5,-25,17,17)));
 	}
 	public static final Symbol TopNorth = new Symbol();
 	static {
-		TopNorth.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-30,-80,60,80)));
+		TopNorth.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-80,60,80)));
 		Symbol colours = new Symbol();
 		Path2D.Double p = new Path2D.Double(); p.moveTo(0.0,-78.0); p.lineTo(-15.0,-45.0); p.lineTo(15.0,-45.0); p.closePath();
-		colours.add(new Instr(Prim.P1, p));
-		p = new Path2D.Double(); p.moveTo(-15.0,-10.0); p.lineTo(0.0,-43.0); p.lineTo(15.0,-10.0); p.closePath();
-		colours.add(new Instr(Prim.P2, p));
-		TopNorth.add(new Instr(Prim.COLR, colours));
-		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, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		colours.add(new Instr(Form.P1, p));
+		p = new Path2D.Double(); p.moveTo(-15.0,-10.0); p.lineTo(0.0,-43.0); p.lineTo(15.0,-10.0); p.closePath();
+		colours.add(new Instr(Form.P2, p));
+		TopNorth.add(new Instr(Form.COLR, colours));
+		TopNorth.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopNorth.add(new Instr(Form.FILL, Color.black));
+		TopNorth.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-10)));
+		TopNorth.add(new Instr(Form.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();
-		TopNorth.add(new Instr(Prim.PLIN, p));
+		TopNorth.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol TopSouth = new Symbol();
 	static {
-		TopSouth.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-30,-80,60,80)));
+		TopSouth.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-80,60,80)));
 		Symbol colours = new Symbol();
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-15.0,-78.0); p.lineTo(0.0,-45.0);  p.lineTo(15.0,-78.0); p.closePath();
-		colours.add(new Instr(Prim.P1, p));
-		p = new Path2D.Double(); p.moveTo(0.0,-10.0); p.lineTo(-15.0,-43.0); p.lineTo(15.0,-43.0); p.closePath();
-		colours.add(new Instr(Prim.P2, p));
-		TopSouth.add(new Instr(Prim.COLR, colours));
-		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, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		colours.add(new Instr(Form.P1, p));
+		p = new Path2D.Double(); p.moveTo(0.0,-10.0); p.lineTo(-15.0,-43.0); p.lineTo(15.0,-43.0); p.closePath();
+		colours.add(new Instr(Form.P2, p));
+		TopSouth.add(new Instr(Form.COLR, colours));
+		TopSouth.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopSouth.add(new Instr(Form.FILL, Color.black));
+		TopSouth.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-10)));
+		TopSouth.add(new Instr(Form.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();
-		TopSouth.add(new Instr(Prim.PLIN, p));
+		TopSouth.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol TopSphere = new Symbol();
 	static {
-		TopSphere.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-30,-80,60,80)));
+		TopSphere.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-80,60,80)));
 		Symbol colours = new Symbol();
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-14.0,-28.0); p.curveTo(-14.0,-46.7,14.0,-46.7,14.0,-28.0); p.curveTo(14.0,-9.3,-14.0,-9.3,-14.0,-28.0); p.closePath();
-		colours.add(new Instr(Prim.P1, p));
-		TopSphere.add(new Instr(Prim.COLR, colours));
-		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, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		TopSphere.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-14,-42,28,28)));
+		colours.add(new Instr(Form.P1, p));
+		TopSphere.add(new Instr(Form.COLR, colours));
+		TopSphere.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopSphere.add(new Instr(Form.FILL, Color.black));
+		TopSphere.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-15)));
+		TopSphere.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopSphere.add(new Instr(Form.ELPS, new Ellipse2D.Double(-14,-42,28,28)));
 	}
 	public static final Symbol TopSquare = new Symbol();
 	static {
-		TopSquare.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-20,-80,40,80)));
+		TopSquare.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20,-80,40,80)));
 		Symbol colours = new Symbol();
 		Path2D.Double 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();
-		colours.add(new Instr(Prim.P1, p));
-		TopSquare.add(new Instr(Prim.COLR, colours));
-		TopSquare.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		TopSquare.add(new Instr(Prim.FILL, Color.black));
+		colours.add(new Instr(Form.P1, p));
+		TopSquare.add(new Instr(Form.COLR, colours));
+		TopSquare.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopSquare.add(new Instr(Form.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();
-		TopSquare.add(new Instr(Prim.PLIN, p));
+		TopSquare.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol TopTriangle = new Symbol();
 	static {
-		TopTriangle.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-20,-80,40,80)));
+		TopTriangle.add(new Instr(Form.BBOX, new Rectangle2D.Double(-20,-80,40,80)));
 		Symbol colours = new Symbol();
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-15.0,-1.0); p.lineTo(0.0,-29.0); p.lineTo(15.0,-1.0); p.closePath();
-		colours.add(new Instr(Prim.P1, p));
-		TopTriangle.add(new Instr(Prim.COLR, colours));
-		TopTriangle.add(new Instr(Prim.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
-		TopTriangle.add(new Instr(Prim.FILL, Color.black));
+		colours.add(new Instr(Form.P1, p));
+		TopTriangle.add(new Instr(Form.COLR, colours));
+		TopTriangle.add(new Instr(Form.STRK, new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopTriangle.add(new Instr(Form.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();
-		TopTriangle.add(new Instr(Prim.PLIN, p));
+		TopTriangle.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol TopWest = new Symbol();
 	static {
-		TopWest.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-30,-80,60,80)));
+		TopWest.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-80,60,80)));
 		Symbol colours = new Symbol();
 		Path2D.Double p = new Path2D.Double(); p.moveTo(-15.0,-78.0); p.lineTo(0.0,-45.0);  p.lineTo(15.0,-78.0); p.closePath();
-		colours.add(new Instr(Prim.P1, p));
-		p = new Path2D.Double(); p.moveTo(-15.0,-10.0); p.lineTo(0.0,-43.0); p.lineTo(15.0,-10.0); p.closePath();
-		colours.add(new Instr(Prim.P2, p));
-		TopWest.add(new Instr(Prim.COLR, colours));
-		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, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		colours.add(new Instr(Form.P1, p));
+		p = new Path2D.Double(); p.moveTo(-15.0,-10.0); p.lineTo(0.0,-43.0); p.lineTo(15.0,-10.0); p.closePath();
+		colours.add(new Instr(Form.P2, p));
+		TopWest.add(new Instr(Form.COLR, colours));
+		TopWest.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopWest.add(new Instr(Form.FILL, Color.black));
+		TopWest.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-10)));
+		TopWest.add(new Instr(Form.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();
-		TopWest.add(new Instr(Prim.PLIN, p));
+		TopWest.add(new Instr(Form.PLIN, p));
 	}
 	public static final Symbol TopX = new Symbol();
 	static {
-		TopX.add(new Instr(Prim.BBOX, new Rectangle2D.Double(-30,-80,60,80)));
+		TopX.add(new Instr(Form.BBOX, new Rectangle2D.Double(-30,-80,60,80)));
 		Symbol colours = new Symbol();
 		Path2D.Double 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();
-		colours.add(new Instr(Prim.P1, p));
-		TopX.add(new Instr(Prim.COLR, colours));
-		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, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		colours.add(new Instr(Form.P1, p));
+		TopX.add(new Instr(Form.COLR, colours));
+		TopX.add(new Instr(Form.STRK, new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopX.add(new Instr(Form.FILL, Color.black));
+		TopX.add(new Instr(Form.LINE, new Line2D.Double(0,0,0,-27)));
+		TopX.add(new Instr(Form.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();
-		TopX.add(new Instr(Prim.PLIN, p));
+		TopX.add(new Instr(Form.PLIN, p));
 	}
 	
