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 27041)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelChr.java	(revision 27042)
@@ -119,7 +119,23 @@
 	}
 
-	public void enableAll(boolean state) {
-		for (JToggleButton button : buttons.values()) {
-			button.setEnabled(state);
+	public void syncPanel() {
+		String str = (String)dlg.mark.getLightAtt(Att.CHR, 0);
+		charBox.setText(str);
+		EnumSet<Chr> set = EnumSet.noneOf(Chr.class);
+		for (EnumSet<Chr> map : SeaMark.ChrMAP.keySet()) {
+			if (str.equals(SeaMark.ChrMAP.get(map))) {
+				set = map;
+				break;
+			}
+		}
+		for (Chr chr : buttons.keySet()) {
+			JToggleButton button = buttons.get(chr);
+			if (set.contains(chr)) {
+				button.setSelected(true);
+				button.setBorderPainted(true);
+			} else {
+				button.setSelected(false);
+				button.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 27041)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelCol.java	(revision 27042)
@@ -124,4 +124,11 @@
 	public void syncPanel() {
 		if (ent == Ent.LIGHT) {
+			for (Col col : colours.keySet()) {
+				JRadioButton button = colours.get(col);
+				if (dlg.mark.getLightAtt(Att.COL, 0) == col) {
+					button.setBorderPainted(true);
+				} else
+					button.setBorderPainted(false);
+			}
 		} else {
 			int idx;
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 27041)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelLit.java	(revision 27042)
@@ -133,5 +133,8 @@
 				if (panelSector != null) {
 					panelSector.setVisible(false);
+					panelSector = null;
 				}
+				while (dlg.mark.getSectorCount() > 1)
+					dlg.mark.delLight(1);
 			}
 		}
@@ -274,8 +277,41 @@
 
 	public void syncPanel() {
+		if (panelSector != null) {
+			panelSector.setVisible(false);
+			panelSector = null;
+		}
+		singleButton.setBorderPainted(false);
+		sectorButton.setBorderPainted(false);
 		orientationLabel.setVisible(false);
 		orientationBox.setVisible(false);
 		multipleLabel.setVisible(false);
 		multipleBox.setVisible(false);
+		groupBox.setText((String)dlg.mark.getLightAtt(Att.GRP, 0));
+		periodBox.setText((String)dlg.mark.getLightAtt(Att.PER, 0));
+		sequenceBox.setText((String)dlg.mark.getLightAtt(Att.SEQ, 0));
+		heightBox.setText((String)dlg.mark.getLightAtt(Att.HGT, 0));
+		rangeBox.setText((String)dlg.mark.getLightAtt(Att.RNG, 0));
+		orientationBox.setText((String)dlg.mark.getLightAtt(Att.ORT, 0));
+		multipleBox.setText((String)dlg.mark.getLightAtt(Att.MLT, 0));
+		visibilityBox.setSelectedIndex(0);
+		for (Vis vis : visibilities.keySet()) {
+			int item = visibilities.get(vis);
+			if (dlg.mark.getLightAtt(Att.VIS, 0) == vis)
+				visibilityBox.setSelectedIndex(item);
+		}
+		categoryBox.setSelectedIndex(0);
+		for (Lit lit : categories.keySet()) {
+			int item = categories.get(lit);
+			if (dlg.mark.getLightAtt(Att.LIT, 0) == lit)
+				categoryBox.setSelectedIndex(item);
+		}
+		exhibitionBox.setSelectedIndex(0);
+		for (Exh exh : exhibitions.keySet()) {
+			int item = exhibitions.get(exh);
+			if (dlg.mark.getLightAtt(Att.EXH, 0) == exh)
+				exhibitionBox.setSelectedIndex(item);
+		}
+		panelCol.syncPanel();
+		panelChr.syncPanel();
 	}
 
Index: /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelMain.java
===================================================================
--- /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelMain.java	(revision 27041)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelMain.java	(revision 27042)
@@ -293,7 +293,11 @@
 		miscButtons.clearSelection();
 		topButton.setEnabled(false);
+		topButton.setBorderPainted(false);
 		fogButton.setEnabled(false);
+		fogButton.setBorderPainted(false);
 		radButton.setEnabled(false);
+		radButton.setBorderPainted(false);
 		litButton.setEnabled(false);
+		litButton.setBorderPainted(false);
 		saveButton.setEnabled(false);
 		moreButton.setVisible(false);
@@ -304,4 +308,8 @@
 		panelLights.setVisible(false);
 		panelMore.setVisible(false);
+		panelTop.setVisible(false);
+		panelFog.setVisible(false);
+		panelRadar.setVisible(false);
+		panelLit.setVisible(false);
 		radarLabel.setText("");
 		fogLabel.setText("");
@@ -355,8 +363,4 @@
 				break;
 			}
-			panelChan.syncPanel();
-			panelHaz.syncPanel();
-			panelSpec.syncPanel();
-			panelLights.syncPanel();
 			panelMore.syncPanel();
 			panelTop.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 27041)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelMore.java	(revision 27042)
@@ -75,5 +75,5 @@
 				int idx = conspicuities.get(con);
 				if (dlg.mark != null && (idx == conBox.getSelectedIndex()))
-					dlg.mark.setCon(con);
+					dlg.mark.setConsp(con);
 			}
 		}
@@ -321,5 +321,5 @@
 		for (Con con : conspicuities.keySet()) {
 			int item = conspicuities.get(con);
-			if (dlg.mark.getCon() == con)
+			if (dlg.mark.getConsp() == con)
 				conBox.setSelectedIndex(item);
 		}
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 27041)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelSectors.java	(revision 27042)
@@ -66,4 +66,9 @@
 		panel.add(new JScrollPane(table));
 		this.getContentPane().add(panel);
+
+		table.setSize(860, ((table.getRowCount() * 16) + 18));
+		if (table.getRowCount() > 3) {
+			this.setSize(900, ((table.getRowCount() * 16) + 40));
+		}
 		
 		table.setDefaultRenderer(String.class, new CentreRenderer());
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 27041)
+++ /applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/SeaMark.java	(revision 27042)
@@ -629,5 +629,5 @@
 		TopSTR.put(Top.SOUTH, "2 cones down");
 		TopSTR.put(Top.EAST, "2 cones base together");
-		TopSTR.put(Top.WEST, "2 cones points together");
+		TopSTR.put(Top.WEST, "2 cones point together");
 		TopSTR.put(Top.SPHERES2, "2 spheres");
 		TopSTR.put(Top.BOARD, "board");
@@ -872,9 +872,9 @@
 	private Con conspicuity = Con.UNKNOWN;
 
-	public Con getCon() {
+	public Con getConsp() {
 		return conspicuity;
 	}
 
-	public void setCon(Con con) {
+	public void setConsp(Con con) {
 		conspicuity = con;
 	}
@@ -928,4 +928,34 @@
 	public void setHeight(String str) {
 		height = validDecimal(str);
+	}
+
+	public String ref = "";
+
+	public String getRef() {
+		return ref;
+	}
+
+	public void setRef(String str) {
+		ref = str;
+	}
+
+	public String lightRef = "";
+
+	public String getLightRef() {
+		return lightRef;
+	}
+
+	public void setLightRef(String str) {
+		lightRef = str;
+	}
+
+	public String fixme = "";
+
+	public String getFixme() {
+		return fixme;
+	}
+
+	public void setFixme(String str) {
+		fixme = str;
 	}
 
@@ -1081,4 +1111,11 @@
 				}
 			}
+			
+			if (keys.containsKey("seamark:" + ObjSTR.get(obj) + ":height")) {
+				setHeight(keys.get("seamark:" + ObjSTR.get(obj) + ":height"));
+			}
+			if (keys.containsKey("seamark:" + ObjSTR.get(obj) + ":elevation")) {
+				setElevation(keys.get("seamark:" + ObjSTR.get(obj) + ":elevation"));
+			}
 		}
 
@@ -1307,5 +1344,8 @@
 
 		if (keys.containsKey("seamark:fog_signal")) {
-			str = keys.get("seamark:fog_signal");
+			setFogSound(Fog.UNKNOWN);
+		}
+		if (keys.containsKey("seamark:fog_signal:category")) {
+			str = keys.get("seamark:fog_signal:category");
 			setFogSound(Fog.NONE);
 			for (Fog fog : FogSTR.keySet()) {
@@ -1391,8 +1431,8 @@
 		if (keys.containsKey("seamark:conspicuity")) {
 			str = keys.get("seamark:conspicuity");
-			setCon(Con.UNKNOWN);
+			setConsp(Con.UNKNOWN);
 			for (Con con : ConSTR.keySet()) {
 				if (ConSTR.get(con).equals(str)) {
-					setCon(con);
+					setConsp(con);
 				}
 			}
@@ -1406,4 +1446,20 @@
 				}
 			}
+		}
+
+		if (keys.containsKey("seamark:ref")) {
+			setRef(keys.get("seamark:ref"));
+		}
+		if (keys.containsKey("seamark:reference")) {
+			setRef(keys.get("seamark:reference"));
+		}
+		if (keys.containsKey("seamark:light:ref")) {
+			setLightRef(keys.get("seamark:light:ref"));
+		}
+		if (keys.containsKey("seamark:light:reference")) {
+			setLightRef(keys.get("seamark:light:reference"));
+		}
+		if (keys.containsKey("seamark:fixme")) {
+			setFixme(keys.get("seamark:fixme"));
 		}
 
@@ -1787,5 +1843,5 @@
 
 				if (getShape() != Shp.FLOAT) {
-					String str = CatSTR.get(category);
+					String str = CatSTR.get(getCategory());
 					if (str != null)
 						Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:" + objStr + ":category", str));
@@ -1819,4 +1875,10 @@
 						break;
 					}
+				}
+				if (!getHeight().isEmpty()) {
+					Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:" + objStr + "height", getHeight()));
+				}
+				if (!getElevation().isEmpty()) {
+					Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:" + objStr + "elevation", getElevation()));
 				}
 			}
@@ -1918,10 +1980,4 @@
 				Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:source", getSource()));
 			}
-			if (!getHeight().isEmpty()) {
-				Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:height", getHeight()));
-			}
-			if (!getElevation().isEmpty()) {
-				Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:elevation", getElevation()));
-			}
 			if (getStatus() != Sts.UNKNOWN) {
 				Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:status", StsSTR.get(getStatus())));
@@ -1930,10 +1986,19 @@
 				Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:construction", CnsSTR.get(getConstr())));
 			}
-			if (getCon() != Con.UNKNOWN) {
-				Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:conspicuity", ConSTR.get(getCon())));
+			if (getConsp() != Con.UNKNOWN) {
+				Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:conspicuity", ConSTR.get(getConsp())));
 			}
 			if (getRefl() != Con.UNKNOWN) {
 				Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:reflectivity", ConSTR.get(getRefl())));
 			}
+			if (!getRef().isEmpty()) {
+				Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:reference", getRef()));
+			}
+			if (!getLightRef().isEmpty()) {
+				Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:light:reference", getLightRef()));
+			}
+			if (!getFixme().isEmpty()) {
+				Main.main.undoRedo.add(new ChangePropertyCommand(node, "seamark:fixme", getFixme()));
+			}
 		}
 	}
