Index: applications/editors/josm/plugins/smed2/src/symbols/Buoys.java
===================================================================
--- applications/editors/josm/plugins/smed2/src/symbols/Buoys.java	(revision 29081)
+++ applications/editors/josm/plugins/smed2/src/symbols/Buoys.java	(revision 29082)
@@ -122,4 +122,22 @@
     Float.add(new Instr(Prim.PLIN, p));
 	}
+	
+	public static final ArrayList<Instr> Ice = new ArrayList<Instr>();
+	static {
+		ArrayList<Instr> colours = new ArrayList<Instr>();
+		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.0f, 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)));
+		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));
+		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));
+	}
 
 	public static final ArrayList<Instr> Pillar = new ArrayList<Instr>();
Index: applications/editors/josm/plugins/smed2/src/symbols/Symbols.java
===================================================================
--- applications/editors/josm/plugins/smed2/src/symbols/Symbols.java	(revision 29081)
+++ applications/editors/josm/plugins/smed2/src/symbols/Symbols.java	(revision 29082)
@@ -23,6 +23,5 @@
 
 	public enum Prim {
-		BBOX, STRK, COLR, FILL, LINE, RECT, RRCT, ELPS, EARC, PLIN, PGON, SYMB,
-		P1, H2, H3, H4, H5, V2, D2, D3, D4, B2, S2, S3, S4, C2, X2
+		BBOX, STRK, COLR, FILL, LINE, RECT, RRCT, ELPS, EARC, PLIN, PGON, SYMB, P1, P2, H2, H3, H4, H5, V2, D2, D3, D4, B2, S2, S3, S4, C2, X2
 	}
 
@@ -31,9 +30,9 @@
 	}
 
-	public static final double symbolScale[] = { 256.0, 128.0, 64.0, 32.0, 16.0, 8.0, 4.0, 2.0, 1.0,
-		0.61, 0.372, 0.227, 0.138, 0.0843, 0.0514, 0.0313, 0.0191, 0.0117, 0.007, 0.138 };
-
-	public static final double textScale[] = { 256.0, 128.0, 64.0, 32.0, 16.0, 8.0, 4.0, 2.0, 1.0,
-		0.5556, 0.3086, 0.1714, 0.0953, 0.0529, 0.0294, 0.0163, 0.0091, 0.0050, 0.0028, 0.0163 };
+	public static final double symbolScale[] = { 256.0, 128.0, 64.0, 32.0, 16.0, 8.0, 4.0, 2.0, 1.0, 0.61, 0.372, 0.227, 0.138,
+			0.0843, 0.0514, 0.0313, 0.0191, 0.0117, 0.007, 0.138 };
+
+	public static final double textScale[] = { 256.0, 128.0, 64.0, 32.0, 16.0, 8.0, 4.0, 2.0, 1.0, 0.5556, 0.3086, 0.1714, 0.0953,
+			0.0529, 0.0294, 0.0163, 0.0091, 0.0050, 0.0028, 0.0163 };
 
 	private static final EnumMap<ColCOL, Color> bodyColours = new EnumMap<ColCOL, Color>(ColCOL.class);
@@ -86,6 +85,10 @@
 
 	public static void drawSymbol(Graphics2D g2, ArrayList<Instr> symbol, int zoom, double x, double y, Delta dd, Scheme cs) {
-		int pn = cs.pat.size();
-		int cn = cs.col.size() - pn + 1;
+		int pn = 0;
+		int cn = 0;
+		if (cs != null) {
+			pn = cs.pat.size();
+			cn = cs.col.size() - ((pn != 0) ? pn - 1 : 0);
+		}
 		AffineTransform savetr = g2.getTransform();
 		g2.translate(x, y);
@@ -94,5 +97,5 @@
 			switch (item.type) {
 			case BBOX:
-				Rectangle bbox = (Rectangle)item.params;
+				Rectangle bbox = (Rectangle) item.params;
 				double dx = 0.0;
 				double dy = 0.0;
@@ -100,6 +103,6 @@
 					switch (dd.h) {
 					case CC:
-						dx = bbox.x + (bbox.width/2.0);
-						dy = bbox.y - (bbox.height/2.0);
+						dx = bbox.x + (bbox.width / 2.0);
+						dy = bbox.y - (bbox.height / 2.0);
 						break;
 					case TL:
@@ -112,14 +115,14 @@
 						break;
 					case TC:
-						dx = bbox.x + (bbox.width/2.0);
+						dx = bbox.x + (bbox.width / 2.0);
 						dy = bbox.y;
 						break;
 					case LC:
 						dx = bbox.x;
-						dy = bbox.y - (bbox.height/2.0);
+						dy = bbox.y - (bbox.height / 2.0);
 						break;
 					case RC:
 						dx = bbox.x + bbox.width;
-						dy = bbox.y - (bbox.height/2.0);
+						dy = bbox.y - (bbox.height / 2.0);
 						break;
 					case BL:
@@ -132,5 +135,5 @@
 						break;
 					case BC:
-						dx = bbox.x + (bbox.width/2.0);
+						dx = bbox.x + (bbox.width / 2.0);
 						dy = bbox.y - bbox.height;
 						break;
@@ -150,4 +153,14 @@
 							}
 							break;
+						case P2:
+							if (cn > 0) {
+								if (cn > 1) {
+									g2.setPaint(bodyColours.get(cs.col.get(1)));
+								} else {
+									g2.setPaint(bodyColours.get(cs.col.get(0)));
+								}
+								g2.fill((Path2D.Double) patch.params);
+							}
+							break;
 						case H2:
 							if ((cn > 1) && (cs.pat.get(0) == ColPAT.PAT_HORI)) {
@@ -211,4 +224,7 @@
 				g2.fill((Path2D.Double) item.params);
 				break;
+			case SYMB:
+				drawSymbol(g2, (ArrayList<Instr>) item.params, zoom, 0.0, 0.0, null, null);
+				break;
 			}
 		}
Index: applications/editors/josm/plugins/smed2/src/symbols/Topmarks.java
===================================================================
--- applications/editors/josm/plugins/smed2/src/symbols/Topmarks.java	(revision 29081)
+++ applications/editors/josm/plugins/smed2/src/symbols/Topmarks.java	(revision 29082)
@@ -13,4 +13,6 @@
 import java.awt.Color;
 import java.awt.Rectangle;
+import java.awt.geom.Ellipse2D;
+import java.awt.geom.Line2D;
 import java.awt.geom.Path2D;
 import java.util.ArrayList;
@@ -21,16 +23,216 @@
 public class Topmarks {
 
+	public static final ArrayList<Instr> TopBoard = new ArrayList<Instr>();
+	static {
+		TopBoard.add(new Instr(Prim.BBOX, new Rectangle(-20,80,40,80)));
+		ArrayList<Instr> colours = new ArrayList<Instr>();
+		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.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopBoard.add(new Instr(Prim.FILL, Color.black));
+		p = new Path2D.Double(); p.moveTo(-19.0,-2.0); p.lineTo(-19.0,-39.0); p.lineTo(19.0,-39.0); p.lineTo(19.0,-2.0); p.closePath();
+		TopBoard.add(new Instr(Prim.PLIN, p));
+	}
+
+	public static final ArrayList<Instr> TopCan = new ArrayList<Instr>();
+	static {
+		TopCan.add(new Instr(Prim.BBOX, new Rectangle(-20,80,40,80)));
+		ArrayList<Instr> colours = new ArrayList<Instr>();
+		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.0f, 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)));
+		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));
+	}
+
 	public static final ArrayList<Instr> TopCone = new ArrayList<Instr>();
 	static {
 		TopCone.add(new Instr(Prim.BBOX, new Rectangle(-20,80,40,80)));
 		ArrayList<Instr> colours = new ArrayList<Instr>();
-		Path2D.Double p = new Path2D.Double(); p.moveTo(0.0,0.0); p.lineTo(0.0,-15.0); p.moveTo(-15.0,-15.0); p.lineTo(0.0,-45.0); p.lineTo(15.0,-15.0); p.closePath();
+		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.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
 		TopCone.add(new Instr(Prim.FILL, Color.black));
-		p = new Path2D.Double(); p.moveTo(0.0,0.0); p.lineTo(0.0,-15.0); 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.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));
 	}
 
+	public static final ArrayList<Instr> TopCross = new ArrayList<Instr>();
+	static {
+		TopCross.add(new Instr(Prim.BBOX, new Rectangle(-30,80,60,80)));
+		ArrayList<Instr> colours = new ArrayList<Instr>();
+		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.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopCross.add(new Instr(Prim.FILL, Color.black));
+		TopCross.add(new Instr(Prim.LINE, new Line2D.Double(0,0,0,-15)));
+		TopCross.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		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));
+	}
+
+	public static final ArrayList<Instr> TopEast = new ArrayList<Instr>();
+	static {
+		TopEast.add(new Instr(Prim.BBOX, new Rectangle(-30,80,60,80)));
+		ArrayList<Instr> colours = new ArrayList<Instr>();
+		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.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopEast.add(new Instr(Prim.FILL, Color.black));
+		TopEast.add(new Instr(Prim.LINE, new Line2D.Double(0,0,0,-10)));
+		TopEast.add(new Instr(Prim.LINE, new Line2D.Double(0,-43,0,-47)));
+		TopEast.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		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));
+	}
+
+	public static final ArrayList<Instr> TopIsol = new ArrayList<Instr>();
+	static {
+		TopIsol.add(new Instr(Prim.BBOX, new Rectangle(-30,80,60,80)));
+		ArrayList<Instr> colours = new ArrayList<Instr>();
+		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));
+		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.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopIsol.add(new Instr(Prim.FILL, Color.black));
+		TopIsol.add(new Instr(Prim.LINE, new Line2D.Double(0,0,0,-15)));
+		TopIsol.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopIsol.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-13,-41,26,26)));
+		TopIsol.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-13,-68,26,26)));
+	}
+
+	public static final ArrayList<Instr> TopMooring = new ArrayList<Instr>();
+	static {
+		TopMooring.add(new Instr(Prim.BBOX, new Rectangle(-30,80,60,80)));
+		TopMooring.add(new Instr(Prim.STRK, new BasicStroke(3.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopMooring.add(new Instr(Prim.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)));
+	}
+
+	public static final ArrayList<Instr> TopNorth = new ArrayList<Instr>();
+	static {
+		TopNorth.add(new Instr(Prim.BBOX, new Rectangle(-30,80,60,80)));
+		ArrayList<Instr> colours = new ArrayList<Instr>();
+		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.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopNorth.add(new Instr(Prim.FILL, Color.black));
+		TopNorth.add(new Instr(Prim.LINE, new Line2D.Double(0,0,0,-10)));
+		TopNorth.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		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));
+	}
+
+	public static final ArrayList<Instr> TopSouth = new ArrayList<Instr>();
+	static {
+		TopSouth.add(new Instr(Prim.BBOX, new Rectangle(-30,80,60,80)));
+		ArrayList<Instr> colours = new ArrayList<Instr>();
+		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.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopSouth.add(new Instr(Prim.FILL, Color.black));
+		TopSouth.add(new Instr(Prim.LINE, new Line2D.Double(0,0,0,-10)));
+		TopSouth.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		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));
+	}
+
+	public static final ArrayList<Instr> TopSphere = new ArrayList<Instr>();
+	static {
+		TopSphere.add(new Instr(Prim.BBOX, new Rectangle(-30,80,60,80)));
+		ArrayList<Instr> colours = new ArrayList<Instr>();
+		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.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopSphere.add(new Instr(Prim.FILL, Color.black));
+		TopSphere.add(new Instr(Prim.LINE, new Line2D.Double(0,0,0,-15)));
+		TopSphere.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopSphere.add(new Instr(Prim.ELPS, new Ellipse2D.Double(-14,-42,28,28)));
+	}
+
+	public static final ArrayList<Instr> TopSquare = new ArrayList<Instr>();
+	static {
+		TopSquare.add(new Instr(Prim.BBOX, new Rectangle(-20,80,40,80)));
+		ArrayList<Instr> colours = new ArrayList<Instr>();
+		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.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopSquare.add(new Instr(Prim.FILL, Color.black));
+		p = new Path2D.Double(); p.moveTo(-13.0,-1.0); p.lineTo(-13.0,-27.0); p.lineTo(13.0,-27.0); p.lineTo(13.0,-1.0); p.closePath();
+		TopSquare.add(new Instr(Prim.PLIN, p));
+	}
+
+	public static final ArrayList<Instr> TopTriangle = new ArrayList<Instr>();
+	static {
+		TopTriangle.add(new Instr(Prim.BBOX, new Rectangle(-20,80,40,80)));
+		ArrayList<Instr> colours = new ArrayList<Instr>();
+		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.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopTriangle.add(new Instr(Prim.FILL, Color.black));
+		p = new Path2D.Double(); p.moveTo(-15.0,-1.0); p.lineTo(0.0,-29.0); p.lineTo(15.0,-1.0); p.closePath();
+		TopTriangle.add(new Instr(Prim.PLIN, p));
+	}
+
+	public static final ArrayList<Instr> TopWest = new ArrayList<Instr>();
+	static {
+		TopWest.add(new Instr(Prim.BBOX, new Rectangle(-30,80,60,80)));
+		ArrayList<Instr> colours = new ArrayList<Instr>();
+		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.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopWest.add(new Instr(Prim.FILL, Color.black));
+		TopWest.add(new Instr(Prim.LINE, new Line2D.Double(0,0,0,-10)));
+		TopWest.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		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));
+	}
+
+	public static final ArrayList<Instr> TopX = new ArrayList<Instr>();
+	static {
+		TopX.add(new Instr(Prim.BBOX, new Rectangle(-30,80,60,80)));
+		ArrayList<Instr> colours = new ArrayList<Instr>();
+		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.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		TopX.add(new Instr(Prim.FILL, Color.black));
+		TopX.add(new Instr(Prim.LINE, new Line2D.Double(0,0,0,-27)));
+		TopX.add(new Instr(Prim.STRK, new BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER)));
+		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));
+	}
 }
