Index: applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelChan.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelChan.java	(revision 26977)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelChan.java	(revision 26978)
@@ -128,4 +128,5 @@
 					topmarkButton.setBorderPainted(false);
 				}
+				dlg.mark.paintSign();
 			}
 		}
Index: applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelCol.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelCol.java	(revision 26977)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelCol.java	(revision 26978)
@@ -58,4 +58,5 @@
 							syncStack();
 						}
+						dlg.mark.paintSign();
 					}
 				} else {
@@ -80,4 +81,5 @@
 				}
 			}
+			dlg.mark.paintSign();
 		}
 	};
Index: applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelHaz.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelHaz.java	(revision 26977)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelHaz.java	(revision 26978)
@@ -82,4 +82,5 @@
 				}
 				dlg.panelMain.panelMore.panelPat.panelCol.syncStack();
+				dlg.mark.paintSign();
 			}
 		}
Index: applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelPort.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelPort.java	(revision 26977)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelPort.java	(revision 26978)
@@ -95,4 +95,5 @@
 					dlg.panelMain.litButton.setEnabled(false);
 				}
+				dlg.mark.paintSign();
 			}
 		}
Index: applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelSaw.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelSaw.java	(revision 26977)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelSaw.java	(revision 26978)
@@ -52,4 +52,5 @@
 				}
 				dlg.panelMain.panelMore.panelPat.panelCol.syncStack();
+				dlg.mark.paintSign();
 			}
 		}
Index: applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelStbd.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelStbd.java	(revision 26977)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelStbd.java	(revision 26978)
@@ -95,4 +95,5 @@
 					dlg.panelMain.litButton.setEnabled(false);
 				}
+				dlg.mark.paintSign();
 			}
 		}
Index: applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelTop.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelTop.java	(revision 26977)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelTop.java	(revision 26978)
@@ -45,4 +45,5 @@
 				}
 				mooringTopButton.setBorderPainted(mooringTopButton.isSelected());
+				dlg.mark.paintSign();
 			}
 		}
Index: applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/SeaMark.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/SeaMark.java	(revision 26977)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/SeaMark.java	(revision 26978)
@@ -30,5 +30,5 @@
 		}
 	}
-	
+
 	public enum Reg {
 		A, B, C
@@ -160,13 +160,5 @@
 
 	public enum Cat {
-		UNKNOWN, LAM_PORT, LAM_STBD, LAM_PPORT, LAM_PSTBD,
-		CAM_NORTH, CAM_EAST, CAM_SOUTH, CAM_WEST,
-		ACH_URST, ACH_DEEP, ACH_TANK, ACH_EXPL, ACH_QUAR, ACH_SPLN, ACH_SCAN, ACH_SCMO, ACH_T24H, ACH_TLIM,
-		SPM_UNKN, SPM_WARN, SPM_CHBF, SPM_YCHT, SPM_CABL, SPM_OFAL, SPM_ODAS, SPM_RECN,
-		SPM_MOOR, SPM_LNBY, SPM_LDNG, SPM_NOTC, SPM_TSS, SPM_FOUL, SPM_DIVE, SPM_FRRY, SPM_ANCH,
-		MOR_DLPN, MOR_DDPN, MOR_BLRD, MOR_WALL, MOR_POST, MOR_CHWR, MOR_BUOY,
-		SIS_PTCL, SIS_PTED, SIS_IPT, SIS_BRTH, SIS_DOCK, SIS_LOCK, SIS_FBAR, SIS_BRDG, SIS_DRDG, SIS_TRFC,
-		SIS_DNGR, SIS_OBST, SIS_CABL, SIS_MILY, SIS_DSTR, SIS_WTHR, SIS_STRM, SIS_ICE, SIS_TIME, SIS_TIDE, SIS_TSTM, SIS_TGAG, SIS_TSCL, SIS_DIVE, SIS_LGAG,
-		LIT_DIRF, LIT_LEDG
+		UNKNOWN, LAM_PORT, LAM_STBD, LAM_PPORT, LAM_PSTBD, CAM_NORTH, CAM_EAST, CAM_SOUTH, CAM_WEST, ACH_URST, ACH_DEEP, ACH_TANK, ACH_EXPL, ACH_QUAR, ACH_SPLN, ACH_SCAN, ACH_SCMO, ACH_T24H, ACH_TLIM, SPM_UNKN, SPM_WARN, SPM_CHBF, SPM_YCHT, SPM_CABL, SPM_OFAL, SPM_ODAS, SPM_RECN, SPM_MOOR, SPM_LNBY, SPM_LDNG, SPM_NOTC, SPM_TSS, SPM_FOUL, SPM_DIVE, SPM_FRRY, SPM_ANCH, MOR_DLPN, MOR_DDPN, MOR_BLRD, MOR_WALL, MOR_POST, MOR_CHWR, MOR_BUOY, SIS_PTCL, SIS_PTED, SIS_IPT, SIS_BRTH, SIS_DOCK, SIS_LOCK, SIS_FBAR, SIS_BRDG, SIS_DRDG, SIS_TRFC, SIS_DNGR, SIS_OBST, SIS_CABL, SIS_MILY, SIS_DSTR, SIS_WTHR, SIS_STRM, SIS_ICE, SIS_TIME, SIS_TIDE, SIS_TSTM, SIS_TGAG, SIS_TSCL, SIS_DIVE, SIS_LGAG, LIT_DIRF, LIT_LEDG
 	}
 
@@ -479,6 +471,5 @@
 
 	public enum Top {
-		NONE, CAN, CONE, SPHERE, X_SHAPE, NORTH, SOUTH, EAST, WEST, SPHERES2,
-		BOARD, DIAMOND, CIRCLE, TRIANGLE, TRIANGLE_INV, SQUARE
+		NONE, CAN, CONE, SPHERE, X_SHAPE, NORTH, SOUTH, EAST, WEST, SPHERES2, BOARD, DIAMOND, CIRCLE, TRIANGLE, TRIANGLE_INV, SQUARE
 	}
 
@@ -607,5 +598,5 @@
 		UNKNOWN, PERM, OCC, REC, NIU, INT, RESV, TEMP, PRIV, MAND, DEST, EXT, ILLUM, HIST, PUB, SYNC, WATCH, UNWAT, DOUBT
 	}
-	
+
 	public static final EnumMap<Sts, String> StsSTR = new EnumMap<Sts, String>(Sts.class);
 	static {
@@ -631,5 +622,5 @@
 
 	private Sts status = Sts.UNKNOWN;
-	
+
 	public Sts getStatus() {
 		return status;
@@ -643,5 +634,5 @@
 		UNKNOWN, BRICK, CONC, BOULD, HSURF, USURF, WOOD, METAL, GRP, PAINT
 	}
-	
+
 	public static final EnumMap<Cns, String> CnsSTR = new EnumMap<Cns, String>(Cns.class);
 	static {
@@ -658,5 +649,5 @@
 
 	private Cns construction = Cns.UNKNOWN;
-	
+
 	public Cns getConstr() {
 		return construction;
@@ -670,5 +661,5 @@
 		UNKNOWN, CONSP, NCONS, REFL
 	}
-	
+
 	public static final EnumMap<Vis, String> VisSTR = new EnumMap<Vis, String>(Vis.class);
 	static {
@@ -679,5 +670,5 @@
 
 	private Vis visibility = Vis.UNKNOWN;
-	
+
 	public Vis getVis() {
 		return visibility;
@@ -689,5 +680,5 @@
 
 	private Vis reflectivity = Vis.UNKNOWN;
-	
+
 	public Vis getRvis() {
 		return reflectivity;
@@ -699,43 +690,43 @@
 
 	public String information = "";
-	
+
 	public String getInfo() {
 		return information;
 	}
-	
+
 	public void setInfo(String str) {
 		information = str.trim();
 	}
-	
+
 	public String source = "";
-	
+
 	public String getSource() {
 		return source;
 	}
-	
+
 	public void setSource(String str) {
 		source = str.trim();
 	}
-	
+
 	public String elevation = "";
-	
+
 	public String getElevation() {
 		return elevation;
 	}
-	
+
 	public void setElevation(String str) {
 		elevation = validDecimal(str);
 	}
-	
+
 	public String height = "";
-	
+
 	public String getHeight() {
 		return height;
 	}
-	
+
 	public void setHeight(String str) {
 		height = validDecimal(str);
 	}
-	
+
 	public boolean isValid() {
 		switch (getObject()) {
@@ -773,9 +764,10 @@
 		case SISTAT:
 			return true;
-		default: return false;
+		default:
+			return false;
 		}
 		return false;
 	}
-	
+
 	// **********************!!!!!!!!!
 	public Light light = new Light(dlg);
@@ -919,25 +911,25 @@
 				break;
 			case GREEN:
-			if (getColour(Ent.BODY, 1) == Col.UNKNOWN) {
-				setObject(Obj.FLTLAT);
-				if (getRegion() == Reg.B) {
-					setCategory(Cat.LAM_PORT);
+				if (getColour(Ent.BODY, 1) == Col.UNKNOWN) {
+					setObject(Obj.FLTLAT);
+					if (getRegion() == Reg.B) {
+						setCategory(Cat.LAM_PORT);
+					} else {
+						setCategory(Cat.LAM_STBD);
+					}
+				} else if ((getColour(Ent.BODY, 1) == Col.RED) && (getColour(Ent.BODY, 2) == Col.GREEN)) {
+					setObject(Obj.FLTLAT);
+					if (getRegion() == Reg.B) {
+						setCategory(Cat.LAM_PPORT);
+					} else {
+						setCategory(Cat.LAM_PSTBD);
+					}
+				} else if ((getColour(Ent.BODY, 1) == Col.WHITE) && (getColour(Ent.BODY, 2) == Col.GREEN)) {
+					setObject(Obj.FLTLAT);
+					setCategory(Cat.LAM_STBD);
 				} else {
-					setCategory(Cat.LAM_STBD);
-				}
-			} else if ((getColour(Ent.BODY, 1) == Col.RED) && (getColour(Ent.BODY, 2) == Col.GREEN)) {
-				setObject(Obj.FLTLAT);
-				if (getRegion() == Reg.B) {
-					setCategory(Cat.LAM_PPORT);
-				} else {
-					setCategory(Cat.LAM_PSTBD);
-				}
-			} else if ((getColour(Ent.BODY, 1) == Col.WHITE) && (getColour(Ent.BODY, 2) == Col.GREEN)) {
-				setObject(Obj.FLTLAT);
-				setCategory(Cat.LAM_STBD);
-			} else {
-				setObject(Obj.FLTSPP);
-				setCategory(Cat.UNKNOWN);
-			}
+					setObject(Obj.FLTSPP);
+					setCategory(Cat.UNKNOWN);
+				}
 				break;
 			case YELLOW:
@@ -969,10 +961,10 @@
 				}
 				break;
-				default:
-					setObject(Obj.FLTSPP);
-					setCategory(Cat.UNKNOWN);
-			}
-		}
-		
+			default:
+				setObject(Obj.FLTSPP);
+				setCategory(Cat.UNKNOWN);
+			}
+		}
+
 		for (Obj obj : ObjSTR.keySet()) {
 			if (keys.containsKey("seamark:" + ObjSTR.get(obj) + ":system")) {
@@ -1154,10 +1146,10 @@
 				}
 				break;
-				default:
-					dlg.panelMain.lightsButton.setSelected(true);
-			}
-			break;
-		}
-		
+			default:
+				dlg.panelMain.lightsButton.setSelected(true);
+			}
+			break;
+		}
+
 		dlg.panelMain.syncButtons();
 
@@ -1177,4 +1169,5 @@
 		dlg.panelMain.fogIcon.setIcon(null);
 
+		String colStr;
 		String imgStr = "/images/";
 		if (getShape() != Shp.UNKNOWN) {
@@ -1223,5 +1216,5 @@
 				break;
 			}
-			String colStr = imgStr;
+			colStr = imgStr;
 			for (Col col : bodyColour) {
 				switch (col) {
@@ -1315,4 +1308,115 @@
 			}
 		}
+
+		if (getTopmark() != Top.NONE) {
+			imgStr = "/images/Top_";
+			switch (getTopmark()) {
+			case CAN:
+				imgStr += "Can";
+				break;
+			case CONE:
+				imgStr += "Cone";
+				break;
+			case SPHERE:
+				imgStr += "Sphere";
+				break;
+			case X_SHAPE:
+				imgStr += "X";
+				break;
+			case NORTH:
+				imgStr += "North";
+				break;
+			case SOUTH:
+				imgStr += "South";
+				break;
+			case EAST:
+				imgStr += "East";
+				break;
+			case WEST:
+				imgStr += "West";
+				break;
+			case SPHERES2:
+				imgStr += "Isol";
+				break;
+			}
+			colStr = imgStr;
+			for (Col col : topColour) {
+				switch (col) {
+				case WHITE:
+					colStr += "_White";
+					break;
+				case RED:
+					colStr += "_Red";
+					break;
+				case ORANGE:
+					colStr += "_Orange";
+					break;
+				case AMBER:
+					colStr += "_Amber";
+					break;
+				case YELLOW:
+					colStr += "_Yellow";
+					break;
+				case GREEN:
+					colStr += "_Green";
+					break;
+				case BLUE:
+					colStr += "_Blue";
+					break;
+				case VIOLET:
+					colStr += "_Violet";
+					break;
+				case BLACK:
+					colStr += "_Black";
+					break;
+				}
+			}
+			switch (getShape()) {
+			case CAN:
+			case CONE:
+			case SPHERE:
+			case BARREL:
+				imgStr += "_Buoy_Small";
+				colStr += "_Buoy_Small";
+				break;
+			case PILLAR:
+			case SPAR:
+				imgStr += "_Buoy";
+				colStr += "_Buoy";
+				break;
+			case FLOAT:
+			case SUPER:
+				imgStr += "_Float";
+				colStr += "_Float";
+				break;
+			case BUOYANT:
+			case CAIRN:
+			case PILE:
+			case LATTICE:
+			case TOWER:
+			case STAKE:
+			case POLE:
+			case POST:
+			case BEACON:
+				imgStr += "_Beacon";
+				colStr += "_Beacon";
+				break;
+			}
+			colStr += ".png";
+			if (getClass().getResource(colStr) == null) {
+				System.out.println("Missing image: " + colStr);
+				imgStr += ".png";
+				if (getClass().getResource(imgStr) == null) {
+					System.out.println("Missing image: " + imgStr);
+					return;
+				} else {
+					dlg.panelMain.topIcon.setIcon(new ImageIcon(getClass().getResource(imgStr)));
+				}
+			} else {
+				dlg.panelMain.topIcon.setIcon(new ImageIcon(getClass().getResource(colStr)));
+			}
+		} else {
+			dlg.panelMain.topIcon.setIcon(null);
+		}
 	}
 
@@ -1352,5 +1456,6 @@
 
 				if (getPattern(Ent.BODY) != Pat.NONE) {
-					Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:" + objStr + ":colour_pattern", PatSTR.get(getPattern(Ent.BODY))));
+					Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:" + objStr + ":colour_pattern", PatSTR
+							.get(getPattern(Ent.BODY))));
 				}
 
@@ -1372,5 +1477,6 @@
 				Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:topmark:shape", TopSTR.get(getTopmark())));
 				if (getPattern(Ent.TOPMARK) != Pat.NONE)
-					Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:topmark:colour_pattern", PatSTR.get(getPattern(Ent.TOPMARK))));
+					Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:topmark:colour_pattern", PatSTR
+							.get(getPattern(Ent.TOPMARK))));
 				if (getColour(Ent.TOPMARK, 0) != Col.UNKNOWN) {
 					String str = ColSTR.get(getColour(Ent.TOPMARK, 0));
