Index: applications/editors/josm/plugins/toms/src/toms/dialogs/SmpDialogAction.java
===================================================================
--- applications/editors/josm/plugins/toms/src/toms/dialogs/SmpDialogAction.java	(revision 23282)
+++ applications/editors/josm/plugins/toms/src/toms/dialogs/SmpDialogAction.java	(revision 23287)
@@ -960,5 +960,5 @@
 			cbM01TopMark.addActionListener(new ActionListener() {
 				public void actionPerformed(ActionEvent e) {
-					int top = cbM01TopMark.getSelectedIndex();
+					buoy.setTopMarkIndex(cbM01TopMark.getSelectedIndex());
 					buoy.paintSign();
 				}
Index: applications/editors/josm/plugins/toms/src/toms/msg/messages.properties
===================================================================
--- applications/editors/josm/plugins/toms/src/toms/msg/messages.properties	(revision 23282)
+++ applications/editors/josm/plugins/toms/src/toms/msg/messages.properties	(revision 23287)
@@ -82,2 +82,5 @@
 SmpDialogAction.212=Not set
 SmpDialogAction.213=*Select shape*
+SmpDialogAction.214=Can
+SmpDialogAction.215=Cone
+
Index: applications/editors/josm/plugins/toms/src/toms/seamarks/SeaMark.java
===================================================================
--- applications/editors/josm/plugins/toms/src/toms/seamarks/SeaMark.java	(revision 23282)
+++ applications/editors/josm/plugins/toms/src/toms/seamarks/SeaMark.java	(revision 23287)
@@ -110,4 +110,14 @@
 
 	/**
+	 * Topmark Shapes - correspond to TopMarkIndex
+	 */
+
+	public final static int UNKNOWN_TOPMARK = 0;
+	public final static int TOP_YELLOW_X = 1;
+	public final static int TOP_RED_X = 2;
+	public final static int TOP_YELLOW_CAN = 3;
+	public final static int TOP_YELLOW_CONE = 4;
+
+	/**
 	 * Radar Beacons - correspond to Ratyp Index
 	 */
Index: applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/Buoy.java
===================================================================
--- applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/Buoy.java	(revision 23282)
+++ applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/Buoy.java	(revision 23287)
@@ -353,4 +353,14 @@
 		 */
 		dlg.cM01TopMark.setSelected(topMark);
+	}
+
+	private int TopMarkIndex = 0;
+
+	public int getTopMarkIndex() {
+		return TopMarkIndex;
+	}
+
+	public void setTopMarkIndex(int index) {
+		TopMarkIndex = index;
 	}
 
@@ -895,5 +905,5 @@
 
 	protected void saveTopMarkData(String shape, String colour) {
-		if (dlg.cM01TopMark.isSelected()) {
+		if (hasTopMark()) {
 			Main.main.undoRedo.add(new ChangePropertyCommand(Node,
 					"seamark:topmark:shape", shape));
Index: applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoySpec.java
===================================================================
--- applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoySpec.java	(revision 23282)
+++ applications/editors/josm/plugins/toms/src/toms/seamarks/buoys/BuoySpec.java	(revision 23287)
@@ -47,4 +47,6 @@
 		dlg.cbM01TopMark.addItem(Messages.getString("SmpDialogAction.210")); //$NON-NLS-1$
 		dlg.cbM01TopMark.addItem(Messages.getString("SmpDialogAction.211")); //$NON-NLS-1$
+		dlg.cbM01TopMark.addItem(Messages.getString("SmpDialogAction.214")); //$NON-NLS-1$
+		dlg.cbM01TopMark.addItem(Messages.getString("SmpDialogAction.215")); //$NON-NLS-1$
 
 		dlg.cM01TopMark.setEnabled(true);
@@ -116,7 +118,16 @@
 		if (keys.containsKey("seamark:topmark:shape")) { //$NON-NLS-1$
 			str = keys.get("seamark:topmark:shape"); //$NON-NLS-1$
-
+			setTopMark(true);
 			if (str.equals("x-shape")) { //$NON-NLS-1$
-				setTopMark(true);
+				if (keys.containsKey("seamark:topmark:colour")) { //$NON-NLS-1$
+					if (keys.get("seamark:topmark:colour").equals("red"))
+						setTopMarkIndex(TOP_RED_X);
+					else
+						setTopMarkIndex(TOP_YELLOW_X);
+				}
+			} else if (str.equals("cone, point up")) { //$NON-NLS-1$
+					setTopMarkIndex(TOP_YELLOW_CONE);
+			} else if (str.equals("cylinder")) { //$NON-NLS-1$
+				setTopMarkIndex(TOP_YELLOW_CAN);
 			}
 		}
@@ -243,5 +254,18 @@
 					case SPEC_PILLAR:
 					case SPEC_SPAR:
-						image = "/images/Top_X_Yellow_Buoy.png"; //$NON-NLS-1$
+						switch (getTopMarkIndex()) {
+						case TOP_YELLOW_X:
+							image = "/images/Top_X_Yellow_Buoy.png"; //$NON-NLS-1$
+							break;
+						case TOP_RED_X:
+							image = "/images/Top_X_Red_Buoy.png"; //$NON-NLS-1$
+							break;
+						case TOP_YELLOW_CAN:
+							image = "/images/Top_Can_Yellow_Buoy.png"; //$NON-NLS-1$
+							break;
+						case TOP_YELLOW_CONE:
+							image = "/images/Top_Cone_Yellow_Buoy.png"; //$NON-NLS-1$
+							break;
+						}
 						break;
 					case SPEC_CAN:
@@ -249,12 +273,51 @@
 					case SPEC_SPHERE:
 					case SPEC_BARREL:
-						image = "/images/Top_X_Yellow_Buoy_Small.png"; //$NON-NLS-1$
+						switch (getTopMarkIndex()) {
+						case TOP_YELLOW_X:
+							image = "/images/Top_X_Yellow_Buoy_Small.png"; //$NON-NLS-1$
+							break;
+						case TOP_RED_X:
+							image = "/images/Top_X_Red_Buoy_Small.png"; //$NON-NLS-1$
+							break;
+						case TOP_YELLOW_CAN:
+							image = "/images/Top_Can_Yellow_Buoy_Small.png"; //$NON-NLS-1$
+							break;
+						case TOP_YELLOW_CONE:
+							image = "/images/Top_Cone_Yellow_Buoy_Small.png"; //$NON-NLS-1$
+							break;
+						}
 						break;
 					case SPEC_BEACON:
 					case SPEC_TOWER:
-						image = "/images/Top_X_Yellow_Beacon.png"; //$NON-NLS-1$
+						switch (getTopMarkIndex()) {
+						case TOP_YELLOW_X:
+							image = "/images/Top_X_Yellow_Beacon.png"; //$NON-NLS-1$
+							break;
+						case TOP_RED_X:
+							image = "/images/Top_X_Red_Beacon.png"; //$NON-NLS-1$
+							break;
+						case TOP_YELLOW_CAN:
+							image = "/images/Top_Can_Yellow_Beacon.png"; //$NON-NLS-1$
+							break;
+						case TOP_YELLOW_CONE:
+							image = "/images/Top_Cone_Yellow_Beacon.png"; //$NON-NLS-1$
+							break;
+						}
 						break;
 					case SPEC_FLOAT:
-						image = "/images/Top_X_Yellow_Float.png"; //$NON-NLS-1$
+						switch (getTopMarkIndex()) {
+						case TOP_YELLOW_X:
+							image = "/images/Top_X_Yellow_Float.png"; //$NON-NLS-1$
+							break;
+						case TOP_RED_X:
+							image = "/images/Top_X_Red_Float.png"; //$NON-NLS-1$
+							break;
+						case TOP_YELLOW_CAN:
+							image = "/images/Top_Can_Yellow_Float.png"; //$NON-NLS-1$
+							break;
+						case TOP_YELLOW_CONE:
+							image = "/images/Top_Cone_Yellow_Float.png"; //$NON-NLS-1$
+							break;
+						}
 						break;
 					}
@@ -322,5 +385,18 @@
 		default:
 		}
-		saveTopMarkData("x-shape", "yellow"); //$NON-NLS-1$ //$NON-NLS-2$
+		switch (getTopMarkIndex()) {
+		case TOP_YELLOW_X:
+			saveTopMarkData("x-shape", "yellow"); //$NON-NLS-1$ //$NON-NLS-2$
+			break;
+		case TOP_RED_X:
+			saveTopMarkData("x-shape", "red"); //$NON-NLS-1$ //$NON-NLS-2$
+			break;
+		case TOP_YELLOW_CAN:
+			saveTopMarkData("cylinder", "yellow"); //$NON-NLS-1$ //$NON-NLS-2$
+			break;
+		case TOP_YELLOW_CONE:
+			saveTopMarkData("cone, point up", "yellow"); //$NON-NLS-1$ //$NON-NLS-2$
+			break;
+		}
 		saveLightData(); //$NON-NLS-1$
 		saveRadarFogData();
