Index: applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/dialogs/OSeaMAction.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/dialogs/OSeaMAction.java	(revision 24916)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/dialogs/OSeaMAction.java	(revision 24917)
@@ -131,7 +131,16 @@
 			mark = new MarkIsol(this);
 			mark.setObject(Obj.BCNISD);
-		} else if (type.equals("landmark") || type.equals("light_vessel") || type.equals("light_major") || type.equals("light_minor")) {
-			mark = new MarkLight(this);
-			mark.setObject(Obj.LIGHTS);
+		} else if (type.equals("landmark")) {
+			mark = new MarkLight(this);
+			mark.setObject(Obj.LNDMRK);
+		} else if (type.equals("light_vessel")) {
+			mark = new MarkLight(this);
+			mark.setObject(Obj.LITVES);
+		} else if (type.equals("light_major")) {
+			mark = new MarkLight(this);
+			mark.setObject(Obj.LITMAJ);
+		} else if (type.equals("light_minor")) {
+			mark = new MarkLight(this);
+			mark.setObject(Obj.LITMIN);
 		} else if (type.equals("light_float")) {
 			if (keys.containsKey("seamark:light_float:colour")) {
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 24916)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelChan.java	(revision 24917)
@@ -16,9 +16,9 @@
 import oseam.panels.PanelStbd;
 import oseam.panels.PanelSaw;
-import oseam.seamarks.SeaMark;
 import oseam.seamarks.SeaMark.Cat;
 import oseam.seamarks.SeaMark.Col;
 import oseam.seamarks.SeaMark.Ent;
 import oseam.seamarks.SeaMark.Shp;
+import oseam.seamarks.SeaMark.Reg;
 import oseam.seamarks.MarkLat;
 import oseam.seamarks.MarkSaw;
@@ -55,5 +55,5 @@
 				dlg.panelMain.panelTop.canTopButton.setEnabled(true);
 				dlg.panelMain.panelTop.panelCol.enableAll(false);
-				if (dlg.mark.getRegion() == SeaMark.IALA_A) {
+				if (dlg.mark.getRegion() == Reg.A) {
 					dlg.panelMain.panelTop.panelCol.redButton.setEnabled(true);
 					dlg.panelMain.panelTop.panelCol.redButton.doClick();
@@ -71,5 +71,5 @@
 					dlg.mark.setShape(Shp.UNKNOWN);
 				}
-				if (dlg.mark.getRegion() == SeaMark.IALA_A) {
+				if (dlg.mark.getRegion() == Reg.A) {
 					dlg.mark.setColour(Ent.BODY, Col.RED);
 					panelPort.regionAButton.doClick();
@@ -93,5 +93,5 @@
 					dlg.mark.setShape(Shp.UNKNOWN);
 				}
-				if (dlg.mark.getRegion() == SeaMark.IALA_A) {
+				if (dlg.mark.getRegion() == Reg.A) {
 					dlg.mark.setColour(Ent.BODY, Col.RED_GREEN_RED);
 					panelPort.regionAButton.doClick();
@@ -120,5 +120,5 @@
 				dlg.panelMain.panelTop.coneTopButton.setEnabled(true);
 				dlg.panelMain.panelTop.panelCol.enableAll(false);
-				if (dlg.mark.getRegion() == SeaMark.IALA_A) {
+				if (dlg.mark.getRegion() == Reg.A) {
 					dlg.panelMain.panelTop.panelCol.greenButton.setEnabled(true);
 					dlg.panelMain.panelTop.panelCol.greenButton.doClick();
@@ -136,5 +136,5 @@
 					dlg.mark.setShape(Shp.UNKNOWN);
 				}
-				if (dlg.mark.getRegion() == SeaMark.IALA_A) {
+				if (dlg.mark.getRegion() == Reg.A) {
 					dlg.mark.setColour(Ent.BODY, Col.GREEN);
 					panelStbd.regionAButton.doClick();
@@ -158,5 +158,5 @@
 					dlg.mark.setShape(Shp.UNKNOWN);
 				}
-				if (dlg.mark.getRegion() == SeaMark.IALA_A) {
+				if (dlg.mark.getRegion() == Reg.A) {
 					dlg.mark.setColour(Ent.BODY, Col.GREEN_RED_GREEN);
 					panelStbd.regionAButton.doClick();
Index: applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelLights.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelLights.java	(revision 24916)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelLights.java	(revision 24917)
@@ -52,6 +52,6 @@
 		this.setLayout(null);
 		this.add(getCatButton(houseButton, 0, 0, 34, 32, "LighthouseTip", Cat.LIGHT_HOUSE, Obj.LNDMRK), null);
-		this.add(getCatButton(majorButton, 0, 32, 34, 32, "MajorLightTip", Cat.LIGHT_MAJOR, Obj.LIGHTS), null);
-		this.add(getCatButton(minorButton, 0, 64, 34, 32, "MinorLightTip", Cat.LIGHT_MINOR, Obj.LIGHTS), null);
+		this.add(getCatButton(majorButton, 0, 32, 34, 32, "MajorLightTip", Cat.LIGHT_MAJOR, Obj.LITMAJ), null);
+		this.add(getCatButton(minorButton, 0, 64, 34, 32, "MinorLightTip", Cat.LIGHT_MINOR, Obj.LITMIN), null);
 		this.add(getCatButton(vesselButton, 0, 96, 34, 32, "LightVesselTip", Cat.LIGHT_VESSEL, Obj.LITVES), null);
 		this.add(getCatButton(floatButton, 0, 128, 34, 32, "LightFloatTip", Cat.LIGHT_FLOAT, Obj.LITFLT), null);
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 24916)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelTop.java	(revision 24917)
@@ -17,4 +17,5 @@
 import oseam.seamarks.SeaMark.Col;
 import oseam.seamarks.SeaMark.Top;
+import oseam.seamarks.SeaMark.Day;
 import oseam.seamarks.SeaMark.Ent;
 
@@ -41,4 +42,5 @@
 	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) {
@@ -49,8 +51,21 @@
 				if (button.isSelected()) {
 					dlg.mark.setTopmark(top);
+					dlg.mark.setDaymark(Day.NONE);
 					button.setBorderPainted(true);
 				} else
 					button.setBorderPainted(false);
 			}
+			Iterator<Day> id = days.keySet().iterator();
+			while (id.hasNext()) {
+				Day day = id.next();
+				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());
 		}
 	};
@@ -72,10 +87,10 @@
 		this.add(getTopButton(westTopButton, 130, 35, 27, 27, "WestTopTip", Top.WEST), null);
 		this.add(getTopButton(spheres2TopButton, 160, 35, 27, 27, "Spheres2TopTip", Top.SPHERES2), null);
-		this.add(getTopButton(boardDayButton, 40, 65, 27, 27, "BoardDayTip", Top.BOARD), null);
-		this.add(getTopButton(diamondDayButton, 70, 65, 27, 27, "DiamondDayTip", Top.DIAMOND), null);
-		this.add(getTopButton(triangleDayButton, 100, 65, 27, 27, "TriangleDayTip", Top.TRIANGLE), null);
-		this.add(getTopButton(triangleInvDayButton, 130, 65, 27, 27, "TriangleInvDayTip", Top.TRIANGLE_INV), null);
-		this.add(getTopButton(squareDayButton, 160, 65, 27, 27, "SquareDayTip", Top.SQUARE), null);
-		this.add(getTopButton(mooringTopButton, 40, 95, 27, 27, "MooringTopTip", Top.MOORING), null);
+		this.add(getDayButton(boardDayButton, 40, 65, 27, 27, "BoardDayTip", Day.BOARD), null);
+		this.add(getDayButton(diamondDayButton, 70, 65, 27, 27, "DiamondDayTip", Day.DIAMOND), null);
+		this.add(getDayButton(triangleDayButton, 100, 65, 27, 27, "TriangleDayTip", Day.TRIANGLE), null);
+		this.add(getDayButton(triangleInvDayButton, 130, 65, 27, 27, "TriangleInvDayTip", Day.TRIANGLE_INV), null);
+		this.add(getDayButton(squareDayButton, 160, 65, 27, 27, "SquareDayTip", Day.SQUARE), null);
+		this.add(getMoorButton(mooringTopButton, 40, 95, 27, 27, "MooringTopTip"), null);
 	}
 
@@ -94,12 +109,31 @@
 
 	private JRadioButton getTopButton(JRadioButton button, int x, int y, int w, int h, String tip, Top top) {
-			button.setBounds(new Rectangle(x, y, w, h));
-			button.setBorder(BorderFactory.createLineBorder(Color.magenta, 2));
-			button.setToolTipText(Messages.getString(tip));
-			button.addActionListener(alTop);
-			topButtons.add(button);
-			tops.put(top, button);
-		return button;
-	}
+		button.setBounds(new Rectangle(x, y, w, h));
+		button.setBorder(BorderFactory.createLineBorder(Color.magenta, 2));
+		button.setToolTipText(Messages.getString(tip));
+		button.addActionListener(alTop);
+		topButtons.add(button);
+		tops.put(top, button);
+	return button;
+}
+
+	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.createLineBorder(Color.magenta, 2));
+		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));
+		button.setBorder(BorderFactory.createLineBorder(Color.magenta, 2));
+		button.setToolTipText(Messages.getString(tip));
+		button.addActionListener(alTop);
+		topButtons.add(button);
+	return button;
+}
 
 }
Index: applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkCard.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkCard.java	(revision 24916)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkCard.java	(revision 24917)
@@ -93,47 +93,3 @@
 	}
 
-	public void paintSign() {
-		String image = "/images/Cardinal";
-		switch (getShape()) {
-		case PILLAR:
-			image += "_Pillar";
-			break;
-		case SPAR:
-			image += "_Spar";
-			break;
-		case BEACON:
-			image += "_Beacon";
-			break;
-		case TOWER:
-			image += "_Tower";
-			break;
-		case FLOAT:
-			image += "_Float";
-			break;
-		default:
-			dlg.panelMain.shapeIcon.setIcon(null);
-			return;
-		}
-		switch (getCategory()) {
-		case CARD_NORTH:
-			image += "_North";
-			break;
-		case CARD_EAST:
-			image += "_East";
-			break;
-		case CARD_SOUTH:
-			image += "_South";
-			break;
-		case CARD_WEST:
-			image += "_West";
-			break;
-		default:
-			dlg.panelMain.shapeIcon.setIcon(null);
-			return;
-		}
-		image += ".png";
-		dlg.panelMain.shapeIcon.setIcon(new ImageIcon(getClass().getResource(image)));
-		
-		super.paintSign();
-	}
 }
Index: applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkIsol.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkIsol.java	(revision 24916)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkIsol.java	(revision 24917)
@@ -62,31 +62,3 @@
 	}
 
-	public void paintSign() {
-		String image = "/images/Cardinal";
-
-		switch (getShape()) {
-		case PILLAR:
-			image += "_Pillar_Single";
-			break;
-		case SPAR:
-			image += "_Spar_Single";
-			break;
-		case BEACON:
-			image += "_Beacon_Single";
-			break;
-		case TOWER:
-			image += "_Tower_Single";
-			break;
-		case FLOAT:
-			image += "_Float_Single";
-			break;
-		default:
-			dlg.panelMain.shapeIcon.setIcon(null);
-			return;
-		}
-		image += ".png";
-		dlg.panelMain.shapeIcon.setIcon(new ImageIcon(getClass().getResource(image)));
-
-		super.paintSign();
-	}
 }
Index: applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkLat.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkLat.java	(revision 24916)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkLat.java	(revision 24917)
@@ -77,5 +77,5 @@
 					dlg.panelMain.panelChan.panelPort.regionBButton.doClick();
 				} else {
-					if (getRegion() == IALA_A)
+					if (getRegion() == Reg.A)
 						dlg.panelMain.panelChan.portButton.doClick();
 					else
@@ -91,5 +91,5 @@
 					dlg.panelMain.panelChan.panelPort.regionBButton.doClick();
 				} else {
-					if (getRegion() == IALA_A)
+					if (getRegion() == Reg.A)
 						dlg.panelMain.panelChan.stbdButton.doClick();
 					else
@@ -105,5 +105,5 @@
 					dlg.panelMain.panelChan.panelPort.regionBButton.doClick();
 				} else {
-					if (getRegion() == IALA_A)
+					if (getRegion() == Reg.A)
 						dlg.panelMain.panelChan.prefPortButton.doClick();
 					else
@@ -119,5 +119,5 @@
 					dlg.panelMain.panelChan.panelPort.regionBButton.doClick();
 				} else {
-					if (getRegion() == IALA_A)
+					if (getRegion() == Reg.A)
 						dlg.panelMain.panelChan.prefStbdButton.doClick();
 					else
@@ -211,234 +211,3 @@
 	}
 
-	public void paintSign() {
-		boolean region = getRegion();
-		Shp style = getShape();
-
-		String image = "/images/Lateral";
-
-		switch (getCategory()) {
-		case LAT_PORT:
-			if (region == IALA_A)
-				switch (style) {
-				case CAN:
-					image += "_Can_Red";
-					break;
-				case PILLAR:
-					image += "_Pillar_Red";
-					break;
-				case SPAR:
-					image += "_Spar_Red";
-					break;
-				case BEACON:
-					image += "_Beacon_Red";
-					break;
-				case TOWER:
-					image += "_Tower_Red";
-					break;
-				case FLOAT:
-					image += "_Float_Red";
-					break;
-				case PERCH:
-					image += "_Perch_Port";
-					break;
-				default:
-					dlg.panelMain.shapeIcon.setIcon(null);
-					return;
-				}
-			else
-				switch (style) {
-				case CAN:
-					image += "_Can_Green";
-					break;
-				case PILLAR:
-					image += "_Pillar_Green";
-					break;
-				case SPAR:
-					image += "_Spar_Green";
-					break;
-				case BEACON:
-					image += "_Beacon_Green";
-					break;
-				case TOWER:
-					image += "_Tower_Green";
-					break;
-				case FLOAT:
-					image += "_Float_Green";
-					break;
-				case PERCH:
-					image += "_Perch_Port";
-					break;
-				default:
-					dlg.panelMain.shapeIcon.setIcon(null);
-					return;
-				}
-			break;
-
-		case LAT_STBD:
-			if (region == IALA_A)
-				switch (style) {
-				case CONE:
-					image += "_Cone_Green";
-					break;
-				case PILLAR:
-					image += "_Pillar_Green";
-					break;
-				case SPAR:
-					image += "_Spar_Green";
-					break;
-				case BEACON:
-					image += "_Beacon_Green";
-					break;
-				case TOWER:
-					image += "_Tower_Green";
-					break;
-				case FLOAT:
-					image += "_Float_Green";
-					break;
-				case PERCH:
-					image += "_Perch_Starboard";
-					break;
-				default:
-					dlg.panelMain.shapeIcon.setIcon(null);
-					return;
-				}
-			else
-				switch (style) {
-				case CONE:
-					image += "_Cone_Red";
-					break;
-				case PILLAR:
-					image += "_Pillar_Red";
-					break;
-				case SPAR:
-					image += "_Spar_Red";
-					break;
-				case BEACON:
-					image += "_Beacon_Red";
-					break;
-				case TOWER:
-					image += "_Tower_Red";
-					break;
-				case FLOAT:
-					image += "_Float_Red";
-					break;
-				case PERCH:
-					image += "_Perch_Starboard";
-					break;
-				default:
-					dlg.panelMain.shapeIcon.setIcon(null);
-					return;
-				}
-			break;
-
-		case LAT_PREF_PORT:
-			if (region == IALA_A)
-				switch (style) {
-				case CAN:
-					image += "_Can_Red_Green_Red";
-					break;
-				case PILLAR:
-					image += "_Pillar_Red_Green_Red";
-					break;
-				case SPAR:
-					image += "_Spar_Red_Green_Red";
-					break;
-				case BEACON:
-					image += "_Beacon_Red_Green_Red";
-					break;
-				case TOWER:
-					image += "_Tower_Red_Green_Red";
-					break;
-				case FLOAT:
-					image += "_Float_Red_Green_Red";
-					break;
-				default:
-					dlg.panelMain.shapeIcon.setIcon(null);
-					return;
-				}
-			else
-				switch (style) {
-				case CAN:
-					image += "_Can_Green_Red_Green";
-					break;
-				case PILLAR:
-					image += "_Pillar_Green_Red_Green";
-					break;
-				case SPAR:
-					image += "_Spar_Green_Red_Green";
-					break;
-				case BEACON:
-					image += "_Beacon_Green_Red_Green";
-					break;
-				case TOWER:
-					image += "_Tower_Green_Red_Green";
-					break;
-				case FLOAT:
-					image += "_Float_Green_Red_Green";
-					break;
-				default:
-					dlg.panelMain.shapeIcon.setIcon(null);
-					return;
-				}
-			break;
-
-		case LAT_PREF_STBD:
-			if (region == IALA_A)
-				switch (style) {
-				case CONE:
-					image += "_Cone_Green_Red_Green";
-					break;
-				case PILLAR:
-					image += "_Pillar_Green_Red_Green";
-					break;
-				case SPAR:
-					image += "_Spar_Green_Red_Green";
-					break;
-				case BEACON:
-					image += "_Beacon_Green_Red_Green";
-					break;
-				case TOWER:
-					image += "_Tower_Green_Red_Green";
-					break;
-				case FLOAT:
-					image += "_Float_Green_Red_Green";
-					break;
-				default:
-					dlg.panelMain.shapeIcon.setIcon(null);
-					return;
-				}
-			else
-				switch (style) {
-				case CONE:
-					image += "_Cone_Red_Green_Red";
-					break;
-				case PILLAR:
-					image += "_Pillar_Red_Green_Red";
-					break;
-				case SPAR:
-					image += "_Spar_Red_Green_Red";
-					break;
-				case BEACON:
-					image += "_Beacon_Red_Green_Red";
-					break;
-				case TOWER:
-					image += "_Tower_Red_Green_Red";
-					break;
-				case FLOAT:
-					image += "_Float_Red_Green_Red";
-					break;
-				default:
-					dlg.panelMain.shapeIcon.setIcon(null);
-					return;
-				}
-			break;
-		default:
-			dlg.panelMain.shapeIcon.setIcon(null);
-			return;
-		}
-			image += ".png";
-			dlg.panelMain.shapeIcon.setIcon(new ImageIcon(getClass().getResource(image)));
-
-		super.paintSign();
-	}
 }
Index: applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkLight.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkLight.java	(revision 24916)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkLight.java	(revision 24917)
@@ -55,28 +55,3 @@
 	}
 
-	public void paintSign() {
-		switch (getCategory()) {
-		case LIGHT_HOUSE:
-			dlg.panelMain.shapeIcon.setIcon(new ImageIcon(getClass().getResource("/images/Light_House.png")));
-			break;
-
-		case LIGHT_MAJOR:
-			dlg.panelMain.shapeIcon.setIcon(new ImageIcon(getClass().getResource("/images/Light_Major.png")));
-			break;
-
-		case LIGHT_MINOR:
-			dlg.panelMain.shapeIcon.setIcon(new ImageIcon(getClass().getResource("/images/Light_Minor.png")));
-			break;
-
-		case LIGHT_VESSEL:
-			dlg.panelMain.shapeIcon.setIcon(new ImageIcon(getClass().getResource("/images/Float_Major.png")));
-			break;
-
-		case LIGHT_FLOAT:
-			dlg.panelMain.shapeIcon.setIcon(new ImageIcon(getClass().getResource("/images/Float_Minor.png")));
-			break;
-		}
-		super.paintSign();
-	}
-
 }
Index: applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkSaw.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkSaw.java	(revision 24916)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkSaw.java	(revision 24917)
@@ -55,32 +55,3 @@
 	}
 
-	public void paintSign() {
-
-		String image = "/images/Safe_Water";
-
-		switch (getShape()) {
-		case PILLAR:
-			image += "_Pillar";
-			break;
-		case SPAR:
-			image += "_Spar";
-			break;
-		case SPHERE:
-			image += "_Sphere";
-			break;
-		case BEACON:
-			image += "_Beacon";
-			break;
-		case FLOAT:
-			image += "_Float";
-			break;
-		default:
-			dlg.panelMain.shapeIcon.setIcon(null);
-			return;
-		}
-			image += ".png";
-			dlg.panelMain.shapeIcon.setIcon(new ImageIcon(getClass().getResource(image)));
-
-			super.paintSign();
-	}
 }
Index: applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkSpec.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkSpec.java	(revision 24916)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkSpec.java	(revision 24917)
@@ -83,44 +83,3 @@
 	}
 
-	public void paintSign() {
-
-		String image = "/images/Special_Purpose";
-
-		switch (getShape()) {
-		case PILLAR:
-			image += "_Pillar";
-			break;
-		case CAN:
-			image += "_Can";
-			break;
-		case CONE:
-			image += "_Cone";
-			break;
-		case SPAR:
-			image += "_Spar";
-			break;
-		case SPHERE:
-			image += "_Sphere";
-			break;
-		case BARREL:
-			image += "_Barrel";
-			break;
-		case FLOAT:
-			image += "_Float";
-			break;
-		case BEACON:
-			image += "_Beacon";
-			break;
-		case TOWER:
-			image += "_Tower";
-			break;
-		default:
-			dlg.panelMain.shapeIcon.setIcon(null);
-			return;
-		}
-		image += ".png";
-		dlg.panelMain.topIcon.setIcon(new ImageIcon(getClass().getResource(image)));
-
-		super.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 24916)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/SeaMark.java	(revision 24917)
@@ -2,5 +2,7 @@
 
 import javax.swing.ImageIcon;
-
+import javax.swing.JRadioButton;
+
+import java.util.EnumMap;
 import java.util.Iterator;
 import java.util.Map;
@@ -15,8 +17,4 @@
 abstract public class SeaMark {
 
-	/**
-	 * Variables
-	 */
-
 	protected OSeaMAction dlg = null;
 
@@ -27,17 +25,18 @@
 	protected SeaMark(OSeaMAction dia) {
 		dlg = dia;
-		region = Main.pref.get("tomsplugin.IALA").equals("B");
-	}
-
-	public final static boolean IALA_A = false;
-	public final static boolean IALA_B = true;
-
-	private boolean region = false;
-
-	public boolean getRegion() {
+		region = Main.pref.get("tomsplugin.IALA").equals("A") ? Reg.A : Reg.B;
+	}
+
+	public enum Reg {
+		A, B
+	}
+
+	private Reg region = Reg.A;
+
+	public Reg getRegion() {
 		return region;
 	}
 
-	public void setRegion(boolean reg) {
+	public void setRegion(Reg reg) {
 		region = reg;
 	}
@@ -54,5 +53,26 @@
 
 	public enum Obj {
-		UNKNOWN, BCNCAR, BCNISD, BCNLAT, BCNSAW, BCNSPP, BOYCAR, BOYISD, BOYLAT, BOYSAW, BOYSPP, LIGHTS, LITFLT, LITVES, LNDMRK, MORFAC
+		UNKNOWN, BCNCAR, BCNISD, BCNLAT, BCNSAW, BCNSPP, BOYCAR, BOYISD, BOYLAT, BOYSAW, BOYSPP, LITMAJ, LITMIN, LITFLT, LITVES, LNDMRK, MORFAC
+	}
+
+	public static final EnumMap<Obj, String> objects = new EnumMap<Obj, String>(Obj.class);
+	static {
+		objects.put(Obj.BCNCAR, "beacon_cardinal");
+		objects.put(Obj.BCNISD, "beacon_isolated_danger");
+		objects.put(Obj.BCNLAT, "beacon_lateral");
+		objects.put(Obj.BCNSAW, "beacon_safe_water");
+		objects.put(Obj.BCNSPP, "beacon_special_purpose");
+		objects.put(Obj.BOYCAR, "buoy_cardinal");
+		objects.put(Obj.BOYISD, "buoy_isolated_danger");
+		objects.put(Obj.BOYLAT, "buoy_lateral");
+		objects.put(Obj.BOYSAW, "buoy_safe_water");
+		objects.put(Obj.BOYSPP, "buoy_special_purpose");
+		objects.put(Obj.LITMAJ, "light_major");
+		objects.put(Obj.LITMIN, "light_minor");
+		objects.put(Obj.LITFLT, "light_float");
+		objects.put(Obj.LITVES, "light_vessel");
+		objects.put(Obj.LNDMRK, "landmark");
+		objects.put(Obj.MORFAC, "mooring");
+
 	}
 
@@ -68,9 +88,30 @@
 
 	public enum Ent {
-		BODY, BUOY, BEACON, FLOAT, TOPMARK, LIGHT
+		BODY, BUOY, BEACON, FLOAT, TOPMARK, DAYMARK, LIGHT
 	}
 
 	public enum Col {
 		UNKNOWN, WHITE, RED, ORANGE, AMBER, YELLOW, GREEN, BLUE, VIOLET, BLACK, RED_GREEN_RED, GREEN_RED_GREEN, RED_WHITE, BLACK_YELLOW, BLACK_YELLOW_BLACK, YELLOW_BLACK, YELLOW_BLACK_YELLOW, BLACK_RED_BLACK
+	}
+
+	public static final EnumMap<Col, String> colours = new EnumMap<Col, String>(Col.class);
+	static {
+		colours.put(Col.WHITE, "white");
+		colours.put(Col.RED, "red");
+		colours.put(Col.ORANGE, "orange");
+		colours.put(Col.AMBER, "amber");
+		colours.put(Col.YELLOW, "yellow");
+		colours.put(Col.GREEN, "green");
+		colours.put(Col.BLUE, "blue");
+		colours.put(Col.VIOLET, "violet");
+		colours.put(Col.BLACK, "black");
+		colours.put(Col.RED_GREEN_RED, "red;green;red");
+		colours.put(Col.GREEN_RED_GREEN, "green;red;green");
+		colours.put(Col.RED_WHITE, "red;white");
+		colours.put(Col.BLACK_YELLOW, "black;yellow");
+		colours.put(Col.BLACK_YELLOW_BLACK, "black;yellow;black");
+		colours.put(Col.YELLOW_BLACK, "yellow;black");
+		colours.put(Col.YELLOW_BLACK_YELLOW, "yellow;black;yellow");
+		colours.put(Col.BLACK_RED_BLACK, "black;red;black");
 	}
 
@@ -86,4 +127,6 @@
 		case TOPMARK:
 			return topColour;
+		case DAYMARK:
+			return dayColour;
 		case LIGHT:
 			return lightColour[sectorIndex];
@@ -103,4 +146,7 @@
 			topColour = col;
 			break;
+		case DAYMARK:
+			dayColour = col;
+			break;
 		case LIGHT:
 			lightColour[sectorIndex] = col;
@@ -113,4 +159,17 @@
 	}
 
+	public static final EnumMap<Cat, String> categories = new EnumMap<Cat, String>(Cat.class);
+	static {
+		categories.put(Cat.LAT_PORT, "port");
+		categories.put(Cat.LAT_STBD, "starboard");
+		categories.put(Cat.LAT_PREF_PORT, "preferred_channel_port");
+		categories.put(Cat.LAT_PREF_STBD, "preferred_channel_starboard");
+		categories.put(Cat.CARD_NORTH, "north");
+		categories.put(Cat.CARD_EAST, "east");
+		categories.put(Cat.CARD_SOUTH, "south");
+		categories.put(Cat.CARD_WEST, "west");
+		categories.put(Cat.MOORING_BUOY, "mooring_buoy");
+	}
+
 	private Cat category = Cat.UNKNOWN;
 
@@ -127,4 +186,20 @@
 	}
 
+	public static final EnumMap<Shp, String> shapes = new EnumMap<Shp, String>(Shp.class);
+	static {
+		shapes.put(Shp.PILLAR, "pillar");
+		shapes.put(Shp.SPAR, "spar");
+		shapes.put(Shp.CAN, "can");
+		shapes.put(Shp.CONE, "conical");
+		shapes.put(Shp.SPHERE, "sphere");
+		shapes.put(Shp.BARREL, "barrel");
+		shapes.put(Shp.FLOAT, "float");
+		shapes.put(Shp.SUPER, "super-buoy");
+		shapes.put(Shp.BEACON, "beacon");
+		shapes.put(Shp.TOWER, "tower");
+		shapes.put(Shp.STAKE, "stake");
+		shapes.put(Shp.PERCH, "perch");
+	}
+
 	private Shp shape = Shp.UNKNOWN;
 
@@ -138,5 +213,18 @@
 
 	public enum Top {
-		NONE, CAN, CONE, SPHERE, X_SHAPE, NORTH, SOUTH, EAST, WEST, SPHERES2, BOARD, DIAMOND, TRIANGLE, TRIANGLE_INV, SQUARE, MOORING
+		NONE, CAN, CONE, SPHERE, X_SHAPE, NORTH, SOUTH, EAST, WEST, SPHERES2
+	}
+
+	public static final EnumMap<Top, String> tops = new EnumMap<Top, String>(Top.class);
+	static {
+		tops.put(Top.CAN, "cylinder");
+		tops.put(Top.CONE, "cylinder");
+		tops.put(Top.SPHERE, "SPHERE");
+		tops.put(Top.X_SHAPE, "X-SHAPE");
+		tops.put(Top.NORTH, "2 cones up");
+		tops.put(Top.SOUTH, "2 cones down");
+		tops.put(Top.EAST, "2 cones base together");
+		tops.put(Top.WEST, "2 cones points together");
+		tops.put(Top.SPHERES2, "2 spheres");
 	}
 
@@ -154,4 +242,32 @@
 	public void setTopmark(Top top) {
 		topShape = top;
+	}
+
+	public enum Day {
+		NONE, BOARD, DIAMOND, TRIANGLE, TRIANGLE_INV, SQUARE
+	}
+
+	public static final EnumMap<Day, String> days = new EnumMap<Day, String>(Day.class);
+	static {
+		days.put(Day.BOARD, "board");
+		days.put(Day.DIAMOND, "diamond");
+		days.put(Day.TRIANGLE, "triangle, point up");
+		days.put(Day.TRIANGLE_INV, "triangle, point down");
+		days.put(Day.SQUARE, "square");
+	}
+
+	private Day dayShape = Day.NONE;
+	private Col dayColour = Col.UNKNOWN;
+
+	public boolean hasDaymark() {
+		return (dayShape != Day.NONE);
+	}
+
+	public Day getDaymark() {
+		return dayShape;
+	}
+
+	public void setDaymark(Day day) {
+		dayShape = day;
 	}
 
@@ -441,4 +557,8 @@
 		Map<String, String> keys;
 		keys = dlg.node.getKeys();
+
+		if (keys.containsKey("seamark:topmark:shape")) {
+			str = keys.get("seamark:topmark:shape");
+		}
 
 		setFired(false);
@@ -550,26 +670,43 @@
 	public void paintSign() {
 
+		String imgStr = "/images/";
+		String shpStr = shapes.get(shape);
+		if (shpStr == null)
+			dlg.panelMain.topIcon.setIcon(null);
+		else {
+			imgStr += shpStr;
+			if (shpStr.equals("perch")) {
+				imgStr += (getCategory() == Cat.LAT_PORT ? "_port" : "_stbd");
+			} else {
+				String colStr = colours.get(bodyColour);
+				if (colStr != null)
+					imgStr += ("_" + colStr);
+			}
+			imgStr += ".png";
+			dlg.panelMain.topIcon.setIcon(new ImageIcon(getClass().getResource(imgStr)));
+		}
+
 		if (hasRadar()) {
 			dlg.panelMain.radarIcon.setIcon(new ImageIcon(getClass().getResource("/images/Radar_Reflector_355.png")));
-		}	else if (hasRacon()) {
+		} else if (hasRacon()) {
 			dlg.panelMain.radarIcon.setIcon(new ImageIcon(getClass().getResource("/images/Radar_Station.png")));
-//			if (getRaType() != 0) {
-//				String c = (String) dlg.cbM01Racon.getSelectedItem();
-//				if ((getRaType() == RATYPE_RACON) && !getRaconGroup().isEmpty())
-//					c += ("(" + getRaconGroup() + ")");
-//				dlg.lM01RadarMarkeys.setText(c);
-//			}
+			// if (getRaType() != 0) {
+			// String c = (String) dlg.cbM01Racon.getSelectedItem();
+			// if ((getRaType() == RATYPE_RACON) && !getRaconGroup().isEmpty())
+			// c += ("(" + getRaconGroup() + ")");
+			// dlg.lM01RadarMarkeys.setText(c);
+			// }
 		}
 
 		if (hasFog()) {
 			dlg.panelMain.fogIcon.setIcon(new ImageIcon(getClass().getResource("/images/Fog_Signal.png")));
-//			if (getFogSound() != 0) {
-//				String c = (String) dlg.cbM01Fog.getSelectedItem();
-//				if (!getFogGroup().isEmpty())
-//					c += ("(" + getFogGroup() + ")");
-//				if (!getFogPeriod().isEmpty())
-//					c += (" " + getFogPeriod() + "s");
-//				dlg.lM01FogMarkeys.setText(c);
-//			}
+			// if (getFogSound() != 0) {
+			// String c = (String) dlg.cbM01Fog.getSelectedItem();
+			// if (!getFogGroup().isEmpty())
+			// c += ("(" + getFogGroup() + ")");
+			// if (!getFogPeriod().isEmpty())
+			// c += (" " + getFogPeriod() + "s");
+			// dlg.lM01FogMarkeys.setText(c);
+			// }
 		}
 
@@ -590,21 +727,12 @@
 			}
 
-/*			c = getLightChar();
-			if (c.contains("+")) {
-				i1 = c.indexOf("+");
-				tmp = c.substring(i1, c.length());
-				c = c.substring(0, i1);
-				if (!getLightGroup().isEmpty()) {
-					c = c + "(" + getLightGroup() + ")";
-				}
-				if (tmp != null)
-					c = c + tmp;
-			} else if (!getLightGroup().isEmpty())
-				c = c + "(" + getLightGroup() + ")";
-			c = c + " " + getLightColour();
-			lp = getLightPeriod();
-			if (!lp.isEmpty())
-				c = c + " " + lp + "s";
-*/		}
+			/*
+			 * c = getLightChar(); if (c.contains("+")) { i1 = c.indexOf("+"); tmp =
+			 * c.substring(i1, c.length()); c = c.substring(0, i1); if
+			 * (!getLightGroup().isEmpty()) { c = c + "(" + getLightGroup() + ")"; }
+			 * if (tmp != null) c = c + tmp; } else if (!getLightGroup().isEmpty()) c
+			 * = c + "(" + getLightGroup() + ")"; c = c + " " + getLightColour(); lp =
+			 * getLightPeriod(); if (!lp.isEmpty()) c = c + " " + lp + "s";
+			 */}
 	}
 
@@ -613,5 +741,5 @@
 		String str;
 
-		Main.pref.put("tomsplugin.IALA", getRegion() ? "B" : "A");
+		Main.pref.put("tomsplugin.IALA", getRegion() == Reg.A ? "A" : "B");
 
 		while (it.hasNext()) {
@@ -625,274 +753,50 @@
 			Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:name", name));
 
-		String objStr = "";
-		switch (object) {
-		case BCNCAR:
-			objStr = "beacon_cardinal";
-			break;
-		case BCNISD:
-			objStr = "beacon_isolated_danger";
-			break;
-		case BCNLAT:
-			objStr = "beacon_lateral";
-			break;
-		case BCNSAW:
-			objStr = "beacon_safe_water";
-			break;
-		case BCNSPP:
-			objStr = "beacon_special_purpose";
-			break;
-		case BOYCAR:
-			objStr = "buoy_cardinal";
-			break;
-		case BOYISD:
-			objStr = "buoy_isolated_danger";
-			break;
-		case BOYLAT:
-			objStr = "buoy_lateral";
-			break;
-		case BOYSAW:
-			objStr = "buoy_safe_water";
-			break;
-		case BOYSPP:
-			objStr = "buoy_special_purpose";
-			break;
-		case LIGHTS:
-			if (category == Cat.LIGHT_MAJOR)
-				objStr = "light_major";
-			else
-				objStr = "light_minor";
-			break;
-		case LITFLT:
-			objStr = "light_float";
-			break;
-		case LITVES:
-			objStr = "light_vessel";
-			break;
-		case LNDMRK:
-			objStr = "landmark";
-			break;
-		case MORFAC:
-			objStr = "mooring";
-			break;
-		}
-		if (!objStr.isEmpty()) {
+		String objStr = objects.get(object);
+		if (objStr != null) {
 			Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:type", objStr));
 
-			switch (category) {
-			case LAT_PORT:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":category", "port"));
-				break;
-			case LAT_STBD:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":category", "starboard"));
-				break;
-			case LAT_PREF_PORT:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":category", "preferred_channel_port"));
-				break;
-			case LAT_PREF_STBD:
-				Main.main.undoRedo
-						.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":category", "preferred_channel_starboard"));
-				break;
-			case CARD_NORTH:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":category", "north"));
-				break;
-			case CARD_EAST:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":category", "east"));
-				break;
-			case CARD_SOUTH:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":category", "south"));
-				break;
-			case CARD_WEST:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":category", "west"));
-				break;
-			case MOORING_BUOY:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":category", "mooring_buoy"));
+			str = categories.get(category);
+			if (str != null)
+				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":category", str));
+
+			Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":shape", shapes.get(shape)));
+
+			str = colours.get(bodyColour);
+			if (str != null)
+				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":colour", str));
+
+			switch (bodyColour) {
+			case RED_GREEN_RED:
+			case GREEN_RED_GREEN:
+			case BLACK_YELLOW:
+			case BLACK_YELLOW_BLACK:
+			case YELLOW_BLACK:
+			case YELLOW_BLACK_YELLOW:
+			case BLACK_RED_BLACK:
+				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":colour_pattern", "horizontal stripes"));
+				break;
+			case RED_WHITE:
+				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":colour_pattern", "vertical stripes"));
 				break;
 			}
-
-			switch (shape) {
-			case PILLAR:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":shape", "pillar"));
-				break;
-			case SPAR:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":shape", "spar"));
-				break;
-			case CAN:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":shape", "can"));
-				break;
-			case CONE:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":shape", "conical"));
-				break;
-			case SPHERE:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":shape", "sphere"));
-				break;
-			case BARREL:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":shape", "barrel"));
-				break;
-			case SUPER:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":shape", "super-buoy"));
-				break;
-			case TOWER:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":shape", "tower"));
-				break;
-			case STAKE:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":shape", "stake"));
-				break;
-			case PERCH:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":shape", "perch"));
-				break;
-			}
-
-			switch (bodyColour) {
-			case WHITE:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":colour", "white"));
-				break;
-			case RED:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":colour", "red"));
-				break;
-			case ORANGE:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":colour", "orange"));
-				break;
-			case AMBER:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":colour", "amber"));
-				break;
-			case YELLOW:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":colour", "yellow"));
-				break;
-			case GREEN:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":colour", "green"));
-				break;
-			case BLUE:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":colour", "blue"));
-				break;
-			case VIOLET:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":colour", "violet"));
-				break;
-			case BLACK:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":colour", "black"));
-				break;
-			case RED_GREEN_RED:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":colour", "red;green;red"));
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":colour_pattern", "horizontal stripes"));
-				break;
-			case GREEN_RED_GREEN:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":colour", "green;red;green"));
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":colour_pattern", "horizontal stripes"));
-				break;
-			case RED_WHITE:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":colour", "red;white"));
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":colour_pattern", "vertical stripes"));
-				break;
-			case BLACK_YELLOW:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":colour", "black;yellow"));
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":colour_pattern", "horizontal stripes"));
-				break;
-			case BLACK_YELLOW_BLACK:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":colour", "black;yellow;black"));
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":colour_pattern", "horizontal stripes"));
-				break;
-			case YELLOW_BLACK:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":colour", "yellow;black"));
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":colour_pattern", "horizontal stripes"));
-				break;
-			case YELLOW_BLACK_YELLOW:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":colour", "yellow;black;yellow"));
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":colour_pattern", "horizontal stripes"));
-				break;
-			case BLACK_RED_BLACK:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":colour", "black;red;black"));
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + objStr + ":colour_pattern", "horizontal stripes"));
-				break;
-			}
-		}
-
-		String top = "";
-		switch (topShape) {
-		case CAN:
-			Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:topmark:shape", "cylinder"));
-			top = "top";
-			break;
-		case CONE:
-			Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:topmark:shape", "cone, point up"));
-			top = "top";
-			break;
-		case SPHERE:
-			Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:topmark:shape", "sphere"));
-			top = "top";
-			break;
-		case X_SHAPE:
-			Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:topmark:shape", "x-shape"));
-			top = "top";
-			break;
-		case NORTH:
-			Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:topmark:shape", "2 cones up"));
-			top = "top";
-			break;
-		case SOUTH:
-			Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:topmark:shape", "2 cones down"));
-			top = "top";
-			break;
-		case EAST:
-			Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:topmark:shape", "2 cones base together"));
-			top = "top";
-			break;
-		case WEST:
-			Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:topmark:shape", "2 cones points together"));
-			top = "top";
-			break;
-		case SPHERES2:
-			Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:topmark:shape", "2 spheres"));
-			top = "top";
-			break;
-		case BOARD:
-			Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:daymark:shape", "board"));
-			top = "day";
-			break;
-		case DIAMOND:
-			Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:daymark:shape", "diamond"));
-			top = "day";
-			break;
-		case TRIANGLE:
-			Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:daymark:shape", "triangle, point up"));
-			top = "day";
-			break;
-		case TRIANGLE_INV:
-			Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:daymark:shape", "triangle, point down"));
-			top = "day";
-			break;
-		case SQUARE:
-			Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:daymark:shape", "square"));
-			top = "day";
-			break;
-		}
-		if (!top.isEmpty()) {
-			switch (topColour) {
-			case WHITE:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + top + "mark:colour", "white"));
-				break;
-			case RED:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + top + "mark:colour", "red"));
-				break;
-			case ORANGE:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + top + "mark:colour", "orange"));
-				break;
-			case AMBER:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + top + "mark:colour", "amber"));
-				break;
-			case YELLOW:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + top + "mark:colour", "yellow"));
-				break;
-			case GREEN:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + top + "mark:colour", "green"));
-				break;
-			case BLUE:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + top + "mark:colour", "blue"));
-				break;
-			case VIOLET:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + top + "mark:colour", "violet"));
-				break;
-			case BLACK:
-				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:" + top + "mark:colour", "black"));
-				break;
-			}
+		}
+
+		str = tops.get(topShape);
+		if (str != null) {
+			Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:topmark:shape", str));
+
+			str = colours.get(topColour);
+			if (str != null)
+				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:topmark:colour", str));
+		}
+
+		str = days.get(dayShape);
+		if (str != null) {
+			Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:daymark:shape", str));
+
+			str = colours.get(dayColour);
+			if (str != null)
+				Main.main.undoRedo.add(new ChangePropertyCommand(dlg.node, "seamark:daymark:colour", str));
 		}
 
