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 24871)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelChan.java	(revision 24872)
@@ -28,6 +28,5 @@
 
 	private OSeaMAction dlg;
-	private boolean region;
-	private ButtonGroup catButtons = null;
+	private ButtonGroup catButtons = new ButtonGroup();
 	public JRadioButton portButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/PortButton.png")));
 	public JRadioButton stbdButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/StbdButton.png")));
@@ -35,5 +34,94 @@
 	public JRadioButton prefStbdButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/PrefStbdButton.png")));
 	public JRadioButton safeWaterButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/SafeWaterButton.png")));
-	private ActionListener alCat = null;
+	private ActionListener alCat = new ActionListener() {
+		public void actionPerformed(java.awt.event.ActionEvent e) {
+			if (portButton.isSelected()) {
+				if (!(dlg.mark instanceof MarkLat) || (dlg.mark.getCategory() != Cat.LAT_PORT))
+					dlg.mark = new MarkLat(dlg);
+				dlg.mark.setCategory(Cat.LAT_PORT);
+				if (dlg.mark.getRegion() == SeaMark.IALA_A) {
+					dlg.mark.setColour(Col.RED);
+					panelPort.regionAButton.doClick();
+				} else {
+					dlg.mark.setColour(Col.GREEN);
+					panelPort.regionBButton.doClick();
+				}
+				portButton.setBorderPainted(true);
+				panelPort.setVisible(true);
+			} else {
+				portButton.setBorderPainted(false);
+				panelPort.setVisible(false);
+				panelPort.clearSelections();
+			}
+			if (stbdButton.isSelected()) {
+				if (!(dlg.mark instanceof MarkLat) || (dlg.mark.getCategory() != Cat.LAT_STBD))
+					dlg.mark = new MarkLat(dlg);
+				dlg.mark.setCategory(Cat.LAT_STBD);
+				if (dlg.mark.getRegion() == SeaMark.IALA_A) {
+					dlg.mark.setColour(Col.GREEN);
+					panelStbd.regionAButton.doClick();
+				} else {
+					dlg.mark.setColour(Col.RED);
+					panelStbd.regionBButton.doClick();
+				}
+				stbdButton.setBorderPainted(true);
+				panelStbd.setVisible(true);
+			} else {
+				stbdButton.setBorderPainted(false);
+				panelStbd.setVisible(false);
+				panelStbd.clearSelections();
+			}
+			if (prefPortButton.isSelected()) {
+				if (!(dlg.mark instanceof MarkLat) || (dlg.mark.getCategory() != Cat.LAT_PREF_PORT))
+					dlg.mark = new MarkLat(dlg);
+				dlg.mark.setCategory(Cat.LAT_PREF_PORT);
+				if (dlg.mark.getRegion() == SeaMark.IALA_A) {
+					dlg.mark.setColour(Col.RED_GREEN_RED);
+					panelPrefPort.regionAButton.doClick();
+				} else {
+					dlg.mark.setColour(Col.GREEN_RED_GREEN);
+					panelPrefPort.regionBButton.doClick();
+				}
+				prefPortButton.setBorderPainted(true);
+				panelPrefPort.setVisible(true);
+			} else {
+				prefPortButton.setBorderPainted(false);
+				panelPrefPort.setVisible(false);
+				panelPrefPort.clearSelections();
+			}
+			if (prefStbdButton.isSelected()) {
+				if (!(dlg.mark instanceof MarkLat) || (dlg.mark.getCategory() != Cat.LAT_PREF_STBD))
+					dlg.mark = new MarkLat(dlg);
+				dlg.mark.setCategory(Cat.LAT_PREF_STBD);
+				if (dlg.mark.getRegion() == SeaMark.IALA_A) {
+					dlg.mark.setColour(Col.GREEN_RED_GREEN);
+					panelPrefStbd.regionAButton.doClick();
+				} else {
+					dlg.mark.setColour(Col.RED_GREEN_RED);
+					panelPrefStbd.regionBButton.doClick();
+				}
+				prefStbdButton.setBorderPainted(true);
+				panelPrefStbd.setVisible(true);
+			} else {
+				prefStbdButton.setBorderPainted(false);
+				panelPrefStbd.setVisible(false);
+				panelPrefStbd.clearSelections();
+			}
+			if (safeWaterButton.isSelected()) {
+				if (!(dlg.mark instanceof MarkSaw))
+					dlg.mark = new MarkSaw(dlg);
+				dlg.mark.setColour(Col.RED_WHITE);
+				safeWaterButton.setBorderPainted(true);
+				panelSafeWater.setVisible(true);
+			} else {
+				safeWaterButton.setBorderPainted(false);
+				panelSafeWater.setVisible(false);
+				panelSafeWater.clearSelections();
+			}
+			if (dlg.mark != null)
+				dlg.mark.paintSign();
+		}
+	};
+
 	public PanelPort panelPort = null;
 	public PanelStbd panelStbd = null;
@@ -65,109 +153,9 @@
 		this.add(panelPrefStbd, null);
 		this.add(panelSafeWater, null);
-		this.add(getButton(portButton, 0, 0, 52, 32, "PortTip"), null);
-		this.add(getButton(stbdButton, 0, 32, 52, 32, "StbdTip"), null);
-		this.add(getButton(prefPortButton, 0, 64, 52, 32, "PrefPortTip"), null);
-		this.add(getButton(prefStbdButton, 0, 96, 52, 32, "PrefStbdTip"), null);
-		this.add(getButton(safeWaterButton, 0, 128, 52, 32, "SafeWaterTip"), null);
-		catButtons = new ButtonGroup();
-		catButtons.add(portButton);
-		catButtons.add(stbdButton);
-		catButtons.add(prefPortButton);
-		catButtons.add(prefStbdButton);
-		catButtons.add(safeWaterButton);
-		alCat = new ActionListener() {
-			public void actionPerformed(java.awt.event.ActionEvent e) {
-				if (portButton.isSelected()) {
-					if (!(dlg.mark instanceof MarkLat) || (dlg.mark.getCategory() != Cat.LAT_PORT))
-						dlg.mark = new MarkLat(dlg);
-					dlg.mark.setCategory(Cat.LAT_PORT);
-					if (dlg.mark.getRegion() == SeaMark.IALA_A) {
-						dlg.mark.setColour(Col.RED);
-						panelPort.regionAButton.doClick();
-					} else {
-						dlg.mark.setColour(Col.GREEN);
-						panelPort.regionBButton.doClick();
-					}
-					portButton.setBorderPainted(true);
-					panelPort.setVisible(true);
-				} else {
-					portButton.setBorderPainted(false);
-					panelPort.setVisible(false);
-					panelPort.clearSelections();
-				}
-				if (stbdButton.isSelected()) {
-					if (!(dlg.mark instanceof MarkLat) || (dlg.mark.getCategory() != Cat.LAT_STBD))
-						dlg.mark = new MarkLat(dlg);
-					dlg.mark.setCategory(Cat.LAT_STBD);
-					if (dlg.mark.getRegion() == SeaMark.IALA_A) {
-						dlg.mark.setColour(Col.GREEN);
-						panelStbd.regionAButton.doClick();
-					} else {
-						dlg.mark.setColour(Col.RED);
-						panelStbd.regionBButton.doClick();
-					}
-					stbdButton.setBorderPainted(true);
-					panelStbd.setVisible(true);
-				} else {
-					stbdButton.setBorderPainted(false);
-					panelStbd.setVisible(false);
-					panelStbd.clearSelections();
-				}
-				if (prefPortButton.isSelected()) {
-					if (!(dlg.mark instanceof MarkLat) || (dlg.mark.getCategory() != Cat.LAT_PREF_PORT))
-						dlg.mark = new MarkLat(dlg);
-					dlg.mark.setCategory(Cat.LAT_PREF_PORT);
-					if (dlg.mark.getRegion() == SeaMark.IALA_A) {
-						dlg.mark.setColour(Col.RED_GREEN_RED);
-						panelPrefPort.regionAButton.doClick();
-					} else {
-						dlg.mark.setColour(Col.GREEN_RED_GREEN);
-						panelPrefPort.regionBButton.doClick();
-					}
-					prefPortButton.setBorderPainted(true);
-					panelPrefPort.setVisible(true);
-				} else {
-					prefPortButton.setBorderPainted(false);
-					panelPrefPort.setVisible(false);
-					panelPrefPort.clearSelections();
-				}
-				if (prefStbdButton.isSelected()) {
-					if (!(dlg.mark instanceof MarkLat) || (dlg.mark.getCategory() != Cat.LAT_PREF_STBD))
-						dlg.mark = new MarkLat(dlg);
-					dlg.mark.setCategory(Cat.LAT_PREF_STBD);
-					if (dlg.mark.getRegion() == SeaMark.IALA_A) {
-						dlg.mark.setColour(Col.GREEN_RED_GREEN);
-						panelPrefStbd.regionAButton.doClick();
-					} else {
-						dlg.mark.setColour(Col.RED_GREEN_RED);
-						panelPrefStbd.regionBButton.doClick();
-					}
-					prefStbdButton.setBorderPainted(true);
-					panelPrefStbd.setVisible(true);
-				} else {
-					prefStbdButton.setBorderPainted(false);
-					panelPrefStbd.setVisible(false);
-					panelPrefStbd.clearSelections();
-				}
-				if (safeWaterButton.isSelected()) {
-					if (!(dlg.mark instanceof MarkSaw))
-						dlg.mark = new MarkSaw(dlg);
-					dlg.mark.setColour(Col.RED_WHITE);
-					safeWaterButton.setBorderPainted(true);
-					panelSafeWater.setVisible(true);
-				} else {
-					safeWaterButton.setBorderPainted(false);
-					panelSafeWater.setVisible(false);
-					panelSafeWater.clearSelections();
-				}
-				if (dlg.mark != null)
-					dlg.mark.paintSign();
-			}
-		};
-		portButton.addActionListener(alCat);
-		stbdButton.addActionListener(alCat);
-		prefPortButton.addActionListener(alCat);
-		prefStbdButton.addActionListener(alCat);
-		safeWaterButton.addActionListener(alCat);
+		this.add(getCatButton(portButton, 0, 0, 52, 32, "PortTip"), null);
+		this.add(getCatButton(stbdButton, 0, 32, 52, 32, "StbdTip"), null);
+		this.add(getCatButton(prefPortButton, 0, 64, 52, 32, "PrefPortTip"), null);
+		this.add(getCatButton(prefStbdButton, 0, 96, 52, 32, "PrefStbdTip"), null);
+		this.add(getCatButton(safeWaterButton, 0, 128, 52, 32, "SafeWaterTip"), null);
 	}
 
@@ -182,8 +170,10 @@
 	}
 
-	private JRadioButton getButton(JRadioButton button, int x, int y, int w, int h, String tip) {
+	private JRadioButton getCatButton(JRadioButton button, int x, int y, int w, int h, String tip) {
 		button.setBounds(new Rectangle(x, y, w, h));
 		button.setBorder(BorderFactory.createLineBorder(Color.magenta, 2));
 		button.setToolTipText(Messages.getString(tip));
+		button.addActionListener(alCat);
+		catButtons.add(button);
 		return button;
 	}
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 24871)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelHaz.java	(revision 24872)
@@ -20,9 +20,11 @@
 
 import java.awt.event.ActionListener;
+import java.util.EnumMap;
+import java.util.Iterator;
 
 public class PanelHaz extends JPanel {
 
 	private OSeaMAction dlg;
-	private ButtonGroup catButtons = null;
+	private ButtonGroup catButtons = new ButtonGroup();
 	public JRadioButton northButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/CardNButton.png")));
 	public JRadioButton southButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/CardSButton.png")));
@@ -30,7 +32,76 @@
 	public JRadioButton westButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/CardWButton.png")));
 	public JRadioButton isolButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/IsolButton.png")));
-	private ActionListener alCat = null;
+	private ActionListener alCat = new ActionListener() {
+		public void actionPerformed(java.awt.event.ActionEvent e) {
+			if (northButton.isSelected()) {
+				if (!(dlg.mark instanceof MarkCard)) {
+					dlg.mark = new MarkCard(dlg);
+					alShape.actionPerformed(null);
+				}
+				dlg.mark.setCategory(Cat.CARD_NORTH);
+				dlg.mark.setColour(Col.BLACK_YELLOW);
+				dlg.panelMain.panelTop.northTopButton.doClick();
+				dlg.panelMain.panelTop.panelCol.blackButton.doClick();
+				northButton.setBorderPainted(true);
+			} else {
+				northButton.setBorderPainted(false);
+			}
+			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(Col.YELLOW_BLACK);
+				dlg.panelMain.panelTop.southTopButton.doClick();
+				dlg.panelMain.panelTop.panelCol.blackButton.doClick();
+				southButton.setBorderPainted(true);
+			} else {
+				southButton.setBorderPainted(false);
+			}
+			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(Col.BLACK_YELLOW_BLACK);
+				dlg.panelMain.panelTop.eastTopButton.doClick();
+				dlg.panelMain.panelTop.panelCol.blackButton.doClick();
+				eastButton.setBorderPainted(true);
+			} else {
+				eastButton.setBorderPainted(false);
+			}
+			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(Col.YELLOW_BLACK_YELLOW);
+				dlg.panelMain.panelTop.westTopButton.doClick();
+				dlg.panelMain.panelTop.panelCol.blackButton.doClick();
+				westButton.setBorderPainted(true);
+			} else {
+				westButton.setBorderPainted(false);
+			}
+			if (isolButton.isSelected()) {
+				if (!(dlg.mark instanceof MarkIsol)) {
+					dlg.mark = new MarkIsol(dlg);
+					alShape.actionPerformed(null);
+				}
+				dlg.mark.setColour(Col.BLACK_RED_BLACK);
+				dlg.panelMain.panelTop.spheres2TopButton.doClick();
+				dlg.panelMain.panelTop.panelCol.blackButton.doClick();
+				isolButton.setBorderPainted(true);
+			} else {
+				isolButton.setBorderPainted(false);
+			}
+			if (dlg.mark != null)
+				dlg.mark.paintSign();
+		}
+	};
 
-	private ButtonGroup shapeButtons = null;
+	private 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")));
@@ -38,148 +109,36 @@
 	public JRadioButton beaconButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/BeaconButton.png")));
 	public JRadioButton towerButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/TowerButton.png")));
-	private ActionListener alShape = null;
+	private EnumMap<Shp, JRadioButton> shapes = new EnumMap<Shp, JRadioButton>(Shp.class);
+	private ActionListener alShape = new ActionListener() {
+		public void actionPerformed(java.awt.event.ActionEvent e) {
+			Iterator<Shp> it = shapes.keySet().iterator();
+			while (it.hasNext()) {
+				Shp shp = it.next();
+				JRadioButton button = shapes.get(shp);
+				if (button.isSelected()) {
+					dlg.mark.setShape(shp);
+					button.setBorderPainted(true);
+				} else
+					button.setBorderPainted(false);
+			}
+			if (dlg.mark != null)
+				dlg.mark.paintSign();
+		}
+	};
 
 	public PanelHaz(OSeaMAction dia) {
 		dlg = dia;
 		this.setLayout(null);
-		this.add(getButton(northButton, 0, 0, 52, 32, "NorthTip"), null);
-		this.add(getButton(southButton, 0, 32, 52, 32, "SouthTip"), null);
-		this.add(getButton(eastButton, 0, 64, 52, 32, "EastTip"), null);
-		this.add(getButton(westButton, 0, 96, 52, 32, "WestTip"), null);
-		this.add(getButton(isolButton, 0, 128, 52, 32, "IsolTip"), null);
-		catButtons = new ButtonGroup();
-		catButtons.add(northButton);
-		catButtons.add(southButton);
-		catButtons.add(eastButton);
-		catButtons.add(westButton);
-		catButtons.add(isolButton);
-		alCat = new ActionListener() {
-			public void actionPerformed(java.awt.event.ActionEvent e) {
-				if (northButton.isSelected()) {
-					if (!(dlg.mark instanceof MarkCard)) {
-						dlg.mark = new MarkCard(dlg);
-						alShape.actionPerformed(null);
-					}
-					dlg.mark.setCategory(Cat.CARD_NORTH);
-					dlg.mark.setColour(Col.BLACK_YELLOW);
-					dlg.panelMain.panelTop.northTopButton.doClick();
-					dlg.panelMain.panelTop.panelCol.blackButton.doClick();
-					northButton.setBorderPainted(true);
-				} else {
-					northButton.setBorderPainted(false);
-				}
-				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(Col.YELLOW_BLACK);
-					dlg.panelMain.panelTop.southTopButton.doClick();
-					dlg.panelMain.panelTop.panelCol.blackButton.doClick();
-					southButton.setBorderPainted(true);
-				} else {
-					southButton.setBorderPainted(false);
-				}
-				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(Col.BLACK_YELLOW_BLACK);
-					dlg.panelMain.panelTop.eastTopButton.doClick();
-					dlg.panelMain.panelTop.panelCol.blackButton.doClick();
-					eastButton.setBorderPainted(true);
-				} else {
-					eastButton.setBorderPainted(false);
-				}
-				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(Col.YELLOW_BLACK_YELLOW);
-					dlg.panelMain.panelTop.westTopButton.doClick();
-					dlg.panelMain.panelTop.panelCol.blackButton.doClick();
-					westButton.setBorderPainted(true);
-				} else {
-					westButton.setBorderPainted(false);
-				}
-				if (isolButton.isSelected()) {
-					if (!(dlg.mark instanceof MarkIsol)) {
-						dlg.mark = new MarkIsol(dlg);
-						alShape.actionPerformed(null);
-					}
-					dlg.mark.setColour(Col.BLACK_RED_BLACK);
-					dlg.panelMain.panelTop.spheres2TopButton.doClick();
-					dlg.panelMain.panelTop.panelCol.blackButton.doClick();
-					isolButton.setBorderPainted(true);
-				} else {
-					isolButton.setBorderPainted(false);
-				}
-				if (dlg.mark != null)
-					dlg.mark.paintSign();
-			}
-		};
-		northButton.addActionListener(alCat);
-		southButton.addActionListener(alCat);
-		eastButton.addActionListener(alCat);
-		westButton.addActionListener(alCat);
-		isolButton.addActionListener(alCat);
+		this.add(getCatButton(northButton, 0, 0, 52, 32, "NorthTip"), null);
+		this.add(getCatButton(southButton, 0, 32, 52, 32, "SouthTip"), null);
+		this.add(getCatButton(eastButton, 0, 64, 52, 32, "EastTip"), null);
+		this.add(getCatButton(westButton, 0, 96, 52, 32, "WestTip"), null);
+		this.add(getCatButton(isolButton, 0, 128, 52, 32, "IsolTip"), null);
 
-		this.add(getButton(pillarButton, 55, 0, 34, 32, "PillarTip"), null);
-		this.add(getButton(sparButton, 55, 32, 34, 32, "SparTip"), null);
-		this.add(getButton(floatButton, 55, 64, 34, 32, "FloatTip"), null);
-		this.add(getButton(beaconButton, 55, 96, 34, 32, "BeaconTip"), null);
-		this.add(getButton(towerButton, 55, 128, 34, 32, "TowerTip"), null);
-		shapeButtons = new ButtonGroup();
-		shapeButtons.add(pillarButton);
-		shapeButtons.add(sparButton);
-		shapeButtons.add(floatButton);
-		shapeButtons.add(beaconButton);
-		shapeButtons.add(towerButton);
-		alShape = new ActionListener() {
-			public void actionPerformed(java.awt.event.ActionEvent e) {
-				if (pillarButton.isSelected()) {
-					pillarButton.setBorderPainted(true);
-					dlg.mark.setShape(Shp.PILLAR);
-				} else {
-					pillarButton.setBorderPainted(false);
-				}
-				if (sparButton.isSelected()) {
-					sparButton.setBorderPainted(true);
-					dlg.mark.setShape(Shp.SPAR);
-				} else {
-					sparButton.setBorderPainted(false);
-				}
-				if (floatButton.isSelected()) {
-					floatButton.setBorderPainted(true);
-					dlg.mark.setShape(Shp.FLOAT);
-				} else {
-					floatButton.setBorderPainted(false);
-				}
-				if (beaconButton.isSelected()) {
-					beaconButton.setBorderPainted(true);
-					dlg.mark.setShape(Shp.BEACON);
-				} else {
-					beaconButton.setBorderPainted(false);
-				}
-				if (towerButton.isSelected()) {
-					towerButton.setBorderPainted(true);
-					dlg.mark.setShape(Shp.TOWER);
-				} else {
-					towerButton.setBorderPainted(false);
-				}
-				if (dlg.mark != null)
-					dlg.mark.paintSign();
-			}
-		};
-		pillarButton.addActionListener(alShape);
-		sparButton.addActionListener(alShape);
-		floatButton.addActionListener(alShape);
-		beaconButton.addActionListener(alShape);
-		towerButton.addActionListener(alShape);
+		this.add(getShapeButton(pillarButton, 55, 0, 34, 32, "PillarTip", Shp.PILLAR), null);
+		this.add(getShapeButton(sparButton, 55, 32, 34, 32, "SparTip", Shp.SPAR), null);
+		this.add(getShapeButton(floatButton, 55, 64, 34, 32, "FloatTip", Shp.FLOAT), null);
+		this.add(getShapeButton(beaconButton, 55, 96, 34, 32, "BeaconTip", Shp.BEACON), null);
+		this.add(getShapeButton(towerButton, 55, 128, 34, 32, "TowerTip", Shp.TOWER), null);
 	}
 
@@ -191,8 +150,20 @@
 	}
 
-	private JRadioButton getButton(JRadioButton button, int x, int y, int w, int h, String tip) {
+	private JRadioButton getCatButton(JRadioButton button, int x, int y, int w, int h, String tip) {
 		button.setBounds(new Rectangle(x, y, w, h));
 		button.setBorder(BorderFactory.createLineBorder(Color.magenta, 2));
 		button.setToolTipText(Messages.getString(tip));
+		button.addActionListener(alCat);
+		catButtons.add(button);
+		return button;
+	}
+
+	private JRadioButton getShapeButton(JRadioButton button, int x, int y, int w, int h, String tip, Shp shp) {
+		button.setBounds(new Rectangle(x, y, w, h));
+		button.setBorder(BorderFactory.createLineBorder(Color.magenta, 2));
+		button.setToolTipText(Messages.getString(tip));
+		button.addActionListener(alShape);
+		shapeButtons.add(button);
+		shapes.put(shp, button);
 		return button;
 	}
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 24871)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelPort.java	(revision 24872)
@@ -24,12 +24,21 @@
 import java.awt.Cursor;
 import java.awt.event.ActionListener;
+import java.util.EnumMap;
+import java.util.Iterator;
 
 public class PanelPort extends JPanel {
 
 	private OSeaMAction dlg;
-	private ButtonGroup regionButtons = null;
+	private ButtonGroup regionButtons = new ButtonGroup();
 	public JRadioButton regionAButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/RegionAButton.png")));
 	public JRadioButton regionBButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/RegionBButton.png")));
-	private ButtonGroup shapeButtons = null;
+	private ActionListener alRegion = new ActionListener() {
+		public void actionPerformed(java.awt.event.ActionEvent e) {
+			regionAButton.setBorderPainted(regionAButton.isSelected());
+			regionBButton.setBorderPainted(regionBButton.isSelected());
+			dlg.mark.paintSign();
+		}
+	};
+	private 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")));
@@ -39,95 +48,34 @@
 	public JRadioButton towerButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/TowerButton.png")));
 	public JRadioButton perchButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/PerchPButton.png")));
-	private ActionListener alShape = null;
+	private EnumMap<Shp, JRadioButton> shapes = new EnumMap<Shp, JRadioButton>(Shp.class);
+	private ActionListener alShape = new ActionListener() {
+		public void actionPerformed(java.awt.event.ActionEvent e) {
+			Iterator<Shp> it = shapes.keySet().iterator();
+			while (it.hasNext()) {
+				Shp shp = it.next();
+				JRadioButton button = shapes.get(shp);
+				if (button.isSelected()) {
+					dlg.mark.setShape(shp);
+					button.setBorderPainted(true);
+				} else
+					button.setBorderPainted(false);
+			}
+			if (dlg.mark != null)
+				dlg.mark.paintSign();
+		}
+	};
 
 	public PanelPort(OSeaMAction dia) {
 		dlg = dia;
 		this.setLayout(null);
-		this.add(getButton(regionAButton, 0, 2, 34, 30, "RegionATip"), null);
-		this.add(getButton(regionBButton, 0, 32, 34, 30, "RegionBTip"), null);
-		this.add(getButton(pillarButton, 0, 64, 34, 32, "PillarTip"), null);
-		this.add(getButton(sparButton, 0, 96, 34, 32, "SparTip"), null);
-		this.add(getButton(canButton, 0, 128, 34, 32, "CanTip"), null);
-		this.add(getButton(floatButton, 35, 0, 34, 32, "FloatTip"), null);
-		this.add(getButton(beaconButton, 35, 32, 34, 32, "BeaconTip"), null);
-		this.add(getButton(towerButton, 35, 64, 34, 32, "TowerTip"), null);
-		this.add(getButton(perchButton, 35, 96, 34, 32, "PerchTip"), null);
-
-		regionButtons = new ButtonGroup();
-		regionButtons.add(regionAButton);
-		regionButtons.add(regionBButton);
-		ActionListener alRegion = new ActionListener() {
-			public void actionPerformed(java.awt.event.ActionEvent e) {
-				regionAButton.setBorderPainted(regionAButton.isSelected());
-				regionBButton.setBorderPainted(regionBButton.isSelected());
-				dlg.mark.paintSign();
-			}
-		};
-		regionAButton.addActionListener(alRegion);
-		regionBButton.addActionListener(alRegion);
-
-		shapeButtons = new ButtonGroup();
-		shapeButtons.add(pillarButton);
-		shapeButtons.add(sparButton);
-		shapeButtons.add(canButton);
-		shapeButtons.add(floatButton);
-		shapeButtons.add(beaconButton);
-		shapeButtons.add(towerButton);
-		shapeButtons.add(perchButton);
-		alShape = new ActionListener() {
-			public void actionPerformed(java.awt.event.ActionEvent e) {
-				if (pillarButton.isSelected()) {
-					dlg.mark.setShape(Shp.PILLAR);
-					pillarButton.setBorderPainted(true);
-				} else {
-					pillarButton.setBorderPainted(false);
-				}
-				if (sparButton.isSelected()) {
-					dlg.mark.setShape(Shp.SPAR);
-					sparButton.setBorderPainted(true);
-				} else {
-					sparButton.setBorderPainted(false);
-				}
-				if (canButton.isSelected()) {
-					dlg.mark.setShape(Shp.CAN);
-					canButton.setBorderPainted(true);
-				} else {
-					canButton.setBorderPainted(false);
-				}
-				if (floatButton.isSelected()) {
-					dlg.mark.setShape(Shp.FLOAT);
-					floatButton.setBorderPainted(true);
-				} else {
-					floatButton.setBorderPainted(false);
-				}
-				if (beaconButton.isSelected()) {
-					dlg.mark.setShape(Shp.BEACON);
-					beaconButton.setBorderPainted(true);
-				} else {
-					beaconButton.setBorderPainted(false);
-				}
-				if (towerButton.isSelected()) {
-					dlg.mark.setShape(Shp.TOWER);
-					towerButton.setBorderPainted(true);
-				} else {
-					towerButton.setBorderPainted(false);
-				}
-				if (perchButton.isSelected()) {
-					dlg.mark.setShape(Shp.PERCH);
-					perchButton.setBorderPainted(true);
-				} else {
-					perchButton.setBorderPainted(false);
-				}
-				if (dlg.mark != null)
-					dlg.mark.paintSign();
-			}
-		};
-		pillarButton.addActionListener(alShape);
-		sparButton.addActionListener(alShape);
-		canButton.addActionListener(alShape);
-		floatButton.addActionListener(alShape);
-		beaconButton.addActionListener(alShape);
-		towerButton.addActionListener(alShape);
-		perchButton.addActionListener(alShape);
+		this.add(getRegionButton(regionAButton, 0, 2, 34, 30, "RegionATip"), null);
+		this.add(getRegionButton(regionBButton, 0, 32, 34, 30, "RegionBTip"), null);
+		this.add(getShapeButton(pillarButton, 0, 64, 34, 32, "PillarTip", Shp.PILLAR), null);
+		this.add(getShapeButton(sparButton, 0, 96, 34, 32, "SparTip", Shp.SPAR), null);
+		this.add(getShapeButton(canButton, 0, 128, 34, 32, "CanTip", Shp.CAN), null);
+		this.add(getShapeButton(floatButton, 35, 0, 34, 32, "FloatTip", Shp.FLOAT), null);
+		this.add(getShapeButton(beaconButton, 35, 32, 34, 32, "BeaconTip", Shp.BEACON), null);
+		this.add(getShapeButton(towerButton, 35, 64, 34, 32, "TowerTip", Shp.TOWER), null);
+		this.add(getShapeButton(perchButton, 35, 96, 34, 32, "PerchTip", Shp.PERCH), null);
 	}
 
@@ -137,8 +85,20 @@
 	}
 
-	private JRadioButton getButton(JRadioButton button, int x, int y, int w, int h, String tip) {
+	private JRadioButton getRegionButton(JRadioButton button, int x, int y, int w, int h, String tip) {
 		button.setBounds(new Rectangle(x, y, w, h));
 		button.setBorder(BorderFactory.createLineBorder(Color.magenta, 2));
 		button.setToolTipText(Messages.getString(tip));
+		button.addActionListener(alRegion);
+		regionButtons.add(button);
+		return button;
+	}
+
+	private JRadioButton getShapeButton(JRadioButton button, int x, int y, int w, int h, String tip, Shp shp) {
+		button.setBounds(new Rectangle(x, y, w, h));
+		button.setBorder(BorderFactory.createLineBorder(Color.magenta, 2));
+		button.setToolTipText(Messages.getString(tip));
+		button.addActionListener(alShape);
+		shapeButtons.add(button);
+		shapes.put(shp, button);
 		return button;
 	}
Index: /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelPrefPort.java
===================================================================
--- /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelPrefPort.java	(revision 24871)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelPrefPort.java	(revision 24872)
@@ -23,12 +23,21 @@
 import java.awt.Cursor;
 import java.awt.event.ActionListener;
+import java.util.EnumMap;
+import java.util.Iterator;
 
 public class PanelPrefPort extends JPanel {
 
 	private OSeaMAction dlg;
-	private ButtonGroup regionButtons = null;
+	private ButtonGroup regionButtons = new ButtonGroup();
 	public JRadioButton regionAButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/RegionAButton.png")));
 	public JRadioButton regionBButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/RegionBButton.png")));
-	private ButtonGroup shapeButtons = null;
+	private ActionListener alRegion = new ActionListener() {
+		public void actionPerformed(java.awt.event.ActionEvent e) {
+			regionAButton.setBorderPainted(regionAButton.isSelected());
+			regionBButton.setBorderPainted(regionBButton.isSelected());
+			dlg.mark.paintSign();
+		}
+	};
+	private 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")));
@@ -37,86 +46,33 @@
 	public JRadioButton beaconButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/BeaconButton.png")));
 	public JRadioButton towerButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/TowerButton.png")));
-	private ActionListener alShape = null;
+	private EnumMap<Shp, JRadioButton> shapes = new EnumMap<Shp, JRadioButton>(Shp.class);
+	private ActionListener alShape = new ActionListener() {
+		public void actionPerformed(java.awt.event.ActionEvent e) {
+			Iterator<Shp> it = shapes.keySet().iterator();
+			while (it.hasNext()) {
+				Shp shp = it.next();
+				JRadioButton button = shapes.get(shp);
+				if (button.isSelected()) {
+					dlg.mark.setShape(shp);
+					button.setBorderPainted(true);
+				} else
+					button.setBorderPainted(false);
+			}
+			if (dlg.mark != null)
+				dlg.mark.paintSign();
+		}
+	};
 
 	public PanelPrefPort(OSeaMAction dia) {
 		dlg = dia;
 		this.setLayout(null);
-		this.add(getButton(regionAButton, 0, 2, 34, 30, "RegionATip"), null);
-		this.add(getButton(regionBButton, 0, 32, 34, 30, "RegionBTip"), null);
-		this.add(getButton(pillarButton, 0, 64, 34, 32, "PillarTip"), null);
-		this.add(getButton(sparButton, 0, 96, 34, 32, "SparTip"), null);
-		this.add(getButton(canButton, 0, 128, 34, 32, "CanTip"), null);
-		this.add(getButton(floatButton, 35, 0, 34, 32, "FloatTip"), null);
-		this.add(getButton(beaconButton, 35, 32, 34, 32, "BeaconTip"), null);
-		this.add(getButton(towerButton, 35, 64, 34, 32, "TowerTip"), null);
-
-		regionButtons = new ButtonGroup();
-		regionButtons.add(regionAButton);
-		regionButtons.add(regionBButton);
-		ActionListener alRegion = new ActionListener() {
-			public void actionPerformed(java.awt.event.ActionEvent e) {
-				regionAButton.setBorderPainted(regionAButton.isSelected());
-				regionBButton.setBorderPainted(regionBButton.isSelected());
-				dlg.mark.paintSign();
-			}
-		};
-		regionAButton.addActionListener(alRegion);
-		regionBButton.addActionListener(alRegion);
-
-		shapeButtons = new ButtonGroup();
-		shapeButtons.add(pillarButton);
-		shapeButtons.add(sparButton);
-		shapeButtons.add(canButton);
-		shapeButtons.add(floatButton);
-		shapeButtons.add(beaconButton);
-		shapeButtons.add(towerButton);
-		alShape = new ActionListener() {
-			public void actionPerformed(java.awt.event.ActionEvent e) {
-				if (pillarButton.isSelected()) {
-					dlg.mark.setShape(Shp.PILLAR);
-					pillarButton.setBorderPainted(true);
-				} else {
-					pillarButton.setBorderPainted(false);
-				}
-				if (sparButton.isSelected()) {
-					dlg.mark.setShape(Shp.SPAR);
-					sparButton.setBorderPainted(true);
-				} else {
-					sparButton.setBorderPainted(false);
-				}
-				if (canButton.isSelected()) {
-					dlg.mark.setShape(Shp.CAN);
-					canButton.setBorderPainted(true);
-				} else {
-					canButton.setBorderPainted(false);
-				}
-				if (floatButton.isSelected()) {
-					dlg.mark.setShape(Shp.FLOAT);
-					floatButton.setBorderPainted(true);
-				} else {
-					floatButton.setBorderPainted(false);
-				}
-				if (beaconButton.isSelected()) {
-					dlg.mark.setShape(Shp.BEACON);
-					beaconButton.setBorderPainted(true);
-				} else {
-					beaconButton.setBorderPainted(false);
-				}
-				if (towerButton.isSelected()) {
-					dlg.mark.setShape(Shp.TOWER);
-					towerButton.setBorderPainted(true);
-				} else {
-					towerButton.setBorderPainted(false);
-				}
-				if (dlg.mark != null)
-					dlg.mark.paintSign();
-			}
-		};
-		pillarButton.addActionListener(alShape);
-		sparButton.addActionListener(alShape);
-		canButton.addActionListener(alShape);
-		floatButton.addActionListener(alShape);
-		beaconButton.addActionListener(alShape);
-		towerButton.addActionListener(alShape);
+		this.add(getRegionButton(regionAButton, 0, 2, 34, 30, "RegionATip"), null);
+		this.add(getRegionButton(regionBButton, 0, 32, 34, 30, "RegionBTip"), null);
+		this.add(getShapeButton(pillarButton, 0, 64, 34, 32, "PillarTip", Shp.PILLAR), null);
+		this.add(getShapeButton(sparButton, 0, 96, 34, 32, "SparTip", Shp.SPAR), null);
+		this.add(getShapeButton(canButton, 0, 128, 34, 32, "CanTip", Shp.CAN), null);
+		this.add(getShapeButton(floatButton, 35, 0, 34, 32, "FloatTip", Shp.FLOAT), null);
+		this.add(getShapeButton(beaconButton, 35, 32, 34, 32, "BeaconTip", Shp.BEACON), null);
+		this.add(getShapeButton(towerButton, 35, 64, 34, 32, "TowerTip", Shp.TOWER), null);
 	}
 
@@ -126,8 +82,20 @@
 	}
 
-	private JRadioButton getButton(JRadioButton button, int x, int y, int w, int h, String tip) {
+	private JRadioButton getRegionButton(JRadioButton button, int x, int y, int w, int h, String tip) {
 		button.setBounds(new Rectangle(x, y, w, h));
 		button.setBorder(BorderFactory.createLineBorder(Color.magenta, 2));
 		button.setToolTipText(Messages.getString(tip));
+		button.addActionListener(alRegion);
+		regionButtons.add(button);
+		return button;
+	}
+
+	private JRadioButton getShapeButton(JRadioButton button, int x, int y, int w, int h, String tip, Shp shp) {
+		button.setBounds(new Rectangle(x, y, w, h));
+		button.setBorder(BorderFactory.createLineBorder(Color.magenta, 2));
+		button.setToolTipText(Messages.getString(tip));
+		button.addActionListener(alShape);
+		shapeButtons.add(button);
+		shapes.put(shp, button);
 		return button;
 	}
Index: /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelPrefStbd.java
===================================================================
--- /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelPrefStbd.java	(revision 24871)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelPrefStbd.java	(revision 24872)
@@ -23,12 +23,21 @@
 import java.awt.Cursor;
 import java.awt.event.ActionListener;
+import java.util.EnumMap;
+import java.util.Iterator;
 
 public class PanelPrefStbd extends JPanel {
 
 	private OSeaMAction dlg;
-	private ButtonGroup regionButtons = null;
+	private ButtonGroup regionButtons = new ButtonGroup();
 	public JRadioButton regionAButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/RegionAButton.png")));
 	public JRadioButton regionBButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/RegionBButton.png")));
-	private ButtonGroup shapeButtons = null;
+	private ActionListener alRegion = new ActionListener() {
+		public void actionPerformed(java.awt.event.ActionEvent e) {
+			regionAButton.setBorderPainted(regionAButton.isSelected());
+			regionBButton.setBorderPainted(regionBButton.isSelected());
+			dlg.mark.paintSign();
+		}
+	};
+	private 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")));
@@ -37,86 +46,34 @@
 	public JRadioButton beaconButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/BeaconButton.png")));
 	public JRadioButton towerButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/TowerButton.png")));
-	private ActionListener alShape = null;
+	private EnumMap<Shp, JRadioButton> shapes = new EnumMap<Shp, JRadioButton>(Shp.class);
+	private ActionListener alShape = new ActionListener() {
+		public void actionPerformed(java.awt.event.ActionEvent e) {
+			Iterator<Shp> it = shapes.keySet().iterator();
+			while (it.hasNext()) {
+				Shp shp = it.next();
+				JRadioButton button = shapes.get(shp);
+				if (button.isSelected()) {
+					dlg.mark.setShape(shp);
+					button.setBorderPainted(true);
+				} else
+					button.setBorderPainted(false);
+			}
+			if (dlg.mark != null)
+				dlg.mark.paintSign();
+		}
+	};
 
 	public PanelPrefStbd(OSeaMAction dia) {
 		dlg = dia;
 		this.setLayout(null);
-		this.add(getButton(regionAButton, 0, 2, 34, 30, "RegionATip"), null);
-		this.add(getButton(regionBButton, 0, 32, 34, 30, "RegionBTip"), null);
-		this.add(getButton(pillarButton, 0, 64, 34, 32, "PillarTip"), null);
-		this.add(getButton(sparButton, 0, 96, 34, 32, "SparTip"), null);
-		this.add(getButton(coneButton, 0, 128, 34, 32, "ConeTip"), null);
-		this.add(getButton(floatButton, 35, 0, 34, 32, "FloatTip"), null);
-		this.add(getButton(beaconButton, 35, 32, 34, 32, "BeaconTip"), null);
-		this.add(getButton(towerButton, 35, 64, 34, 32, "TowerTip"), null);
+		this.add(getRegionButton(regionAButton, 0, 2, 34, 30, "RegionATip"), null);
+		this.add(getRegionButton(regionBButton, 0, 32, 34, 30, "RegionBTip"), null);
+		this.add(getShapeButton(pillarButton, 0, 64, 34, 32, "PillarTip", Shp.PILLAR), null);
+		this.add(getShapeButton(sparButton, 0, 96, 34, 32, "SparTip", Shp.SPAR), null);
+		this.add(getShapeButton(coneButton, 0, 128, 34, 32, "ConeTip", Shp.CONE), null);
+		this.add(getShapeButton(floatButton, 35, 0, 34, 32, "FloatTip", Shp.FLOAT), null);
+		this.add(getShapeButton(beaconButton, 35, 32, 34, 32, "BeaconTip", Shp.BEACON), null);
+		this.add(getShapeButton(towerButton, 35, 64, 34, 32, "TowerTip", Shp.TOWER), null);
 
-		regionButtons = new ButtonGroup();
-		regionButtons.add(regionAButton);
-		regionButtons.add(regionBButton);
-		ActionListener alRegion = new ActionListener() {
-			public void actionPerformed(java.awt.event.ActionEvent e) {
-				regionAButton.setBorderPainted(regionAButton.isSelected());
-				regionBButton.setBorderPainted(regionBButton.isSelected());
-				dlg.mark.paintSign();
-			}
-		};
-		regionAButton.addActionListener(alRegion);
-		regionBButton.addActionListener(alRegion);
-
-		shapeButtons = new ButtonGroup();
-		shapeButtons.add(pillarButton);
-		shapeButtons.add(sparButton);
-		shapeButtons.add(coneButton);
-		shapeButtons.add(floatButton);
-		shapeButtons.add(beaconButton);
-		shapeButtons.add(towerButton);
-		alShape = new ActionListener() {
-			public void actionPerformed(java.awt.event.ActionEvent e) {
-				if (pillarButton.isSelected()) {
-					dlg.mark.setShape(Shp.PILLAR);
-					pillarButton.setBorderPainted(true);
-				} else {
-					pillarButton.setBorderPainted(false);
-				}
-				if (sparButton.isSelected()) {
-					dlg.mark.setShape(Shp.SPAR);
-					sparButton.setBorderPainted(true);
-				} else {
-					sparButton.setBorderPainted(false);
-				}
-				if (coneButton.isSelected()) {
-					dlg.mark.setShape(Shp.CONE);
-					coneButton.setBorderPainted(true);
-				} else {
-					coneButton.setBorderPainted(false);
-				}
-				if (floatButton.isSelected()) {
-					dlg.mark.setShape(Shp.FLOAT);
-					floatButton.setBorderPainted(true);
-				} else {
-					floatButton.setBorderPainted(false);
-				}
-				if (beaconButton.isSelected()) {
-					dlg.mark.setShape(Shp.BEACON);
-					beaconButton.setBorderPainted(true);
-				} else {
-					beaconButton.setBorderPainted(false);
-				}
-				if (towerButton.isSelected()) {
-					dlg.mark.setShape(Shp.TOWER);
-					towerButton.setBorderPainted(true);
-				} else {
-					towerButton.setBorderPainted(false);
-				}
-				if (dlg.mark != null)
-					dlg.mark.paintSign();
-			}
-		};
-		pillarButton.addActionListener(alShape);
-		sparButton.addActionListener(alShape);
-		coneButton.addActionListener(alShape);
-		floatButton.addActionListener(alShape);
-		beaconButton.addActionListener(alShape);
-		towerButton.addActionListener(alShape);
 	}
 
@@ -126,8 +83,20 @@
 	}
 
-	private JRadioButton getButton(JRadioButton button, int x, int y, int w, int h, String tip) {
+	private JRadioButton getRegionButton(JRadioButton button, int x, int y, int w, int h, String tip) {
 		button.setBounds(new Rectangle(x, y, w, h));
 		button.setBorder(BorderFactory.createLineBorder(Color.magenta, 2));
 		button.setToolTipText(Messages.getString(tip));
+		button.addActionListener(alRegion);
+		regionButtons.add(button);
+		return button;
+	}
+
+	private JRadioButton getShapeButton(JRadioButton button, int x, int y, int w, int h, String tip, Shp shp) {
+		button.setBounds(new Rectangle(x, y, w, h));
+		button.setBorder(BorderFactory.createLineBorder(Color.magenta, 2));
+		button.setToolTipText(Messages.getString(tip));
+		button.addActionListener(alShape);
+		shapeButtons.add(button);
+		shapes.put(shp, button);
 		return button;
 	}
Index: /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelSafeWater.java
===================================================================
--- /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelSafeWater.java	(revision 24871)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelSafeWater.java	(revision 24872)
@@ -23,72 +23,42 @@
 import java.awt.Cursor;
 import java.awt.event.ActionListener;
+import java.util.EnumMap;
+import java.util.Iterator;
 
 public class PanelSafeWater extends JPanel {
 
 	private OSeaMAction dlg;
-	private ButtonGroup shapeButtons = null;
-	private JRadioButton pillarButton = null;
-	private JRadioButton sparButton = null;
-	private JRadioButton sphereButton = null;
-	private JRadioButton barrelButton = null;
-	private JRadioButton floatButton = null;
-	private ActionListener alShape = null;
+	private ButtonGroup shapeButtons = new ButtonGroup();
+	private JRadioButton pillarButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/PillarButton.png")));
+	private JRadioButton sparButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/SparButton.png")));
+	private JRadioButton sphereButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/SphereButton.png")));
+	private JRadioButton barrelButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/BarrelButton.png")));
+	private JRadioButton floatButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/FloatButton.png")));
+	private EnumMap<Shp, JRadioButton> shapes = new EnumMap<Shp, JRadioButton>(Shp.class);
+	private ActionListener alShape = new ActionListener() {
+		public void actionPerformed(java.awt.event.ActionEvent e) {
+			Iterator<Shp> it = shapes.keySet().iterator();
+			while (it.hasNext()) {
+				Shp shp = it.next();
+				JRadioButton button = shapes.get(shp);
+				if (button.isSelected()) {
+					dlg.mark.setShape(shp);
+					button.setBorderPainted(true);
+				} else
+					button.setBorderPainted(false);
+			}
+			if (dlg.mark != null)
+				dlg.mark.paintSign();
+		}
+	};
 
 	public PanelSafeWater(OSeaMAction dia) {
 		dlg = dia;
 		this.setLayout(null);
-		this.add(getPillarButton(), null);
-		this.add(getSparButton(), null);
-		this.add(getSphereButton(), null);
-		this.add(getBarrelButton(), null);
-		this.add(getFloatButton(), null);
-
-		shapeButtons = new ButtonGroup();
-		shapeButtons.add(pillarButton);
-		shapeButtons.add(sparButton);
-		shapeButtons.add(sphereButton);
-		shapeButtons.add(barrelButton);
-		shapeButtons.add(floatButton);
-		alShape = new ActionListener() {
-			public void actionPerformed(java.awt.event.ActionEvent e) {
-				if (pillarButton.isSelected()) {
-					dlg.mark.setShape(Shp.PILLAR);
-					pillarButton.setBorderPainted(true);
-				} else {
-					pillarButton.setBorderPainted(false);
-				}
-				if (sparButton.isSelected()) {
-					dlg.mark.setShape(Shp.SPAR);
-					sparButton.setBorderPainted(true);
-				} else {
-					sparButton.setBorderPainted(false);
-				}
-				if (sphereButton.isSelected()) {
-					dlg.mark.setShape(Shp.SPHERE);
-					sphereButton.setBorderPainted(true);
-				} else {
-					sphereButton.setBorderPainted(false);
-				}
-				if (barrelButton.isSelected()) {
-					dlg.mark.setShape(Shp.BARREL);
-					barrelButton.setBorderPainted(true);
-				} else {
-					barrelButton.setBorderPainted(false);
-				}
-				if (floatButton.isSelected()) {
-					dlg.mark.setShape(Shp.FLOAT);
-					floatButton.setBorderPainted(true);
-				} else {
-					floatButton.setBorderPainted(false);
-				}
-				if (dlg.mark != null)
-					dlg.mark.paintSign();
-			}
-		};
-		pillarButton.addActionListener(alShape);
-		sparButton.addActionListener(alShape);
-		sphereButton.addActionListener(alShape);
-		barrelButton.addActionListener(alShape);
-		floatButton.addActionListener(alShape);
+		this.add(getShapeButton(pillarButton, 0, 0, 34, 32, "PillarTip", Shp.PILLAR), null);
+		this.add(getShapeButton(sparButton, 0, 32, 34, 32, "SparTip", Shp.SPAR), null);
+		this.add(getShapeButton(sphereButton, 0, 64, 34, 32, "SphereTip", Shp.SPHERE), null);
+		this.add(getShapeButton(barrelButton, 0, 96, 34, 32, "BarrelTip", Shp.BARREL), null);
+		this.add(getShapeButton(floatButton, 0, 128, 34, 32, "FloatTip", Shp.FLOAT), null);
 	}
 
@@ -98,52 +68,12 @@
 	}
 
-	private JRadioButton getPillarButton() {
-		if (pillarButton == null) {
-			pillarButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/PillarButton.png")));
-			pillarButton.setBounds(new Rectangle(0, 0, 34, 32));
-			pillarButton.setBorder(BorderFactory.createLineBorder(Color.magenta, 2));
-			pillarButton.setToolTipText(Messages.getString("PillarTip"));
-		}
-		return pillarButton;
-	}
-
-	private JRadioButton getSparButton() {
-		if (sparButton == null) {
-			sparButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/SparButton.png")));
-			sparButton.setBounds(new Rectangle(0, 32, 34, 32));
-			sparButton.setBorder(BorderFactory.createLineBorder(Color.magenta, 2));
-			sparButton.setToolTipText(Messages.getString("SparTip"));
-		}
-		return sparButton;
-	}
-
-	private JRadioButton getSphereButton() {
-		if (sphereButton == null) {
-			sphereButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/SphereButton.png")));
-			sphereButton.setBounds(new Rectangle(0, 64, 34, 32));
-			sphereButton.setBorder(BorderFactory.createLineBorder(Color.magenta, 2));
-			sphereButton.setToolTipText(Messages.getString("SphereTip"));
-		}
-		return sphereButton;
-	}
-
-	private JRadioButton getBarrelButton() {
-		if (barrelButton == null) {
-			barrelButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/BarrelButton.png")));
-			barrelButton.setBounds(new Rectangle(0, 96, 34, 32));
-			barrelButton.setBorder(BorderFactory.createLineBorder(Color.magenta, 2));
-			barrelButton.setToolTipText(Messages.getString("BarrelTip"));
-		}
-		return barrelButton;
-	}
-
-	private JRadioButton getFloatButton() {
-		if (floatButton == null) {
-			floatButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/FloatButton.png")));
-			floatButton.setBounds(new Rectangle(0, 128, 34, 32));
-			floatButton.setBorder(BorderFactory.createLineBorder(Color.magenta, 2));
-			floatButton.setToolTipText(Messages.getString("FloatTip"));
-		}
-		return floatButton;
+	private JRadioButton getShapeButton(JRadioButton button, int x, int y, int w, int h, String tip, Shp shp) {
+		button.setBounds(new Rectangle(x, y, w, h));
+		button.setBorder(BorderFactory.createLineBorder(Color.magenta, 2));
+		button.setToolTipText(Messages.getString(tip));
+		button.addActionListener(alShape);
+		shapeButtons.add(button);
+		shapes.put(shp, button);
+		return button;
 	}
 
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 24871)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelStbd.java	(revision 24872)
@@ -23,12 +23,21 @@
 import java.awt.Cursor;
 import java.awt.event.ActionListener;
+import java.util.EnumMap;
+import java.util.Iterator;
 
 public class PanelStbd extends JPanel {
 
 	private OSeaMAction dlg;
-	private ButtonGroup regionButtons = null;
+	private ButtonGroup regionButtons = new ButtonGroup();
 	public JRadioButton regionAButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/RegionAButton.png")));
 	public JRadioButton regionBButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/RegionBButton.png")));
-	private ButtonGroup shapeButtons = null;
+	private ActionListener alRegion = new ActionListener() {
+		public void actionPerformed(java.awt.event.ActionEvent e) {
+			regionAButton.setBorderPainted(regionAButton.isSelected());
+			regionBButton.setBorderPainted(regionBButton.isSelected());
+			dlg.mark.paintSign();
+		}
+	};
+	private 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")));
@@ -38,95 +47,34 @@
 	public JRadioButton towerButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/TowerButton.png")));
 	public JRadioButton perchButton = new JRadioButton(new ImageIcon(getClass().getResource("/images/PerchSButton.png")));
-	private ActionListener alShape = null;
+	private EnumMap<Shp, JRadioButton> shapes = new EnumMap<Shp, JRadioButton>(Shp.class);
+	private ActionListener alShape = new ActionListener() {
+		public void actionPerformed(java.awt.event.ActionEvent e) {
+			Iterator<Shp> it = shapes.keySet().iterator();
+			while (it.hasNext()) {
+				Shp shp = it.next();
+				JRadioButton button = shapes.get(shp);
+				if (button.isSelected()) {
+					dlg.mark.setShape(shp);
+					button.setBorderPainted(true);
+				} else
+					button.setBorderPainted(false);
+			}
+			if (dlg.mark != null)
+				dlg.mark.paintSign();
+		}
+	};
 
 	public PanelStbd(OSeaMAction dia) {
 		dlg = dia;
 		this.setLayout(null);
-		this.add(getButton(regionAButton, 0, 2, 34, 30, "RegionATip"), null);
-		this.add(getButton(regionBButton, 0, 32, 34, 30, "RegionBTip"), null);
-		this.add(getButton(pillarButton, 0, 64, 34, 32, "PillarTip"), null);
-		this.add(getButton(sparButton, 0, 96, 34, 32, "SparTip"), null);
-		this.add(getButton(coneButton, 0, 128, 34, 32, "ConeTip"), null);
-		this.add(getButton(floatButton, 35, 0, 34, 32, "FloatTip"), null);
-		this.add(getButton(beaconButton, 35, 32, 34, 32, "BeaconTip"), null);
-		this.add(getButton(towerButton, 35, 64, 34, 32, "TowerTip"), null);
-		this.add(getButton(perchButton, 35, 96, 34, 32, "PerchTip"), null);
-
-		regionButtons = new ButtonGroup();
-		regionButtons.add(regionAButton);
-		regionButtons.add(regionBButton);
-		ActionListener alRegion = new ActionListener() {
-			public void actionPerformed(java.awt.event.ActionEvent e) {
-				regionAButton.setBorderPainted(regionAButton.isSelected());
-				regionBButton.setBorderPainted(regionBButton.isSelected());
-				dlg.mark.paintSign();
-			}
-		};
-		regionAButton.addActionListener(alRegion);
-		regionBButton.addActionListener(alRegion);
-
-		shapeButtons = new ButtonGroup();
-		shapeButtons.add(pillarButton);
-		shapeButtons.add(sparButton);
-		shapeButtons.add(coneButton);
-		shapeButtons.add(floatButton);
-		shapeButtons.add(beaconButton);
-		shapeButtons.add(towerButton);
-		shapeButtons.add(perchButton);
-		alShape = new ActionListener() {
-			public void actionPerformed(java.awt.event.ActionEvent e) {
-				if (pillarButton.isSelected()) {
-					dlg.mark.setShape(Shp.PILLAR);
-					pillarButton.setBorderPainted(true);
-				} else {
-					pillarButton.setBorderPainted(false);
-				}
-				if (sparButton.isSelected()) {
-					dlg.mark.setShape(Shp.SPAR);
-					sparButton.setBorderPainted(true);
-				} else {
-					sparButton.setBorderPainted(false);
-				}
-				if (coneButton.isSelected()) {
-					dlg.mark.setShape(Shp.CONE);
-					coneButton.setBorderPainted(true);
-				} else {
-					coneButton.setBorderPainted(false);
-				}
-				if (floatButton.isSelected()) {
-					dlg.mark.setShape(Shp.FLOAT);
-					floatButton.setBorderPainted(true);
-				} else {
-					floatButton.setBorderPainted(false);
-				}
-				if (beaconButton.isSelected()) {
-					dlg.mark.setShape(Shp.BEACON);
-					beaconButton.setBorderPainted(true);
-				} else {
-					beaconButton.setBorderPainted(false);
-				}
-				if (towerButton.isSelected()) {
-					dlg.mark.setShape(Shp.TOWER);
-					towerButton.setBorderPainted(true);
-				} else {
-					towerButton.setBorderPainted(false);
-				}
-				if (perchButton.isSelected()) {
-					dlg.mark.setShape(Shp.PERCH);
-					perchButton.setBorderPainted(true);
-				} else {
-					perchButton.setBorderPainted(false);
-				}
-				if (dlg.mark != null)
-					dlg.mark.paintSign();
-			}
-		};
-		pillarButton.addActionListener(alShape);
-		sparButton.addActionListener(alShape);
-		coneButton.addActionListener(alShape);
-		floatButton.addActionListener(alShape);
-		beaconButton.addActionListener(alShape);
-		towerButton.addActionListener(alShape);
-		perchButton.addActionListener(alShape);
+		this.add(getRegionButton(regionAButton, 0, 2, 34, 30, "RegionATip"), null);
+		this.add(getRegionButton(regionBButton, 0, 32, 34, 30, "RegionBTip"), null);
+		this.add(getShapeButton(pillarButton, 0, 64, 34, 32, "PillarTip", Shp.PILLAR), null);
+		this.add(getShapeButton(sparButton, 0, 96, 34, 32, "SparTip", Shp.SPAR), null);
+		this.add(getShapeButton(coneButton, 0, 128, 34, 32, "ConeTip", Shp.CONE), null);
+		this.add(getShapeButton(floatButton, 35, 0, 34, 32, "FloatTip", Shp.FLOAT), null);
+		this.add(getShapeButton(beaconButton, 35, 32, 34, 32, "BeaconTip", Shp.BEACON), null);
+		this.add(getShapeButton(towerButton, 35, 64, 34, 32, "TowerTip", Shp.TOWER), null);
+		this.add(getShapeButton(perchButton, 35, 96, 34, 32, "PerchTip", Shp.PERCH), null);
 	}
 
@@ -136,8 +84,20 @@
 	}
 
-	private JRadioButton getButton(JRadioButton button, int x, int y, int w, int h, String tip) {
+	private JRadioButton getRegionButton(JRadioButton button, int x, int y, int w, int h, String tip) {
 		button.setBounds(new Rectangle(x, y, w, h));
 		button.setBorder(BorderFactory.createLineBorder(Color.magenta, 2));
 		button.setToolTipText(Messages.getString(tip));
+		button.addActionListener(alRegion);
+		regionButtons.add(button);
+		return button;
+	}
+
+	private JRadioButton getShapeButton(JRadioButton button, int x, int y, int w, int h, String tip, Shp shp) {
+		button.setBounds(new Rectangle(x, y, w, h));
+		button.setBorder(BorderFactory.createLineBorder(Color.magenta, 2));
+		button.setToolTipText(Messages.getString(tip));
+		button.addActionListener(alShape);
+		shapeButtons.add(button);
+		shapes.put(shp, button);
 		return button;
 	}
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 24871)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/SeaMark.java	(revision 24872)
@@ -101,15 +101,15 @@
 
 	public enum Top {
-		UNKNOWN, X_SHAPE, CAN, CONE
-	}
-
-	private boolean TopMark = false;
+		NONE, CAN, CONE, SPHERE, X_SHAPE, NORTH, SOUTH, EAST, WEST, SPHERES2, BOARD, DIAMOND, TRIANGLE, TRIANGLE_INV, SQUARE, MOORING
+	}
+
+	private Top TopMark = Top.NONE;
 
 	public boolean hasTopMark() {
-		return TopMark;
-	}
-
-	public void setTopMark(boolean topMark) {
-		TopMark = topMark;
+		return (TopMark != Top.NONE);
+	}
+
+	public void setTopMark(Top top) {
+		TopMark = top;
 	}
 
