Index: /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelChr.java
===================================================================
--- /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelChr.java	(revision 27213)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelChr.java	(revision 27214)
@@ -18,4 +18,6 @@
 
 	private OSeaMAction dlg;
+	public JLabel col1Label = new JLabel();
+	public JLabel col2Label = new JLabel();
 	public JLabel charLabel = new JLabel();
 	public JTextField charBox = new JTextField();
@@ -64,5 +66,12 @@
 				}
 			}
-			dlg.panelMain.mark.setLightAtt(Att.CHR, 0, charBox.getText());
+			String str = charBox.getText();
+			dlg.panelMain.mark.setLightAtt(Att.CHR, 0, str);
+			if (!str.contains("Al")) {
+				col2Label.setBackground(SeaMark.ColMAP.get(dlg.panelMain.mark.getLightAtt(Att.COL, 0)));
+				dlg.panelMain.mark.setLightAtt(Att.ALT, 0, Col.UNKNOWN);
+			} else {
+				col2Label.setBackground(SeaMark.ColMAP.get(dlg.panelMain.mark.getLightAtt(Att.ALT, 0)));
+			}
 		}
 	};
@@ -88,4 +97,10 @@
 				}
 			}
+			if (!str.contains("Al")) {
+				col2Label.setBackground(SeaMark.ColMAP.get(dlg.panelMain.mark.getLightAtt(Att.COL, 0)));
+				dlg.panelMain.mark.setLightAtt(Att.ALT, 0, Col.UNKNOWN);
+			} else {
+				col2Label.setBackground(SeaMark.ColMAP.get(dlg.panelMain.mark.getLightAtt(Att.ALT, 0)));
+			}
 		}
 	};
@@ -107,10 +122,15 @@
 		this.add(getChrButton(interruptedQuickButton, 44, 64, 44, 16, Messages.getString("IQChar"), Chr.IQUICK), null);
 		this.add(getChrButton(interruptedVeryQuickButton, 44, 80, 44, 16, Messages.getString("IVQChar"), Chr.IVQUICK),null);
-		this.add(getChrButton(interruptedUltraQuickButton, 44, 96, 44, 16, Messages.getString("IUQChar"), Chr.IUQUICK),
-				null);
+		this.add(getChrButton(interruptedUltraQuickButton, 44, 96, 44, 16, Messages.getString("IUQChar"), Chr.IUQUICK), null);
 		charLabel.setBounds(new Rectangle(0, 113, 88, 20));
 		charLabel.setHorizontalAlignment(SwingConstants.CENTER);
 		charLabel.setText(Messages.getString("Character"));
 		this.add(charLabel, null);
+		col1Label.setBounds(new Rectangle(10, 135, 10, 20));
+		col1Label.setOpaque(true);
+		this.add(col1Label, null);
+		col2Label.setBounds(new Rectangle(70, 135, 10, 20));
+		col2Label.setOpaque(true);
+		this.add(col2Label, null);
 		charBox.setBounds(new Rectangle(20, 135, 50, 20));
 		charBox.setHorizontalAlignment(SwingConstants.CENTER);
@@ -129,4 +149,10 @@
 			}
 		}
+		if (!str.contains("Al")) {
+			col2Label.setBackground(SeaMark.ColMAP.get(dlg.panelMain.mark.getLightAtt(Att.COL, 0)));
+		} else {
+			col2Label.setBackground(SeaMark.ColMAP.get(dlg.panelMain.mark.getLightAtt(Att.ALT, 0)));
+		}
+		col1Label.setBackground(SeaMark.ColMAP.get(dlg.panelMain.mark.getLightAtt(Att.COL, 0)));
 		for (Chr chr : buttons.keySet()) {
 			JToggleButton button = buttons.get(chr);
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 27213)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelCol.java	(revision 27214)
@@ -41,5 +41,18 @@
 				if (button.isSelected()) {
 						if (ent == Ent.LIGHT) {
-							dlg.panelMain.mark.setLightAtt(Att.COL, 0, col);
+							if (((String)dlg.panelMain.mark.getLightAtt(Att.CHR, 0)).contains("Al")) {
+								if (((button == delButton) && (dlg.panelMain.mark.getLightAtt(Att.ALT, 0) == Col.UNKNOWN))
+										|| (dlg.panelMain.mark.getLightAtt(Att.COL, 0) == Col.UNKNOWN)) {
+									dlg.panelMain.mark.setLightAtt(Att.COL, 0, col);
+									dlg.panelMain.panelLit.panelChr.col1Label.setBackground(SeaMark.ColMAP.get(col));
+								} else {
+									dlg.panelMain.mark.setLightAtt(Att.ALT, 0, col);
+									dlg.panelMain.panelLit.panelChr.col2Label.setBackground(SeaMark.ColMAP.get(col));
+								}
+							} else {
+								dlg.panelMain.mark.setLightAtt(Att.COL, 0, col);
+								dlg.panelMain.panelLit.panelChr.col1Label.setBackground(SeaMark.ColMAP.get(col));
+								dlg.panelMain.panelLit.panelChr.col2Label.setBackground(SeaMark.ColMAP.get(col));
+							}
 							button.setBorderPainted(true);
 						} else {
Index: /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelLit.java
===================================================================
--- /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelLit.java	(revision 27213)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelLit.java	(revision 27214)
@@ -322,4 +322,5 @@
 		panelCol.syncPanel();
 		panelChr.syncPanel();
+		panelSector.syncPanel();
 	}
 
Index: /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelSectors.java
===================================================================
--- /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelSectors.java	(revision 27213)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelSectors.java	(revision 27214)
@@ -10,4 +10,5 @@
 import oseam.Messages;
 import oseam.dialogs.OSeaMAction;
+import oseam.seamarks.SeaMark;
 import oseam.seamarks.SeaMark.*;
 
@@ -69,7 +70,4 @@
 
 		table.setSize(860, ((table.getRowCount() * 16) + 20));
-		if (table.getRowCount() > 3) {
-			this.setSize(900, ((table.getRowCount() * 16) + 42));
-		}
 		
 		table.setDefaultRenderer(String.class, new CentreRenderer());
@@ -179,5 +177,15 @@
 					ImageIcon img = colours.get(colour);
 					if (img == value)
-						dlg.panelMain.mark.setLightAtt(Att.COL, row, colour);
+//						dlg.panelMain.mark.setLightAtt(Att.COL, row, colour);
+						if (((String)dlg.panelMain.mark.getLightAtt(Att.CHR, row)).contains("Al")) {
+							if (((colour == Col.UNKNOWN) && (dlg.panelMain.mark.getLightAtt(Att.ALT, row) == Col.UNKNOWN))
+									|| (dlg.panelMain.mark.getLightAtt(Att.COL, row) == Col.UNKNOWN)) {
+								dlg.panelMain.mark.setLightAtt(Att.COL, row, colour);
+							} else {
+								dlg.panelMain.mark.setLightAtt(Att.ALT, row, colour);
+							}
+						} else {
+							dlg.panelMain.mark.setLightAtt(Att.COL, row, colour);
+						}
 				}
 				break;
@@ -233,12 +241,24 @@
 	}
 
-	public class ColourCellRenderer extends JLabel implements TableCellRenderer {
+	public class ColourCellRenderer extends JPanel implements TableCellRenderer {
+		private JLabel col1Label;
+		private JLabel col2Label;
 		public ColourCellRenderer() {
 			super();
-			setHorizontalAlignment(SwingConstants.CENTER);
-		}
-		public Component getTableCellRendererComponent(JTable table, Object value,
-				boolean isSelected, boolean hasFocus, int rowIndex, int vColIndex) {
-			setIcon(colours.get(value));
+			setLayout(new BorderLayout(0, 0));
+			col1Label = new JLabel("        ");
+			col1Label.setOpaque(true);
+			add(col1Label, BorderLayout.WEST);
+			col2Label = new JLabel("        ");
+			col2Label.setOpaque(true);
+			add(col2Label, BorderLayout.EAST);
+		}
+		public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int rowIndex, int vColIndex) {
+			if (!((String)dlg.panelMain.mark.getLightAtt(Att.CHR, rowIndex)).contains("Al")) {
+				col2Label.setBackground(SeaMark.ColMAP.get(dlg.panelMain.mark.getLightAtt(Att.COL, rowIndex)));
+			} else {
+				col2Label.setBackground(SeaMark.ColMAP.get(dlg.panelMain.mark.getLightAtt(Att.ALT, rowIndex)));
+			}
+			col1Label.setBackground(SeaMark.ColMAP.get(dlg.panelMain.mark.getLightAtt(Att.COL, rowIndex)));
 			return this;
 		}
@@ -252,4 +272,16 @@
 		dlg.panelMain.mark.addLight(idx);
 		table.setSize(860, ((table.getRowCount() * 16) + 18));
+		syncPanel();
+	}
+
+	public void deleteSector(int idx) {
+		if (idx > 0) {
+			dlg.panelMain.mark.delLight(idx);
+			table.setSize(860, ((table.getRowCount() * 16) + 20));
+			syncPanel();
+		}
+	}
+	
+	public void syncPanel() {
 		if (table.getRowCount() > 3) {
 			this.setSize(900, ((table.getRowCount() * 16) + 40));
@@ -259,14 +291,4 @@
 	}
 
-	public void deleteSector(int idx) {
-		dlg.panelMain.mark.delLight(idx);
-		table.setSize(860, ((table.getRowCount() * 16) + 20));
-		if (table.getRowCount() > 3) {
-			this.setSize(900, ((table.getRowCount() * 16) + 42));
-		} else {
-			this.setSize(900, 100);
-		}
-	}
-
 	private void addColItem(ImageIcon img, Col col) {
 		colours.put(col, img);
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 27213)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/SeaMark.java	(revision 27214)
@@ -57,4 +57,6 @@
 		repaint();
 	}
+	
+	private String longName = "";
 
 	public enum Obj {
@@ -569,9 +571,9 @@
 
 	public enum Att {
-		COL, CHR, GRP, SEQ, PER, LIT, BEG, END, RAD, HGT, RNG, VIS, EXH, ORT, MLT
+		COL, CHR, GRP, SEQ, PER, LIT, BEG, END, RAD, HGT, RNG, VIS, EXH, ORT, MLT, ALT
 	}
 
 	public Object[] sector = { Col.UNKNOWN, "", "", "", "", Lit.UNKNOWN, "", "",
-			"", "", "", Vis.UNKNOWN, Exh.UNKNOWN, "", "" };
+			"", "", "", Vis.UNKNOWN, Exh.UNKNOWN, "", "", Col.UNKNOWN };
 
 	private ArrayList<Object[]> sectors = new ArrayList<Object[]>();
@@ -1210,4 +1212,10 @@
 			}
 		}
+		
+		
+		if (keys.containsKey("seamark:longname"))
+			longName = keys.get("seamark:longname");
+		else
+			longName = "";
 
 		for (Obj obj : ObjSTR.keySet()) {
@@ -1460,4 +1468,11 @@
 			if (keys.containsKey("seamark:light" + secStr + ":colour")) {
 				str = keys.get("seamark:light" + secStr + ":colour");
+				if (str.contains(";")) {
+					String strs[] = str.split(";");
+					for (Col col : ColSTR.keySet())
+						if (ColSTR.get(col).equals(strs[1]))
+							setLightAtt(Att.ALT, i, col);
+					str = strs[0];
+				}
 				for (Col col : ColSTR.keySet())
 					if (ColSTR.get(col).equals(str))
@@ -1965,19 +1980,23 @@
 		}
     g2.setPaint(Color.BLACK);
-		if (getLightAtt(Att.COL, 0) != Col.UNKNOWN) {
+		if ((getLightAtt(Att.COL, 0) != Col.UNKNOWN) || !(((String)getLightAtt(Att.CHR, 0)).isEmpty())) {
 			if (sectors.size() == 1) {
-				switch ((Col) getLightAtt(Att.COL, 0)) {
-				case RED:
-					g2.drawImage(new ImageIcon(getClass().getResource("/images/Light_Red_120.png")).getImage(), 7, -15, null);
-					break;
-				case GREEN:
-					g2.drawImage(new ImageIcon(getClass().getResource("/images/Light_Green_120.png")).getImage(), 7, -15, null);
-					break;
-				case WHITE:
-				case YELLOW:
-					g2.drawImage(new ImageIcon(getClass().getResource("/images/Light_White_120.png")).getImage(), 7, -15, null);
-					break;
-				default:
+				if (((String) getLightAtt(Att.CHR, 0)).contains("Al")) {
 					g2.drawImage(new ImageIcon(getClass().getResource("/images/Light_Magenta_120.png")).getImage(), 7, -15, null);
+				} else {
+					switch ((Col) getLightAtt(Att.COL, 0)) {
+					case RED:
+						g2.drawImage(new ImageIcon(getClass().getResource("/images/Light_Red_120.png")).getImage(), 7, -15, null);
+						break;
+					case GREEN:
+						g2.drawImage(new ImageIcon(getClass().getResource("/images/Light_Green_120.png")).getImage(), 7, -15, null);
+						break;
+					case WHITE:
+					case YELLOW:
+						g2.drawImage(new ImageIcon(getClass().getResource("/images/Light_White_120.png")).getImage(), 7, -15, null);
+						break;
+					default:
+						g2.drawImage(new ImageIcon(getClass().getResource("/images/Light_Magenta_120.png")).getImage(), 7, -15, null);
+					}
 				}
 			}
@@ -1996,4 +2015,10 @@
 				c += "(" + (String) getLightAtt(Att.GRP, 0) + ")";
 			switch ((Col) getLightAtt(Att.COL, 0)) {
+			case WHITE:
+				c += ".W";
+				break;
+			case YELLOW:
+				c += ".Y";
+				break;
 			case RED:
 				c += ".R";
@@ -2013,4 +2038,30 @@
 			case VIOLET:
 				c += ".Vi";
+				break;
+			}
+			switch ((Col) getLightAtt(Att.ALT, 0)) {
+			case WHITE:
+				c += "W";
+				break;
+			case YELLOW:
+				c += "Y";
+				break;
+			case RED:
+				c += "R";
+				break;
+			case GREEN:
+				c += "G";
+				break;
+			case AMBER:
+				c += "Am";
+				break;
+			case ORANGE:
+				c += "Or";
+				break;
+			case BLUE:
+				c += "Bu";
+				break;
+			case VIOLET:
+				c += "Vi";
 				break;
 			}
@@ -2105,4 +2156,7 @@
 				Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:name", getName()));
 
+			if (!longName.isEmpty())
+				Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:longname", longName));
+
 			String objStr = ObjSTR.get(object);
 			if (objStr != null) {
@@ -2166,5 +2220,9 @@
 				String secStr = (i == 0) ? "" : (":" + Integer.toString(i));
 				if (sectors.get(i)[0] != Col.UNKNOWN)
-					Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":colour", ColSTR.get(sectors.get(i)[0])));
+					if ((sectors.get(i)[15] != Col.UNKNOWN) && ((String)sectors.get(i)[1]).contains("Al"))
+						Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":colour", (ColSTR.get(sectors.get(i)[0]))
+								+ ";" + ColSTR.get(sectors.get(i)[15])));
+					else
+						Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":colour", ColSTR.get(sectors.get(i)[0])));
 				if (!((String) sectors.get(i)[1]).isEmpty())
 					Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:light" + secStr + ":character", (String) sectors.get(i)[1]));
