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 26948)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelChan.java	(revision 26949)
@@ -8,4 +8,5 @@
 import oseam.Messages;
 import oseam.dialogs.OSeaMAction;
+import oseam.seamarks.SeaMark;
 import oseam.seamarks.SeaMark.*;
 
@@ -108,9 +109,59 @@
 	private ActionListener alTop = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
-			if (topmarkButton.isSelected()) {
-				topmarkButton.setBorderPainted(true);
-			} else {
-//				dlg.panelMain.panelTop.clearSelections();
-				topmarkButton.setBorderPainted(false);
+			if (dlg.mark != null) {
+				dlg.panelMain.panelTop.clearSelections();
+				if (topmarkButton.isSelected()) {
+					if (SeaMark.GrpMAP.get(dlg.mark.getObject()) == Grp.SAW) {
+						dlg.panelMain.panelTop.sphereTopButton.doClick();
+						dlg.panelMain.panelTop.panelPat.noneButton.doClick();
+						dlg.panelMain.panelTop.panelPat.panelCol.redButton.doClick();
+					} else {
+						switch (dlg.mark.getCategory()) {
+						case LAM_PORT:
+						case LAM_PPORT:
+							dlg.panelMain.panelTop.canTopButton.doClick();
+							switch (dlg.mark.getRegion()) {
+							case A:
+								dlg.panelMain.panelTop.panelPat.noneButton.doClick();
+								dlg.panelMain.panelTop.panelPat.panelCol.redButton.doClick();
+								break;
+							case B:
+								dlg.panelMain.panelTop.panelPat.noneButton.doClick();
+								dlg.panelMain.panelTop.panelPat.panelCol.greenButton.doClick();
+								break;
+							case C:
+								dlg.panelMain.panelTop.panelPat.horizButton.doClick();
+								dlg.panelMain.panelTop.panelPat.panelCol.redButton.doClick();
+								dlg.panelMain.panelTop.panelPat.panelCol.addButton.doClick();
+								dlg.panelMain.panelTop.panelPat.panelCol.whiteButton.doClick();
+								break;
+							}
+							break;
+						case LAM_STBD:
+						case LAM_PSTBD:
+							dlg.panelMain.panelTop.coneTopButton.doClick();
+							switch (dlg.mark.getRegion()) {
+							case A:
+								dlg.panelMain.panelTop.panelPat.noneButton.doClick();
+								dlg.panelMain.panelTop.panelPat.panelCol.greenButton.doClick();
+								break;
+							case B:
+								dlg.panelMain.panelTop.panelPat.noneButton.doClick();
+								dlg.panelMain.panelTop.panelPat.panelCol.redButton.doClick();
+								break;
+							case C:
+								dlg.panelMain.panelTop.panelPat.horizButton.doClick();
+								dlg.panelMain.panelTop.panelPat.panelCol.greenButton.doClick();
+								dlg.panelMain.panelTop.panelPat.panelCol.addButton.doClick();
+								dlg.panelMain.panelTop.panelPat.panelCol.whiteButton.doClick();
+								break;
+							}
+							break;
+						}
+					}
+					topmarkButton.setBorderPainted(true);
+				} else {
+					topmarkButton.setBorderPainted(false);
+				}
 			}
 		}
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 26948)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelCol.java	(revision 26949)
@@ -16,5 +16,4 @@
 
 	private OSeaMAction dlg;
-	private ActionListener act;
 	private Ent ent;
 	private ButtonGroup colourButtons = new ButtonGroup();
@@ -55,5 +54,5 @@
 										stackIdx--;
 								} else {
-									dlg.mark.setColour(Ent.BODY, Col.UNKNOWN);
+									dlg.mark.setColour(ent, Col.UNKNOWN);
 								}
 							} else if (button == addButton) {
@@ -107,7 +106,6 @@
 	};
 
-	public PanelCol(OSeaMAction dia, ActionListener al, Ent entity) {
+	public PanelCol(OSeaMAction dia, Ent entity) {
 		dlg = dia;
-		act = al;
 		ent = entity;
 		this.setLayout(null);
Index: applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelLit.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelLit.java	(revision 26948)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelLit.java	(revision 26949)
@@ -51,5 +51,5 @@
 		panelChr = new PanelChr(dlg);
 		panelChr.setBounds(new Rectangle(0, 0, 88, 160));
-		panelCol = new PanelCol(dlg, alType, Ent.LIGHT);
+		panelCol = new PanelCol(dlg, Ent.LIGHT);
 		panelCol.setBounds(new Rectangle(88, 0, 34, 160));
 		this.setLayout(null);
Index: applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelMain.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelMain.java	(revision 26948)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelMain.java	(revision 26949)
@@ -9,5 +9,4 @@
 import oseam.Messages;
 import oseam.dialogs.OSeaMAction;
-import oseam.seamarks.SeaMark.*;
 
 public class PanelMain extends JPanel {
Index: applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelMore.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelMore.java	(revision 26948)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelMore.java	(revision 26949)
@@ -1,5 +1,3 @@
 package oseam.panels;
-
-import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.awt.*;
Index: applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelPat.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelPat.java	(revision 26948)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelPat.java	(revision 26949)
@@ -15,6 +15,6 @@
 
 	private OSeaMAction dlg;
+	private Ent ent;
 	public PanelCol panelCol;
-	private ActionListener alType;
 
 	private ButtonGroup patButtons = new ButtonGroup();
@@ -32,10 +32,10 @@
 					JRadioButton button = patterns.get(pat);
 					if (button.isSelected()) {
-						dlg.mark.setPattern(Ent.BODY, pat);
+						dlg.mark.setPattern(ent, pat);
 						button.setBorderPainted(true);
 					} else
 						button.setBorderPainted(false);
 				}
-				switch (dlg.mark.getPattern(Ent.BODY)) {
+				switch (dlg.mark.getPattern(ent)) {
 				case NONE:
 					panelCol.trimStack(1);
@@ -59,6 +59,7 @@
 	public PanelPat(OSeaMAction dia, Ent entity) {
 		dlg = dia;
+		ent = entity;
 		this.setLayout(null);
-		panelCol = new PanelCol(dlg, alType, entity);
+		panelCol = new PanelCol(dlg, ent);
 		panelCol.setBounds(new Rectangle(0, 0, 72, 160));
 		this.add(panelCol, null);
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 26948)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelPort.java	(revision 26949)
@@ -40,4 +40,8 @@
 					dlg.panelMain.moreButton.setVisible(true);
 					dlg.panelMain.panelChan.topmarkButton.setVisible(true);
+					dlg.panelMain.topButton.setEnabled(true);
+					dlg.panelMain.fogButton.setEnabled(true);
+					dlg.panelMain.radButton.setEnabled(true);
+					dlg.panelMain.litButton.setEnabled(true);
 					dlg.panelMain.panelMore.panelPat.panelCol.clearSelections();
 					if (dlg.mark.getCategory() == Cat.LAM_PORT) {
@@ -95,4 +99,8 @@
 					dlg.panelMain.moreButton.setVisible(false);
 					dlg.panelMain.panelChan.topmarkButton.setVisible(false);
+					dlg.panelMain.topButton.setEnabled(false);
+					dlg.panelMain.fogButton.setEnabled(false);
+					dlg.panelMain.radButton.setEnabled(false);
+					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 26948)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelSaw.java	(revision 26949)
@@ -36,4 +36,8 @@
 					dlg.panelMain.moreButton.setVisible(true);
 					dlg.panelMain.panelChan.topmarkButton.setVisible(true);
+					dlg.panelMain.topButton.setEnabled(true);
+					dlg.panelMain.fogButton.setEnabled(true);
+					dlg.panelMain.radButton.setEnabled(true);
+					dlg.panelMain.litButton.setEnabled(true);
 					dlg.panelMain.panelMore.panelPat.panelCol.clearSelections();
 					dlg.panelMain.panelMore.panelPat.vertButton.doClick();
@@ -43,4 +47,8 @@
 				} else {
 					dlg.panelMain.moreButton.setVisible(false);
+					dlg.panelMain.topButton.setEnabled(false);
+					dlg.panelMain.fogButton.setEnabled(false);
+					dlg.panelMain.radButton.setEnabled(false);
+					dlg.panelMain.litButton.setEnabled(false);
 				}
 				dlg.mark.paintSign();
Index: applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelSectors.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelSectors.java	(revision 26948)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelSectors.java	(revision 26949)
@@ -1,8 +1,6 @@
 package oseam.panels;
 
-import java.awt.*;
 import java.awt.event.*;
 import javax.swing.*;
-import java.util.*;
 
 import oseam.seamarks.Light;
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 26948)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelStbd.java	(revision 26949)
@@ -40,4 +40,8 @@
 					dlg.panelMain.moreButton.setVisible(true);
 					dlg.panelMain.panelChan.topmarkButton.setVisible(true);
+					dlg.panelMain.topButton.setEnabled(true);
+					dlg.panelMain.fogButton.setEnabled(true);
+					dlg.panelMain.radButton.setEnabled(true);
+					dlg.panelMain.litButton.setEnabled(true);
 					dlg.panelMain.panelMore.panelPat.panelCol.clearSelections();
 					if (dlg.mark.getCategory() == Cat.LAM_PORT) {
@@ -95,4 +99,8 @@
 					dlg.panelMain.moreButton.setVisible(false);
 					dlg.panelMain.panelChan.topmarkButton.setVisible(false);
+					dlg.panelMain.topButton.setEnabled(false);
+					dlg.panelMain.fogButton.setEnabled(false);
+					dlg.panelMain.radButton.setEnabled(false);
+					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 26948)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelTop.java	(revision 26949)
@@ -33,26 +33,17 @@
 	public JRadioButton mooringTopButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/MooringTopButton.png")));
 	private EnumMap<Top, JRadioButton> tops = new EnumMap<Top, JRadioButton>(Top.class);
-	private EnumMap<Day, JRadioButton> days = new EnumMap<Day, JRadioButton>(Day.class);
 	private ActionListener alTop = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
-			for (Top top : tops.keySet()) {
-				JRadioButton button = tops.get(top);
-				if (button.isSelected()) {
-					dlg.mark.setTopmark(top);
-					dlg.mark.setDaymark(Day.NONE);
-					button.setBorderPainted(true);
-				} else
-					button.setBorderPainted(false);
+			if (dlg.mark != null) {
+				for (Top top : tops.keySet()) {
+					JRadioButton button = tops.get(top);
+					if (button.isSelected()) {
+						dlg.mark.setTopmark(top);
+						button.setBorderPainted(true);
+					} else
+						button.setBorderPainted(false);
+				}
+				mooringTopButton.setBorderPainted(mooringTopButton.isSelected());
 			}
-			for (Day day : days.keySet()) {
-				JRadioButton button = days.get(day);
-				if (button.isSelected()) {
-					dlg.mark.setDaymark(day);
-					dlg.mark.setTopmark(Top.NONE);
-					button.setBorderPainted(true);
-				} else
-					button.setBorderPainted(false);
-			}
-			mooringTopButton.setBorderPainted(mooringTopButton.isSelected());
 		}
 	};
@@ -74,16 +65,15 @@
 		this.add(getTopButton(westTopButton, 200, 35, 27, 27, "WestTop", Top.WEST), null);
 		this.add(getTopButton(spheres2TopButton, 230, 35, 27, 27, "Spheres2Top", Top.SPHERES2), null);
-		this.add(getDayButton(boardDayButton, 110, 65, 27, 27, "BoardDay", Day.BOARD), null);
-		this.add(getDayButton(diamondDayButton, 140, 65, 27, 27, "DiamondDay", Day.DIAMOND), null);
-		this.add(getDayButton(triangleDayButton, 170, 65, 27, 27, "TriangleDay", Day.TRIANGLE), null);
-		this.add(getDayButton(triangleInvDayButton, 200, 65, 27, 27, "TriangleInvDay", Day.TRIANGLE_INV), null);
-		this.add(getDayButton(squareDayButton, 230, 65, 27, 27, "SquareDay", Day.SQUARE), null);
-		this.add(getDayButton(circleDayButton, 230, 95, 27, 27, "CircleDay", Day.CIRCLE), null);
+		this.add(getTopButton(boardDayButton, 110, 65, 27, 27, "BoardDay", Top.BOARD), null);
+		this.add(getTopButton(diamondDayButton, 140, 65, 27, 27, "DiamondDay", Top.DIAMOND), null);
+		this.add(getTopButton(triangleDayButton, 170, 65, 27, 27, "TriangleDay", Top.TRIANGLE), null);
+		this.add(getTopButton(triangleInvDayButton, 200, 65, 27, 27, "TriangleInvDay", Top.TRIANGLE_INV), null);
+		this.add(getTopButton(squareDayButton, 230, 65, 27, 27, "SquareDay", Top.SQUARE), null);
+		this.add(getTopButton(circleDayButton, 230, 95, 27, 27, "CircleDay", Top.CIRCLE), null);
 		this.add(getMoorButton(mooringTopButton, 110, 95, 27, 27, "MooringTop"), null);
 	}
 
 	public void clearSelections() {
-		topButtons.clearSelection();
-		alTop.actionPerformed(null);
+		noTopButton.doClick();
 		panelPat.clearSelections();
 	}
@@ -91,7 +81,4 @@
 	public void enableAll(boolean state) {
 		for (JRadioButton button : tops.values()) {
-			button.setEnabled(state);
-		}
-		for (JRadioButton button : days.values()) {
 			button.setEnabled(state);
 		}
@@ -109,14 +96,4 @@
 	}
 
-	private JRadioButton getDayButton(JRadioButton button, int x, int y, int w, int h, String tip, Day day) {
-		button.setBounds(new Rectangle(x, y, w, h));
-		button.setBorder(BorderFactory.createLoweredBevelBorder());
-		button.setToolTipText(Messages.getString(tip));
-		button.addActionListener(alTop);
-		topButtons.add(button);
-		days.put(day, button);
-		return button;
-	}
-
 	private JRadioButton getMoorButton(JRadioButton button, int x, int y, int w, int h, String tip) {
 		button.setBounds(new Rectangle(x, y, w, h));
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 26948)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/SeaMark.java	(revision 26949)
@@ -2,6 +2,4 @@
 
 import java.awt.*;
-import java.awt.event.*;
-import java.awt.Color.*;
 import javax.swing.*;
 import java.util.*;
@@ -443,11 +441,11 @@
 	}
 
-	public static final EnumMap<Pat, String> PatMAP = new EnumMap<Pat, String>(Pat.class);
+	public static final EnumMap<Pat, String> PatSTR = new EnumMap<Pat, String>(Pat.class);
 	static {
-		PatMAP.put(Pat.HORIZ, "horizontal");
-		PatMAP.put(Pat.VERT, "vertical");
-		PatMAP.put(Pat.DIAG, "diagonal");
-		PatMAP.put(Pat.SQUARE, "squared");
-		PatMAP.put(Pat.BORDER, "border");
+		PatSTR.put(Pat.HORIZ, "horizontal");
+		PatSTR.put(Pat.VERT, "vertical");
+		PatSTR.put(Pat.DIAG, "diagonal");
+		PatSTR.put(Pat.SQUARE, "squared");
+		PatSTR.put(Pat.BORDER, "border");
 	}
 
@@ -489,5 +487,6 @@
 
 	public enum Top {
-		NONE, CAN, CONE, SPHERE, X_SHAPE, NORTH, SOUTH, EAST, WEST, SPHERES2
+		NONE, CAN, CONE, SPHERE, X_SHAPE, NORTH, SOUTH, EAST, WEST, SPHERES2,
+		BOARD, DIAMOND, CIRCLE, TRIANGLE, TRIANGLE_INV, SQUARE
 	}
 
@@ -496,6 +495,6 @@
 		TopSTR.put(Top.CAN, "cylinder");
 		TopSTR.put(Top.CONE, "cylinder");
-		TopSTR.put(Top.SPHERE, "SPHERE");
-		TopSTR.put(Top.X_SHAPE, "X-SHAPE");
+		TopSTR.put(Top.SPHERE, "sphere");
+		TopSTR.put(Top.X_SHAPE, "x-shape");
 		TopSTR.put(Top.NORTH, "2 cones up");
 		TopSTR.put(Top.SOUTH, "2 cones down");
@@ -503,4 +502,10 @@
 		TopSTR.put(Top.WEST, "2 cones points together");
 		TopSTR.put(Top.SPHERES2, "2 spheres");
+		TopSTR.put(Top.BOARD, "board");
+		TopSTR.put(Top.DIAMOND, "diamond");
+		TopSTR.put(Top.CIRCLE, "circle");
+		TopSTR.put(Top.TRIANGLE, "triangle, point up");
+		TopSTR.put(Top.TRIANGLE_INV, "triangle, point down");
+		TopSTR.put(Top.SQUARE, "square");
 	}
 
@@ -517,32 +522,4 @@
 	public void setTopmark(Top top) {
 		topShape = top;
-	}
-
-	public enum Day {
-		NONE, BOARD, DIAMOND, CIRCLE, TRIANGLE, TRIANGLE_INV, SQUARE
-	}
-
-	public static final EnumMap<Day, String> DaySTR = new EnumMap<Day, String>(Day.class);
-	static {
-		DaySTR.put(Day.BOARD, "board");
-		DaySTR.put(Day.DIAMOND, "diamond");
-		DaySTR.put(Day.CIRCLE, "circle");
-		DaySTR.put(Day.TRIANGLE, "triangle, point up");
-		DaySTR.put(Day.TRIANGLE_INV, "triangle, point down");
-		DaySTR.put(Day.SQUARE, "square");
-	}
-
-	private Day dayShape = Day.NONE;
-
-	public boolean hasDaymark() {
-		return (dayShape != Day.NONE);
-	}
-
-	public Day getDaymark() {
-		return dayShape;
-	}
-
-	public void setDaymark(Day day) {
-		dayShape = day;
 	}
 
@@ -873,6 +850,6 @@
 				str = keys.get("seamark:" + ObjSTR.get(obj) + ":colour_pattern");
 				setPattern(Ent.BODY, Pat.NONE);
-				for (Pat pat : PatMAP.keySet()) {
-					if (PatMAP.get(pat).equals(str)) {
+				for (Pat pat : PatSTR.keySet()) {
+					if (PatSTR.get(pat).equals(str)) {
 						setPattern(Ent.BODY, pat);
 					}
@@ -1254,6 +1231,5 @@
 
 				if (getPattern(Ent.BODY) != Pat.NONE) {
-					Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:" + objStr + ":colour_pattern", PatMAP
-							.get(getPattern(Ent.BODY))));
+					Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:" + objStr + ":colour_pattern", PatSTR.get(getPattern(Ent.BODY))));
 				}
 
@@ -1272,4 +1248,16 @@
 				}
 			}
+			if (hasTopmark()) {
+				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))));
+				if (getColour(Ent.TOPMARK, 0) != Col.UNKNOWN) {
+					String str = ColSTR.get(getColour(Ent.TOPMARK, 0));
+					for (int i = 1; topColour.size() > i; i++) {
+						str += (";" + ColSTR.get(getColour(Ent.TOPMARK, i)));
+					}
+					Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:topmark:colour", str));
+				}
+			}
 		}
 	}
