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 27039)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelChan.java	(revision 27040)
@@ -25,36 +25,88 @@
 	private ActionListener alCat = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
+			panelPort.setVisible(false);
+			panelStbd.setVisible(false);
+			panelSaw.setVisible(false);
+			dlg.panelMain.moreButton.setVisible(false);
+			dlg.panelMain.saveButton.setEnabled(false);
+			topmarkButton.setVisible(false);
 			Shp shp = dlg.mark.getShape();
 			if (portButton.isSelected()) {
 				dlg.mark.setCategory(Cat.LAM_PORT);
-				if (!panelPort.shapes.containsKey(shp)) {
-					dlg.mark.setShape(Shp.UNKNOWN);
-				}
+				if (panelPort.shapes.containsKey(shp)) {
+					panelPort.shapes.get(shp).setSelected(true);
+				} else {
+					panelPort.shapeButtons.clearSelection();
+					dlg.mark.setShape(Shp.UNKNOWN);
+				}
+				panelPort.alShape.actionPerformed(null);
+				panelPort.setVisible(true);
+				portButton.setBorderPainted(true);
+			} else {
+				portButton.setBorderPainted(false);
 			}
 			if (prefPortButton.isSelected()) {
 				dlg.mark.setCategory(Cat.LAM_PPORT);
-				if (!panelPort.shapes.containsKey(shp)) {
-					dlg.mark.setShape(Shp.UNKNOWN);
-				}
+				if (panelPort.shapes.containsKey(shp)) {
+					panelPort.shapes.get(shp).setSelected(true);
+				} else {
+					panelPort.shapeButtons.clearSelection();
+					dlg.mark.setShape(Shp.UNKNOWN);
+				}
+				panelPort.alShape.actionPerformed(null);
+				panelPort.setVisible(true);
+				prefPortButton.setBorderPainted(true);
+			} else {
+				prefPortButton.setBorderPainted(false);
 			}
 			if (stbdButton.isSelected()) {
 				dlg.mark.setCategory(Cat.LAM_STBD);
-				if (!panelStbd.shapes.containsKey(shp)) {
-					dlg.mark.setShape(Shp.UNKNOWN);
-				}
+				if (panelStbd.shapes.containsKey(shp)) {
+					panelStbd.shapes.get(shp).setSelected(true);
+				} else {
+					panelStbd.shapeButtons.clearSelection();
+					dlg.mark.setShape(Shp.UNKNOWN);
+				}
+				panelStbd.alShape.actionPerformed(null);
+				panelStbd.setVisible(true);
+				stbdButton.setBorderPainted(true);
+			} else {
+				stbdButton.setBorderPainted(false);
 			}
 			if (prefStbdButton.isSelected()) {
 				dlg.mark.setCategory(Cat.LAM_PSTBD);
-				if (!panelStbd.shapes.containsKey(shp)) {
-					dlg.mark.setShape(Shp.UNKNOWN);
-				}
+				if (panelStbd.shapes.containsKey(shp)) {
+					panelStbd.shapes.get(shp).setSelected(true);
+				} else {
+					panelStbd.shapeButtons.clearSelection();
+					dlg.mark.setShape(Shp.UNKNOWN);
+				}
+				panelStbd.alShape.actionPerformed(null);
+				panelStbd.setVisible(true);
+				prefStbdButton.setBorderPainted(true);
+			} else {
+				prefStbdButton.setBorderPainted(false);
 			}
 			if (safeWaterButton.isSelected()) {
 				dlg.mark.setCategory(Cat.NONE);
-				if (!panelSaw.shapes.containsKey(shp)) {
-					dlg.mark.setShape(Shp.UNKNOWN);
-				}
-			}
-			syncPanel();
+				panelSaw.setVisible(true);
+				if (panelSaw.shapes.containsKey(shp)) {
+					panelSaw.shapes.get(shp).setSelected(true);
+				} else {
+					panelSaw.shapeButtons.clearSelection();
+					dlg.mark.setShape(Shp.UNKNOWN);
+				}
+				panelSaw.alShape.actionPerformed(null);
+				panelSaw.setVisible(true);
+				safeWaterButton.setBorderPainted(true);
+			} else {
+				safeWaterButton.setBorderPainted(false);
+			}
+			if (dlg.mark.isValid()) {
+				dlg.panelMain.moreButton.setVisible(true);
+				dlg.panelMain.saveButton.setEnabled(true);
+				topmarkButton.setVisible(true);
+			}
+			alTop.actionPerformed(null);
 			dlg.mark.paintSign();
 		}
@@ -151,26 +203,36 @@
 
 	public void syncPanel() {
-		if ((dlg.mark.getCategory() == Cat.LAM_PORT) || (dlg.mark.getCategory() == Cat.LAM_PPORT)) {
+		panelPort.setVisible(false);
+		panelStbd.setVisible(false);
+		panelSaw.setVisible(false);
+		if (dlg.mark.getCategory() == Cat.LAM_PORT) {
+			panelPort.setVisible(true);
 			portButton.setBorderPainted(true);
+		} else {
+			portButton.setBorderPainted(false);
+		}
+		if (dlg.mark.getCategory() == Cat.LAM_PPORT) {
 			panelPort.setVisible(true);
-			panelPort.syncPanel();
-		} else {
-			portButton.setBorderPainted(false);
-			panelPort.setVisible(false);
-		}
-		if ((dlg.mark.getCategory() == Cat.LAM_STBD) || (dlg.mark.getCategory() == Cat.LAM_PSTBD)) {
+			prefPortButton.setBorderPainted(true);
+		} else {
+			prefPortButton.setBorderPainted(false);
+		}
+		if (dlg.mark.getCategory() == Cat.LAM_STBD) {
+			panelStbd.setVisible(true);
 			stbdButton.setBorderPainted(true);
+		} else {
+			stbdButton.setBorderPainted(false);
+		}
+		if (dlg.mark.getCategory() == Cat.LAM_PSTBD) {
 			panelStbd.setVisible(true);
-			panelStbd.syncPanel();
-		} else {
-			stbdButton.setBorderPainted(false);
-			panelStbd.setVisible(false);
+			prefStbdButton.setBorderPainted(true);
+		} else {
+			prefStbdButton.setBorderPainted(false);
 		}
 		if (SeaMark.GrpMAP.get(dlg.mark.getObject()) == Grp.SAW) {
+			panelSaw.setVisible(true);
 			safeWaterButton.setBorderPainted(true);
-			panelSaw.setVisible(true);
 		} else {
 			safeWaterButton.setBorderPainted(false);
-			panelSaw.setVisible(false);
 		}
 		topmarkButton.setBorderPainted(dlg.mark.hasTopmark());
@@ -178,9 +240,13 @@
 			topmarkButton.setVisible(true);
 			dlg.panelMain.moreButton.setVisible(true);
-			panelSaw.syncPanel();
+			dlg.panelMain.saveButton.setEnabled(true);
 		} else {
 			topmarkButton.setVisible(false);
 			dlg.panelMain.moreButton.setVisible(false);
-		}
+			dlg.panelMain.saveButton.setEnabled(false);
+		}
+		panelPort.syncPanel();
+		panelStbd.syncPanel();
+		panelSaw.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 27039)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelMain.java	(revision 27040)
@@ -284,7 +284,17 @@
 		typeButtons.clearSelection();
 		chanButton.setBorderPainted(false);
+		chanButton.setEnabled(false);
 		hazButton.setBorderPainted(false);
+		hazButton.setEnabled(false);
 		specButton.setBorderPainted(false);
+		specButton.setEnabled(false);
 		lightsButton.setBorderPainted(false);
+		lightsButton.setEnabled(false);
+		topButton.setEnabled(false);
+		fogButton.setEnabled(false);
+		radButton.setEnabled(false);
+		litButton.setEnabled(false);
+		saveButton.setEnabled(false);
+		moreButton.setVisible(false);
 		panelChan.setVisible(false);
 		panelHaz.setVisible(false);
@@ -300,17 +310,6 @@
 		radarIcon.setIcon(null);
 		fogIcon.setIcon(null);
-		if (dlg.mark == null) {
-			topButton.setEnabled(false);
-			fogButton.setEnabled(false);
-			radButton.setEnabled(false);
-			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 {
+		nameBox.setEnabled(false);
+		if (dlg.mark != null) {
 			nameBox.setEnabled(true);
 			chanButton.setEnabled(true);
@@ -319,9 +318,6 @@
 			lightsButton.setEnabled(true);
 			nameBox.setText(dlg.mark.getName());
-			panelChan.setVisible(false);
-			panelHaz.setVisible(false);
-			panelSpec.setVisible(false);
-			panelLights.setVisible(false);
 			if (dlg.mark.isValid()) {
+				moreButton.setVisible(true);
 				moreButton.setEnabled(true);
 				topButton.setEnabled(true);
@@ -329,4 +325,5 @@
 				radButton.setEnabled(true);
 				litButton.setEnabled(true);
+				saveButton.setEnabled(true);
 			}
 			switch (SeaMark.GrpMAP.get(dlg.mark.getObject())) {
@@ -356,4 +353,8 @@
 				break;
 			}
+			panelChan.syncPanel();
+			panelHaz.syncPanel();
+			panelSpec.syncPanel();
+			panelLights.syncPanel();
 			panelMore.syncPanel();
 			panelTop.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 27039)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelPort.java	(revision 27040)
@@ -14,5 +14,5 @@
 
 	private OSeaMAction dlg;
-	private ButtonGroup shapeButtons = new ButtonGroup();
+	public ButtonGroup shapeButtons = new ButtonGroup();
 	public JRadioButton pillarButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/PillarButton.png")));
 	public JRadioButton sparButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/SparButton.png")));
@@ -26,5 +26,5 @@
 	public EnumMap<Shp, JRadioButton> shapes = new EnumMap<Shp, JRadioButton>(Shp.class);
 	public EnumMap<Shp, Obj> objects = new EnumMap<Shp, Obj>(Shp.class);
-	private ActionListener alShape = new ActionListener() {
+	public ActionListener alShape = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
 			for (Shp shp : shapes.keySet()) {
@@ -40,5 +40,4 @@
 				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);
@@ -93,4 +92,5 @@
 				dlg.panelMain.radButton.setEnabled(false);
 				dlg.panelMain.litButton.setEnabled(false);
+				dlg.panelMain.saveButton.setEnabled(false);
 			}
 			dlg.mark.paintSign();
Index: applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelSaw.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelSaw.java	(revision 27039)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelSaw.java	(revision 27040)
@@ -14,5 +14,5 @@
 
 	private OSeaMAction dlg;
-	private ButtonGroup shapeButtons = new ButtonGroup();
+	public ButtonGroup shapeButtons = new ButtonGroup();
 	public JRadioButton pillarButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/PillarButton.png")));
 	public JRadioButton sparButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/SparButton.png")));
@@ -22,5 +22,5 @@
 	public EnumMap<Shp, JRadioButton> shapes = new EnumMap<Shp, JRadioButton>(Shp.class);
 	public EnumMap<Shp, Obj> objects = new EnumMap<Shp, Obj>(Shp.class);
-	private ActionListener alShape = new ActionListener() {
+	public ActionListener alShape = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
 			for (Shp shp : shapes.keySet()) {
@@ -33,25 +33,25 @@
 					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);
-					dlg.mark.setObjPattern(Pat.VERT);
-					dlg.mark.setObjColour(Col.RED);
-					dlg.mark.addObjColour(Col.WHITE);
-				} else {
-					dlg.panelMain.moreButton.setVisible(false);
-					dlg.panelMain.topButton.setEnabled(false);
-					dlg.panelMain.fogButton.setEnabled(false);
-					dlg.panelMain.radButton.setEnabled(false);
-					dlg.panelMain.litButton.setEnabled(false);
-				}
-				dlg.panelMain.panelMore.syncPanel();
-				dlg.mark.paintSign();
+			if (dlg.mark.isValid()) {
+				dlg.panelMain.moreButton.setVisible(true);
+				dlg.panelMain.panelChan.topmarkButton.setVisible(true);
+				dlg.panelMain.topButton.setEnabled(true);
+				dlg.panelMain.fogButton.setEnabled(true);
+				dlg.panelMain.radButton.setEnabled(true);
+				dlg.panelMain.litButton.setEnabled(true);
+				dlg.panelMain.saveButton.setEnabled(true);
+				dlg.mark.setObjPattern(Pat.VERT);
+				dlg.mark.setObjColour(Col.RED);
+				dlg.mark.addObjColour(Col.WHITE);
+			} else {
+				dlg.panelMain.moreButton.setVisible(false);
+				dlg.panelMain.topButton.setEnabled(false);
+				dlg.panelMain.fogButton.setEnabled(false);
+				dlg.panelMain.radButton.setEnabled(false);
+				dlg.panelMain.litButton.setEnabled(false);
+				dlg.panelMain.saveButton.setEnabled(false);
 			}
+			dlg.panelMain.panelMore.syncPanel();
+			dlg.mark.paintSign();
 		}
 	};
@@ -64,5 +64,5 @@
 		this.add(getShapeButton(sphereButton, 0, 64, 34, 32, "Sphere", Shp.SPHERE, Obj.BOYSAW), null);
 		this.add(getShapeButton(floatButton, 0, 96, 34, 32, "Float", Shp.FLOAT, Obj.FLTSAW), null);
-		this.add(getShapeButton(beaconButton, 0, 128, 34, 32, "Beacon", Shp.BEACON, Obj.FLTSAW), null);
+		this.add(getShapeButton(beaconButton, 0, 128, 34, 32, "Beacon", Shp.BEACON, Obj.BCNSAW), null);
 	}
 
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 27039)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelStbd.java	(revision 27040)
@@ -14,5 +14,5 @@
 
 	private OSeaMAction dlg;
-	private ButtonGroup shapeButtons = new ButtonGroup();
+	public ButtonGroup shapeButtons = new ButtonGroup();
 	public JRadioButton pillarButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/PillarButton.png")));
 	public JRadioButton sparButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/SparButton.png")));
@@ -26,5 +26,5 @@
 	public EnumMap<Shp, JRadioButton> shapes = new EnumMap<Shp, JRadioButton>(Shp.class);
 	public EnumMap<Shp, Obj> objects = new EnumMap<Shp, Obj>(Shp.class);
-	private ActionListener alShape = new ActionListener() {
+	public ActionListener alShape = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
 			for (Shp shp : shapes.keySet()) {
@@ -40,5 +40,4 @@
 				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);
@@ -93,4 +92,5 @@
 				dlg.panelMain.radButton.setEnabled(false);
 				dlg.panelMain.litButton.setEnabled(false);
+				dlg.panelMain.saveButton.setEnabled(false);
 			}
 			dlg.mark.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 27039)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/SeaMark.java	(revision 27040)
@@ -1400,5 +1400,4 @@
 		if (paintlock)
 			return;
-		paintlock = true;
 
 		dlg.panelMain.shapeIcon.setIcon(null);
