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 27022)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelChan.java	(revision 27023)
@@ -66,6 +66,6 @@
 				if (SeaMark.GrpMAP.get(dlg.mark.getObject()) == Grp.SAW) {
 					dlg.mark.setTopmark(Top.SPHERE);
-					dlg.mark.setPattern(Ent.TOPMARK, Pat.NONE);
-					dlg.mark.setColour(Ent.TOPMARK, Col.RED);
+					dlg.mark.setTopPattern(Pat.NONE);
+					dlg.mark.setTopColour(Col.RED);
 				} else {
 					switch (dlg.mark.getCategory()) {
@@ -75,15 +75,15 @@
 						switch (dlg.mark.getRegion()) {
 						case A:
-							dlg.mark.setPattern(Ent.TOPMARK, Pat.NONE);
-							dlg.mark.setColour(Ent.TOPMARK, Col.RED);
+							dlg.mark.setTopPattern(Pat.NONE);
+							dlg.mark.setTopColour(Col.RED);
 							break;
 						case B:
-							dlg.mark.setPattern(Ent.TOPMARK, Pat.NONE);
-							dlg.mark.setColour(Ent.TOPMARK, Col.GREEN);
+							dlg.mark.setTopPattern(Pat.NONE);
+							dlg.mark.setTopColour(Col.GREEN);
 							break;
 						case C:
-							dlg.mark.setPattern(Ent.TOPMARK, Pat.HORIZ);
-							dlg.mark.setColour(Ent.TOPMARK, Col.RED);
-							dlg.mark.addColour(Ent.TOPMARK, Col.WHITE);
+							dlg.mark.setTopPattern(Pat.HORIZ);
+							dlg.mark.setTopColour(Col.RED);
+							dlg.mark.addTopColour(Col.WHITE);
 							break;
 						}
@@ -94,15 +94,15 @@
 						switch (dlg.mark.getRegion()) {
 						case A:
-							dlg.mark.setPattern(Ent.TOPMARK, Pat.NONE);
-							dlg.mark.setColour(Ent.TOPMARK, Col.GREEN);
+							dlg.mark.setTopPattern(Pat.NONE);
+							dlg.mark.setTopColour(Col.GREEN);
 							break;
 						case B:
-							dlg.mark.setPattern(Ent.TOPMARK, Pat.NONE);
-							dlg.mark.setColour(Ent.TOPMARK, Col.RED);
+							dlg.mark.setTopPattern(Pat.NONE);
+							dlg.mark.setTopColour(Col.RED);
 							break;
 						case C:
-							dlg.mark.setPattern(Ent.TOPMARK, Pat.HORIZ);
-							dlg.mark.setColour(Ent.TOPMARK, Col.GREEN);
-							dlg.mark.addColour(Ent.TOPMARK, Col.WHITE);
+							dlg.mark.setTopPattern(Pat.HORIZ);
+							dlg.mark.setTopColour(Col.GREEN);
+							dlg.mark.addTopColour(Col.WHITE);
 							break;
 						}
@@ -113,6 +113,6 @@
 			} else {
 				dlg.mark.setTopmark(Top.NONE);
-				dlg.mark.setPattern(Ent.TOPMARK, Pat.NONE);
-				dlg.mark.setColour(Ent.TOPMARK, Col.UNKNOWN);
+				dlg.mark.setTopPattern(Pat.NONE);
+				dlg.mark.setTopColour(Col.UNKNOWN);
 				topmarkButton.setBorderPainted(false);
 			}
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 27022)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelCol.java	(revision 27023)
@@ -42,5 +42,5 @@
 					if (dlg.mark != null) {
 						if (ent == Ent.LIGHT) {
-							dlg.mark.setColour(ent, col);
+							dlg.mark.setLightAtt(Att.COL, col);
 							button.setBorderPainted(true);
 						} else {
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 27022)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelHaz.java	(revision 27023)
@@ -23,9 +23,9 @@
 	private ActionListener alCat = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
-			dlg.mark.setPattern(Ent.BODY, Pat.HORIZ);
+			dlg.mark.setObjPattern(Pat.HORIZ);
 			if (northButton.isSelected()) {
 				dlg.mark.setCategory(Cat.CAM_NORTH);
-				dlg.mark.setColour(Ent.BODY, Col.BLACK);
-				dlg.mark.addColour(Ent.BODY, Col.YELLOW);
+				dlg.mark.setObjColour(Col.BLACK);
+				dlg.mark.addObjColour(Col.YELLOW);
 				northButton.setBorderPainted(true);
 			} else {
@@ -34,6 +34,6 @@
 			if (southButton.isSelected()) {
 				dlg.mark.setCategory(Cat.CAM_SOUTH);
-				dlg.mark.setColour(Ent.BODY, Col.YELLOW);
-				dlg.mark.addColour(Ent.BODY, Col.BLACK);
+				dlg.mark.setObjColour(Col.YELLOW);
+				dlg.mark.addObjColour(Col.BLACK);
 				southButton.setBorderPainted(true);
 			} else {
@@ -42,7 +42,7 @@
 			if (eastButton.isSelected()) {
 				dlg.mark.setCategory(Cat.CAM_EAST);
-				dlg.mark.setColour(Ent.BODY, Col.BLACK);
-				dlg.mark.addColour(Ent.BODY, Col.YELLOW);
-				dlg.mark.addColour(Ent.BODY, Col.BLACK);
+				dlg.mark.setObjColour(Col.BLACK);
+				dlg.mark.addObjColour(Col.YELLOW);
+				dlg.mark.addObjColour(Col.BLACK);
 				eastButton.setBorderPainted(true);
 			} else {
@@ -51,7 +51,7 @@
 			if (westButton.isSelected()) {
 				dlg.mark.setCategory(Cat.CAM_WEST);
-				dlg.mark.setColour(Ent.BODY, Col.YELLOW);
-				dlg.mark.addColour(Ent.BODY, Col.BLACK);
-				dlg.mark.addColour(Ent.BODY, Col.YELLOW);
+				dlg.mark.setObjColour(Col.YELLOW);
+				dlg.mark.addObjColour(Col.BLACK);
+				dlg.mark.addObjColour(Col.YELLOW);
 				westButton.setBorderPainted(true);
 			} else {
@@ -60,7 +60,7 @@
 			if (isolButton.isSelected()) {
 				dlg.mark.setCategory(Cat.NONE);
-				dlg.mark.setColour(Ent.BODY, Col.BLACK);
-				dlg.mark.addColour(Ent.BODY, Col.RED);
-				dlg.mark.addColour(Ent.BODY, Col.BLACK);
+				dlg.mark.setObjColour(Col.BLACK);
+				dlg.mark.addObjColour(Col.RED);
+				dlg.mark.addObjColour(Col.BLACK);
 				isolButton.setBorderPainted(true);
 			} else {
@@ -124,6 +124,6 @@
 			if (dlg.mark != null) {
 				if (topmarkButton.isSelected()) {
-					dlg.mark.setPattern(Ent.TOPMARK, Pat.NONE);
-					dlg.mark.setColour(Ent.TOPMARK, Col.BLACK);
+					dlg.mark.setTopPattern(Pat.NONE);
+					dlg.mark.setTopColour(Col.BLACK);
 					switch (dlg.mark.getCategory()) {
 					case CAM_NORTH:
@@ -146,6 +146,6 @@
 				} else {
 					dlg.mark.setTopmark(Top.NONE);
-					dlg.mark.setPattern(Ent.TOPMARK, Pat.NONE);
-					dlg.mark.setColour(Ent.TOPMARK, Col.UNKNOWN);
+					dlg.mark.setTopPattern(Pat.NONE);
+					dlg.mark.setTopColour(Col.UNKNOWN);
 					topmarkButton.setBorderPainted(false);
 				}
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 27022)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelLit.java	(revision 27023)
@@ -21,5 +21,5 @@
 	private ActionListener alGroup = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
-			dlg.mark.setLightGroup(groupBox.getText());
+			dlg.mark.setLightAtt(Att.GRP, groupBox.getText());
 		}
 	};
@@ -28,5 +28,5 @@
 	private ActionListener alPeriod = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
-			dlg.mark.setLightPeriod(periodBox.getText());
+			dlg.mark.setLightAtt(Att.PER, periodBox.getText());
 		}
 	};
@@ -35,5 +35,5 @@
 	private ActionListener alSequence = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
-			dlg.mark.setLightSeq(sequenceBox.getText());
+			dlg.mark.setLightAtt(Att.SEQ, sequenceBox.getText());
 		}
 	};
@@ -46,5 +46,5 @@
 				int idx = visibilities.get(vis);
 				if (idx == visibilityBox.getSelectedIndex())
-					dlg.mark.setVisibility(vis);
+					dlg.mark.setLightAtt(Att.VIS, vis);
 			}
 		}
@@ -54,5 +54,5 @@
 	private ActionListener alHeight = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
-			dlg.mark.setLightHeight(heightBox.getText());
+			dlg.mark.setLightAtt(Att.HGT, heightBox.getText());
 		}
 	};
@@ -61,5 +61,5 @@
 	private ActionListener alRange = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
-			dlg.mark.setLightRange(rangeBox.getText());
+			dlg.mark.setLightAtt(Att.RNG, rangeBox.getText());
 		}
 	};
@@ -68,5 +68,5 @@
 	private ActionListener alOrientation = new ActionListener() {
 		public void actionPerformed(java.awt.event.ActionEvent e) {
-			dlg.mark.setLightOrientation(orientationBox.getText());
+			dlg.mark.setLightAtt(Att.ORT, orientationBox.getText());
 		}
 	};
@@ -79,5 +79,5 @@
 				int idx = categories.get(lit);
 				if (idx == categoryBox.getSelectedIndex())
-					dlg.mark.setLightCategory(lit);
+					dlg.mark.setLightAtt(Att.LIT, lit);
 			}
 		}
@@ -91,5 +91,5 @@
 				int idx = exhibitions.get(exh);
 				if (idx == exhibitionBox.getSelectedIndex())
-					dlg.mark.setLightExhibition(exh);
+					dlg.mark.setLightAtt(Att.EXH, exh);
 			}
 		}
@@ -105,11 +105,9 @@
 				if (panelSector == null) {
 					panelSector = new PanelSectors(dlg);
-					panelSector.setAlwaysOnTop(true);
-					panelSector.setLocation(450, 0);
 				}
-				if (panelSector.getSectorCount() == 0) {
-					panelSector.addSector(1);
-					dlg.mark.setSectored(true);
-				}
+//				if (panelSector.getSectorCount() == 0) {
+//					panelSector.addSector(1);
+//					dlg.mark.setSectored(true);
+//				}
 				panelSector.setVisible(true);
 			} else {
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 27022)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelMain.java	(revision 27023)
@@ -313,4 +313,11 @@
 			panelSpec.setVisible(false);
 			panelLights.setVisible(false);
+			if (dlg.mark.isValid()) {
+				moreButton.setEnabled(true);
+				topButton.setEnabled(true);
+				fogButton.setEnabled(true);
+				radButton.setEnabled(true);
+				litButton.setEnabled(true);
+			}
 			switch (SeaMark.GrpMAP.get(dlg.mark.getObject())) {
 			case LAT:
@@ -334,4 +341,5 @@
 			case SIS:
 				lightsButton.setBorderPainted(true);
+				topButton.setEnabled(false);
 				panelLights.setVisible(true);
 				panelLights.syncPanel();
Index: applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelMore.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelMore.java	(revision 27022)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelMore.java	(revision 27023)
@@ -102,22 +102,22 @@
 				switch (dlg.mark.getCategory()) {
 				case LAM_PORT:
-					dlg.mark.setColour(Ent.BODY, Col.RED);
-					dlg.mark.setPattern(Ent.BODY, Pat.NONE);
+					dlg.mark.setObjColour(Col.RED);
+					dlg.mark.setObjPattern(Pat.NONE);
 					break;
 				case LAM_PPORT:
-					dlg.mark.setColour(Ent.BODY, Col.RED);
-					dlg.mark.addColour(Ent.BODY, Col.GREEN);
-					dlg.mark.addColour(Ent.BODY, Col.RED);
-					dlg.mark.setPattern(Ent.BODY, Pat.HORIZ);
+					dlg.mark.setObjColour(Col.RED);
+					dlg.mark.addObjColour(Col.GREEN);
+					dlg.mark.addObjColour(Col.RED);
+					dlg.mark.setObjPattern(Pat.HORIZ);
 					break;
 				case LAM_STBD:
-					dlg.mark.setColour(Ent.BODY, Col.GREEN);
-					dlg.mark.setPattern(Ent.BODY, Pat.NONE);
+					dlg.mark.setObjColour(Col.GREEN);
+					dlg.mark.setObjPattern(Pat.NONE);
 					break;
 				case LAM_PSTBD:
-					dlg.mark.setColour(Ent.BODY, Col.GREEN);
-					dlg.mark.addColour(Ent.BODY, Col.RED);
-					dlg.mark.addColour(Ent.BODY, Col.GREEN);
-					dlg.mark.setPattern(Ent.BODY, Pat.HORIZ);
+					dlg.mark.setObjColour(Col.GREEN);
+					dlg.mark.addObjColour(Col.RED);
+					dlg.mark.addObjColour(Col.GREEN);
+					dlg.mark.setObjPattern(Pat.HORIZ);
 					break;
 				}
@@ -130,22 +130,22 @@
 				switch (dlg.mark.getCategory()) {
 				case LAM_PORT:
-					dlg.mark.setColour(Ent.BODY, Col.GREEN);
-					dlg.mark.setPattern(Ent.BODY, Pat.NONE);
+					dlg.mark.setObjColour(Col.GREEN);
+					dlg.mark.setObjPattern(Pat.NONE);
 					break;
 				case LAM_PPORT:
-					dlg.mark.setColour(Ent.BODY, Col.GREEN);
-					dlg.mark.addColour(Ent.BODY, Col.RED);
-					dlg.mark.addColour(Ent.BODY, Col.GREEN);
-					dlg.mark.setPattern(Ent.BODY, Pat.HORIZ);
+					dlg.mark.setObjColour(Col.GREEN);
+					dlg.mark.addObjColour(Col.RED);
+					dlg.mark.addObjColour(Col.GREEN);
+					dlg.mark.setObjPattern(Pat.HORIZ);
 					break;
 				case LAM_STBD:
-					dlg.mark.setColour(Ent.BODY, Col.RED);
-					dlg.mark.setPattern(Ent.BODY, Pat.NONE);
+					dlg.mark.setObjColour(Col.RED);
+					dlg.mark.setObjPattern(Pat.NONE);
 					break;
 				case LAM_PSTBD:
-					dlg.mark.setColour(Ent.BODY, Col.RED);
-					dlg.mark.addColour(Ent.BODY, Col.GREEN);
-					dlg.mark.addColour(Ent.BODY, Col.RED);
-					dlg.mark.setPattern(Ent.BODY, Pat.HORIZ);
+					dlg.mark.setObjColour(Col.RED);
+					dlg.mark.addObjColour(Col.GREEN);
+					dlg.mark.addObjColour(Col.RED);
+					dlg.mark.setObjPattern(Pat.HORIZ);
 					break;
 				}
@@ -156,24 +156,24 @@
 			if (regionCButton.isSelected()) {
 				dlg.mark.setRegion(Reg.C);
-				dlg.mark.setPattern(Ent.BODY, Pat.HORIZ);
+				dlg.mark.setObjPattern(Pat.HORIZ);
 				switch (dlg.mark.getCategory()) {
 				case LAM_PORT:
-					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);
+					dlg.mark.setObjColour(Col.RED);
+					dlg.mark.addObjColour(Col.WHITE);
+					dlg.mark.addObjColour(Col.RED);
+					dlg.mark.addObjColour(Col.WHITE);
 					break;
 				case LAM_PPORT:
 				case LAM_PSTBD:
-					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);
+					dlg.mark.setObjColour(Col.RED);
+					dlg.mark.addObjColour(Col.GREEN);
+					dlg.mark.addObjColour(Col.RED);
+					dlg.mark.addObjColour(Col.GREEN);
 					break;
 				case LAM_STBD:
-					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);
+					dlg.mark.setObjColour(Col.GREEN);
+					dlg.mark.addObjColour(Col.WHITE);
+					dlg.mark.addObjColour(Col.GREEN);
+					dlg.mark.addObjColour(Col.WHITE);
 					break;
 				}
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 27022)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelPort.java	(revision 27023)
@@ -49,37 +49,37 @@
 					switch (dlg.mark.getRegion()) {
 					case A:
-						dlg.mark.setPattern(Ent.BODY, Pat.NONE);
-						dlg.mark.setColour(Ent.BODY, Col.RED);
+						dlg.mark.setObjPattern(Pat.NONE);
+						dlg.mark.setObjColour(Col.RED);
 						break;
 					case B:
-						dlg.mark.setPattern(Ent.BODY, Pat.NONE);
-						dlg.mark.setColour(Ent.BODY, Col.GREEN);
+						dlg.mark.setObjPattern(Pat.NONE);
+						dlg.mark.setObjColour(Col.GREEN);
 						break;
 					case C:
-						dlg.mark.setPattern(Ent.BODY, Pat.HORIZ);
-						dlg.mark.setColour(Ent.BODY, Col.RED);
-						dlg.mark.addColour(Ent.BODY, Col.WHITE);
-						dlg.mark.addColour(Ent.BODY, Col.RED);
-						dlg.mark.addColour(Ent.BODY, Col.WHITE);
+						dlg.mark.setObjPattern(Pat.HORIZ);
+						dlg.mark.setObjColour(Col.RED);
+						dlg.mark.addObjColour(Col.WHITE);
+						dlg.mark.addObjColour(Col.RED);
+						dlg.mark.addObjColour(Col.WHITE);
 						break;
 					}
 				} else {
-					dlg.mark.setPattern(Ent.BODY, Pat.HORIZ);
+					dlg.mark.setObjPattern(Pat.HORIZ);
 					switch (dlg.mark.getRegion()) {
 					case A:
-						dlg.mark.setColour(Ent.BODY, Col.RED);
-						dlg.mark.addColour(Ent.BODY, Col.GREEN);
-						dlg.mark.addColour(Ent.BODY, Col.RED);
+						dlg.mark.setObjColour(Col.RED);
+						dlg.mark.addObjColour(Col.GREEN);
+						dlg.mark.addObjColour(Col.RED);
 						break;
 					case B:
-						dlg.mark.setColour(Ent.BODY, Col.GREEN);
-						dlg.mark.addColour(Ent.BODY, Col.RED);
-						dlg.mark.addColour(Ent.BODY, Col.GREEN);
+						dlg.mark.setObjColour(Col.GREEN);
+						dlg.mark.addObjColour(Col.RED);
+						dlg.mark.addObjColour(Col.GREEN);
 						break;
 					case C:
-						dlg.mark.setColour(Ent.BODY, Col.RED);
-						dlg.mark.addColour(Ent.BODY, Col.GREEN);
-						dlg.mark.addColour(Ent.BODY, Col.RED);
-						dlg.mark.addColour(Ent.BODY, Col.GREEN);
+						dlg.mark.setObjColour(Col.RED);
+						dlg.mark.addObjColour(Col.GREEN);
+						dlg.mark.addObjColour(Col.RED);
+						dlg.mark.addObjColour(Col.GREEN);
 						break;
 					}
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 27022)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelSaw.java	(revision 27023)
@@ -41,7 +41,7 @@
 					dlg.panelMain.radButton.setEnabled(true);
 					dlg.panelMain.litButton.setEnabled(true);
-					dlg.mark.setPattern(Ent.BODY, Pat.VERT);
-					dlg.mark.setColour(Ent.BODY, Col.RED);
-					dlg.mark.addColour(Ent.BODY, Col.WHITE);
+					dlg.mark.setObjPattern(Pat.VERT);
+					dlg.mark.setObjColour(Col.RED);
+					dlg.mark.addObjColour(Col.WHITE);
 				} else {
 					dlg.panelMain.moreButton.setVisible(false);
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 27022)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelSectors.java	(revision 27023)
@@ -9,142 +9,119 @@
 import oseam.dialogs.OSeaMAction;
 import oseam.seamarks.*;
+import oseam.seamarks.SeaMark.Att;
 import oseam.seamarks.SeaMark.*;
 
-public class PanelSectors extends JPanel {
+public class PanelSectors extends JFrame {
 
 	private OSeaMAction dlg;
+	private JPanel panel;
 	private TableModel model;
 	private JTable table;
-	private JFrame frame;
 
-	// public JPanel panel;
-	// public JButton minusButton;
-	// public JButton plusButton;
-	// private JScrollPane tablePane;
-	// private ActionListener alMinusButton;
-	// private ActionListener alPlusButton;
+	public JButton minusButton;
+	private ActionListener alMinusButton = new ActionListener() {
+		public void actionPerformed(java.awt.event.ActionEvent e) {
+			deleteSector(0);
+		}
+	};
+	public JButton plusButton;
+	private ActionListener alPlusButton = new ActionListener() {
+		public void actionPerformed(java.awt.event.ActionEvent e) {
+			addSector(0);
+		}
+	};
 
 	public PanelSectors(OSeaMAction dia) {
+		super("Sector Table");
 		dlg = dia;
+		this.setSize(700, 100);
+		this.setVisible(true);
+		this.setAlwaysOnTop(true);
+		this.setLocation(450, 0);
+		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+		this.setLayout(null);
+		minusButton = new JButton(new ImageIcon(getClass().getResource("/images/MinusButton.png")));
+		minusButton.setBounds(0, 0, 32, 34);
+		minusButton.addActionListener(alMinusButton);
+		this.add(minusButton);
+		plusButton = new JButton(new ImageIcon(getClass().getResource("/images/PlusButton.png")));
+		plusButton.setBounds(0, 34, 32, 34);
+		plusButton.addActionListener(alPlusButton);
+		this.add(plusButton);
+		panel = new JPanel(new BorderLayout());
+		panel.setBounds(40, 0, 660, 512);
 		model = new SectorTable();
 		table = new JTable(model);
-		table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
-		frame = new JFrame("Sector Table");
-		frame.getContentPane().add(new JScrollPane(table));
-		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+		table.setBounds(0, 0, 660, 34);
+		panel.add(new JScrollPane(table));
+		this.getContentPane().add(panel);
 	}
 
 	private class SectorTable extends AbstractTableModel {
 
-		private String[] headings = { "Sector", "Colour", "Character", "Group", "Period", "Height", "Range", "Visibility", "Start", "End" };
-		
+		private String[] headings = { "Sector", "Colour", "Character", "Group", "Sequence", "Period", "Height", "Range", "Visibility", "Start", "End", "Radius" };
+
 		public SectorTable() {
-	}
+		}
 
-	public String getColumnName(int col) {
-		return headings[col];
-	}
+		public String getColumnName(int col) {
+			return headings[col];
+		}
 
-	public int getColumnCount() {
-		return headings.length;
-	}
+		public int getColumnCount() {
+			return headings.length;
+		}
 
-	public int getRowCount() {
-		return dlg.mark.getSectorCount() - 1;
-	}
+		public int getRowCount() {
+			return dlg.mark.getSectorCount();
+		}
 
-	public boolean isCellEditable(int row, int col) {
-		return (col > 0);
-	}
+		public boolean isCellEditable(int row, int col) {
+			return (col > 0);
+		}
 
-	public Class getColumnClass(int col) {
-		switch (col) {
-		case 1:
-			return Col.class;
-		case 7:
-			return Vis.class;
-		default:
-			return String.class;
+		public Class getColumnClass(int col) {
+			switch (col) {
+			case 1:
+				return Col.class;
+			case 7:
+				return Vis.class;
+			default:
+				return String.class;
+			}
 		}
-	}
-	
-	public Object getValueAt(int row, int col) {
-		switch (col) {
-		case 1:
-			return (dlg.mark.getColour(Ent.LIGHT, row));
-		case 2:
-			return (dlg.mark.getLightChar(row));
-		case 3:
-			return (dlg.mark.getLightGroup(row));
-		case 4:
-			return (dlg.mark.getLightPeriod(row));
-		case 5:
-			return (dlg.mark.getLightHeight(row));
-		case 6:
-			return (dlg.mark.getLightRange(row));
-		case 7:
-			return (dlg.mark.getVisibility(row));
-		case 8:
-			return (dlg.mark.getLightSector1(row));
-		case 9:
-			return (dlg.mark.getLightSector2(row));
-		default:
-			return null;
+
+		public Object getValueAt(int row, int col) {
+			return dlg.mark.getLightAtt(col, row);
+		}
+
+		public void setValueAt(Object value, int row, int col) {
+			dlg.mark.setLightAtt(col, row, value);
 		}
 	}
 
-	public void setValueAt(Object value, int row, int col) {
-		switch (col) {
-		case 1:
-			dlg.mark.setColour(Ent.LIGHT, row, (SeaMark.Col)value);
-		case 2:
-			dlg.mark.setLightChar(row, (SeaMark.Chr)value);
-		case 7:
-			dlg.mark.setVisibility(row, (SeaMark.Vis)value);
-		default:
-			dlg.mark.setLightSector2(row, (String)value);
+	public int getSectorCount() {
+		return model.getRowCount();
+	}
+
+	public void addSector(int idx) {
+		dlg.mark.addLightAtt(Att.COL, Col.UNKNOWN);
+		table.setSize(660, ((table.getRowCount() * 16) + 18));
+		if (table.getRowCount() > 3) {
+			this.setSize(700, ((table.getRowCount() * 16) + 40));
+		} else {
+			this.setSize(700, 100);
 		}
 	}
+
+	public void deleteSector(int idx) {
+		dlg.mark.subLightAtt(Att.COL, 0);
+		table.setSize(660, ((table.getRowCount() * 16) + 18));
+		if (table.getRowCount() > 3) {
+			this.setSize(700, ((table.getRowCount() * 16) + 40));
+		} else {
+			this.setSize(700, 100);
+		}
+	}
+
 }
-	/*
-	 * panel = new JPanel();
-	 * this.setSize(700, 100);
-	 * panel.setBounds(0, 0, 700, 512);
-	 * this.getContentPane().add(panel);
-	 * table = new JTable();
-	 * tablePane = new JScrollPane(table);
-	 * tablePane.setBounds(40, 0, 660, 34);
-	 * panel.setLayout(null);
-	 * panel.add(tablePane);
-	 * 
-	 * alMinusButton = new ActionListener() {
-	 *  public void actionPerformed(java.awt.event.ActionEvent e) { deleteSector(2); } };
-	 * minusButton = new JButton(new
-	 * ImageIcon(getClass().getResource("/images/MinusButton.png")));
-	 * minusButton.setBounds(0, 0, 32, 34);
-	 * minusButton.addActionListener(alMinusButton); panel.add(minusButton);
-	 * 
-	 * alPlusButton = new ActionListener() { public void
-	 * actionPerformed(java.awt.event.ActionEvent e) { addSector(2); } };
-	 * plusButton = new JButton(new
-	 * ImageIcon(getClass().getResource("/images/PlusButton.png")));
-	 * plusButton.setBounds(0, 34, 32, 34);
-	 * plusButton.addActionListener(alPlusButton); panel.add(plusButton); }
-	 * 
-	 * public int getSectorCount() { return getRowCount(); }
-	 * 
-	 * public void addSector(int idx) { lights.add(idx, new Object[]{null, null,
-	 * null, null, null, null, null, null, null, null, null, null});
-	 * tablePane.setSize(660, ((getRowCount() * 16) + 18)); if (getRowCount() > 3)
-	 * { this.setSize(700, ((getRowCount() * 16) + 40)); } else {
-	 * this.setSize(700, 100); } // light.fireTableRowsInserted(idx, idx); }
-	 * 
-	 * public void deleteSector(int idx) { lights.remove(idx);
-	 * tablePane.setSize(660, ((getRowCount() * 16) + 18)); if (getRowCount() > 3)
-	 * { this.setSize(700, ((getRowCount() * 16) + 40)); } else {
-	 * this.setSize(700, 100); } // light.fireTableRowsDeleted(idx, idx); }
-	 * 
-	 * private ArrayList<Object[]> lights;
-	 * 
-	 */
-}
Index: applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelSpec.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelSpec.java	(revision 27022)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelSpec.java	(revision 27023)
@@ -51,10 +51,10 @@
 					dlg.mark.setObject(objects.get(shp));
 					if (button == cairnButton) {
-						dlg.mark.setPattern(Ent.BODY, Pat.NONE);
-						dlg.mark.setColour(Ent.BODY, Col.UNKNOWN);
+						dlg.mark.setObjPattern(Pat.NONE);
+						dlg.mark.setObjColour(Col.UNKNOWN);
 					}
-					if (dlg.mark.getColour(Ent.BODY, 0) == Col.UNKNOWN) {
-						dlg.mark.setPattern(Ent.BODY, Pat.NONE);
-						dlg.mark.setColour(Ent.BODY, Col.YELLOW);
+					if (dlg.mark.getObjColour(0) == Col.UNKNOWN) {
+						dlg.mark.setObjPattern(Pat.NONE);
+						dlg.mark.setObjColour(Col.YELLOW);
 					}
 					button.setBorderPainted(true);
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 27022)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelStbd.java	(revision 27023)
@@ -49,37 +49,37 @@
 					switch (dlg.mark.getRegion()) {
 					case A:
-						dlg.mark.setPattern(Ent.BODY, Pat.NONE);
-						dlg.mark.setColour(Ent.BODY, Col.GREEN);
+						dlg.mark.setObjPattern(Pat.NONE);
+						dlg.mark.setObjColour(Col.GREEN);
 						break;
 					case B:
-						dlg.mark.setPattern(Ent.BODY, Pat.NONE);
-						dlg.mark.setColour(Ent.BODY, Col.RED);
+						dlg.mark.setObjPattern(Pat.NONE);
+						dlg.mark.setObjColour(Col.RED);
 						break;
 					case C:
-						dlg.mark.setPattern(Ent.BODY, Pat.HORIZ);
-						dlg.mark.setColour(Ent.BODY, Col.GREEN);
-						dlg.mark.addColour(Ent.BODY, Col.WHITE);
-						dlg.mark.addColour(Ent.BODY, Col.GREEN);
-						dlg.mark.addColour(Ent.BODY, Col.WHITE);
+						dlg.mark.setObjPattern(Pat.HORIZ);
+						dlg.mark.setObjColour(Col.GREEN);
+						dlg.mark.addObjColour(Col.WHITE);
+						dlg.mark.addObjColour(Col.GREEN);
+						dlg.mark.addObjColour(Col.WHITE);
 						break;
 					}
 				} else {
-					dlg.mark.setPattern(Ent.BODY, Pat.HORIZ);
+					dlg.mark.setObjPattern(Pat.HORIZ);
 					switch (dlg.mark.getRegion()) {
 					case A:
-						dlg.mark.setColour(Ent.BODY, Col.GREEN);
-						dlg.mark.addColour(Ent.BODY, Col.RED);
-						dlg.mark.addColour(Ent.BODY, Col.GREEN);
+						dlg.mark.setObjColour(Col.GREEN);
+						dlg.mark.addObjColour(Col.RED);
+						dlg.mark.addObjColour(Col.GREEN);
 						break;
 					case B:
-						dlg.mark.setColour(Ent.BODY, Col.RED);
-						dlg.mark.addColour(Ent.BODY, Col.GREEN);
-						dlg.mark.addColour(Ent.BODY, Col.RED);
+						dlg.mark.setObjColour(Col.RED);
+						dlg.mark.addObjColour(Col.GREEN);
+						dlg.mark.addObjColour(Col.RED);
 						break;
 					case C:
-						dlg.mark.setColour(Ent.BODY, Col.RED);
-						dlg.mark.addColour(Ent.BODY, Col.GREEN);
-						dlg.mark.addColour(Ent.BODY, Col.RED);
-						dlg.mark.addColour(Ent.BODY, Col.GREEN);
+						dlg.mark.setObjColour(Col.RED);
+						dlg.mark.addObjColour(Col.GREEN);
+						dlg.mark.addObjColour(Col.RED);
+						dlg.mark.addObjColour(Col.GREEN);
 						break;
 					}
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 27022)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/SeaMark.java	(revision 27023)
@@ -323,150 +323,105 @@
 	}
 
+	public Col getColour(Ent ent, int idx) {
+		if (ent == Ent.BODY)
+			return getObjColour(idx);
+		else
+			return getTopColour(idx);
+	}
+	
+	public void setColour(Ent ent, Col col) {
+		if (ent == Ent.BODY)
+			setObjColour(col);
+		else
+			setTopColour(col);
+	}
+	
+	public void setColour(Ent ent, int idx, Col col) {
+		if (ent == Ent.BODY)
+			setObjColour(idx, col);
+		else
+			setTopColour(idx, col);
+	}
+	
+	public void addColour(Ent ent, int idx, Col col) {
+		if (ent == Ent.BODY)
+			addObjColour(idx, col);
+		else
+			addTopColour(idx, col);
+	}
+	
+	public void subColour(Ent ent, int idx) {
+		if (ent == Ent.BODY)
+			subObjColour(idx);
+		else
+			subTopColour(idx);
+	}
+	
 	private ArrayList<Col> bodyColour = new ArrayList<Col>();
-	private ArrayList<Col> topColour = new ArrayList<Col>();
-	private ArrayList<Col> lightColour = new ArrayList<Col>();
 	
-	public int getSectorCount() {
-		return lightColour.size();
-	}
-
-	public Col getColour(Ent ent, int i) {
-		switch (ent) {
-		case BODY:
-		case BUOY:
-		case BEACON:
-		case FLOAT:
-			if (i < bodyColour.size())
-				return bodyColour.get(i);
-			break;
-		case TOPMARK:
-			if (i < topColour.size())
-				return topColour.get(i);
-			break;
-		case LIGHT:
-			if (i < lightColour.size())
-				return lightColour.get(i);
-			break;
-		}
-		return Col.UNKNOWN;
-	}
-
-	public void setColour(Ent ent, Col col) {
-		switch (ent) {
-		case BODY:
-		case BUOY:
-		case BEACON:
-		case FLOAT:
-			bodyColour.clear();
-			bodyColour.add(col);
-			break;
-		case TOPMARK:
-			topColour.clear();
-			topColour.add(col);
-			break;
-		case LIGHT:
-			lightColour.clear();
-			lightColour.add(col);
-			break;
-		}
-	}
-
-	public void setColour(Ent ent, int i, Col col) {
-		switch (ent) {
-		case BODY:
-		case BUOY:
-		case BEACON:
-		case FLOAT:
-			if (bodyColour.size() > i)
-				bodyColour.set(i, col);
-			break;
-		case TOPMARK:
-			if (topColour.size() > i)
-				topColour.set(i, col);
-			break;
-		case LIGHT:
-			if (lightColour.size() > i)
-				lightColour.set(i, col);
-			break;
-		}
-	}
-
-	public void addColour(Ent ent, int i, Col col) {
-		switch (ent) {
-		case BODY:
-		case BUOY:
-		case BEACON:
-		case FLOAT:
-			if (bodyColour.size() >= i)
-				bodyColour.add(i, col);
-			break;
-		case TOPMARK:
-			if (topColour.size() >= i)
-				topColour.add(i, col);
-			break;
-		case LIGHT:
-			if (lightColour.size() >= i)
-				lightColour.add(i, col);
-			break;
-		}
-	}
-
-	public void addColour(Ent ent, Col col) {
-		switch (ent) {
-		case BODY:
-		case BUOY:
-		case BEACON:
-		case FLOAT:
-			bodyColour.add(col);
-			break;
-		case TOPMARK:
-			topColour.add(col);
-			break;
-		case LIGHT:
-			lightColour.add(col);
-			break;
-		}
-	}
-
-	public void subColour(Ent ent, int i) {
-		switch (ent) {
-		case BODY:
-		case BUOY:
-		case BEACON:
-		case FLOAT:
-			if (bodyColour.size() > i)
-				bodyColour.remove(i);
-			break;
-		case TOPMARK:
-			if (topColour.size() > i)
-				topColour.remove(i);
-			break;
-		case LIGHT:
-			if (lightColour.size() > i)
-				lightColour.remove(i);
-			break;
-		}
-	}
-
-	private boolean Fired = false;
-
-	public boolean isFired() {
-		return Fired;
-	}
-
-	public void setFired(boolean fired) {
-		Fired = fired;
-	}
-
-	private boolean Sectored = false;
-
-	public boolean isSectored() {
-		return Sectored;
-	}
-
-	public void setSectored(boolean sectored) {
-		Sectored = sectored;
-	}
-
+	public Col getObjColour(int i) {
+		if (i < bodyColour.size())
+			return bodyColour.get(i);
+		else
+			return Col.UNKNOWN;
+	}
+
+	public void setObjColour(Col col) {
+		bodyColour.clear();
+		bodyColour.add(col);
+	}
+
+	public void setObjColour(int i, Col col) {
+		if (bodyColour.size() > i)
+			bodyColour.set(i, col);
+	}
+
+	public void addObjColour(int i, Col col) {
+		if (bodyColour.size() >= i)
+			bodyColour.add(i, col);
+	}
+
+	public void addObjColour(Col col) {
+		bodyColour.add(col);
+	}
+
+	public void subObjColour(int i) {
+		if (bodyColour.size() > i)
+			bodyColour.remove(i);
+	}
+		
+	private ArrayList<Col> topmarkColour = new ArrayList<Col>();
+	
+	public Col getTopColour(int i) {
+		if (i < topmarkColour.size())
+			return topmarkColour.get(i);
+		else
+			return Col.UNKNOWN;
+	}
+
+	public void setTopColour(Col col) {
+		topmarkColour.clear();
+		topmarkColour.add(col);
+	}
+
+	public void setTopColour(int i, Col col) {
+		if (topmarkColour.size() > i)
+			topmarkColour.set(i, col);
+	}
+
+	public void addTopColour(int i, Col col) {
+		if (topmarkColour.size() >= i)
+			topmarkColour.add(i, col);
+	}
+
+	public void addTopColour(Col col) {
+		topmarkColour.add(col);
+	}
+
+	public void subTopColour(int i) {
+		if (topmarkColour.size() > i)
+			topmarkColour.remove(i);
+	}
+		
 	public enum Chr {
 		UNKNOWN, FIXED, FLASH, LFLASH, QUICK, VQUICK, UQUICK, ISOPHASED, OCCULTING,
@@ -505,268 +460,4 @@
 	}
 
-	private ArrayList<Chr> lightCharacter = new ArrayList<Chr>();
-
-	public Chr getLightChar(int i) {
-		if (i < lightCharacter.size())
-			return lightCharacter.get(i);
-		else
-			return Chr.UNKNOWN;
-	}
-
-	public void setLightChar(Chr chr) {
-		lightCharacter.clear();
-		lightCharacter.add(chr);
-	}
-
-	public void setLightChar(int i, Chr chr) {
-		if (lightCharacter.size() > i)
-			lightCharacter.set(i, chr);
-	}
-
-	public void addLightChar(int i, Chr chr) {
-		if (lightCharacter.size() >= i)
-			lightCharacter.add(i, chr);
-	}
-
-	public void addLightChar(Chr chr) {
-		lightCharacter.add(chr);
-	}
-
-	public void subLightChar(int i) {
-		if (lightCharacter.size() > i)
-			lightCharacter.remove(i);
-	}
-
-	private ArrayList<String> lightGroup = new ArrayList<String>();
-
-	public String getLightGroup(int i) {
-		if (i < lightGroup.size())
-			return lightGroup.get(i);
-		else
-			return "";
-	}
-
-	public void setLightGroup(String str) {
-		lightGroup.clear();
-		lightGroup.add(str);
-	}
-
-	public void setLightGroup(int i, String str) {
-		if (lightGroup.size() > i)
-			lightGroup.set(i, str);
-	}
-
-	public void addLightGroup(int i, String str) {
-		if (lightGroup.size() >= i)
-			lightGroup.add(i, str);
-	}
-
-	public void addLightGroup(String str) {
-		lightGroup.add(str);
-	}
-
-	public void subLightGroup(int i) {
-		if (lightGroup.size() > i)
-			lightGroup.remove(i);
-	}
-
-	private ArrayList<String> lightSequence = new ArrayList<String>();
-
-	public String getLightSeq(int i) {
-		if (i < lightSequence.size())
-			return lightSequence.get(i);
-		else
-			return "";
-	}
-
-	public void setLightSeq(String str) {
-		lightSequence.clear();
-		lightSequence.add(str);
-	}
-
-	public void setLightSeq(int i, String str) {
-		if (lightSequence.size() > i)
-			lightSequence.set(i, str);
-	}
-
-	public void addLightSeq(int i, String str) {
-		if (lightSequence.size() >= i)
-			lightSequence.add(i, str);
-	}
-
-	public void addLightSeq(String str) {
-		lightSequence.add(str);
-	}
-
-	public void subLightSeq(int i) {
-		if (lightSequence.size() > i)
-			lightSequence.remove(i);
-	}
-
-	private ArrayList<String> lightPeriod = new ArrayList<String>();
-
-	public String getLightPeriod(int i) {
-		if (i < lightPeriod.size())
-			return lightPeriod.get(i);
-		else
-			return "";
-	}
-
-	public void setLightPeriod(String str) {
-		lightPeriod.clear();
-		lightGroup.add(validDecimal(str));
-	}
-
-	public void setLightPeriod(int i, String str) {
-		if (lightPeriod.size() > i)
-			lightPeriod.set(i, validDecimal(str));
-	}
-
-	public void addLightPeriod(int i, String str) {
-		if (lightPeriod.size() >= i)
-			lightPeriod.add(i, validDecimal(str));
-	}
-
-	public void addLightPeriod(String str) {
-		lightPeriod.add(validDecimal(str));
-	}
-
-	public void subLightPeriod(int i) {
-		if (lightPeriod.size() > i)
-			lightPeriod.remove(i);
-	}
-
-	private ArrayList<String> lightHeight = new ArrayList<String>();
-
-	public String getLightHeight(int i) {
-		if (i < lightHeight.size())
-			return lightHeight.get(i);
-		else
-			return "";
-	}
-
-	public void setLightHeight(String str) {
-		lightHeight.clear();
-		lightHeight.add(validDecimal(str));
-	}
-
-	public void setLightHeight(int i, String str) {
-		if (lightHeight.size() > i)
-			lightHeight.set(i, validDecimal(str));
-	}
-
-	public void addLightHeight(int i, String str) {
-		if (lightHeight.size() >= i)
-			lightHeight.add(i, validDecimal(str));
-	}
-
-	public void addLightHeight(String str) {
-		lightHeight.add(validDecimal(str));
-	}
-
-	public void subLightHeight(int i) {
-		if (lightHeight.size() > i)
-			lightHeight.remove(i);
-	}
-
-	private ArrayList<String> lightRange = new ArrayList<String>();
-
-	public String getLightRange(int i) {
-		if (i < lightRange.size())
-			return lightRange.get(i);
-		else
-			return "";
-	}
-
-	public void setLightRange(String str) {
-		lightRange.clear();
-		lightRange.add(validDecimal(str));
-	}
-
-	public void setLightRange(int i, String str) {
-		if (lightRange.size() > i)
-			lightRange.set(i, validDecimal(str));
-	}
-
-	public void addLightRange(int i, String str) {
-		if (lightRange.size() >= i)
-			lightRange.add(i, validDecimal(str));
-	}
-
-	public void addLightRange(String str) {
-		lightRange.add(validDecimal(str));
-	}
-
-	public void subLightRange(int i) {
-		if (lightRange.size() > i)
-			lightRange.remove(i);
-	}
-
-	private ArrayList<String> lightSector1 = new ArrayList<String>();
-
-	public String getLightSector1(int i) {
-		if (i < lightSector1.size())
-			return lightSector1.get(i);
-		else
-			return "";
-	}
-
-	public void setLightSector1(String str) {
-		lightSector1.clear();
-		lightSector1.add(validDecimal(str));
-	}
-
-	public void setLightSector1(int i, String str) {
-		if (lightSector1.size() > i)
-			lightSector1.set(i, validDecimal(str));
-	}
-
-	public void addLightSector1(int i, String str) {
-		if (lightSector1.size() >= i)
-			lightSector1.add(i, validDecimal(str));
-	}
-
-	public void addLightSector1(String str) {
-		lightSector1.add(validDecimal(str));
-	}
-
-	public void subLightSector1(int i) {
-		if (lightSector1.size() > i)
-			lightSector1.remove(i);
-	}
-
-	private ArrayList<String> lightSector2 = new ArrayList<String>();
-
-	public String getLightSector2(int i) {
-		if (i < lightSector2.size())
-			return lightSector2.get(i);
-		else
-			return "";
-	}
-
-	public void setLightSector2(String str) {
-		lightSector2.clear();
-		lightSector2.add(validDecimal(str));
-	}
-
-	public void setLightSector2(int i, String str) {
-		if (lightSector2.size() > i)
-			lightSector2.set(i, validDecimal(str));
-	}
-
-	public void addLightSector2(int i, String str) {
-		if (lightSector2.size() >= i)
-			lightSector2.add(i, validDecimal(str));
-	}
-
-	public void addLightSector2(String str) {
-		lightSector2.add(validDecimal(str));
-	}
-
-	public void subLightSector2(int i) {
-		if (lightSector2.size() > i)
-			lightSector2.remove(i);
-	}
-
 	public enum Vis {
 		UNKNOWN, HIGH, LOW, FAINT, INTEN, UNINTEN, REST, OBS, PARTOBS
@@ -786,24 +477,4 @@
 	}
 	
-	private ArrayList<Vis> lightVisibility = new ArrayList<Vis>();
-	
-	public Vis getVisibility(int i) {
-		return lightVisibility.get(i);
-	}
-
-	public void setVisibility(int i, Vis vis) {
-		lightVisibility.set(i, vis);
-	}
-	
-	private String lightOrientation = "";
-	
-	public String getLightOrientation() {
-		return lightOrientation;
-	}
-	
-	public void setLightOrientation(String str) {
-		lightOrientation = validDecimal(str);
-	}
-	
 	public enum Lit {
 		UNKNOWN, VERT, HORIZ, DIR, UPPER, LOWER, LEAD, REAR, FRONT,
@@ -816,14 +487,4 @@
 	}
 
-	private Lit lightCategory = Lit.UNKNOWN;
-	
-	public Lit getLightCategory() {
-		return lightCategory;
-	}
-
-	public void setLightCategory(Lit lit) {
-		lightCategory = lit;
-	}
-	
 	public enum Exh { UNKNOWN, H24, DAY, NIGHT, FOG }
 	public static final Map<EnumSet<Exh>, String> ExhMAP = new HashMap<EnumSet<Exh>, String>();
@@ -836,14 +497,74 @@
 	}
 	
-	private Exh lightExhibition = Exh.UNKNOWN;
+	public enum Att { COL, CHR, GRP, SEQ, PER, HGT, RNG, VIS, BEG, END, RAD, EXH, LIT, ORT }
 	
-	public Exh getLightExhibition() {
-		return lightExhibition;
-	}
-
-	public void setLightExhibition(Exh exh) {
-		lightExhibition = exh;
-	}
+	private ArrayList<Object[]> sectors = new ArrayList<Object[]>();
 	
+	public int getSectorCount() {
+		return sectors.size();
+	}
+
+	public Object getLightAtt(Att att, int i) {
+		return getLightAtt(att.ordinal(), i);
+	}
+	public Object getLightAtt(int att, int i) {
+		if (i < sectors.size())
+			return sectors.get(i)[att];
+		else
+			return null;
+	}
+
+	public void setLightAtt(Att att, Object obj) {
+		sectors.clear();
+		sectors.add(new Object[14]);
+		sectors.get(0)[att.ordinal()] = obj;
+	}
+
+	public void setLightAtt(Att att, int i, Object obj) {
+		setLightAtt(att.ordinal(), i, obj);
+	}
+
+	public void setLightAtt(int att, int i, Object obj) {
+		if (sectors.size() > i)
+			sectors.get(i)[att] = obj;
+	}
+
+	public void addLightAtt(Att att, int i, Object obj) {
+		if (sectors.size() >= i) {
+			sectors.add(i, new Object[14]);
+			sectors.get(i)[att.ordinal()] = obj;
+		}
+	}
+
+	public void addLightAtt(Att att, Object obj) {
+		sectors.add(new Object[14]);
+		sectors.get(sectors.size()-1)[att.ordinal()] = obj;
+	}
+
+	public void subLightAtt(Att att, int i) {
+		if (sectors.size() > i)
+			sectors.remove(i);
+	}
+
+	private boolean Fired = false;
+
+	public boolean isFired() {
+		return Fired;
+	}
+
+	public void setFired(boolean fired) {
+		Fired = fired;
+	}
+
+	private boolean Sectored = false;
+
+	public boolean isSectored() {
+		return Sectored;
+	}
+
+	public void setSectored(boolean sectored) {
+		Sectored = sectored;
+	}
+
 	public enum Pat {
 		NONE, HORIZ, VERT, DIAG, SQUARE, BORDER
@@ -859,32 +580,36 @@
 	}
 
+	public Pat getPattern(Ent ent) {
+		if (ent == Ent.BODY)
+			return getObjPattern();
+		else
+			return getTopPattern();
+	}
+	
+	public void setPattern(Ent ent, Pat pat) {
+		if (ent == Ent.BODY)
+			setObjPattern(pat);
+		else
+			setTopPattern(pat);
+	}
+	
 	private Pat bodyPattern = Pat.NONE;
+
+	public Pat getObjPattern() {
+		return bodyPattern;
+	}
+
+	public void setObjPattern(Pat pat) {
+		bodyPattern = pat;
+	}
+
 	private Pat topPattern = Pat.NONE;
 
-	public Pat getPattern(Ent ent) {
-		switch (ent) {
-		case BODY:
-		case BUOY:
-		case BEACON:
-		case FLOAT:
-			return bodyPattern;
-		case TOPMARK:
-			return topPattern;
-		}
-		return Pat.NONE;
-	}
-
-	public void setPattern(Ent ent, Pat pat) {
-		switch (ent) {
-		case BODY:
-		case BUOY:
-		case BEACON:
-		case FLOAT:
-			bodyPattern = pat;
-			break;
-		case TOPMARK:
-			topPattern = pat;
-			break;
-		}
+	public Pat getTopPattern() {
+		return topPattern;
+	}
+
+	public void setTopPattern(Pat pat) {
+		topPattern = pat;
 	}
 
@@ -1254,5 +979,5 @@
 		case FLTSAW:
 		case FLTSPP:
-			if (getColour(Ent.BODY, 0) != Col.UNKNOWN)
+			if (getObjColour(0) != Col.UNKNOWN)
 				return true;
 			break;
@@ -1374,8 +1099,8 @@
 			if (keys.containsKey("seamark:" + ObjSTR.get(obj) + ":colour_pattern")) {
 				str = keys.get("seamark:" + ObjSTR.get(obj) + ":colour_pattern");
-				setPattern(Ent.BODY, Pat.NONE);
+				setObjPattern(Pat.NONE);
 				for (Pat pat : PatSTR.keySet()) {
 					if (PatSTR.get(pat).equals(str)) {
-						setPattern(Ent.BODY, pat);
+						setObjPattern(pat);
 					}
 				}
@@ -1384,10 +1109,10 @@
 
 		if (getObject() == Obj.LITFLT) {
-			switch (getColour(Ent.BODY, 0)) {
+			switch (getObjColour(0)) {
 			case RED:
-				if ((getColour(Ent.BODY, 1) == Col.WHITE) && (getColour(Ent.BODY, 2) == Col.UNKNOWN)) {
+				if ((getObjColour(1) == Col.WHITE) && (getObjColour(2) == Col.UNKNOWN)) {
 					setObject(Obj.FLTSAW);
 					setCategory(Cat.NONE);
-				} else if (getColour(Ent.BODY, 1) == Col.UNKNOWN) {
+				} else if (getObjColour(1) == Col.UNKNOWN) {
 					setObject(Obj.FLTLAT);
 					if (getRegion() == Reg.B) {
@@ -1396,5 +1121,5 @@
 						setCategory(Cat.LAM_PORT);
 					}
-				} else if ((getColour(Ent.BODY, 1) == Col.GREEN) && (getColour(Ent.BODY, 2) == Col.RED)) {
+				} else if ((getObjColour(1) == Col.GREEN) && (getObjColour(2) == Col.RED)) {
 					setObject(Obj.FLTLAT);
 					if (getRegion() == Reg.B) {
@@ -1403,5 +1128,5 @@
 						setCategory(Cat.LAM_PPORT);
 					}
-				} else if ((getColour(Ent.BODY, 1) == Col.WHITE) && (getColour(Ent.BODY, 2) == Col.RED)) {
+				} else if ((getObjColour(1) == Col.WHITE) && (getObjColour(2) == Col.RED)) {
 					setObject(Obj.FLTLAT);
 					setCategory(Cat.LAM_PORT);
@@ -1412,5 +1137,5 @@
 				break;
 			case GREEN:
-				if (getColour(Ent.BODY, 1) == Col.UNKNOWN) {
+				if (getObjColour(1) == Col.UNKNOWN) {
 					setObject(Obj.FLTLAT);
 					if (getRegion() == Reg.B) {
@@ -1419,5 +1144,5 @@
 						setCategory(Cat.LAM_STBD);
 					}
-				} else if ((getColour(Ent.BODY, 1) == Col.RED) && (getColour(Ent.BODY, 2) == Col.GREEN)) {
+				} else if ((getObjColour(1) == Col.RED) && (getObjColour(2) == Col.GREEN)) {
 					setObject(Obj.FLTLAT);
 					if (getRegion() == Reg.B) {
@@ -1426,5 +1151,5 @@
 						setCategory(Cat.LAM_PSTBD);
 					}
-				} else if ((getColour(Ent.BODY, 1) == Col.WHITE) && (getColour(Ent.BODY, 2) == Col.GREEN)) {
+				} else if ((getObjColour(1) == Col.WHITE) && (getObjColour(2) == Col.GREEN)) {
 					setObject(Obj.FLTLAT);
 					setCategory(Cat.LAM_STBD);
@@ -1435,7 +1160,7 @@
 				break;
 			case YELLOW:
-				if (getColour(Ent.BODY, 1) == Col.BLACK) {
+				if (getObjColour(1) == Col.BLACK) {
 					setObject(Obj.FLTCAR);
-					if (getColour(Ent.BODY, 2) == Col.YELLOW) {
+					if (getObjColour(2) == Col.YELLOW) {
 						setCategory(Cat.CAM_WEST);
 					} else {
@@ -1448,9 +1173,9 @@
 				break;
 			case BLACK:
-				if (getColour(Ent.BODY, 1) == Col.RED) {
+				if (getObjColour(1) == Col.RED) {
 					setObject(Obj.FLTISD);
 					setCategory(Cat.NONE);
-				} else if (getColour(Ent.BODY, 1) == Col.YELLOW) {
-					if (getColour(Ent.BODY, 2) == Col.BLACK) {
+				} else if (getObjColour(1) == Col.YELLOW) {
+					if (getObjColour(2) == Col.BLACK) {
 						setCategory(Cat.CAM_EAST);
 					} else {
@@ -1480,38 +1205,38 @@
 				switch (getCategory()) {
 				case LAM_PORT:
-					if (getColour(Ent.BODY, 0) == Col.RED) {
-						if (getColour(Ent.BODY, 1) == Col.WHITE)
+					if (getObjColour(0) == Col.RED) {
+						if (getObjColour(1) == Col.WHITE)
 							setRegion(Reg.C);
 						else
 							setRegion(Reg.A);
 					}
-					if (getColour(Ent.BODY, 0) == Col.GREEN)
+					if (getObjColour(0) == Col.GREEN)
 						setRegion(Reg.B);
 					break;
 				case LAM_PPORT:
-					if (getColour(Ent.BODY, 0) == Col.RED) {
-						if (getColour(Ent.BODY, 3) == Col.GREEN)
+					if (getObjColour(0) == Col.RED) {
+						if (getObjColour(3) == Col.GREEN)
 							setRegion(Reg.C);
 						else
 							setRegion(Reg.A);
 					}
-					if (getColour(Ent.BODY, 0) == Col.GREEN)
+					if (getObjColour(0) == Col.GREEN)
 						setRegion(Reg.B);
 					break;
 				case LAM_STBD:
-					if (getColour(Ent.BODY, 0) == Col.GREEN) {
-						if (getColour(Ent.BODY, 1) == Col.WHITE)
+					if (getObjColour(0) == Col.GREEN) {
+						if (getObjColour(1) == Col.WHITE)
 							setRegion(Reg.C);
 						else
 							setRegion(Reg.A);
 					}
-					if (getColour(Ent.BODY, 0) == Col.RED)
+					if (getObjColour(0) == Col.RED)
 						setRegion(Reg.B);
 					break;
 				case LAM_PSTBD:
-					if (getColour(Ent.BODY, 0) == Col.GREEN)
+					if (getObjColour(0) == Col.GREEN)
 						setRegion(Reg.A);
-					if (getColour(Ent.BODY, 0) == Col.RED) {
-						if (getColour(Ent.BODY, 3) == Col.GREEN)
+					if (getObjColour(0) == Col.RED) {
+						if (getObjColour(3) == Col.GREEN)
 							setRegion(Reg.C);
 						else
@@ -1534,8 +1259,8 @@
 		if (keys.containsKey("seamark:topmark:colour")) {
 			str = keys.get("seamark:topmark:colour");
-			setColour(Ent.TOPMARK, Col.UNKNOWN);
+			setTopColour(Col.UNKNOWN);
 			for (Col col : ColSTR.keySet()) {
 				if (ColSTR.get(col).equals(str)) {
-					setColour(Ent.TOPMARK, col);
+					setTopColour(col);
 				}
 			}
@@ -1543,8 +1268,8 @@
 		if (keys.containsKey("seamark:topmark:colour_pattern")) {
 			str = keys.get("seamark:topmark:colour_pattern");
-			setPattern(Ent.TOPMARK, Pat.NONE);
+			setTopPattern(Pat.NONE);
 			for (Pat pat : PatSTR.keySet()) {
 				if (PatSTR.get(pat).equals(str)) {
-					setPattern(Ent.TOPMARK, pat);
+					setTopPattern(pat);
 				}
 			}
@@ -1838,5 +1563,5 @@
 			}
 			colStr = imgStr;
-			for (Col col : topColour) {
+			for (Col col : topmarkColour) {
 				switch (col) {
 				case WHITE:
@@ -1948,15 +1673,15 @@
 				}
 
-				if ((getColour(Ent.BODY, 0) != Col.UNKNOWN) && getShape() != Shp.PERCH) {
-					String str = ColSTR.get(getColour(Ent.BODY, 0));
+				if ((getObjColour(0) != Col.UNKNOWN) && getShape() != Shp.PERCH) {
+					String str = ColSTR.get(getObjColour(0));
 					for (int i = 1; bodyColour.size() > i; i++) {
-						str += (";" + ColSTR.get(getColour(Ent.BODY, i)));
+						str += (";" + ColSTR.get(getObjColour(i)));
 					}
 					Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:" + objStr + ":colour", str));
 				}
 
-				if (getPattern(Ent.BODY) != Pat.NONE) {
+				if (getObjPattern() != Pat.NONE) {
 					Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:" + objStr + ":colour_pattern", PatSTR
-							.get(getPattern(Ent.BODY))));
+							.get(getObjPattern())));
 				}
 
@@ -1977,11 +1702,11 @@
 			if (hasTopmark()) {
 				Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:topmark:shape", TopSTR.get(getTopmark())));
-				if (getPattern(Ent.TOPMARK) != Pat.NONE)
+				if (getTopPattern() != Pat.NONE)
 					Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:topmark:colour_pattern", PatSTR
-							.get(getPattern(Ent.TOPMARK))));
-				if (getColour(Ent.TOPMARK, 0) != Col.UNKNOWN) {
-					String str = ColSTR.get(getColour(Ent.TOPMARK, 0));
-					for (int i = 1; topColour.size() > i; i++) {
-						str += (";" + ColSTR.get(getColour(Ent.TOPMARK, i)));
+							.get(getTopPattern())));
+				if (getTopColour(0) != Col.UNKNOWN) {
+					String str = ColSTR.get(getTopColour(0));
+					for (int i = 1; topmarkColour.size() > i; i++) {
+						str += (";" + ColSTR.get(getTopColour(i)));
 					}
 					Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:topmark:colour", str));
