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 26976)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelChan.java	(revision 26977)
@@ -202,4 +202,14 @@
 			panelSaw.setVisible(false);
 		}
+		if (dlg.mark.isValid()) {
+			topmarkButton.setVisible(true);
+			dlg.panelMain.moreButton.setVisible(true);
+		} else {
+			topmarkButton.setVisible(false);
+			dlg.panelMain.moreButton.setVisible(false);
+		}
+		panelPort.syncButtons();
+		panelStbd.syncButtons();
+		panelSaw.syncButtons();
 
 	}
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 26976)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelHaz.java	(revision 26977)
@@ -188,9 +188,23 @@
 
 	public void syncButtons() {
-		northButton.setBorderPainted(northButton.isSelected());
-		southButton.setBorderPainted(southButton.isSelected());
-		eastButton.setBorderPainted(eastButton.isSelected());
-		westButton.setBorderPainted(westButton.isSelected());
-		isolButton.setBorderPainted(isolButton.isSelected());
+		northButton.setBorderPainted(dlg.mark.getCategory() == Cat.CAM_NORTH);
+		southButton.setBorderPainted(dlg.mark.getCategory() == Cat.CAM_SOUTH);
+		eastButton.setBorderPainted(dlg.mark.getCategory() == Cat.CAM_EAST);
+		westButton.setBorderPainted(dlg.mark.getCategory() == Cat.CAM_WEST);
+		isolButton.setBorderPainted(dlg.mark.getCategory() == Cat.UNKNOWN);
+		for (Shp shp : shapes.keySet()) {
+			JRadioButton button = shapes.get(shp);
+			if (dlg.mark.getShape() == shp) {
+				button.setBorderPainted(true);
+			} else
+				button.setBorderPainted(false);
+		}
+		if (dlg.mark.isValid()) {
+			topmarkButton.setVisible(true);
+			dlg.panelMain.moreButton.setVisible(true);
+		} else {
+			topmarkButton.setVisible(false);
+			dlg.panelMain.moreButton.setVisible(false);
+		}
 	}
 
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 26976)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelMain.java	(revision 26977)
@@ -258,12 +258,13 @@
 					panelMore.setVisible(true);
 					moreButton.setText("^ ^ ^");
-					if (topButton.isSelected())
+					miscButtons.clearSelection();
 						panelTop.setVisible(false);
-					if (radButton.isSelected())
+						topButton.setBorderPainted(false);
 						panelRadar.setVisible(false);
-					if (fogButton.isSelected())
+						radButton.setBorderPainted(false);
 						panelFog.setVisible(false);
-					if (litButton.isSelected())
+						fogButton.setBorderPainted(false);
 						panelLit.setVisible(false);
+						litButton.setBorderPainted(false);
 				}
 			}
@@ -298,4 +299,7 @@
 		alType.actionPerformed(null);
 		alMisc.actionPerformed(null);
+		dlg.panelMain.panelChan.syncButtons();
+		dlg.panelMain.panelHaz.syncButtons();
+		dlg.panelMain.panelMore.syncButtons();
 	}
 
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 26976)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelMore.java	(revision 26977)
@@ -300,4 +300,8 @@
 
 		}
+	
+	public void syncButtons() {
+		panelPat.syncButtons();
+	}
 
 	private void addStsItem(String str, Sts sts) {
Index: applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelPat.java
===================================================================
--- applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelPat.java	(revision 26976)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelPat.java	(revision 26977)
@@ -72,4 +72,15 @@
 	}
 
+	public void syncButtons() {
+		for (Pat pat : patterns.keySet()) {
+			JRadioButton button = patterns.get(pat);
+			if (dlg.mark.getPattern(ent) == pat) {
+				button.setBorderPainted(true);
+			} else
+				button.setBorderPainted(false);
+		}
+		panelCol.syncStack();
+	}
+	
 	private JRadioButton getPatButton(JRadioButton button, int x, int y, int w, int h, String tip, Pat pat) {
 		button.setBounds(new Rectangle(x, y, w, h));
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 26976)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelPort.java	(revision 26977)
@@ -4,4 +4,5 @@
 import java.awt.event.*;
 import javax.swing.*;
+
 import java.util.*;
 
@@ -112,4 +113,14 @@
 	}
 
+	public void syncButtons() {
+		for (Shp shp : shapes.keySet()) {
+			JRadioButton button = shapes.get(shp);
+			if (dlg.mark.getShape() == shp) {
+				button.setBorderPainted(true);
+			} else
+				button.setBorderPainted(false);
+		}
+	}
+	
 	private JRadioButton getShapeButton(JRadioButton button, int x, int y, int w, int h, String tip, Shp shp, Obj obj) {
 		button.setBounds(new Rectangle(x, y, w, h));
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 26976)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelSaw.java	(revision 26977)
@@ -4,4 +4,5 @@
 import java.awt.event.*;
 import javax.swing.*;
+
 import java.util.*;
 
@@ -65,4 +66,14 @@
 	}
 
+	public void syncButtons() {
+		for (Shp shp : shapes.keySet()) {
+			JRadioButton button = shapes.get(shp);
+			if (dlg.mark.getShape() == shp) {
+				button.setBorderPainted(true);
+			} else
+				button.setBorderPainted(false);
+		}
+	}
+	
 	private JRadioButton getShapeButton(JRadioButton button, int x, int y, int w, int h, String tip, Shp shp, Obj obj) {
 		button.setBounds(new Rectangle(x, y, w, h));
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 26976)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/panels/PanelStbd.java	(revision 26977)
@@ -4,4 +4,5 @@
 import java.awt.event.*;
 import javax.swing.*;
+
 import java.util.*;
 
@@ -112,4 +113,14 @@
 	}
 
+	public void syncButtons() {
+		for (Shp shp : shapes.keySet()) {
+			JRadioButton button = shapes.get(shp);
+			if (dlg.mark.getShape() == shp) {
+				button.setBorderPainted(true);
+			} else
+				button.setBorderPainted(false);
+		}
+	}
+	
 	private JRadioButton getShapeButton(JRadioButton button, int x, int y, int w, int h, String tip, Shp shp, Obj obj) {
 		button.setBounds(new Rectangle(x, y, w, h));
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 26976)
+++ applications/editors/josm/plugins/smed/plugs/oseam/src/oseam/seamarks/SeaMark.java	(revision 26977)
@@ -74,4 +74,5 @@
 		ObjSTR.put(Obj.FLTLAT, "light_float");
 		ObjSTR.put(Obj.FLTSAW, "light_float");
+		ObjSTR.put(Obj.FLTISD, "light_float");
 		ObjSTR.put(Obj.FLTSPP, "light_float");
 		ObjSTR.put(Obj.LITMAJ, "light_major");
@@ -114,4 +115,9 @@
 		EntMAP.put(Obj.LITMIN, Ent.LIGHT);
 		EntMAP.put(Obj.LITFLT, Ent.FLOAT);
+		EntMAP.put(Obj.FLTCAR, Ent.FLOAT);
+		EntMAP.put(Obj.FLTLAT, Ent.FLOAT);
+		EntMAP.put(Obj.FLTSAW, Ent.FLOAT);
+		EntMAP.put(Obj.FLTISD, Ent.FLOAT);
+		EntMAP.put(Obj.FLTSPP, Ent.FLOAT);
 		EntMAP.put(Obj.LITVES, Ent.LIGHT);
 		EntMAP.put(Obj.LNDMRK, Ent.LIGHT);
@@ -141,4 +147,9 @@
 		GrpMAP.put(Obj.LITMIN, Grp.LIT);
 		GrpMAP.put(Obj.LITFLT, Grp.FLT);
+		GrpMAP.put(Obj.FLTCAR, Grp.CAR);
+		GrpMAP.put(Obj.FLTLAT, Grp.LAT);
+		GrpMAP.put(Obj.FLTSAW, Grp.SAW);
+		GrpMAP.put(Obj.FLTISD, Grp.ISD);
+		GrpMAP.put(Obj.FLTSPP, Grp.SPP);
 		GrpMAP.put(Obj.LITVES, Grp.LIT);
 		GrpMAP.put(Obj.LNDMRK, Grp.LIT);
@@ -879,4 +890,89 @@
 		}
 
+		if (getObject() == Obj.LITFLT) {
+			switch (getColour(Ent.BODY, 0)) {
+			case RED:
+				if ((getColour(Ent.BODY, 1) == Col.WHITE) && (getColour(Ent.BODY, 2) == Col.UNKNOWN)) {
+					setObject(Obj.FLTSAW);
+					setCategory(Cat.UNKNOWN);
+				} else if (getColour(Ent.BODY, 1) == Col.UNKNOWN) {
+					setObject(Obj.FLTLAT);
+					if (getRegion() == Reg.B) {
+						setCategory(Cat.LAM_STBD);
+					} else {
+						setCategory(Cat.LAM_PORT);
+					}
+				} else if ((getColour(Ent.BODY, 1) == Col.GREEN) && (getColour(Ent.BODY, 2) == Col.RED)) {
+					setObject(Obj.FLTLAT);
+					if (getRegion() == Reg.B) {
+						setCategory(Cat.LAM_PSTBD);
+					} else {
+						setCategory(Cat.LAM_PPORT);
+					}
+				} else if ((getColour(Ent.BODY, 1) == Col.WHITE) && (getColour(Ent.BODY, 2) == Col.RED)) {
+					setObject(Obj.FLTLAT);
+					setCategory(Cat.LAM_PORT);
+				} else {
+					setObject(Obj.FLTSPP);
+					setCategory(Cat.UNKNOWN);
+				}
+				break;
+			case GREEN:
+			if (getColour(Ent.BODY, 1) == Col.UNKNOWN) {
+				setObject(Obj.FLTLAT);
+				if (getRegion() == Reg.B) {
+					setCategory(Cat.LAM_PORT);
+				} else {
+					setCategory(Cat.LAM_STBD);
+				}
+			} else if ((getColour(Ent.BODY, 1) == Col.RED) && (getColour(Ent.BODY, 2) == Col.GREEN)) {
+				setObject(Obj.FLTLAT);
+				if (getRegion() == Reg.B) {
+					setCategory(Cat.LAM_PPORT);
+				} else {
+					setCategory(Cat.LAM_PSTBD);
+				}
+			} else if ((getColour(Ent.BODY, 1) == Col.WHITE) && (getColour(Ent.BODY, 2) == Col.GREEN)) {
+				setObject(Obj.FLTLAT);
+				setCategory(Cat.LAM_STBD);
+			} else {
+				setObject(Obj.FLTSPP);
+				setCategory(Cat.UNKNOWN);
+			}
+				break;
+			case YELLOW:
+				if (getColour(Ent.BODY, 1) == Col.BLACK) {
+					setObject(Obj.FLTCAR);
+					if (getColour(Ent.BODY, 2) == Col.YELLOW) {
+						setCategory(Cat.CAM_WEST);
+					} else {
+						setCategory(Cat.CAM_SOUTH);
+					}
+				} else {
+					setObject(Obj.FLTSPP);
+					setCategory(Cat.UNKNOWN);
+				}
+				break;
+			case BLACK:
+				if (getColour(Ent.BODY, 1) == Col.RED) {
+					setObject(Obj.FLTISD);
+					setCategory(Cat.UNKNOWN);
+				} else if (getColour(Ent.BODY, 1) == Col.YELLOW) {
+					if (getColour(Ent.BODY, 2) == Col.BLACK) {
+						setCategory(Cat.CAM_EAST);
+					} else {
+						setCategory(Cat.CAM_NORTH);
+					}
+				} else {
+					setObject(Obj.FLTSPP);
+					setCategory(Cat.UNKNOWN);
+				}
+				break;
+				default:
+					setObject(Obj.FLTSPP);
+					setCategory(Cat.UNKNOWN);
+			}
+		}
+		
 		for (Obj obj : ObjSTR.keySet()) {
 			if (keys.containsKey("seamark:" + ObjSTR.get(obj) + ":system")) {
@@ -1065,7 +1161,4 @@
 		
 		dlg.panelMain.syncButtons();
-		dlg.panelMain.panelChan.syncButtons();
-		dlg.panelMain.panelHaz.syncButtons();
-		dlg.panelMain.panelMore.panelPat.panelCol.syncStack();
 
 		paintlock = false;
