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 26971)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelCol.java	(revision 26972)
@@ -42,50 +42,24 @@
 						if (ent == Ent.LIGHT) {
 							dlg.mark.setColour(ent, col);
+							button.setBorderPainted(true);
 						} else {
 							if (button == delButton) {
-								if (stackCol.size() > 1) {
-									JRadioButton btnI = stackCol.get(stackIdx);
-									dlg.mark.subColour(ent, stackIdx);
-									btnI.removeActionListener(alStack);
-									stackColours.remove(btnI);
-									stack.remove(btnI);
-									stackCol.remove(stackIdx);
-									if (stackCol.size() == stackIdx)
-										stackIdx--;
-								} else {
-									dlg.mark.setColour(ent, Col.UNKNOWN);
-								}
+								dlg.mark.subColour(ent, stackIdx);
 							} else if (button == addButton) {
 								if (stackCol.size() != 0)
 									stackIdx++;
-								if (stackIdx == 0)
+								if (stackCol.size() == 0)
 									dlg.mark.setColour(ent, col);
 								else
 									dlg.mark.addColour(ent, stackIdx, col);
-								stackCol.add(stackIdx, new JRadioButton(new ImageIcon(getClass().getResource("/images/ColourButton.png"))));
-								JRadioButton btnI = stackCol.get(stackIdx);
-								btnI.setBorder(BorderFactory.createLoweredBevelBorder());
-								stack.add(btnI);
-								stackColours.add(btnI);
-								btnI.addActionListener(alStack);
 							} else {
 								dlg.mark.setColour(ent, stackIdx, col);
 							}
-							int height = stackCol.size() == 0 ? 60 : 60 / stackCol.size();
-							for (int i = 0; stackCol.size() > i; i++) {
-								JRadioButton btnI = stackCol.get(i);
-								btnI.setBounds(2, (2 + (i * height)), 30, height);
-								btnI.setBackground(oseam.seamarks.SeaMark.ColMAP.get(dlg.mark.getColour(ent, i)));
-								if (stackIdx == i) {
-									btnI.setBorderPainted(true);
-								} else {
-									btnI.setBorderPainted(false);
-								}
-							}
+							syncStack();
 						}
 					}
-					button.setBorderPainted(true);
-				} else
+				} else {
 					button.setBorderPainted(false);
+				}
 			}
 		}
@@ -145,8 +119,41 @@
 	}
 
-	public void syncButtons() {
-		if (ent != Ent.LIGHT) {
-			for (stackIdx = 0; dlg.mark.getColour(ent, stackIdx) != Col.UNKNOWN; stackIdx++) {
-
+	public void syncStack() {
+		if (ent == Ent.LIGHT) {
+		} else {
+			int idx;
+			for (idx = 0; dlg.mark.getColour(ent, idx) != Col.UNKNOWN; idx++) {
+				if (stackCol.size() <= idx) {
+					stackCol.add(idx, new JRadioButton(new ImageIcon(getClass().getResource("/images/ColourButton.png"))));
+					JRadioButton btnI = stackCol.get(idx);
+					btnI.setBorder(BorderFactory.createLoweredBevelBorder());
+					stack.add(btnI);
+					stackColours.add(btnI);
+					btnI.addActionListener(alStack);
+				}
+			}
+			while (idx < stackCol.size()) {
+				JRadioButton btnI = stackCol.get(idx);
+				btnI.removeActionListener(alStack);
+				stackColours.remove(btnI);
+				stack.remove(btnI);
+				stackCol.remove(idx);
+			}
+			if ((stackIdx >= stackCol.size()) && (stackIdx != 0))
+				stackIdx = stackCol.size() - 1;
+			if (stackCol.size() == 0) {
+				stack.repaint();
+			} else {
+				int height = 60 / stackCol.size();
+				for (idx = 0; stackCol.size() > idx; idx++) {
+					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)));
+					if (stackIdx == idx) {
+						btnI.setBorderPainted(true);
+					} else {
+						btnI.setBorderPainted(false);
+					}
+				}
 			}
 		}
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 26971)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelHaz.java	(revision 26972)
@@ -29,7 +29,6 @@
 				if (northButton.isSelected()) {
 					dlg.mark.setCategory(Cat.CAM_NORTH);
-					dlg.panelMain.panelMore.panelPat.panelCol.blackButton.doClick();
-					dlg.panelMain.panelMore.panelPat.panelCol.addButton.doClick();
-					dlg.panelMain.panelMore.panelPat.panelCol.yellowButton.doClick();
+					dlg.mark.setColour(Ent.BODY, Col.BLACK);
+					dlg.mark.addColour(Ent.BODY, Col.YELLOW);
 					if (shapes.containsKey(shp))
 						shapes.get(shp).doClick();
@@ -40,7 +39,6 @@
 				if (southButton.isSelected()) {
 					dlg.mark.setCategory(Cat.CAM_SOUTH);
-					dlg.panelMain.panelMore.panelPat.panelCol.yellowButton.doClick();
-					dlg.panelMain.panelMore.panelPat.panelCol.addButton.doClick();
-					dlg.panelMain.panelMore.panelPat.panelCol.blackButton.doClick();
+					dlg.mark.setColour(Ent.BODY, Col.YELLOW);
+					dlg.mark.addColour(Ent.BODY, Col.BLACK);
 					if (shapes.containsKey(shp))
 						shapes.get(shp).doClick();
@@ -51,9 +49,7 @@
 				if (eastButton.isSelected()) {
 					dlg.mark.setCategory(Cat.CAM_EAST);
-					dlg.panelMain.panelMore.panelPat.panelCol.blackButton.doClick();
-					dlg.panelMain.panelMore.panelPat.panelCol.addButton.doClick();
-					dlg.panelMain.panelMore.panelPat.panelCol.yellowButton.doClick();
-					dlg.panelMain.panelMore.panelPat.panelCol.addButton.doClick();
-					dlg.panelMain.panelMore.panelPat.panelCol.blackButton.doClick();
+					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();
@@ -64,9 +60,7 @@
 				if (westButton.isSelected()) {
 					dlg.mark.setCategory(Cat.CAM_WEST);
-					dlg.panelMain.panelMore.panelPat.panelCol.yellowButton.doClick();
-					dlg.panelMain.panelMore.panelPat.panelCol.addButton.doClick();
-					dlg.panelMain.panelMore.panelPat.panelCol.blackButton.doClick();
-					dlg.panelMain.panelMore.panelPat.panelCol.addButton.doClick();
-					dlg.panelMain.panelMore.panelPat.panelCol.yellowButton.doClick();
+					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();
@@ -78,8 +72,7 @@
 					dlg.mark.setCategory(Cat.UNKNOWN);
 					dlg.panelMain.panelMore.panelPat.panelCol.blackButton.doClick();
-					dlg.panelMain.panelMore.panelPat.panelCol.addButton.doClick();
-					dlg.panelMain.panelMore.panelPat.panelCol.redButton.doClick();
-					dlg.panelMain.panelMore.panelPat.panelCol.addButton.doClick();
-					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();
@@ -88,4 +81,5 @@
 					isolButton.setBorderPainted(false);
 				}
+				dlg.panelMain.panelMore.panelPat.panelCol.syncStack();
 			}
 		}
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 26971)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelPort.java	(revision 26972)
@@ -48,19 +48,16 @@
 						case A:
 							dlg.panelMain.panelMore.panelPat.noneButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.redButton.doClick();
+							dlg.mark.setColour(Ent.BODY, Col.RED);
 							break;
 						case B:
 							dlg.panelMain.panelMore.panelPat.noneButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.greenButton.doClick();
+							dlg.mark.setColour(Ent.BODY, Col.GREEN);
 							break;
 						case C:
 							dlg.panelMain.panelMore.panelPat.horizButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.redButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.addButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.whiteButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.addButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.redButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.addButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.whiteButton.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;
 						}
@@ -69,30 +66,24 @@
 						case A:
 							dlg.panelMain.panelMore.panelPat.horizButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.redButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.addButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.greenButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.addButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.redButton.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.panelMain.panelMore.panelPat.panelCol.greenButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.addButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.redButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.addButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.greenButton.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.panelMain.panelMore.panelPat.panelCol.redButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.addButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.greenButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.addButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.redButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.addButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.greenButton.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;
 						}
 					}
+					dlg.panelMain.panelMore.panelPat.panelCol.syncStack();
 				} else {
 					dlg.panelMain.moreButton.setVisible(false);
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 26971)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelSaw.java	(revision 26972)
@@ -41,7 +41,6 @@
 					dlg.panelMain.litButton.setEnabled(true);
 					dlg.panelMain.panelMore.panelPat.vertButton.doClick();
-					dlg.panelMain.panelMore.panelPat.panelCol.redButton.doClick();
-					dlg.panelMain.panelMore.panelPat.panelCol.addButton.doClick();
-					dlg.panelMain.panelMore.panelPat.panelCol.whiteButton.doClick();
+					dlg.mark.setColour(Ent.BODY, Col.RED);
+					dlg.mark.addColour(Ent.BODY, Col.WHITE);
 				} else {
 					dlg.panelMain.moreButton.setVisible(false);
@@ -51,4 +50,5 @@
 					dlg.panelMain.litButton.setEnabled(false);
 				}
+				dlg.panelMain.panelMore.panelPat.panelCol.syncStack();
 			}
 		}
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 26971)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelStbd.java	(revision 26972)
@@ -48,19 +48,16 @@
 						case A:
 							dlg.panelMain.panelMore.panelPat.noneButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.greenButton.doClick();
+							dlg.mark.setColour(Ent.BODY, Col.GREEN);
 							break;
 						case B:
 							dlg.panelMain.panelMore.panelPat.noneButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.redButton.doClick();
+							dlg.mark.setColour(Ent.BODY, Col.RED);
 							break;
 						case C:
 							dlg.panelMain.panelMore.panelPat.horizButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.greenButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.addButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.whiteButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.addButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.greenButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.addButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.whiteButton.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;
 						}
@@ -69,30 +66,24 @@
 						case A:
 							dlg.panelMain.panelMore.panelPat.horizButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.greenButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.addButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.redButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.addButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.greenButton.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.panelMain.panelMore.panelPat.panelCol.redButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.addButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.greenButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.addButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.redButton.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.panelMain.panelMore.panelPat.panelCol.redButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.addButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.greenButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.addButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.redButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.addButton.doClick();
-							dlg.panelMain.panelMore.panelPat.panelCol.greenButton.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;
 						}
 					}
+					dlg.panelMain.panelMore.panelPat.panelCol.syncStack();
 				} else {
 					dlg.panelMain.moreButton.setVisible(false);
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 26971)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/SeaMark.java	(revision 26972)
@@ -353,11 +353,14 @@
 		case BEACON:
 		case FLOAT:
-			bodyColour.set(i, col);
+			if (bodyColour.size() > i)
+				bodyColour.set(i, col);
 			break;
 		case TOPMARK:
-			topColour.set(i, col);
+			if (topColour.size() > i)
+				topColour.set(i, col);
 			break;
 		case LIGHT:
-			lightColour.set(i, col);
+			if (lightColour.size() > i)
+				lightColour.set(i, col);
 			break;
 		}
@@ -370,11 +373,14 @@
 		case BEACON:
 		case FLOAT:
-			bodyColour.add(i, col);
+			if (bodyColour.size() >= i)
+				bodyColour.add(i, col);
 			break;
 		case TOPMARK:
-			topColour.add(i, col);
+			if (topColour.size() >= i)
+				topColour.add(i, col);
 			break;
 		case LIGHT:
-			lightColour.add(i, col);
+			if (lightColour.size() >= i)
+				lightColour.add(i, col);
 			break;
 		}
@@ -1061,4 +1067,5 @@
 		dlg.panelMain.panelChan.syncButtons();
 		dlg.panelMain.panelHaz.syncButtons();
+		dlg.panelMain.panelMore.panelPat.panelCol.syncStack();
 
 		paintlock = false;
