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 24903)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/dialogs/OSeaMAction.java	(revision 24904)
@@ -42,5 +42,5 @@
 			Selection = newSelection;
 
-			// System.out.println(newSelection);
+			// System.out.println("hello");
 			for (OsmPrimitive osm : Selection) {
 				if (osm instanceof Node) {
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 24903)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelChan.java	(revision 24904)
@@ -41,8 +41,27 @@
 		public void actionPerformed(java.awt.event.ActionEvent e) {
 			Shp shp = null;
-			if (dlg.mark != null) shp = dlg.mark.getShape();
+			if (dlg.mark != null)
+				shp = dlg.mark.getShape();
+			if (portButton.isSelected() || prefPortButton.isSelected()) {
+				if (!(dlg.mark instanceof MarkLat)) {
+					dlg.mark = new MarkLat(dlg);
+					dlg.panelMain.topButton.setEnabled(true);
+					dlg.panelMain.fogButton.setEnabled(true);
+					dlg.panelMain.radButton.setEnabled(true);
+					dlg.panelMain.litButton.setEnabled(true);
+				}
+				dlg.panelMain.panelTop.enableAll(false);
+				dlg.panelMain.panelTop.noTopButton.setEnabled(true);
+				dlg.panelMain.panelTop.canTopButton.setEnabled(true);
+				dlg.panelMain.panelTop.panelCol.enableAll(false);
+				if (dlg.mark.getRegion() == SeaMark.IALA_A) {
+					dlg.panelMain.panelTop.panelCol.redButton.setEnabled(true);
+					dlg.panelMain.panelTop.panelCol.redButton.doClick();
+				} else {
+					dlg.panelMain.panelTop.panelCol.greenButton.setEnabled(true);
+					dlg.panelMain.panelTop.panelCol.greenButton.doClick();
+				}
+			}
 			if (portButton.isSelected()) {
-				if (!(dlg.mark instanceof MarkLat))
-					dlg.mark = new MarkLat(dlg);
 				dlg.mark.setCategory(Cat.LAT_PORT);
 				if (panelPort.shapes.containsKey(shp)) {
@@ -66,7 +85,48 @@
 				panelPort.setVisible(false);
 			}
+			if (prefPortButton.isSelected()) {
+				dlg.mark.setCategory(Cat.LAT_PREF_PORT);
+				if (panelPort.shapes.containsKey(shp) && (shp != Shp.PERCH)) {
+					panelPort.shapes.get(shp).doClick();
+				} else {
+					panelPort.clearSelections();
+					dlg.mark.setShape(Shp.UNKNOWN);
+				}
+				if (dlg.mark.getRegion() == SeaMark.IALA_A) {
+					dlg.mark.setColour(Ent.BODY, Col.RED_GREEN_RED);
+					panelPort.regionAButton.doClick();
+				} else {
+					dlg.mark.setColour(Ent.BODY, Col.GREEN_RED_GREEN);
+					panelPort.regionBButton.doClick();
+				}
+				prefPortButton.setBorderPainted(true);
+				panelPort.setVisible(true);
+				panelPort.perchButton.setVisible(false);
+			} else {
+				prefPortButton.setBorderPainted(false);
+				if (!portButton.isSelected())
+					panelPort.setVisible(false);
+			}
+			if (stbdButton.isSelected() || prefStbdButton.isSelected()) {
+				if (!(dlg.mark instanceof MarkLat)) {
+					dlg.mark = new MarkLat(dlg);
+					dlg.panelMain.topButton.setEnabled(true);
+					dlg.panelMain.fogButton.setEnabled(true);
+					dlg.panelMain.radButton.setEnabled(true);
+					dlg.panelMain.litButton.setEnabled(true);
+				}
+				dlg.panelMain.panelTop.enableAll(false);
+				dlg.panelMain.panelTop.noTopButton.setEnabled(true);
+				dlg.panelMain.panelTop.coneTopButton.setEnabled(true);
+				dlg.panelMain.panelTop.panelCol.enableAll(false);
+				if (dlg.mark.getRegion() == SeaMark.IALA_A) {
+					dlg.panelMain.panelTop.panelCol.greenButton.setEnabled(true);
+					dlg.panelMain.panelTop.panelCol.greenButton.doClick();
+				} else {
+					dlg.panelMain.panelTop.panelCol.redButton.setEnabled(true);
+					dlg.panelMain.panelTop.panelCol.redButton.doClick();
+				}
+			}
 			if (stbdButton.isSelected()) {
-				if (!(dlg.mark instanceof MarkLat))
-					dlg.mark = new MarkLat(dlg);
 				dlg.mark.setCategory(Cat.LAT_STBD);
 				if (panelStbd.shapes.containsKey(shp)) {
@@ -90,31 +150,5 @@
 				panelStbd.setVisible(false);
 			}
-			if (prefPortButton.isSelected()) {
-				if (!(dlg.mark instanceof MarkLat))
-					dlg.mark = new MarkLat(dlg);
-				dlg.mark.setCategory(Cat.LAT_PREF_PORT);
-				if (panelPort.shapes.containsKey(shp) && (shp != Shp.PERCH)) {
-					panelPort.shapes.get(shp).doClick();
-				} else {
-					panelPort.clearSelections();
-					dlg.mark.setShape(Shp.UNKNOWN);
-				}
-				if (dlg.mark.getRegion() == SeaMark.IALA_A) {
-					dlg.mark.setColour(Ent.BODY, Col.RED_GREEN_RED);
-					panelPort.regionAButton.doClick();
-				} else {
-					dlg.mark.setColour(Ent.BODY, Col.GREEN_RED_GREEN);
-					panelPort.regionBButton.doClick();
-				}
-				prefPortButton.setBorderPainted(true);
-				panelPort.setVisible(true);
-				panelPort.perchButton.setVisible(false);
-			} else {
-				prefPortButton.setBorderPainted(false);
-				if (!portButton.isSelected()) panelPort.setVisible(false);
-			}
 			if (prefStbdButton.isSelected()) {
-				if (!(dlg.mark instanceof MarkLat))
-					dlg.mark = new MarkLat(dlg);
 				dlg.mark.setCategory(Cat.LAT_PREF_STBD);
 				if (panelStbd.shapes.containsKey(shp) && (shp != Shp.PERCH)) {
@@ -136,5 +170,6 @@
 			} else {
 				prefStbdButton.setBorderPainted(false);
-				if (!stbdButton.isSelected()) panelStbd.setVisible(false);
+				if (!stbdButton.isSelected())
+					panelStbd.setVisible(false);
 			}
 			if (safeWaterButton.isSelected()) {
@@ -147,4 +182,10 @@
 						dlg.mark.setShape(Shp.UNKNOWN);
 					}
+					dlg.panelMain.panelTop.enableAll(false);
+					dlg.panelMain.panelTop.noTopButton.setEnabled(true);
+					dlg.panelMain.panelTop.sphereTopButton.setEnabled(true);
+					dlg.panelMain.panelTop.panelCol.enableAll(false);
+					dlg.panelMain.panelTop.panelCol.redButton.setEnabled(true);
+					dlg.panelMain.panelTop.panelCol.redButton.doClick();
 				}
 				dlg.mark.setColour(Ent.BODY, Col.RED_WHITE);
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 24903)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelCol.java	(revision 24904)
@@ -72,4 +72,11 @@
 	}
 
+	public void enableAll(boolean state) {
+		Iterator<Col> it = colours.keySet().iterator();
+		while (it.hasNext()) {
+			colours.get(it.next()).setEnabled(state);
+		}
+	}
+
 	private JRadioButton getColButton(JRadioButton button, int x, int y, int w, int h, String tip, Col col) {
 		button.setBounds(new Rectangle(x, y, w, h));
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 24903)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelHaz.java	(revision 24904)
@@ -18,4 +18,5 @@
 import oseam.seamarks.MarkCard;
 import oseam.seamarks.MarkIsol;
+import oseam.seamarks.MarkLat;
 import oseam.seamarks.SeaMark.Cat;
 import oseam.seamarks.SeaMark.Col;
@@ -35,13 +36,23 @@
 	private ActionListener alCat = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
-			if (northButton.isSelected()) {
-				if (!(dlg.mark instanceof MarkCard)) {
+			if (catButtons.getSelection() != null) {
+				if (!(dlg.mark instanceof MarkCard) && !isolButton.isSelected()) {
 					dlg.mark = new MarkCard(dlg);
 					alShape.actionPerformed(null);
 				}
+				dlg.panelMain.topButton.setEnabled(true);
+				dlg.panelMain.fogButton.setEnabled(true);
+				dlg.panelMain.radButton.setEnabled(true);
+				dlg.panelMain.litButton.setEnabled(true);
+				dlg.panelMain.panelTop.enableAll(false);
+				dlg.panelMain.panelTop.panelCol.enableAll(false);
+				dlg.panelMain.panelTop.panelCol.blackButton.setEnabled(true);
+				dlg.panelMain.panelTop.panelCol.blackButton.doClick();
+			}
+			if (northButton.isSelected()) {
 				dlg.mark.setCategory(Cat.CARD_NORTH);
 				dlg.mark.setColour(Ent.BODY, Col.BLACK_YELLOW);
+				dlg.panelMain.panelTop.northTopButton.setEnabled(true);
 				dlg.panelMain.panelTop.northTopButton.doClick();
-				dlg.panelMain.panelTop.panelCol.blackButton.doClick();
 				northButton.setBorderPainted(true);
 			} else {
@@ -49,12 +60,8 @@
 			}
 			if (southButton.isSelected()) {
-				if (!(dlg.mark instanceof MarkCard)) {
-					dlg.mark = new MarkCard(dlg);
-					alShape.actionPerformed(null);
-				}
 				dlg.mark.setCategory(Cat.CARD_SOUTH);
 				dlg.mark.setColour(Ent.BODY, Col.YELLOW_BLACK);
+				dlg.panelMain.panelTop.southTopButton.setEnabled(true);
 				dlg.panelMain.panelTop.southTopButton.doClick();
-				dlg.panelMain.panelTop.panelCol.blackButton.doClick();
 				southButton.setBorderPainted(true);
 			} else {
@@ -62,12 +69,8 @@
 			}
 			if (eastButton.isSelected()) {
-				if (!(dlg.mark instanceof MarkCard)) {
-					dlg.mark = new MarkCard(dlg);
-					alShape.actionPerformed(null);
-				}
 				dlg.mark.setCategory(Cat.CARD_EAST);
 				dlg.mark.setColour(Ent.BODY, Col.BLACK_YELLOW_BLACK);
+				dlg.panelMain.panelTop.eastTopButton.setEnabled(true);
 				dlg.panelMain.panelTop.eastTopButton.doClick();
-				dlg.panelMain.panelTop.panelCol.blackButton.doClick();
 				eastButton.setBorderPainted(true);
 			} else {
@@ -75,12 +78,8 @@
 			}
 			if (westButton.isSelected()) {
-				if (!(dlg.mark instanceof MarkCard)) {
-					dlg.mark = new MarkCard(dlg);
-					alShape.actionPerformed(null);
-				}
 				dlg.mark.setCategory(Cat.CARD_WEST);
 				dlg.mark.setColour(Ent.BODY, Col.YELLOW_BLACK_YELLOW);
+				dlg.panelMain.panelTop.westTopButton.setEnabled(true);
 				dlg.panelMain.panelTop.westTopButton.doClick();
-				dlg.panelMain.panelTop.panelCol.blackButton.doClick();
 				westButton.setBorderPainted(true);
 			} else {
@@ -93,6 +92,6 @@
 				}
 				dlg.mark.setColour(Ent.BODY, Col.BLACK_RED_BLACK);
+				dlg.panelMain.panelTop.spheres2TopButton.setEnabled(true);
 				dlg.panelMain.panelTop.spheres2TopButton.doClick();
-				dlg.panelMain.panelTop.panelCol.blackButton.doClick();
 				isolButton.setBorderPainted(true);
 			} else {
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 24903)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelMain.java	(revision 24904)
@@ -45,5 +45,5 @@
 	public JRadioButton topButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/TopButton.png")));
 	public JRadioButton fogButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/FogButton.png")));
-	public JRadioButton radarButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/RadarButton.png")));
+	public JRadioButton radButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/RadarButton.png")));
 	public JRadioButton litButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/LitButton.png")));
 	private ActionListener alMisc = null;
@@ -126,5 +126,5 @@
 					if (!((dlg.mark instanceof MarkLat) || (dlg.mark instanceof MarkSaw))) {
 						dlg.mark = null;
-						clearIcons();
+						clearType();
 					}
 					chanButton.setBorderPainted(true);
@@ -138,5 +138,5 @@
 					if (!((dlg.mark instanceof MarkCard) || (dlg.mark instanceof MarkIsol))) {
 						dlg.mark = null;
-						clearIcons();
+						clearType();
 					}
 					hazButton.setBorderPainted(true);
@@ -150,5 +150,14 @@
 					if (!(dlg.mark instanceof MarkSpec)) {
 						dlg.mark = new MarkSpec(dlg);
-						clearIcons();
+						clearType();
+						dlg.panelMain.panelSpec.panelCol.yellowButton.doClick();
+						dlg.panelMain.panelTop.enableAll(true);
+						dlg.panelMain.panelTop.noTopButton.doClick();
+						dlg.panelMain.panelTop.panelCol.enableAll(true);
+						dlg.panelMain.panelTop.panelCol.yellowButton.doClick();
+						topButton.setEnabled(true);
+						fogButton.setEnabled(true);
+						radButton.setEnabled(true);
+						litButton.setEnabled(true);
 					}
 					specButton.setBorderPainted(true);
@@ -162,5 +171,9 @@
 					if (!(dlg.mark instanceof MarkLight)) {
 						dlg.mark = new MarkLight(dlg);
-						clearIcons();
+						clearType();
+						fogButton.setEnabled(true);
+						radButton.setEnabled(true);
+						litButton.setEnabled(true);
+						litButton.doClick();
 					}
 					lightsButton.setBorderPainted(true);
@@ -180,10 +193,10 @@
 		this.add(getButton(topButton, 0, 165, 34, 32, "TopmarksTip"), null);
 		this.add(getButton(fogButton, 0, 205, 34, 32, "FogSignalsTip"), null);
-		this.add(getButton(radarButton, 0, 245, 34, 32, "RadarTip"), null);
+		this.add(getButton(radButton, 0, 245, 34, 32, "RadarTip"), null);
 		this.add(getButton(litButton, 0, 285, 34, 32, "LitTip"), null);
 		miscButtons = new ButtonGroup();
 		miscButtons.add(topButton);
 		miscButtons.add(fogButton);
-		miscButtons.add(radarButton);
+		miscButtons.add(radButton);
 		miscButtons.add(litButton);
 		alMisc = new ActionListener() {
@@ -191,5 +204,4 @@
 				if (dlg.mark == null) {
 					miscButtons.clearSelection();
-					return;
 				}
 				if (topButton.isSelected()) {
@@ -207,9 +219,9 @@
 					panelFog.setVisible(false);
 				}
-				if (radarButton.isSelected()) {
-					radarButton.setBorderPainted(true);
+				if (radButton.isSelected()) {
+					radButton.setBorderPainted(true);
 					panelRadar.setVisible(true);
 				} else {
-					radarButton.setBorderPainted(false);
+					radButton.setBorderPainted(false);
 					panelRadar.setVisible(false);
 				}
@@ -225,5 +237,5 @@
 		topButton.addActionListener(alMisc);
 		fogButton.addActionListener(alMisc);
-		radarButton.addActionListener(alMisc);
+		radButton.addActionListener(alMisc);
 		litButton.addActionListener(alMisc);
 
@@ -244,4 +256,12 @@
 		typeButtons.clearSelection();
 		alType.actionPerformed(null);
+		clearType();
+	}
+
+	public void clearType() {
+		topButton.setEnabled(false);
+		fogButton.setEnabled(false);
+		radButton.setEnabled(false);
+		litButton.setEnabled(false);
 		miscButtons.clearSelection();
 		alMisc.actionPerformed(null);
@@ -254,8 +274,4 @@
 		panelRadar.clearSelections();
 		panelLit.clearSelections();
-		clearIcons();
-	}
-
-	public void clearIcons() {
 		shapeIcon.setIcon(null);
 		lightIcon.setIcon(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 24903)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelTop.java	(revision 24904)
@@ -15,4 +15,5 @@
 import oseam.Messages;
 import oseam.dialogs.OSeaMAction;
+import oseam.seamarks.SeaMark.Col;
 import oseam.seamarks.SeaMark.Top;
 import oseam.seamarks.SeaMark.Ent;
@@ -85,4 +86,11 @@
 	}
 
+	public void enableAll(boolean state) {
+		Iterator<Top> it = tops.keySet().iterator();
+		while (it.hasNext()) {
+			tops.get(it.next()).setEnabled(state);
+		}
+	}
+
 	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));
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 24903)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkCard.java	(revision 24904)
@@ -90,11 +90,5 @@
 		}
 
-		parseLights(keys);
-		parseFogRadar(keys);
-
-	}
-
-	public void setLightColour() {
-		super.setLightColour(Col.WHITE);
+		super.parseMark();
 	}
 
@@ -121,5 +115,4 @@
 			return;
 		}
-
 		switch (getCategory()) {
 		case CARD_NORTH:
@@ -139,7 +132,7 @@
 			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 24903)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkIsol.java	(revision 24904)
@@ -59,10 +59,5 @@
 		}
 
-		parseLights(keys);
-		parseFogRadar(keys);
-	}
-
-	public void setLightColour() {
-		super.setLightColour(Col.WHITE);
+		super.parseMark();
 	}
 
@@ -87,11 +82,10 @@
 			break;
 		default:
+			dlg.panelMain.shapeIcon.setIcon(null);
+			return;
 		}
+		image += ".png";
+		dlg.panelMain.shapeIcon.setIcon(new ImageIcon(getClass().getResource(image)));
 
-		if (!image.equals("/images/Cardinal")) {
-			image += ".png";
-			dlg.panelMain.shapeIcon.setIcon(new ImageIcon(getClass().getResource(image)));
-		} else
-			dlg.panelMain.shapeIcon.setIcon(null);
 		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 24903)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkLat.java	(revision 24904)
@@ -208,21 +208,5 @@
 		}
 
-		parseLights(keys);
-		parseFogRadar(keys);
-		setLightColour();
-	}
-
-	public void setLightColour() {
-		if (getRegion() == IALA_A) {
-			if (getCategory() == Cat.LAT_PORT || getCategory() == Cat.LAT_PREF_PORT)
-				super.setLightColour(Col.RED);
-			else
-				super.setLightColour(Col.GREEN);
-		} else {
-			if (getCategory() == Cat.LAT_PORT || getCategory() == Cat.LAT_PREF_PORT)
-				super.setLightColour(Col.GREEN);
-			else
-				super.setLightColour(Col.RED);
-		}
+		super.parseMark();
 	}
 
@@ -259,4 +243,6 @@
 					break;
 				default:
+					dlg.panelMain.shapeIcon.setIcon(null);
+					return;
 				}
 			else
@@ -284,4 +270,6 @@
 					break;
 				default:
+					dlg.panelMain.shapeIcon.setIcon(null);
+					return;
 				}
 			break;
@@ -312,4 +300,6 @@
 					break;
 				default:
+					dlg.panelMain.shapeIcon.setIcon(null);
+					return;
 				}
 			else
@@ -337,4 +327,6 @@
 					break;
 				default:
+					dlg.panelMain.shapeIcon.setIcon(null);
+					return;
 				}
 			break;
@@ -362,4 +354,6 @@
 					break;
 				default:
+					dlg.panelMain.shapeIcon.setIcon(null);
+					return;
 				}
 			else
@@ -384,4 +378,6 @@
 					break;
 				default:
+					dlg.panelMain.shapeIcon.setIcon(null);
+					return;
 				}
 			break;
@@ -409,4 +405,6 @@
 					break;
 				default:
+					dlg.panelMain.shapeIcon.setIcon(null);
+					return;
 				}
 			else
@@ -431,99 +429,15 @@
 					break;
 				default:
-				}
-			break;
-
+					dlg.panelMain.shapeIcon.setIcon(null);
+					return;
+				}
+			break;
 		default:
+			dlg.panelMain.shapeIcon.setIcon(null);
+			return;
 		}
-
-		if (!image.equals("/images/Lateral")) {
-
 			image += ".png";
 			dlg.panelMain.shapeIcon.setIcon(new ImageIcon(getClass().getResource(image)));
 
-			if (hasTopmark()) {
-				image = "";
-				switch (getCategory()) {
-				case LAT_PORT:
-				case LAT_PREF_PORT:
-					if (region == IALA_A)
-						switch (style) {
-						case CAN:
-							image = "/images/Top_Can_Red_Buoy_Small.png";
-							break;
-						case PILLAR:
-						case SPAR:
-							image = "/images/Top_Can_Red_Buoy.png";
-							break;
-						case BEACON:
-						case TOWER:
-							image = "/images/Top_Can_Red_Beacon.png";
-							break;
-						case FLOAT:
-							image = "/images/Top_Can_Red_Float.png";
-							break;
-						}
-					else
-						switch (style) {
-						case CAN:
-							image = "/images/Top_Can_Green_Buoy_Small.png";
-							break;
-						case PILLAR:
-						case SPAR:
-							image = "/images/Top_Can_Green_Buoy.png";
-							break;
-						case BEACON:
-						case TOWER:
-							image = "/images/Top_Can_Green_Beacon.png";
-							break;
-						case FLOAT:
-							image = "/images/Top_Can_Green_Float.png";
-							break;
-						}
-					break;
-
-				case LAT_STBD:
-				case LAT_PREF_STBD:
-					if (region == IALA_A)
-						switch (style) {
-						case CONE:
-							image = "/images/Top_Cone_Green_Buoy_Small.png";
-							break;
-						case PILLAR:
-						case SPAR:
-							image = "/images/Top_Cone_Green_Buoy.png";
-							break;
-						case BEACON:
-						case TOWER:
-							image = "/images/Top_Cone_Green_Beacon.png";
-							break;
-						case FLOAT:
-							image = "/images/Top_Cone_Green_Float.png";
-							break;
-						}
-					else
-						switch (style) {
-						case CONE:
-							image = "/images/Top_Cone_Red_Buoy_Small.png";
-							break;
-						case PILLAR:
-						case SPAR:
-							image = "/images/Top_Cone_Red_Buoy.png";
-							break;
-						case BEACON:
-						case TOWER:
-							image = "/images/Top_Cone_Red_Beacon.png";
-							break;
-						case FLOAT:
-							image = "/images/Top_Cone_Red_Float.png";
-							break;
-						}
-					break;
-				}
-				if (!image.isEmpty())
-					dlg.panelMain.topIcon.setIcon(new ImageIcon(getClass().getResource(image)));
-			}
-		} else
-			dlg.panelMain.shapeIcon.setIcon(null);
 		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 24903)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkLight.java	(revision 24904)
@@ -52,7 +52,5 @@
 		}
 
-		parseLights(keys);
-		parseFogRadar(keys);
-		setFired(true);
+		super.parseMark();
 	}
 
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 24903)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkSaw.java	(revision 24904)
@@ -52,10 +52,5 @@
 		}
 
-		if (keys.containsKey("seamark:topmark:shape") || keys.containsKey("seamark:topmark:colour")) {
-//			setTopMark(true);
-		}
-
-		parseLights(keys);
-		parseFogRadar(keys);
+		super.parseMark();
 	}
 
@@ -81,35 +76,11 @@
 			break;
 		default:
+			dlg.panelMain.shapeIcon.setIcon(null);
+			return;
 		}
-
-		if (!image.equals("/images/Safe_Water")) {
 			image += ".png";
 			dlg.panelMain.shapeIcon.setIcon(new ImageIcon(getClass().getResource(image)));
-			if (hasTopmark()) {
-				image = "";
-				switch (getShape()) {
-				case PILLAR:
-				case SPAR:
-					image = "/images/Top_Sphere_Red_Buoy.png";
-					break;
-				case SPHERE:
-					image = "/images/Top_Sphere_Red_Buoy_Small.png";
-					break;
-				case BEACON:
-					image = "/images/Top_Sphere_Red_Beacon.png";
-					break;
-				case FLOAT:
-					image = "/images/Top_Sphere_Red_Float.png";
-					break;
-				}
-				if (!image.isEmpty())
-					dlg.panelMain.topIcon.setIcon(new ImageIcon(getClass().getResource(image)));
-			} else
-				dlg.panelMain.topIcon.setIcon(null);
-		} else {
-			dlg.panelMain.shapeIcon.setIcon(null);
-			dlg.panelMain.topIcon.setIcon(null);
-		}
-		super.paintSign();
+
+			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 24903)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/MarkSpec.java	(revision 24904)
@@ -78,21 +78,7 @@
 		if (keys.containsKey("seamark:topmark:shape")) {
 			str = keys.get("seamark:topmark:shape");
-/*			setTopMark(true);
-			if (str.equals("x-shape")) {
-				if (keys.containsKey("seamark:topmark:colour")) {
-					if (keys.get("seamark:topmark:colour").equals("red"))
-						setTopMarkIndex(TOP_RED_X);
-					else
-						setTopMarkIndex(TOP_YELLOW_X);
-				}
-			} else if (str.equals("cone, point up")) {
-				setTopMarkIndex(TOP_YELLOW_CONE);
-			} else if (str.equals("cylinder")) {
-				setTopMarkIndex(TOP_YELLOW_CAN);
-			}
-*/		}
+		}
 
-		parseLights(keys);
-		parseFogRadar(keys);
+		super.parseMark();
 	}
 
@@ -129,90 +115,11 @@
 			image += "_Tower";
 			break;
+		default:
+			dlg.panelMain.shapeIcon.setIcon(null);
+			return;
 		}
+		image += ".png";
+		dlg.panelMain.topIcon.setIcon(new ImageIcon(getClass().getResource(image)));
 
-		if (!image.equals("/images/Special_Purpose")) {
-			image += ".png";
-			dlg.panelMain.topIcon.setIcon(new ImageIcon(getClass().getResource(image)));
-
-			if (hasTopmark()) {
-				image = "";
-				switch (getShape()) {
-				case PILLAR:
-				case SPAR:
-					switch (getTopmark()) {
-					case X_SHAPE:
-						if (getColour(Ent.TOPMARK) == Col.YELLOW)
-							image = "/images/Top_X_Yellow_Buoy.png";
-						else
-							image = "/images/Top_X_Red_Buoy.png";
-						break;
-					case CAN:
-						image = "/images/Top_Can_Yellow_Buoy.png";
-						break;
-					case CONE:
-						image = "/images/Top_Cone_Yellow_Buoy.png";
-						break;
-					}
-					break;
-				case CAN:
-				case CONE:
-				case SPHERE:
-				case BARREL:
-					switch (getTopmark()) {
-					case X_SHAPE:
-						if (getColour(Ent.TOPMARK) == Col.YELLOW)
-							image = "/images/Top_X_Yellow_Buoy_Small.png";
-						else
-							image = "/images/Top_X_Red_Buoy_Small.png";
-						break;
-					case CAN:
-						image = "/images/Top_Can_Yellow_Buoy_Small.png";
-						break;
-					case CONE:
-						image = "/images/Top_Cone_Yellow_Buoy_Small.png";
-						break;
-					}
-					break;
-				case BEACON:
-				case TOWER:
-					switch (getTopmark()) {
-					case X_SHAPE:
-						if (getColour(Ent.TOPMARK) == Col.YELLOW)
-							image = "/images/Top_X_Yellow_Beacon.png";
-						else
-							image = "/images/Top_X_Red_Beacon.png";
-						break;
-					case CAN:
-						image = "/images/Top_Can_Yellow_Beacon.png";
-						break;
-					case CONE:
-						image = "/images/Top_Cone_Yellow_Beacon.png";
-						break;
-					}
-					break;
-				case FLOAT:
-				case SUPER:
-					switch (getTopmark()) {
-					case X_SHAPE:
-						if (getColour(Ent.TOPMARK) == Col.YELLOW)
-							image = "/images/Top_X_Yellow_Float.png";
-						else
-							image = "/images/Top_X_Red_Float.png";
-						break;
-					case CAN:
-						image = "/images/Top_Can_Yellow_Float.png";
-						break;
-					case CONE:
-						image = "/images/Top_Cone_Yellow_Float.png";
-						break;
-					}
-					break;
-				}
-				if (!image.isEmpty())
-					dlg.panelMain.topIcon.setIcon(new ImageIcon(getClass().getResource(image)));
-			}
-
-		} else
-			dlg.panelMain.shapeIcon.setIcon(null);
 		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 24903)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/SeaMark.java	(revision 24904)
@@ -329,8 +329,8 @@
 	}
 
-	protected void setLightGroup(Map<String, String> k) {
+	protected void setLightGroup(Map<String, String> keys) {
 		String s = "";
-		if (k.containsKey("seamark:light:group")) {
-			s = k.get("seamark:light:group");
+		if (keys.containsKey("seamark:light:group")) {
+			s = keys.get("seamark:light:group");
 			setLightGroup(s);
 		}
@@ -436,10 +436,13 @@
 	}
 
-	public abstract void parseMark();
-
-	public void parseLights(Map<String, String> k) {
+	public void parseMark() {
+
+		String str;
+		Map<String, String> keys;
+		keys = dlg.node.getKeys();
+
 		setFired(false);
 		setSectored(false);
-		Iterator it = k.entrySet().iterator();
+		Iterator it = keys.entrySet().iterator();
 		while (it.hasNext()) {
 			Map.Entry entry = (Map.Entry) it.next();
@@ -493,16 +496,13 @@
 			}
 		}
-	}
-
-	public void parseFogRadar(Map<String, String> k) {
-		String str;
+
 		setFog(false);
 		setRadar(false);
 		setRacon(false);
-		if (k.containsKey("seamark:fog_signal") || k.containsKey("seamark:fog_signal:category")
-				|| k.containsKey("seamark:fog_signal:group") || k.containsKey("seamark:fog_signal:period")) {
+		if (keys.containsKey("seamark:fog_signal") || keys.containsKey("seamark:fog_signal:category")
+				|| keys.containsKey("seamark:fog_signal:group") || keys.containsKey("seamark:fog_signal:period")) {
 			setFog(true);
-			if (k.containsKey("seamark:fog_signal:category")) {
-				str = k.get("seamark:fog_signal:category");
+			if (keys.containsKey("seamark:fog_signal:category")) {
+				str = keys.get("seamark:fog_signal:category");
 				if (str.equals("horn"))
 					setFogSound(Fog.HORN);
@@ -522,15 +522,15 @@
 					setFogSound(Fog.UNKNOWN);
 			}
-			if (k.containsKey("seamark:fog_signal:group"))
-				setFogGroup(k.get("seamark:fog_signal:group"));
-			if (k.containsKey("seamark:fog_signal:period"))
-				setFogPeriod(k.get("seamark:fog_signal:period"));
-		}
-
-		if (k.containsKey("seamark:radar_transponder") || k.containsKey("seamark:radar_transponder:category")
-				|| k.containsKey("seamark:radar_transponder:group")) {
+			if (keys.containsKey("seamark:fog_signal:group"))
+				setFogGroup(keys.get("seamark:fog_signal:group"));
+			if (keys.containsKey("seamark:fog_signal:period"))
+				setFogPeriod(keys.get("seamark:fog_signal:period"));
+		}
+
+		if (keys.containsKey("seamark:radar_transponder") || keys.containsKey("seamark:radar_transponder:category")
+				|| keys.containsKey("seamark:radar_transponder:group")) {
 			setRacon(true);
-			if (k.containsKey("seamark:radar_transponder:category")) {
-				str = k.get("seamark:radar_transponder:category");
+			if (keys.containsKey("seamark:radar_transponder:category")) {
+				str = keys.get("seamark:radar_transponder:category");
 				if (str.equals("racon"))
 					setRaType(Rtb.RACON);
@@ -542,24 +542,12 @@
 					setRaType(Rtb.UNKNOWN);
 			}
-			if (k.containsKey("seamark:radar_transponder:group"))
-				setRaconGroup(k.get("seamark:radar_transponder:group"));
-		} else if (k.containsKey("seamark:radar_reflector"))
+			if (keys.containsKey("seamark:radar_transponder:group"))
+				setRaconGroup(keys.get("seamark:radar_transponder:group"));
+		} else if (keys.containsKey("seamark:radar_reflector"))
 			setRadar(true);
 	}
 
 	public void paintSign() {
-/*
-		dlg.lM01NameMark.setText(getName());
-
-		dlg.bM01Save.setEnabled(true);
-
-		dlg.cM01TopMark.setSelected(hasTopMark());
-		dlg.cM01Fired.setSelected(isFired());
-
-		dlg.tfM01RepeatTime.setText(getLightPeriod());
-
-		dlg.tfM01Name.setText(getName());
-		dlg.tfM01Name.setEnabled(true);
-*/
+
 		if (hasRadar()) {
 			dlg.panelMain.radarIcon.setIcon(new ImageIcon(getClass().getResource("/images/Radar_Reflector_355.png")));
@@ -570,5 +558,5 @@
 //				if ((getRaType() == RATYPE_RACON) && !getRaconGroup().isEmpty())
 //					c += ("(" + getRaconGroup() + ")");
-//				dlg.lM01RadarMark.setText(c);
+//				dlg.lM01RadarMarkeys.setText(c);
 //			}
 		}
@@ -582,5 +570,5 @@
 //				if (!getFogPeriod().isEmpty())
 //					c += (" " + getFogPeriod() + "s");
-//				dlg.lM01FogMark.setText(c);
+//				dlg.lM01FogMarkeys.setText(c);
 //			}
 		}
