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 26997)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/dialogs/OSeaMAction.java	(revision 26998)
@@ -40,4 +40,7 @@
 						}
 					} else {
+						node = null;
+						mark = null;
+						panelMain.syncPanel();
 						manager.showVisualMessage(Messages.getString("OneNode"));
 					}
@@ -47,4 +50,5 @@
 				node = null;
 				mark = null;
+				panelMain.syncPanel();
 				manager.showVisualMessage(Messages.getString("SelectNode"));
 			}
@@ -71,4 +75,7 @@
 			panelMain.setLayout(null);
 			panelMain.setSize(new Dimension(400, 360));
+			node = null;
+			mark = null;
+			panelMain.syncPanel();
 		}
 		return panelMain;
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 26997)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelChan.java	(revision 26998)
@@ -25,12 +25,8 @@
 	private ActionListener alCat = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
-			Shp shp = Shp.UNKNOWN;
-			if (dlg.mark != null)
-				shp = dlg.mark.getShape();
+			Shp shp = dlg.mark.getShape();
 			if (portButton.isSelected()) {
 				dlg.mark.setCategory(Cat.LAM_PORT);
-				if (panelPort.shapes.containsKey(shp)) {
-					panelPort.shapes.get(shp).doClick();
-				} else {
+				if (!panelPort.shapes.containsKey(shp)) {
 					dlg.mark.setShape(Shp.UNKNOWN);
 				}
@@ -38,7 +34,5 @@
 			if (prefPortButton.isSelected()) {
 				dlg.mark.setCategory(Cat.LAM_PPORT);
-				if (panelPort.shapes.containsKey(shp)) {
-					panelPort.shapes.get(shp).doClick();
-				} else {
+				if (!panelPort.shapes.containsKey(shp)) {
 					dlg.mark.setShape(Shp.UNKNOWN);
 				}
@@ -46,7 +40,5 @@
 			if (stbdButton.isSelected()) {
 				dlg.mark.setCategory(Cat.LAM_STBD);
-				if (panelStbd.shapes.containsKey(shp)) {
-					panelStbd.shapes.get(shp).doClick();
-				} else {
+				if (!panelStbd.shapes.containsKey(shp)) {
 					dlg.mark.setShape(Shp.UNKNOWN);
 				}
@@ -54,7 +46,5 @@
 			if (prefStbdButton.isSelected()) {
 				dlg.mark.setCategory(Cat.LAM_PSTBD);
-				if (panelStbd.shapes.containsKey(shp)) {
-					panelStbd.shapes.get(shp).doClick();
-				} else {
+				if (!panelStbd.shapes.containsKey(shp)) {
 					dlg.mark.setShape(Shp.UNKNOWN);
 				}
@@ -62,11 +52,10 @@
 			if (safeWaterButton.isSelected()) {
 				dlg.mark.setCategory(Cat.NONE);
-				if (panelSaw.shapes.containsKey(shp)) {
-					panelSaw.shapes.get(shp).doClick();
-				} else {
+				if (!panelSaw.shapes.containsKey(shp)) {
 					dlg.mark.setShape(Shp.UNKNOWN);
 				}
 			}
 			syncPanel();
+			dlg.mark.paintSign();
 		}
 	};
@@ -74,62 +63,60 @@
 	private ActionListener alTop = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
-			if (dlg.mark != null) {
-				if (topmarkButton.isSelected()) {
-					if (SeaMark.GrpMAP.get(dlg.mark.getObject()) == Grp.SAW) {
-						dlg.mark.setTopmark(Top.SPHERE);
-						dlg.mark.setPattern(Ent.TOPMARK, Pat.NONE);
-						dlg.mark.setColour(Ent.TOPMARK, Col.RED);
-					} else {
-						switch (dlg.mark.getCategory()) {
-						case LAM_PORT:
-						case LAM_PPORT:
-							dlg.mark.setTopmark(Top.CAN);
-							switch (dlg.mark.getRegion()) {
-							case A:
-								dlg.mark.setPattern(Ent.TOPMARK, Pat.NONE);
-								dlg.mark.setColour(Ent.TOPMARK, Col.RED);
-								break;
-							case B:
-								dlg.mark.setPattern(Ent.TOPMARK, Pat.NONE);
-								dlg.mark.setColour(Ent.TOPMARK, Col.GREEN);
-								break;
-							case C:
-								dlg.mark.setPattern(Ent.TOPMARK, Pat.HORIZ);
-								dlg.mark.setColour(Ent.TOPMARK, Col.RED);
-								dlg.mark.addColour(Ent.TOPMARK, Col.WHITE);
-								break;
-							}
+			if (topmarkButton.isSelected()) {
+				if (SeaMark.GrpMAP.get(dlg.mark.getObject()) == Grp.SAW) {
+					dlg.mark.setTopmark(Top.SPHERE);
+					dlg.mark.setPattern(Ent.TOPMARK, Pat.NONE);
+					dlg.mark.setColour(Ent.TOPMARK, Col.RED);
+				} else {
+					switch (dlg.mark.getCategory()) {
+					case LAM_PORT:
+					case LAM_PPORT:
+						dlg.mark.setTopmark(Top.CAN);
+						switch (dlg.mark.getRegion()) {
+						case A:
+							dlg.mark.setPattern(Ent.TOPMARK, Pat.NONE);
+							dlg.mark.setColour(Ent.TOPMARK, Col.RED);
 							break;
-						case LAM_STBD:
-						case LAM_PSTBD:
-							dlg.panelMain.panelTop.coneTopButton.doClick();
-							switch (dlg.mark.getRegion()) {
-							case A:
-								dlg.mark.setPattern(Ent.TOPMARK, Pat.NONE);
-								dlg.mark.setColour(Ent.TOPMARK, Col.GREEN);
-								break;
-							case B:
-								dlg.mark.setPattern(Ent.TOPMARK, Pat.NONE);
-								dlg.mark.setColour(Ent.TOPMARK, Col.RED);
-								break;
-							case C:
-								dlg.mark.setPattern(Ent.TOPMARK, Pat.HORIZ);
-								dlg.mark.setColour(Ent.TOPMARK, Col.GREEN);
-								dlg.mark.addColour(Ent.TOPMARK, Col.WHITE);
-								break;
-							}
+						case B:
+							dlg.mark.setPattern(Ent.TOPMARK, Pat.NONE);
+							dlg.mark.setColour(Ent.TOPMARK, Col.GREEN);
+							break;
+						case C:
+							dlg.mark.setPattern(Ent.TOPMARK, Pat.HORIZ);
+							dlg.mark.setColour(Ent.TOPMARK, Col.RED);
+							dlg.mark.addColour(Ent.TOPMARK, Col.WHITE);
 							break;
 						}
+						break;
+					case LAM_STBD:
+					case LAM_PSTBD:
+						dlg.panelMain.panelTop.coneTopButton.doClick();
+						switch (dlg.mark.getRegion()) {
+						case A:
+							dlg.mark.setPattern(Ent.TOPMARK, Pat.NONE);
+							dlg.mark.setColour(Ent.TOPMARK, Col.GREEN);
+							break;
+						case B:
+							dlg.mark.setPattern(Ent.TOPMARK, Pat.NONE);
+							dlg.mark.setColour(Ent.TOPMARK, Col.RED);
+							break;
+						case C:
+							dlg.mark.setPattern(Ent.TOPMARK, Pat.HORIZ);
+							dlg.mark.setColour(Ent.TOPMARK, Col.GREEN);
+							dlg.mark.addColour(Ent.TOPMARK, Col.WHITE);
+							break;
+						}
+						break;
 					}
-					topmarkButton.setBorderPainted(true);
-				} else {
-					dlg.mark.setTopmark(Top.NONE);
-					dlg.mark.setPattern(Ent.TOPMARK, Pat.NONE);
-					dlg.mark.setColour(Ent.TOPMARK, Col.UNKNOWN);
-					topmarkButton.setBorderPainted(false);
 				}
-				dlg.panelMain.panelTop.syncPanel();
-				dlg.mark.paintSign();
+				topmarkButton.setBorderPainted(true);
+			} else {
+				dlg.mark.setTopmark(Top.NONE);
+				dlg.mark.setPattern(Ent.TOPMARK, Pat.NONE);
+				dlg.mark.setColour(Ent.TOPMARK, Col.UNKNOWN);
+				topmarkButton.setBorderPainted(false);
 			}
+			dlg.panelMain.panelTop.syncPanel();
+			dlg.mark.paintSign();
 		}
 	};
@@ -162,41 +149,23 @@
 		this.add(topmarkButton);
 	}
-	
+
 	public void syncPanel() {
-		if (portButton.isSelected()) {
+		if ((dlg.mark.getCategory() == Cat.LAM_PORT) || (dlg.mark.getCategory() == Cat.LAM_PPORT)) {
 			portButton.setBorderPainted(true);
 			panelPort.setVisible(true);
-			panelPort.perchButton.setVisible(true);
-			panelPort.stakeButton.setVisible(true);
+			panelPort.syncPanel();
 		} else {
 			portButton.setBorderPainted(false);
 			panelPort.setVisible(false);
 		}
-		if (prefPortButton.isSelected()) {
-			prefPortButton.setBorderPainted(true);
-			panelPort.setVisible(true);
-		} else {
-			prefPortButton.setBorderPainted(false);
-			if (!portButton.isSelected())
-				panelPort.setVisible(false);
-		}
-		if (stbdButton.isSelected()) {
+		if ((dlg.mark.getCategory() == Cat.LAM_STBD) || (dlg.mark.getCategory() == Cat.LAM_PSTBD)) {
 			stbdButton.setBorderPainted(true);
 			panelStbd.setVisible(true);
-			panelStbd.perchButton.setVisible(true);
-			panelStbd.stakeButton.setVisible(true);
+			panelStbd.syncPanel();
 		} else {
 			stbdButton.setBorderPainted(false);
 			panelStbd.setVisible(false);
 		}
-		if (prefStbdButton.isSelected()) {
-			prefStbdButton.setBorderPainted(true);
-			panelStbd.setVisible(true);
-		} else {
-			prefStbdButton.setBorderPainted(false);
-			if (!stbdButton.isSelected())
-				panelStbd.setVisible(false);
-		}
-		if (safeWaterButton.isSelected()) {
+		if (SeaMark.GrpMAP.get(dlg.mark.getObject()) == Grp.SAW) {
 			safeWaterButton.setBorderPainted(true);
 			panelSaw.setVisible(true);
@@ -206,16 +175,12 @@
 		}
 		if (dlg.mark.isValid()) {
+			topmarkButton.setBorderPainted(dlg.mark.hasTopmark());
 			topmarkButton.setVisible(true);
 			dlg.panelMain.moreButton.setVisible(true);
+			panelSaw.syncPanel();
 		} else {
 			topmarkButton.setVisible(false);
 			dlg.panelMain.moreButton.setVisible(false);
 		}
-		topmarkButton.setBorderPainted(topmarkButton.isSelected());
-		topmarkButton.setVisible(dlg.mark.isValid());
-		panelPort.syncPanel();
-		panelStbd.syncPanel();
-		panelSaw.syncPanel();
-
 	}
 
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 26997)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelCol.java	(revision 26998)
@@ -11,4 +11,5 @@
 import oseam.Messages;
 import oseam.dialogs.OSeaMAction;
+import oseam.seamarks.SeaMark;
 import oseam.seamarks.SeaMark.*;
 
@@ -56,5 +57,5 @@
 								dlg.mark.setColour(ent, stackIdx, col);
 							}
-							syncStack();
+							syncPanel();
 						}
 						dlg.mark.paintSign();
@@ -121,5 +122,5 @@
 	}
 
-	public void syncStack() {
+	public void syncPanel() {
 		if (ent == Ent.LIGHT) {
 		} else {
@@ -151,5 +152,5 @@
 					JRadioButton btnI = stackCol.get(idx);
 					btnI.setBounds(2, (2 + (idx * height)), 30, height);
-					btnI.setBackground(oseam.seamarks.SeaMark.ColMAP.get(dlg.mark.getColour(ent, idx)));
+					btnI.setBackground(SeaMark.ColMAP.get(dlg.mark.getColour(ent, idx)));
 					if (stackIdx == idx) {
 						btnI.setBorderPainted(true);
Index: /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelFog.java
===================================================================
--- /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelFog.java	(revision 26997)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelFog.java	(revision 26998)
@@ -27,16 +27,14 @@
 	private ActionListener alFog = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
-			if (dlg.mark != null) {
-				for (Fog fog : fogs.keySet()) {
-					JRadioButton button = fogs.get(fog);
-					if (button.isSelected()) {
-						dlg.mark.setFogSound(fog);
-						button.setBorderPainted(true);
-					} else
-						button.setBorderPainted(false);
-				}
-				dlg.mark.setFog(!noFogButton.isSelected());
-				dlg.mark.paintSign();
+			for (Fog fog : fogs.keySet()) {
+				JRadioButton button = fogs.get(fog);
+				if (button.isSelected()) {
+					dlg.mark.setFogSound(fog);
+					button.setBorderPainted(true);
+				} else
+					button.setBorderPainted(false);
 			}
+			dlg.mark.setFog(!noFogButton.isSelected());
+			dlg.mark.paintSign();
 		}
 	};
@@ -45,6 +43,5 @@
 	private ActionListener alGroup = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
-			if (dlg.mark != null)
-				dlg.mark.setFogGroup(groupBox.getText());
+			dlg.mark.setFogGroup(groupBox.getText());
 		}
 	};
@@ -53,6 +50,5 @@
 	private ActionListener alPeriod = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
-			if (dlg.mark != null)
-				dlg.mark.setFogPeriod(periodBox.getText());
+			dlg.mark.setFogPeriod(periodBox.getText());
 		}
 	};
@@ -61,6 +57,5 @@
 	private ActionListener alSeq = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
-			if (dlg.mark != null)
-				dlg.mark.setFogSequence(seqBox.getText());
+			dlg.mark.setFogSequence(seqBox.getText());
 		}
 	};
@@ -69,6 +64,5 @@
 	private ActionListener alRange = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
-			if (dlg.mark != null)
-				dlg.mark.setFogRange(rangeBox.getText());
+			dlg.mark.setFogRange(rangeBox.getText());
 		}
 	};
@@ -119,5 +113,5 @@
 
 	}
-	
+
 	public void syncPanel() {
 		for (Fog fog : fogs.keySet()) {
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 26997)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelHaz.java	(revision 26998)
@@ -23,65 +23,51 @@
 	private ActionListener alCat = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
-			Shp shp = Shp.UNKNOWN;
-			if (dlg.mark != null) {
-				shp = dlg.mark.getShape();
-				dlg.panelMain.panelMore.panelPat.horizButton.doClick();
-				if (northButton.isSelected()) {
-					dlg.mark.setCategory(Cat.CAM_NORTH);
-					dlg.mark.setColour(Ent.BODY, Col.BLACK);
-					dlg.mark.addColour(Ent.BODY, Col.YELLOW);
-					if (shapes.containsKey(shp))
-						shapes.get(shp).doClick();
-					northButton.setBorderPainted(true);
-				} else {
-					northButton.setBorderPainted(false);
-				}
-				if (southButton.isSelected()) {
-					dlg.mark.setCategory(Cat.CAM_SOUTH);
-					dlg.mark.setColour(Ent.BODY, Col.YELLOW);
-					dlg.mark.addColour(Ent.BODY, Col.BLACK);
-					if (shapes.containsKey(shp))
-						shapes.get(shp).doClick();
-					southButton.setBorderPainted(true);
-				} else {
-					southButton.setBorderPainted(false);
-				}
-				if (eastButton.isSelected()) {
-					dlg.mark.setCategory(Cat.CAM_EAST);
-					dlg.mark.setColour(Ent.BODY, Col.BLACK);
-					dlg.mark.addColour(Ent.BODY, Col.YELLOW);
-					dlg.mark.addColour(Ent.BODY, Col.BLACK);
-					if (shapes.containsKey(shp))
-						shapes.get(shp).doClick();
-					eastButton.setBorderPainted(true);
-				} else {
-					eastButton.setBorderPainted(false);
-				}
-				if (westButton.isSelected()) {
-					dlg.mark.setCategory(Cat.CAM_WEST);
-					dlg.mark.setColour(Ent.BODY, Col.YELLOW);
-					dlg.mark.addColour(Ent.BODY, Col.BLACK);
-					dlg.mark.addColour(Ent.BODY, Col.YELLOW);
-					if (shapes.containsKey(shp))
-						shapes.get(shp).doClick();
-					westButton.setBorderPainted(true);
-				} else {
-					westButton.setBorderPainted(false);
-				}
-				if (isolButton.isSelected()) {
-					dlg.mark.setCategory(Cat.NONE);
-					dlg.panelMain.panelMore.panelPat.panelCol.blackButton.doClick();
-					dlg.mark.setColour(Ent.BODY, Col.BLACK);
-					dlg.mark.addColour(Ent.BODY, Col.RED);
-					dlg.mark.addColour(Ent.BODY, Col.BLACK);
-					if (shapes.containsKey(shp))
-						shapes.get(shp).doClick();
-					isolButton.setBorderPainted(true);
-				} else {
-					isolButton.setBorderPainted(false);
-				}
-				dlg.panelMain.panelMore.panelPat.panelCol.syncStack();
-				dlg.mark.paintSign();
-			}
+			dlg.mark.setPattern(Ent.BODY, Pat.HORIZ);
+			if (northButton.isSelected()) {
+				dlg.mark.setCategory(Cat.CAM_NORTH);
+				dlg.mark.setColour(Ent.BODY, Col.BLACK);
+				dlg.mark.addColour(Ent.BODY, Col.YELLOW);
+				northButton.setBorderPainted(true);
+			} else {
+				northButton.setBorderPainted(false);
+			}
+			if (southButton.isSelected()) {
+				dlg.mark.setCategory(Cat.CAM_SOUTH);
+				dlg.mark.setColour(Ent.BODY, Col.YELLOW);
+				dlg.mark.addColour(Ent.BODY, Col.BLACK);
+				southButton.setBorderPainted(true);
+			} else {
+				southButton.setBorderPainted(false);
+			}
+			if (eastButton.isSelected()) {
+				dlg.mark.setCategory(Cat.CAM_EAST);
+				dlg.mark.setColour(Ent.BODY, Col.BLACK);
+				dlg.mark.addColour(Ent.BODY, Col.YELLOW);
+				dlg.mark.addColour(Ent.BODY, Col.BLACK);
+				eastButton.setBorderPainted(true);
+			} else {
+				eastButton.setBorderPainted(false);
+			}
+			if (westButton.isSelected()) {
+				dlg.mark.setCategory(Cat.CAM_WEST);
+				dlg.mark.setColour(Ent.BODY, Col.YELLOW);
+				dlg.mark.addColour(Ent.BODY, Col.BLACK);
+				dlg.mark.addColour(Ent.BODY, Col.YELLOW);
+				westButton.setBorderPainted(true);
+			} else {
+				westButton.setBorderPainted(false);
+			}
+			if (isolButton.isSelected()) {
+				dlg.mark.setCategory(Cat.NONE);
+				dlg.mark.setColour(Ent.BODY, Col.BLACK);
+				dlg.mark.addColour(Ent.BODY, Col.RED);
+				dlg.mark.addColour(Ent.BODY, Col.BLACK);
+				isolButton.setBorderPainted(true);
+			} else {
+				isolButton.setBorderPainted(false);
+			}
+			syncPanel();
+			dlg.panelMain.panelMore.syncPanel();
+			dlg.mark.paintSign();
 		}
 	};
@@ -117,4 +103,5 @@
 					topmarkButton.setVisible(true);
 					dlg.panelMain.moreButton.setVisible(true);
+					dlg.panelMain.saveButton.setEnabled(true);
 					dlg.panelMain.topButton.setEnabled(true);
 					dlg.panelMain.fogButton.setEnabled(true);
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 26997)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelLights.java	(revision 26998)
@@ -27,5 +27,4 @@
 					dlg.mark.setCategory(cat);
 			}
-			checkValidity();
 		}
 	};
@@ -40,5 +39,4 @@
 					dlg.mark.setCategory(cat);
 			}
-			checkValidity();
 		}
 	};
@@ -76,5 +74,4 @@
 				warningCatBox.setVisible(false);
 			}
-			checkValidity();
 		}
 	};
@@ -137,18 +134,6 @@
 	}
 
-	private void checkValidity() {
-		if (dlg.mark != null) {
-			if (dlg.mark.getObject() != Obj.UNKNOWN) {
-				dlg.panelMain.fogButton.setEnabled(true);
-				dlg.panelMain.radButton.setEnabled(true);
-				dlg.panelMain.litButton.setEnabled(true);
-				dlg.panelMain.moreButton.setVisible(true);
-			} else {
-				dlg.panelMain.fogButton.setEnabled(false);
-				dlg.panelMain.radButton.setEnabled(false);
-				dlg.panelMain.litButton.setEnabled(false);
-				dlg.panelMain.moreButton.setVisible(false);
-			}
-		}
+	public void syncPanel() {
+		
 	}
 	
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 26997)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelMain.java	(revision 26998)
@@ -9,5 +9,5 @@
 import oseam.Messages;
 import oseam.dialogs.OSeaMAction;
-import oseam.seamarks.SeaMark.*;
+import oseam.seamarks.SeaMark;
 
 public class PanelMain extends JPanel {
@@ -37,5 +37,5 @@
 		}
 	};
-	private JButton saveButton = null;
+	public JButton saveButton = null;
 	private ActionListener alSave = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
@@ -274,4 +274,20 @@
 
 	public void syncPanel() {
+		typeButtons.clearSelection();
+		chanButton.setBorderPainted(false);
+		hazButton.setBorderPainted(false);
+		specButton.setBorderPainted(false);
+		lightsButton.setBorderPainted(false);
+		panelChan.setVisible(false);
+		panelHaz.setVisible(false);
+		panelSpec.setVisible(false);
+		panelLights.setVisible(false);
+		panelMore.setVisible(false);
+		colLabel.setText("");
+		shapeIcon.setIcon(null);
+		lightIcon.setIcon(null);
+		topIcon.setIcon(null);
+		radarIcon.setIcon(null);
+		fogIcon.setIcon(null);
 		if (dlg.mark == null) {
 			topButton.setEnabled(false);
@@ -280,32 +296,52 @@
 			litButton.setEnabled(false);
 			moreButton.setVisible(false);
+			saveButton.setEnabled(false);
+			nameBox.setEnabled(false);
+			chanButton.setEnabled(false);
+			hazButton.setEnabled(false);
+			specButton.setEnabled(false);
+			lightsButton.setEnabled(false);
 		} else {
-			if (dlg.mark.isValid()) {
-				topButton.setEnabled(true);
-				fogButton.setEnabled(true);
-				radButton.setEnabled(true);
-				litButton.setEnabled(true);
-				moreButton.setVisible(true);
-			} else {
-				topButton.setEnabled(false);
-				fogButton.setEnabled(false);
-				radButton.setEnabled(false);
-				litButton.setEnabled(false);
-				moreButton.setVisible(false);
-			}
-		}
-		nameBox.setText(dlg.mark.getName());
-		alType.actionPerformed(null);
-		alMisc.actionPerformed(null);
-		dlg.panelMain.panelChan.syncPanel();
-		dlg.panelMain.panelHaz.syncPanel();
-		dlg.panelMain.panelSpec.syncPanel();
-		dlg.panelMain.panelMore.setVisible(false);
-		dlg.panelMain.panelMore.syncPanel();
-		moreButton.setVisible(dlg.mark.isValid());
-		dlg.panelMain.panelTop.syncPanel();
-		dlg.panelMain.panelFog.syncPanel();
-		dlg.panelMain.panelRadar.syncPanel();
-		dlg.panelMain.panelLit.syncPanel();
+			nameBox.setEnabled(true);
+			chanButton.setEnabled(true);
+			hazButton.setEnabled(true);
+			specButton.setEnabled(true);
+			lightsButton.setEnabled(true);
+			nameBox.setText(dlg.mark.getName());
+			panelChan.setVisible(false);
+			panelHaz.setVisible(false);
+			panelSpec.setVisible(false);
+			panelLights.setVisible(false);
+			switch (SeaMark.GrpMAP.get(dlg.mark.getObject())) {
+			case LAT:
+			case SAW:
+				chanButton.setBorderPainted(true);
+				panelChan.setVisible(true);
+				panelChan.syncPanel();
+				break;
+			case CAR:
+			case ISD:
+				hazButton.setBorderPainted(true);
+				panelHaz.setVisible(true);
+				panelHaz.syncPanel();
+				break;
+			case SPP:
+				specButton.setBorderPainted(true);
+				panelSpec.setVisible(true);
+				panelSpec.syncPanel();
+				break;
+			case LIT:
+			case SIS:
+				lightsButton.setBorderPainted(true);
+				panelLights.setVisible(true);
+				panelLights.syncPanel();
+				break;
+			}
+			panelMore.syncPanel();
+			panelTop.syncPanel();
+			panelFog.syncPanel();
+			panelRadar.syncPanel();
+			panelLit.syncPanel();
+		}
 	}
 
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 26997)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelMore.java	(revision 26998)
@@ -10,5 +10,5 @@
 import oseam.Messages;
 import oseam.dialogs.OSeaMAction;
-import oseam.seamarks.SeaMark.*	;
+import oseam.seamarks.SeaMark.*;
 
 public class PanelMore extends JPanel {
@@ -19,6 +19,5 @@
 	private ActionListener alInfo = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
-			if (dlg.mark != null)
-				dlg.mark.setInfo(infoBox.getText());
+			dlg.mark.setInfo(infoBox.getText());
 		}
 	};
@@ -27,6 +26,5 @@
 	private ActionListener alSource = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
-			if (dlg.mark != null)
-				dlg.mark.setSource(sourceBox.getText());
+			dlg.mark.setSource(sourceBox.getText());
 		}
 	};
@@ -35,6 +33,5 @@
 	private ActionListener alElev = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
-			if (dlg.mark != null)
-				dlg.mark.setElevation(elevBox.getText());
+			dlg.mark.setElevation(elevBox.getText());
 		}
 	};
@@ -43,6 +40,5 @@
 	private ActionListener alHeight = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
-			if (dlg.mark != null)
-				dlg.mark.setHeight(heightBox.getText());
+			dlg.mark.setHeight(heightBox.getText());
 		}
 	};
@@ -299,6 +295,6 @@
 		reflBox.addActionListener(alRefl);
 
-		}
-	
+	}
+
 	public void syncPanel() {
 		panelPat.syncPanel();
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 26997)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelPat.java	(revision 26998)
@@ -80,5 +80,5 @@
 				button.setBorderPainted(false);
 		}
-		panelCol.syncStack();
+		panelCol.syncPanel();
 	}
 	
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 26997)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelPort.java	(revision 26998)
@@ -37,64 +37,62 @@
 					button.setBorderPainted(false);
 			}
-			if (dlg.mark != null) {
-				if ((dlg.mark.getObject() != Obj.UNKNOWN) && (dlg.mark.getShape() != Shp.UNKNOWN)) {
-					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);
-					if (dlg.mark.getCategory() == Cat.LAM_PORT) {
-						switch (dlg.mark.getRegion()) {
-						case A:
-							dlg.panelMain.panelMore.panelPat.noneButton.doClick();
-							dlg.mark.setColour(Ent.BODY, Col.RED);
-							break;
-						case B:
-							dlg.panelMain.panelMore.panelPat.noneButton.doClick();
-							dlg.mark.setColour(Ent.BODY, Col.GREEN);
-							break;
-						case C:
-							dlg.panelMain.panelMore.panelPat.horizButton.doClick();
-							dlg.mark.setColour(Ent.BODY, Col.RED);
-							dlg.mark.addColour(Ent.BODY, Col.WHITE);
-							dlg.mark.addColour(Ent.BODY, Col.RED);
-							dlg.mark.addColour(Ent.BODY, Col.WHITE);
-							break;
-						}
-					} else {
-						switch (dlg.mark.getRegion()) {
-						case A:
-							dlg.panelMain.panelMore.panelPat.horizButton.doClick();
-							dlg.mark.setColour(Ent.BODY, Col.RED);
-							dlg.mark.addColour(Ent.BODY, Col.GREEN);
-							dlg.mark.addColour(Ent.BODY, Col.RED);
-							break;
-						case B:
-							dlg.panelMain.panelMore.panelPat.horizButton.doClick();
-							dlg.mark.setColour(Ent.BODY, Col.GREEN);
-							dlg.mark.addColour(Ent.BODY, Col.RED);
-							dlg.mark.addColour(Ent.BODY, Col.GREEN);
-							break;
-						case C:
-							dlg.panelMain.panelMore.panelPat.horizButton.doClick();
-							dlg.mark.setColour(Ent.BODY, Col.RED);
-							dlg.mark.addColour(Ent.BODY, Col.GREEN);
-							dlg.mark.addColour(Ent.BODY, Col.RED);
-							dlg.mark.addColour(Ent.BODY, Col.GREEN);
-							break;
-						}
+			if (dlg.mark.isValid()) {
+				dlg.panelMain.moreButton.setVisible(true);
+				dlg.panelMain.panelChan.topmarkButton.setVisible(true);
+				dlg.panelMain.saveButton.setEnabled(true);
+				dlg.panelMain.topButton.setEnabled(true);
+				dlg.panelMain.fogButton.setEnabled(true);
+				dlg.panelMain.radButton.setEnabled(true);
+				dlg.panelMain.litButton.setEnabled(true);
+				dlg.panelMain.saveButton.setEnabled(true);
+				if (dlg.mark.getCategory() == Cat.LAM_PORT) {
+					switch (dlg.mark.getRegion()) {
+					case A:
+						dlg.mark.setPattern(Ent.BODY, Pat.NONE);
+						dlg.mark.setColour(Ent.BODY, Col.RED);
+						break;
+					case B:
+						dlg.mark.setPattern(Ent.BODY, Pat.NONE);
+						dlg.mark.setColour(Ent.BODY, Col.GREEN);
+						break;
+					case C:
+						dlg.mark.setPattern(Ent.BODY, Pat.HORIZ);
+						dlg.mark.setColour(Ent.BODY, Col.RED);
+						dlg.mark.addColour(Ent.BODY, Col.WHITE);
+						dlg.mark.addColour(Ent.BODY, Col.RED);
+						dlg.mark.addColour(Ent.BODY, Col.WHITE);
+						break;
 					}
-					dlg.panelMain.panelMore.panelPat.panelCol.syncStack();
 				} else {
-					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.setPattern(Ent.BODY, Pat.HORIZ);
+					switch (dlg.mark.getRegion()) {
+					case A:
+						dlg.mark.setColour(Ent.BODY, Col.RED);
+						dlg.mark.addColour(Ent.BODY, Col.GREEN);
+						dlg.mark.addColour(Ent.BODY, Col.RED);
+						break;
+					case B:
+						dlg.mark.setColour(Ent.BODY, Col.GREEN);
+						dlg.mark.addColour(Ent.BODY, Col.RED);
+						dlg.mark.addColour(Ent.BODY, Col.GREEN);
+						break;
+					case C:
+						dlg.mark.setColour(Ent.BODY, Col.RED);
+						dlg.mark.addColour(Ent.BODY, Col.GREEN);
+						dlg.mark.addColour(Ent.BODY, Col.RED);
+						dlg.mark.addColour(Ent.BODY, Col.GREEN);
+						break;
+					}
 				}
-				dlg.mark.paintSign();
+				dlg.panelMain.panelMore.syncPanel();
+			} else {
+				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();
 		}
 	};
@@ -123,5 +121,5 @@
 		}
 	}
-	
+
 	private JRadioButton getShapeButton(JRadioButton button, int x, int y, int w, int h, String tip, Shp shp, Obj obj) {
 		button.setBounds(new Rectangle(x, y, w, h));
Index: /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelRadar.java
===================================================================
--- /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelRadar.java	(revision 26997)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelRadar.java	(revision 26998)
@@ -24,15 +24,13 @@
 	private ActionListener alRad = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
-			if (dlg.mark != null) {
-				for (Rtb rtb : rads.keySet()) {
-					JRadioButton button = rads.get(rtb);
-					if (button.isSelected()) {
-						dlg.mark.setRaType(rtb);
-						button.setBorderPainted(true);
-					} else
-						button.setBorderPainted(false);
-				}
-				dlg.mark.paintSign();
+			for (Rtb rtb : rads.keySet()) {
+				JRadioButton button = rads.get(rtb);
+				if (button.isSelected()) {
+					dlg.mark.setRaType(rtb);
+					button.setBorderPainted(true);
+				} else
+					button.setBorderPainted(false);
 			}
+			dlg.mark.paintSign();
 		}
 	};
@@ -41,6 +39,5 @@
 	private ActionListener alGroup = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
-			if (dlg.mark != null)
-				dlg.mark.setRaconGroup(groupBox.getText());
+			dlg.mark.setRaconGroup(groupBox.getText());
 		}
 	};
@@ -49,6 +46,5 @@
 	private ActionListener alPeriod = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
-			if (dlg.mark != null)
-				dlg.mark.setRaconPeriod(periodBox.getText());
+			dlg.mark.setRaconPeriod(periodBox.getText());
 		}
 	};
@@ -57,6 +53,5 @@
 	private ActionListener alSeq = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
-			if (dlg.mark != null)
-				dlg.mark.setRaconSequence(seqBox.getText());
+			dlg.mark.setRaconSequence(seqBox.getText());
 		}
 	};
@@ -65,6 +60,5 @@
 	private ActionListener alRange = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
-			if (dlg.mark != null)
-				dlg.mark.setRaconRange(rangeBox.getText());
+			dlg.mark.setRaconRange(rangeBox.getText());
 		}
 	};
@@ -73,6 +67,5 @@
 	private ActionListener alSector1 = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
-			if (dlg.mark != null)
-				dlg.mark.setRaconSector1(rangeBox.getText());
+			dlg.mark.setRaconSector1(rangeBox.getText());
 		}
 	};
@@ -81,6 +74,5 @@
 	private ActionListener alSector2 = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
-			if (dlg.mark != null)
-				dlg.mark.setRaconSector2(rangeBox.getText());
+			dlg.mark.setRaconSector2(rangeBox.getText());
 		}
 	};
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 26997)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelSaw.java	(revision 26998)
@@ -41,5 +41,5 @@
 					dlg.panelMain.radButton.setEnabled(true);
 					dlg.panelMain.litButton.setEnabled(true);
-					dlg.panelMain.panelMore.panelPat.vertButton.doClick();
+					dlg.mark.setPattern(Ent.BODY, Pat.VERT);
 					dlg.mark.setColour(Ent.BODY, Col.RED);
 					dlg.mark.addColour(Ent.BODY, Col.WHITE);
@@ -51,5 +51,5 @@
 					dlg.panelMain.litButton.setEnabled(false);
 				}
-				dlg.panelMain.panelMore.panelPat.panelCol.syncStack();
+				dlg.panelMain.panelMore.syncPanel();
 				dlg.mark.paintSign();
 			}
Index: /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelSpec.java
===================================================================
--- /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelSpec.java	(revision 26997)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelSpec.java	(revision 26998)
@@ -50,24 +50,15 @@
 					dlg.mark.setShape(shp);
 					dlg.mark.setObject(objects.get(shp));
-					if ((button == cairnButton) && !(dlg.panelMain.panelMore.panelPat.panelCol.delButton.isSelected())) {
+					if (button == cairnButton) {
 						dlg.mark.setPattern(Ent.BODY, Pat.NONE);
 						dlg.mark.setColour(Ent.BODY, Col.UNKNOWN);
+					}
+					if (dlg.mark.getColour(Ent.BODY, 0) == Col.UNKNOWN) {
+						dlg.mark.setPattern(Ent.BODY, Pat.NONE);
+						dlg.mark.setColour(Ent.BODY, Col.YELLOW);
 					}
 					button.setBorderPainted(true);
 				} else
 					button.setBorderPainted(false);
-			}
-			if ((dlg.mark.getObject() != Obj.UNKNOWN) && (dlg.mark.getShape() != Shp.UNKNOWN)) {
-				dlg.panelMain.topButton.setEnabled(true);
-				dlg.panelMain.fogButton.setEnabled(true);
-				dlg.panelMain.radButton.setEnabled(true);
-				dlg.panelMain.litButton.setEnabled(true);
-				dlg.panelMain.moreButton.setVisible(true);
-			} else {
-				dlg.panelMain.topButton.setEnabled(false);
-				dlg.panelMain.fogButton.setEnabled(false);
-				dlg.panelMain.radButton.setEnabled(false);
-				dlg.panelMain.litButton.setEnabled(false);
-				dlg.panelMain.moreButton.setVisible(false);
 			}
 			dlg.panelMain.panelMore.syncPanel();
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 26997)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelStbd.java	(revision 26998)
@@ -37,64 +37,62 @@
 					button.setBorderPainted(false);
 			}
-			if (dlg.mark != null) {
-				if ((dlg.mark.getObject() != Obj.UNKNOWN) && (dlg.mark.getShape() != Shp.UNKNOWN)) {
-					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);
-					if (dlg.mark.getCategory() == Cat.LAM_PORT) {
-						switch (dlg.mark.getRegion()) {
-						case A:
-							dlg.panelMain.panelMore.panelPat.noneButton.doClick();
-							dlg.mark.setColour(Ent.BODY, Col.GREEN);
-							break;
-						case B:
-							dlg.panelMain.panelMore.panelPat.noneButton.doClick();
-							dlg.mark.setColour(Ent.BODY, Col.RED);
-							break;
-						case C:
-							dlg.panelMain.panelMore.panelPat.horizButton.doClick();
-							dlg.mark.setColour(Ent.BODY, Col.GREEN);
-							dlg.mark.addColour(Ent.BODY, Col.WHITE);
-							dlg.mark.addColour(Ent.BODY, Col.GREEN);
-							dlg.mark.addColour(Ent.BODY, Col.WHITE);
-							break;
-						}
-					} else {
-						switch (dlg.mark.getRegion()) {
-						case A:
-							dlg.panelMain.panelMore.panelPat.horizButton.doClick();
-							dlg.mark.setColour(Ent.BODY, Col.GREEN);
-							dlg.mark.addColour(Ent.BODY, Col.RED);
-							dlg.mark.addColour(Ent.BODY, Col.GREEN);
-							break;
-						case B:
-							dlg.panelMain.panelMore.panelPat.horizButton.doClick();
-							dlg.mark.setColour(Ent.BODY, Col.RED);
-							dlg.mark.addColour(Ent.BODY, Col.GREEN);
-							dlg.mark.addColour(Ent.BODY, Col.RED);
-							break;
-						case C:
-							dlg.panelMain.panelMore.panelPat.horizButton.doClick();
-							dlg.mark.setColour(Ent.BODY, Col.RED);
-							dlg.mark.addColour(Ent.BODY, Col.GREEN);
-							dlg.mark.addColour(Ent.BODY, Col.RED);
-							dlg.mark.addColour(Ent.BODY, Col.GREEN);
-							break;
-						}
+			if (dlg.mark.isValid()) {
+				dlg.panelMain.moreButton.setVisible(true);
+				dlg.panelMain.panelChan.topmarkButton.setVisible(true);
+				dlg.panelMain.saveButton.setEnabled(true);
+				dlg.panelMain.topButton.setEnabled(true);
+				dlg.panelMain.fogButton.setEnabled(true);
+				dlg.panelMain.radButton.setEnabled(true);
+				dlg.panelMain.litButton.setEnabled(true);
+				dlg.panelMain.saveButton.setEnabled(true);
+				if (dlg.mark.getCategory() == Cat.LAM_STBD) {
+					switch (dlg.mark.getRegion()) {
+					case A:
+						dlg.mark.setPattern(Ent.BODY, Pat.NONE);
+						dlg.mark.setColour(Ent.BODY, Col.GREEN);
+						break;
+					case B:
+						dlg.mark.setPattern(Ent.BODY, Pat.NONE);
+						dlg.mark.setColour(Ent.BODY, Col.RED);
+						break;
+					case C:
+						dlg.mark.setPattern(Ent.BODY, Pat.HORIZ);
+						dlg.mark.setColour(Ent.BODY, Col.GREEN);
+						dlg.mark.addColour(Ent.BODY, Col.WHITE);
+						dlg.mark.addColour(Ent.BODY, Col.GREEN);
+						dlg.mark.addColour(Ent.BODY, Col.WHITE);
+						break;
 					}
-					dlg.panelMain.panelMore.panelPat.panelCol.syncStack();
 				} else {
-					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.setPattern(Ent.BODY, Pat.HORIZ);
+					switch (dlg.mark.getRegion()) {
+					case A:
+						dlg.mark.setColour(Ent.BODY, Col.GREEN);
+						dlg.mark.addColour(Ent.BODY, Col.RED);
+						dlg.mark.addColour(Ent.BODY, Col.GREEN);
+						break;
+					case B:
+						dlg.mark.setColour(Ent.BODY, Col.RED);
+						dlg.mark.addColour(Ent.BODY, Col.GREEN);
+						dlg.mark.addColour(Ent.BODY, Col.RED);
+						break;
+					case C:
+						dlg.mark.setColour(Ent.BODY, Col.RED);
+						dlg.mark.addColour(Ent.BODY, Col.GREEN);
+						dlg.mark.addColour(Ent.BODY, Col.RED);
+						dlg.mark.addColour(Ent.BODY, Col.GREEN);
+						break;
+					}
 				}
-				dlg.mark.paintSign();
+				dlg.panelMain.panelMore.syncPanel();
+			} else {
+				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();
 		}
 	};
@@ -123,5 +121,5 @@
 		}
 	}
-	
+
 	private JRadioButton getShapeButton(JRadioButton button, int x, int y, int w, int h, String tip, Shp shp, Obj obj) {
 		button.setBounds(new Rectangle(x, y, w, h));
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 26997)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelTop.java	(revision 26998)
@@ -36,16 +36,14 @@
 	private ActionListener alTop = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
-			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());
-				dlg.mark.paintSign();
+			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());
+			dlg.mark.paintSign();
 		}
 	};
@@ -82,5 +80,5 @@
 		mooringTopButton.setEnabled(state);
 	}
-	
+
 	public void syncPanel() {
 		for (Top top : tops.keySet()) {
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 26997)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/SeaMark.java	(revision 26998)
@@ -484,5 +484,5 @@
 	static {
 		TopSTR.put(Top.CAN, "cylinder");
-		TopSTR.put(Top.CONE, "cylinder");
+		TopSTR.put(Top.CONE, "cone, point up");
 		TopSTR.put(Top.SPHERE, "sphere");
 		TopSTR.put(Top.X_SHAPE, "x-shape");
@@ -1111,134 +1111,103 @@
 		}
 
-		dlg.panelMain.typeButtons.clearSelection();
-		dlg.panelMain.panelChan.catButtons.clearSelection();
-		dlg.panelMain.panelHaz.catButtons.clearSelection();
-		switch (GrpMAP.get(getObject())) {
-		case LAT:
-			dlg.panelMain.chanButton.setSelected(true);
-			switch (getCategory()) {
-			case LAM_PORT:
-				dlg.panelMain.panelChan.portButton.setSelected(true);
-				break;
-			case LAM_STBD:
-				dlg.panelMain.panelChan.stbdButton.setSelected(true);
-				break;
-			case LAM_PPORT:
-				dlg.panelMain.panelChan.prefPortButton.setSelected(true);
-				break;
-			case LAM_PSTBD:
-				dlg.panelMain.panelChan.prefStbdButton.setSelected(true);
-				break;
-			}
-			break;
-		case SAW:
-			dlg.panelMain.chanButton.setSelected(true);
-			dlg.panelMain.panelChan.safeWaterButton.setSelected(true);
-			break;
-		case CAR:
-			dlg.panelMain.hazButton.setSelected(true);
-			switch (getCategory()) {
-			case CAM_NORTH:
-				dlg.panelMain.panelHaz.northButton.setSelected(true);
-				break;
-			case CAM_SOUTH:
-				dlg.panelMain.panelHaz.southButton.setSelected(true);
-				break;
-			case CAM_EAST:
-				dlg.panelMain.panelHaz.eastButton.setSelected(true);
-				break;
-			case CAM_WEST:
-				dlg.panelMain.panelHaz.westButton.setSelected(true);
-				break;
-			}
-			break;
-		case ISD:
-			dlg.panelMain.hazButton.setSelected(true);
-			dlg.panelMain.panelHaz.isolButton.setSelected(true);
-			break;
-		case SPP:
-			dlg.panelMain.specButton.setSelected(true);
-			break;
-		case LIT:
-		case SIS:
-			dlg.panelMain.lightsButton.setSelected(true);
-			break;
-		case FLT:
-			switch (getColour(Ent.FLOAT, 0)) {
-			case RED:
-				dlg.panelMain.chanButton.setSelected(true);
-				if (getColour(Ent.FLOAT, 1) == Col.WHITE)
-					if (getColour(Ent.FLOAT, 2) == Col.RED) {
-						setRegion(Reg.C);
-						dlg.panelMain.panelChan.portButton.setSelected(true);
-					} else {
-						dlg.panelMain.panelChan.safeWaterButton.setSelected(true);
-					}
-				else if (getColour(Ent.FLOAT, 1) == Col.GREEN) {
-					if (getColour(Ent.FLOAT, 3) == Col.GREEN) {
-						setRegion(Reg.C);
-					}
-					if (getRegion().equals("B")) {
-						dlg.panelMain.panelChan.prefStbdButton.setSelected(true);
-					} else {
-						dlg.panelMain.panelChan.prefPortButton.setSelected(true);
-					}
-				} else {
-					if (getRegion().equals("B"))
-						dlg.panelMain.panelChan.stbdButton.setSelected(true);
-					else
-						dlg.panelMain.panelChan.portButton.setSelected(true);
-				}
-				break;
-			case GREEN:
-				dlg.panelMain.chanButton.setSelected(true);
-				if (getColour(Ent.FLOAT, 1) == Col.RED) {
-					if (getRegion().equals("B")) {
-						dlg.panelMain.panelChan.prefPortButton.setSelected(true);
-					} else {
-						dlg.panelMain.panelChan.prefStbdButton.setSelected(true);
-					}
-				} else if (getColour(Ent.FLOAT, 1) == Col.WHITE) {
-					setRegion(Reg.C);
-					dlg.panelMain.panelChan.stbdButton.setSelected(true);
-				} else {
-					if (getRegion().equals("B")) {
-						dlg.panelMain.panelChan.portButton.setSelected(true);
-					} else {
-						dlg.panelMain.panelChan.stbdButton.setSelected(true);
-					}
-				}
-				break;
-			case BLACK:
-				dlg.panelMain.hazButton.setSelected(true);
-				switch (getColour(Ent.FLOAT, 1)) {
-				case YELLOW:
-					if (getColour(Ent.FLOAT, 2) == Col.BLACK)
-						dlg.panelMain.panelHaz.eastButton.setSelected(true);
-					else
-						dlg.panelMain.panelHaz.northButton.setSelected(true);
-					break;
-				case RED:
-					dlg.panelMain.panelHaz.isolButton.setSelected(true);
-					break;
-				}
-				break;
-			case YELLOW:
-				if (getColour(Ent.FLOAT, 1) == Col.BLACK) {
-					dlg.panelMain.hazButton.setSelected(true);
-					if (getColour(Ent.FLOAT, 2) == Col.YELLOW)
-						dlg.panelMain.panelHaz.westButton.setSelected(true);
-					else
-						dlg.panelMain.panelHaz.southButton.setSelected(true);
-				} else {
-					dlg.panelMain.specButton.setSelected(true);
-				}
-				break;
-			default:
-				dlg.panelMain.lightsButton.setSelected(true);
-			}
-			break;
-		}
-
+		if (keys.containsKey("seamark:topmark:shape")) {
+			str = keys.get("seamark:topmark:shape");
+			setTopmark(Top.NONE);
+			for (Top top : TopSTR.keySet()) {
+				if (TopSTR.get(top).equals(str)) {
+					setTopmark(top);
+				}
+			}
+		}
+		if (keys.containsKey("seamark:topmark:colour")) {
+			str = keys.get("seamark:topmark:colour");
+			setColour(Ent.TOPMARK, Col.UNKNOWN);
+			for (Col col : ColSTR.keySet()) {
+				if (ColSTR.get(col).equals(str)) {
+					setColour(Ent.TOPMARK, col);
+				}
+			}
+		}
+		if (keys.containsKey("seamark:topmark:colour_pattern")) {
+			str = keys.get("seamark:topmark:colour_pattern");
+			setPattern(Ent.TOPMARK, Pat.NONE);
+			for (Pat pat : PatSTR.keySet()) {
+				if (PatSTR.get(pat).equals(str)) {
+					setPattern(Ent.TOPMARK, pat);
+				}
+			}
+		}
+
+		if (keys.containsKey("seamark:fog_signal")) {
+			str = keys.get("seamark:fog_signal");
+			setFogSound(Fog.NONE);
+			for (Fog fog : FogSTR.keySet()) {
+				if (FogSTR.get(fog).equals(str)) {
+					setFogSound(fog);
+				}
+			}
+		}
+		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:fog_signal:sequence")) {
+			setFogSequence(keys.get("seamark:fog_signal:sequence"));
+		}
+		if (keys.containsKey("seamark:fog_signal:range")) {
+			setFogRange(keys.get("seamark:fog_signal:range"));
+		}
+
+		if (keys.containsKey("seamark:information")) {
+			setInfo(keys.get("seamark:information"));
+		}
+		if (keys.containsKey("seamark:source")) {
+			setSource(keys.get("seamark:source"));
+		}
+		if (keys.containsKey("seamark:height")) {
+			setHeight(keys.get("seamark:height"));
+		}
+		if (keys.containsKey("seamark:elevation")) {
+			setElevation(keys.get("seamark:elevation"));
+		}
+		if (keys.containsKey("seamark:status")) {
+			str = keys.get("seamark:status");
+			setStatus(Sts.UNKNOWN);
+			for (Sts sts : StsSTR.keySet()) {
+				if (StsSTR.get(sts).equals(str)) {
+					setStatus(sts);
+				}
+			}
+		}
+		if (keys.containsKey("seamark:construction")) {
+			str = keys.get("seamark:construction");
+			setConstr(Cns.UNKNOWN);
+			for (Cns cns : CnsSTR.keySet()) {
+				if (CnsSTR.get(cns).equals(str)) {
+					setConstr(cns);
+				}
+			}
+		}
+		if (keys.containsKey("seamark:visibility")) {
+			str = keys.get("seamark:visibility");
+			setVis(Vis.UNKNOWN);
+			for (Vis vis : VisSTR.keySet()) {
+				if (VisSTR.get(vis).equals(str)) {
+					setVis(vis);
+				}
+			}
+		}
+		if (keys.containsKey("seamark:reflectivity")) {
+			str = keys.get("seamark:reflectivity");
+			setRvis(Vis.UNKNOWN);
+			for (Vis vis : VisSTR.keySet()) {
+				if (VisSTR.get(vis).equals(str)) {
+					setRvis(vis);
+				}
+			}
+		}
+		
 		dlg.panelMain.syncPanel();
 
