Index: /applications/editors/josm/plugins/smed2/src/render/Renderer.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/render/Renderer.java	(revision 30316)
+++ /applications/editors/josm/plugins/smed2/src/render/Renderer.java	(revision 30317)
@@ -252,5 +252,6 @@
 								}
 								if (!gap) {
-									Symbols.drawSymbol(g2, symbol, sScale, curr.getX(), curr.getY(), new Scheme(col), new Delta(Handle.BC, AffineTransform.getRotateInstance(Math.atan2((succ.getY() - curr.getY()), (succ.getX() - curr.getX())) + Math.toRadians(90))));
+									Symbols.drawSymbol(g2, symbol, sScale, curr.getX(), curr.getY(), new Scheme(col),
+											new Delta(Handle.BC, AffineTransform.getRotateInstance(Math.atan2((succ.getY() - curr.getY()), (succ.getX() - curr.getX())) + Math.toRadians(90))));
 								}
 								if (space > 0)
@@ -494,6 +495,8 @@
 		if (!str.isEmpty()) {
 			g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+	    g2.setPaint(colour);
 	    FontRenderContext frc = g2.getFontRenderContext();
-	    GlyphVector gv = font.deriveFont((float)(font.getSize())).createGlyphVector(frc, (" " + str));
+	    GlyphVector gv = font.deriveFont((float)(font.getSize()*sScale)).createGlyphVector(frc, (" " + str));
+	    GeneralPath path = new GeneralPath();
 			Point2D prev = new Point2D.Double();
 			Point2D next = new Point2D.Double();
@@ -503,5 +506,5 @@
 			double angle = 0;
 			int index = 0;
-			double gwidth = offset * (feature.geom.length * context.mile(feature) - (gv.getLogicalBounds().getWidth() * sScale));
+			double gwidth = offset * (feature.geom.length * context.mile(feature) - gv.getLogicalBounds().getWidth()) + gv.getGlyphMetrics(0).getAdvance();
 			GeomIterator git = map.new GeomIterator(feature.geom);
 			while (git.hasComp()) {
@@ -535,15 +538,15 @@
 									succ = new Point2D.Double(curr.getX() + (gwidth * Math.cos(angle)), curr.getY() + (gwidth * Math.sin(angle)));
 								}
-								Symbol symbol = new Symbol();
 								Shape shape = gv.getGlyphOutline(index);
-								Rectangle2D bounds = shape.getBounds2D();
-								symbol.add(new Instr(Form.BBOX, new Rectangle2D.Double(bounds.getX(), (bounds.getY() - dy), bounds.getWidth(), bounds.getHeight())));
-								symbol.add(new Instr(Form.PGON, new Path2D.Double(shape)));
-								Symbols.drawSymbol(g2, symbol, sScale, curr.getX(), curr.getY(), new Scheme(colour),
-										new Delta((dy < 0) ? Handle.BL : Handle.TL, AffineTransform.getRotateInstance(Math.atan2((succ.getY() - curr.getY()), (succ.getX() - curr.getX())))));
+								Point2D point = gv.getGlyphPosition(index);
+								AffineTransform at = AffineTransform.getTranslateInstance(curr.getX(), curr.getY());
+								at.rotate(Math.atan2((succ.getY() - curr.getY()), (succ.getX() - curr.getX())));
+								at.translate(-point.getX(), -point.getY() + (dy * sScale));
+								path.append(at.createTransformedShape(shape), false);
 								curr = succ;
 								if (++index < gv.getNumGlyphs()) {
-									gwidth = gv.getGlyphMetrics(index).getAdvance() * sScale;
+									gwidth = gv.getGlyphMetrics(index).getAdvance();
 								} else {
+									g2.fill(path);
 									return;
 								}
Index: /applications/editors/josm/plugins/smed2/src/render/Rules.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/render/Rules.java	(revision 30316)
+++ /applications/editors/josm/plugins/smed2/src/render/Rules.java	(revision 30317)
@@ -985,10 +985,10 @@
 					Renderer.lineVector(feature, new LineStyle(Color.black, 10, new float[] { 40, 40 }, null));
 					if (Renderer.zoom >= 15)
-						Renderer.lineText(feature, "(covers)", new Font("Arial", Font.PLAIN, 80), Color.black, 0.5, 20);
+						Renderer.lineText(feature, "(covers)", new Font("Arial", Font.PLAIN, 80), Color.black, 0.5, 80);
 				} else {
 					Renderer.lineVector(feature, new LineStyle(Color.black, 10, null, null));
 				}
 				if (Renderer.zoom >= 15)
-					Renderer.lineText(feature, "Training Wall", new Font("Arial", Font.PLAIN, 80), Color.black, 0.5, -20);
+					Renderer.lineText(feature, "Training Wall", new Font("Arial", Font.PLAIN, 80), Color.black, 0.5, -30);
 			}
 		}
Index: /applications/editors/josm/plugins/smed2/src/render/Signals.java
===================================================================
--- /applications/editors/josm/plugins/smed2/src/render/Signals.java	(revision 30316)
+++ /applications/editors/josm/plugins/smed2/src/render/Signals.java	(revision 30317)
@@ -185,10 +185,9 @@
 		
 	}
-	
-	private static Point2D.Double radial(Snode centre, double radius, double angle) {
-		Point2D origin = Renderer.context.getPoint(centre);
-		double mile = Renderer.context.getPoint(Renderer.map.new Snode((centre.lat + Math.toRadians(1/60)), centre.lon)).getY() - origin.getY();
-		return new Point2D.Double(origin.getX() - (radius * mile * Math.sin(angle)), origin.getY() - (radius * mile * Math.cos(angle)));
-	}
+
+//	private static Point2D.Double radial(Feature feature, Snode centre, double radius, double angle) {
+//		Point2D origin = Renderer.context.getPoint(centre);
+//		return new Point2D.Double(origin.getX() - (radius * Renderer.context.mile(feature) * Math.sin(angle)), origin.getY() - (radius * Renderer.context.mile(feature) * Math.cos(angle)));
+//	}
 /*
 void renderFlare(Item_t *item) {
